Ответ в теме: Программирование МК AVR



#24254
Solder
Участник

Приветствую всех форумчан и автора сайта! Изучаю программирование Atmega8 на языке С. Пытаюсь передать температуру измеренную DS18B20 с помощью модуля NRF24L01, по мотивам урока 105 «NRF24L01. Передаём данные». Вот кусок программы на передающей части в основной программе:

int main (void){

while(1)
{
if (TEMPER_Transmit(buf1))
{
USART_Transmit(buf1[0]);
USART_Transmit(buf1[1]);
NRF24L01_Send(buf1);
}
_delay_ms(1000);
}
}
Тут я думаю, все нормально, USART в терминальной программе показывает два байта со значением температуры (например 8А 01), значения меняются при нагреве ds18b20.

В приемной части кусок программы такой:

#define TX_PLOAD_WIDTH 2
uint8_t RX_BUF[TX_PLOAD_WIDTH] = {0};

int main(void){

while(1)
{
uint8_t status=0x01;
if (BitIsClear(PINC,IRQ)) //если нога IRQ упала, значит надо выяснить, может принят байт?
{
status = NRF24_ReadReg(STATUS); //прочитали статус регистр
_delay_us(10);
status = NRF24_ReadReg(STATUS);
if(status & 0x40)
{
NRF24_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH);

Temp_L = RX_BUF[0];
Temp_H = RX_BUF[1];
USART_Transmit(Temp_L);
USART_Transmit(Temp_H);

…// здесь подпрограмма вывода показаний на экран
}
}
Модуль NRF24L01 работает, принимает что-то, USART на терминальной программе показывает постоянные цифры 64 65, снова 64 65 и так далее одно и тоже, значение которой не меняется при изменении температуры в передающей части. Прошу помощи, что в коде не так, как в принимающей части подправить, чтобы получить правильную информацию?