Как я могу создать сериал и читать с определенной частотой на Teensy - PullRequest
0 голосов
/ 23 января 2019

Я думаю, что мой вопрос скорее о непонимании, но вот обзор:

Я пытаюсь обсудить со старым Mitsubishi, который использует последовательную связь.Инициализация работает, переключая K-Line на 5 бодах (этот метод, кажется, используется в другом месте), затем пропускает K-Line как INPUT, читает некоторый код, и после этого вы можете читать и писать непосредственно на K-Line.Детали упомянутого протокола (и тот факт, что мы используем только одну строку) детализированы здесь .

Это меня немного расстраивает, так как я привык к выводу TX ивывод RX, не нужно переключать вывод между TX и RX после каждого чтения и записи, но давайте предположим, что это работает.

Как настроить последовательную связь (укажите скорость передачи и RX / TXконтакты, которые здесь будут такими же) на Teensy 3.2?(классический Arduino C ++ материал)

Или, может быть, у меня может быть два контакта, каждый из которых подключен к K-Line.Это физически то же самое, но позвольте мне определить его в программном обеспечении как стандартный серийный номер.

Вот код, написанный на данный момент:

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 голосов
/ 23 января 2019

Технически вы не можете связать RX и TX вместе, потому что аппаратный последовательный модуль (такой как внутри Teensy) по умолчанию будет поддерживать TX на высоком уровне, поэтому RX также будет всегда высоким. Вам необходимо настроить свой вывод иногда как вход, иногда как выход.

Вы не можете использовать аппаратный последовательный модуль, потому что контакты TX и RX предопределены и разделены, и вы должны попробовать использовать программную библиотеку последовательной эмуляции, такую ​​как https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

Попробуйте изменить код, чтобы добавить функцию, чтобы при необходимости перенастроить свой уникальный вывод в качестве входа или выхода, и объявить один и тот же вывод для TX и RX.

edit: аппаратный подход заключается в использовании аналогового мультиплексора, такого как MAX4619. Таким образом, вы можете использовать аппаратный последовательный модуль на Teensy, подключить TX и RX к выводам X0 / X1 мультиплексора и K-линию на выводе X. Командный вывод A мультиплексора можно переключать с помощью Teensy GPIO. Я не проверял этот подход, потому что у меня нет такого типа машины, но, возможно, стоит попробовать.

edit2: чтобы более конкретно ответить на вопрос оператора, контакты последовательных модулей подросткового модуля жестко закреплены. На 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);

...