USART AT Mega 8.
Автор: Прежде всего, я не претендую на то, что сейчас расскажу вам что-то новое. Это давно написано в даташитах и книгах. Эта статья, для тех, кто туда лезть не хочет, или у кого нет времени. MTh Понадобился (нам с господином Storm"ом) на диплом некий модулятор цифровых данных. Поток данных нужно было откуда-то брать. Первой идеей был LPT порт. Он параллельный, с ним, на первый взгляд проще работать J. История умалчивает о причинах невозможности работы с LPT на нормальных скоростях. Ну не получилось. Что поделаешь. Решили опробовать RS232.
Прежде всего стоит упомянуть что мы использовали: 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) Настройки - это конечно хорошо, однако, нам ведь надо чего-то послать, чтобы увидеть, что всё работает. Добавляем след строчку:
while (1) Нажимаем кнопочку "Make the project": Вот сейчас поклонники ассемблера начнут меня гнобить, 2.9% памяти. Достаточно много (при 8 Кб, 2.9% = 232 байта), однако, нас это волновало мало. Кто опишет всё это на ассемблере, буду только рад. )) Если вы видите это окошко, значит всё скомпилировалось и ошибок нет. Открываем PonyProg или AVReal. Открываем окно программирования битов конфигурации (fuses). Это сааааамый щекотливый момент - по идее, нужно лезть в даташит и смотреть, как заставить мегу работать с внешним кварцем (про то, что если фузы настроить неправильно, то м/с в режим последовательного программирования не перейдет, я вообще молчу, будьте внимательны). Я вас так мучить не буду, скажу лишь, что Мега8 на заводе, программируется на работу с внутренним генератором 1МГц. С такой тактовой частотой вы не сможете получить более-менее приличную скорость связи. Мы настроили USART на 19200 при 4 МГц кварце. Значит нужно сделать вот так:
Кому интересно почитает, почему так. Жмем write, пробуем считать биты еще раз, если получилось, то всё хорошо. Можно идти дальше. Если нет, то ищем параллельный программатор.
Естественно не забываем про кварц и конденсаторы на землю для стабильного запуска. А также 5 ногу компорта на землю (сигнальная земля). Для MAX используется типовая схема включения. Рекомендую между информационной линией и землей воткнуть светодиоды. Там конечно-же 10 В, однако, это импульсный режим и напряжение не постоянное. Воткнутый светодиод решит 2 проблемы, отобразит импульсы, в результате вы будете хоть как-то видеть что по проводам что-то идет, и согласует нагрузку (дополнительное сопротивление на землю). У нас это всё было собрано "на скорую руку", примерно вот так:
Далее в "понике" открываем получившийся после компиляции HEX и жмем запись: Допустим все прошло хорошо. Открываем какой-нибудь терминал. Виндовым HyperTerminal не пользовался, о результате не скажу. Я использовал (кроме RS-232pro), компоненты для DELPHI - TMSA32 (Evgen, спасибо!). Прелестная вещчь! За 15 минут накидывается любой терминал, причем именно как надо тебе ;). Так вот, запускаем терминал, настраиваем порт, именно так как вы настраивали контроллер, т.е. для нашего случая ставим скорость 19200, протокол 8N1. Применяем параметры. В результате на экране должна без остановки бегать буковка "а". Если вы видите не "а", а что-то другое, то причин может быть масса, конечно же, но перечислим основные:
Я использовал 2 МАКСА чтобы почти полностью задействовать все выводы com-порта (Ring indicator так и остался висеть в воздухе:. А жаль.).
Хочу выразить благодарности:
Библиотека для PCADa Вопросы как обычно - в Форум
|
|
||||||||||||||
|
||||