Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

cxema.org - Прошивка микроконтроллеров PIC

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

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

Самое широкое распространение среди радиолюбителей получили две линейки микроконтроллеров, PIC и AVR. Для их программирования разработано большое количество программаторов и программ. Для начала необходимо определится, на каком микроконтроллере выполнено устройство и в соответствии с этим выбрать программатор. С PIC микроконтроллерами понятно, у них название начинается именно с этих трёх букв, а AVR серии микроконтроллеры разделены на группы ATtiny, ATmega, ATxmega.

Своё знакомство с микроконтроллерами я начал с линей ки PIC. Для прошивки микроконтроллера, им оказался PIC16F84, я собрал простейший JDM программатор.

Детали программматора разместил в подходящем корпусе от переходника.

Дальнейшее знакомство с микроконтроллерами заставило меня постоянно вносить изменения, модернизировать программатор под тот или иной микроконтроллер. В один прекрасный момент я решил соблрать универсальный программатор под всю линейку PIC микроконтроллеров.

Очень хороший программатор, программирует всю линейку PIC. Не требует дополнительного питания.

Для прошивки PIC контроллеров я пользуюсь программой IC-Prog. Сам процесс прошивки очень простой:

Запускаем программу

заходим в настройки и выбираем свой программатор

Пробуем читать память микроконтроллера.

Если всё настроено правильно, программа прочитает микроконтроллер и выведет код, прошитый в памяти. Если микроконтроллер никогда не прошивался, Вся память будет заполнена кодом 3FFF и FF в области данных.

Следующий шаг, это открытие HEX файла, предназначенного для прошивки микроконтроллера, после открытия её код отобразится в соответствующих окнах.

Нажимаем кнопку записи, праграмм спросит, уверены, что хотите программировать, нажимаем утвердительно ДА. Пойдёт процесс программирование.

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

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

С PIC микроконтроллерами всё понятно. Для AVR микроконтроллеров требуются другие программаторы и программы.

Самый простой - это так называемый "5 проводков". Весь программатор состоит из всего четырёх резисторов.

Собрал я его минут за десять, но воспользоваться не смог, ввиду того, что на моём компьютере отсутствует принтерный порт LPT, к которому этот программатор подключается.

Тогда я собрал для самых ходовых у радиолюбителей микроконтроллеров семейства AVR программаторы. Первый для ATMEGA8, второй для ATtiny2313.

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

Номера выводов для подключения линий программатора отображены на рисунке

Собранный программатор позволил мне собрать программатор для AVR, подключаемый к USB порту

Удобство применения программатора с USB интерфейсом омрачается поиском драйверов на различные системы, в частности на win7 и 8. Для программаторов, использующих COM-порт таких проблем не возникает. Они прекрасно работают во всей линейке windows, да и в unix системах проблем не возникает. Впрочем unix система очень дружелюбна ко всем программаторам, адаптерам и прочей периферии.

Вот мой весь арсенал для прошивки микроконтроллеров

Небольшой видеообзор, который наглядно покажет весь процесс прошивки микроконтроллера

PIC K150 ICSP Программист USB Автоматическое программирование Разработка Microcontroller

K150 является недорогим высокопроизводительным программистом PIC, поддерживает самые популярные чипы PIC, запрограммирован, зачитыв, шифруется, использует высокоскоростную USB-коммуникацию, быстрое программирование, качество программирования стабильное и надежное. (Скорость в 3-5 раз PICSTART) полностью автоматическая проверка программирования; оснащен 40pin DIP программирования блок, прямое программирование 8pin-40pin DIP чип; 8pin-40 контактный чип, кроме как через борт интерфейс ICSP онлайн downloadsoftware; совместимая с программным обеспечением операционная система Windows98 и Windows2000/NT, Windows XP/windows7; новое устройство с pic эскалации. Мастер чип сохраняет пакет DIP с сиденьем! Поддержка моделей микроконтроллеров PIC: 10 серия: PIC10F200 * PIC10F202 * PIC10F204 * PIC10F206 * PIC10F220 * PIC10F222 * Серия 12C: PIC12C508 PIC12C508A PIC12C509 PIC12C509A PIC12C671 PIC12C672 PIC12CE518 PIC12CE519 PIC12CE673 PIC12CE674 12F серия: PIC12F509 PIC12F629 PIC12F635 PIC12F675 PIC12F683 16C серия: PIC16C505 PIC16C554 PIC16C558 PIC16C61 PIC16C62 PIC16C62A PIC16C62B PIC16C63 PIC16C63A РИС 16C 64 PIC16C64A PIC16C65 PIC16C65A PIC16C65B PIC16C66 PIC16C66A PIC16C67 PIC16C620 PIC16C620A PIC16C621 PIC16C621A PIC16C622 PIC16C622A PIC16C71 PIC16C71A PIC16C72 PIC16C72A PIC16C73 PIC16C73A PIC16C73B PIC16C74 PIC16C74A PIC16C74B PIC16C76 PIC16C77 PIC16C710 PIC16C711 PIC16C712 PIC16C716 PIC16C745 PIC16C765 PIC16C773 PIC16C774 PIC16C83 PIC16C84 16F серия: PIC16F505 PIC16F506 PIC16F54 PIC16F57 * PIC16F59 * PIC16F627 PIC16LF627A PIC16F627A PIC16F628 PIC16LF628A PIC16F628A PIC16F630 PIC16F631 PIC16F636 PIC16F631-1 PIC16F636-1 PIC16F639 * PIC16F639-1 * PIC16F648A PIC16F676 PIC16F677 PIC16F677-1 PIC16F684 PIC16F685 * PIC16F685-1 - PIC16F687 - PIC16F687 -1 PIC16F688 PIC16F689 * PIC16F689-1 * PIC16F690 * PIC16F690-1 * PIC16F72 PIC16F73 PIC16F74 PIC16F76 PIC16F77 PIC16F737 PIC16F747 PIC16F767 PIC16F777 PIC16F83 PIC16F84 PIC16F84A PIC16F87 PIC16F88 PIC16F818 PIC16F819 PIC16F870 PIC16F871 PIC16F872 PIC16F873 PIC16F873A PIC16LF873A PIC16F874 PIC16F874A PIC16F876 PIC16F876A PIC16F877 PIC16F877A 18 серия: PIC18F242 PIC18F248 PIC18F252 PIC18F258 PIC18F442 PIC18F448 PIC18F452 PIC18F458 PIC18F1220 PIC18F1320 PIC18F2220 PIC18F2320 PIC18F2321 PIC18F4210 PIC18F2331 PIC18F2450 PIC18F2455 PIC18F2480 PIC18F2510 PIC18F2515 PIC18F2520 PIC18F2550 PIC18F2580 PIC18F2585 PIC18F2610 PIC18F2620 PIC18F2680 PIC18F4220 PIC18F4320 PIC18F6525 PIC18F6621 PIC18F8525 PIC18F8621 PIC18F2331 PIC18F2431 PIC18F4331 PIC18F4431 PIC18F2455 PIC18F2550 PIC18F4455 PIC18F4580 PIC18F2580 PIC18F2420 PIC18F20 PIC18F2520 PIC18F2620 PIC18F6520 PIC18F6620 PIC18F6720 PIC18F6585 PIC18F6680 PIC18F885 PIC18F885 PIC18F880 PIC18F8680 Особенности: Поддержка самых популярных считывание, шифрованием и другими функциями программиста PIC! 2 нет внешнего источника питания, связи и питания только USB печати линии завершена, без каких-либо кабелей.

Скорость программирования гораздо быстрее, чем PICSTARTPLUS. 3 можно легко прочитать содержимое области программы чипа. 4 полностью автоматическая проверка программирования. 5. Всеобъемлющей информации, позволяющей пользователям четкое понимание рабочего состояния. 6 с 40pin qIF программирования блок, прямое программирование 8-контактный 40-контактный PIC микроконтроллер, патч может быть использован для преобразования блока ICSP онлайн сжигания или добавить. За пределами 7. 8pin40 контактный чип на борту ICSP выход непосредственно онлайн скачать. 8 совместим с Windows98 и Windows2000/NT, Windows XP / Windows 7 и другими операционными системами. 9 программное обеспечение программирования является простым в использовании инструкции для использования.

Тип товара: Электронные модули

Программатор PIC K150 ICSP, автоматическое программирование Ач robot】лучшие цены, USB программатор, микроконтроллер + USB кабель ICSP|cable tensor|cable rangecable rs232

K150-это недорогой высокопроизводительныйФотоПрограммист, поддержка самых популярныхФотоЧипы, запрограммированы, читаются, шифруются, используют высокоскоростнуюUSBКоммуникация, быстрое программирование,Качество программирования стабильное и надежное. (Средняя скоростьPICSTART +3-5Время)Полностью автоматическая контрольная сумма программирования;Оснащен40pinDIPБЛОК ПРОГРАММИРОВАНИЯ, прямое Программирование8pin-40pinDIPЧип;8pin-40 pinЧип, кроме встроенногоICSPОнлайн-загрузка интерфейсаПрограммное обеспечение; Программное обеспечение совместимо сWindows 98ИWindows 2000/NT, Windows XP/windows7Операционная система;Новое устройствоБудет отличаться отФотоОбостряется.Мастер-чип сохраняетDIPПосылка с сиденьем!(Примечание: некоторые производители похожих деталей основного чипа smd-чипа, не вызывают никаких небольших проблем с обновлениями в будущем, не могут даже обновить нашПродукты предоставляют услуги по обновлению срока службы)

ПоддержкаФотоМодели микроконтроллера:
10Серия:
PIC10F200 и * PIC10F202 * a PIC10F204 * PIC10F206
PIC10F220 * PIC10F222 *12C
Серия:
PIC12C509 PIC12C509A, PIC12C508 PIC12C508A
PIC12C671 PIC12C672 PIC12CE518 PIC12CE519
PIC12CE673 PIC12CE67412F
Серия: H
PIC12F509 PIC12F629 PIC12F635
PIC12F675 PIC12F68316C
Серия:
PIC16C505 PIC16C554 PIC16C558 PIC16C61
PIC16C62 PIC16C62A использует PIC16C62B PIC16C63
PIC16C63A PIC 16C64 PIC16C64A PIC16C65
PIC16C65A PIC16C65B PIC16C66 PIC16C66A
PIC16C67 PIC16C620 PIC16C620A PIC16C621
PIC16C621A PIC16C622 PIC16C622A PIC16C71
PIC16C71A PIC16C72 PIC16C72A PIC16C73
PIC16C73A PIC16C73B PIC16C74 PIC16C74A
PIC16C74B PIC16C76 PIC16C77 PIC16C710
PIC16C711 PIC16C712 PIC16C716 PIC16C745
PIC16C765 PIC16C773 PIC16C774 PIC16C83
PIC16C8416F
Серия:
PIC16F505 PIC16F506, PIC16F54 PIC16F57 *
PIC16F59 * PIC16F627 PIC16LF627A PIC16F627A
PIC16F628 PIC16LF628A PIC16F628A PIC16F630,

PIC16F631 PIC16F631-1 PIC16F636 PIC16F636-1
PIC16F639 * PIC16F639-1 * PIC16F648A PIC16F676
PIC16F677 PIC16F677-1 PIC16F684 PIC16F685 *
PIC16F685-1 * PIC16F687 * PIC16F687 * -1 PIC16F688
PIC16F689 * PIC16F689-1 * PIC16F690 * PIC16F690-1 *

PIC16F72 PIC16F73 PIC16F74
PIC16F76 PIC16F77 PIC16F737 PIC16F747
PIC16F767 PIC16F777 PIC16F83 PIC16F84
PIC16F84A PIC16F87 PIC16F88 PIC16F818
PIC16F819 PIC16F870 PIC16F871 PIC16F872
PIC16F873 PIC16F873A PIC16LF873A PIC16F874
PIC16F874A PIC16F876 PIC16F876A PIC16F877
PIC16F877A18
Серия:
PIC18F242 PIC18F248 PIC18F252 PIC18F258 PIC18F442 PIC18F448
PIC18F452 PIC18F458 PIC18F1220 PIC18F1320 PIC18F2220 PIC18F2320
PIC18F2321 PIC18F4210 PIC18F2331 PIC18F2450 PIC18F2455 PIC18F2480
PIC18F2510 PIC18F2515 PIC18F2520 PIC18F2550 PIC18F2580
PIC18F2585 PIC18F2610 PIC18F2620 PIC18F2680 PIC18F4220 PIC18F4320
PIC18F6525 PIC18F6621 PIC18F8525 PIC18F8621 PIC18F2331 PIC18F2431
PIC18F4331 PIC18F4431 PIC18F2455 PIC18F2550 PIC18F4455 PIC18F4580 PIC18F2580 PIC18F2420 PIC18F2520 PIC18F2620 PIC18F6520 PIC18F6620

. ..

Особенности:

1.Поддерживает большинство популярных программирующих чипов изображений, шифрование и другие функции!
2. Нет внешнего источника питания, связи и источника питания, только USB линия печати завершена, без каких-либо кабелей.2.Скорость программирования, чемPICSTARTPLUSГораздо быстрее.3.Удобная программа считывания микросхем.4.Полностью автоматическая контрольная сумма программирования.5.Полная информация дает пользователям четкое представление о работе.6.Оборудовано40pinZIFБЛОК ПРОГРАММИРОВАНИЯ, прямое Программирование8-pin к 40-контактныйМикроконтроллер PIC чип может ICSP онлайн-программатор или плюс место для преобразованияСнаружи7. 8pin40 pinЧипВыход непосредственно онлайн скачатьЧерез бортовойICSP.8.Совместим сWindows 98ИWindows 2000/NT, Windows XP / Windows 7 иПрочие операционные системы.9 программного обеспечения проста в использовании.

Все своими руками Программа для проверки выходных буеров PIC16F676 и PIC16F628A

Опубликовал admin | Дата 21 февраля, 2021

Программа для проверки выходных буферов портов ввода/вывода.

 

В статье пойдет речь о небольшой программке, позволяющей проанализировать целостность выходных буферов микроконтроллеров PIC16F676 и PIC16F628A. Нередко в радиолюбительской практике возникает ситуация, когда сразу трудно определить, что является причиной не работоспособности создаваемого устройства с микроконтроллерами, толи программа глючит, толи не исправны схемы вывода портов микроконтроллера.

В частности у меня не раз и не два в процессе настройки устройства и его эксплуатации отказывали контроллеры китайского производства. Схема подключения проверяемого микроконтроллера проста. Смотри рисунки ниже.

Это скриншот из протеуса для микроконтроллера PIC16F676 и на схеме не указано подключение шин питания. В микроконтроллере PIC16F676 вывод RA3 этого порта «А» может работать только на вход. Поэтому он используется для работы с кнопкой. Резистор R1 – подтягивающий резистор номиналом 5… 10 ком. При подаче напряжения питания на микроконтроллер и отпущенной кнопке (рисунок слева)на всех выводах портов PORTA и PORTC, сконфигурированных на вывод данных, должна присутствовать логическая единица. В протеусе, применительно к цифровым микросхемам логическая единица индицирована красным цветом соответствующего вывода. При нажатии на кнопку состояние потенциала на всех выводах меняется на противоположное, т.е. на логический ноль – рисунок справа.
Схема включения микроконтроллера PIC16F628A показано на скринах ниже.

PORTA – 8-разрядный порт ввода вывода. RA4 имеет триггер Шмидта на входе и открытый сток на выходе, поэтому к нему подключен подтягивающий резистор R1 – 5,1 ком. RA5 имеет триггер Шмидта на входе, без выходного буфера, используется только на вход. Этот вывод микроконтроллера используется для подключения кнопки. Все остальные каналы PORTA имеют триггер Шмидта на входе и полнофункциональные выходные КМОП буферы. PORTB – 8-разрядный двунаправленный порт ввода/вывода. Т.е. все вывода этого порта имеют полнофункциональные выходные КМОП буферы. Алгоритм проверки выходных КМОП буферов такой же, как и у микроконтроллера PIC16F676. При отпущенной кнопке на всех выводах, имеющих выходные буферы, устанавливается логическая единица. При замыкании контактов кнопки на всех выводах напряжение падает практически до нуля – логический ноль.

 

[poll]

 

Нужно ли далее публиковать статьи в "Программирование для начинающих"Poll Options are limited because JavaScript is disabled in your browser.
  • Конечно Да. 82%, 36 голосов

    36 голосов 82%

    36 голосов - 82% из всех голосов

  • Да 14%, 6 голосов

    6 голосов 14%

    6 голосов - 14% из всех голосов

  • Можно и не публиковать 2%, 1 голос

    1 голос 2%

    1 голос - 2% из всех голосов

  • Не знаю 2%, 1 голос

    1 голос 2%

    1 голос - 2% из всех голосов

×

Вы или с вашего IP уже голосовали. Голосовать

Скачать файлы проекта.

Скачать “Программа для проверки выходных буеров PIC16F676 и PIC16F628A” Programma_proverki_PIC16F676_PIC16F628A.rar – Загружено 63 раза – 120 КБ

Обсудить эту статью на - форуме "Радиоэлектроника, вопросы и ответы".

Просмотров:386


Прошивка PIC микроконтроллеров с "нуля". / Микроконтроллеры / Блоги по электронике

Итак, пришло время изучать микроконтроллеры, а потом и их программировать, а так же хотелось собирать устройства на них, схем которых сейчас в интернете ну просто море. Ну нашли схему, купили контроллер, скачали прошивку….а прошивать то чем??? И тут перед радиолюбителем, начинающим осваивать микроконтроллеры, встает вопрос – выбор программатора! Хотелось бы найти оптимальный вариант, по показателю универсальность — простота схемы — надёжность. «Фирменные» программаторы и их аналоги были сразу исключены в связи с довольно сложной схемой, включающей в себя те же микроконтроллеры, которые необходимо программировать. То есть получается «замкнутый круг»: что бы изготовить программатор, необходим программатор. Вот и начались поиски и эксперименты! В начале выбор пал на PIC JDM. Работает данный программатор от com порта и питается от туда же. Был опробован данный вариант, уверенно запрограммировал 4 из 10 контроллеров, при питании отдельном ситуация улучшилась, но не на много, на некоторых компьютерах он вообще отказался что либо делать да и защиты от «дурака» в нем не предусмотрено. Далее был изучен программатор Pony-Prog. В принципе, почти тоже самое что и JDM.Программатор «Pony-prog», представляет очень простую схему, с питанием от ком-порта компьютера, в связи с чем, на форумах, в Интернете, очень часто появляются вопросы по сбоям при программировании того, или иного микроконтроллера. В результате, выбор был остановлен на модели «Extra-PIC». Посмотрел схему – очень просто, грамотно! На входе стоит MAX 232 преобразующая сигналы последовательного порта RS-232 в сигналы, пригодные для использования в цифровых схемах с уровнями ТТЛ или КМОП, не перегружает по току COM-порт компьютера, так как использует стандарт эксплуатации RS232, не представляет опасности для COM-порта.Вот первый плюс!
Работоспособен с любыми COM-портами, как стандартными (±12v; ±10v) так и с нестандартными COM-портами некоторых моделей современных ноутбуков, имеющих пониженные напряжения сигнальных линий, вплоть до ±5v – еще плюс! Поддерживается распространёнными программами IC-PROG, PonyProg, WinPic 800 (WinPic800) и другими – третий плюс!
И питается это все от своего собственного источника питания!
Было решено – надо собирать! Так в журнале Радио 2007 №8 был найден доработанный вариант этого программатора. Он позволял программировать микроконтроллеры в двух режимах.
Известны два способа перевода микроконтроллеров PICmicro в режим программирования:
1. При включённом напряжении питания Vcc поднять напряжение Vpp (на выводе -MCLR) от нуля до 12В
2.При выключенном напряжении Vcc поднять напряжение Vpp от нуля до 12В, затем включить напряжение Vcc
Первый режим — в основном для приборов ранних разработок, он накладывает ограничения на конфигурацию вывода -MCLR, который в этом случае может служить только входом сигнала начальной установки, а во многих микроконтроллерах предусмотрена возможность превратить этот вывод в обычную линию одного из портов. Это еще один плюс данного программатора. Схема его приведена ниже:

Крупнее
Все было собрано на макетке и опробовано. Все прекрасно и устойчиво работает, глюков замечено небыло!
Была отрисована печатка для этого программатора.
depositfiles.com/files/mk49uejin
все было собрано в открытый корпус, фото которого ниже.


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

Итак, программатор собран, кабель тоже, наступил черед проверки всего этого хозяйства на предмет работоспособности, поиск глюков и ошибок.
Сперва наперво устанавливаем программу IC-prog, которую можно скачать на сайте разработчика www.ic-prog.com, Распакуйте программу в отдельный каталог. В образовавшемся каталое должны находиться три файла:
icprog.exe — файл оболочки программатора.
icprog.sys — драйвер, необходимый для работы под Windows NT, 2000, XP. Этот файл всегда должен находиться в каталоге программы.
icprog.chm — файл помощи (Help file).
Установили, теперь надо бы ее настроить.
Для этого:
1.(Только для Windows XP): Правой кнопкой щёлкните на файле icprog.exe. «Свойства» >> вкладка «Совместимость» >> Установите «галочку» на «Запустить программу в режиме совместимости с:» >>выберите «Windows 2000».
2.Запустите файл icprog.exe. Выберите «Settings» >> «Options» >> вкладку «Language» >> установите язык «Russian» и нажмите «Ok».
Согласитесь с утверждением «You need to restart IC-Prog now» (нажмите «Ok»). Оболочка программатора перезапустится.
Настройки" >> «Программатор

1.Проверьте установки, выберите используемый вами COM-порт, нажмите „Ok“.
2.Далее, „Настройки“ >> „Опции“ >> выберите вкладку „Общие“ >> установите „галочку“ на пункте „Вкл. NT/2000/XP драйвер“ >> Нажмите „Ok“ >> если драйвер до этого не был устновлен на вашей системе, в появившемся окне „Confirm“ нажмите „Ok“. Драйвер установится, и оболочка программатора перезапустится.
Примечание:
Для очень „быстрых“ компьютеров возможно потребуется увеличить параметр „Задержка Ввода/Вывода“. Увеличение этого параметра увеличивает надёжность программирования, однако, увеличивается и время, затрачиваемое на программирование микросхемы.
3.»Настройки" >> «Опции» >> выберите вкладку «I2C» >> установите «галочки» на пунктах: «Включить MCLR как VCC» и «Включить запись блоками». Нажмите «Ok».
4.«Настройки» >> «Опции» >> выберите вкладку «Программирование» >> снимите «галочку» с пункта: «Проверка после программирования» и установите «галочку» на пункте «Проверка при программировании». Нажмите «Ok».
Вот и настроили!
Теперь бы нам протестировать программатор в месте с IC-prog. И тут все просто:
Далее, в программе IC-PROG, в меню, запустите: Настройки >> Тест Программатора

Перед выполнением каждого пункта методики тестирвания, не забывайте устанавливать все «поля» в исходное положение (все «галочки» сняты), как показано на рисунке выше.
1.Установите «галочку» в поле «Вкл. Выход Данных», при этом, в поле «Вход Данных» должна появляться «галочка», а на контакте (DATA) разъёма X2, должен установиться уровень лог. «1» (не менее +3,0 вольт). Теперь, замкните между собой контакт (DATA) и контакт (GND) разъёма X2, при этом, отметка в поле «Вход Данных» должна пропадать, пока контакты замкнуты.
2.При установке «галочки» в поле «Вкл. Тактирования», на контакте (CLOCK) разъёма X2, должен устанавливаться уровень лог. «1». (не менее +3,0 вольт).
3.При установке «галочки» в поле «Вкл. Сброс (MCLR)», на контакте (VPP) разъёма X3, должен устанавливаться уровень +13,0… +14,0 вольт, и светиться светодиод D4 (обычно красного цвета).Если переключатель режимов поставить в положение 1 то будет светится светодиод HL3
Если при тестировании, какой-либо сигнал не проходит, следует тщательно проверить весь путь прохождения этого сигнала, включая кабель соединения с COM-портом компьютера.
Тестирование канала данных программатора EXTRAPIC:
1. 13 вывод микросхемы DA1: напряжение от -5 до -12 вольт. При установке «галочки»: от +5 до +12 вольт.
2. 12 вывод микросхемы Da1: напряжение +5 вольт. При установке «галочки»: 0 вольт.
3. 6 вывод микросхемы DD1: напряжение 0 вольт. При установке «галочки»: +5 вольт.
3. 1 и 2 вывод микросхемы DD1: напряжение 0 вольт. При установке «галочки»: +5 вольт.
4. 3 вывод микросхемы DD1: напряжение +5 вольт. При установке «галочки»: 0 вольт.
5. 14 вывод микросхемы DA1: напряжение от -5 до -12 вольт. При установке «галочки»: от +5 до +12 вольт.
Если все тестирование прошло успешно, то программатор готов к эксплуатации.
Для подключения микроконтроллера к программатору можно использовать подходящие панельки или же сделать адаптер на основе ZIF панельки (с нулевым усилием прижатия), например как здесь radiokot.ru/circuit/digital/pcmod/18/.
Теперь несколько слов про ICSP — Внутрисхемное программирование
PIC-контроллеров.
При использовании ICSP на плате устройства следует предусмотреть возможность подключения программатора. При программировании с использованием ICSP к программатору должны быть подключены 5 сигнальных линий:
1. GND (VSS) — общий провод.
2. VDD (VCC) — плюс напряжение питания
3. MCLR' (VPP)- вход сброса микроконтроллера / вход напряжения программирования
4. RB7 (DATA) — двунаправленная шина данных в режиме программирования
5. RB6 (CLOCK) Вход синхронизации в режиме программирования
Остальные выводы микроконтроллера не используются в режиме внутрисхемного программирования.
Вариант подключения ICSP к микроконтроллеру PIC16F84 в корпусе DIP18:

1.Линия MCLR' развязывается от схемы устройства перемычкой J2, которая в режиме внутрисхемного программирования (ICSP) размыкается, передавая вывод MCLR в монопольное управление программатору.
2.Линия VDD в режиме программирования ICSP отключается от схемы устройства перемычкой J1. Это необходимо для исключения потребления тока от линии VDD схемой устройства.
3.Линия RB7 (двунаправленная шина данных в режиме программирования) изолируется по току от схемы устройства резистором R1 номиналом не менее 1 кОм. В связи с этим максимальный втекающий/стекающий ток, обеспечиваемый этой линией будет ограничен резистором R1. При необходимости обеспечить максимальный ток, резистор R1 необходимо заменить (как в случае c VDD) перемычкой.
4.Линия RB6 (Вход синхронизации PIC в режиме программирования) так же как и RB7 изолируется по току от схемы устройства резистором R2, номиналом не менее 1 кОм. В связи с этим максимальный втекающий/стекающий ток, обеспечиваемый этой линией будет ограничен резистором R2. При необходимости обеспечить максимальный ток, резистор R2 необходимо заменить (как в случае с VDD) перемычкой.
Расположение выводов ICSP у PIC-контроллеров:

Эта схема только для справки, выводы программирования лучше уточнить из даташита на микроконтроллер.
Теперь рассмотрим прошивку микроконтроллера в программе IC-prog. Будем рассматривать на примере конструкции вот от сюда rgb73.mylivepage.ru/wiki/1952/579
Вот схема устройства

вот прошивка
Прошиваем контроллер PIC12F629. Данный микроконтроллер для своей работы использует константу osccal — представляет собой 16-ти ричное значение калибровки внутреннего генератора МК, с помощью которого МК отчитывает время при выполнении своих программ, которая записана в последней ячейке данных пика. Подключаем данный микроконтроллер к программатору.
Ниже на сриншоте красными цифрами показана последовательность действий в программе IC-prog.

1. Выбрать тип микроконтроллера
2. Нажать кнопку «Читать микросхему»
В окне «Программный код» в самой последней ячейке будет наша константа для данного контроллера. Для каждого контроллера константа своя!Не сотрите ее, запишите на бумажку и наклейте ее на микросхему!
Идем далее

3. Нажимаем кнопку «Открыть файл...», выбираем нашу прошивку. В окне программного кода появится код прошивки.
4. Спускаемся к концу кода, на последней ячейке жмем правой клавишей мыши и выбираем в меню «править область», в поле «Шестнадцатеричные» вводим значение константы, которую записали, нажимаем «ОК».
5. Нажимаем «программировать микросхему».
Пойдет процесс программирования, если все прошло успешно, то программа выведет соответствующее уведомление.
Вытаскиваем микросхему из программатора и вставляем в собранный макет. Включаем питание. Нажимаем кнопку пуск.Ура работает! Вот видео работы мигалки
video.mail.ru/mail/vanek_rabota/_myvideo/1.html
С этим разобрались. А вот что делать если у нас есть файл исходного кода на ассемблере asm, а нам нужен файл прошивки hex? Тут необходим компилятор. и он есть — это Mplab, в этой программе можно как писать прошивки так и компилировать. Вот окно компилятора

Устанавливаем Mplab
Находим в установленной Mplab программу MPASMWIN.exe, обычно находится в папке — Microchip — MPASM Suite — MPASMWIN.exe
Запускаем ее. В окне (4) Browse находим наш исходник (1) .asm, в окне (5) Processor выбираем наш микроконтроллер, нажимаем Assemble и в той же папке где вы указали исходник появится ваша прошивка .HEX Вот и все готово!
Надеюсь эта статья поможет начинающим в освоении PIC контроллеров! Удачи!

PIC16F628_Первые_опыты - Nik_home_site

Первые опыты с PIC16F628

Уж и не чаял я, что вновь возьмусь за паяльник, но неожиданно друзья спросили: «А можешь…?»

Когда-то мне пришлось отвлечься от любимого увлечения – радиоэлектроники, и расстался я с ней тогда на этапе знакомства с PIC-контроллерами. Успел приобрести хороший программатор-отладчик MICD2 -MC1 с сайта http://5v.ru, и в запасе у меня лежала пара контроллеров PIC16F628. Они прекрасно подходили для решения той задачи, которой меня озаботили друзья, и я решил продолжить там, где остановился – освоить PIC-и и сделать людям игрушку.

Поскольку все это богатство пылилось у меня уже не один год, начал копаться в Интернете на предмет современного состояния дел. Порадовался, что мой отладчик еще продается, и следовательно, его можно использовать с современными операционными системами. Скачал с сайта MPLABX IDE и установил у себя. Антивирус и фаервол при этом изрядно нервничали, спрашивая, точно ли я доверяю фирме Микрочип? Пришлось несколько раз поклясться, что все Ок и надо ставить ПО. Кроме среды разработки MPLABX IDE также поставил компилятор XС8, хотя программировать собирался все равно на Ассемблере. Просто среда разработки упорно не желала без компилятора запускаться, считая видимо, что без С жизни нет. Ну да ладно, хоть и привык я к Ассемблеру, но С немного понимаю, да и к тому же я точно помнил, что большинство компиляторов С позволяют вставлять код на Ассемблере.

В общем, похвастаться общением с самым современным пакетом для разработчиков программ для PIC-контроллеров я не могу. Уже при установке меня напрягло то, что в списке поддерживаемого оборудования нет моего программатора, а есть ICD3. Многие команды компилятор не распознавал, хотя я был уверен, что все правильно. Я даже попробовал установить и запустить Linux версию MPLABX IDE, но она повела себя еще хуже – даже те команды и библиотеки, которые распознавались в среде, работающей под Windows, компилятор под Linux распознавать не желал. В конце концов, я решил начать работать с тем, на чем уже успешно работает сообщество, а эксперименты оставить или на потом, или вообще предоставить их разработчикам Микрочипа.

В архиве Микрочипа скачал MPLAB 8.88 http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_88.zip и вот тут-то дело пошло на лад. Во-первых, сразу запустился Ассемблер, безо всяких шаманских плясок. Во-вторых, распознался программатор. В-третьих, имея за плечами несколько бессонных ночей по милости MPLABX IDE, я уже неплохо ориентировался в приложенных к нему библиотеках и знал, где можно какие куски кода выдернуть.

Итак, у нас есть работающая среда разработки, и мы хотим написать работающую программу для PIC16F628.

Запускаем среду программирования, и в закладке Project выбираем Project Wizard:

Рисунок «Начало1»

 

Запускается помощник, в первом окне нажимаем «Далее», на втором – выбираем наш прибор – PIC16F629 и жмем «Далее», на третьем – выбираем среду, в которой мы будем писать нашу программу. Это будет MPASM Assembler (mpasmwin) v.5.47:

Рисунок «Выбор Ассемблера1»

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

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

Также здесь я указал MPLAB включить в проект файл pic16f628.inc, о назначении которого расскажу чуть позже. Файл этот имеется в библиотеке компилятора языка С, который я установил раньше и от использования которого отказался вместе с MPLABX. Вообще, чего не отнять у устанавливаемых пакетов, так это изрядного количества приготовленных заготовок, и в первую очередь именно заголовочных файлов.

Эти файлы нужны для того, чтобы нам с Вами не пришлось каждый раз заново набивать одни и те же куски кода. Изначально компилятор Ассемблера не знает ни названий регистров, ни названий битов, которые указаны в документации на контроллеры. Если Вы напишете ему команду:

MOVWF PORTA ; загрузка содержимого регистра W в защелку порта А,

То при компиляции система выдаст ошибку «Error[113]   …VIVESKA.ASM 25 : Symbol not previously defined (PORTA)», т.е. символ PORTA ей не знаком и мы должны его обозначить.

Файл pic16f628.inc содержит именно эти обозначения. В строчках вида:

PORTA equ 0005h

содержатся указания Ассемблеру, на какие цифровые коды заменять те выражения, которые мы будем писать в тексте программы. А для того, чтобы компилятор Ассемблера смог ими воспользоваться, в голове нашей программы мы приведем две строчки:

LIST p=pic16f628; Указание компилятору на тип выбранного контроллера

#include pic16f628.inc; Указание компилятору при компиляции текста программы использовать заголовочный файл.

В Интернете имеется уже приличное количество страничек пользователей, описывающих свои эксперименты с PIC-контроллерами, да и в самом MPLAB имеется неплохой раздел помощи, поэтому я не буду заострять внимание читателя на правилах написания кода – где пишутся команды, где метки, где комментарии – все это описано уже много раз и нет смысла повторяться.

Разберем только те нюансы, которые относятся к конкретному случаю – моей разработке.

Вот текст программы:

; программа для pic16f628

LIST p=pic16f628;

;#include pic16f6x_legacy.h;

#include pic16f628.inc;

__CONFIG 3F62h ;_CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _MCLRE_ON & _LVP_OFF & _CPD_OFF 

; описание регистров

DELAY1 EQU 0x20

DELAY2 EQU 0x21

; описание констант

DEL1 equ 00ffh

DEL2 equ 00ffh

INITA EQU B'00000000'

INITB EQU B'00000110'

RP EQU 05h 

; исполняемый код

ORG     00h

NOP

        GOTO    BEGIN ;

        ORG     100h

BEGIN

;Инициализация порта А

        BCF     STATUS,RP    ;Выбор банка 0

        CLRF    PORTA    ;Очистить регистр

MOVLW   07h          ;Выключить компаратор

MOVWF   CMCON ;Каналы порта А - цифровые входы-выходы 

        MOVLW   INITA        ;Загpузить B'00000000' в pегистp W

        BSF     STATUS,RP    ;Выбор банка 1

        MOVWF   TRISA        ;Все разряды порта А установить как выходы

;Инициализация порта В

        BCF     STATUS,RP    ;Выбор банка 0

        CLRF    PORTB     ;Очистить регистр 

        MOVLW   INITB        ;Загpузить B'00000110' в pегистp W

        BSF     STATUS,RP    ;Выбор банка 1

        MOVWF   TRISB        ;Все разряды порта В установить как выходы 

; Инициализация регистра OPTION

        BSF     STATUS,RP    ;Выбор банка 1

        MOVLW   07h        ;Загpузить B'00000111' в pегистp W

        MOVWF   OPTION_REG        ;Загрузить конфигурацию в регистр OPTION         

; Инициализация регистра INTCON

        BCF     STATUS,RP    ;Выбор банка 0

        MOVLW   00h          ;Загpузить B'00000000' в pегистp W

        MOVWF   INTCON       ;Загрузить конфигурацию в регистр, запретив все виды прерываний

; Инициализация передатчика USART

MOVLW   90h ; Разрешена работа последовательного порта и

MOVWF   RCSTA ; разрешен прием

; Инициализация решистра периферийных прерываний PIE1 

        BSF     STATUS,RP    ;Выбор банка 1

        MOVLW   00h          ;Загpузить B'00110000' в pегистp W

        MOVWF   PIE1       ;Загрузить конфигурацию в регистр, 

; Установка коэффициента деления и скорости передачи в SPBGR

        MOVLW   0ch          ;Коэффициент деления - 12

        MOVWF   SPBRG         ;

; Настройка приемника USART

        MOVLW   06h          ;Для снижения погрешности принят высокоскоростной режим

        MOVWF   TXSTA        ;

; Бегущий огонек

START1  BCF     STATUS,RP    ;Выбор банка 0

BSF RA2   ; Включение 1-го светодиода

CALL SEC_05 ; Вызов подпрограммы задержки на 0,5 сек

BCF RA2 ; Выключение 1-го светодиода

BSF RA3 ;Включение 2-го светодиода

CALL SEC_05 ; 

BCF RA3

BSF RA0

CALL SEC_05

BCF RA0

BSF RB0

CALL SEC_05

BCF RB0

BSF RB3

CALL SEC_05

RLF PORTB

CALL SEC_05

RLF PORTB

CALL SEC_05

RLF PORTB

CALL SEC_05

RLF PORTB

CALL SEC_05

CLRF PORTB

GOTO START1

 

SEC_05 BCF     STATUS,RP     ;Выбор банка 0

MOVLW DEL2 ;Счетчик двухкаскадный

MOVWF DELAY2 ; Второй каскад

LOOP2    MOVLW DEL1 ; 

         MOVWF DELAY1 ; Первый каскад

Loop1

         DECFSZ DELAY1

         GOTO Loop1

DECFSZ DELAY2

         GOTO LOOP2

RETURN

END

 

Из числа особенностей этого кода стоит наверно упомянуть одну – то, что после RA3 включается RA0, а не RA4. Это связано с тем, что у имевшихся в моем распоряжении экземпляров контроллеров не удавалось установить «1» на выводах RA4. Я решил, что причиной является выход их из строя, и просто перекинул на монтажной плате провод на другой вывод. В этом еще одно преимущество применения микроконтроллеров – делай я ту же схему на дискретной логике, соответствующего запаса у меня бы не было.

Набрав текст программы (или скопировав его отсюда), сохраняем проект. Дальше надо убедиться в том, что все набрано правильно – отладить программу. Открываем пункт меню debugger-Select Tool и выбираем пункт «MPLAB SIM». В окне «OUTPUT» появится одноименная вкладка (см. рис 4)

Рисунок «Выбор симулятора»

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

Нажимаем на кнопку «Run». При этом наша программа передается на обработку компилятору, который проверяет текст, проводит необходимые замены, о которых я упоминал выше, и готовит среду разработки к работе в режиме симуляции выбранного нами прибора. Ход этих операций отражается в окне «OUTPUT» во вкладке «BUILD». Если текст программы набран так же, как в моем примере, то кроме 3-х предупреждений и 12 сообщений, у компилятора претензий к нашей программе не появится. Да и на эти внимания обращать не стоит, поскольку внизу будет подведен краткий итог – «BUILD SUCCESSEDED». Если же будут сообщения об ошибках, а в конце появится строчка «BUILD FAILED», то надо перейти к строке, в которой найдена ошибка – ее номер будет указан в сообщении, проверить, что там не так, исправить, сохранить и еще раз нажать кнопку «RUN».

Итак, программа скомпилирована и Ассемблер считает, что ее можно зашивать в контроллер. Однако, Ассемблер проверяет только синтаксис программы, а вот то, какие данные мы пишем в тот или иной регистр, как с этими данными обращаемся, правильно ли расставили метки – это его не интересует. Следовательно, перед прошивкой желательно прогнать программу в симуляторе и посмотреть, что будет происходить в контроллере с нашей прошивкой.

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

Чтобы сэкономить свое время, первую часть программы – инициализацию специальных регистров, мы пройдем ускоренно, и после проверим, в каких регистрах какие значения оказались записаны. На метку START1 двойным щелчком установим точку останова, и рядом с номером строки появится красный круглый значок «В». Нажмем кнопку «RUN». Зеленая стрелка практически сразу перескочит на точку останова, и выполнение программы будет приостановлено.

Откроем два окна: во вкладке VIEW выберем последовательно «File Registers» и «Simulator Trace». По ним мы будем проверять процессы изменения содержания регистров в процессе выполнения программы. Найдем регистр Status. В нем сейчас записано значение 0х3С. Нажмем кнопку «Step Into» на меню симулятора. Симулятор выполнит команду, на которую указывает стрелка, перейдет к следующей команде и остановится. Теперь в регистре Status должно появиться значение 0х1С, что означает, что для работы выбран банк памяти «0». Продолжая щелкать по этой же кнопке, мы можем по шагам двигаться по программе и отслеживать ее выполнение. Давайте дойдем до входа в подпрограмму SEC_05. В ней организована задержка примерно на 0,26 секунды между переключениями светодиодов. При имеющемся у меня в наличии кварцевом резонаторе 2 МГц пришлось сделать подпрограмму двухкаскадной – один каскад обеспечивал лишь задержки порядка миллисекунд. Здесь выполнение крутится на одном месте очень долго, и щелкать 65536 раз скучно и долго. Поэтому щелкнув два-три раза, мы в окне File Registers найдем регистры с адресами 0х20 и 0х21, изменим их значения, вписав в столбце Decimal по единичке. Теперь после пары щелчков нас выведет из подпрограммы в основное тело программы. Таким образом мы можем проверить весь ход выполнения программы – устанавливая точки останова, прощелкивая по шагам места, которые требуют нашего пристального внимания, и перепрыгивая те куски кода, которые мы уже отладили.

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

Приведу схему макета:

Рисунок «Схема принципиальная»

Тип резисторов – С2-23-0,125-510 Ом ± 5%, конденсаторы – любые керамические 22пФ, Кварцевый резонатор 2МГц, светодиоды – АЛ307БМ. Собрана схема на куске макетной платы, контроллер установлен в кроватку. В качестве разъема использовалось гнездо телефонное 6Р6С из комплекта MCD2-MC1. Соединения от разъема к контактам микроконтроллера, предназначенные для его программирования в схеме, условно не показаны.

На приложенном видео можно составить представление о расположении элементов, и тут я могу поделиться некоторыми соображениями. Прежде всего генератор – из-за длинных выводов конденсаторов и резонатора, которые я не стал пока подрезать, понимая, что все это должно еще переноситься на основную печатную плату, наблюдались срывы генерации. Если в собранной схеме наблюдается нестабильная работа, попробуйте укоротить эти выводы.

Также необходимо учесть следующий момент. Выводы RB6 и RB7 используются для управления светодиодами и для программирования. Поэтому для программирования необходимо их временно отключить от светодиодов. На основной плате эту функцию будет выполнять специальный разъем, а пока – можно просто отпаять провода, соединяющие выводы контроллера с резисторами. Если это не сделать, можно потратить много времени, пытаясь сообразить, почему контроллер при попытке программирования ведет себя совершенно непредсказуемо. Также свободным от иных подключений на время программирования должен быть и вывод RA5.

Также ради стабильности можно поближе придвинуть разъем питания, установить электролитический конденсатор или предусмотреть питание от отдельного источника.

Предположим, что Вы спаяли схему, проверили ее на лишние связи, устранили их, и теперь готовы к программированию. Также Вы уже подключили программатор к компьютеру и правильно настроили СОМ-порт. Подключаем наше устройство.

В программе MPLAB IDE открываем наш проект.

В программе MPLAB теперь надо перейти от режима Debugger – отладчик к режиму Programmer – программатор. Для этого в меню Programmer через верхнюю строчку выбираем программатор – MPLAB ICD2. У меня опция автоподключения программатора выключена, поэтому после выбора типа программатора необходимо в том же пункте меню programmer выполнить команду Connect.

Обратим внимание на изменившуюся строку меню – в правой части кнопки команд управления отладчиком сменились на кнопки управления программатором (см. Рисунок выбор программатора1).

Рисунок Выбор программатора1

В меню, отмеченном на рисунке овалом с цифрой 1, нажмем крайнюю правую кнопку – “Reset and connect to ICD”. В окне OUTPUT на вкладке MPLAB ICD2 промелькнет несколько строк, и среди них можно прочесть, что программатор обнаружил подключенный к нему микроконтроллер PIC18F628 (цифра 2 на рисунке). Это первый признак того, что у нас налажен контакт программатора и контролера и программирование должно пройти нормально. Если такой записи нет, а выпадают сообщения типа “invalid target device id” – проверьте правильность выполненного монтажа, мультиметром - подачу питания на контроллер, наличие низкого уровня на выводе RA5, убедитесь, что не забыли отпаять светодиоды от выводов RB6 и RB7.

Дальше перед программированием желательно убедиться, что память контроллера чиста. Нажимаем кнопку «Verify target device is erased», и если программатор найдет в памяти что-то, отличное от кода 3FFF – он выдаст сообщение (красная строка на рисунке). Необходимо стереть память, для чего нажимаем на кнопку «Erase target device», дожидаемся сообщения «Erase succeeded» (цифра 3 на рисунке), опять проверяем память контроллера на чистоту – видим сообщение «Blank check passed» (цифра 4 на рисунке).

Теперь можно программировать. Нажимаем на кнопку «Program target device». Программатор запишет программу, проверит правильность записанного, и окончит работу сообщением «Programming succeded».  

Чтобы проверить, как работает готовое устройство, на панели управления программатора нажмем кнопку «Release from Reset». Если все правильно, по устройству должен обежать одинокий огонек. Что? Не работают два последних светодиода? Так ведь мы их отпаяли, временно…

Контрольный вопрос:

А почему при первом прохождении огонька по линейке некоторые светодиоды не гаснут? И только при новом руге все работает уже так, как было задумано? Я специально не стал исправлять этот огрех в программе, чтобы Вам было в чем проявить себя.

Вот видео работающего устройства:

Видео YouTube

 

В конце статьи я выкладываю ссылку на проект, чтобы сэкономить Ваше время на наборе текста программы.

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

 

Самодельный программатор для PIC-контроллеров


Развитие электроники идёт стремительными темпами, и всё чаще главным элементом того или иного устройства является микроконтроллер. Он выполняет основную работу и освобождает проектировщика от необходимости создания изощрённых схемных решений, тем самым уменьшая размер печатной платы до минимального. Как всем известно, микроконтроллером управляет программа, записанная в его внутреннюю память. И если опытный программист-электронщик не испытывает проблем с использованием микроконтроллеров в своих устройствах, то для начинающего радиолюбителя попытка записать программу в контроллер (особенно PIC) может обернуться большим разочарованием, а иногда и небольшим пиротехническим шоу в виде дымящей микросхемы.

Как ни странно, но при всём величии сети Интернет в нём очень мало информации о прошивке PIC-контроллеров, а тот материал что удаётся найти - очень сомнительного качества. Конечно, можно купить заводской программатор за неадекватную цену и шить сколько душе угодно, но что делать, если человек не занимается серийным производством. Для этих целей можно собрать несложную и не дорогую в реализации самоделку, именуемую JDM-программатором по приведенной ниже схеме (рисунок №1):



Рисунок №1 - схема программатора

Сразу привожу перечень элементов для тех, кому лень всматриваться в схему:


  • R1 - 10 кОм
  • R2 - 10 кОм (подстроченный). Регулировкой сопротивления данного резистора нужно добиться около 13В на выводе №4 (VPP) во время программирования. В моём случае сопротивление составляет 1,2 кОм
  • R3 - 200 Ом
  • R4, R5 - 1,5 кОм
  • VD1, VD2, VD3, VD4, VD6 - 1N4148
  • VD5 - 1N4733A (Напряжение стабилизации 5,1В)
  • VD7 - 1N4743A (Напряжение стабилизации 13В)
  • C1 - 100 нФ (0,1 мкФ)
  • C2 - 470 мкФ х 16 В (электролитический)
  • SUB-D9F - разъём СОМ-порта (МАМА или РОЗЕТКА)
  • Панелька DIP8 - зависит от используемого вами контроллера

В схеме использован пример подключения таких распространённых контроллеров, как PIC12F675 и PIC12F629, но это совсем не значит, что прошивка других серий PIC будет невозможна. Чтобы записать программу в контроллер другого типа, достаточно перекинуть провода программатора в соответствии с рисунком №2, который приведён ниже.



Рисунок №2 - варианты корпусов PIC-контроллеров с необходимыми выводами
Как можно догадаться, в схеме моего программатора использован корпус DIP8. При большом желании можно изготовить универсальный переходник под каждый тип микросхемы, получив тем самым универсальный программатор. Но так как с PIC-контроллерами работаю редко, для меня хватит и этого.

Хоть сама схема довольно проста и не вызовет трудностей в сборке, но она тоже требует уважения. Поэтому неплохо было бы сделать под неё печатную плату. После некоторых манипуляций с программой SprintLayout, текстолитом, дрелью и утюгом, на свет родилась вот такая заготовка (фото №3).



Фото №3 - печатная плата программатора
Скачать исходник печатной платы для программы SprintLayout можно по этой ссылке:
pp_programmator.zip [17.67 Kb] (скачиваний: 1651)
При желании его можно изменить под свой тип PIC-контроллера. Для тех, кто решил оставить плату без изменений, выкладываю вид со стороны деталей для облегчения монтажа (рисунок №4).

Рисунок №4 - плата с монтажной стороны

Ещё немного колдовства с паяльником и мы имеем готовое устройство, способное прошить PIC-контроллер через COM-порт вашего компьютера. Ещё тёпленький и не отмытый от флюса результат моих стараний показан на фото №5.



Фото №5 - программатор в сборе
С этого момента, первый этап на пути к прошивке PIC-контроллера, подошёл к концу. Второй этап будет включать в себя подключение программатора к компьютеру и работу с программой IC-Prog.
К сожалению, не все современные компьютеры и ноутбуки способны работать с данным программатором ввиду банального отсутствия на них COM-портов, а те что установлены на ноутбуках не выдают необходимые для программирования 12В. Так что я решил обратится к своему первому ПК, который давным-давно пылился и ждал своего звёздного часа (и таки дождался).
Итак включаем компьютер и первым делом устанавливаем программу IC-Prog. Скачать её можно с сайта автора или по этой ссылке:
icprog105d.zip [432.25 Kb] (скачиваний: 1966)
Подключаем программатор к COM-порту и запускаем только что установленное приложение. Для корректной работы необходимо выполнить ряд манипуляций. Изначально необходимо выбрать тот тип контроллера, который собираемся шить. У меня это PIC12F675. На скриншоте №6 поле для выбора контроллера выделено красным цветом.

Скриншот №6 - выбор типа микроконтроллера

Далее переходим в меню "Настройки"->"Опции", в появившемся окне выбираем вкладку I2C и ставим галочки, как показано на скриншоте №7.



Скриншот №7 - настройка метода записи контроллера

В этом же окне переходим во вкладку "Программирование" и выбираем пункт "Проверка при программировании". Проверка после программирования может вызвать ошибку, так как в некоторых случаях самой прошивкой устанавливаются фьюзы блокировки считывания СР. Чтобы не морочить себе голову данную проверку лучше отключить. Короче следуем скриншоту №8.



Скриншот №8 - настройка верификации

Продолжаем работу с этим окном и переходим на вкладку "Общие". Здесь необходимо задать приоритет работы программы и обязательно задействовать NT/2000/XP драйвер (скриншот №9). В некоторых случаях программа может предложить установку данного драйвера и потребуется перезапуск IC-Prog.



Скриншот №9 - общие настройки

Итак, с этим окном работа окончена. Теперь перейдём к настройкам самого программатора. Выбираем в меню "Настройки"->"Настройки программатора" или просто нажимаем клавишу F3. Появляется следующее окно, показанное на скриншоте №10.



Скриншот №10 - окно настроек программатора
Первым делом выбираем тип программатора - JDM Programmer. Далее выставляем радиокнопку использования драйвера Windows. Следующий шаг подразумевает выбор COM-порта, к которому подключен ваш программатор. Если он один, вопросов вообще нет, а если более одного - посмотрите в диспетчере устройств, какой на данным момент используется. Ползунок задержки ввода/вывода предназначен для регулирования скорости записи и чтения. Это может понадобится на быстрых компьютерах и при возникновении проблем с прошивкой - этот параметр необходимо увеличить. В моём случае он остался по умолчанию равным 10 и всё нормально отработало.

На этом настройка программы IC-Prog окончена и можно переходить к процессу самой прошивки, но для начала считаем данные с микроконтроллера и посмотрим что в него записано. Для этого на панели инструментов нажимаем на значок микросхемы с зелёной стрелкой, как показано на скриншоте №11.



Скриншот №11 - процесс чтения информации с микроконтроллера

Если микроконтроллер новый и до этого не прошивался, то все ячейки его памяти будут заполнены значениями 3FFF, кроме самой последней. В ней будет содержаться значение калибровочной константы. Это очень важное и уникальное для каждого контроллера значение. От него зависит точность тактирования, которая путём подбора и установки этой самой константы закладывается заводом изготовителем. На скриншоте №12 показана та ячейка памяти, в которой будет храниться константа при чтении контроллера.



Скриншот №12 - значение калибровочной константы

Повторюсь, что значение уникальное для каждой микросхемы и не обязательно должно совпадать с тем, что на рисунке. Многие по неопытности затирают эту константу и в последствии PIC-контроллер начинает некорректно работать, если в проекте используется тактирование от внутреннего генератора. Советую записать эту константу и наклеить надпись с её значением прямо на контроллер. Таким образом вы избежите множество неприятностей в будущем. Итак, значение записано - двигаемся дальше. Открываем файл прошивки, имеющий как правило расширение .hex. Теперь вместо надписей 3FFF, буфер программирования содержит код нашей программы (скриншот №13).



Скриншот №13 - прошивка, загруженная в буфер программирования

Выше я писал, что многие затирают калибровочную константу по неосторожности. Когда же это происходит? Это случается в момент открытия файла прошивки. Значение константы автоматически меняется на 3FFF и если начать процесс программирования, то назад дороги уже нет. На скриншоте №14 выделена та ячейка памяти где ранее была константа 3450 (до открытия hex-файла).



Скриншот №14 - автоматическое изменение калибровочной константы

Теперь нужно очень внимательно выполнить последующие действия. Нажимаем иконку микросхемы с молнией на панели инструментов, тем самым сообщая программе, что мы хотим инициировать процесс прошивки. Программа спросит уверены ли мы, что хотим прошить данное устройство. Соглашаемся и нажимаем "ДА". После этого получаем предупреждение, показанное на скриншоте №15.



Скриншот №15 - предупреждение о расхождении значений константы тактирования

IC-Prog сообщает нам, что ранее было установлено одно значение калибровочной константы (в моём случае 3450), а теперь другое (3FFF), автоматически подставленное из hex-файла. Также по умолчанию предлагается оставить значение 3FFF. Здесь важно нажать "НЕТ", чтобы IC-Prog во время программирования вернул нам значение 3450 или то, что будет у вас. В общем жмём "НЕТ" и наблюдаем следующее окно (скриншот №16).



Скриншот №16 - процесс программирования

В этот период советую ничего не нажимать и не грузить компьютер другими задачами. Когда я делал снимок экрана для этой статьи, то при нажатии на кнопку Print Screen вылетела ошибка записи и пришлось проделывать всё заново. По истечении некоторого времени IC-Prog выдаст вам сообщение об успешной проверке вновь записанного кода в ваш PIC-контроллер, так что всем кому понравилась эта статья, желаю увидеть вот это после аналогичных стараний (скриншот №17):



Скриншот №17 - прошивка прошла успешно, можно расслабиться

Если в процессе у вас возникнут какие-либо вопросы, внимательно перечитайте статью заново и всё обязательно получится - проверено лично. Всем удачи и творческих успехов!!!

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

% PDF-1.4 % 1144 0 объект > эндобдж xref 1144 92 0000000016 00000 н. 0000002214 00000 н. 0000002481 00000 н. 0000002634 00000 н. 0000002676 00000 н. 0000002735 00000 н. 0000002801 00000 н. 0000004778 00000 п. 0000005497 00000 н. 0000005744 00000 н. 0000005813 00000 н. 0000005987 00000 н. 0000006085 00000 н. 0000006194 00000 н. 0000006255 00000 н. 0000006456 00000 н. 0000006517 00000 н. 0000006694 00000 н. 0000006846 00000 н. 0000007016 00000 н. 0000007143 00000 н. 0000007267 00000 н. 0000007399 00000 н. 0000007574 00000 н. 0000007745 00000 н. 0000007926 00000 н. 0000008101 00000 п. 0000008250 00000 н. 0000008406 00000 н. 0000008523 00000 н. 0000008652 00000 н. 0000008799 00000 н. 0000008963 00000 н. 0000009111 00000 п. 0000009247 00000 н. 0000009398 00000 н. 0000009553 00000 п. 0000009711 00000 н. 0000009871 00000 п. 0000010040 00000 п. 0000010180 00000 п. 0000010309 00000 п. 0000010423 00000 п. 0000010583 00000 п. 0000010740 00000 п. 0000010840 00000 п. 0000010938 00000 п. 0000011035 00000 п. 0000011132 00000 п. 0000011230 00000 н. 0000011328 00000 п. 0000011426 00000 п. 0000011524 00000 п. 0000011622 00000 п. 0000011720 00000 п. 0000011818 00000 п. 0000011916 00000 п. 0000012014 00000 н. 0000012112 00000 п. 0000012210 00000 п. 0000012308 00000 п. 0000012406 00000 п. 0000012504 00000 п. 0000012602 00000 п. 0000012700 00000 п. 0000012849 00000 п. 0000013006 00000 п. 0000013312 00000 п. 0000013423 00000 п. 0000013529 00000 п. 0000013553 00000 п. 0000015666 00000 п. 0000015690 00000 н. 0000018188 00000 п. 0000018212 00000 п. 0000020070 00000 н. 0000020094 00000 н. 0000021600 00000 п. 0000021624 00000 н. 0000023176 00000 п. 0000023200 00000 н. 0000023307 00000 п. 0000025208 00000 п. 0000025232 00000 п. 0000026795 00000 п. 0000026819 00000 п. 0000026899 00000 н. 0000027106 00000 п. 0000027325 00000 п. 0000031011 00000 п. 0000004821 00000 н. 0000005474 00000 п. трейлер ] >> startxref 0 %% EOF 1145 0 объект > эндобдж 1146 0 объект a_

Как язык ассемблера стал моим первым языком программирования | Шу Исида | Tech to Inspire

Красота микроконтроллеров PIC

«Hello World!» - именно здесь мы все начинаем программировать.По крайней мере, если у вас есть console. Моя точка входа в этот увлекательный мир была немного другой. В этой статье hello world, , я хочу поделиться своим первым опытом программирования, который проходил буквально через нули и единицы.

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

Микроконтроллер PIC16F628A на макетной плате.

Микроконтроллер - это крошечный прямоугольный чип с множеством крошечных ножек (контактов). Несмотря на это немного тревожное описание, это одна из самых симпатичных умных вещей, которые вы можете получить за 2 доллара. Это крохотный компьютер в простейшей форме - без мониторов, без клавиатуры и с минимальным объемом памяти.Он может хранить набор инструкций в своей программной памяти, которая выполняется, как только вы подключаете микросхему к источнику питания. Кроме того, он имеет небольшой объем хранилища данных и временную память для вычислений.

Так насколько маленький маленький? Прошло около восьми лет с тех пор, как я играл с этими красотками, поэтому мне пришлось взглянуть на данные. Мой любимый микроконтроллер - PIC16F628A, так как он имеет довольно много функций по очень низкой цене. Ответ просто потрясающий! Он имеет программную память на 2048 инструкций (~ 4 КБ), 128 байтов памяти данных (EEPROM) и 224 байта временной памяти (RAM).Словарь языка программирования для этой ПОС состоит всего из 35 слов!

Чтобы поместить это в контекст, современный ноутбук в 2020 году может иметь 8 ГБ ОЗУ и 512 ГБ флэш-памяти, поэтому, грубо говоря, мы говорим о разнице в 40 000 000 раз в ОЗУ и в 100 000 раз во флэш-памяти.

Так зачем кому-то играть с PIC? Для меня чистая привлекательность заключалась в том, что (1) он настолько прост и минималистичен, и вы можете понять его функциональность задом наперед, (2) в отличие от готовых компьютеров, вы можете напрямую интегрировать микроконтроллеры в электрические схемы и устройства управления, такие как Светодиоды, динамики, транзисторы и моторы.Это возможно из-за того, что из PIC торчат многие выводы - каждый вывод может либо измерять входное напряжение, либо выдавать выходное напряжение. Эти сигналы затем могут быть усилены транзисторами, если требуются сигналы более высокого напряжения, например моторами. Также обратите внимание, что PIC очень гибкие и могут быть интегрированы в более сложные схемы. Вы можете добавить к нему дополнительные компоненты, такие как внешняя память, ЖК-дисплей или модуль Wi-Fi, чтобы создать собственное устройство IoT.

Если вы думаете о запуске своего первого проекта IoT, я бы, вероятно, порекомендовал что-нибудь вроде Arduino или Raspberry Pi.Arduino - это комплект микроконтроллеров с множеством полезных внешних компонентов, таких как порты USB и Ethernet, со специализированным программным обеспечением для разработки более сложных устройств IoT. Raspberry Pi - это полноценный компьютер с операционной системой, на котором можно запускать обычное программное обеспечение, несмотря на его дешевую цену всего в 40 долларов! С другой стороны, если вас интересуют простые компоненты компьютеров, вы узнаете, как программы переводятся в нули и единицы, и видите результаты работы в реальной жизни, микроконтроллеры (например, PIC) - это то, что вам нужно!

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

Набор инструкций действительно прост. Вы считываете входные сигналы напряжения с блока из 8 контактов, считывая двоичное значение длиной в байты из порта. Вы выводите напряжение из блока, устанавливая для порта значение длиной в байтах. Вы можете выполнять вычисления и сохранять промежуточные результаты в памяти. Вы можете вносить изменения только в один адрес памяти за раз. Если вы хотите выполнять операции, в которых задействовано более одного адреса, вы должны использовать рабочий регистр (временное хранилище памяти длиной в байты).Доступные операции: сложение, вычитание, И, IOR (включающее ИЛИ), XOR (исключающее ИЛИ), копирование и очистка. Каждая команда требует выполнения 1 или 2 тактовых циклов. Есть инструкция под названием No-Op, которая потребляет 1 такт без каких-либо действий. И это 80% языка, объясненного в одном абзаце.

Скриншот MPLAB IDE (инструмент для разработки PIC на языке ассемблера) 2011 года… выглядит таким старым!

Самые забавные команды в этом минималистском языке - это GOTO, CALL и RETURN.Да, Поехали! Практически все программисты будут шокированы, увидев, что в настоящее время в коде появляются какие-либо операторы GOTO, которые в любом случае не поддерживаются в большинстве современных языков программирования. Вместо этого в современных языках используются концепции функций и циклов. Циклы WHILE и FOR помогают разбивать программы на автономные значимые части без непредсказуемости оператора GOTO, который потенциально может перейти к любой части кода и вызвать неожиданные и трудные для отладки ошибки. Однако замена GOTO на WHILE и FOR также потребовала дополнительной команды обходного пути под названием BREAK.

Так что насчет операторов IF? Для всех программ требуются некоторые условные выражения, особенно если необходимо учитывать внешний вход, как это часто бывает с электронными устройствами с переключателями и датчиками. В Assembly нет явного оператора IF. Вместо этого есть вещи, называемые флагами, которые устанавливаются в положение ВКЛ или ВЫКЛ каждый раз, когда вы производите расчет. Важными из них являются флаг "Ноль" и флаг "Перенос", который сообщает вам дополнительную информацию об операции, которую вы только что выполнили.Флаг Zero устанавливается, когда результат равен 0, а флаг Carry устанавливается, когда результат вычисления превышает числовой диапазон, который может быть представлен в байтах. Есть две удобные инструкции - INCFSZ и DECFSZ, что означает увеличение [уменьшение] F, пропускать, если ноль. Когда операция увеличения / уменьшения приводит к 0, следующая инструкция заменяется No-Op. Обычно в эту строку помещают оператор GOTO, если вы хотите создать ветвь или цикл в вашей программе.

 ПЕТЛЯ 
; В шлейфе
...
DECFSZ REG1, F
GOTO loop
BLOCK
; Вне цикла
...

Все команды, включая метки слева и адреса памяти с понятными для человека именами, транслируются в адреса памяти в виде нулей и единиц. Удивительно то, что с каждой командой связана уникальная строка нуля или единицы, чтобы сделать всю программу однозначной, даже если есть только нули и единицы. Эти 0 и 1 сохраняются как файл .HEX. К счастью, мы можем передать эту неприятную задачу перевода компиляторам, таким как MPLAB X IDE (официальное программное обеспечение, производимое Microchip, производящим PIC).Это мощные инструменты, которые также имеют функции отладки, такие как пошаговое выполнение кода и проверка значений каждого адреса памяти, регистра и порта.

Моя плата программирования PIC. На сцене PIC16F628A.

После того, как все переведено в 0 и 1, пора записывать в наш PIC. Вы устанавливаете PIC на плату программирования, подключаете его к ноутбуку, запускаете программное обеспечение, специфичное для вашей платы программирования, считываете файл .HEX в программное обеспечение и начинаете запись во флэш-память PIC.Плата для программирования, наверное, самая дорогая деталь. Такие платы для программирования можно построить с нуля, но мне было лень, поэтому я купил готовую плату. Этот конкретный на картинке стоил около 50 долларов.

А теперь самое интересное. Программа записана в ПОС. Вы отсоединяете PIC от платы программирования. Вы помещаете его в свою схему (никогда не припаивайте PIC непосредственно к печатной плате, потому что тепло может сломать микросхему. Вместо этого используйте гнездо). И вы включаете блок питания.Я, должно быть, замкнул накоротко около пяти неудачных PIC в ходе моих экспериментов, и многие другие потеряли ноги из-за многократного включения и выключения из розетки, поэтому убедитесь, что у вас есть резистор, и выбирайте розетки с умом. Если все пойдет хорошо, на вас будет мигать множество светодиодов с теплым «Hello World!».

Последовательный протокол для программирования PIC и EEPROM с Arduino

  • ProgramPIC относится к эскизу, запущенному на плате Arduino, который реализует сторону Arduino протокола программирования PIC или EEPROM.
  • Хост относится к программе, работающей в компьютерной системе, подключенной к Arduino через USB, которая управляет процессом программирования PIC.
  • Устройство относится к фактическому PIC в программном сокете, с которым разговаривает ProgramPIC.
  • Программный разъем относится к физическому соединению между ProgramPIC и устройством, которое может быть сокетом ZIF, кабелем ICSP или каким-либо другим физическим разъемом.

Все значения адресов и данных в протоколе отправляются в шестнадцатеричном формате.Основными заметными исключениями являются полезные данные для команд READBIN и WRITEBIN, которые используют компактное двоичное представление вместо шестнадцатеричного.

Все команды в этом протоколе используют плоское адресное пространство. Например, на PIC16F628A память программ работает от 0x0000 до 0x07FF (шестнадцатеричная), конфигурационная память работает от 0x2000 до 0x2007, а EEPROM работает от 0x2100 до 0x217F. Эти плоские адреса преобразуются программой ProgramPIC в правильный формат низкоуровневой адресации.

Плоская адресация была выбрана для упрощения реализации хоста, который будет иметь плоские адреса (обычно умноженные на 2) в шестнадцатеричном файле.Хосту не нужно беспокоиться о деталях переключения между режимами адресации. Если ProgramPIC необходимо перезагрузить устройство, чтобы вернуться в память или переключиться на другой тип памяти, он позаботится об этой детали внутри себя.

Текущая реализация ProgramPIC использует внутреннее 32-битное адресное пространство, чтобы обеспечить возможность расширения в будущем. Хост также должен предполагать 32-битную плоскую адресацию.

Команды DEVICE и SETDEVICE используются для получения информации о диапазонах плоских адресов, которые устройство использует для памяти программ, конфигурации и данных.Если тип устройства неизвестен ProgramPIC, то хост может по-прежнему выдавать некоторые команды, но результаты будут ненадежными. В этом случае лучше всего, чтобы хост выдал ошибку типа «Неподдерживаемое устройство, ID = NNNN».

Команды отправляются с хоста на ProgramPIC в текстовом формате, с ответами также в тексте, за исключением некоторых выбранных двоичных команд.

Команда от хоста представляет собой строку символов ASCII, оканчивающуюся символом CR (0x0D) или LF (0x0A).Строка может иметь длину до 64 символов, не считая терминатора. Дополнительные символы после первых 64 отбрасываются. Поля в строке разделяются символами ПРОБЕЛ (0x20) или TAB (0x09), и могут быть начальные или конечные пробелы. Пустые строки игнорируются.

Команда преобразуется в верхний регистр при получении ProgramPIC и перед дальнейшей обработкой. Таким образом, «ЧТЕНИЕ», «ЧТЕНИЕ» и «ПРОЧИТАТЬ» эквивалентны «ЧТЕНИЕ». Ниже приведены некоторые примеры команд:

PROGRAM_PIC_VERSION

УСТРОЙСТВО

ЧИТАТЬ 2007

ЧИТАТЬ 0000-03FF

Команды от хоста могут завершаться любой комбинацией CR, LF или CRLF.Текстовые ответы от ProgramPIC всегда заканчиваются CRLF.

Большинство команд можно отправить непосредственно в ProgramPIC с помощью программы последовательной связи, такой как Serial Monitor в Arduino IDE (убедитесь, что выбраны окончания строк «Новая строка» или «Возврат каретки»). Это позволяет выполнять простое тестирование и отладку ProgramPIC, но не подходит для массовых операций чтения и записи, связанных с программированием шестнадцатеричного файла в PIC. Для массовых операций рекомендуется отдельная программа для выделенного хоста.

Если команда не распознается ProgramPIC, она должна ответить строкой «НЕ ПОДДЕРЖИВАЕТСЯ», завершившейся CRLF. Обычные ответы на команды обычно «ОК» или «ОШИБКА»; последнее указывает на то, что команда известна, но по какой-то причине она не удалась.

Команда PROGRAM_PIC_VERSION возвращает информацию о самом ProgramPIC, а не о PIC в программном сокете. Текущий действительный ответ - это одна строка текста, содержащая ProgramPIC 1.0 , прекращено CRLF.

Эта команда может использоваться хостом, чтобы определить, работает ли на Arduino действительная версия ProgramPIC или какой-либо другой скетч. Если хост не получает действительного ответа в течение 3 секунд, он должен предположить, что он не разговаривает с экземпляром ProgramPIC.

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

В будущем строки версии вида ProgramPIC 1.x , где x - это число больше нуля, будут использоваться для расширений этого протокола, которые останутся обратно совместимыми. То есть существующие команды продолжают работать, как определено здесь, но могут быть доступны новые команды. Гипотетический номер версии ProgramPIC 2.x указывает на совершенно новый протокол, который не имеет обратной совместимости.

Хосты, реализующие версию 1.0 протокола должен распознавать любую более позднюю версию, такую ​​как 1.1 и 1.2, и продолжать нормально работать. Хосты, реализующие версию 1.x протокола, должны прервать работу с ошибкой, если ProgramPIC отвечает версией 2.0 или выше.

Команда HELP возвращает список всех команд, которые понимает ProgramPIC, с кратким описанием. Детали справки заканчиваются строкой, содержащей точку.

Эта команда предназначена в первую очередь для интерактивного использования через Serial Monitor в Arduino IDE.Он не предназначен для машинного анализа. Хосты должны использовать номер версии протокола, чтобы определить, поддерживается ли команда.

Команда DEVICE используется для получения информации об устройстве PIC, которое находится в гнезде программирования. Устройство принудительно перезагружается, считываются важные данные устройства, а затем устройство отключается. Строка, начинающаяся с точки, завершает возвращаемые данные. Ниже приведен пример вывода:

ОК

DeviceID: 1066

Имя устройства: pic16f628a

Диапазон программ: 0000-07FF

Диапазон конфигурации: 2000-2007

Диапазон данных: 2100-217F

ConfigWord: 3FFF

.

Если гнездо программирования пусто, или напряжение программирования VPP недоступно, или PIC не может быть прочитан по какой-либо причине (например, включена защита кода), то команда DEVICE ответит единственной строкой, содержащей ERROR .

Старые PIC не сообщают идентификатор устройства. Они будут представлены как DeviceID: 0000 (ровно с 4 нулями). Хост должен использовать команду SETDEVICE, чтобы вручную указать тип устройства.

Требуется, чтобы эта команда использовалась перед попыткой чтения или записи с PIC, чтобы определить тип PIC в программном сокете и убедиться, что ProgramPIC использует правильные диапазоны адресов для памяти программ, конфигурации и данных.

Для всех типов PIC, включая те, которые не распознаются по идентификатору устройства, предоставляется следующая информация:

  • DeviceID представляет собой необработанный идентификатор устройства PIC из ячейки памяти конфигурации 0x2006.Будет «0000» (ровно 4 нуля), если в программном сокете есть PIC, но это более старая модель, не имеющая идентификатора устройства. Если устройство является автономным EEPROM, а не PIC, то DeviceID также будет сообщаться как «0000», но будет присутствовать DeviceName для типа EEPROM по умолчанию.
  • ConfigWord представляет содержимое первого слова конфигурации. Доступ к дополнительным словам конфигурации можно получить с помощью "READ", если хост знает ConfigRange (см. Ниже).Слово конфигурации не будет присутствовать, если устройство является автономным EEPROM.

Если ProgramPIC распознает тип PIC, он также вернет следующую дополнительную информацию:

  • DeviceName представляет имя устройства; например "pic16f628a". Номер версии можно получить из младших битов DeviceID .
  • ProgramRange дает диапазон плоских адресов, которые составляют программную память; например «0000-07FF» для PIC16F628A.Это поле не будет отображаться, если устройство не имеет памяти программ (например, автономной EEPROM).
  • ProgramBits дает количество значащих битов, которые используются командами в памяти программ. Это поле является необязательным и по умолчанию имеет значение 14. Значение в десятичном, а не шестнадцатеричном формате.
  • ConfigRange дает диапазон плоских адресов, которые составляют память конфигурации; например «2000-2007». Это поле не будет отображаться, если устройство не имеет памяти конфигурации (например,грамм. автономный EEPROM).
  • ConfigSave - это маска, которая указывает, какие биты в слове конфигурации будут автоматически сохраняться командами ERASE и WRITE, поскольку они содержат данные калибровки. Это поле является необязательным, по умолчанию - 0.
  • DataRange дает диапазон плоских адресов, которые составляют память данных EEPROM; например «2100-217F». Это поле не будет отображаться, если в устройстве нет памяти для данных.
  • DataBits дает количество значащих битов, которые используются ячейками памяти данных.Это поле является необязательным и по умолчанию равно 8. Число битов данных обычно равно 16 для автономных EEPROM, поскольку данные считываются и записываются по два байта за раз. Значение указывается в десятичном, а не в шестнадцатеричном формате.
  • ReservedRange дает диапазон плоских адресов, которые содержат зарезервированные слова, которые будут сохранены командой ERASE. Если нет зарезервированного диапазона слов, то это поле не будет.

Если идентификатор устройства не распознается ProgramPIC, то все еще возможно выполнение некоторых команд, но результат будет ненадежным; особенно, если хост пытается записать данные в устройство PIC.Таким образом, если поле DeviceName отсутствует и DeviceID отличен от нуля, то хост должен сообщить об ошибке в строке «Неподдерживаемое устройство, ID = NNNN».

Если DeviceID равен нулю (PIC присутствует, но идентификатор недоступен), тогда хост может использовать DEVICES для получения списка всех поддерживаемых устройств и использовать SETDEVICE для выбора определенного типа устройства.

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

Примечание: если устройство размещает конфигурационную память в другом месте, кроме 0x2000, в плоском адресном пространстве, то команда «DEVICE» сможет найти его и затем сообщить правильный диапазон. Использование команды типа «READ 2007» для чтения слова конфигурации не рекомендуется, пока хост не получит ConfigRange и не определит, что слово конфигурации действительно находится по адресу 0x2007.

Команда SETDEVICE вручную устанавливает устройство, которое ProgramPIC предположит, что оно находится в гнезде программирования.Эту команду следует использовать, если DEVICE находит устройство PIC в сокете, но не может определить идентификатор устройства.

Эта команда принимает единственный аргумент, который является именем устанавливаемого устройства PIC. Например:

Команда отвечает сообщением «ERROR», если имя устройства не распознано, или списком свойств устройства в противном случае:

ОК

Имя устройства: pic16f84

Диапазон программ: 0000-03FF

Диапазон конфигурации: 2000-2007

Диапазон данных: 2100-213F

.

В имени устройства можно использовать любую комбинацию верхнего и нижнего регистра: «PIC16F84» и «Pic16f84» также будут соответствовать канонической версии «pic16f84».

Команда DEVICES возвращает список всех имен устройств PIC, которые поддерживаются ProgramPIC, разделенных запятыми и завершенных строкой, начинающейся с точки. Пробелы и символы новой строки в возвращаемом списке не имеют значения. Ниже приведен пример вывода:

ОК

pic12f629 *, pic12f630 *, pic12f675 *, pic12f676 *, pic16f84, pic16f84a *,

pic16f87 *, pic16f88 *, pic16f627 *, pic16f627a *, pic16f628 *, pic16f628a *,

pic16f648a *

.

Если имя заканчивается звездочкой (*), устройство может быть обнаружено DEVICE автоматически. Имя без звездочки можно выбрать только с помощью SETDEVICE.

Команда READ считывает слова с устройства и возвращает их хосту в формате ASCII после строки с надписью «OK». Каждое слово отделяется пробелами или новой строкой, а весь ответ заканчивается строкой, содержащей точку. Слова передаются первым в шестнадцатеричном представлении. Слова данных будут напечатаны как 16-битные значения, хотя обычно значимы только нижние 8 бит.

Аргументом команды является либо одиночный адрес в шестнадцатеричном формате, либо диапазон адресов в форме «START-END». Все ячейки памяти в диапазоне считываются и отправляются обратно на хост.

Если диапазон адресов плохо отформатирован, выходит за границы, начало больше конца или начало и конец не попадают в одну и ту же область памяти (программа, конфигурация или данные), то команда READ ответит следующим образом: строка «ОШИБКА».

Ниже приведены некоторые примеры чтения с пустого PIC16F628A:

ПРОЧИТАТЬ 0000

ОК

3FFF

.

ЧИТАТЬ 2006

ОК

1066

.

ЧИТАТЬ 2060

ОШИБКА

ЧТЕНИЕ 0000-000A

ОК

3FFF 3FFF 3FFF 3FFF 3FFF 3FFF 3FFF 3FFF

3FFF 3FFF 3FFF

.

ПРОЧИТАТЬ 000A-0000

ОШИБКА

ЧИТАТЬ 0000-217F

ОШИБКА

Команда READBIN идентична READ, за исключением того, что после отправки ответа «ОК» она упаковывает данные в эффективную двоичную форму для более быстрой передачи на хост.Эта команда рекомендуется для хост-приложений, которые считывают объемные данные с PIC.

Формат ответа - это последовательность из одного или нескольких двоичных «пакетов». Каждый пакет начинается с байта длины, который определяет количество следующих за ним байтов. Длина не должна превышать 64 и должна быть кратна 2. Нулевое значение завершает ответ, и ProgramPIC возвращается в режим ожидания следующей команды.

После длины пакета будет четное количество байтов, определяемое длиной.Каждая пара байтов определяет значение одного слова в ответе, LSB-first.

Если READBIN дает ответ «ERROR», его работа будет идентична READ.

Команда WRITE используется для записи слов в память программ, конфигурации или данных. Аргументы - это начальный адрес плюс одно или несколько значений слова в шестнадцатеричном формате, сначала MSB. Например:

ЗАПИСАТЬ 0100 1234 1A3F

ЗАПИСАТЬ 2007 3FFF

ЗАПИСАТЬ 2100 11 22 33 44

Из-за ограничения ProgramPIC на 64 символа для команд рекомендуется, чтобы в одном запросе было отправлено не более 8 слов.

Некоторые устройства сохранили биты в слове конфигурации (например, PIC12F675), которые будут защищены командой WRITE . Чтобы отключить эту защиту и принудительно записать значение независимо, используйте опцию FORCE :

Команда ответит «ОК», если слова были написаны, или «ОШИБКА», если произойдет одно из следующих событий:

  • Командная строка некорректна; например недопустимые символы или отсутствующие аргументы.
  • Начальный адрес находится вне диапазона памяти программ, конфигурации или данных.
  • Начальный адрес находится в пределах диапазона, но диапазон выходит за пределы до того, как все слова могут быть записаны. Будут написаны до предела слов.
  • По какой-то причине запись не удалась; например в программном сокете нет устройства или значение не может быть успешно считано и проверено.

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

Примечание: перед выполнением операций записи с устройства следует выполнить групповое стирание с помощью команды ERASE.

Команда WRITEBIN идентична команде WRITE, за исключением того, что она упаковывает данные в эффективную двоичную форму для более быстрой передачи от хоста к ProgramPIC. Эта команда рекомендуется для хост-приложений, которые записывают объемные данные в PIC.

Команда начинается с отправки начального адреса в ProgramPIC (также можно использовать опцию FORCE ):

На этом этапе команда отвечает «ОК» или «ОШИБКА». Ошибка возникает, если начальный адрес выходит за пределы допустимого диапазона или команда неправильно отформатирована.

Если команда отвечает «OK», то хост может послать единичный двоичный пакет в ProgramPIC, используя тот же формат пакета, что и READBIN.

ProgramPIC записывает слова пакета в память и отвечает либо «OK», либо «ERROR». Если ответ - «ERROR», значит, запись не удалась, и хост должен прекратить отправку дальнейших пакетов. Если ответ «ОК», то хост может отправить другой пакет, который будет записан в последующие адреса.

Нулевой размер пакета завершает передачу данных WRITEBIN , и ProgramPIC отвечает "OK", подтверждая завершение пакета.

Ниже представлена ​​двоичная версия "WRITE 0100 1234 1A3F". Для простоты обсуждения пакеты показаны в виде шестнадцатеричных значений в угловых скобках. На самом деле они отправляются в виде сырых байтов:

WRITEBIN 0100

ОК

<< 04 34 12 3F 1A >>

ОК

<<00>>

ОК

В отличие от READBIN, который передает пакетные данные, хост должен останавливаться и ждать ответа после каждого записанного пакета.Это реализует простую форму управления потоком, чтобы предотвратить перегрузку более быстрого хоста ProgramPIC большим количеством данных и переполнение последовательных буферов. Это также приведет к преждевременному прерыванию процесса в случае ошибки, поэтому хосту не нужно ждать, пока весь шестнадцатеричный файл будет отправлен в ProgramPIC, прежде чем обнаруживать проблему.

Если длина двоичного пакета превышает 64, то дополнительные байты сверх первых 64 будут отброшены. Если длина пакета нечетная, лишний байт будет отброшен.Хосты никогда не должны отправлять двоичный пакет длиной более 64 или нечетной длины пакета.

Кроме того, длина первого пакета никогда не должна быть 0x0A (10 десятичных), иначе ProgramPIC может запутаться между 0x0A, используемым в качестве признака конца строки LF в паре CRLF, и 0x0A, используемым в качестве длины пакета. Если хосту необходимо записать ровно 10 байтов (5 слов), он может либо разделить пакет на два меньших пакета, либо вместо этого использовать WRITE.

ProgramPIC отбрасывает все байты 0x0A, которые встречаются перед первым пакетом.Последующие пакеты могут иметь длину байта 0x0A.

Примечание: перед выполнением операций записи с устройства следует выполнить групповое стирание с помощью команды ERASE.

Команда ERASE выполняет массовое стирание всей памяти программ, конфигурации и данных в устройстве. Код и защита данных будут отключены. Зарезервированные слова (например, значения OSCCAL) автоматически сохраняются и впоследствии записываются обратно в память программы; хосту не нужно беспокоиться о сохранении этих значений. Команда ответит либо «ОК», либо «ОШИБКА».

Если в устройстве есть зарезервированные слова, хост может запросить их удаление, используя опцию NOPRESERVE :

Если задано NOPRESERVE и в устройстве нет зарезервированных слов, то команда будет действовать идентично ERASE . Хост должен использовать NOPRESERVE только в том случае, если он собирается отправить новые данные для зарезервированных слов.

Некоторые устройства, особенно большие EEPROMS в семействе 24LCXX, могут стирать дольше, чем стандартный 3-секундный тайм-аут хоста.Команда ERASE должна отправлять на хост строку PENDING не реже одного раза в две секунды, чтобы сообщить хосту, что операция все еще выполняется. После завершения стирания эскиз ответит OK или ERROR .

Команда PWROFF отключает питание разъема программирования. ProgramPIC отвечает строчкой «ОК». Питание будет повторно подано автоматически, когда будет дана следующая команда, которая должна взаимодействовать с программным сокетом.

Эта команда должна быть отправлена ​​хостом после завершения процесса программирования. После этого пользователь сможет безопасно извлечь устройство из гнезда программирования и / или заменить его новым устройством.

Хост также может выдать эту команду, если он хочет принудительно перезагрузить устройство. Обычно в этом нет необходимости, поскольку УСТРОЙСТВО автоматически перезагружает устройство.

ProgramPIC может сам отключать питание от гнезда программирования по разным причинам: тайм-аут бездействия или сброс необходим для завершения текущей операции.

Ниже приводится рекомендуемая последовательность команд, которую хост должен отправить для чтения или программирования устройства PIC:

  • PROGRAM_PIC_VERSION, чтобы узнать версию ProgramPIC, которая работает на Arduino. Если ответ не получен или получен неверный ответ, хост должен прервать работу с ошибкой.
  • DEVICE, чтобы получить подробную информацию об устройстве, которое в данный момент находится в программном сокете. Прервать, если команда отвечает "ERROR" или DeviceID отличен от нуля, но DeviceName отсутствует.
  • Если DEVICE вернул DeviceID , равный нулю, то SETDEVICE можно использовать для выбора устройства вручную. Если SETDEVICE сообщает об ошибке, то можно использовать DEVICES для получения списка поддерживаемых устройств, чтобы сообщить об ошибке.
  • Любое количество команд READ, READBIN, WRITE, WRITEBIN или ERASE для чтения или программирования устройства PIC.
  • PWROFF для отключения разъема программирования и обеспечения безопасного извлечения устройства пользователем.

Pic16f628a программирование 👏

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику конфиденциальности и Условия использования файлов cookie.Electric Engineering Stack Exchange - это сайт вопросов и ответов для профессионалов в области электроники и электротехники, студентов и энтузиастов. Регистрация займет всего минуту. Светодиод продолжает гореть на указанном контакте и не «мигает». Я использую внутренний осциллятор, который резонирует на частоте 4 МГц. Это мой код, использующий компилятор XC8:.

Цикл while с ложным условием никогда не будет зацикливаться.

Вы хотите поставить «пока 0» или это опечатка? В любом случае этот цикл никогда не зацикливается.Измените 0 на 1. Он имеет тот же контакт, что и RB4.

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

Или просто вообще не запустить. Системы на основе микроконтроллеров обычно представляют собой специализированное оборудование. Операционной системы нет, поэтому код, который вы программируете в MCU, не имеет объекта более высокого уровня, к которому можно было бы вернуться.По этой причине функция main должна быть недействительной и в конце не должно быть оператора return. Определение main для возврата int, вероятно, ничего не сломает, но это считается плохой практикой кодирования. Зарегистрируйтесь, чтобы присоединиться к этому сообществу. Лучшие ответы голосуются и поднимаются наверх.

Главная Вопросы Теги Пользователи без ответа. Спросил 6 лет назад. Активен 6 лет назад. Просмотрен 5k раз. JYelton Seif Shawkat Seif Shawkat 6 6 серебряных знаков 13 13 бронзовых знаков. Активные самые старые голоса. Dan Laks Dan Laks 8, 4 4 золотых знака 22 22 серебряных знака 37 37 бронзовых знаков.Я тоже думал об этом, когда где-то просматривал пример, но подумал, что просто скопирую его на всякий случай. Это то, что сделало это для меня! Зарегистрируйтесь или войдите в систему. Зарегистрируйтесь с помощью Google. Зарегистрируйтесь через Facebook. Зарегистрируйтесь, используя электронную почту и пароль.

Опубликовать как гость Имя. Электронная почта обязательна, но не отображается. Блог Overflow. Подкаст Бен отвечает на свой первый вопрос о переполнении стека. Это первая из серии статей, описывающих конструкцию интерфейсной платы, подходящей для управления 2 двигателями, 2 сервоприводами и предоставляющей набор двоичных входов и выходов.Плата обеспечивает ограниченный встроенный интеллект, достаточный только для защиты двигателей и сервоприводов от недопустимых операций - она ​​предназначена для управления с внешнего компьютера через соединение RS.

Эта статья представляет собой введение в микроконтроллер, лежащий в основе проекта - PIC 16FA. Все предоставленные программы написаны на языке ассемблера PIC, с использованием C на PIC 8-битные процессоры PIC, по крайней мере, кажутся излишними - полученный код очень похож на язык ассемблера, но с гораздо большим количеством шаблонов вокруг него.

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

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

Это очень важный фактор, который следует учитывать при разработке вашего проекта. Расположение памяти на PIC сильно отличается от того, к которому вы, вероятно, привыкли, если разрабатывали программы для настольных компьютеров. Каждая ячейка памяти рассматривается как регистр и доступна по ее адресу. Чтобы еще больше усложнить проблему, не все регистры доступны в любой момент времени - память организована в виде четырех банков регистров каждый, и только один банк может быть доступен одновременно.

Первые 32 регистра в каждом банке - это регистры специального назначения, которые используются для управления и настройки процессора и контактов ввода-вывода, последние 16 регистров в каждом банке используются совместно всеми банками, что позволяет получить доступ к значениям независимо от того, какой банк в настоящее время находится. выбрано.Реализованы не все адреса регистров, что оставляет некоторые пробелы в карте памяти, которые необходимо устранить.

Полная карта памяти показана на изображении справа. Записи, помеченные как регистр общего назначения, и блок из 16 байтов в конце каждой страницы свободны для использования вашей программой. Помимо регистров, упомянутых выше, существует единственный рабочий регистр, называемый W, который требуется для многих операций.

Операции, изменяющие значения, имеют возможность сохранять результат в этом регистре или регистре файла, с которым выполняется операция.Каждая инструкция занимает 4 тактовых цикла, за исключением условных инструкций и инструкций перехода, которые могут занимать 8 тактовых циклов. На плате есть осциллятор, который работает на частоте 4 МГц примерно 1 MIPS и может быть замедлен до 48 кГц для экономии энергии или облегчения отладки и тестирования. Во всех примерах этой серии будет использоваться внутренний генератор. В оставшейся части этой статьи описывается схема и программное обеспечение, необходимое для регулярного мигания светодиода: горит в течение мс и гаснет в течение мс.

В этом проекте не используются какие-либо специальные периферийные устройства на микросхеме, синхронизация достигается исключительно за счет подсчета тактовых циклов и используется только один выходной контакт.Электрически PIC будет работать с входным напряжением от 3. Для этого требуется постоянный источник питания постоянного тока, но в схеме регулирования напряжения, как правило, нет необходимости.

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

Для более высоких нагрузок вы обычно используете выход PIC для управления транзистором, который будет нести нагрузку, а не протягивать ее через сам выходной контакт.Зачем сборка?

Подпишитесь на RSS

Он производит быстрое и эффективное кодирование на языке C для основных функций, связанных с управлением электроникой. Это позволяет действительно получить доступ к мощным функциям PIC. Как RISC-процессор, ему нужно выучить всего 35 инструкций. Они работают на регистровом и битовом уровнях. И многое другое. Хотя байты могут показаться не такими уж большими, ни одна из первых семи демонстраций не использовала более 75 байтов! Это включает в себя управление биполярным шаговым двигателем и считывание данных с внешнего аналого-цифрового преобразователя, которого нет в 16F.

PIC

используют гарвардскую архитектуру, в которой инструкции и данные работают с отдельными источниками, что упрощает синхронизацию и проектирование микросхем. Хотя они могут быть запрограммированы схемно, я использовал отдельный программатор и разъем ZIP в моей домашней плате для разработки.

В демонстрационных примерах будут использоваться все три таймера, модуль pwm, прерывания и т. Д. Идея состоит в том, чтобы представить рабочий отлаженный код, чтобы новичок мог узнать больше самостоятельно. Что делает код, так это проверяет каждый полубайтный полубайт, чтобы убедиться, что это 10 0x0A, которое мы затем добавляем 0x06 к нижнему полубайту или 0x60 к верхнему полубайту, и счет продолжается и отправляется на светодиоды PORTB.

Веб-сайт Авторские права Льюис Лофлин Все права защищены. Если вы используете этот материал на другом сайте, пожалуйста, дайте обратную ссылку на мой сайт. Он легко вставляется в макет и очень полезен для быстрого прототипирования.

Это освобождает много места на макетной плате, поскольку схемы генератора, сброса и ICSP уже встроены в модуль. Он отличается от предыдущего макетного модуля PIC16F тем, как микроконтроллер теперь работает с внешним 4.

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

PIC16F628A

Компоновка и принципиальная схема модуля показаны ниже. Контакты RA6 и RA7 используются для подключения внешнего кристалла, тогда как RA5 является только входным контактом и используется для схемы сброса. Эту схему можно припаять на макетной плате общего назначения. Вот несколько фотографий готовой доски, которые я сделал.

Теперь макетный модуль готов и пришло время его протестировать. Принципиальная схема здесь не показана, так как она очень проста. Программа написана на C и приведена ниже.Загрузите файл HEX. Как включить mclr. См. Документацию ICSP. Да, есть - расположен у контактов питания на печатной плате слева внизу. В дополнение к этому, мне пришлось поставить еще один прямо между контактами 5 и 14 PIC.

Сброс с помощью вышеуказанной схемы был проблематичным - обычно зависал при сбросе - пока я не добавил 0. Pingback: Electronics-Lab. Только что закончил свой макетный модуль для этого PIC: D.

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

В этой статье описывается, как создать полнофункциональный одноканальный программируемый релейный переключатель с использованием микроконтроллера PIC16FA. Максимальный интервал времени, который вы можете установить для включения и выключения, составляет 99 часов 59 минут. Еще одна интересная особенность этого проекта заключается в том, что он предлагает циклическую опцию, что означает, что вы можете запускать его в непрерывном цикле из циклов включения и выключения.

Устройство можно запрограммировать с помощью 4 нажимных переключателей. Временное разрешение этого реле-таймера составляет 1 минуту. Таймер также сохраняет вводимые пользователем данные во внутреннюю EEPROM, чтобы сохранить эти значения после любого прерывания подачи питания. Вот краткое описание функций этого таймера: Аппаратная часть этого проекта очень проста. Вся схема работает от стабилизированного источника питания 5 В, полученного с использованием популярного чипа линейного регулятора LM, рис. 1.

Чтобы свести к минимуму рассеивание тепла в регуляторе напряжения, рекомендуемое входное напряжение постоянного тока для LM составляет 9 В, которое можно легко получить от настенного адаптера постоянного тока.Диод D1 1N используется для защиты от обратной полярности в схеме.

S1 - ползунковый переключатель для включения и выключения источника питания. На рисунке 2 показаны настройки ввода и вывода. В этом проекте есть пять тактовых переключателей: один для сброса микроконтроллера и четыре для пользовательского ввода. Их функции будут описаны в разделе программного обеспечения. Назначение контактов для ЖК-дисплея данных и сигналов управления показано на рисунке 2.

S2 - еще один ползунковый переключатель, который позволяет вручную управлять подсветкой ЖК-дисплея.Выходной релейный переключатель приводится в действие через транзистор 2N NPN. Проект также включает зуммер постоянного тока, который издает звуковой сигнал, когда релейный переключатель меняет свое состояние.

Цепи реле и зуммера показаны на рисунке 3. Рисунок 1. Рисунок 3. Схема управления реле и зуммером Рисунок 4. Станьте подписчиком Free Join 29, другие подписчики получают скидки при продаже подписчиков и другие бесплатные ресурсы. Имя: Электронная почта: Не волнуйтесь - ваш адрес электронной почты в полной безопасности. Я обещаю использовать его только для отправки вам MicroZine.

16F - более старое устройство, но все же очень способное маленькое устройство 18pin - то же самое, что и у почтенного 16F. Важно отметить, что у него есть собственные внутренние часы, работающие с частотой 4 МГц. Версия 16FA все еще находится в производстве по состоянию на апрель и является улучшенной версией 16F, в основном с возможностью снижения мощности на нано ватт - и она также способна работать от 2 В или выше, тогда как 16F работает от 3 В или выше во всех других отношениях 16FA. идентична 16F - распиновка, внутренняя периферия и архитектура mempry.

Когда вы используете внутренний генератор, вам не нужен внешний кристалл, так что в большинстве проектов он освобождает два контакта. Кроме того, вы также можете использовать внутреннюю схему сброса, чтобы освободить контакт сброса для использования контакта MCLRn, но обратите внимание, что этот контакт может использоваться только как вход из-за внутренней схемы в 16F. Еще одна полезная функция - вы можете переключать он меняет частоту внутренних 4 МГц до внутренних 37 кГц на низкой скорости, поэтому вы можете использовать его в приложениях, чувствительных к энергопотреблению, но 16FA - лучший выбор, если вам нужна работа со сверхнизким энергопотреблением.

Перейти к списку устройств пузырьковой диаграммы. Чтобы получить сводку по каждому периферийному блоку, щелкните здесь. Примечание. Чтобы сравнить пузырьковые диаграммы, откройте страницу каждого устройства в отдельном окне. Для этого можно использовать браузер с вкладками. Нажмите ссылку «Перейти к устройству» выше, а затем поочередно выберите каждое представление, чтобы увидеть различия между устройствами.

Микроконтроллер 16F pic представляет собой вполне способное маленькое устройство, имеющее достаточно памяти для полезных приложений, и единственные функции, которых ему не хватает, - это АЦП и возможность I2C.Примечание: вы можете обойти отсутствие I2C, используя битовое программирование i. 16F имеет довольно хорошую работу с низким энергопотреблением 1uA 3V, но если вы действительно хотите иметь систему с батарейным питанием, которая прослужит дольше, то 16FA имеет ток в режиме ожидания nA 2V i.

Комментарии Выскажите свое мнение о том, что вы только что прочитали! Оставьте мне комментарий в поле ниже. Зарядное устройство для Arduino: очень полезный проект, позволяющий заряжать «неперезаряжаемые» щелочные батареи! Читать далее. Digispark ATtiny Важная информация по настройке и использованию этого крошечного, но мощного чипа.

Секреты абсолютного значения абсорбции Arduino - Почему это может выйти из строя, почему это может вызвать проблемы Предупреждение: 16F не рекомендуется для новых проектов, поэтому просто купите версию 16FA, и работа кода будет идентична - 16FA имеет более низкое энергопотребление и может работать при более низком напряжении, читать легкую работу от батареи.

Последние статьи. Комментарии читателей. Я нахожу здесь много полезных проектов и советов. Очень полезно, открыто, честно и ясно. Большое спасибо за ваше время и работу.Воспроизведение без разрешения запрещено. Имя :. Электронное письмо :. Не волнуйтесь - ваш адрес электронной почты полностью защищен. В прошивку запрограммирован ряд последовательностей, обеспечивающих интересные визуальные эффекты и последовательности погони, в том числе классический эффект, наблюдаемый на автомобиле в сериале Knight Rider TV Original Source. picprojects.

Все проекты. Область комментариев. Добавьте сюда свои вопросы и комментарии. Комментарии будут опубликованы после утверждения администратором. Здравствуйте, можно ли по умолчанию переключать режим погони в один режим каждый раз при включении схемы?

Ответ администратора: ожидается ответ администратора.Работает очень хорошо. Кнопка позволяет перейти к следующему эффекту. Я также заметил, что если вы зажмете переключатель, он войдет в меню «выбор режима». Очень крутой проект. Это отличный проект. Это означает, что это выглядит как одна повторяющаяся последовательность, игнорируя при этом все другие запрограммированные последовательности?

Спасибо. Ответ администратора: Привет, Грегорио, Большое спасибо за комментарий. Хороший проект. Пожалуйста, я хочу знать все компоненты печатной платы и схемы моделирования. Все компоненты указаны на самой схеме.

Скажите, пожалуйста, с помощью какого программного обеспечения можно открыть прилагаемый здесь исходный код? Кау масуки коденья пакай алат апа я мас. Ответ администратора: Здравствуйте, Эди, пожалуйста, отправьте свой вопрос на английском языке:. Ответ администратора: Спасибо, kreem! Ответ администратора: Привет, kreem, Вы можете скачать исходный код по ссылкам для скачивания над страницей.

Ответ администратора: Спасибо, sivakumar. Ответ администратора: Привет, Анямела. С какой проблемой вы столкнулись? Пожалуйста, пришлите более подробную информацию.


Слово конфигурации PIC16F628

Слово конфигурации PIC16F628

[Меню]> [Руководство по использованию PIC]> [628 Аппаратное обеспечение]

Слово конфигурации PIC16F628

PIC16F628 имеет специальную область для чтения слова конфигурации в памяти программ.
Это слово отображается в ячейке памяти программы 2007h. Этот адрес находится вне области памяти пользовательской программы. Это слово доступно только во время программирования.

С помощью слова конфигурации можно обозначить следующие системные требования PIC.

CP1, CP0: биты защиты кода (они отличаются от PIC16F84A или PIC16F873)
Всем парам CP1: CP0 должно быть присвоено одно и то же значение, чтобы включить указанную схему защиты кода.
11 : Защита кода программной памяти выключена
10 : 0400h-07FFh код защищен
01 : 0200h-07FFh код защищен
00 : 0000h-07FFh код защищен
CPD: бит защиты кода данных
1 : Защита кода памяти данных выключена
0 : Код памяти данных защищен
LVP: включение программирования низкого напряжения
1 : Вывод RB4 / PGM имеет функцию PGM, программирование низкого напряжения включено
0 : RB4 / PGM - это цифровой ввод / вывод, для программирования необходимо использовать HV на MCLR
BODEN: бит разрешения сброса при обнаружении пониженного напряжения
1 : Сброс BOD включен
0 : Сброс BOD отключен
MCLRE: выбор функции вывода RA5 / MCLR (этот бит впервые предусмотрен для PIC16F628)
1 : Функция вывода RA5 / MCLR - MCLR
0 : Функция вывода RA5 / MCLR - цифровой вход, MCLR внутренне привязан к VDD
PWRTE: бит включения таймера включения
1 : PWRT отключен
0 : PWRT включен
WDTE: бит включения сторожевого таймера
1 : WDT включен
0 : WDT отключен
FOSC2, FOSC1, FOSC0: Биты выбора генератора (функции добавлены)
111 : Генератор ER (внешний резистор): функция
CLKOUT на выводе RA6 / OSC2 / CLKOUT, резистор на выводе RA7 / OSC1 / CLKIN

110 : Генератор ER (внешний резистор): функция ввода / вывода
на выводе RA6 / OSC2 / CLKOUT, резистор на выводе RA7 / OSC1 / CLKIN

101 : Генератор INTRC (внутренний осциллятор с частотой 4 МГц):
функция CLKOUT на выводе RA6 / OSC2 / CLKOUT, функция ввода / вывода на выводе RA7 / OSC1 / CLKIN

100 : Генератор INTRC (внутренний 4 МГц OSC): функция ввода / вывода
на выводе RA6 / OSC2 / CLKOUT, функция ввода / вывода на выводе RA7 / OSC1 / CLKIN

011 : EC (вход внешнего тактового сигнала):
функция ввода / вывода на выводе RA6 / OSC2 / CLKOUT, CLKIN на выводе RA7 / OSC1 / CLKIN

010 : HS осциллятор: высокоскоростной кварцевый / резонатор на RA6 / OSC2 / CLKOUT и RA7 / OSC1 / CLKIN

001 : Генератор XT: кварцевый / резонатор на RA6 / OSC2 / CLKOUT и RA7 / OSC1 / CLKIN

000 : Генератор низких частот: кристалл малой мощности на RA6 / OSC2 / CLKOUT и RA7 / OSC1 / CLKIN


Электронные эксперименты: PIC16F628A

Эксперименты с PIC16F628A:

В первом эксперименте, который мы собираемся провести, с PIC16F628A, мы покажем, как настроить M.C.U (блок микроконтроллера) для вывода всех портов (в 1 логике, то есть в данном случае 5vcc).
Выход будет отображаться на L.E.D, подключенных к PORTA и PORTB. Последовательные резисторы с L.E.D. могут ограничивать ток через светодиод в соответствии с каталогом данных (макс. 20 ~ 25 мА при минимальном напряжении 1,8 В до открытого перехода P.N).

В этом эксперименте мы покажем, как настроить MCU на мигание светодиода. PORTB будет использоваться, чтобы показать это.
Кнопка S1 и (подтягивающее) сопротивление со значением 4,7 К обеспечат ручной режим сброса микроконтроллера. Разъем
ICSP обеспечивает соединение между программатором (PicKit 2) и микроконтроллером (PIC6F628A).

В этом эксперименте мы покажем, как настроить MCU на 8-битный счет в двоичном режиме. Счетчик будет отсчитывать от 0 (00h) до 255 (FFh) с задержкой в ​​1 секунду между каждым отсчетом. Выходной сигнал будет отображаться на 8 л.Э.д., подключенные к ПОРТУ RB.0 ~ RB.7
Кнопка S1 и (подтягивающее) сопротивление со значением 4,7 К обеспечат режим ручного сброса микроконтроллера. Разъем ICSP обеспечивает связь между программатором (PicKit 2) и микроконтроллером (PIC16F628A).

Этот пример показывает, как не следует использовать сторожевой таймер. Команда, используемая для сброса этого таймера, намеренно не включается в основной цикл программы, что позволяет сбросить микроконтроллер.В результате микроконтроллер будет постоянно сбрасываться, что отражается в мигании светодиода PORT RB.0 ~ RB.7.
Кнопка S1 и (подтягивающее) сопротивление со значением 4,7 К обеспечат режим ручного сброса микроконтроллера.

В этом эксперименте мы будем работать с прерываниями, которые активируются после переполнения регистра таймера TMR1 (TMR1H, TMR1L).
В результате на РБ ПОРТА будет изменена комбинация битов.0 ~ RB.7. Разъем
ICSP обеспечивает соединение между программатором (PicKit 2) и микроконтроллером (PIC16F628A).

В этом эксперименте мы проведем демонстрацию с библиотекой кнопок. PORTB используется для этого эксперимента (как выход, для светодиодов) и RA6 (как ввод, для кнопки S2).
Как обычно, кнопка S1 и (подтягивающее) сопротивление со значением 4,7 К обеспечивают режим ручного сброса микроконтроллера.Разъем ICSP обеспечивает связь между программатором (PicKit 2) и микроконтроллером (PIC16F628A).

В этом эксперименте мы будем использовать CCP1 в качестве ШИМ для управления мощностью L.E.D. PWM означает широтно-импульсную модуляцию, при которой ширина цифрового сигнала изменяется для управления мощностью, подаваемой на нагрузку (в данном случае L.E.D).

Как и в прошлом уроке, №07, мы будем работать с CCP1 в режиме PWM, чтобы управлять силой света L.E.D, но здесь мы не будем использовать кнопки для изменения формы ширины нашего сигнала. Ширина импульса будет автоматически меняться от 0% до 100% и наоборот.

В этом эксперименте мы снова будем работать с ШИМ, но на этот раз в качестве потребителя я буду использовать двигатель постоянного тока. Чтобы избежать сжигания порта RB3 из-за большого потребления двигателя, потребление которого не может быть отдано портом микроконтроллера, мы будем использовать расширение, состоящее из транзистора (в нашем случае BC547 / NPN), подключенного в режиме переключения (ON / ВЫКЛЮЧЕННЫЙ ).

На этот раз мы реализуем программный режим PWM, чтобы контролировать интенсивность света светодиода RGB (красный, зеленый, синий, который представляет пиксель). В этом эксперименте будут использоваться ПОРТ RA0 ~ RA2 и ПОРТ RB0 ~ RB2.
Порт B используется для облегчения перехода между цветами RBG.

В этом эксперименте мы узнаем, как использовать более одного 7-сегментного светодиодного дисплея, подключенного одновременно к порту микроконтроллера, с использованием метода мультиплексирования.В текущем эксперименте четырехзначный общий катод будет сопрягаться с ПОРТОМ B (командная часть) и с ПОРТОМ A (управление цифрами). Схема мультиплексирования сконфигурирована на макетной плате и состоит из четырех NPN-транзисторов и некоторого сопротивления.

Основная техника такая же, как и в предыдущем уроке, за исключением того, что мы добавили счетчик, который считает от 0000 до 9999. Наш счетчик увеличивается с задержкой в ​​1 секунду.
Все 7-сегментные дисплеи подключены к PORTB (RB0..RB7, сегмент A к RB0, сегмент B к RB1 и т. Д.) С обновлением через контакты RA0..RA3 на PORTA.

Сегодняшний урок отличается от предыдущего наличием двух кнопок и ручным приращением.
Все 7-сегментные дисплеи подключены к PORTB (RB0..RB7, сегмент A к RB0, сегмент B к RB1 и т. Д.) С обновлением через контакты RA0..RA3 на PORTA.

В этом уроке мы сделаем цифровой измеритель температуры на DS18B20.Связь между датчиком температуры и микроконтроллером будет осуществляться по одному проводу. В этом преимущество модели датчика температуры. Значение температуры будет отображаться на 4-х цифрах - с 7-сегментным, конечно, в мультиплексном режиме.

Цель этого эксперимента - связать ЖК-дисплей 2x16 символов (совместимый со стандартом HD44780) с PIC16F628A в 4-битном режиме. Это означает, что для передачи данных будут использоваться всего 4 контакта микроконтроллера.Никакой дополнительной настройки оборудования не требуется. В текущем эксперименте мы отображаем текст на ЖК-дисплее 2x16. Принципиальная схема представлена ​​ниже.

Техника связи с ЖК-дисплеем такая же, как в предыдущем уроке, а для текущего эксперимента мы добавили счетчик, который ведет отсчет от 0000 до 9999. Наш счетчик увеличивается с задержкой в ​​1 секунду.
Соединения с ЖК-дисплеем выполняются следующим образом: D4 с RB0, D5 с RB1, D6 с RB2, D7 с RB3, RS с RB4 и EN с RB5.

В этом эксперименте мы будем работать с буквенно-цифровым ЖК-дисплеем и кнопкой.
Связь с ЖК-дисплеем будет осуществляться через 4 бита, и соединения выполняются следующим образом: D4 с RB0, D5 с RB1, D6 с RB2, D7 с RB3, RS с RB4 и EN с RB5. Кнопка подключена к ПОРТУ RA4 (для увеличения) и ПОРТУ RA6 (для уменьшения). Конечно, обе кнопки имеют подтягивающие резисторы (4к7).

В этом эксперименте мы будем работать с датчиком температуры DS18B20, но на этот раз результаты будут отображаться на ЖК-дисплее 2x16.
Связь с ЖК-дисплеем будет осуществляться через 4 бита, и соединения выполняются следующим образом: D4 с RB0, D5 с RB1, D6 с RB2, D7 с RB3, RS с RB4 и EN с RB5. Вывод данных DS18B20 подключен к PORT RA1, и мы также используем подтягивающие резисторы (4k7 Ом) для связи с датчиком температуры.

В этом эксперименте мы будем работать с внутренней памятью EEPROM, и я покажу, как записывать и читать информацию в ней, с помощью небольшого меню, отображаемого на ЖК-дисплее 2x16 символов.

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

А теперь картинки с макетом во время экспериментов.


ИНСТРУМЕНТОВ для PIC16F628A

ПРИМЕЧАНИЕ. Эти элементы сняты с производства в течение длительного времени.
Мы больше не поддерживаем эти продукты и не предлагаем альтернативы.

Мы сохраняем эти страницы, чтобы пользователи могли видеть, что их существующие инструменты поддерживают, и предоставлять ссылки для загрузки окончательной документации и версий программного обеспечения. У нас осталось несколько запасных частей, но их не так много. Рядом с доступными товарами есть кнопка «ДОБАВИТЬ в КОРЗИНУ» или «Купить сейчас». В противном случае они недоступны.

У

также есть несколько товаров на складе.

PIC16F628A Поддержка

Следующие продукты TechTools (сгруппированы по основным категориям продуктов), предлагают поддержку PIC16F628A PICmicro® MCU.

QuickWriter ™

больше информации ...
QuickWriter ™ Программатор MCU поддерживает 12-битную, 14-битную и 18 (F) серии PICmicro® Микроконтроллеры MCU.Разработан полнофункциональный, простой в использовании интерфейс QuickWriter чтобы ускорить и упростить работу инженеров-разработчиков И повседневного производства Персонал. QuickWriter включает TDE, полную среду разработки для Microchip PICmicro® MCU, наш ассемблер ClearView (CVASM) и наш внутрисхемный кабель для программирования (QW-ICSP).

QuickWriter ™ Поддержка

Номер детали: Описание: Цена: Заказ:
QW1 QUICKWRITER MCU ПРОГРАММАТОР $ 199 ----

4-х позиционные переходники

Номер детали: Описание: Цена: Заказ:
QW-4SOIC18 АДАПТЕР QUICKWRITER GANG ADAPTER 18 PIN SOIC 14 И 16 БИТ DEV. $ 249 ----
QW-4SSOP20 АДАПТЕР QUICKWRITER GANG ADAPTER 20 PIN SSOP 14 И 16 БИТ DEV. $ 249 ----
QW-4ZIF18 БАНКОВЫЙ АДАПТЕР QUICKWRITER, 18-КОНТАКТНЫЙ, DIP 14 И 16-РАЗР. $ 199 ----

Однопозиционные адаптеры

Номер детали: Описание: Цена: Заказ:
MP-SSOP18 ПЕРЕХОДНИК SSOP 18 КОНТАКТОВ $ 79 ----
MP-ZIF18 / 28 ПЕРЕХОДНИК ZIF 18/28 КОНТАКТОВ $ 69 ----
MP-SOIC18 АДАПТЕР SOIC, 18 КОНТАКТОВ $ 79 ----

Поддержка внутрисхемного программирования

Поддерживается с помощью прилагаемого кабеля ICP (CBL-ICSP).
Номер детали: Описание: Цена: Заказ:
CBL-ICSP Кабель для внутрисхемного последовательного программирования QuickWriter 15 долларов США.00


CVASM ™

больше информации ...
Ассемблер TechTools для 12-битных и 14-битных микроконтроллеров Microchip PICmicro® принимает наши собственные простые в использовании инструкции, подобные 8051, а также оригинальная инструкция Microchip набор. CVASM был включен в ClearView ™ Mathias, QuickWriter ™ и наши Обновление программатора параллакса, но теперь оно доступно для бесплатной загрузки.

Поддержка CVASM ™

Номер детали: Описание: Цена: Заказ:
CVASM16 Ассемблер ClearView $ 0 ----


ClearView ™ Матиас

больше информации ...
Модульное оборудование предлагает полную эмуляцию микроконтроллера PICmicro® включая ВСЕ периферийные устройства. Модульная конструкция обеспечивает легкое расширение и модернизацию при снижении начальных инвестиционных затрат. ClearView Mathias включает TDE, полный Среда отладки и разработки для микроконтроллера Microchip PICmicro® и наш ассемблер ClearView (CVASM).

ClearView ™ Поддержка Mathias

ClearView Mathias (требуется 1 модуль для семьи и члена)

Номер детали: Описание: Цена: Заказ:
CVM1 ClearView Mathias, внутрисхемный эмулятор $ 499 ----

Семейные модули (требуется 1)

Номер детали: Описание: Цена: Заказ:
CVM03F РАСШИРЕННЫЙ 14-БИТНЫЙ СЕМЕЙНЫЙ МОДУЛЬ С ТОЧКАМИ РАЗРЫВА ДАННЫХ $ 200 ----
CVM04F РАСШИРЕННЫЙ 14-БИТНЫЙ СЕМЕЙНЫЙ МОДУЛЬ С ТОЧКАМИ РАЗРЫВА ДАННЫХ (СОВМЕСТИМ с CVM03F) $ 200 ----

14-битные модули-члены (используются с CVM03F или CVM04F)

Номер детали: Описание: Цена: Заказ:
CVMF628M 16F628 Элементный модуль $ 200 ----

Дополнительные элементы

Номер детали: Описание: Цена: Заказ:
CVMT1 МОДУЛЬ ВРЕМЕНИ / СЧЕТЧИКА $ 130 ----
CVMT2 МОДУЛЬ БУФЕРА СЛЕЖЕНИЯ $ 270 ----


.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *