roboforum.ru

Технический форум по робототехнике.

UART инициализация

UART инициализация

~RideR~ » 04 дек 2011, 09:35

Добрый день Всем!
Я смотрю тут многим помогают. Мне тоже нужна маленькая помощь. На днях спаял MRC40 и решил поиграться с UART, посмотрел, с ним можно многое сделать: ДУ, подключать разные датчики к компу, вести калибровку робота.
Наткнулся на много проектов, но более всего понравился этот: http://chipenable.ru/index.php/programm ... -uart.html
Проблема вот в чём, там используется мега8535 на частоте 8МГц, а у меня мега16 с частотой 16Мгц. Я пишу в WinAVR . Я исправил в мейкфаиле всё под себя: частоту и МК. и поменял регистр UBRR = 103 (16 Мгц, для меги16). В регистрах посмотрел стопбиты, биты четности и размер данных (1 стоп бит, нет четности, 8 бит данных).
Загружаю терминал а он не работает с контроллером! т.е. контроллер что то получает но не то... Я не знаю что делать, я всё менял по разному, читал заного весь даташит на мегу16 (работа с уарт). Никак :(
там есть код if (sym=='q') {LED=1;} - я отсылаю любой символ и светодиод загорается, подскажите пожалуйста какие ещё регистры проверить надо... :cry: :cry: :cry: :cry:

Re: UART инициализация

Angel71 » 04 дек 2011, 15:38

частота, на которой работает чип и скорость уарта влияет на вероятность ошибок при передаче данных. точнее уход частоты уарта от стандартного значения, но сути это не меняет - ошибки при передаче. для уарта 16мгц не очень хорошо подходит, лучше 14.745.600гц.
вероятность ошибки.JPG

если вы кварц пока менять не собираетесь, то выбирете скорость, на которой % ошибок будет как можно ближе к 0. проверьте настройки уарта, чтоб они были одинаковыми и на компьютере и у меги. я обычно вставляю биты данных - 8, чётность - нет, стоповые биты - 1, управление потоком - нет. проверять можно так:
- в меге в бесконечном цикле в компьютер отправлять (с задержками, допустим в 0,5..1сек или ещё больше) какие-нибудь данные. для удобства можно во вложеном цикле от 0 до 255. в любом терминале смотрите, что приходит.
- в меге всё принимаемое по уарт отправлять обратно в компьютер. открыли терминал, отослали данные, получили обратно.
или придумайте свой вариант

Re: UART инициализация

boez » 04 дек 2011, 18:09

Rider же написал, он грузит 103 в UBRR, это 9600 и ошибка там мизерная, нормально должно работать с 16 МГц. Но раз приходит не то, значит похоже скорость таки неправильная. В первую очередь проверить, что контроллер работает на 16 МГц, а не скажем от внутреннего RC на 1 или 8 МГц - фьюзы как выставлены, правильно? Вообще, надо просто написать простейший цикл из двух операций
Код: Выделить всёРазвернуть
while(1) {UDR='A'; _delay_ms(1000);}

И так по кругу. И смотри, что в терминал падает. Если мусор, но раз в секунду - что-то с согласованием уровней. Если не раз в сек, а реже - значит мега не на той частоте работает.

Re: UART инициализация

Angel71 » 04 дек 2011, 19:39

:pardon: для меня что 2, что 0,2 это совсем не вариант для отлова проблемы.

Re: UART инициализация

EasyTech » 10 дек 2011, 15:13

всего один вопрос, кто знает, в CVAVR фьюз запрограммирование это галочка снята или поставленна? а то я путаю. :(


cron
Rambler\'s Top100 Mail.ru counter