Как заставить работать UART

Vactorman
Vactorman аватар
Offline
Зарегистрирован: 30.05.2013

И снова здравствуйте, гуру микроконтроллеров!

Суть проблемы: есть небольшая платка с датчиками. Рулит датчиками ATMega328p. Прошивка в нем есть и работает правильно (проверено на ПО для тестирования, предложенном разработчиками). На плате есть два разъема, обозначенные как FTDI и TTL. Если я все понял верно, это обычный UART. И ATMega может работать одновременно с двумя. Дело вот в чем: когда плата подключена к компьютеру через тот же FTDI (через переходник, к USB разъему) - я могу передать на нее команды, она их принимает и дает мне ответ. Теперь подключаю плату к компьютеру (RaspberryPi) через разъем GPIO, а конкретно через пины UART на нем. Raspberry 100% отправляет команды (проверял, подключив ее к компу), но, судя по всему до ATMega они не доходят. В чем может быть проблема? Разница в уровнях напряжения (RaspberryPi работает на 3v3)? 

maksim
Offline
Зарегистрирован: 12.02.2012

Ну кто ж знает в чем у вас там проблема. Подключаете вы правильно? Ну и вроде как расбери не толерантен к 5 вольтам и уровни надо согласовывать.

Mbamba
Offline
Зарегистрирован: 18.06.2013

А если подключить вашу платку так: USB разъем Raspberry -> miniUSB (FDTI) Atmega328 ?

Тогда уровни согласовывать не нужно. В операционной системе появится ttyUSB0. И посмотреть, как дело пойдет.

Vactorman
Vactorman аватар
Offline
Зарегистрирован: 30.05.2013

maksim пишет:

Ну кто ж знает в чем у вас там проблема. Подключаете вы правильно? Ну и вроде как расбери не толерантен к 5 вольтам и уровни надо согласовывать.

Пробовал через микросхему согласования. Результата ноль. Что можно сделать, чтобы хотя-бы понять где ошибка?

Vactorman
Vactorman аватар
Offline
Зарегистрирован: 30.05.2013

Mbamba пишет:

А если подключить вашу платку так: USB разъем Raspberry -> miniUSB (FDTI) Atmega328 ?

Тогда уровни согласовывать не нужно. В операционной системе появится ttyUSB0. И посмотреть, как дело пойдет.

Была такая идея, сейчас сяду проверять.

maksim
Offline
Зарегистрирован: 12.02.2012

Vactorman пишет:

maksim пишет:

Ну кто ж знает в чем у вас там проблема. Подключаете вы правильно? Ну и вроде как расбери не толерантен к 5 вольтам и уровни надо согласовывать.

Пробовал через микросхему согласования. Результата ноль. Что можно сделать, чтобы хотя-бы понять где ошибка?

Не верно подключаете, не то отправляете, мешает FTDI.

Vactorman
Vactorman аватар
Offline
Зарегистрирован: 30.05.2013

В общем, получилось немного не так, как планировалось, но в целом проблема решена в обход. Получилось соединиться через USB->FTDI переходник и работать с /dev/ttyUSB0. Данные пошли, ответ получен. Спасибо! :)

Vactorman
Vactorman аватар
Offline
Зарегистрирован: 30.05.2013

maksim пишет:

Vactorman пишет:

maksim пишет:

Ну кто ж знает в чем у вас там проблема. Подключаете вы правильно? Ну и вроде как расбери не толерантен к 5 вольтам и уровни надо согласовывать.

Пробовал через микросхему согласования. Результата ноль. Что можно сделать, чтобы хотя-бы понять где ошибка?

Не верно подключаете, не то отправляете, мешает FTDI.

 

Пока оставлю как есть, но в будущем нужно будет довести до ума. Буду разбираться с подключением проводов... :)

Mbamba
Offline
Зарегистрирован: 18.06.2013

Только не забывайте держать на вашей плате нормальное внешнее питание. Питания платы от USB порта хватает только-только (от Raspberry). И если внешнего питания нет, то после перезагрузки Raspberry может не увидеть FDTI , соответственно, не появится ttyUSB0. Придется тупо отключать - подключать USB шнурок от платы к USB разъему Raspberry, чтобы вновь определился ttyUSB0.

Vactorman
Vactorman аватар
Offline
Зарегистрирован: 30.05.2013

Питание будет внешним, контакт VCC от FTDI отпаяю после окончания тестирования. Обнаружилась интересная деталь. Подаю в ATMeg'у запрос на идентификацию, в ответ приходит 12 байт, содержащие в себе версию прошивки и другую информацию. Почему-то получается, что время от времени приходят разные данные... Может такое быть из-за нехватки питания?

Вот 10 вариантов ответа на 10 запросов (выровнял колонки для удобства чтения):

36 77 62 7   100 220 3   0   0  0   0   0
36 77 62 0   28  144 245 182 76 150 184 190
36 77 62 7   100 220 3   0   0  0   0   0
36 77 0  182 28  160 251 182 76 38  154 190
36 77 62 7   100 220 3   0   76 246 146 190
36 77 62 7   100 0   247 182 76 54  255 190
36 77 62 7   100 220 0   182 76 198 188 190
36 77 0  182 28  112 248 182 76 246 217 190
36 77 62 7   100 220 3   0   0  182 172 190
36 77 62 7   100 0   249 182 76 198 161 190

А правильный ответ такой:

36 77 62 7 100 220 3 * * * * *

Звездочки означают любые значения.