Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Глючит uasart в mega16

Непрочитано 12.06.2013, 23:57  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Цитата:
void USART_Init(unsigned int ubrr) { unsigned char a; UCSRB = 0x00; //disable while setting baud rate while( (UCSRA & (1‹‹RXC)) ) a=UDR; while( (UCSRA & (1‹‹TXC)) ) ; UCSRA = 0x00; //0x02 UCSRC = 0xA6; //parity: Even, char size: 8 bit UBRRL = 0b00110011; //set baud rate lo UBRRH = 0x00; //set baud rate hi /* Enable receiver and transmitter */ UCSRB = (1‹‹RXEN)|(1‹‹TXEN)|(1‹‹RXCIE); /* Set frame format: 8data, 1stop bit, Parity Disabled, Asynchronous Operation*/ UCSRC = (1‹‹URSEL)|(0‹‹USBS)|(3‹‹UCSZ0); }
На сколько я помню, UCSRC нельзя изменять после разрешения работы UARTа. Попробуйте заменить "мою" строчку "UCSRC = 0xA6;" на свою "UCSRC = (1‹‹URSEL)|(0‹‹USBS)|(3‹‹UCSZ0);" (обязательно до "UCSRB = (1‹‹RXEN)|(1‹‹TXEN)|(1‹‹RXCIE);").

В FUSE отключите JTAG, если его порт попадает на используемые вами выводы меги могут быть и такие глюки. А в функцию передачи очередного байта, добавить проверку "while(!(UCSRA & (1‹‹UDRE)) ) ;" - не помешает.

Кстати, кракозябры приходят только как "эхо" в ответ на передачу, или всегда?..
Реклама:

Последний раз редактировалось vynt; 13.06.2013 в 00:07.
vynt вне форума  
Непрочитано 13.06.2013, 00:05  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Далее... Циклы в инициализации посмешили слегка. Смысла в них 0. Для переинициализации не после ресета, достаточно отключить модуль уарт. Принятой практикой является включение модуля после его полной настройки. Ну и в цифрах: 9600, 1 стоп, без чётности, 8 бит символ будет выглядеть так:

UCSRB = 0x00; //disable while setting
UCSRA = 0x00;
UCSRC = 0x86; //set char size 8 bit
UBRRL = 0x33; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98; //rxen, txen, rxcie
Someone вне форума  
Непрочитано 13.06.2013, 00:10  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Сообщение от vynt Посмотреть сообщение
UCSRC нельзя изменять после разрешения работы UARTа.
Можно. Ограничений нет, в даташите в примере инициализации кстати, так и делается. Это просто общепринятая практика, с моей точки зрения логичная - сначала настроил всё, потом включил.
Someone вне форума  
Непрочитано 13.06.2013, 00:13  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Сообщение от vynt Посмотреть сообщение
В FUSE отключите JTAG, если его порт попадает на используемые вами выводы меги могут быть и такие глюки.
В 16й меге джтаг в портС. Он не мешает уарту.
Someone вне форума  
Непрочитано 13.06.2013, 00:20  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Сообщение от Someone Посмотреть сообщение
Циклы в инициализации посмешили слегка.
Зря смеётесь...
Открываете датащит на любую мегу, глава USART - USART Initialization - читаем второй абзац... Краткий не дословный перевод: если во время повторной инициализации (читаем, после сброса например вачдога, или после долгого CLI, да мало ли...) в буфере приёмника находятся непрочитанные данные, прерывания приёмника не будет происходить. И это правда! Что самое ужасное, испытал на практике, на завершённом казалось бы устройстве, в серийном производстве несколько лет... Сколько ж эти две строчки мне нервов потрепали...
з.ы.
пока я их не добавил
vynt вне форума  
Непрочитано 13.06.2013, 00:26  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Сообщение от Someone Посмотреть сообщение
Можно. Ограничений нет, в даташите в примере инициализации кстати, так и делается. Это просто общепринятая практика, с моей точки зрения логичная - сначала настроил всё, потом включил.
после разрешения работы и прерываний (которая разрешается регистром UCSRB) что ещё может разрешить UCSRC?..

По поводу примеров ещё... Вы заметили? В датащите, не в одном примере не используются прерывания, потому эти строчки там действительно и не нужны, т.к. принцип чтения/записи там иной, а именно такой же как и собственно эти "две смешные строчки"...

Последний раз редактировалось vynt; 13.06.2013 в 00:40.
vynt вне форума  
Непрочитано 13.06.2013, 01:20  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Сообщение от Someone Посмотреть сообщение
UCSRB = 0x00; //disable while setting
UCSRA = 0x00;
UCSRC = 0x86; //set char size 8 bit
UBRRL = 0x33; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98; //rxen, txen, rxcie
Если кварц внешний и действительно точно 8МГц, и фьюзы выставлены верно (а они похоже выставлены на внутренний кварц, который может "поплыть" и от питания и от температуры), то с этими настройками UART должен работать.
Остаётся ещё возможная причина - залезание собственных переменных в область памяти спец.регистров (в те же настройки UART), или туда же попадает стек. Хотя... перечитал всё сначала, и даже в протеусе просимулировал с Вашим хексом, не поленился... МК в терминал мусор не даёт, значит скорость выставлена нормально!!! Нужно смотреть осциллографом уровни сигналов на RX ножке MK, TX от терминала отключить! (не знаю что там за преобразователь TTL-RS232, он может глючить при параллельном подключении нескольких абонентов)

Последний раз редактировалось vynt; 13.06.2013 в 01:44.
vynt вне форума  
Непрочитано 13.06.2013, 06:24  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Сообщение от vynt Посмотреть сообщение
Остаётся ещё возможная причина - залезание собственных переменных в область памяти спец.регистров (в те же настройки UART), или туда же попадает стек.
В AVR это крайне маловероятно - доступ разный, эт не STM.
Может, кто-то гадит в буфер? УАРТ заполняет нормально, а потом туда же влазит мусор (скажем, тот же стек)?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 13.06.2013 в 06:30.
akegor вне форума  
Непрочитано 13.06.2013, 08:59  
vynt
Почётный гражданин KAZUS.RUN
 
Аватар для vynt
 
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
vynt на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Сообщение от akegor Посмотреть сообщение
Может, кто-то гадит в буфер? УАРТ заполняет нормально, а потом туда же влазит мусор (скажем, тот же стек)?
Думаю, проблема не в программе. UART настроен верно. Передаёт то что нужно. Принимает нужное количество байт. Могу посоветовать временно отключить модем и преобразователь RS232, а TX МК направить на собственный RX, мигать светодиодом при совпадении переданного и принятого (достаточно передавать один символ, скорее всего мигать будет). Искать причину в преобразователе RS232 и далее (если с частотой всё ОК)

Последний раз редактировалось vynt; 13.06.2013 в 09:02.
vynt вне форума  
Непрочитано 13.06.2013, 09:31  
Someone
Гражданин KAZUS.RUN
 
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

Сообщение от vynt Посмотреть сообщение
И это правда!
Дык и не спорю. . Но если дальше читать даташит, там в разделе flush написано:
The receiver buffer FIFO will be flushed when the Receiver is disabled, i.e., the buffer
will be emptied of its contents. Unread data will be lost.

Иными словами, при выключении и последующем включении всё придёт в исходное состояние, о чём я и сказал в посте.
Someone вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цифровой фильтр на Mega16 AlexPi Песочница (вопросы новичков) 21 10.06.2013 11:35
mega16+hd44780+ds18b20 глючит при работе в железе Jkot Микроконтроллеры, АЦП, память и т.д 3 18.11.2009 15:50
Генерация стабильных импульсов на mega16 moroz_gr Микроконтроллеры, АЦП, память и т.д 14 02.03.2009 17:58
Mega16: вход в противофазу OCR1A и B code-by Микроконтроллеры, АЦП, память и т.д 8 10.11.2008 12:18
Как померять низкочастотный сигнал на лапке Mega16 ? TiN_TM Микроконтроллеры, АЦП, память и т.д 4 25.07.2006 12:53


Часовой пояс GMT +4, время: 02:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.