Добрый день уважаемые коты!!
Прошу вашей помощи в проверке работы с радиомодулями RFM70, есть у меня модуль с подключенным датчиком температуры и давления, необходимо реализовать вывод информации по радиоканалу на другой модуль, к которому подключен дисплей, с выводом значений температуры и давления.
1-й модуль - Atmega 8а, к которому порт D подключён датчик температуры PD3(выв 1), порт С датчик давления PС3 (выв 26). Радиомодуль подключён к порту B
Код: Выделить всё
// PIN SETUP
//for atmega 8a
#define DDR_SPI DDRB
#define PORT_SPI PORTB
#define CE PB0
#define CSN PB2
#define SCK PB5
#define MISO PB4
#define MOSI PB3
#define IRQ PB1
2-й модуль - Atmega 32a, к порту А (PA0-PA7 - шина данных) и порту С (управление PC4-PC7 - RD,RES,CS,WR,DC соответственно) подключён дисплей S5230, к порту B радиомодуль
Код: Выделить всё
// PIN SETUP
//Atmega32a
#define DDR_SPI DDRB
#define PORT_SPI PORTB
#define CE PB2
#define CSN PB4
#define SCK PB7
#define MISO PB6
#define MOSI PB5
#define IRQ PD2
В модуле 1 сделал приём данных с датчика температуры (проверил работает - для этого временно подключал дисплей и выводил температуру, потом отключил дисплей и подключил радиомодуль к пинам указанным выше). Инициализацию радиомодуля взял с предыдущей страницы с примеров уважаемого "eess9", пример для передатчика.
В модуле 2 - настроил вывод на дисплей (работает), инициализацию радиомодуля также с примера уважаемого "eess9", пример для приёмника.
В первом модуле в main пытаюсь передать температуру переменная (uint8_t Temperature ), а во втором принять и вывести на экран.
1 модуль - код получение данных с датчика температуры и передача
Код: Выделить всё
int main(void)
{
int PWMValue;
char buffer2[] = ""; //Переменная температуры char
//------------------ Configure LCD1202 ----------------------------
// nlcd_Init();
// _delay_ms(10);
// nlcd_GotoXY(0,0);
// nlcd_PrintF(PSTR("Gauge pressure")); // Выводим строку из программной памяти // Displaying the string of program memory
//-----------------------------------------------------------
// - Buffer for ROM
uint8_t ROM[ 9 ];
//---------------RFM70 init--------------------------------------------
sei();
_delay_ms(1000);
Begin();
setMode(1);
setChannel(28);
setMode(0);//transmit
//setMode(1);//resive
//USART_Init ( MYUBRR );
//UCSRA=0x00;
//UCSRB=0x18;
//UCSRC=0x86;
//UBRRH=0x00;
//UBRRL=0x33;
//PORTA |= (1<<PA4);
//j=0;
//---------------end RFM70 init--------------------------------------------
while(1)
{
//------- работа с датчиком температуры ds18B20
// - Prepare for new cycle
// _delay_ms( 1000 );
memset( ROM, 0, sizeof( ROM ) );
// - Start conversion
OneWire_reset();
OneWire_writeByte( 0xCC, 1 );
OneWire_writeByte( 0x44, 1 );
// - Wait until conversion finished
_delay_ms( 1000 );
// - Read ROM
OneWire_reset();
OneWire_writeByte( 0xCC, 1 );
OneWire_writeByte( 0xBE, 1 );
OneWire_read( ROM, sizeof( ROM ) );
// --- Get 8-bit temperature
// - Construct 16-bit register value from 0 and 1 bytes of ROM.
// - Remove float part (4 right bits) to get integer value
uint8_t Temperature = ((( ROM[ 1 ] << 8 ) | ROM[ 0 ]) >> 4);
//--------------- end--- прочитали данные от датчика температуры
//-----------------RFM70 transmit-------------------------------------
sendPayload(Temperature,1, 0);
//-----------------end RFM70 transmit-------------------------------------
//-- вывод на дисплей - отключено, проверял когда выводил на дисплей
//PWMValue = Temperature; // * 2; // - 40;
/*
buffer2[0]=PWMValue % 10;
PWMValue/=10;
buffer2[1]=PWMValue % 10;
PWMValue/=10;
buffer2[2]=PWMValue % 10;
PWMValue/=10;
buffer2[3]=PWMValue % 10;
PWMValue/=10;
buffer2[4]=PWMValue % 10;
PWMValue/=10;
buffer2[5]=PWMValue % 10;
PWMValue/=10;
buffer2[6]=PWMValue % 10;
PWMValue/=10;
buffer2[7]=PWMValue % 10;
nlcd_GotoXY(0,4);
nlcd_Putc(0x30+buffer2[7]);
nlcd_GotoXY(1,4);
nlcd_Putc(0x30+buffer2[6]);
nlcd_GotoXY(2,4);
nlcd_Putc(0x30+buffer2[5]);
nlcd_GotoXY(3,4);
nlcd_Putc(0x30+buffer2[4]);
nlcd_GotoXY(4,4);
nlcd_Putc(0x30+buffer2[3]);
nlcd_GotoXY(5,4);
nlcd_Putc(0x30+buffer2[2]);
nlcd_GotoXY(6,4);
nlcd_Putc(0x30+buffer2[1]);
nlcd_GotoXY(7,4);
nlcd_Putc(0x30+buffer2[0]);
nlcd_GotoXY(0,5);
nlcd_PrintF(PSTR("Get 8-bit temperature"));
*/
}
}
Модуль 2 приём - main
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include "rfm70.c"
unsigned char fonB, fonG, fonR;
unsigned int i=0;
unsigned int *buffer;
int main(void)
{
io_init();//инит портов для дисплея
LCDInitV2();//инит дисплея s5230
fonR=0; //
fonG=0; //
fonB=255;
CLSLcd(); //очистка дисплея
//выводим на дисплей текст
showstr("Привет",0,50,0,0,128); //Текст, начало X Y, цвет
showstr("BigAll'у",0,80,0,0,128); //Текст, начало X Y, цвет
//------------- для радиомодуля ---------------------
sei();
Begin();
setMode(1);
setChannel(28);
//setMode(0);//transmit
setMode(1);//resive
DDRD |= (1<<PD2);
TCCR0=0b01111010;
TCCR2=0b01111010;
TCCR1A=0b11110001;
TCCR1B=0b00001010;
OCR0=125;
OCR2=125;
OCR1A=125;
OCR1B=125;
i=0;
//------------- end для радиомодуля ---------------------
while(1)
{
//------------- для радиомодуля ---------------------
if (receivePayload(buffer))
{
showstr("Приём",0,100,0,0,255); //это строка для проверки хотябы чтото пришло?
//PORTA=*buffer;
i++;
//PORTA^=(1<<PA4);
if (i == 1)
OCR0=*buffer;
if (i == 2)
OCR2=*buffer;
if (i == 3)
OCR1A=*buffer;
showstr((unsigned char)OCR1A,0,120,0,0,128); //Текст, начало X Y, цве
if (i==4)
{
OCR1B=*buffer;
i=0;
}
showstr((unsigned char)OCR1B,0,150,0,0,128); //Текст, начало X Y, цве
}
else
{
showstr("Нет Приёма",0,100,0,0,55); //это строка для проверки
}
//------------- end для радиомодуля ---------------------
}
}
В результате на дисплее надпись "Нет Приёма". т.е. receivePayload не работает.
Что я делаю неправильно?
Радиомодули покупал в китае, как проверить что они работают?
Может я по пинам неправильно подключил?
P/S. Есть ещё RFM73 могу и их попробовать подключить.