Программирование контроллеров

EagleB3

Когда-то давно я сделал несколько проект-примеров для желающих разобраться в азах AVR. Именно по комплексу CVAVR+Протеус.
Я уже не помню порядок следования что за чем, сорри. Примерно в таком порядке:
Пошаговая отладка. Вывод [отладочной] информации в RS232
Программатор Altera/STK
Опрос кнопок и вывод на HD44780-совместимый LCD-дисплей
Работа с ADC и внешней памятью (интерфейс I2C)
Еще есть небольшой мануал по созданию/редактированию футпринтов Протеуса, но после этого Halex07 написал свой прекрасный FAQ и, думаю, что этот мануальчик уже можно и прибить.

P.S. Посмотрел - на архивах стоит ноябрь 2004 года… Как давно это было…

UserM
nigyl:

Добрый день!
я в этом деле новичок… но знаю основы электроники и С++…
Цель такая к АЦП контроллера подвести датчики и при уровне сигнала ниже необходимого нужно подать 3В на выход…

Всё что Вы спрашиваете описано очень хорошо в цикле статей.

Микроконтроллеры AVR, 10 ступеней. С. М. Рюмик просто и занимательно вводит читателя в мир AVR.

mirknig.com/…/1181195209-mikrokontrollery-avr-10-s…

Здесь можно посмотреть USB программатор не требующий предварительной прошивки. (правда сам пока делать его не пробовал)

reddylab.eu/rclab/

nigyl

reddylab.eu/rclab/

этот вариант мне понравился…
eagle, интересно услышать ваше мнение о нем…

EagleB3

Мне не нравится вот это (первый же вопрос в разделе FAQ):

В: Из CVAVR он работает ? Какой прогер в настройках ставить - stk500 ?
О: Пока работает только с ПРОПАТЧЕННЫМ Avrdude - www.reddylab.eu/rclab/#7

И еще доводилось слышать про дуду, что она отказывается работать с некоторыми типами контроллеров.

Нравится - сделайте. Попробуйте.
Если не уверены до конца, то делайте его двухмодульным. На одном модуле соберите FT232 со входными цепями и индикацией RX-TX, и сделайте на ней нормальные удобные выходы TTL (желательно полный набор).
На второй - соберите кусок с буфером.
Если не понравится, кусок с буфером легким движением руки превратится в Altera/STK (можете даже заранее соответствующие цепи на плате развести, но компоненты и/или перемычки не ставить), а кусок с FT232 станет половиной тугсграфикса или кого угодно, кто начинается с FT232. Или просто можете его использовать как конвертер TTL<=>RS232_over_USB для общения своих будущих конструкций с компьютером. Наверняка где-нибудь пригодится.

P.S.

nigyl:

reddylab.eu/rclab/
этот вариант мне понравился…

Это уже тритий (или даже можно считать, что четвертый) вариант, который Вам понравился за последние три дня. 😒
Я советую для начала сделать то, что проще и не трудозатратно. Но не примитивно и надежно. Наиболее подходящей для этого я по-прежнему считаю Altera/STK. Если, конечно, есть порт LPT.

P.P.S. Заметьте, при всем богатстве выбора все варианты сводятся к набору из трех микросхем: FT232, буфера и ATMEGA8 в разных комбинациях (кстати, ATMEGA8 уже становится раритетом… Меняется на ATMEGA88). Это я к чему? К тому, что как вы эту детскую коляску не собирайте, а получится все равно автомат Калашникова. Пргорамматор ISP - он и в Африке программатор ISP.

nigyl
EagleB3:

Это уже тритий (или даже можно считать, что четвертый) вариант, который Вам понравился за последние три дня.

вы конечно правы…
но я так и не выбрал что паять…а заказывать все необходимое… буду в понедельник…

мне понравился этот программатор тем что его ненадо прошивать… но что он не поддерживает CVAVR это конечно громадный минус…
LPT у меня нет…я конечно могу купить переходник…но не вижу смысла собирать то …что мне надо будет чтобы собрать программатор с usb))

пока я еще в поисках… может кому то на глаза попался usb программатор,который работает с CVAVR … и который не надо прошивать?..

leprud

STK500
У меня он есть на базе AVR Butterfly и на базе Bus Pirate

Aleksey_Gorelikov

Я 100 лет назад собрал “протоса”. С прошивкой STK-500 имел глюки в виде необходимости практически при каждом действии с программатором “перетыкать” его в усб ноута (может ноут у меня кривой какой?). С прошивкой “протоса” - AVR910 проблем нет. Но есть несколько “но”. Из под кодевижин не поддерживается страничный режим, т.е. контроллер прошивается, но медленнее, чем мог бы. Поэтому я использую аврпрог от аврстудии. Подпихнул его в кодевижин в свойствах проекта на запуск после компиляции. Вполне удобно. Все хочу, но ленюсь попробовать STK-500 v2, т.е. с аппаратным, а не софтовым усб. Думаю, глюк описанный выше - в кривой реализации софтового усб.

nigyl

кстати …только вспомнил… у меня есть ЦАП\АЦП… работающее от усб… имеюще и аналоговые и цифровые входы выходы…
а может есть смысл на базе него сделать программатор?

ostin

Честно скажу, всю ветку я не прочитал, но к первому сообщению, хочу посоветовать проект arduino (и его клоны - freeduino, boarduino), поглядите - уверен, что заинтересует.

1 month later
Vitec

Я тоже хочу освоить программирование микроконтроллеров, но что-то не за что зацепиться. Может кто-нибудь показать как это делается на конкретном примере.

Вот, например, для начала у меня есть такая минимальная задачка.
Нужно сделать контроллер, который будет управлять проходным светофором железнодорожной автоблокировки. Светофор имеет 3 огня (кто угадает, какие?). Логика его работы такая:

  • Если ограждаемый светофором блок участок занят (на первом входе 0), то горит красный. При этом состояние других входов можно и не проверять.
  • Если этот блок участок свободен (на первом входе 1), то проверяется состояние следующего светофора, от которого тянется отдельный провод, подходит ко второму входу.
  • Если следующий светофор зактыт (на втором входе 0), то горит жёлтый огонь.
  • Если сдедующий светофор открыт (на втором входе 1), то проверяется положение стрелок с помощью третьего входа.
  • Если на третьем входе 1 (стрелки прямо), то горит зелёный огонь.
  • Если на третьем входе 0 (стрелки на боковой путь), то включается жёлтый мигающий огонь.
    Жёлтый огонь должен мигать с частотой около 1 Гц, причём 2/3 периода он включен, а 1/3 - выключен.

Вот так выглядит схема, реализующая этот алгоритм, на логических элементах.

Здесь первый вход назван 11, второй - 12, третий - 13

А вот как я хочу сделать на контроллере. Контроллер PIC12F629

На вход 17 не обращайте внимания, просто с помощью цепи питания я хочу сделать смену направления автоблокировки.

Если найдётся специалист, напишите ассемблеровский файл, если можно, с комментариями. И потом я буду осваивать, что с ним делать дальше.

PARSEK

ИМХО, слишком сложные задачи ставите для начала. Или надежда на то, что кто-то за Вас напишет программу? Начинать нужно хотя-бы с одного светодитода типа помигать, кнопки на входе, типа поуправлять. И почитать что-то вроде вот этого avr123.nm.ru, аналогов в сети полно, и по ПИКАм тоже.

ubd

Виктор, такую простую задачу можно решить на 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

EagleB3
ubd:

Виктор, такую простую задачу можно решить на PIC конроллере, а программу написать на PIC-Basic.

…И смоделировать работу всей конструкции (не прикасаясь к железу) на Proteus VSM. С миганием светодиодов и переключением сигналов на входе.

ubd

И смоделировать работу всей конструкции (не прикасаясь к железу) на Proteus VSM

Нет ну это само собой, для отладки программы.

Vitec

Я думал, сейчас начнутся реплики типа “Это слишком просто, делай на дискретных элементах”, а оказывается это что-то сложное. Не ожидал.
Однако, мне понравилось, что появились компиляторы на основе Бэйсика, я пытался несколько лет назад что-то такое найти, но у меня ничего не получилось. Наверное, это новые компиляторы.

Мне удалось скачать компилятор Proton и книжку про PIC-Basic, подскажите, где можно скачать сам PIC-Basic и книжку про Proton.

Я сначала хотел избежать использования компиляторов высокого уровня, я думал будут проблемы при сопряжении с программатором, поэтому и спрашивал про ассемблер. Да я и сейчас думаю, что неплохо бы его освоить.

А может кто-нибудь знает программы, которые компилируют код из графического алгоритма? Ну, знаете, в ромбиках - условия, в прямоугольничках - присвоение, в параллелограммах - ввод/вывод?

ubd

А может кто-нибудь знает программы, которые компилируют код из графического алгоритма? Ну, знаете, в ромбиках - условия, в прямоугольничках - присвоение, в параллелограммах - ввод/вывод?

Там всё ровно нужно знать архитектуру проца. Конечно если просто светодиодом помигать, то архитектуру знать не нужно, а если что то серьёзнее то нужно.

В этом отношении проще всего 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/

УДАЧИ в изучении!

Vitec

Я видел этот сайт, скачать с него нельзя, ссылки зациклены - сказка про белого бычка. 😦

Что образуется на выходе Pic-Basic? Как это зашить в контроллер?

Algorithm Builder. Но - для Atmel’ов.

Когда хорошо знаешь контроллеры, легко работать с разными типами, брать программы для одного, зашивать в другой… Но я пока только осваиваю, выбрал для освоения PIC - вот и буду с ним работать. Изучу - возьмусь за Atmel и прочие.

А какие существуют правила для ассемблера? Имена регистров можно так и писать, как они названы в документации к контроллеру? Как там ставить метки? Что значит инициализировать порт, просто обозначить какая ножка будет выходом а какая входом?

ubd

Я видел этот сайт, скачать с него нельзя, ссылки зациклены - сказка про белого бычка.

Причём тут бычёк, зарегистрироваться нужно и всё.

Что образуется на выходе Pic-Basic? Как это зашить в контроллер?

Как всегда, любой компилятор любого языка программирования, для микроконтроллеров, генерит файл с расширением .hex Вот его то и прошивают в контроллер.

Для прошивки контроллера, нужен программатор. Зашивается просто, нажимаешь кнопку и зашивается, hex файл. Ещё биты конфигурации нужно установить. Для разных типов процов, разные программаторы и программы. Для PIC есть хороший и не сложный программатор ExtraPIC. Если будешь делать дам схему. Для Atmel программатор проще, называется STK-200, есть ещё STK-300 и 500. Но достаточно STK-200. Выше о нём писали.

А какие существуют правила для ассемблера? Имена регистров можно так и писать, как они названы в документации к контроллеру? Как там ставить метки? Что значит инициализировать порт, просто обозначить какая ножка будет выходом а какая входом?

Так ты ассемблер изучать собрался или что? Определись.

Vitec

Вообще хочу изучить ассемблер, но рассмотрю и другие варианты, такие, как Pic-Basic.

ubd:

Для прошивки контроллера, нужен программатор

Есть программатор, называется PICPROG. Осталось только научиться писать программы.
Есть несколько задач, которые я хотел бы возложить на контроллер, одна из них - перед вами.
Есть пару контроллеров, чтобы потренироваться, один из них PIC12F629. К нему есть перевод заводской микрочиповской документации. В нём по отдельности всё понятно, но когда нужно написать программу, мозг вскипает и как писать - непонятно. Поэтому я и спрашиваю, может кто поможет? Кроме того, всё дело тормозит отсутствие информации о правилах самого ассемблера, его дерективах. Во всех источниках это преподносится как само собой разумеющееся, но я-то этого не знаю.

ubd

Я так понял PICBаsic вы проигнорировали. Почему?

Нужно вам искать книгу по ассемблеру с нуля. Или зайдите на www.microchip.su Там на форуме очень много обсуждают ассемблер.

А почему именно ассемблер? Что бы на нём написать вашу простую задачу, нужно много знать.