реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> USART в асинхронном режиме ATmega 16L, Возникла проблема
alex2k3
сообщение May 28 2006, 15:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 15-10-05
Пользователь №: 9 673



Здравствуйте!
Возникла проблема. На ATmega16L нужно применять USART в асинхронном режиме. После прошивки получаю от компьютера либо 0xFF, либо 0xFE.
Пользуюсь мастером компилятора ICCAVR. Думал разные скорости, приема и передачи, но с помощью осциллографа на ноге RXD микроконтроллера вижу данные, с нужной скоростью (9600), со стороны компьютера использую HHD Serial Monitor. Проверил состояния регистров все в норме (выбран асинхронный режим и пр.) Помогите, если кто знает, в чем дело.
Go to the top of the page
 
+Quote Post
prottoss
сообщение May 28 2006, 15:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(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

пользуйтесь на здоровье)))


--------------------
Go to the top of the page
 
+Quote Post
Laksus
сообщение May 28 2006, 15:54
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



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

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

PS
Не совсем понятно из вопроса, на выводе RX чипа
данные правильные, или только 0xFF 0xFE.
То есть глючить чип или компьютер.
Go to the top of the page
 
+Quote Post
alex2k3
сообщение May 28 2006, 16:14
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 15-10-05
Пользователь №: 9 673



На данном этапе мне важно принимать данные, а не передаватьих на компьютер.
Осциллограмма на пине RX соответсвуют тому что я передаю, т.е. к контроллеру поступают правильные данные.
После чего генерируется прерывание о завершении приема и вывод на дисплей значение регистра UDR, который о содержит те самые 0xFF или 0xFE. Причем нет никакой зависимости, абсолютно произвольно. Прочитал что в модулях USART есть буффер FIFO, который и содержит принятые данные. Возникает такое вопрос: как в асинхронном режиме работать с этим буффером? Как с регистром или как с буффером(FIFO).
Спасибо за ссылки буду смотреть и экспериментировать!
Go to the top of the page
 
+Quote Post
defunct
сообщение May 28 2006, 16:45
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

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

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

Как с регистром. FIFO буфера как такового нет. Есть два регистра, сдвиговый в котором собирается кадр (вам он недоступен) и регистр данных UDR в который принятый кадр отгружается по приходу стоп бита.
(если не успеете прочитать данные из UDR до того как придет следующий кадр - данные потеряются).
Go to the top of the page
 
+Quote Post
Laksus
сообщение May 28 2006, 17:00
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Цитата
На данном этапе мне важно принимать данные, а не передаватьих на компьютер.

____
_ Я имел ввиду, что увидев что идет с чипа, можно убедится в том,
что все настройки UART сделаны правильно, и если неправильно,
то что надо подправить.
____
_О буфере,
если на чип идут данные, а он занят чем нибудь и не может их
сразу взять из UDR(Receive) то они там полежат, подождут.
И никаких особенных процедур обработки не требуют.
Просто по мере освобождения (при чтении)регистра UDR(Receive) они
в него, аппаратно, запихиваются.
__________
Александр
2006 05 28
Go to the top of the page
 
+Quote Post
alex2k3
сообщение May 28 2006, 18:11
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 70
Регистрация: 15-10-05
Пользователь №: 9 673



Да действительно вся проблема была в конфигурационных ячейках CKSEL3..1, надо было установить нужную частоту.
Спасибо асем за помощь!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.03081 секунд с 7
ELECTRONIX ©2004-2016