Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 99

Раз появился такой интерес к азам программирования, а наименование топика, где этот интерес проявился не очень благозвучен , то предлагаю открыть данный топик, где на элементарном примере пройти "все круги ада" , начиная от техзадания, создания графа конечного автомата (как советует М. Гладштейн в журнале "Радио" №11 2000г.), проработки алгоритма, написания программы и заканчивая созданием действующего макета этого устройства, который в дальнейшем можно будет постепенно усовершенствовать, совершенствуясь в вопросах программирования.

1. За основу предлагаю взять техзадание, предложенное picmaniac'ом здесь: http://pro-radio.ru/controllers/2103-3/. Оно требует уточнения и с этого надо будет начать.

Цитирую его еще раз:

Техзадание (учебное):
Разработать устройство управления четырьмя светодиодами с управлением от четырех кнопок. В устройстве применить микроконтроллер PIC16F628(A). Обеспечить: при нажатии на кнопку 1 зажигание светодиода №1, при нажатии на кнопку 2 зажигание светодиодов №1 и №2 одновременно, на кнопку 3 - №1, №2 и № 3, на кнопку 4 - всех четырех. Кнопки однополюсные без фиксации. При всех отпущенных кнопках светодиоды гореть не должны. При двух (и более) одновременно нажатых кнопках также не должны. Тактовый генератор внутренний. Кнопки подключить к "общему" проводу, светодиоды к шине питания.

2. Литература, необходимая на данном этапе (чтобы ссылаться на конкретное сожержание):

а) "Радио №11 2000г. стр. 25 "Проектируем устройства на микроконтроллерах" М. Гладштейн
б) "Радио №12 2000г. стр.20 "Проектируем устройства на микроконтроллерах" М. Гладштейн
в) "Радио" №№5-11 2001г., "Радио" №1 2002г. "Разработка и отладка устройств на МК" А. Долгий
в дальнейшем перечень литературы будет пополняться, поэтому этот перечень лучше сохранить отдельным файлом, впрочем как и техзадание.

3. В качестве м/к предлагаю выбрать PIC16F628(A) (это же указано и в техзадании), как недорогой, доступный, обладающий достаточными ресурсами и совместимый по выводам с м/к PIC16F84A.

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

5. Не приветствуется:
а) распальцовка и показ своей крутизны в деле программирования м/к
б) споры "тупоконечников с остроконечниками", т.е. какой м/к круче PIC или AVR. Изначально выбраны PIC'и и спор здесь неуместен.
в) насмешки и подколы по поводу грамотности в вопросе программирования м/к и прочие грубости.
г) прочий флейм (хотя и не запрещается) .

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

 

условия устраивают, PIC16F84A есть в наличии, (спасибо Dron_Gus"у) хотелось бы высказать пожелание, устройство управления четырьмя светодиодами от четырех кнопок. кажется какимто простым, может подождём когда Левон ТЗ сформулирует?. а пока ещё раз перечитать библию http://www.microchip.ru/files/d-sheets-rus/PIC16_Manual.pdf 13 Мб. также вот этим запастись не плохо было-бы (система команд) http://www.microchip.ru/files/d-sheets-rus/PIC16_29.pdf ну и конкретно на 62Х-ой http://www.microchip.ru/files/d-sheets-rus/pic16f62x.pdf
может ещё кто литературку подскажет нужную для данного проекта? которую по ходу его реализации под рукой иметь желательно всем. (по крайней мере кто пик на макет хочет посадить)
и ещё один вопрос, на чём кодить будем? на ASMе или Сях? хотелось бы на ASMе, так как ближе к железу, да и чего скрывать хоть какието знания по нему у меня имеются, но всё равно я с большинством. также нужны ссылки на компилятор которым пользоватся решим.

 

Splav56: устройство управления четырьмя светодиодами с управлением от четырех кнопок.
Это конечно круто... Я не шучу, не так уж и легко это сделать начинающему, но попутно хочу предложить другое устройство, т.е. совместить приятное с полезным!
Итак, техзадание (или подобие..) на «Блок сигнализации» для входной двери.
В квартире, ЗА входной дверью должна находиться клавиатура 4х3 – цифры от 0-9, * и #.
Живущие в квартире люди договариваются о некоем коде, который будет действовать. Причём, этот код можно менять хоть каждый день, хоть каждый час… главное договориться!
Происходить должно следующее: при выходе из жилища человек набирает опредёленный код, после чего нажимает на кнопку «ВВОД» (* и ли # - без разницы) – открывает дверь и выходит. При входе надо за определённое время нажать ТОТ ЖЕ код и опять нажать на «ВВОД» и тогда ничего не будет, если же человек не успевает нажать или набирает неправильные цифры, то срабатывает сигнализация и начинается «цепная реакция»… со всеми вытекающими последствиями… Должна быть ещё кнопка «СБРОС», если вдруг неправильно набрали… Кроме всего прочего должен быть так называемый «код администратора», который делает безусловный сброс всей системы, а то мало ли что может случиться – человек может забыть, чего он набрал… Также должен быть специальный код тревоги, но который бы не включал никаких сирен и пр. сигналов, кроме как подача сигнала на пульт охраны или скажем, к соседу, который подоспеет с обрезом…
Чем хороша такая система – тем, что тастатура (сами кнопки) не видна извне и ни у кого не появится соблазн понажимать кнопочки.. Если не очень трудно, то можно снабдить эту систему жк индикатором. Схему желательно реализовать на PIC-e серии F8XX (ну пожалуйста… ) Если не хватает выводов, то можно использовать клавиатуру по схеме http://www.disall.narod.ru/circuit.htm
Чуть не забыл - система должна быть энергонезависимой и не сбрасываться при включении/выключении.
Ну как вам сей проект?

 

Левон: Ну как вам сей проект?

Думаю не выучив алфавит ( первое ТЗ) нельзя научиться писать слова (второе ТЗ). Писать готовую программу никто не будет наверняка и Вам, Левон, придется это делать самому. Но вот чтобы научиться это делать и был задуман сей топик с несложным ТЗ. Нельзя написать подпрограмму опроса клавиатуры, не поняв как пишется подпрограмма опроса одной кнопки. Тоже касается и средств индикации. Не поняв как вывести сигнал включения с/д, нельзя понять как написать подпрограмму вывода данных на ЖКИ по SPI или I2C. Я за первое ТЗ. Ничто не мешает потом модернизировать устройство, заменив с/д на ЖКИ, выводя на дисплей номер нажатой кнопки, например. Тем более что железо переделывать практически не надо, если порты вывести на разъемы.

 

Си<-->Asm. Мне кажется на этом этапе Asm. Если Левон жалуется, что не может стартануть из-за того, что не чувствует связи между написанной программой и тем, что эта программа физически делает, я думаю на Си этот разрыв будет ещё больше. На ассемблере, всё же, что пишется, то и делается, в отличие от ЯВУ.
Splav56: графа конечного автомата Что-то я отстал от жизни, а что это такое? Насчёт блок-схем алгоритма полностью согласен, рисую их на Visio, затем экспортирую в *.gif. Время, затраченное на составление алгоритма затем экономит на порядок большее время, особенно если прошло больше недели, не говоря о том что программа любой сложности просто и логично уладывается в голове, иначе мешанина из каких-то обрывков кодов.
Еще совет: система команд обязательно д.б. распечатана на бумаге и постоянно быть перед глазами: и краткое содержание всех команд на 1 странице, и подробное описание каждой команды. Это основа.

 

Splav56: не выучив алфавит ...
Это бесспорно! Я только высказал, что я хочу сделать в дальнейшем, т.е. поделился планами на будущее... всего лишь! А чтобы написать программу (листинг) на Ваше с picmaniac'ом техзадание, надо обладать хоть какими-то знаниями, читать литературу. В выходные постараюсь заняться этим..

 

Я совсем не специалист по микроконтроллерам, так, на уровне первого класса церковноприходской школы . И до некоторых пор написание программ, даже простейших, для меня было тайной за семью печатями. Сколько бы я ни брался за изучение, ничего хорошего у меня не получалось. Все книги, написанные по микроконтролерам (я имею ввиду пики) казались мне написанными каким-то казенным языком для людей, уже разбирающихся в предмете. Все настолько скупо, что кроме тарабарщины в голове ничего не оседало. Это длилось до тех пор, пока я не набрел на один очень толковый ресурс в интернете http://ikarab.narod.ru/Kea_20.html
Это настоящий самоучитель для тех, которые взялись изучать пики с нуля. Ничего более доступного и понятного я ранее не встречал. Жаль, что автор не выпустил "бумажной" книги, это был бы настоящий бестселлер. Я распечатывал по нескольку страниц и читал. Все разжевано до мельчайших подробностей. А самое главное стиль - от простого к сложному прослеживается на протяжении всей книги. Я сам был сильно удивлен, когда через 3-4 дня изучения я вдруг почувствовал, что все уже знаю, и жутко захотелось написать собственную простенькую программочку. И самое смешное, что написал, прогнал в МПлабовском симуляторе и все работало!
Вы скажете, что от моего пафоса попахивает рекламой. Да, реклама, если хотите, но абсолютно бескорыстная. Если не верите, можете почитать книгу отзывов на этом сайте. Все - правда. "Проверено электроникой"

 

Zandy: спасибо конечно, но эту ссылку вчера давал picmaniac здесь- http://pro-radio.ru/controllers/2103/ Действительно ОЧЕНЬ хороший сайт!

 

gan: Splav56: графа конечного автомата Что-то я отстал от жизни, а что это такое?

Теорию графов я изучал в начале 80-х годов и за неимением постоянной практики в этом деле напрочь ее забыл. О построении графа конечного автомата при проектировании устройств на м/к как раз и рассказывается в статье М. Гладштейна, где утверждается, что он (граф) облегчает составление оптимального алгоритма действия системы. У меня же пока вызывает сплошные затруднения составление самого графа.

Цитата из статьи М. Гладштейна: "Дискретное устройство считается конечным автоматом, если удается перечислить все состояния, в которых оно может находиться, все события (внешние воздействия), приводящие к изменениям состояния, и все формируемые выходные сигналы. Именно таковы устройства на м/к."

 

Левон: но эту ссылку вчера давал picmaniac
Левон, не все сообщения читаю, особенно в этом разделе.
Но то, что многим эта ссылка известна, только радует. Просто хочется сказать автору этого сайта большое человеческое спасибо за его бескорыстный и очень полезный труд.