
ОК. Все началось с того, что я потерял (в домашнем хламе) USB to COM адаптер, который предназначался для программирования простого Arduino Pro Mini (5V). Его, конечно, можно было бы купить (и ждать неделю пока он прийдет), но не в этом поинт. Вопрос - как его запрограммировать минуя «оригинальный» адаптер. К слову, мы говорим об этой версии Arduino.
Не так, что бы я был сильно озадачен надписью выделенной на правой фотографии. Забегая вперед скажу, что это прекрасно программируется с помощью любого адаптера и через COM порт (RS-232). (схема в конце страницы).
Задача оказалась «не тривиальная» тк этот процесс скрыт от обычного пользователя. Обычно, на плате Arduino уже присутствует USB to COM адаптер, который делает эту работу. Проблема в том, что на плате Arduino Pro Mini его нет. А подбие RS-232 - есть (GND (общий), VBUS ( +5V), RX, TX, и, как выяснилось позже, DTR).

Первое решение было простейшее. FTDI чип (USB to Serial converter, такой же как на оригинальной плате Arduino). Его не видно на фотографии, но именно он выдает RX, TX и +5V от USB. Компьютер видит это как COM63, но это не важно.

Такое решение условно работает. То есть, программировать чип оно не позволяет, но прекрасно обменивается данными с программой уже загруженной в микроконтроллер.
Временно опустим вопрос почему это "не программирует". Значительно веселее выяснить как Ардуино умудряется программировать микроконтроллер через COM порт плюс, через него же, гонять дату туда-сюда.
Отгадка оказалась очень простой. Они используют дополнительный сигнал DTR. Конечно, одним сигналом DTR микроконтроллер не запрограммируешь. Поэтому, вместе с ним работает маленькая программа "BootLoader" (загрузчик), которая уже "вшита" в первые 0,5 КилоБайта каждого Ардуино.
В купленном отдельно микроконтроллере ATMEL ATmega328, этого загрузчика, конечно, не будет. Его можно "вшить" напрямую, через ICSP интерфейс, который присутствует на каждой плате.

Я использую (иногда:) программаторы EE-100/SP-100 (на фото), но это совершенно необязательно.


Достаточно в другой Arduino закачать программу ArduinoICSP и использовать ее как программатор.
Так как мне нужно использовать Arduino (Pro Mini) для управления маленьким CNC, то на этом развлечения не закончились. Адаптер COM (RS-232) to Arduino надо иметь по любому и его проще сделать, чем покупать.
Донором для проекта оказалась старая материнская плата, на которой уже жил чип ADM211. Это конвертор уровней напряжения RS232 (-15V/+15V) в уровни понятные Ардуино, TTL и CMOS (0/+5V).

Схемы, сами по себе, штука интересная. Следующая показывает где входы этой микросхемы и где выходы.

Ну и конечно, входы этй микросхемы соединяются с выходами COM порта на компьютере (выходы со входами, соответственно). Здесь легко запутаться, но схема адаптера "RJ45 to COM" ставит все на места.

Две последние картинки были только для меня и Вам совершенно ненужно решать этот "ребус". Схема, которая идет дальше, прекрасно работает с Arduino Pro Mini. Кроме того, она будет работать с любыми RS-232 to TTL/CMOS перобразователями уровня (с -15V/+15V до 0/+5V).


Два преобразователя, с 12V до 5V (для Arduino) и 3,3V (для MSP430) - приятный бонус. Добавлено только 3 белых светодиода, что бы наблюдать состояние линий RX, TX, DTR.
Про "BootLoader".
"BootLoader" делает много всякой ерунды, которая нас не интересует, но.
Он висит в начале программной области (~0,5kB), и исполняется всякий раз после Reset. Если состояние линии DTR высокое, то он пропускает сам себя. Если низкое, то закачивает программу в оставшуюся часть памяти.
То же, когда программа уже работает. К примеру Вы выводите данные через COM порт (через который, Вы еще недавно, программировали). Если состояние линии высокое, то Вы никогда не увидите дату на экране. Если низкое, то начинается обмен данными с компьютером, по RX & TX.
Остальное не так важно.
Make a free website with Yola