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

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

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

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

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

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

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

 
Опции темы
Непрочитано 12.06.2013, 23:57  
vynt
Почётный гражданин KAZUS.RU
 
Аватар для 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.RU
 
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 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.RU
 
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

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

Сообщение от vynt Посмотреть сообщение
В FUSE отключите JTAG, если его порт попадает на используемые вами выводы меги могут быть и такие глюки.
В 16й меге джтаг в портС. Он не мешает уарту.
Someone вне форума  
Непрочитано 13.06.2013, 00:20  
vynt
Почётный гражданин KAZUS.RU
 
Аватар для 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.RU
 
Аватар для 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.RU
 
Аватар для 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,044
Сказал спасибо: 2,559
Сказали Спасибо 11,882 раз(а) в 5,959 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Глючит uasart в mega16

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

Последний раз редактировалось akegor; 13.06.2013 в 06:30.
akegor вне форума  
Непрочитано 13.06.2013, 08:59  
vynt
Почётный гражданин KAZUS.RU
 
Аватар для 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.RU
 
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 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, время: 21:53.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot