Проблемы XBee Pro S3B / XS C при использовании UART с микроконтроллером (AT90CAN64) - PullRequest
0 голосов
/ 22 января 2020

У меня есть два Pro XBee Pro S3B, один из которых подключен к моему компьютеру через USB, а другой подключен к микроконтроллеру AT90CAN64.

Вот настройки для каждого XBee, который я настроил с помощью XCTU:

- A (coordinator)
CE: Indirect Msg Coordinator [1]
ID: 71FF
SH: 13A200
SL: 418CCABF
DH: 13A200
DL: 418CCAB4

- B (router)
CE: Standard Router [0]
ID: 71FF
SH: 13A200
SL: 418CCAB4
DL: 418CCABF

У меня есть оба в прозрачном режиме.

Если я подключу и A, и B к моему компьютеру, если я использую терминал XCTU, я смогу обмениваться сообщениями между ними.

Моя основная проблема заключается в следующем: после включения AT90CAN64, если я подключаю DIN / DOUT (XBee) к TX / RX (AT90CAN64), загружаю XCTU и пытаюсь обмениваться сообщениями, у меня ничего не получается. Однако, если я не подключаю TX / RX - DIN / DOUT, подожду некоторое время, затем я подключаю TX / RX - DIN / DOUT и затем загружаю XCTU, я могу обмениваться сообщениями.

У меня есть заглянул в документацию и форумы и ничего не касается этой проблемы. Кто-нибудь имеет представление о том, что может быть проблемой, или какой-либо ключ к решению этой проблемы?

Ниже вы найдете код, работающий в микроконтроллере:

#ifndef __cplusplus
    #define __cplusplus
#endif

#ifndef F_CPU
    #define F_CPU 16000000
#endif

#include <avr/io.h>
#include <util/delay.h>
#include "usart.h"

void sendTest(void);

void sendTest(){
    USART0_Transmit8(0x07);
}


int main(){


    DDRG |= (1 << PG0)|(1 << PG1)|(1 << PG2)|(1<<PG3);   //Make pins PG[0...3] output.
    PORTG |= (1 << PG0)|(1 << PG1)|(1 << PG2)|(1<<PG3);  //Turn all LEDs off


    PORTG &= ~(1<<PG0); //Turn red LED on
    _delay_ms(30000);
    PORTG |= (1<<PG0); //Turn red LED off
    USART0_Init8(103);
    while (1){

        //test1echo();
        PORTG &= ~(1<<PG0); //Turn red LED on
        sendTest();
        _delay_ms(1000);
        PORTG |= (1<<PG0); //Turn red LED off
    }   
}

1 Ответ

0 голосов
/ 23 января 2020

Посмотрите, как у вас подключен DIN, и, возможно, ваш сигнал RTS.

Я считаю, что если вы держите низкий уровень DIN (последовательный разрыв), вы можете войти в загрузчик модуля XBee. Если в течение некоторого времени вы не взаимодействуете с загрузчиком, он запустит прошивку XBee. IIR C, это то, что происходит, когда RTS высокий.

Если RTS низкий, загрузка с низким DIN будет запускать прошивку XBee по умолчанию 9600 бод и командный режим. Это режим восстановления, если вы не знаете скорость передачи данных модуля.

Вы можете использовать подтягивание на этой линии, если AT90CAN64 запускается с этого вывода ввода / вывода в качестве входного / плавающего.

...