Solder



Ответы в темах

Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Автор
    Сообщения
  • в ответ на: Программирование МК 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 и так далее одно и тоже, значение которой не меняется при изменении температуры в передающей части. Прошу помощи, что в коде не так, как в принимающей части подправить, чтобы получить правильную информацию?

  • Автор
    Сообщения
  • в ответ на: Программирование МК 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 и так далее одно и тоже, значение которой не меняется при изменении температуры в передающей части. Прошу помощи, что в коде не так, как в принимающей части подправить, чтобы получить правильную информацию?

Просмотр 1 сообщения - с 1 по 1 (всего 1)