Перейти к содержанию
    

Проблема UART на С микроконтроллер AVR ATmega16

Осваиваю ATmega16, с помощью STK500.

Программирую USART. Взял пример из книги "Программирование микроконтроллеров Atmel на языке С", В.С. Прокопенко, 2012. Книга с диском.

USART работает, но передает "тарабарщину". Что-то с инициализацией (я так думаю)?

Много пытался задавать различные значения скорости:

USART_Init( 0x05 );// 9600

TestUARTATmega16_.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Много пытался задавать различные значения скорости:

USART_Init( 0x05 );// 9600

Зачем много пытаться, надо посмотреть даташит: Table 68. Examples of UBRR Settings for Commonly Used Oscillator Frequencies

из чего следует что 0x05 - неверный ответ для 1МГц и 9600.

Берите в руки осциллограф и в путь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да речь про 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь что UBRR не знаю.
Да ладно:)

Посмотрите *.lss и *.lst или *.i файлы. Поиском в них пройдитесь по ubrr...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю, нужна ли еще инфа ОПу, но сам недавно столкнулся с необходимостью работы с UART, только у 32й меги.

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

Эксперементировать удобнее первое время в Proteus ISIS, правда, терминал в этой программе почему-то не работал, когда в настройках было указано 2 стоповых бита (мега сконфигурирована именно так, USBS = 1), заработал только с одним :)

 

post-77607-1374326772_thumb.jpg

post-77607-1374326784_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...