Всем, кто мечтает научиться программировать микроконтроллеры! У Вас есть прекрасная возможность сделать первые шаги с нами! Первая задача, которую мы с вами решим, будет классической - мигать светодиодом. На первый взгляд эта задача кажется пустяковой, однако она весьма доходчиво объясняет основные принципы работы. Кроме того нужно всегда идти от простого к сложному, и потому этот урок нам весьма подходит.
Итак, что же такое микроконтроллер (МК) и чем он так хорош?
Как говорит нам Википедия, Микроконтро́ллер (англ. Micro Controller Unit, MCU) — микросхема, предназначенная для управления электронными устройствами. Типичный микроконтроллер сочетает на одном кристалле функции процессора и периферийных устройств, содержит ОЗУ или ПЗУ. По сути, это однокристальный компьютер, способный выполнять простые задачи, согласно вложенной в него программе (алгоритму действий). Страшно представить себе то, если бы не было микроконтроллеров. Я бы никогда не собрал себе
часы-термометр,
паяльную станцию, подарочный
термометр брату в баню на даче и многое другое.
Почему этого не могло быть без МК? Потому, что без МК это требовало огромной выдержки и оснащения, чего у меня, ребенка в то время, не было. Вот пример схемы простейших часов на россыпухе:
Вложение:
Комментарий к файлу: Схема взята здесь http://www.299792458.ru/news/2010-11-15-689
chas_ross.png [ 128.94 КБ | Просмотров: 28896 ]
А вот пример схемы часов на микроконтроллере:
Вложение:
Комментарий к файлу: Схема взята здесь http://best-chart.ru/samodelnye-elektronnye-chasy-budilniki/prostejshie-elektronnye-chasy-na-mikrokontrollere-atmega8-sxema.html
chas_mk8.jpg [ 43.02 КБ | Просмотров: 28896 ]
Три корпуса против одного, и это еще не предел - я встречал схемы с тетрадный лист! Кроме того, если мы захотим вдруг добавить в наши часы функцию цифрового термометра, то в случае с россыпухой нам придется серьезно дорабатывать схему. А в случае со схемой на МК потребуется только сам термодатчик, например DS18b20, и один резистор на 4,7кОм. Ну и изменить программу, потому что в ней вся суть. В этом есть огромная гибкость, когда можно повлиять на логику работы устройства не брутальным паяльником, а интеллектуальным кодом. Какой интерес организовывать паузу конденсатором, который со временем высохнет, когда ее можно задать всего одной командой delay(время задержки) и она будет четко до микросекунды всегда такой, какой ты ее создал до тех пор, пока у МК не поедет крыша (МК рассчитан на десятилетия работы). А почему? Потому, что МК относится к цифровой технике, где правят бал сухие цифры. И там все чётко - нолик или единичка. "Да" или "нет", без компромиссов.
Итак у нас пришло понимание, что МК может сильно упростить общую сложность какого то устройства. Но на пути начала его применения острым ножом встает вопрос его программирования. А чаще даже не самого программирования, а проблема загрузки уже написанной кем то программы в контроллер. И тут мы можем встретить массу мифов про то, что это сложно, что для этого нужен дорогостоящий программатор и что вообще это все дело не для простых смертных. Это не так!!! Вероятно Вы будете удивлены, если узнаете, что для загрузки программы в микроконтроллер (в народе говорят "прошить" МК, или загрузить прошивку) достаточно всего пяти проводков и наличие LPT-порта у вашего компьютера!!!
Вложение:
Комментарий к файлу: Схема взята здесь http://www.tehnari.ru/f115/t62706/
5 wires.gif [ 13.27 КБ | Просмотров: 28896 ]
Хотя я бы рекомендовал все же собрать программатор для СОМ-порта. Все таки он чаще встречается на компьютерах, и даже если нет его разъема на задней панели, то зачастую сам порт есть на материнской плате и надо только вывести его наружу.
Вложение:
Комментарий к файлу: Схема взята здесь http://www.getchip.net/posts/delaem-com-programmator-dlya-avr-mikrokontrollerov/
016-COM-programmer-scheme.png [ 13.25 КБ | Просмотров: 28896 ]
По самим схемам вопросов возникнуть не должно, ибо используются распространенные детали. Осталось только выложить саму программу, с помощью которой мы будем загружать в МК наши прошивки:
Вложение:
Комментарий к файлу: Страничка автора http://avr.nikolaew.org/progr
uniprof_08_jun_10.zip [429.62 КБ]
Скачиваний: 585
Примечание: у кого нет на компьютере LPT и COM портов (ноутбук), тем нужно будет собирать USB-программатор. Их многое множество, но почти все они содержат в себе микроконтроллер, который потребует предварительную прошивку (палка о двух концах). Кроме того они все тормозные и долго "шьют" прошивку. Однако есть программатор, который лишен этих недостатков - это программатор USBBit (ссылка). У него нет МК, его не нужно "прошивать", программирует он очень быстро (в сравнении с другими программаторами). Но есть один минус - микросхема СОМ-порта FT232RL имеет очень мелкий шаг выводов и не каждому начинающему под силу сделать такую печатную плату. Однако можно поискать в инете уже готовые программаторы МК AVR на этой микросхеме, попросить приятеля сделать печатку и тд. Второй недостаток программатора - с ней не работает UniProf, а та, которая работает, не имеет GUI-интерфейса (только командная строка). Но умельцы уже давно написали всяких приложений, потому это не проблема. Кроме того, когда вы будете отлаживать свое устройство, и у вас будет целая серия поправок и перепрошивок, вы поймете, что нет ничего лучше программатора, который запускается из командной строки. Вы просто создаете bat-файл с командной строкой, а потом просто запускаете этот файл - в МК автоматически выставляются фьюзы и он прошивается обновленной прошивкой Глянув на варианты схем можно сказать, что действительно не так страшен черт, как его малюют. Верно?
Вопрос: на схеме есть контакты, которые именуются как MISO, MOSI, RESET, SCL, GND. Что с ними делать и зачем это?
Ответ: это названия сигналов, ответственных за внутрисхемное программирование нашего МК. Нужно найти на МК такие же контакты и подключить.
Вопрос: Как их найти на микроконтроллере? Где брать информацию?
Ответ: У людей есть молитва и Библия, а у микроконтроллеров это ДАТАШИТ. Пример можно
скачать здесь.
Вопрос: ААА, там "многа букафф" и все на не русском!!! Не надо мне ничего!
Ответ: Не надо пугаться большого объема информации на английском языке! На данном этапе она вам совершенно не нужна и даже излишня. На данном этапе нас интересует распиновка конкретного МК (предлагаю к изучению не сложный, но весьма распространенный контроллер ATMega8). То есть что бы подключить к нему наш программатор, питание и светодиод, мы должны знать где и что у него находится. И лежит эта инфа в разделе "Pin configurations"
Вложение:
Комментарий к файлу: Распиновка МК АТмега8
atmega8_pins.png [ 52.6 КБ | Просмотров: 28896 ]
Для начала краткая, но доходчивая информация о том, какие вообще бывают выводы у МК и за что отвечают.
Основное, что имеет МК в изобилии, это порты ввода-вывода. Через них МК может наблюдать за внешним миром, а так же и влиять на него. Количество портов у каждого МК различное (зависит от самого МК). Название порта состоит и буквы Р (Port) и самого имени порта (A, B, D, C и тд) и номера его вывода. Каждый из портов может иметь не более восьми выводов (порт же восьмибитный!), то есть PA0-PA7, РВ0-РВ7, PD0-PD7 и тд. Например у предлагаемого мной для изучения МК АТмега8 есть порты B, C, D. Порту C повезло меньше, у него всего 7 выводов, да и то седьмой вывод (который РС6, ибо PC0 считается за первый) занят под сигнал RESET (общий сброс МК). Каждый порт может быть назначен либо на ввод информации, либо на ее вывод.
Кроме портов МК имеет на своем борту кучу всяких фишек типа аналого-цифрового преобразователя, ШИМ-генераторов, функции компаратора, UART, возможность подключить кварцевый резонатор (и не один), реагировать на внешние раздражители и многое другое. Потому пользователь имеет право выбора - использовать порт как порт, либо отдать его под указанные выше ништяки.
Например, порты PB6 и PB7 (см.картинку) могут использоваться как обычные порты ввода или вывода, либо можно их отдать под внешний кварцевый резонатор (пока
не забивайте голову зачем он нужен, и над прочим тоже пока не парьтесь - просто есть такая возможность и все). Или любой из портов РС0-РС5 (или все сразу) можно использовать как вход аналого-цифрового преобразователя и контролировать до ШЕСТИ различных напряжений (в том числе и токов, если это напряжение падение на шунте). Порты PD0-PD1 можно отдать под RS232 и сопряжения МК с компьютером (смотрите название выводов RXD, TXD - ни о чем не говорит?).
Выводы 7, 8 - питание 5В. Очень желательно сразу к этим ножкам припаять керамический конденсатор 0.1мкф для уменьшения помех.
А теперь самое главное про то, с чего начали: порты PB3-PB5 в обычной жизни могут быть использованы как обычные и ничем не примечательные порты ввода/вывода. Однако если замкнуть сигнал RESET на минус питания (программатор именно это и делает), МК войдет в состояние, схожее с ощущением удара пыльного мешка по голове, выполнение основной программы застопорится и эти выводы станут нашими искомыми сигналами MOSI, MISO и SCK, которые предназначены для внутрисхемного программирования. МК можно не выпаивать из схемы, главное что бы на этих портах не висело низкоомной нагрузки (на эту тему тоже пока не заморачивайтесь, у нас пока будет занят один, максимум 2-3 порта, которых у нас полно).
Ну вот на этом я пожалуй прервусь, что бы дать время на осознание информации и вообще на изучение спроса в этом вопросе. Если кому то интересно делать первые шаги ВМЕСТЕ, то заявляйте о себе, собирайте программатор, подключайте МК к нему и добивайтесь того, что бы при запуске программатор перестал писать сообщение:
Вложение:
no_mk.png [ 14.55 КБ | Просмотров: 28896 ]
Пока не наберем достаточное количество желающих, автобус дальше не поедет!
PS. При перепечатке материала ссылка на автора и этот форум обязательна!