如何在 Teensy 上创建连续剧并以特定频率阅读
How can I create a serial and read at a certain frequency on a Teensy
我认为我的问题更多是缺乏理解,但这里有一个概述:
我正在尝试与使用串行通信的旧 Mitsubishi 进行讨论。初始化通过以 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);
}
提前致谢!
从技术上讲,您不能将 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:为了更具体地回答操作员的问题,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);
配置
我认为我的问题更多是缺乏理解,但这里有一个概述:
我正在尝试与使用串行通信的旧 Mitsubishi 进行讨论。初始化通过以 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);
}
提前致谢!
从技术上讲,您不能将 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:为了更具体地回答操作员的问题,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);
配置