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

 
 
 
Reply to this topicStart new topic
> Проблема UART на С микроконтроллер AVR ATmega16
badik
сообщение May 29 2013, 05:48
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 29-11-06
Из: Екатеринбург
Пользователь №: 22 890



Осваиваю ATmega16, с помощью STK500.
Программирую USART. Взял пример из книги "Программирование микроконтроллеров Atmel на языке С", В.С. Прокопенко, 2012. Книга с диском.
USART работает, но передает "тарабарщину". Что-то с инициализацией (я так думаю)?
Много пытался задавать различные значения скорости:
USART_Init( 0x05 );// 9600

Прикрепленные файлы
Прикрепленный файл  TestUARTATmega16_.txt ( 2.83 килобайт ) Кол-во скачиваний: 48
 
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 29 2013, 07:19
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(badik @ May 29 2013, 09:48) *
Много пытался задавать различные значения скорости:
USART_Init( 0x05 );// 9600

Зачем много пытаться, надо посмотреть даташит: Table 68. Examples of UBRR Settings for Commonly Used Oscillator Frequencies
из чего следует что 0x05 - неверный ответ для 1МГц и 9600.
Берите в руки осциллограф и в путь!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ARV
сообщение May 29 2013, 08:00
Сообщение #3


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



судя по исходнику, речь про WinAVR. а в этом случае все значительно проще: в комплект WinAVR входит util/setbaud.h, который решает проблему с настройками на раз-два.

начинающему дополнительно можно воспользоваться моими наработками: http://www.simple-devices.ru/articles/7-so...navr-console-io


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
badik
сообщение May 29 2013, 10:51
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 29-11-06
Из: Екатеринбург
Пользователь №: 22 890



Да речь про WinAVR.
Подключил util/setbaud.h
Задал:
#define F_CPU 1000000UL
#define BAUD 9600

Устанавил скорость
void USART_Init( unsigned int UBRR_baud )
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
...
Теперь что UBRR не знаю. STK500 fuse cтоит 1МГц.
Передаю байты на PC Программa Terminal. На 9600 не работает. Стал в Terminal менять скорость. Заработала на 4800?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 29 2013, 12:06
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(badik @ May 29 2013, 14:51) *
Теперь что UBRR не знаю.
Да ладноsm.gif
Посмотрите *.lss и *.lst или *.i файлы. Поиском в них пройдитесь по ubrr...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Invisible_Kid
сообщение Jul 20 2013, 13:27
Сообщение #6





Группа: Новичок
Сообщений: 6
Регистрация: 20-07-13
Пользователь №: 77 607



Не знаю, нужна ли еще инфа ОПу, но сам недавно столкнулся с необходимостью работы с UART, только у 32й меги.
Вот скриншоты из даташита, можно взять просто эту функцию и как аргумент для нее использовать число из таблицы.
Эксперементировать удобнее первое время в Proteus ISIS, правда, терминал в этой программе почему-то не работал, когда в настройках было указано 2 стоповых бита (мега сконфигурирована именно так, USBS = 1), заработал только с одним sm.gif

Прикрепленное изображение

Прикрепленное изображение
Go to the top of the page
 
+Quote Post

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

 


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


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