程序执行在终端连接时在atml atmega16微控制器上停止

时间:2014-01-23 15:31:27

标签: python microcontroller virtual-serial-port

我正试图从http://www.qu-bot.com的qu-bot接收数据。机器人有一个ATML atmega16微控制器。我编写了一个在机器人上运行的程序,该程序将数据输出到其串行端口。然而,只要我连接到控制器,程序就会停止。我通过添加一个beep语句对此进行了测试。只要程序正在运行,机器人就会发出蜂鸣声。当我连接到机器人时,蜂鸣声停止。我尝试了qu-bo支持,他们建议禁用串口上的dtr标志。我这样做但没有快乐。

还有什么我可以尝试的吗? [在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>

1 个答案:

答案 0 :(得分:0)

根据我与微控制器进行串行通信的经验,导致此问题的最可能原因是,当您将串行电缆连接到机器人时,会导致幻像字节(由于连接时发生的电噪声)喜欢它来自控制器 - 这个或控制器正在向机器人发送一个合法的字节。在任何一种情况下,很可能是一个字节到达机器人的串口(即使只是电噪声被误认为是数据字节 - 这是非常常见事件)导致机器人的微控制器调用UART接收中断。如果您没有编写适当的UART接收处理程序(ISR - 中断服务程序)并将其链接到正确的中断向量,那么您的机器人的微控制器就可以进入深空区域。在检测到第一个输入的串行数据字节时 - 并使您的机器人看起来像#34;挂起&#34;。如果你打算做&#34;轮询&#34;串行通信(您的代码手动检查其主循环中接收的字节)而不是中断驱动(输入字节的硬件检测导致您的UART Rx ISR被调用),那么您所要做的就是禁用UART中断和您的问题应该离开。