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

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 Там на форуме очень много обсуждают ассемблер.

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

Vitec

Да не-е-ет, не проигнорировал, просто ещё не скачал PIC-Bаsic. Идея программировать на Бэйсике мне очень нравится. Я помню в университете, в ещё раньше в техникуме, когда изучали Бэйсик, у меня получалось круче всех в группе писать на нём программы, может потому, что впервые я начал на нём писать ещё в детстве на ZX Spectrum. Но идею освоить ассемблер я тоже не оставил, поэтому заданные мной вопросы остаются открытыми. Я считаю, что чем ближе язык программирования к машинным кодам, тем копмактнее получается программа и тем точнее программа отвечает заданным требованиям. Кроме того, многие готовые программы написаны на ассемблере и в них можно будет разобраться, владея этим языком.
За ссылку на микрочип спасибо, обязательно почитаю.
Вот когда скачаю PIC-Bаsic, если сам не разберусь - тогда и буду спрашивать про него, чтобы было более предметно.

ubd

у меня получалось круче всех в группе писать на нём программы, может потому, что впервые я начал на нём писать ещё в детстве на ZX Spectrum.

Вот кстати по этой же причине и у меня получалось круче всех. То же начинал с Spektrum`a.

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

Да это так, компактнее на много.

и тем точнее программа отвечает заданным требованиям.

Не факт, на других языках так же может точно отвечать требованиям. Только есть разница, что бы написать то же самое на ассме, трубется асм знать от и до, и время на написание программы может уйти раз в 5 больше. В отличии от языков высогого уровня. Поэтоум сейчас очень распространён СИ. Прога пишеться быстро и работает быстро, а времени уходит меньше на написание и отладку.

Кроме того, многие готовые программы написаны на ассемблере и в них можно будет разобраться, владея этим языком.

Но если есть исходник, а не hex файл.

14 days later
Vitec

Ура, товарищи! Я скачал PIC-Basic и описание к нему.
В этом документе иногда встречается странное слово DEFINE, например, в такой строчке:

DEFINE BUTTON_PAUSE 50 ‘ Дребезг кнопки задерживается на 50ms

Что означает это слово?

ubd:

время на написание программы может уйти раз в 5 больше

Почитав это руководство, я понял, что это действительно так,особенно если дело касается протоколов передачи данных или звуковых эффектов. Но в случае ввода вывода на ассемблере дело может ограничится несколькими строками, а бэйсик сделает это за несколько сотен байт. Становится страшно, влезет ли код в контроллер?

ubd

Становится страшно, влезет ли код в контроллер?

Собственно влезает нормально. Если он одне операцию делает за несколько сотен байт, то добавив ещё одну программа увеличивается всего на 10-15 байт, так что он использует одну и ту же библиотеку.
Например взяв проц 2К памятью, можно написать серьёзную программу. Я написал на нём реверсивный регулятор хода, с отсечкой по разряду аккума и защита от пропадания сигналла. Прога заняла 80% пространства в памяти. Но работает идеально! Ту же прогу я умещал в 1К памяти, убрав все понтовые примочки.

DEFINE BUTTON_PAUSE 50 ‘ Дребезг кнопки задерживается на 50ms

Это по моему к ProtonBasic относиться.

Ты какое описание скачал? И какой компилятор?

Я же выкладывал ссылки в 52 посту. Там по Протону ничего.

Aleksey_Gorelikov
Vitec:

В этом документе иногда встречается странное слово DEFINE,
Что означает это слово?

Это присвоение чему-нибудь буквенного обозначения. К примеру:
дефайн первое_слагаемое 3
дефайн второе_слагаемое 5

Тут мы присвоили константам 3 и 5 символьные обозначения. Далее в программе мы можем использовать эти самые обозначения, отвлекшись от цыфр.

Сумма = первое_слагаемое + второе_слагаемое.
В переменной “Сумма” окажется результат сложения (3+5=8)

Очень удобно присваивать символьное обозначение портам ввода вывода. Например:
Пусть к ноге 3 бита порта А мы подсоединили светодиод.
дефайн светодиод портА.3
дефайн вкл=1
дефайн выкл=0

Далее в программе включаем светодиод:
Светодиод=вкл
Пауза
И выключаем.
Светодиод=выкл

Зачем это надо: Вот ты сделал устройство и отладил его на макете. Потом разводишь печатную плату и оказывается неудобным подключать светодиод именно к третьей ноге порта А, а на плате удобней его развести на портС.5 .
Разводишь как удобнее, а в программе изменяешь льшь одну строчку дефайн и все. Тебе не нужно ползать по всей программе и искать где ты светодиод зажегал, а где гасил.

Vitec

Зачем нужен DEFINE в той строчке, которую я привёл в качестве примера? Разве нельзя обойтись без него?
Как ни странно, но в описании также отсутствует слово VAR. Из контекста я догадываюсь, что это тоже присвоение. Это так?

Какое описание скачал? И какой компилятор?

Файл описания называется PBP manual rus - это явно машинный перевод.
Приложение компилятора называется MicroCode Studio

Когда я указываю компилятору свой контроллер (PIC12F629), он подключает файл PBPPIC14.RAM, в котором определено куча переменных, размером WORD. Но я не собираюсь в своей программе использовать такое количество длиннющих переменных. Можно ли убрать строчку, подключающую этот файл? Какие могут быть последствия? И вообще, могу ли я поудалять всякие назначенные переменные, которые сами появляются вместе с подключаемыми файлами и описаниями контроллера или это служебные переменные для самого PIC-Basic?

Могу ли я использовать в комментариях кирилицу?

Также при указании компилятору моего контроллера, вначале появляются строчки:
BANK0 $0020, $005F
EEPROM $2100, $217F
LIBRARY “PBPPIC14”
Поясните, что это значит?

Aleksey_Gorelikov

Ну… Вот у тебя программа из 5 файлов по 10 экранов. И понадобилось тебе задержку поменять. Сделать не 50мс, а 55, к примеру. Ты через месяц эту элементарную задачу будешь выполнять в течении пары часов. Будешь перерывать все исходники, искать нужные задержки, вспоминать алгоритм и соображать то-ли это место, та-ли задержка… А тут у тебя в дефайнах, прямо в начале программы все критичные константы заданы (ну или вобще в отдельном файле), в проге они вполне понятно называются - алгоритм читается легко и т.д. Это же удобно. Но чтобы осознать - надо начать что-то делать, наступить на грабли, получить полбу и осознать.

Var - это объявление переменных (чтобы компилятор знал что это переменные, и их тип).

Если задаете такие вопросы - то какой язык изучать - вам всеравно. Изучайте С! Он более стандартизирован, более кросплатформен. Берете любую книжку “С для чайников” и вперед! Пытаться писать на ассемблере - это только в случае острой необходимости при ограниченном быстродействии. Смысла в этом не много. Вдруг придется на другой контроллер перескакивать - и опять все сначала. А если на С писать - практически ничего менять в программе не придется, если к примеру с пика на Авр перепрыгивать.

ubd

Файл описания называется PBP manual rus - это явно машинный перевод.

Там я выкладывал книгу Чака Хелибайка. Поищи на том сайте, она была в нормально отсканированном виде. Если не найдёшь, могу выслать на почту.

MicroCode Studio

Да это PIC Basic PRO

Vitec

Конечно, лучше на почту. Здесь можно писать адрес электронной почты?

надо начать что-то делать, наступить на грабли…

Сейчас наступим. Я начну ту задачку, что приводил ранее.

А тут у тебя в дефайнах, прямо в начале…

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

А по русски можно писать в комментариях?

Aleksey_Gorelikov

ну попробуйте закомментировать. Ошибки не появится - значит не нужны. Тут же все просто.

Комментарии кажется везде можно писать русскими.

Vitec

Вобщем, попробовал я написать небольшую программку на ту тему, что задал ранее. Напоролся на следующие грабли:

  • компилятор отказывается компилировать мою программу. Он пишет: “fatal: out of memory (pbpw.exe)”,хотя программка у меня получиласть довольно маленькая. Чего теперь делать?
  • в описании контроллера написано, чтобы включить внутренний тактовый генератор 4МГц, нужно задать режим INTOSC (xx000xxxxxx100) в слове конфигурации. Но в оболочке программатора нет такого режима. Там есть такие: LP, XT, HS, EC, IRC, IRC+, ER, ER+. Какой нужен, чтобы использовать внутренний генератор, а все физические выводы - как порты ввода-вывода?