atmega328p SoftwareSerial to 1.8 TTL
- Войдите на сайт для отправки комментариев
Ср, 21/12/2016 - 14:33
Всем привет!
atmega328p имеет uart порт с уровнем 5в.
При использовании библиотеки SoftwareSerial получаем виртуальный uart с тем же уровнем 5в.
Мне необходимо получить виртуальный uart для общения с железкой, у которой uart (TTL) имеет уровень 1.8в.
Подумал что раз есть библиотека, которая отлично эмулирует работу RX и TX с уровнем 5в. можно сделать библиотеку для получения того же виртуального порта, но с уровнем 1.8в. для RX и TX.
Железный uart я использую для обмена данными с другой железкой, у которой уровень 5в...
Помогите пожалуйста советом или кодом. За рабочую библиотеку, которая сделает виртуальный uart с уровнем 1.8в готов отблагадарить :)
Забыл написать, вопрос хотел решить именно программно, т.е. без добавления физических элементов трансляторов уровня напряжения...
Виртуальный на то он и виртуальный ))) ставьте преобразователи уровней
Виртуальный на то он и виртуальный ))) ставьте преобразователи уровней
Я расчитываю что "Виртуальный" подразумевает преобразование 5в = 1 и 0в = 0 и так далее получаем и передаем данные. Я хочу на том же принципе только UART логика 1.8 Вольт = единица больше 1.17 вольт, ноль меньше 0.45 вольт. Правильно думаю? или такое нельзя программно сделать?
виртуальный подразумевает что силами библиотеки реализован ПРОТОКОЛ, а физика за вами
В даташите на ATmega328P (Table 29-1. Common DC characteristics):
Входное напряжение на пин: 0,3В и менее будет распознано как лог. 0
Входное напряжение на пин: 0,6В и более будет распознано как лог. 1
Поэтому ножка RX должна нормально работать с TTL 1,8В
Выходное напряжение на пине: лог. 0 может быть в пределах от 0В до 0,6В-1,0В
Выходное напряжение на пине: лог. 1 может быть в пределах от 2,1В-4,2В до напряжения питания (VCC).
Поэтому ножка TX не будет нормально работать с TTL 1,8В. Нужен преобразователь уровней.
P.S. Да, программно нельзя менять уровни напряжения.
Выходное напряжение на пине: лог. 0 может быть в пределах от 0В до 0,6В-1,0В
Выходное напряжение на пине: лог. 1 может быть в пределах от 2,1В-4,2В до напряжения питания (VCC).
Поэтому ножка TX не будет нормально работать с TTL 1,8В. Нужен преобразователь уровней.
P.S. Да, программно нельзя менять уровни напряжения.
Спасибо за ответ. Жаль что нельзя программно. Я только не пойму почему? SoftwareSerial библиотека же работает с портами дискретными. А если использовать аналоговые порты МК? Написать библиотеку, где будет прописано, что 1 = 1.8в., а 0 = 0.6в. И по такому принципу эмулировать работу виртуального uart порта с уровнем 1.8в...
Спасибо за ответ. Жаль что нельзя программно. Я только не пойму почему?
Потому что микроконтроллер физически не может менять уровень выходного напряжения лог. 1
А если использовать аналоговые порты МК? Написать библиотеку, где будет прописано, что 1 = 1.8в., а 0 = 0.6в. И по такому принципу эмулировать работу виртуального uart порта с уровнем 1.8в...
У микроконтроллера НЕТ настоящих аналоговых выходов (ЦАП). То, что в Arduino IDE названо аналоговым выходом (функция analogWrite), на самом деле является выходом цифрового ШИМ.
В этом процессоре нет аппаратного ЦАП. Вы в принципе не можете выставить на ноге 1.8 вольта. Аналоговый выход сделан с помощью ШИМ. Для получения 1.8 вольта его надо сгладить. Т.Е. передать получится, но скорость будет никакая. А вообще проблем не вижу, если в 1.8 вольт устройстве есть защитные диоды на входе, достаточно подать ему на вход пятивольтовый сигнал через 10кОм. , если нет - то организовать.
Ясна, спасибо. Буду иметь в виду :)