Программирование контроллеров
Когда-то давно я сделал несколько проект-примеров для желающих разобраться в азах AVR. Именно по комплексу CVAVR+Протеус.
Я уже не помню порядок следования что за чем, сорри. Примерно в таком порядке:
Пошаговая отладка. Вывод [отладочной] информации в RS232
Программатор Altera/STK
Опрос кнопок и вывод на HD44780-совместимый LCD-дисплей
Работа с ADC и внешней памятью (интерфейс I2C)
Еще есть небольшой мануал по созданию/редактированию футпринтов Протеуса, но после этого Halex07 написал свой прекрасный FAQ и, думаю, что этот мануальчик уже можно и прибить.
P.S. Посмотрел - на архивах стоит ноябрь 2004 года… Как давно это было… ☕
Добрый день!
я в этом деле новичок… но знаю основы электроники и С++…
Цель такая к АЦП контроллера подвести датчики и при уровне сигнала ниже необходимого нужно подать 3В на выход…
Всё что Вы спрашиваете описано очень хорошо в цикле статей.
Микроконтроллеры AVR, 10 ступеней. С. М. Рюмик просто и занимательно вводит читателя в мир AVR.
mirknig.com/…/1181195209-mikrokontrollery-avr-10-s…
Здесь можно посмотреть USB программатор не требующий предварительной прошивки. (правда сам пока делать его не пробовал)
этот вариант мне понравился…
eagle, интересно услышать ваше мнение о нем…
Мне не нравится вот это (первый же вопрос в разделе FAQ):
В: Из CVAVR он работает ? Какой прогер в настройках ставить - stk500 ?
О: Пока работает только с ПРОПАТЧЕННЫМ Avrdude - www.reddylab.eu/rclab/#7
И еще доводилось слышать про дуду, что она отказывается работать с некоторыми типами контроллеров.
Нравится - сделайте. Попробуйте.
Если не уверены до конца, то делайте его двухмодульным. На одном модуле соберите FT232 со входными цепями и индикацией RX-TX, и сделайте на ней нормальные удобные выходы TTL (желательно полный набор).
На второй - соберите кусок с буфером.
Если не понравится, кусок с буфером легким движением руки превратится в Altera/STK (можете даже заранее соответствующие цепи на плате развести, но компоненты и/или перемычки не ставить), а кусок с FT232 станет половиной тугсграфикса или кого угодно, кто начинается с FT232. Или просто можете его использовать как конвертер TTL<=>RS232_over_USB для общения своих будущих конструкций с компьютером. Наверняка где-нибудь пригодится.
P.S.
reddylab.eu/rclab/
этот вариант мне понравился…
Это уже тритий (или даже можно считать, что четвертый) вариант, который Вам понравился за последние три дня. 😒
Я советую для начала сделать то, что проще и не трудозатратно. Но не примитивно и надежно. Наиболее подходящей для этого я по-прежнему считаю Altera/STK. Если, конечно, есть порт LPT.
P.P.S. Заметьте, при всем богатстве выбора все варианты сводятся к набору из трех микросхем: FT232, буфера и ATMEGA8 в разных комбинациях (кстати, ATMEGA8 уже становится раритетом… Меняется на ATMEGA88). Это я к чему? К тому, что как вы эту детскую коляску не собирайте, а получится все равно автомат Калашникова. Пргорамматор ISP - он и в Африке программатор ISP.
Это уже тритий (или даже можно считать, что четвертый) вариант, который Вам понравился за последние три дня.
вы конечно правы…
но я так и не выбрал что паять…а заказывать все необходимое… буду в понедельник…
мне понравился этот программатор тем что его ненадо прошивать… но что он не поддерживает CVAVR это конечно громадный минус…
LPT у меня нет…я конечно могу купить переходник…но не вижу смысла собирать то …что мне надо будет чтобы собрать программатор с usb))
пока я еще в поисках… может кому то на глаза попался usb программатор,который работает с CVAVR … и который не надо прошивать?..
STK500
У меня он есть на базе AVR Butterfly и на базе Bus Pirate
Я 100 лет назад собрал “протоса”. С прошивкой STK-500 имел глюки в виде необходимости практически при каждом действии с программатором “перетыкать” его в усб ноута (может ноут у меня кривой какой?). С прошивкой “протоса” - AVR910 проблем нет. Но есть несколько “но”. Из под кодевижин не поддерживается страничный режим, т.е. контроллер прошивается, но медленнее, чем мог бы. Поэтому я использую аврпрог от аврстудии. Подпихнул его в кодевижин в свойствах проекта на запуск после компиляции. Вполне удобно. Все хочу, но ленюсь попробовать STK-500 v2, т.е. с аппаратным, а не софтовым усб. Думаю, глюк описанный выше - в кривой реализации софтового усб.
кстати …только вспомнил… у меня есть ЦАП\АЦП… работающее от усб… имеюще и аналоговые и цифровые входы выходы…
а может есть смысл на базе него сделать программатор?
Честно скажу, всю ветку я не прочитал, но к первому сообщению, хочу посоветовать проект arduino (и его клоны - freeduino, boarduino), поглядите - уверен, что заинтересует.
Я тоже хочу освоить программирование микроконтроллеров, но что-то не за что зацепиться. Может кто-нибудь показать как это делается на конкретном примере.
Вот, например, для начала у меня есть такая минимальная задачка.
Нужно сделать контроллер, который будет управлять проходным светофором железнодорожной автоблокировки. Светофор имеет 3 огня (кто угадает, какие?). Логика его работы такая:
- Если ограждаемый светофором блок участок занят (на первом входе 0), то горит красный. При этом состояние других входов можно и не проверять.
- Если этот блок участок свободен (на первом входе 1), то проверяется состояние следующего светофора, от которого тянется отдельный провод, подходит ко второму входу.
- Если следующий светофор зактыт (на втором входе 0), то горит жёлтый огонь.
- Если сдедующий светофор открыт (на втором входе 1), то проверяется положение стрелок с помощью третьего входа.
- Если на третьем входе 1 (стрелки прямо), то горит зелёный огонь.
- Если на третьем входе 0 (стрелки на боковой путь), то включается жёлтый мигающий огонь.
Жёлтый огонь должен мигать с частотой около 1 Гц, причём 2/3 периода он включен, а 1/3 - выключен.
Вот так выглядит схема, реализующая этот алгоритм, на логических элементах.
Здесь первый вход назван 11, второй - 12, третий - 13
А вот как я хочу сделать на контроллере. Контроллер PIC12F629
На вход 17 не обращайте внимания, просто с помощью цепи питания я хочу сделать смену направления автоблокировки.
Если найдётся специалист, напишите ассемблеровский файл, если можно, с комментариями. И потом я буду осваивать, что с ним делать дальше.
ИМХО, слишком сложные задачи ставите для начала. Или надежда на то, что кто-то за Вас напишет программу? Начинать нужно хотя-бы с одного светодитода типа помигать, кнопки на входе, типа поуправлять. И почитать что-то вроде вот этого avr123.nm.ru, аналогов в сети полно, и по ПИКАм тоже.
Виктор, такую простую задачу можно решить на PIC конроллере, а программу написать на PIC-Basic. Если ты знаком с языком Basic, который в школах преподавали раньше, то проще пареной репы! А на ассемблере писать, это нужно его знать, точнее знать архитекруту проца, на изучение у тебя уйдёт год или больше, и только потом ты сможешь написать такую прогу. А на PIС-Basic такая прога пишеться на 15 мин, и работает сразу!
Ну вот типа такой пример:
'****************************************************************
'* Name : TEST LED *
'* Author : *
'* Notice : Copyright (c) 2010 *
'* : *
'* Date : *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
' Описание портов
IN_0 VAR GPIO.0
LED VAR GPIO.1
PORT_2 VAr GPIO.2
PORT_3 VAR GPIO.3
PORT_4 var GPIO.4
PORT_5 VAR GPIO.5
' 76543210
TRISIO = %00000001 ' 1 - Вход
' 0 - Выход
CMCON = %00000111 ' Отключение компаратора битами 0,1,2
CLEAR ' Отчистка RAM
main:
IF IN_0 = 1 THEN GOSUB LED_BL ' Если на входе IN_0 лог. 1 тогда переход на процедуру LED_BL
GOTO main ' Зацикливание процедуры main
LED_BL:
LED = 1 ' Включить светодиод
PAUSE 666 ' Пауза 666 мс (2/3 от секунды)
LED = 0 ' Выключить светодиод
PAUSE 333 ' Пауза 333 мс (1/3 от секунды)
RETURN ' Возврат к оператору GOSUB LED_BL
END
Эта программа мигает светодиодом если на порт GPIO.0 приходит лог. 1 если лог. 0 значит не мигает. Светодиод висит на порте GPIO.1. Кстати я сделал что бы он мигал, как светофор.
Вот это пример. Всё остальное, ещё проще.
По PIC-Basic есть книга: Чак Хелибайк “Программирование PIC-микроконтроллеров на PIC-Basic”, там описаны все комманды.
Есть сайт, там эта книга есть в электронном виде: www.picbasic.ru
Виктор, такую простую задачу можно решить на PIC конроллере, а программу написать на PIC-Basic.
…И смоделировать работу всей конструкции (не прикасаясь к железу) на Proteus VSM. С миганием светодиодов и переключением сигналов на входе.
И смоделировать работу всей конструкции (не прикасаясь к железу) на Proteus VSM
Нет ну это само собой, для отладки программы.
Я думал, сейчас начнутся реплики типа “Это слишком просто, делай на дискретных элементах”, а оказывается это что-то сложное. Не ожидал.
Однако, мне понравилось, что появились компиляторы на основе Бэйсика, я пытался несколько лет назад что-то такое найти, но у меня ничего не получилось. Наверное, это новые компиляторы.
Мне удалось скачать компилятор Proton и книжку про PIC-Basic, подскажите, где можно скачать сам PIC-Basic и книжку про Proton.
Я сначала хотел избежать использования компиляторов высокого уровня, я думал будут проблемы при сопряжении с программатором, поэтому и спрашивал про ассемблер. Да я и сейчас думаю, что неплохо бы его освоить.
А может кто-нибудь знает программы, которые компилируют код из графического алгоритма? Ну, знаете, в ромбиках - условия, в прямоугольничках - присвоение, в параллелограммах - ввод/вывод?
Algorithm Builder. Но - для Atmel’ов.
А может кто-нибудь знает программы, которые компилируют код из графического алгоритма? Ну, знаете, в ромбиках - условия, в прямоугольничках - присвоение, в параллелограммах - ввод/вывод?
Там всё ровно нужно знать архитектуру проца. Конечно если просто светодиодом помигать, то архитектуру знать не нужно, а если что то серьёзнее то нужно.
В этом отношении проще всего PIC-Basic, там архитектуру знать не нужно. Всё просто и очень стабильно работает. Я на этом языке уже наделал кучу полезных схем, из них есть регулятор хода с реверсом, и многое другое.
Мне удалось скачать компилятор Proton и книжку про PIC-Basic, подскажите, где можно скачать сам PIC-Basic и книжку про Proton.
Книг по Протону на русском языке нет в природе. Это так и есть. Я искал и узнавал, оказывается нет. На английском что то есть вроди бы. Но скажу что Протон сильно не отличается от PIC BASIC PRO, так что разницы нет. В протоне есть только какие то дополнительные команды, без которых можно обойтись.
На русском много есть только по PIC Basic PRO.
Вот среда программирования: www.picbasic.ru/load/…/3-1-0-133
Вот компилятор: www.picbasic.ru/load/…/3-1-0-135
Вот полезные книги: www.picbasic.ru/load/3-1-0-50
www.picbasic.ru/load/10-1-0-83
Там же есть и Протеус и много много другого: www.picbasic.ru/load/
УДАЧИ в изучении!
Я видел этот сайт, скачать с него нельзя, ссылки зациклены - сказка про белого бычка. 😦
Что образуется на выходе Pic-Basic? Как это зашить в контроллер?
Algorithm Builder. Но - для Atmel’ов.
Когда хорошо знаешь контроллеры, легко работать с разными типами, брать программы для одного, зашивать в другой… Но я пока только осваиваю, выбрал для освоения PIC - вот и буду с ним работать. Изучу - возьмусь за Atmel и прочие.
А какие существуют правила для ассемблера? Имена регистров можно так и писать, как они названы в документации к контроллеру? Как там ставить метки? Что значит инициализировать порт, просто обозначить какая ножка будет выходом а какая входом?
Я видел этот сайт, скачать с него нельзя, ссылки зациклены - сказка про белого бычка.
Причём тут бычёк, зарегистрироваться нужно и всё.
Что образуется на выходе Pic-Basic? Как это зашить в контроллер?
Как всегда, любой компилятор любого языка программирования, для микроконтроллеров, генерит файл с расширением .hex Вот его то и прошивают в контроллер.
Для прошивки контроллера, нужен программатор. Зашивается просто, нажимаешь кнопку и зашивается, hex файл. Ещё биты конфигурации нужно установить. Для разных типов процов, разные программаторы и программы. Для PIC есть хороший и не сложный программатор ExtraPIC. Если будешь делать дам схему. Для Atmel программатор проще, называется STK-200, есть ещё STK-300 и 500. Но достаточно STK-200. Выше о нём писали.
А какие существуют правила для ассемблера? Имена регистров можно так и писать, как они названы в документации к контроллеру? Как там ставить метки? Что значит инициализировать порт, просто обозначить какая ножка будет выходом а какая входом?
Так ты ассемблер изучать собрался или что? Определись.
Вообще хочу изучить ассемблер, но рассмотрю и другие варианты, такие, как Pic-Basic.
Для прошивки контроллера, нужен программатор
Есть программатор, называется PICPROG. Осталось только научиться писать программы.
Есть несколько задач, которые я хотел бы возложить на контроллер, одна из них - перед вами.
Есть пару контроллеров, чтобы потренироваться, один из них PIC12F629. К нему есть перевод заводской микрочиповской документации. В нём по отдельности всё понятно, но когда нужно написать программу, мозг вскипает и как писать - непонятно. Поэтому я и спрашиваю, может кто поможет? Кроме того, всё дело тормозит отсутствие информации о правилах самого ассемблера, его дерективах. Во всех источниках это преподносится как само собой разумеющееся, но я-то этого не знаю.
Я так понял PICBаsic вы проигнорировали. Почему?
Нужно вам искать книгу по ассемблеру с нуля. Или зайдите на www.microchip.su Там на форуме очень много обсуждают ассемблер.
А почему именно ассемблер? Что бы на нём написать вашу простую задачу, нужно много знать.