РадиоКот :: USART AT Mega 8.
Например TDA7294

РадиоКот >Лаборатория >Цифровые устройства >

Теги статьи: Добавить тег

USART AT Mega 8.

Автор:
Опубликовано 12.05.2006

Прежде всего, я не претендую на то, что сейчас расскажу вам что-то новое. Это давно написано в даташитах и книгах. Эта статья, для тех, кто туда лезть не хочет, или у кого нет времени. MTh

Понадобился (нам с господином Storm"ом) на диплом некий модулятор цифровых данных. Поток данных нужно было откуда-то брать. Первой идеей был LPT порт. Он параллельный, с ним, на первый взгляд проще работать J. История умалчивает о причинах невозможности работы с LPT на нормальных скоростях. Ну не получилось. Что поделаешь. Решили опробовать RS232.

Прежде всего стоит упомянуть что мы использовали:

1. Связь с портом (терминал) - rs 232 pro
2. Компилятор CodeVisionAVR
3. Программатор STK200/300
4. Max232, Mega8, кварц 4 МГц
5. Музыка гр. Metallica, Dire Straits
6. Книги: Аппаратные средства IBM PC Михаил Гук (офигенная книжка, аппаратчикам - must have), Микроконтроллеры серии Classic.
Ну конечно же бесчисленное количество проводков, элементов обвязки и слов для связки наших мыслей в предложения. Как не прискорбно, пиво (ой простите, что я говорю, молоко) мы не использовали:

CodeVision использовался по причине того, что в нём написано QAM-16 и преобразование Фурье для OFDM модулятора/демодулятора. Кроме всего прочего есть у него классный генератор начального кода. Вот пожалуй с него мы и начнем.

При создании проекта, компилятор сам спрашивает, будем ли мы использовать генератор кода, отвечаем утвердительно, наблюдаем: Выбираем необходимый нам чип и частоту кварца. BootLOader использовать не будем, потому ничего на этой закладке больше не трогаем. Идем на закладку USART: Ставим галочку Transmitter(передатчик), выбираем скорость, которая нас удовлетворяет и ошибки будут минимальны (лучше, конечно чтобы их вообще не было, но так не получится, BaudRateError будет показывать 0,1% минимум, т.к. кварц должен быть не на 4 МГц, а скажем 4,485902 МГц) и параметры связи (в сокращенной форме 8N1) режим асинхронный. Здесь также стоит уточнить, что Мега может работать в синхронном режиме. Нас пока больше ничего не интересует, а потому выбираем File->Generate, Save and exit. Он нам ещё позадает вопросы по поводу имен файлов для сохранения и пр., думаю тут разберетесь.

Чуть не забыл, на закладке настройки USART есть галочка x2. Зачем нужна? Верно, удвоенная скорость передачи. Да, да, да 115200 - не предел. Пробовали завести, работал, один раз. Кодгенератор не совсем корректно воспринимает её, или двойная скорость возможна не всегда, я так и не разобрался. Наблюдаем прелестную картину: есть весь код для того чтобы прямо сейчас начать работу с USART (все регистры уже настроены, ничего править не надо, читайте комментарии, дабы разобраться). Находим в конце файла след структуру:

while (1)
{
// Place your code here

};

Настройки - это конечно хорошо, однако, нам ведь надо чего-то послать, чтобы увидеть, что всё работает. Добавляем след строчку:

while (1)
{
// Place your code here
UDR = "a";
};

Нажимаем кнопочку "Make the project":

Вот сейчас поклонники ассемблера начнут меня гнобить, 2.9% памяти. Достаточно много (при 8 Кб, 2.9% = 232 байта), однако, нас это волновало мало. Кто опишет всё это на ассемблере, буду только рад. )) Если вы видите это окошко, значит всё скомпилировалось и ошибок нет. Открываем PonyProg или AVReal. Открываем окно программирования битов конфигурации (fuses). Это сааааамый щекотливый момент - по идее, нужно лезть в даташит и смотреть, как заставить мегу работать с внешним кварцем (про то, что если фузы настроить неправильно, то м/с в режим последовательного программирования не перейдет, я вообще молчу, будьте внимательны). Я вас так мучить не буду, скажу лишь, что Мега8 на заводе, программируется на работу с внутренним генератором 1МГц. С такой тактовой частотой вы не сможете получить более-менее приличную скорость связи. Мы настроили USART на 19200 при 4 МГц кварце. Значит нужно сделать вот так:

Кому интересно почитает, почему так. Жмем write, пробуем считать биты еще раз, если получилось, то всё хорошо. Можно идти дальше. Если нет, то ищем параллельный программатор.
Для работы нам также понадобится MAX232. На первых порах достаточно всего двух линий: RXD и TXD. На МАКСЕ две линии работают на повышение напряжения и 2 на понижение. Следовательно, нам достаточно одной микросхемы. Делаем, например, так:

Естественно не забываем про кварц и конденсаторы на землю для стабильного запуска. А также 5 ногу компорта на землю (сигнальная земля). Для MAX используется типовая схема включения. Рекомендую между информационной линией и землей воткнуть светодиоды. Там конечно-же 10 В, однако, это импульсный режим и напряжение не постоянное. Воткнутый светодиод решит 2 проблемы, отобразит импульсы, в результате вы будете хоть как-то видеть что по проводам что-то идет, и согласует нагрузку (дополнительное сопротивление на землю). У нас это всё было собрано "на скорую руку", примерно вот так:

Далее в "понике" открываем получившийся после компиляции HEX и жмем запись: Допустим все прошло хорошо. Открываем какой-нибудь терминал. Виндовым HyperTerminal не пользовался, о результате не скажу. Я использовал (кроме RS-232pro), компоненты для DELPHI - TMSA32 (Evgen, спасибо!). Прелестная вещчь! За 15 минут накидывается любой терминал, причем именно как надо тебе ;). Так вот, запускаем терминал, настраиваем порт, именно так как вы настраивали контроллер, т.е. для нашего случая ставим скорость 19200, протокол 8N1. Применяем параметры. В результате на экране должна без остановки бегать буковка "а". Если вы видите не "а", а что-то другое, то причин может быть масса, конечно же, но перечислим основные:
1.Несоответствие скорости порта компьютера и контроллера. Здесь могут быть варианты:
Контроллер тактируется не той частотой которая была указана -> скорость неверна-> ошибки.
Настройки USART (COM порта) не совпадают.
2.Помехи в линии.
3.Это надо было поставить первой, ошибка монтажа!!!
4.Снова ошибка монтажа.
5.Неисправности микросхемы (очень маловероятно).

Далее, собранное на скорую руку меня немного не устроило и сделал вот такую штуку (файлы и библиотека для P-CAD прилагаются):

Я использовал 2 МАКСА чтобы почти полностью задействовать все выводы com-порта (Ring indicator так и остался висеть в воздухе:. А жаль.).
Ну вот и всё примерно, что нужно для начала работы с USART (UART), удачи!!!

Хочу выразить благодарности:
Storm"у за то что есть второй...который согласился взяться за такой диплом, один бы я не вывез.
Spider"y (и его другу-соседу) за помощь в разборках с фузами.
Evgen"у за удачное место работы и TMSA32 (ну это кроме всего прочего замечательного что в тебе есть ;) ), где есть программатор, ибо с первого и второго раза мегу мы убили. Евген, куда бы мы без тебя?!
Администрации сайта РадиоКот за то что есть и администрация и сайт, за их попытки двигаться, а не сидеть на месте.

Библиотека для PCADa
Схема в PCADе
Плата (угадайте в чем)

Вопросы как обычно - в Форум




Как вам эта статья?

Заработало ли это устройство у вас?

5 3 1