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

 
 
> Проблема с UART в atmega128
Whosthere
сообщение Dec 6 2011, 07:04
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 6-12-11
Пользователь №: 68 700



Добрый день.

Возникла проблема с приемом по UART от компа на микроконтроллер ATMEGA128.
Код программы такой:

Код
.cseg
in r15,UDR0
ldi r17, 47; устанавливаем скорость 9600
out UBRR0L,r17
ldi r16, 18; устанавливаем режим приема
out UCSR0B, r16; данных в 8битном пакете
Receive:
sbis UCSR0A, RXC0; ожидаем приема полного пакета данных
rjmp receive
in r15, UDR0; загружаем данные в R15
rjmp receive


Микроконтроллер тактируется от кварцевого генератора с частотой 7,3728 МГц. Программирую в AVRStudio5.

Суть самой проблемы:
Сигнал на вход микроконтроллера приходит такой, как надо (проверено осциллографом). Но! Посылая что-то, отличное от 0000 0000, я получаю в регистре R15 0хFF. Скорость передачи и там, и там выставлена 9600. Стоп-бит использую один.

Буду благодарен за любые идеи. Заранее спасибо.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kolobok0
сообщение Dec 7 2011, 19:48
Сообщение #2


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Whosthere @ Dec 6 2011, 11:04) *
..ATMEGA128.

Код
.cseg
in r15,UDR0
ldi r17, 47; устанавливаем скорость 9600
out UBRR0L,r17

регистр UBRRxn 16 битный. А вы сколько в него пихаете?
В даташите есть примеры. нафига не используете опыт ранее накопленный до вас?

правильный код (даташит) (входные регистры r17:r16 - тут приведу инициализацию их)
Код
ldi  r16,low(47)
ldi  r17,high(47)
; Set baud rate
out UBRR0H, r17
out UBRR0L, r16


ышо правильнее за место 47 объявить дефайн константу и юзать её...

Цитата(Whosthere @ Dec 6 2011, 11:04) *
Код
ldi r16, 18; устанавливаем режим приема
out UCSR0B, r16; данных в 8битном пакете

Давайте посчитаем...
18(10) = 0b00010010(2)
это Вы взводите биты RXEN0 и RXB80
как уже было сказано выше - 1 бит - это вы погорячились...
достаточно (для поллинга как у вас ниже) бита RXEN0
и ещё. чтоб не путаться и наглядно принято писать такие комбинации:
Код
ldi  r16,(1 << RXEN0)


всякие стоп биты, чётности и т.д. инициализируются в регистре UCSR0C
этого в вашем примере нет.

ещё пять копеек:
прерывания надо запрещать перед тем как это всё делать. после - восстанавливать (а не разрешать) - это так к слову..

Цитата(Whosthere @ Dec 6 2011, 11:04) *
Код
Receive:
sbis UCSR0A, RXC0; ожидаем приема полного пакета данных
rjmp receive

in r15, UDR0; загружаем данные в R15
rjmp receive


Микроконтроллер тактируется от кварцевого генератора с частотой 7,3728 МГц.....


это конечно же круто. но лучше пример из даташита:

Код
USART_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get status and 9th bit, then data from buffer
in r18, UCSRA
in r17, UCSRB
in r16, UDR
; If error, return -1
andi r18,(1<<FE)|(1<<DOR)|(1<<UPE)
breq USART_ReceiveNoError
ldi r17, HIGH(-1)
ldi r16, LOW(-1)
USART_ReceiveNoError:
; Filter the 9th bit, then return
lsr r17
andi r17, 0x01
ret


выкинем 9 бит и имеем
Код
USART_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get status then data from buffer
in r18, UCSRA
in r16, UDR
; If error, return -1
andi r18,(1<<FE)|(1<<DOR)|(1<<UPE)
breq USART_ReceiveNoError
ldi r16, LOW(-1)
USART_ReceiveNoError:
....
; далее ваш текст программы. ретурн, возврат на начало приёма -  хз. единственное хочу сказать, что результат надо куда то выпихивать, сохранять, контролировать...а не тупо просто циклить. а то можно и не увидеть самого главного нечаянно.


при вашей скорости кварца значения делителя 47. При U2X0 = 0 и указанного кварца - он верный. Fuse выставлен на внешний кварц.


из приведённого вами куска, больше всего подозрение вызывает:
не правильная инициализация 16 битного регистра скорости!!!

удачи вам
(круглый)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Whosthere   Проблема с UART в atmega128   Dec 6 2011, 07:04
- - Whosthere   Микроконтроллер установлен на плате savvy128 Прин...   Dec 6 2011, 08:11
- - Палыч   Цитата(Whosthere @ Dec 6 2011, 11:04) Буд...   Dec 6 2011, 09:40
|- - kolobok0   Цитата(Палыч @ Dec 6 2011, 13:40) ...C за...   Dec 6 2011, 11:05
|- - Палыч   Цитата(kolobok0 @ Dec 6 2011, 15:05) точн...   Dec 6 2011, 11:14
- - ILYAUL   Кодldi r16, 18; устанавливаем режим приема Когда р...   Dec 6 2011, 16:12
- - Whosthere   Насколько я понимаю, fuse 103C у меня отключен (в ...   Dec 7 2011, 17:46
|- - Палыч   Флаг RXC кто сбрасывать будет ?   Dec 7 2011, 18:33
- - ILYAUL   Код , плиз , приведите конечный   Dec 7 2011, 19:26
- - Whosthere   Спасибо за советы. Пока проверить возможности нет....   Dec 8 2011, 13:54
- - Whosthere   Увы,проблема не решилась, но я заметил очень стран...   Dec 13 2011, 07:17
|- - kolobok0   Цитата(Whosthere @ Dec 13 2011, 11:17) Ув...   Dec 13 2011, 07:50
|- - Палыч   Цитата(Whosthere @ Dec 13 2011, 11:17) Пр...   Dec 13 2011, 08:13
- - Whosthere   Вероятно такая запись будет больше понятна. Код.c...   Dec 13 2011, 10:39
|- - kolobok0   Цитата(Whosthere @ Dec 13 2011, 14:39) Ве...   Dec 14 2011, 11:04
- - slavik.ksu   у меня вопрос очень похожий: что то прием идет не ...   Dec 15 2011, 12:22
|- - kolobok0   Цитата(slavik.ksu @ Dec 15 2011, 16:22) ....   Dec 16 2011, 07:57
- - slavik.ksu   Цитата(kolobok0 @ Dec 16 2011, 11:57) оче...   Dec 19 2011, 06:53
|- - kolobok0   Цитата(slavik.ksu @ Dec 19 2011, 10:53) п...   Dec 19 2011, 11:17
- - slavik.ksu   ; выполняемые функции: через модуль UART от компью...   Dec 19 2011, 18:00
|- - kolobok0   Цитата(slavik.ksu @ Dec 19 2011, 22:00) l...   Dec 19 2011, 18:43
- - ILYAUL   Частота проца , что 4 мгц?   Dec 19 2011, 18:21
- - slavik.ksu   Да, МК работает на 4МГц. Добавил инициализацию вер...   Dec 20 2011, 14:12
|- - ILYAUL   Цитата(slavik.ksu @ Dec 20 2011, 18:12) Д...   Dec 20 2011, 18:51
|- - kolobok0   Цитата(slavik.ksu @ Dec 20 2011, 18:12) ....   Dec 21 2011, 11:11
- - slavik.ksu   Цитата(ILYAUL @ Dec 20 2011, 22:51) 1. По...   Dec 22 2011, 05:57
- - ILYAUL   Здесь , где жолжна быть cli CODEInit: cli ;++++...   Dec 22 2011, 12:15
- - slavik.ksu   Цитата(ILYAUL @ Dec 22 2011, 16:15) 2. Пр...   Dec 23 2011, 07:06
- - V_G   Фсе ниасилил, НО: Перед чтением UDR настоятельно р...   Dec 23 2011, 07:14
- - slavik.ksu   Цитата(V_G @ Dec 23 2011, 11:14) Фсе ниас...   Dec 23 2011, 08:30
|- - V_G   Цитата(slavik.ksu @ Dec 23 2011, 18:30) P...   Dec 23 2011, 11:39
- - ILYAUL   И уточните ещё , 4 мгц - внешний или внутренний   Dec 23 2011, 10:21
- - slavik.ksu   внутренний   Dec 23 2011, 10:33
|- - ILYAUL   Цитата(slavik.ksu @ Dec 23 2011, 14:33) в...   Dec 23 2011, 12:39
- - slavik.ksu   Цитата(V_G @ Dec 23 2011, 15:39) Если фун...   Dec 23 2011, 12:48
- - V_G   Возможно, я неправильно сформулировал вопрос, пере...   Dec 23 2011, 14:21
- - slavik.ksu   Цитата(V_G @ Dec 23 2011, 18:21) Возможно...   Dec 24 2011, 11:24
|- - zombi   Цитата(slavik.ksu @ Dec 24 2011, 14:24) ...   Dec 24 2011, 14:50
- - V_G   1. А старший разряд в нуле когда-нибудь бывает? Мо...   Dec 24 2011, 11:35
- - slavik.ksu   Цитата(V_G @ Dec 24 2011, 15:35) 1. А ста...   Dec 26 2011, 04:31
|- - V_G   Цитата(slavik.ksu @ Dec 26 2011, 14:31) н...   Dec 26 2011, 12:17
|- - zombi   Цитата(slavik.ksu @ Dec 26 2011, 07:31) Ц...   Dec 27 2011, 19:07
- - ILYAUL   Поставьте кварц из перечисленных в таблице , ...   Dec 26 2011, 10:11
- - slavik.ksu   Цитата(zombi @ Dec 27 2011, 23:07) Я про ...   Dec 28 2011, 07:51
- - V_G   Так и называется, кварц (или кварцевый резонатор, ...   Dec 28 2011, 10:30


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

 


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


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