Serial. Нужен только RX, как использовать TX как обычный цифровой пин ?
- Войдите на сайт для отправки комментариев
Чт, 29/01/2015 - 23:12
Добрый день!
Подскажите пожалуйста, можно ли использовать аппаратный Serial в данном режиме? Не хватает ножек, нужен один цифровой выходной пин. RX используется по назначению, принимает данные от GPS.
В "голом виде" если прогать на асме - точно есть в регистре управления такой бит, который аппаратно задает режим работы ТХ или RX.
Существует ли в методе Serial такая возможность ? Если нет, можно ли каким то образом после инициализации Serial.begin сбросить бит TXen в регистре ?
Заранее спасибо!
Этими пинами можно пользоваться и просто так! Это пины 1,0.На своей самодельной ардуино из-за отсутствия подписи номера пина на плате,пользуюсь часто 0 пином,нормально
Этими пинами можно пользоваться и просто так! Это пины 1,0.На своей самодельной ардуино из-за отсутствия подписи номера пина на плате,пользуюсь часто 0 пином,нормально
И Serial.begin при этом выполнен ?
Минуточку, если вы объявляете serial.begin(9600) например, у вас инициализируется встроенный уарт, RX TX подключаются аппаратно к этому UART, И на ТХ появляется 1. Вопрос в том, как можно отключить его ?
Хорошо, зайдем с другой стороны, как в ардуино сбросить бит в регистре микроконтроллера, типа ассемблерной вставкой "cbi Uscra,6" ?
В HardwareSerial.cpp в процедуре бегин используется такая конструкция
*_ucsra = 1 << U2X0;
sbi(*_ucsrb, RXEN0);
sbi(*_ucsrb, TXEN0);
sbi(*_ucsrb, RXCIE0);
cbi(*_ucsrb, UDRIE0);
Посмотрите реализацию begin
Для меня это пока сложно :) Всю жизнь прогал на асме, так сказать пошаговая стратегия, от сишных конструкций порою мозг набекрень едет :)
Но логически мне кажется так, после Serial.begin написать сbi(*_ucsrb, TXEN0); и ножка отключится от уарта. ?
Апаратно - никак. По пробуйте покопать в сторону SoftwareSerial.
К стате, а ваше устройство будет что то передовать не получив от контроллера готовность ?
Врать не буду, ардуинка дома валяется проверить только вечером можно будет. Ну а так логически похоже на правду :)
SoftwareSerial не подходит, у меня большой дисплей на u8glib , а SoftwareSerial портит всю картину обновления страницы, особенно где большой шрифт.
запустил GPS через аппаратный сериал, единственный минус, при программировании джампик приходится туда сюда ворошить. ТХ не нужен, ничео передавать не нужно, а одного цифрового пина не хвватает до завершения проекта.
Ура! После ковыряния вроде заработало, прошу испытания и одобрения старших товарищей :)
Чтобы затестировать без осцилографа сочинил скетчик.
Имеем 4 управляющих команды отсылаемых с монитора 0-установить порт1( который ТХ) в ноль, 1- установить в еденицу, 2- освободить порт1 от функции ТХ и использовать в своих целях, 3- включить его обратно в работу Сериал.
Наблюдаем на встроенном светодиоде D13 ( загорается на 0.5сек при приеме чегонить по сериалу, индицирует работу RX) и на светодиоде на D1( он же ТХ ).
Запускаем скетч. отсылаем любые цифры и буквы с монитора ( кроме комманд 2 и3 ) Наблюдаем моргания 0.5сек светодиода на Д13, мерцания( при хорошем зрении) светодиода на Д1 и в мониторе возвращается эхом символ который мы отправили, но увеличенный на 1.
Отправляем 0 и 1, возвращается 1 и 2, на Д1 ничего не меняется. Отправляем 2. монитор выдает 3 и кракозябру (если порт был установлен в 0) нажимаем любые кнопки кроме 0 1 2 3 и, видим как моргает Д13, сигнализируя о нормальной работе RX , но в то же время в мониторе нет эха, светодиод Д1 не меняет своего состояния. Нажимаем 0 и 1, наблюдаем как на Д1 светодиод загорается и гаснет соответственно. Значит канал RX точно работает корректно и распознает команды.
Нажимаем 3, восстанавливаем работу ТХ, монитор присылает эхо, Д1 загорается и мерцает на отправку по сериалу.
Вот так вот ! :) Да , недостаток в том, что нельзя подряд вызывать функцию 2 или 3, т.к. сериал отрубится. Это происходит потому что отнимаю и складываю. а надо бы бит логически обнулять или ставить. но пока я непонял как это сделать. В версии 2.0 будет учтено :)
Прошу комментарии, замечания, пожелания :)
Kazanova, вы как фокусник что-то суммируете, вычитаете, специально что бы запутать :) Всё делается проще:
Спасибо! говорю же, с ассемблера я , там все пошагово, а в инструкции к ардуине таких комманд нет (
|=
&= ~)
Хотя как интуитивно догадался, первое это логическое или, а второе логическое и инвертированного аргумента. )