Мне нужен был простой способ заставить мой микроконтроллер общаться с моим ПК (и наоборот) с минимальным количеством деталей. Самый простой способ сделать это — использовать возможности UART ATTiny2313 для общения с моим ПК через последовательный порт.
Одна из проблем заключается в том, что ATTiny2313 (как и большинство микроконтроллеров) выдает 5 В для «высокого» (включено) и 0 В для «низкого» (выключено). Стандарт RS-232 (который используют последовательные порты ПК) требует -15 В для высокого и +15 В для низкого! Очевидно, что микроконтроллеру нужна некоторая помощь, чтобы добиться этого. Самый простой способ — использовать преобразователь последовательных уровней MAX232 (микросхема). Обратите внимание, что для правильной работы ему требуется несколько конденсаторов емкостью 10 мкФ.
Вот более общая схема:
Возможно, что приведенная выше схема подключения max232 будет – не работать, тогда попробуйте подключить её следующим образом (в данном примере подключена Atmega88):
Я подключил свой ATTiny2313 к MAX232 очень стандартным способом. (фото) Контакты 13 и 14 MAX232 идут к последовательному порту, а контакты 2 и 3 ATTiny2313 идут к контактам 12 и 11 MAX232 соответственно. Отмечу, что они использовали значение осциллятора (3,6864 МГц), отличное от моего (9,216 МГц).
Важно определить скорость последовательной связи . Это зависит от частоты вашего генератора! Я сказал, что использовал генератор 9,216 МГц. Во-первых, требуется кварцевый или керамический генератор поверх внутреннего RC-генератора, потому что внутренний RC-генератор недостаточно точен для последовательной связи. Выбранный вами генератор должен быть точным кратным 1,8432 МГц. Мой — это 5-кратное значение. Многие используют 2-кратное значение (3,6864 МГц), и это нормально! Вам просто нужно убедиться, что ваш микрочип знает (1) как использовать внешний генератор (найдите в Яндексе, как это сделать) и (2) какова частота вашего генератора и как быстро он должен отправлять данные. Это делается путем установки значения UBRRL. Формула для этого здесь:
В техническом описании вашего микроконтроллера (даташит) может быть указано множество распространенных частот кристалла, полос пропускания и соответствующих им значений UBRR. Однако в моем техническом описании (даташит) не было записи для кристалла 9,216 МГц, поэтому мне пришлось делать расчеты самостоятельно. Я поискал в Яндексе, но никакой «таблицы» не оказалось! Почему бы не сделать ее? (рисунок ниже). В любом случае, для моего случая я определил, что если установить значение UBRR равным 239, то я смогу передавать данные со скоростью 2400 бод (бит/сек). Это достаточно медленно, чтобы обеспечить точность, но достаточно быстро, чтобы быстро выгрузить большой объем текста на терминал ПК.
Калькулятор скорости передачи данных AVR
Это облегчит вам жизнь. На странице wormfood.net/avrbaudcalc.php есть таблица распространенных кристаллов и скоростей передачи данных, с которыми они работают лучше всего! Попробуйте выбрать комбинацию, которая обеспечивает наименьшую возможную ошибку…
Это минимальный код для проверки моей установки. Просто загрузите код (написанный на C, скомпилированный с помощью avr-gcc) на свой чип, и он готов к работе. Убедитесь, что вы настроили биты микроконтроллера на использование внешнего осциллятора и что вы правильно установили значение UBRRL.
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int main (void) { unsigned char data=0; UBRRL = 239; UCSRB = (1 < < RXEN) | (1 << TXEN); UCSRC = (1 < < UCSZ1) | (1 << UCSZ0); for (;;) { if (data>'Z'||data< 'A') { UDR = 10; UDR = 13; data='A';_delay_ms(100); } UDR = data; data += 1; _delay_ms(100); } }
После загрузки он готов к работе! Он непрерывно сбрасывает буквы в последовательный порт. Чтобы их получить, откройте HyperTerminal (в Windows, в разделе «Аксессуары») или minicom (в Linux, посмотрите!). Установите скорость передачи данных на 2400 (или любую другую, которую вы выбрали), и все готово (2400 бит в сек, 8 дата бит, None, 1 стоп бит). Это (изображение ниже) — вывод микроконтроллера в HyperTerminal на моем ПК. Извините за качество изображения, я сфотографировал ЖК-экран, а не делал скриншот.
Это схема , которая генерирует вывод предыдущего изображения. У меня есть несколько дополнительных компонентов. У меня есть светодиод, который я использовал для отладки, а также переключатель (обозначенный как «R»). Переключатель (при нажатии) заземляет контакт 1 ATTiny2313, что сбрасывает его. Если я хочу запрограммировать чип, я удерживаю «R» нажатым, и ПК может запрограммировать его с помощью встроенного программатора «параллельный порт, прямой, стиль DAPA» ). Один кабель, идущий в схему, предназначен для программатора параллельного порта, один кабель — для последовательного порта (передача данных), а один — для питания (5 В, которые я украл из порта USB).