Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USART в асинхронном режиме ATmega 16L
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
alex2k3
Здравствуйте!
Возникла проблема. На ATmega16L нужно применять USART в асинхронном режиме. После прошивки получаю от компьютера либо 0xFF, либо 0xFE.
Пользуюсь мастером компилятора ICCAVR. Думал разные скорости, приема и передачи, но с помощью осциллографа на ноге RXD микроконтроллера вижу данные, с нужной скоростью (9600), со стороны компьютера использую HHD Serial Monitor. Проверил состояния регистров все в норме (выбран асинхронный режим и пр.) Помогите, если кто знает, в чем дело.
prottoss
Цитата(alex2k3 @ May 28 2006, 23:06) *
Здравствуйте!
Возникла проблема. На ATmega16L нужно применять USART в асинхронном режиме. После прошивки получаю от компьютера либо 0xFF, либо 0xFE.
Пользуюсь мастером компилятора ICCAVR. Думал разные скорости, приема и передачи, но с помощью осциллографа на ноге RXD микроконтроллера вижу данные, с нужной скоростью (9600), со стороны компьютера использую HHD Serial Monitor. Проверил состояния регистров все в норме (выбран асинхронный режим и пр.) Помогите, если кто знает, в чем дело.


На днях только скинул драйвер для USART, работающий по прерываниям в http://electronix.ru/forum/index.php?showtopic=10934#, ниже уважаемый defunct выложил программный USART

пользуйтесь на здоровье)))
Laksus
Ну, я бы в первую очередь проверил осцилографом данные
отправляемые с чипа (периодически отправлять одинаковые байты).
Соответствует ли скорость и содержание.

Или просто поморгал бы диодом с периодом несколько секунд,
чтобы замерить частоту если нет осцилографа,
может из-за неправильных фузов не та частота.
___________
Александр
2006 05 28

PS
Не совсем понятно из вопроса, на выводе RX чипа
данные правильные, или только 0xFF 0xFE.
То есть глючить чип или компьютер.
alex2k3
На данном этапе мне важно принимать данные, а не передаватьих на компьютер.
Осциллограмма на пине RX соответсвуют тому что я передаю, т.е. к контроллеру поступают правильные данные.
После чего генерируется прерывание о завершении приема и вывод на дисплей значение регистра UDR, который о содержит те самые 0xFF или 0xFE. Причем нет никакой зависимости, абсолютно произвольно. Прочитал что в модулях USART есть буффер FIFO, который и содержит принятые данные. Возникает такое вопрос: как в асинхронном режиме работать с этим буффером? Как с регистром или как с буффером(FIFO).
Спасибо за ссылки буду смотреть и экспериментировать!
defunct
Цитата(alex2k3 @ May 28 2006, 19:14) *
На данном этапе мне важно принимать данные, а не передаватьих на компьютер.
Осциллограмма на пине RX соответсвуют тому что я передаю, т.е. к контроллеру поступают правильные данные.
После чего генерируется прерывание о завершении приема и вывод на дисплей значение регистра
UDR, который о содержит те самые 0xFF или 0xFE. Причем нет никакой зависимости, абсолютно произвольно.

посмотрели бы примеры, которых тут немало насоветовали..
А так мне кажется проблема у вас тривиальная или забыли делитель UBRR установить или Fuses (CKSEL3..1) настроить на требуемый тактовый генератор.

Цитата
Прочитал что в модулях USART есть буффер FIFO, который и содержит принятые данные. Возникает такое вопрос: как в асинхронном режиме работать с этим буффером? Как с регистром или как с буффером(FIFO).

Как с регистром. FIFO буфера как такового нет. Есть два регистра, сдвиговый в котором собирается кадр (вам он недоступен) и регистр данных UDR в который принятый кадр отгружается по приходу стоп бита.
(если не успеете прочитать данные из UDR до того как придет следующий кадр - данные потеряются).
Laksus
Цитата
На данном этапе мне важно принимать данные, а не передаватьих на компьютер.

____
_ Я имел ввиду, что увидев что идет с чипа, можно убедится в том,
что все настройки UART сделаны правильно, и если неправильно,
то что надо подправить.
____
_О буфере,
если на чип идут данные, а он занят чем нибудь и не может их
сразу взять из UDR(Receive) то они там полежат, подождут.
И никаких особенных процедур обработки не требуют.
Просто по мере освобождения (при чтении)регистра UDR(Receive) они
в него, аппаратно, запихиваются.
__________
Александр
2006 05 28
alex2k3
Да действительно вся проблема была в конфигурационных ячейках CKSEL3..1, надо было установить нужную частоту.
Спасибо асем за помощь!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.