Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь.

 
Опции темы
Непрочитано 14.11.2009, 18:10  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Однокристальные трансиверы TRC101 от RFM...

Несущую не получить... Чип врубает передатчик только на время, необходимое для передачи пакета, сразу после передачи он отключается
Включите и настройте приемник, и пихайте в передатчик байты. По-другому никак
Реклама:
niXto вне форума  
Непрочитано 14.11.2009, 23:56  
Lexi
Частый гость
 
Регистрация: 26.09.2006
Сообщений: 16
Сказал спасибо: 1
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Lexi на пути к лучшему
По умолчанию Re: Однокристальные трансиверы TRC101 от RFM...

Посмотрите пожалуйста, правильно ли я сформировал инициализацию на 433,925
Цитата:
#define FIFORSTREG 0xCA1B
#define GENCREG 0x80D9
#define AFCCREG 0xC4C7
#define CFSREG 0xA09D // Center Frequency: 434MHz
#define DRVSREG 0xC623 // Data Rate:9579Baud
#define TXCREG 0x9800 // Deviation: 75kHz

#define TXBREG 0xB800
#define RXCREG 0x9481
#define PMCREG 0x8238


RegisterSet(FIFORSTREG);
RegisterSet(GENCREG);
RegisterSet(AFCCREG);
RegisterSet(CFSREG);
RegisterSet(DRVSREG);
RegisterSet(TXCREG);


RegisterSet(PMCREG);
Lexi вне форума  
Непрочитано 17.11.2009, 06:22  
Lexi
Частый гость
 
Регистрация: 26.09.2006
Сообщений: 16
Сказал спасибо: 1
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Lexi на пути к лучшему
По умолчанию Re: Однокристальные трансиверы TRC101 от RFM...

После ряда анализов я пределил что мой MRF49xA вообще не отвечает на команды. Потребляет 8 мА и все... Я включал приемник - ноль изменеий,я подключал передатчик тоже ноль.
вот код проекта:
Код:
#include ‹c:\Program Files\PICC\Devices\18F25K20.h›

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=8000000)

//#include ‹string.h›
//---------------------- настройки пинов -------------------------

#define FINT pin_c0
#define FSK pin_c1
#define IRQ pin_c2
#define SPI_CS pin_c6
#define RESET pin_a6
#define INT pin_a7

#define LED1 pin_b4
#define LED2 pin_b3
#define KN1 pin_b0
#define KN2 pin_b1
//---------------------- настройка параметров 49 ----------------




//-------------------глобальные переменные----------------------
#byte  SSPBUF = 0xFC9  //для прямого обращения к регистру приема по SPI
#byte  WPUB   = 0xF7C
int16 ass;


//-------------------------------------------------------------


//----------------------------------------------------------------
// ВВод регистров
void RegisterSet(int16 setting)
{
int reg1,reg2;        //инициализаия 2-х байтов для передачи 16 битной информации по SPI
reg2=setting;         //записываем в регистр старшую составляющую передающей 16 бтиной переменной
setting=setting››8;   //сдвигаем переменую на 8 битов вправо
reg1=setting;         //записываем в регистр младшую составляюей 16-битоной переменной
output_bit(SPI_CS,0); //устанавливаем в 0 линию CS на трансивере
spi_write(reg1);      //шлем сташую составляющую
ass=SSPBUF;           //после передачи записываем что получили по приему в момент передачи
ass=ass‹‹8;           //сдвигаем переменую на 8 битов влево для приниятия 2-ой части посылки во время передачи
spi_write(reg2);      //отсылем вторую часть 16-ти битной передачи
ass=ass+SSPBUF;       //принимаем что в буфере для приема, и добавляем для получения полной катины по приему 
output_bit(SPI_CS,1); //устанавливаем линию CS на приемнике в 1
delay_ms(1);         //пауза на всякий
}

//---------------------инициализация 49--------------------------
init_mrf49()
{
RegisterSet(0x0000);  
RegisterSet(0x0000);  
 
// RFM12 - Configuration Command
// el : Enable TX register = 1
// ef : Enable RX FIFO buffer = 1
// Select 433 MHz band
// Select 12.5 pF crystal load capacitor
RegisterSet(0x80D8);
 
//RFM12 - Power Management Command
//er : Enable receiver chain = 0
//ebb : Enable baseband = 0
//et : Enable PLL,PA, TX = 0
//es : Enable synthesizer = 0
//ex : Enable crystal oscillator = 0
//eb : Enable low battery detector = 0
//ew : Enable wake-up timer = 0
//dc : Disable clock output = 1
RegisterSet(0x8200);
 
//Set center frequency to 433.92 MHz
RegisterSet(0xA620);
  
//RFM12 - Datarate Command
//Set datarate to 57.47126 kbps
RegisterSet(0xC605);
 
//RFM12 - Receiver Control Command
//p20 : 0=INTin, 1=VDIout = 1
//VDI response time = Slow
//Receiver bandwidth = 400 kHz
//LNA gain = 0 dB
//RSSI threshold = -103 dBm
RegisterSet(0x9620);
 
//RFM12 - Datafilter Command
//al : Clock recovery auto lock = 0
//ml : Clock recovery lock control = 1
//s : 0=digital, 1=analog filter = 0
//DQD threshold = 4
RegisterSet(0xC26C);
 
//RFM12 - FIFO / Reset Mode Command
//al : 0=Sync pattern, 1=Always = 0
//ff : FIFO fill = 0
//dr : Disable high sens. Reset = 1
//FIFO IT level = 8
RegisterSet(0xCA81); // fifo off
  
//RFM12B - synchron pattern command
// new synchron pattern - 2D4D
RegisterSet(0xCE4D);  
  
//RFM12 - AFC Command
//AFC automatic mode = Offset VDI=h
//st : Strobe edge = 0
//fi : Fine mode = 0
//oe : Offset register enable = 1
//en : Calculate offset = 1
//Range limit = +15fres to -16fres
//Max. Deviation = +37.5kHz to -40kHz
RegisterSet(0xC493);
  
//RFM12 - TX Configuration Command
//mp = 0
//Delta f (fsk) = 180 kHz
//Output power = -15 dB
RegisterSet(0x98B5);
  
//RFM12 - Wake-Up Timer Command
//T wakeup = 0 ms
RegisterSet(0xE000);
 
//RFM12 - Low Duty-Cycle Command
//en : Enable low duty-cycle = 0
//Duty-cycle = N/A
RegisterSet(0xC800);
  
//RFM12 - LB Det./Clock Div. Command
//Vlb = 3 V
//Clock output = 10 MHz
RegisterSet(0xC0E8); 


delay_ms(1);

}



void main()
{

setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
// установка подтяжки пинов B0 и B1
WPUB = 0b00000011;
PORT_B_PULLUPS(1);

setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
setup_oscillator(OSC_8MHZ);

//начальные установки пинов, что не обозначено, работает на вход
output_bit(SPI_CS,1);
output_bit(FSK,1);
delay_ms(1000); //подождем запуска генератора

output_bit(LED2,1);
ass=0x4000;

while(ass !=0)
	{
     RegisterSet(0x0000);
     delay_ms(1);
 }   

init_mrf49();  //запускаем настройки

output_bit(LED2,0);

while(1)
   {
   //---------------------------------------------------
   if(!input(KN1))
      {
	  delay_ms(20);
	  if(!input(KN1))
		 {
		 output_bit(LED1,1);
   		 while(!input(KN1));
		 }
      RegisterSet(0x82D8);
	  output_bit(LED1,0);
      }
   //---------------------------------------------------
   if(!input(KN2))
      {
	  delay_ms(20);
	  if(!input(KN2))
		 {
		 output_bit(LED2,1);
   		 while(!input(KN2));
		 }
      RegisterSet(0x8238);
	  output_bit(LED2,0);
      }
   }
}
Lexi вне форума  
Непрочитано 20.11.2009, 08:06  
Lexi
Частый гость
 
Регистрация: 26.09.2006
Сообщений: 16
Сказал спасибо: 1
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Lexi на пути к лучшему
По умолчанию Re: Однокристальные трансиверы TRC101 от RFM...

Все завел!!!!
Успешно передал 5кБ инфы.
Довален как слон.
Проблема было в неправильной конфигурации пика.
Lexi вне форума  
Непрочитано 04.12.2009, 11:46  
henx
Прохожий
 
Регистрация: 13.10.2005
Сообщений: 6
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
henx на пути к лучшему
По умолчанию

Инициализация MRF49 такая
Код:
const long    GENCREG 		=0x80D8  ;   
const long    PMCREG 		=0x8200; 
const long    RXCREG 		=0x9620 ;  
const long    TXBREG 		= 0xB800;
const long    FIFORSTREG	= 0xCA81;	
const long    BBFCREG 		=0xC26C; 
const long   SYNCREG                =0xCE4D;
const long    AFCCREG	            = 0xC457;	
const long    CFSREG 		= 0xA4B0;		
const long    TXCREG		= 0x98f0;		
const long    DRSREG 		= 0xC623;	

//--------------------------------------------------------------------
// MRF49XA_Send_Packet
// Sends a data packet
//--------------------------------------------------------------------
void MRF49XA_Send_Packet(unsigned char *data){

	int a;
	//---- turn off receiver , enable Tx register
	SPI_Command(PMCREG);	             // turn off the transmitter and receiver
	SPI_Command(GENCREG | 0x0080);// Enable the Tx register
	//---- Packet transmission
	// Reset value of the Tx regs are [AA AA], we can start transmission
	//---- Enable Tx
	SPI_Command(PMCREG |0x0020);		// turn on tx
DelayMs(2);
	SPI_CS=0;						// chip select low
       RF_FSEL=1;
		while(!RF_SDO);
			SPI_Write16(TXBREG | 0xAA);	// preamble 
		while(!RF_SDO);
			SPI_Write16(TXBREG | 0x2D);	// sync pattern 1st byte
		while(!RF_SDO);
			SPI_Write16(TXBREG | 0xD4);	// sync pattern 2nd byte
		while(!RF_SDO);	
			SPI_Write16(TXBREG | 0x08);						
		for (a=0;a‹8;a++){				// send payload
			while(!RF_SDO);				// wait for SDO, when buffer data ‹=8 bits
			SPI_Write16(TXBREG | data[a]); // write a byte to tx register
		}
		while(!RF_SDO){}				
			SPI_Write16(TXBREG |0x00);	// write a dummy byte since the previous byte is still in buffer 		
		while (!RF_SDO){}				// wait for the last byte transmission end
     SPI_CS=1;		// chip select high, end transmission
	//---- Turn off Tx disable the Tx register
SPI_Command(PMCREG | 0x0080);		// turn off Tx, turn on the receiver
	SPI_Command(GENCREG | 0x0040);		// disable the Tx register, Enable the FIFO

}
Теперь вопросы.
1.Почему IRQ всегда в нуле?
2. Разве надо слать преамбулу и синхробайты вручную,чтоб приемник распознал пакет?
henx вне форума  
Непрочитано 08.12.2009, 07:18  
Panchiks
Частый гость
 
Регистрация: 21.01.2007
Адрес: г. Владивосток
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Panchiks на пути к лучшему
Радость Re: Однокристальные трансиверы TRC101 от RFM...

Pavel_xx, приветствую.

Очень давно не занимаюсь этой темой, но был приятно удивлен, увидев 25 страниц когда-то заведенного форума.
Откапал схему, вродебы, собирались девайсы по ней. Также в приложении эксельник со значениями регистров - проверял значения регистров, которые генерировала моя программа.
Только вот схема, на текущий момент не актуальна. Там не все ноги юзались, вродебы.
Если будете собирать схему, то желательно распаять все ноги, но на предыдущих страницах это уже обсуждалось. Схему я не придумывал сам, собрал по даташиту.
Вложения:
Тип файла: rar TRC101.rar (209.8 Кб, 301 просмотров)
Тип файла: rar TX_Register_Value.rar (5.5 Кб, 286 просмотров)
Panchiks вне форума  
Непрочитано 16.12.2009, 01:23  
Pavel_xx
Частый гость
 
Регистрация: 07.12.2009
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
Pavel_xx на пути к лучшему
По умолчанию Re: Однокристальные трансиверы TRC101 от RFM...

Сообщение от Panchiks Посмотреть сообщение
Откапал схему, вродебы, собирались девайсы по ней. Также в приложении эксельник со значениями
Panchiks, спасибо большое за файлы.

На данный момент у меня имеется собранная на макетке схема:
ATmega32 + MAX232 + COM-порт.
Так же приобрел в тритоне 2 модуля RM101.

Вот сейчас собираю информацию:
1. как сдружить МК и RM на уровне схемы
2. как сконфигурировать RМ
3. как сдружить МК и RM на уровне программы (Си) в CV AVRе

И если с первым пунктом картина уже нарисовалась.
То со 2ым и 3им не совсем.

Не понимаю почему в коде, котрый выкладывали тут на форуме ноги от МК дергают вручную, не используя SPI?

А ещё даже на данный момент сколько перекопал инета - не нашел полной прошивки под avr на Си ((
Pavel_xx вне форума  
Непрочитано 16.12.2009, 06:07  
Panchiks
Частый гость
 
Регистрация: 21.01.2007
Адрес: г. Владивосток
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Panchiks на пути к лучшему
По умолчанию Re: Однокристальные трансиверы TRC101 от RFM...

Привет, PAVEL_XX!

Соединить RM и контроллер (функционально связать ноги МК и чипа) можно сделать повторя схему, приводимую в мануале на ЧИП - там все просто.
Искать готовую прошивку под конфгурирование чипа с использованием SPI - идея на мой взгляд мертвая, разберитесь сами. SPI работает достаточно просто, в любом даташите на МК приводится описание режимов (ведомый, ведущий и т.п.). Попробуйте для начала передать байт по SPI с МК на МК. Передайте например 10001010, на втором МК поставте в коде прерывание по приему и впишите в процедура зажигание диода, например. Убедившись, что вы умеете передавать по SPI байты и правильно их принимать, вставте вместо второго МК чип RFM. Я уже писал раньше, самй простой способ проверить, что команды в чип залетают и работают - вкл/выкл выход тактовой частоты из чипа, проверить можно обычным осциллографом, только перед глазами нет мануала, уже не помню номер ноги. Убедившись, что вы способны "рулить" чипом можно потыкать его на передачу, прием, изменять мощу и т.п.
Тоесть я вам дя начала предлагаю овладеть SPI, соедините два МК по SPI и потыкайтесь, потом дальше пойдете. А в ручную ипровизировать передачу бит -тема дохлая, я так когда-то программировал синтезатор 145170.
Panchiks вне форума  
Непрочитано 16.12.2009, 06:24  
Panchiks
Частый гость
 
Регистрация: 21.01.2007
Адрес: г. Владивосток
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Panchiks на пути к лучшему
По умолчанию Re: Однокристальные трансиверы TRC101 от RFM...

О, нашел в записной книге (только писалось это в 2007 году, часть кода может быть неверным), тут видно как конфигурится МК в Мастера и передает байт по SPI:
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 21.06.2007
Author : F4CG
Company : F4CG
Comments:


Chip type : ATmega8
Program type : Application
Clock frequency : 10,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/

#include ‹mega8.h›
#include ‹delay.h›
unsigned long i1=0;
// SPI interrupt service routine
interrupt [SPI_STC] void spi_isr(void)
{
unsigned char data;
data=SPDR;
// Place your code here

}

void write_config_data (unsigned int config_word){
PORTB.0=0; // nCS
SPDR=config_word/256;
while (SPSR.7!=1){};
SPDR=config_word%256;
while (SPSR.7!=1){};
PORTB.0=1; // nCS
}


// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=In Func3=Out Func2=Out Func1=In Func0=In
// State7=T State6=T State5=0 State4=T State3=0 State2=0 State1=T State0=T
PORTB=0x00;
DDRB=0x2C;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 78,125 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x53;
SPSR=0x00;

PORTB=0x00;
DDRB=0x2F; // 0.0.1.0.1.1.1.1

PORTC=0x00;
DDRC=0x03; // 0.0.0.0.0.0.1.1

PORTD=0x00;
DDRD=0xA8; // 1.0.1.0.1.0.0.0
PORTB.1=1; // nFSEL

PORTD.7=1;
PORTD.3=1;
PORTD.5=1;
for(i1=1; i1‹90000; i1++); // delay_ms(500)
PORTD.7=0;
PORTD.3=0;
PORTD.5=0;

write_config_data (0x80D0); // Reg_1_Configuration Register
write_config_data (0xC4E7); // Reg_2_Automatic Frequency Adjust Register
write_config_data (0x9880); // Reg_3_Transmit Configuration Register
write_config_data (0xA620); // Reg_5_Frequency Setting Register
write_config_data (0x9580); // Reg_6_Receiver Control Register
write_config_data (0xC22C); // Reg_7_Baseband Filter Register
write_config_data (0xCA83); // Reg_9_FIFO and RESET Mode Configuration Register
write_config_data (0xC611); // Reg_10_Data Rate Setup Register
write_config_data (0x8259); // Reg_11_Power Management Register
write_config_data (0xC01F); // Reg_14_Battery Detect Threshold and Clock Output Register

// Clear the SPI interrupt flag
#asm
in r30,spsr
in r30,spdr
#endasm

// Global enable interrupts
#asm("sei")


while (1)
{


PORTD.7=1;
for(i1=1; i1‹90000; i1++); // delay_ms(500)
PORTD.7=0;

write_config_data (0x8279); // Reg_11_Power Management Register (TX=on)
for(i1=1; i1‹50000; i1++); // delay_ms(500)
PORTB.0=0; // nCS
SPDR=0xB8;
while (SPSR.7!=1){};
//while (PINB.4!=0){};
SPDR=0x2D;
while (SPSR.7!=1){};
//while (PINB.4!=0){};
SPDR=0xD4;
while (SPSR.7!=1){};
//while (PINB.4!=0){};
SPDR=0xAA;
while (SPSR.7!=1){};
//while (PINB.4!=0){};
PORTB.0=1; // nCS
for(i1=1; i1‹50000; i1++); // delay_ms(500)
write_config_data (0x8259); // Reg_11_Power Management Register (TX=off)
for(i1=1; i1‹90000; i1++); // delay_ms(500)
};
}


================================================== ========

А тут ведется прием, вроде:
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 23.06.2007
Author : F4CG
Company : F4CG
Comments:


Chip type : ATmega8
Program type : Application
Clock frequency : 10,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/

#include ‹mega8.h›
#include ‹delay.h›
unsigned char count_1,count_3,count_4,Bytes[5];
int i1=0,i=0;

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here

}

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1‹‹FE)
#define PARITY_ERROR (1‹‹UPE)
#define DATA_OVERRUN (1‹‹OVR)
#define DATA_REGISTER_EMPTY (1‹‹UDRE)
#define RX_COMPLETE (1‹‹RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE‹256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
PORTD.3=1;
for(i1=0; i1‹10000;i1++); // delay_ms(1)
PORTD.3=0;


if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};

Bytes[count_1]=data;
count_1++;
if (count_1==3)
{
count_1=0;
if (Bytes[0]==129) // Write TX data
{
PORTB.0=0; // nCS
for(i=1; i‹3; i++)
{
SPDR=Bytes[i]; // Bytes send
while(SPSR.7!=1){};
}
PORTB.0=1; // nCS
}
if (Bytes[0]==130) // Write config data
{
PORTB.0=0; // nCS
for(i=1; i‹3; i++)
{
SPDR=Bytes[i]; // Byte_1 send
while(SPSR.7!=1){};
}
PORTB.0=1; // nCS
}
if (Bytes[0]==132) // Read Stat Reg and FIFO
{
count_4=28;
}
}
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// Standard Input/Output functions
#include ‹stdio.h›

// SPI interrupt service routine
interrupt [SPI_STC] void spi_isr(void)
{
unsigned char data;
data=SPDR;
/*
// Place your code here
count_3++;
Bytes[count_3]=data;
if (count_3==3)
{
count_3=0;
}
*/
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=In Func3=Out Func2=Out Func1=In Func0=In
// State7=T State6=T State5=0 State4=T State3=0 State2=0 State1=T State0=T
PORTB=0x00;
DDRB=0x2C;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x04;
DDRD=0xAA;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
//GICR|=0x40;
//MCUCR=0x02;
//GIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x40;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 78,125 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x53;
SPSR=0x00;


for(i1=0; i1‹5000000;i1++); // delay_ms(500)

PORTB=0x02;
DDRB=0x2F; // 0.0.1.0.1.1.1.1

PORTC=0x02;
DDRC=0x03; // 0.0.0.0.0.0.1.1

PORTD=0x04;
DDRD=0xAA; // 1.0.1.0.1.0.1.0

PORTD.3=1;
for(i1=0; i1‹10000;i1++); // delay_ms(1)
PORTD.3=0;
PORTD.5=1;
for(i1=0; i1‹10000;i1++); // delay_ms(1)
PORTD.5=0;
PORTD.7=1;
for(i1=0; i1‹10000;i1++); // delay_ms(1)
PORTD.7=0;

// Clear the SPI interrupt flag
#asm
in r30,spsr
in r30,spdr
#endasm

// Global enable interrupts
#asm("sei")

while (1)
{
/*
// Place your code here
count_4++;
if (count_4==29) // Read Stat Reg
{
//GICR=0x00; // Int0 Dis.
SPCR=0xD3; // SPI Int. En.
PORTB.0=0; // nCS
for(i1=0; i1‹10000; i1++); // delay_ms(1)
for(i=1; i‹3; i++)
{
SPDR=0; // Bytes send
for(i1=0; i1‹10000;i1++); // delay_ms(1)
}









delay_ms(1);
SPDR=Byte_1; // Byte_1 read (SReg)
delay_ms(1);
SPDR=Byte_2; // Byte_2 read (SReg)
delay_ms(1);
SPDR=Byte_3; // Byte_3 read (FIFO)
delay_ms(1);
PORTB.0=1; // nCS
SPCR=0x53; // SPI Int. Dis.
delay_ms(1);
UDR=Byte_0; // Return Byte_0
delay_ms(80);
UDR=Byte_1; // Return Byte_1
delay_ms(80);
UDR=Byte_2; // Return Byte_2
delay_ms(80);
UDR=131; // Return 131
delay_ms(80);
UDR=Byte_3; // Return Byte_3
delay_ms(80);
UDR=Byte_3; // Return Byte_3
delay_ms(80);
counter4=0;
//GICR|=0x40; // Falling Edge
//MCUCR=0x02;
//GIFR=0x40;
Byte_3=0;
//Byte_3=SPSR.7;
}
if (count_4==10)
{
counter4=0;
}
*/
};

}

Принятые данные (любые) отправлялись на ПК через RS232. Только спустя столько времени не ручаюсь за правильность всего года и разумность строк и решений.
Panchiks вне форума  
Непрочитано 16.12.2009, 14:34  
Pavel_xx
Частый гость
 
Регистрация: 07.12.2009
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
Pavel_xx на пути к лучшему
По умолчанию Re: Однокристальные трансиверы TRC101 от RFM...

Panchiks, спасибо еще раз за методику перехода на РМ и за код!!!

Действительно, сначало поупражняюсь с проводным SPI
Pavel_xx вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Однокристальные трансиверы CC2500 (СС1100) kassiopay Микроконтроллеры, АЦП, память и т.д 2 07.06.2009 19:08


Часовой пояс GMT +4, время: 22:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot