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

 
 
> HELP! MEGA16 UART, как правильно инициализировать UART?
pimen
сообщение Jul 9 2009, 18:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 30-11-07
Пользователь №: 32 846



Столкнулся с проблемой - не получается инициализировать UART в МЕГЕ16.
Причина: не получается запрограммировать регистр UCSRC, который отвечает за кол-во бит в пакете. Как известно, данный регистр по адресу (0х20(0х40)) совпадает с регистром UBRRH, а выбор того или иного осуществляется записью в бит URSEL определенного значения. Не получается запрограммировать ни тот, ни другой. Требуется РАБОТАЮЩИЙ кусок кода на С для инициализации UART.

Код
C Code Example
#define FOSC 1843200// Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void main( void )
{
:.
USART_Init ( MYUBRR );
:.
}
void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}

- это не заработало (пример из doc8154.pdf, стр 153)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
manul78
сообщение Jul 9 2009, 18:10
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Цитата(pimen @ Jul 9 2009, 22:04) *
Столкнулся с проблемой - не получается инициализировать UART в МЕГЕ16.
Требуется РАБОТАЮЩИЙ кусок кода на С для инициализации UART.


Пожалуйста ! Функция:

/* Инициализация UART при 9600 Bd, tx/rx, 8N1.*/
void uart_init(void)
{
#if F_CPU > 2000000UL && defined(U2X)
UCSRA = _BV(U2X); /* improve baud rate error by using 2x clk */
UBRRL = (F_CPU / (8UL * UART_BAUD)) - 1;
#else
UBRRL = (F_CPU / (16UL * UART_BAUD)) - 1;
#endif
UCSRB = _BV(TXEN) | _BV(RXEN); /* tx/rx enable */
}


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
pimen
сообщение Jul 9 2009, 18:20
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 30-11-07
Пользователь №: 32 846



Цитата(manul78 @ Jul 9 2009, 22:10) *
Пожалуйста ! Функция:


ээээ, спасибо конечно, но требуется код с инициализацией регистра UCSRC
у Вас я его не заметил (
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 9 2009, 18:44
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата
ээээ, спасибо конечно, но требуется код с инициализацией регистра UCSRC
у Вас я его не заметил (


Ну добавьте строчку в процедуру инициализации
Код
UCSRC = (1<<URSEL)|(.........);

там где точки ваши настройки остальных битов регистра UCSRC

Примера инициализации уарта в даташитс на atmega16 вполне работоспособен.
Как проверили что он не работает?

Код
void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}


Сообщение отредактировал mempfis_ - Jul 9 2009, 18:46
Go to the top of the page
 
+Quote Post
pimen
сообщение Jul 9 2009, 18:49
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 30-11-07
Пользователь №: 32 846



Цитата(mempfis_ @ Jul 9 2009, 22:44) *
Ну добавьте строчку в процедуру инициализации
Код
UCSRC = (1<<URSEL)|(.........);

там где точки ваши настройки остальных битов регистра UCSRC


это я уже видел и описано в 1 сообщении...
не заработало...
поэтому и интересуют варианты рабочих программ
отладка проводилась как в AVRStudio, так и в IAR на JTAGICE и JTAGICE mkII (родном)
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 9 2009, 18:57
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(pimen @ Jul 9 2009, 21:49) *
это я уже видел и описано в 1 сообщении...
не заработало...


Так уточните что именно не заработало?
Вы инициализировали уарт а на приёмной стороне нет данных?
Или на RXD/TXD совсем нет никаких сигналов?

Настройки уарта совпадают с настройками на приёмной стороне (битрейт, кол-во стоповых битов, настройка контроля чётности)?
Какой кварц на меге стоит?

А код 100% рабочий - проверено неоднократно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- pimen   HELP! MEGA16 UART   Jul 9 2009, 18:04
||- - pimen   Цитата(mempfis_ @ Jul 9 2009, 22:57) А ко...   Jul 9 2009, 19:11
||- - mempfis_   Нашёл в одном работающем проекте код инициализации...   Jul 9 2009, 19:31
|- - manul78   Цитата(pimen @ Jul 9 2009, 22:20) ээээ, с...   Jul 9 2009, 18:55
- - manul78   Блин ! Чем дальше в лес, тем больше дров ...   Jul 9 2009, 21:00
|- - Сергей Борщ   Цитата(manul78 @ Jul 10 2009, 00:00) Как ...   Jul 9 2009, 21:47
|- - manul78   Цитата(Сергей Борщ @ Jul 10 2009, 01:47) ...   Jul 9 2009, 22:18
|- - Палыч   Цитата(manul78 @ Jul 10 2009, 01:18) Дата...   Jul 10 2009, 05:34
|- - mempfis_   Цитата(manul78 @ Jul 10 2009, 01:18) Если...   Jul 10 2009, 05:41
|- - manul78   Цитата(mempfis_ @ Jul 10 2009, 09:41) Раз...   Jul 10 2009, 07:56
|- - Палыч   Цитата(manul78 @ Jul 10 2009, 10:56) Блин...   Jul 10 2009, 08:32
|- - manul78   Цитата(Палыч @ Jul 10 2009, 12:32) Вот, и...   Jul 10 2009, 12:28
|- - Палыч   Цитата(manul78 @ Jul 10 2009, 15:28) Инте...   Jul 10 2009, 13:03
|- - Сергей Борщ   Цитата(manul78 @ Jul 10 2009, 15:28) Пото...   Jul 10 2009, 13:08
|- - manul78   Цитата(Сергей Борщ @ Jul 10 2009, 17:08) ...   Jul 14 2009, 09:56
- - TechMike   Вот работающий код, mega16+кварц 8мгц, avr studio+...   Jul 10 2009, 07:39
- - pimen   Цитата19.5 USART Initialization ... The following ...   Jul 13 2009, 19:43


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

 


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


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