2014-01-23 1 views
1

Я пытаюсь получить данные от qu-bot по адресу http://www.qu-bot.com. У робота есть ATML atmega16 микроконтроллер. Я написал программу, которая запускается на роботе, который выводит данные на свой последовательный порт. Однако программа останавливается всякий раз, когда я подключаюсь к контроллеру. Я проверил это, добавив звуковой сигнал. Робот подает звуковой сигнал, пока программа работает. Когда я подключаюсь к роботу, звуковой сигнал останавливается. Я попробовал поддержку qu-bo, и они предложили отключить флаг dtr на последовательном порту. Я сделал это, но без радости.Выполнение выполнения программы на микроконтроллере atml atmega16 при подключении терминала

Есть ли что-нибудь еще, что я могу попробовать? [начало кода, запущенного на qu-bot] Примечание: Это написано в каком-то собственном варианте C, который они называют быстрым c. // Этот код отображает функции uart.

int main(void) 
{ 
    INIT(); 
    UART_INIT(57600); 

    UART_PRINT("HELLO!!\n"); 
    DELAYS(1); 
    UART_PRINT("MY NAME IS QU-BOT.\n"); 
    DELAYS(1); 


    UART_PRINT("HELLO!!\n"); 
    UART_PRINT("YOU ARE USING UART SAMPLE CODES.\n"); 

    while(1) 
    { 
     UART_PRINT("test\n"); 

     BEEP(); 
     DELAYS(60); 
    } 
} 

Теперь для моей программы чтения последовательного порта python. Я пробовал эту программу как на raspbian, так и на windows 7 64bit. Я вставляю версию Windows. Версия raspbian имеет другое имя для Linux.

import serial 
import time 
ser=serial.Serial() 
ser.port=8 
ser.baudrate=57600 
ser.setDsrDtr(False) 


print 'initialized' 
flag = ser.isOpen() 
if flag: 
print 'port already open.' 
pass 
else: 
ser.open() # opening the port 'ser' that was just created to receive data 
time.sleep(0.5) 
print 'ready to read' 
print ser 
ser.write('a') 
s=ser.read(4) 
print s 
ser.close() 
Pranav 

P.S. Я проконсультировался по следующим ссылкам.

<https://learn.sparkfun.com/tutorials/terminal-basics/all> 

<http://www.plainlystated.com/2013/06/raspberry-pi-serial-console/> 

<http://elinux.org/RPi_Serial_Connection> 

<https://learn.sparkfun.com/tutorials/terminal-basics/all> 

ответ

0

Основываясь на моем опыте в последовательной связи с микроконтроллерами наиболее вероятной причиной этой проблемы является то, что при подключении последовательного кабеля к роботу он вызывает фантомные байты (из-за электрические помехи, что происходит, когда вы делаете соединение), чтобы выглядеть так, как будто это происходит от контроллера - либо это, либо контроллер отправляет законный байт роботу. В любом случае вполне вероятно, что приход байта в последовательный порт робота (даже если это был только электрический шум, ошибочно принимаемый как байт данных), это общее совпадение ) заставило микроконтроллер робота вызвать прием UART прерывание. Если у вас нет соответствующего обработчика приема UART (ISR - Interrupt Service Routine), записанного и связанного с правильным вектором прерывания, тогда ваш микроконтроллер вашего робота может перейти в «глубокое пространство» при обнаружении первого входящего байта последовательных данных - и сделайте ваш робот «зависающим». Если вы намерены выполнять «опрошенные» последовательные коммуникации (ваш код вручную проверяет принятые байты в основном цикле) вместо управления прерываниями (аппаратное обнаружение входящего байта приводит к вызову UART Rx ISR), то все, что вам нужно сделать чтобы отключить прерывания UART, и ваша проблема должна исчезнуть.

Смежные вопросы