如何创建序列并以一定的频率在Teensy上读取

时间:2019-01-23 04:39:14

标签: arduino serial-port teensy

我认为我的问题更多是缺乏理解力,但这是一个概述:

我正试图与使用串行通信的老三菱进行讨论。初始化通过以5个波特率切换K线(此技术似乎在其他地方使用)来进行,然后将K线作为INPUT传递,读取一些代码,然后您可以直接在K线上进行读写。 here详细说明了该协议的详细信息(以及我们仅使用一行的事实)。

这让我有点困惑,因为我已经习惯了TX引脚和RX引脚,不必在每次读写后都在TX和RX之间切换引脚,但是我们假设这是可行的。

如何在Teensy 3.2上设置串行通信(指定波特率和RX / TX引脚,此处相同)? (经典的Arduino C ++东西)

或者我可以有两个引脚,每个都连接到K线。物理上是相同的,但是允许我在软件中将其定义为标准序列。

这是到目前为止的书面代码:

void setup() {

    // HERE: SETUP SERIAL WITH ONE PIN
    // Or do the two-pins-on-same-wire-thing with HWSerial.begin(15625, SERIAL_8N1); 
    pinMode(DATA_PIN, OUTPUT);


    // MUT Init
    int init = MUT_INIT_CODE; 
    for (int i= 0; i < 9; i++){
        if (init & 1){ 
            digitalWrite(DATA_PIN, HIGH);
            digitalWrite(LED_PIN, HIGH);
        } else {
            digitalWrite(DATA_PIN, LOW);
            digitalWrite(LED_PIN, LOW);
        }
        init >>= 1;
        delay(MUT_INIT_DELAY);
    }

    byte answer[3];
    pinMode(DATA_PIN, INPUT);
    HWSerial.readBytes(answer, 3);

}

谢谢!

1 个答案:

答案 0 :(得分:2)

从技术上讲,您不能将RX和TX绑在一起,因为默认情况下,硬件串行模块(如Teensy中的模块)会将TX驱动为高电平,因此RX也会一直为高电平。您有时需要将引脚配置为输入,有时需要配置为输出。

您不能使用硬件串行模块,因为TX和RX引脚是预定义的且分开的,因此您应该尝试使用软件串行仿真库,例如https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

尝试更改代码以添加功能,以根据需要将唯一的引脚重新配置为输入或输出,并为TX和RX声明相同的引脚。

编辑:硬件方法是使用模拟多路复用器,例如MAX4619。这样,您可以使用Teensy上的硬件串行模块,将TX和RX连接到多路复用器的X0 / X1引脚,以及X引脚上的K线。您可以使用Teensy GPIO切换多路复用器的A命令引脚。 我没有测试这种方法,因为我没有这种车,但是值得尝试一下。

edit2:要更具体地回答op的问题,teensy串行模块的引脚是硬连线的。在Teensy 3.2上,Serial1连接到引脚0/1或5/21,Serial2连接到引脚9/10或26/31,依此类推。列表可在此处使用:https://www.pjrc.com/teensy/td_uart.html 通过调用Serial1.begin(YOUR_BAUD_RATE);来配置波特率。