Например TDA7294

 Форум РадиоКот • Просмотр темы - RFM22B
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пт окт 19, 2018 05:42:52



Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
Не в сети
 Заголовок сообщения: RFM22B
СообщениеДобавлено: Вс ноя 28, 2010 02:45:02 
Открыл глаза
Аватар пользователя

Карма: 2
Зарегистрирован: Пт апр 04, 2008 23:51:33
Сообщений: 44
Рейтинг сообщения: 0
Народ кто пробовал работать c rfm22b можете пожалуйста поделиться исходниками на AVR. Мануалы читал, демо на пике смотрел не помогло, глухо, не догоняю видать чего.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вс ноя 28, 2010 08:38:43 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Сб июн 12, 2010 17:19:17
Сообщений: 191
Откуда: Россия, Томск
Рейтинг сообщения: 0
Там все просто, достаточно сходить на сайт и почитать доку
http://www.silabs.com/products/wireless ... 03132.aspx
есть там документ в формате MS Excel позволяет выбрать неоходимую конфигурацию и получить последовательность команд для настройки.
А что за модуль? на каую чстоту?
Я возился с RFM22-433-S2
У вас правда второая ревизия, у неё немного другие команды управления.

_________________
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru


Вернуться наверх
 Профиль WWW  
 
JLCPCB, 10 прототипов ПП всего за $2 и 2 дня доставка!

Крупнейший производитель печатных плат в Китае, 300,000+ заказчиков, 10,000+ он-лайн заказов в день.

Рассчитайте цену онлайн:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вс ноя 28, 2010 17:36:09 
Открыл глаза
Аватар пользователя

Карма: 2
Зарегистрирован: Пт апр 04, 2008 23:51:33
Сообщений: 44
Рейтинг сообщения: 0
Конкретно RFM22B-433-S.


Вернуться наверх
 Профиль  
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Второй конкурс по дизайну печатных плат от PCBWay!
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вс май 08, 2011 05:49:34 
Открыл глаза
Аватар пользователя

Карма: 2
Зарегистрирован: Пт апр 04, 2008 23:51:33
Сообщений: 44
Рейтинг сообщения: 0
Взял за основу http://www.3e-club.ru/view_full.php?id=19&name=rfm22 увы повторить полностью не смог взял 8 меги т.к. 2313 тини небыл она тот момент.

Сваял две платки. Приблуда из перемычек p3 и p4 для того, чтобы можно было включить или отключить усилитель.
Антены представляют из себя два медных покрытых лаком провода 1мм сечением и длиной примерно 17см.

Вроде, все правильно да нихрена не работает. Передачу проверял обыной любительской рацией при поднесении к ней на сантиметра 3-5 в эфире на 434частоте слышен шум от передатчика. Сразу может дело в том, что слишком слабо, т.к. у передатчика мощность куда больше. Помогите народ, два месяца пытаюсь заставить работать да нифига.

Изображение

Код в передатчике
Код:
#include <avr/io.h>    
#include <avr/delay.h>

void LED_OUT(unsigned char val)
{
   DDRD=0xff;
   PORTD = val;
}
void SPI_WRITE(unsigned char Addr, unsigned char data)
{
   unsigned char i=0;
   Addr=Addr|0x80;          // Старший бит в адресе дб равен 1!!!
   
   
   DDRC |=  _BV(1);
   DDRC |=  _BV(2);
   DDRC |=  _BV(3);
   //nSEL=0;
   PORTC &=~ _BV(3);
   _delay_us(10);
   for (i=0; i<8; i++)
   {
      //nSDI=(Addr>>(7-i))&0x01;
      PORTC = ((Addr>>(7-i))&0x01<<PINC1);
      _delay_us(10);
      //nSCK=1;
      PORTC |= _BV(2);
      _delay_us(30);
      //nSCK=0;
      PORTC &=~ _BV(2);
      _delay_us(20);
   }
   for (i=0; i<8; i++)
   {
      //nSDI=(data>>(7-i))&0x01;
      PORTC = ((data>>(7-i))&0x01<<PINC1);
      _delay_us(10);
      //nSCK=1;
      PORTC |= _BV(2);
      _delay_us(30);
      //nSCK=0;
      PORTC &=~ _BV(2);
      _delay_us(20);
   }
   //nSEL=1;                 // выборка чипа
   PORTC |= _BV(3);
   _delay_us(20);       
}

unsigned char SPI_READ(unsigned char Addr)
{
   unsigned char i=0;
   unsigned char data=0;
   Addr=Addr&0x7F;          // Старший бит в адресе дб равен нулю!!!

   DDRC |=  _BV(1);
   DDRC |=  _BV(2);
   DDRC |=  _BV(3);
   //nSEL=0;
   PORTC &=~ _BV(3);
   _delay_us(10);
   for (i=0; i<8; i++)
         {
         //nSDI=(Addr>>(7-i))&0x01;
         PORTC = ((Addr>>(7-i))&0x01<<PINC1);
         _delay_us(10);
         //nSCK=1;
         PORTC |= _BV(2);
         _delay_us(30);
         //nSCK=0;
         PORTC &=~ _BV(2);
         //delay_us(200);
         _delay_us(20);
         //if (i==8) LED_OUT(255);
         }
   for (i=0; i<8; i++)
         {
         //nSCK=1;
         PORTC |= _BV(2);
         _delay_us(30);
         data=data<<1;
         //data|=(nSDO);
         DDRC &=~  _BV(0);
         PORTC &=~ _BV(0);
         data|=(PINC & (1 << PINC0));
         //nSCK=0;
         PORTC &=~ _BV(2);
         _delay_us(20);
         }
   //nSEL=1;                 // выборка чипа
   PORTC |= _BV(3);
   _delay_us(20);       
   return data;
}

void SPI_RFM_INIT (void)
{
   SPI_WRITE(0x06, 0x00); // interrupt all disable
   SPI_WRITE(0x07, 01); // to ready mode
   SPI_WRITE(0x09, 0x7f); // cap = 12.5pf
   SPI_WRITE(0x0a, 0x05); //clk output is 2MHz
   SPI_WRITE(0x0d, 0x00); // GPIO2 for MCLK output
   SPI_WRITE(0x0e, 0x00); //GPIO port use default value
   SPI_WRITE(0x0f, 0x70); // NO ADC used
   SPI_WRITE(0x10, 0x00); //no adc used
   SPI_WRITE(0x12, 0x00); // no temperature sensor used
   SPI_WRITE(0x13, 0x00); // no temperature sensor used
   SPI_WRITE(0x70, 0x20); // no mancheset code, no data whiting, data rate < 30Kbps
   SPI_WRITE(0x1c, 0x04); // IF filter bandwidth
   SPI_WRITE(0x1d, 0x40); // AFC LOOP
   SPI_WRITE(0x1e, 0x08); //AFC timing
   SPI_WRITE(0x20, 0x41); //clock recovery
   SPI_WRITE(0x21, 0x60); //clock recovery
   SPI_WRITE(0x22, 0x27); //clock recovery
   SPI_WRITE(0x23, 0x52); //clock recovery
   SPI_WRITE(0x24, 0x00); //clock recovery timing
   SPI_WRITE(0x25, 0x06); //clock recovery timing
   SPI_WRITE(0x6e, 0x27); // Tx data rate 1
   SPI_WRITE(0x6f, 0x52); // Tx data rate 0
   SPI_WRITE(0x30, 0x8c); // data access control
   SPI_WRITE(0x32, 0xff); // header control
   SPI_WRITE(0x33, 0x42); // // header 3, 2, 1,0 used for head length, fixed packet length, synchronize word length 3, 2,
   SPI_WRITE(0x34, 64); // 64 nibble = 32byte preamble
   SPI_WRITE(0x35, 0x20); //0x35 need to detect 20bit preamble
   SPI_WRITE(0x36, 0x2d); // synchronize word
   SPI_WRITE(0x37, 0xd4);
   SPI_WRITE(0x38, 0x00);
   SPI_WRITE(0x39, 0x00);
   SPI_WRITE(0x3a, 's'); // set tx header
   SPI_WRITE(0x3b, 'o');
   SPI_WRITE(0x3c, 'n');
   SPI_WRITE(0x3d, 'g');
   SPI_WRITE(0x3e, 1); // total tx 17 byte
   SPI_WRITE(0x3f, 's'); // set rx header
   SPI_WRITE(0x40, 'o');
   SPI_WRITE(0x41, 'n');
   SPI_WRITE(0x42, 'g');
   SPI_WRITE(0x43, 0xff); // all the bit to be checked
   SPI_WRITE(0x44, 0xff); // all the bit to be checked
   SPI_WRITE(0x45, 0xff); // all the bit to be checked
   SPI_WRITE(0x46, 0xff); // all the bit to be checked

   SPI_WRITE(0x6d, 0x03); // tx power to Max
   SPI_WRITE(0x79, 0x0); // no frequency hopping
   SPI_WRITE(0x7a, 0x0); // no frequency hopping
   SPI_WRITE(0x71, 0x22); // Gfsk, fd[8] =0, no invert for Tx/Rx data, fifo mode, txclk -->gpio
   SPI_WRITE(0x72, 0x48); // frequency deviation setting to 45k = 72*625
   SPI_WRITE(0x73, 0x0); // no frequency offset
   SPI_WRITE(0x74, 0x0); // no frequency offset
   SPI_WRITE(0x75, 0x53); // frequency set to 434MHz
   SPI_WRITE(0x76, 0x64); // frequency set to 434MHz
   SPI_WRITE(0x77, 0x00);// frequency set to 434MHz

   SPI_WRITE(0x0C,0b00010111);     // GPIO Configuration 0.
   SPI_WRITE(0x0B,0b00011000);     // GPIO Configuration 1.

   SPI_WRITE(0x08, 0x03); // fifo reset
   SPI_WRITE(0x08, 0x00);
   }

void SPI_RFM_INTREAD (void)
{
   char temp;
   temp = SPI_READ(0x03); //read the Interrupt Status1 register
   temp = SPI_READ(0x04);
   SPI_WRITE(0x05, 0x04); // interrupt is anable
}

void main(void){
   unsigned char i,j=0;
   unsigned char a=0;
   _delay_ms(500);

   SPI_RFM_INIT();

   SPI_RFM_INTREAD();

   while(1) {
      LED_OUT(a);
      SPI_WRITE(0x7F, a++);
        SPI_WRITE(0x07, 9);   
      _delay_ms(100);
   }
   
}



Код в приемнике

Код:
#include <avr/io.h>    
#include <avr/delay.h>

void LED_OUT(unsigned char val)
{
   DDRD=0xff;
   PORTD = val;
}
void SPI_WRITE(unsigned char Addr, unsigned char data)
{
   unsigned char i=0;
   Addr=Addr|0x80;          // Старший бит в адресе дб равен 1!!!
   
   
   DDRC |=  _BV(1);
   DDRC |=  _BV(2);
   DDRC |=  _BV(3);
   //nSEL=0;
   PORTC &=~ _BV(3);
   _delay_us(10);
   for (i=0; i<8; i++)
   {
      //nSDI=(Addr>>(7-i))&0x01;
      PORTC = ((Addr>>(7-i))&0x01<<PINC1);
      _delay_us(10);
      //nSCK=1;
      PORTC |= _BV(2);
      _delay_us(30);
      //nSCK=0;
      PORTC &=~ _BV(2);
      _delay_us(20);
   }
   for (i=0; i<8; i++)
   {
      //nSDI=(data>>(7-i))&0x01;
      PORTC = ((data>>(7-i))&0x01<<PINC1);
      _delay_us(10);
      //nSCK=1;
      PORTC |= _BV(2);
      _delay_us(30);
      //nSCK=0;
      PORTC &=~ _BV(2);
      _delay_us(20);
   }
   //nSEL=1;                 // выборка чипа
   PORTC |= _BV(3);
   _delay_us(20);       
}

unsigned char SPI_READ(unsigned char Addr)
{
   unsigned char i=0;
   unsigned char data=0;
   Addr=Addr&0x7F;          // Старший бит в адресе дб равен нулю!!!
   
   DDRC |=  _BV(1);
   DDRC |=  _BV(2);
   DDRC |=  _BV(3);
   DDRC &=~  _BV(0);
   PORTC &=~ _BV(0);
   //nSEL=0;
   PORTC &=~ _BV(3);
   _delay_us(10);
   for (i=0; i<8; i++)
         {
         //nSDI=(Addr>>(7-i))&0x01;
         PORTC = ((Addr>>(7-i))&0x01<<PINC1);
         _delay_us(10);
         //nSCK=1;
         PORTC |= _BV(2);
         _delay_us(30);
         //nSCK=0;
         PORTC &=~ _BV(2);
         //delay_us(200);
         _delay_us(20);
         //if (i==8) LED_OUT(255);
         }
   for (i=0; i<8; i++)
         {
         //nSCK=1;
         PORTC |= _BV(2);
         _delay_us(30);
         data=data<<1;
         //data|=(nSDO);
         
         data|=(PINC & (1 << PINC0));
         //nSCK=0;
         PORTC &=~ _BV(2);
         _delay_us(20);
         }
   //nSEL=1;                 // выборка чипа
   PORTC |= _BV(3);
   _delay_us(20);       
   return data;
   
}

void SPI_RFM_INIT (void)
{
   SPI_WRITE(0x06, 0x00); // interrupt all disable
   SPI_WRITE(0x07, 01); // to ready mode
   SPI_WRITE(0x09, 0x7f); // cap = 12.5pf
   SPI_WRITE(0x0a, 0x05); //clk output is 2MHz
   SPI_WRITE(0x0C,0b00010111);     // GPIO Configuration 0.
   SPI_WRITE(0x0B,0b00011000);     // GPIO Configuration 1.
   SPI_WRITE(0x0d, 0x00); // GPIO2 for MCLK output
   SPI_WRITE(0x0e, 0x00); //GPIO port use default value
   SPI_WRITE(0x0f, 0x70); // NO ADC used
   SPI_WRITE(0x10, 0x00); //no adc used
   SPI_WRITE(0x12, 0x00); // no temperature sensor used
   SPI_WRITE(0x13, 0x00); // no temperature sensor used
   SPI_WRITE(0x70, 0x20); // no mancheset code, no data whiting, data rate < 30Kbps
   SPI_WRITE(0x1c, 0x04); // IF filter bandwidth
   SPI_WRITE(0x1d, 0x40); // AFC LOOP
   SPI_WRITE(0x1e, 0x08); //AFC timing
   SPI_WRITE(0x20, 0x41); //clock recovery
   SPI_WRITE(0x21, 0x60); //clock recovery
   SPI_WRITE(0x22, 0x27); //clock recovery
   SPI_WRITE(0x23, 0x52); //clock recovery
   SPI_WRITE(0x24, 0x00); //clock recovery timing
   SPI_WRITE(0x25, 0x06); //clock recovery timing
   SPI_WRITE(0x6e, 0x27); // Tx data rate 1
   SPI_WRITE(0x6f, 0x52); // Tx data rate 0
   SPI_WRITE(0x30, 0x8c); // data access control
   SPI_WRITE(0x32, 0xff); // header control
   SPI_WRITE(0x33, 0x42);// // header 3, 2, 1,0 used for head length, fixed packet length, synchronize word length 3, 2,
   SPI_WRITE(0x34, 64); // 64 nibble = 32byte preamble
   SPI_WRITE(0x35, 0x20); //0x35 need to detect 20bit preamble
   SPI_WRITE(0x36, 0x2d); // synchronize word
   SPI_WRITE(0x37, 0xd4);
   SPI_WRITE(0x38, 0x00);
   SPI_WRITE(0x39, 0x00);
   SPI_WRITE(0x3a, 's');
   SPI_WRITE(0x3b, 'o');
   SPI_WRITE(0x3c, 'n');
   SPI_WRITE(0x3d, 'g');
   SPI_WRITE(0x3e, 1);     // total tx 1 byte
   SPI_WRITE(0x3f, 's');
   SPI_WRITE(0x40, 'o');
   SPI_WRITE(0x41, 'n');
   SPI_WRITE(0x42, 'g');
   SPI_WRITE(0x43, 0xff); // all the bit to be checked
   SPI_WRITE(0x44, 0xff); // all the bit to be checked
   SPI_WRITE(0x45, 0xff); // all the bit to be checked
   SPI_WRITE(0x46, 0xff); // all the bit to be checked
   SPI_WRITE(0x6d, 0x03); // tx power to max
   SPI_WRITE(0x79, 0x0); // no frequency hopping
   SPI_WRITE(0x7a, 0x0); // no frequency hopping
   SPI_WRITE(0x71, 0x22); // Gfsk, fd[8] =0, no invert for Tx/Rx data, fifo mode, txclk -->gpio
   SPI_WRITE(0x72, 0x48); // frequency deviation setting to 45k = 72*625
   SPI_WRITE(0x73, 0x0); // no frequency offset
   SPI_WRITE(0x74, 0x0); // no frequency offset
   SPI_WRITE(0x75, 0x53); // frequency set to 434MHz
   SPI_WRITE(0x76, 0x64); // frequency set to 434MHz
   SPI_WRITE(0x77, 0x00);// frequency set to 434MHz 

   SPI_WRITE(0x08, 0x03); // fifo reset
   SPI_WRITE(0x08, 0x00);

   SPI_WRITE(0x05, 0x02); // interrupt on recieve packet
}

void SPI_RFM_INTREAD (void)
{
   char temp;
   SPI_WRITE(0x07, 01);    //
   temp=SPI_READ(0x03);    //read the Interrupt Status1 register
   temp=SPI_READ(0x04);
   SPI_WRITE(0x07, 05);
}

void main(void){
   unsigned char i,j=0;
   unsigned char a=0;
   _delay_ms(500);

   SPI_RFM_INIT();
   SPI_RFM_INTREAD();

   while(1) {
   
      LED_OUT(SPI_READ(0x7F));
        SPI_RFM_INTREAD();   
      _delay_ms(100);
   }
   
}


Вернуться наверх
 Профиль  
 
Более 10 000 000 оригинальных новых компонентов

Поставка электронных компонентов под ваш проект

Комплексные решения поставки электронных компонентов

Сэкономьте $30 при первом заказе на сумму боле $200 (только для посетителей нашего форума)
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Пт июл 01, 2011 00:24:55 
Родился
Аватар пользователя

Зарегистрирован: Чт мар 25, 2010 12:25:28
Сообщений: 6
Рейтинг сообщения: 0
Вот какая штука с этими модулями - у них антенна должна передергиваться или на вход приемника или на выход передатчика Подачей сигнала на соответствующие выводы RX_ANT и TX_ANT.
Самостоятельно модуль этого делать не умеет!!!

Есть два варианта решения данной проблемы:
1. Дергать эти выводы микроконтроллером
2. Подключить эти выводы к радио модулю как у вас на схеме. Предварительно настроить GPO_0 GPO_1 как управляющие выходы антенн у вас в коде это сделано следующими строчками:
Код:
   SPI_WRITE(0x0C,0b00010111);     // GPIO Configuration 0.
   SPI_WRITE(0x0B,0b00011000);     // GPIO Configuration 1.

А затем переключать прием и передачу в регистре 0x08 (OPERATING MODE2)
Код:
   SPI_WRITE(0x08,0b00000000);     // GPIO Ant1 -"0" GPIO Ant2 -"1"
   SPI_WRITE(0x08,0b00100000);     //  GPIO Ant1 -"1" GPIO Ant2 -"0"

Более подробно читать в документе - http://www.silabs.com/pages/DownloadDoc.aspx?FILEURL=Support%20Documents/TechnicalDocs/Si4430-31-32.pdf&src=DocumentationWebPart
Страница 60

К сожалению во всех примерах которые я встречал в интернете про это ни чего не говорится.

Еще у вас бок в коде с выходной мощностью
Код:
  SPI_WRITE(0x6d, 0x03); // tx power to Max

Этой строчкой вы устанавливаете мощьность +8 dBm. Дело в том что вы взяли исходный код от RFM22, а у вас RFM22B !

Значение регистров не совпадает подробно все в том же документе страница 39.


Вернуться наверх
 Профиль  
 


Не в сети
 Заголовок сообщения: RFM22B-433-S2
СообщениеДобавлено: Пт фев 10, 2012 12:54:44 
Открыл глаза

Зарегистрирован: Пн май 23, 2011 12:23:39
Сообщений: 78
Рейтинг сообщения: 0
Добрый день, господа. Не знаю куда больше обратиться.
Приобрёл два модуля RFM22B-433-S2. пытаюсь заставить с одного модуля передавать инфу на другой. контроллер мега8.
пытаюсь запрограммировать на codevision стандартными средствами spi.
может у кого-то есть наработки по этой теме?
жду помощи. спасибо.



Тема дубль.
Сюда перенес.

aen


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Пт фев 10, 2012 22:41:59 
Первый раз сказал Мяу!

Зарегистрирован: Ср апр 14, 2010 21:42:24
Сообщений: 34
Откуда: Молдова г,Кишинев
Рейтинг сообщения: 0
Я от суда брал исходник http://www.ulrichradig.de/home/index.ph ... d-atmega88 правда он на WINAVR может что пригодится в нем


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Сб фев 11, 2012 00:16:03 
Открыл глаза
Аватар пользователя

Карма: 2
Зарегистрирован: Пт апр 04, 2008 23:51:33
Сообщений: 44
Рейтинг сообщения: 0
Берите четко тот пример, что в оффдокументации и от туда уже пляшите.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Сб фев 11, 2012 11:36:13 
Открыл глаза

Зарегистрирован: Пн май 23, 2011 12:23:39
Сообщений: 78
Рейтинг сообщения: 0
товарищи
нашёл в интернет такой код запись по SPI

Код:
void SPI_WRITE(unsigned char Addr, unsigned char data)
{
unsigned char i=0;
Addr=Addr|0x80; // Старший бит в адресе дб равен 1!!!

nSEL=0;
delay_us(10);
for (i=0; i<8; i++)
{
nSDI=(Addr>>(7-i))&0x01;
delay_us(10);
nSCK=1;
delay_us(30);
nSCK=0;
delay_us(20);
}
for (i=0; i<8; i++)
{
nSDI=(data>>(7-i))&0x01;
delay_us(10);
nSCK=1;
delay_us(30);
nSCK=0;
delay_us(20);
}
nSEL=1; // выборка чипа
delay_us(20);
}


вроде бы всё понятно, но вот следующий вопрос вот например у меня адрес и данные равно 0х06. по nsdi я так понимаю будут передаваться данные?или я что-то путаю? для чего nSCK=1; а потом через задержку nSCK=0; как должны передаваться данные в протоколе? какая последовательность? спасибо


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Сб фев 11, 2012 11:39:12 
Открыл глаза

Зарегистрирован: Пн май 23, 2011 12:23:39
Сообщений: 78
Рейтинг сообщения: 0
murashh писал(а):
Берите четко тот пример, что в оффдокументации и от туда уже пляшите.


пример на PIC....


вроде нашёл рабочий пример вот разбираюсь....правда он на тини 2313


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Пн фев 13, 2012 15:08:15 
Открыл глаза

Зарегистрирован: Пн май 23, 2011 12:23:39
Сообщений: 78
Рейтинг сообщения: 0
неужели никто не знает?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Пн фев 13, 2012 17:05:34 
Открыл глаза

Зарегистрирован: Пн май 23, 2011 12:23:39
Сообщений: 78
Рейтинг сообщения: 0
с этим куском разобрался )


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Пн фев 20, 2012 14:59:54 
Открыл глаза

Зарегистрирован: Пн май 23, 2011 12:23:39
Сообщений: 78
Рейтинг сообщения: 0
Товарищи на приёмник ничего не поступает ((( что за дела кто может помочь?
код передатчика

Код:
#include <mega8.h>
#include <delay.h>
#include <stdio.h>

#define nIRQ PINC.3   //PINB.3
#define nSEL PORTC.2  //PORTB.2
#define nSCK PORTC.1  //PORTB.1
#define nSDI PORTC.0  //PORTB.0
#define nSDO PINB.2   //PIND.6

void SPI_WRITE(unsigned char Addr, unsigned char data)
{
unsigned char i=0;
Addr=Addr|0x80;          // Старший бит в адресе дб равен 1!!!

nSEL=0;
delay_us(10);
for (i=0; i<8; i++)
        {
        nSDI=(Addr>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        delay_us(20);
        }
for (i=0; i<8; i++)
        {
        nSDI=(data>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        delay_us(20);
        }
nSEL=1;                 // выборка чипа
delay_us(20);
}

unsigned char SPI_READ(unsigned char Addr)
{
unsigned char i=0;
unsigned char data=0;
Addr=Addr&0x7F;          // Старший бит в адресе дб равен нулю!!!

nSEL=0;
delay_us(10);
for (i=0; i<8; i++)
        {
        nSDI=(Addr>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        //delay_us(200);
        delay_us(20);
        //if (i==8) LED_OUT(255);
        }
for (i=0; i<8; i++)
        {
        nSCK=1;
        delay_us(30);
        data=data<<1;
        data|=(nSDO);
        nSCK=0;
        delay_us(20);
        }
nSEL=1;                 // выборка чипа
delay_us(20);
return data;
}

void SPI_RFM_INIT (void)
{
SPI_WRITE(0x06, 0x00); // interrupt all disable
SPI_WRITE(0x07, 01); // to ready mode
SPI_WRITE(0x09, 0x7f); // cap = 12.5pf
SPI_WRITE(0x0a, 0x05); //clk output is 2MHz
SPI_WRITE(0x0d, 0x00); // GPIO2 for MCLK output
SPI_WRITE(0x0e, 0x00); //GPIO port use default value
SPI_WRITE(0x0f, 0x70); // NO ADC used
SPI_WRITE(0x10, 0x00); //no adc used
SPI_WRITE(0x12, 0x00); // no temperature sensor used
SPI_WRITE(0x13, 0x00); // no temperature sensor used
SPI_WRITE(0x70, 0x20); // no mancheset code, no data whiting, data rate < 30Kbps
SPI_WRITE(0x1c, 0x04); // IF filter bandwidth
SPI_WRITE(0x1d, 0x40); // AFC LOOP
SPI_WRITE(0x1e, 0x08); //AFC timing
SPI_WRITE(0x20, 0x41); //clock recovery
SPI_WRITE(0x21, 0x60); //clock recovery
SPI_WRITE(0x22, 0x27); //clock recovery
SPI_WRITE(0x23, 0x52); //clock recovery
SPI_WRITE(0x24, 0x00); //clock recovery timing
SPI_WRITE(0x25, 0x06); //clock recovery timing
SPI_WRITE(0x6e, 0x27); // Tx data rate 1
SPI_WRITE(0x6f, 0x52); // Tx data rate 0
SPI_WRITE(0x30, 0x8c); // data access control
SPI_WRITE(0x32, 0xff); // header control
SPI_WRITE(0x33, 0x42); // // header 3, 2, 1,0 used for head length, fixed packet length, synchronize word length 3, 2,
SPI_WRITE(0x34, 64); // 64 nibble = 32byte preamble
SPI_WRITE(0x35, 0x20); //0x35 need to detect 20bit preamble
SPI_WRITE(0x36, 0x2d); // synchronize word
SPI_WRITE(0x37, 0xd4);
SPI_WRITE(0x38, 0x00);
SPI_WRITE(0x39, 0x00);
SPI_WRITE(0x3a, 's'); // set tx header
SPI_WRITE(0x3b, 'o');
SPI_WRITE(0x3c, 'n');
SPI_WRITE(0x3d, 'g');
SPI_WRITE(0x3e, 1); // total tx 17 byte
SPI_WRITE(0x3f, 's'); // set rx header
SPI_WRITE(0x40, 'o');
SPI_WRITE(0x41, 'n');
SPI_WRITE(0x42, 'g');
SPI_WRITE(0x43, 0xff); // all the bit to be checked
SPI_WRITE(0x44, 0xff); // all the bit to be checked
SPI_WRITE(0x45, 0xff); // all the bit to be checked
SPI_WRITE(0x46, 0xff); // all the bit to be checked

SPI_WRITE(0x6d, 0x03); // tx power to Max
SPI_WRITE(0x79, 0x0); // no frequency hopping
SPI_WRITE(0x7a, 0x0); // no frequency hopping
SPI_WRITE(0x71, 0x23); // Gfsk, fd[8] =0, no invert for Tx/Rx data, fifo mode, txclk -->gpio
SPI_WRITE(0x72, 0x48); // frequency deviation setting to 45k = 72*625
SPI_WRITE(0x73, 0x0); // no frequency offset
SPI_WRITE(0x74, 0x0); // no frequency offset
SPI_WRITE(0x75, 0x53); // frequency set to 434MHz
SPI_WRITE(0x76, 0x64); // frequency set to 434MHz
SPI_WRITE(0x77, 0x00);// frequency set to 434MHz

SPI_WRITE(0x0C,0b00010111);     // GPIO Configuration 0.
SPI_WRITE(0x0B,0b00011000);     // GPIO Configuration 1.

SPI_WRITE(0x08, 0x03); // fifo reset
SPI_WRITE(0x08, 0x00);
}

void SPI_RFM_INTREAD (void)
{
char temp;
temp = SPI_READ(0x03); //read the Interrupt Status1 register
temp = SPI_READ(0x04);
SPI_WRITE(0x05, 0x04); // interrupt is anable
}

void main(void)
{
// Declare your local variables here
unsigned char a=0;

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

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
//USICR=0x00;

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

// 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=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x2F;

PORTC=0b00001000;
DDRC =0b11110111;     // 3-ий бит - только чтение (вход)
PORTB=0b00000100;
DDRB =0b11111011;     // 2-ой бит - только чтение (вход)


delay_ms(500);

SPI_RFM_INIT();

SPI_RFM_INTREAD();



while (1)
      {
        SPI_WRITE(0x7F, a++);
        SPI_WRITE(0x07, 9);     // go to TX-mode
        while (PINC.3)
         {
          PORTB.1=0;
          delay_ms(100);
          printf("work... a=%d \n",a);
         }

        while (!PINC.3)
         {
          PORTB.1=1;
          SPI_RFM_INTREAD();
          delay_ms(100);
          printf("work2...a=%d \n",a);
         }
      };
}


код приёмника

Код:
#include <mega8.h>
#include <delay.h>
#include <stdio.h>

#define nIRQ PINC.3   //PINB.3
#define nSEL PORTC.2  //PORTB.2
#define nSCK PORTC.1  //PORTB.1
#define nSDI PORTC.0  //PORTB.0
#define nSDO PINB.2   //PIND.6

void SPI_WRITE(unsigned char Addr, unsigned char data)
{
unsigned char i=0;
Addr=Addr|0x80;          // Старший бит в адресе дб равен 1!!!

nSEL=0;
delay_us(10);
for (i=0; i<8; i++)
        {
        nSDI=(Addr>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        delay_us(20);
        }
for (i=0; i<8; i++)
        {
        nSDI=(data>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        delay_us(20);
        }
nSEL=1;                 // выборка чипа
delay_us(20);
}

unsigned char SPI_READ(unsigned char Addr)
{
unsigned char i=0;
unsigned char data=0;

nSEL=0;
delay_us(10);
for (i=0; i<8; i++)
        {
        nSDI=(Addr>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        //delay_us(200);
        delay_us(20);
        //if (i==8) LED_OUT(255);
        }
for (i=0; i<8; i++)
        {
        nSCK=1;
        delay_us(30);
        data=data<<1;
        data|=(nSDO);
        nSCK=0;
        delay_us(20);
        }
nSEL=1;                 // выборка чипа
delay_us(20);
return data;
}

void SPI_RFM_INIT (void)
{
SPI_WRITE(0x06, 0x00); // interrupt all disable
SPI_WRITE(0x07, 01); // to ready mode
SPI_WRITE(0x09, 0x7f); // cap = 12.5pf
SPI_WRITE(0x0a, 0x05); //clk output is 2MHz
SPI_WRITE(0x0C,0b00010111); //GPIO Configuration 0
SPI_WRITE(0x0B,0b00011000); //GPIO Configuration 1
SPI_WRITE(0x0d, 0x00); // GPIO2 for MCLK output
SPI_WRITE(0x0e, 0x00); //GPIO port use default value
SPI_WRITE(0x0f, 0x70); // NO ADC used
SPI_WRITE(0x10, 0x00); //no adc used
SPI_WRITE(0x12, 0x00); // no temperature sensor used
SPI_WRITE(0x13, 0x00); // no temperature sensor used
SPI_WRITE(0x70, 0x20); // no mancheset code, no data whiting, data rate < 30Kbps
SPI_WRITE(0x1c, 0x04); // IF filter bandwidth
SPI_WRITE(0x1d, 0x40); // AFC LOOP
SPI_WRITE(0x1e, 0x08); //AFC timing
SPI_WRITE(0x20, 0x41); //clock recovery
SPI_WRITE(0x21, 0x60); //clock recovery
SPI_WRITE(0x22, 0x27); //clock recovery
SPI_WRITE(0x23, 0x52); //clock recovery
SPI_WRITE(0x24, 0x00); //clock recovery timing
SPI_WRITE(0x25, 0x06); //clock recovery timing
SPI_WRITE(0x6e, 0x27); // Tx data rate 1
SPI_WRITE(0x6f, 0x52); // Tx data rate 0
SPI_WRITE(0x30, 0x8c); // data access control
SPI_WRITE(0x32, 0xff); // header control
SPI_WRITE(0x33, 0x42); // // header 3, 2, 1,0 used for head length, fixed packet length, synchronize word length 3, 2,
SPI_WRITE(0x34, 64); // 64 nibble = 32byte preamble
SPI_WRITE(0x35, 0x20); //0x35 need to detect 20bit preamble
SPI_WRITE(0x36, 0x2d); // synchronize word
SPI_WRITE(0x37, 0xd4);
SPI_WRITE(0x38, 0x00);
SPI_WRITE(0x39, 0x00);
SPI_WRITE(0x3a, 's'); // set tx header
SPI_WRITE(0x3b, 'o');
SPI_WRITE(0x3c, 'n');
SPI_WRITE(0x3d, 'g');
SPI_WRITE(0x3e, 1); // total tx 17 byte
SPI_WRITE(0x3f, 's'); // set rx header
SPI_WRITE(0x40, 'o');
SPI_WRITE(0x41, 'n');
SPI_WRITE(0x42, 'g');
SPI_WRITE(0x43, 0xff); // all the bit to be checked
SPI_WRITE(0x44, 0xff); // all the bit to be checked
SPI_WRITE(0x45, 0xff); // all the bit to be checked
SPI_WRITE(0x46, 0xff); // all the bit to be checked

SPI_WRITE(0x6d, 0x03); // tx power to Max
SPI_WRITE(0x79, 0x0); // no frequency hopping
SPI_WRITE(0x7a, 0x0); // no frequency hopping
SPI_WRITE(0x71, 0x23); // Gfsk, fd[8] =0, no invert for Tx/Rx data, fifo mode, txclk -->gpio
SPI_WRITE(0x72, 0x48); // frequency deviation setting to 45k = 72*625
SPI_WRITE(0x73, 0x0); // no frequency offset
SPI_WRITE(0x74, 0x0); // no frequency offset
SPI_WRITE(0x75, 0x53); // frequency set to 434MHz
SPI_WRITE(0x76, 0x64); // frequency set to 434MHz
SPI_WRITE(0x77, 0x00);// frequency set to 434MHz

SPI_WRITE(0x08, 0x03); // fifo reset
SPI_WRITE(0x08, 0x00);
}

void SPI_RFM_INTREAD (void)
{
char temp;
SPI_WRITE(0x07,01);
temp = SPI_READ(0x03); //read the Interrupt Status1 register
temp = SPI_READ(0x04);
SPI_WRITE(0x07, 0x05); // interrupt is anable
}

void main(void)
{
// Declare your local variables here
unsigned char a=0;

PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;

TCCR0=0x00;
TCNT0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
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=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x2F;

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


 PORTC.3=1;
  DDRC.3=0;
  PORTB.2=1;
  DDRB.2=0;

delay_ms(500);
    printf("begin1\n");
SPI_RFM_INIT();
     printf("begin2\n");
SPI_RFM_INTREAD();

     printf("begin3\n");

while (1)
     {
     if(!PINC.3)
         {
          a=SPI_READ(0x7F);
          printf("work... a=%d \n",a);
          SPI_RFM_INTREAD();
          while (!PINC.3);
         }
     }
}


хочу попробовать передавать число а=0..255 но тишина (((


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Пн фев 20, 2012 15:22:50 
Модератор
Аватар пользователя

Карма: 72
Зарегистрирован: Ср ноя 26, 2008 17:34:25
Сообщений: 13511
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Товарищи, ну вы хоть вложениями такие огромные простыни делайте. А то читать тему невозможно...


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вт фев 21, 2012 12:17:50 
Открыл глаза

Зарегистрирован: Пн май 23, 2011 12:23:39
Сообщений: 78
Рейтинг сообщения: 0
неужели никто не хочет помочь начинающему (((( печально


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вт фев 21, 2012 12:49:27 
Вымогатель припоя
Аватар пользователя

Карма: 2
Зарегистрирован: Пт апр 15, 2011 22:11:22
Сообщений: 698
Откуда: Россия, Ставропольский край
Рейтинг сообщения: 0
yuta_86 писал(а):
неужели никто не хочет помочь начинающему (((( печально


Здесь видел http://www.3e-club.ru/view_full.php?id=19&name=rfm22 но там не для STM
И поищи ещё информацию по RFM12 например тут http://electronix.ru/forum/index.php?sh ... 6&hl=RFM22


Последний раз редактировалось BigallS Вт фев 21, 2012 12:54:15, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вт фев 21, 2012 12:50:32 
Открыл глаза

Зарегистрирован: Пн май 23, 2011 12:23:39
Сообщений: 78
Рейтинг сообщения: 0
код частично брал и оттуда.....


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вт фев 21, 2012 13:00:38 
Вымогатель припоя
Аватар пользователя

Карма: 2
Зарегистрирован: Пт апр 15, 2011 22:11:22
Сообщений: 698
Откуда: Россия, Ставропольский край
Рейтинг сообщения: 0
yuta_86 писал(а):
код частично брал и оттуда.....


И здесь ещё видел http://forum.easyelectronics.ru/viewtop ... FM#p117021 но под AVR


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вт фев 21, 2012 13:07:15 
Открыл глаза

Зарегистрирован: Пн май 23, 2011 12:23:39
Сообщений: 78
Рейтинг сообщения: 0
видел и это (((


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вт фев 21, 2012 22:43:53 
Вымогатель припоя
Аватар пользователя

Карма: 2
Зарегистрирован: Пт апр 15, 2011 22:11:22
Сообщений: 698
Откуда: Россия, Ставропольский край
Рейтинг сообщения: 0
yuta_86 писал(а):
видел и это (((


Может что от другого модуля пригодится http://we.easyelectronics.ru/part/radio ... rfm70.html
:cry: под STM трудно найти

ещё здесь немного есть http://electronix.ru/forum/index.php?showtopic=93842


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу 1, 2, 3, 4  След.



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y