В данном демонстрационном проекте мы рассмотрим задачу сопряжения элемента управления под названием энкодер с микроконтроллером PIC.
Для реализации демонстрационного проекта нам понадобятся:
Энкодер – современный и оригинальный элемент управления цифровыми устройствами, и по внешнему виду похож на переменный резистор (см. рисунок ниже). Другое название этого элемента управления – датчик угла, датчик поворота. Вращение вала сопровождается щелчками, например 24 щелчка на один оборот. Энкодер имеет 3 вывода – A, B, C и применяется для быстрого ввода данных в цифровые устройства. Некоторые модели имеют встроенную кнопку, которая срабатывает по нажатию на вал энкодера (добавляется еще один вывод).
Принцип работы энкодера
При повороте на один щелчок, например, вправо, сначала замыкается контакт А+С, затем В+С. Когда в этом щелчке вал доворачивается, в той же последовательности контакты размыкаются. При повороте вала в другую сторону, последовательность замыкания с контактом С меняется, т.е. при повороте влево замыкаются сначала В+С, затем А+С.
Используя энкодер в проектах на микроконтроллерах, возможно, при помощи одного и того же энкодера, реализовать несколько различных типов ввода данных, однако, это требует некоторой обратной связи и визуализации, чтобы пользователь знал, какую информацию он вводит и в какой позиции энкодер.
Принципиальная схема (нажмите на рисунок, чтобы увеличить его)
Выводы энкодера A и B подключаются к портам микроконтроллера RB4 и RB5, вывод С энкодера подключается к «земле». Стоит заметить, что на сигнальные линии выводов A и B должны быть подключены подтягивающие резисторы. Энкодер не случайно подключен к указанным линиям ввода/вывода микроконтроллера: во-первых, порт B имеет встроенные подтягивающие резисторы и нам не придется подключать внешние, во-вторых, порт B микроконтроллера имеет очень полезную функцию – «interrupt-on-change» – прерывание по изменению уровня, что позволит нам отслеживать состояние энкодера.
16 обычных 3 мм светодиодов используются для визуализации вводимых данных и расположены они будут на печатной плате вокруг установленного энкодера. Светодиоды подключены к микросхеме A6276.
Микросхема A6276 представляет собой драйвер светодиодов с 16-битным последовательным вводом информации. Драйвер содержит 16-битный КМОП сдвиговый регистр, соответствующие защелки и драйверы для управления светодиодами и может управлять большим количеством светодиодов, чем это позволяет микроконтроллер. Кроме того, драйвером можно управлять по интерфейсу SPI, что дополнительно сокращает количество используемых линий ввода/вывода и делает проект масштабируемым.
Программное обеспечение микроконтроллера для решения нашей задачи относительно простое. Реализуется 3 режима работы (ввод информации) и обратная связь:
В архиве по этой ссылке находятся проект в среде MPLAB и исходным кодом на Hitech C, а также, принципиальная схема и топология печатной платы
Автор: Садовой А.В.
Материал взят с журнала РАДИО 2007, №10
Ну вот и настало то время, когда и мне пришлось взяться за изучение МК. К этому подвинула статья Автоматическое ЗУ на Atmega16A Тут и без всякого раздумья стало понятно, что нужно срочно собирать программатор. Листая журнал РАДИО, нашел приемлемую схему для себя. Ниже приводится описание с журнала.
Предлагаемый программатор работает под управлением программы PonyProg [1], распространяемой бесплатно. Если ограничиться программированием МК PIC и микросхем памяти, можно воспользоваться также программами IC-Prog и WinPic800, распространяемыми на тех же условиях.
Программирование 18-выводных МК PIC и 20-выводных AVR производится без каких-либо коммутаций. Достаточно установить МК в предназначенную для него панель и выбрать его тип в меню используемой программы. От установки панелей для всех МК этих семейств автор сознательно отказался, так как в любительской практике они используются редко. При необходимости нужные панели можно установить дополнительно или подключать требующиеся для программирования выводы МК к предусмотренному в программаторе разъему. Этот же разъем используется при внутрисхемном программировании.
Кроме МК, устройство позволяет программировать микросхемы памяти с последовательным интерфейсом, имеющиеся в меню используемых программ. Для подобных программ с интерфейсом I2C в программаторе предусмотрена панель.
До начала процесса программирования и по его завершении напряжение питания программируемой микросхемы отключено, что дает возможность безопасно установить микросхему в панель, а затем извлечь ее.
Прежде чем рассматривать работу программатора подробно, вспомним некоторые особенности программирования МК семейств PIC и AVR. Номера упоминаемых далее выводов МК различных можно найти в технической документации.
Чтобы перевести в режим программирования МК семейств PIC, требуется подать на его вывод MCLR напряжение +12…14 В. Обмен информацией с устройством, управляющим программированием, происходит через двунаправленный вывод DATA. Синхронизирующие импульсы обмен импульсы поступают на вывод CLOCK.
МК семейства AVR повышенного напряжения не требуют. Они переходят в режим программирования при низком логическом уровне на выводе RESET. При этом необходимо, чтобы к соответствующим выводам МК был подключен кварцевый резонатор. Информация принимается через вывод MOSI, а передается через вывод MISO. Вход синхронизирующих импульсов – вывод SCK.
Схема программатора изображена на рис. 1. Ее наиболее существенное отличие от прототипа [1] заключается в использовании для связи с COM-портом компьютера микросхемы МАХ232СРЕ (DA2) – специализированного преобразователя уровней RS232 – ТТЛ. Это позволило выполнить все требования по уровням передаваемых сигналов и нагрузочной способности линий порта и значительно улучшило надежность работы устройства.
Чтобы излишне не нагружать COM-порт, предусмотрено питание программатора и программируемой микросхемы только от внешнего источника. Его постоянное напряжение (15 В) или переменное (10…12 В) напряжение поступает в программатор через диодный мост VD1, служащий выпрямителем переменного напряжения или приводящий постоянное к правильной полярности.
Интегральный стабилизатор DA1 питает напряжением 5 В преобразователь уровней DA2. Светодиод HL1 сигнализирует о включении питания. Стабилизатор DA3 на 12 В – управляемый. Он включен при высоком логическом уровне напряжения на управляющем входе 4 и выключен при низком уровне. Это свойство использовано для управления напряжением, переводящим МК семейства PIC в режим программирования, и напряжением питания программируемой микросхемы, которое получают из 12 В с помощью интегрального стабилизатора DA4. О включенном питании программируемой микросхемы сигнализирует светодиод HL2.
Очень важен правильный выбор емкости конденсатора С7 на выходе стабилизатора DA3. При слишком большом значении напряжение, переводящее МК семейства PIC в режим программирования, после включения стабилизатора будет нарастать недостаточно быстро, что приведет к сбою. Устанавливать конденсатор С7 слишком маленькой емкости или вовсе отказаться от него нельзя – это приведет к самовозбуждению стабилизатора и сделает программирование невозможным.
Диод VD2 ограничивает до безопасного значения отрицательное напряжение, которое может поступить на управляющий вход стабилизатора DA3 с контакта 3 разъема XS1 (линии TXD COM-порта). Узел на транзисторе VT2 формирует сигнала RESET для МК семейства AVR.
Узел на транзисторах VT1 и VT3 разделяет имеющуюся в МК семейства PIC двунаправленную линию DATA на две однонаправленных для компьютера. Под названиями MOSI и MISO эти же однонаправленные линии используются при программировании МК семейства AVR.
Для аналогичного преобразования в [1] был применен логический инвертор на одном транзисторе. Однако его практическое использование выявило довольно большое число сбоев, причина которых, по мнению автора, - недостаточная задержка информационного сигнала на линии DATA относительно синхронизирующего на линии CLOCK. Добавление второго инвертора увеличило задержку и устранило сбои, однако «лишнюю» инверсию приходится компенсировать соответствующей настройкой управляющей программы, о чем будет сказано далее.
Используя для управления программированием программу PonyProg, следует выбрать в соответствующем ее окне программатор «SI Prog I/O» и задать инверсию сигналов в соответствии с табл. 1. Программа WinPic при работе в ОС windows XP позволяет программировать только МК семейства PIC и микросхем памяти. Однако в ОС Windows 98 МК этой программой не программируются. С программой IC-Prog ситуация обратная. При настройке обеих программ должен быть выбран программатор “JDM Programmer”. Инверсию сигналов задают в соответствии с табл. 2. (для WinPic) и табл. 3. (для IC-Prog).
Наличие нескольких во многом равноценных управляющих программ дает возможность пользоваться программатором даже при возникновении проблем в работе с одной из них. Например, МК, отсутствующий в списке доступных одной программе, может быть найден в списке другой.
Так случилось при попытке запрограммировать МК PIC16F628A. В списке программы PonyProg имеется лишь PIC16F628 на экране монитора появляется сообщение «Неизвестный тип микроконтроллера». Даже если проигнорировать это сообщение, попытки не только запрограммировать, но и просто прочитать содержимое памяти МК положительного результата не дают. Однако в списках программ WinPic800 и IC-Prog нужный МК есть, его программирование с помощью этих программ выполняется без замечаний.
ЛИТЕРАТУРА
1. Lanconelly C. PonyProg – serial device programmer
2. Gijzen B. IC-Prog Prototype Programmer
3. Font S. Software for PIC programming Windows 95/98/NT/2000/ME/XP compatible
Все ясно и понятно как "божий день", остается за малым, а может быть не малым, воплотить все дела паяльником. Далее привожу фото-обзор как я создавал программатор:
Разметил размер будущей платы, использую так называемые "макетные платы" , как то еще не приспособился к печатным платам, поэтому пользуюсь макетками.
При сборке предыдущей статьи Светодинамическое устройство "LED-подарок девушке" как то подумал "а что если покрасить плату в черный цвет?" смотрится креативненько))) плату покрасил и в этот раз.
Вот и собрал. В отличии от оргинала, не стал впаивать панельки под МК, а впаял разъем в виде "штырьков" без понятия как они называются правильно))) Разъем для подключения адаптера с переменкой 15 В использовал от модема TP-Link и выключатель питания от него же. Диодный мост взял КЦ407.
Подписал разъем
Настало время проверить. Установил прогу PonyProg, запустил ее, появилось окно в котором требуется "...произвести калибровку". Жмем "Yes"
"Калибровка завершена"
"Настройка платы программатора" находится в верхнем меню "Установка". Жмем "Проверка" если все нормально, то появится окошко "Тест Ок"
Теперь можно записывать или считывать прошивку с МК или микросхем памяти. Как раз на работу принесли усилок фирмы BBK вот понадобилось проверить микруху памяти 24С02. Подключил микруху к соответствующим выводам на разъеме, подключил программатор к COM-порту компа, включил питание, считал/записал прошивку вот и все. Так же проверил микруху 24С04 все работает. МК PIC и AVR еще не проверял, но т.к. нужно потихоньку собирать ЗУ на Atmega16A скоро будем "шить" )))
Работает с любым COM-портом, не перегружая по току COM-порт компьютера, так как MAX232 не представляет опасности для COM-порта.
Для корректной установки программы IC-PROG, на компьютер под управлением Windows XP, ознакомьтесь с файлом ic-prog.pdf.
PIC - это programmable integrated circuit, "программируемая интегральная схема" - так фирма Microchip преподносит свои микроконтроллеры.
Фирма микрочип на данный момент выпускает несколько семейств КМОП микроконтроллеров с внутренним ПЗУ, ОЗУ, таймерами, АЦП, ШИМ и другими периферийными модулями. Самые маленькие это PIC10 -3–6 вывода, PIC12 - 8 выводов, PIC16- 14-68 выводов, PIC17- 40-84 вывода, PIC18- 28-84 вывода, dsPIC30-28-64 вывода, rfPIC12- 18-20 выводов, со встроенным радиоканалом. Каждое семейство имеет свое назначение и область применения.
Идентифицируют тип микроконтроллера согласно коду, следующему за семейством. То есть в обозначении идут буквы указывающие на тип памяти программ : EPROM- обозначается индексом “С”, ROM- обозначается индексом “CR”, FLASH- обозначается индексом «F». Если перед этими буквами стоит индекс “L” то это означает что данный микроконтроллер работает в расширенном диапазоне питания .
Например, PIC16LF
Далее идет порядковый номер разработки, 2-4 цифры.
Например, 84 - вроде как модель.
Буква A после номера - модификация (улучшенный вариант)
Следующие 2 цифры после номера через дефис обозначают максимальную частоту кварцевого генератора в мГц.
Например, 04 - максимальная паспортная тактовая частота (4MHz)
Последующая буква за тактовой частотой - означает рабочую температуру кристалла
I=-40°C...+85°C,
E=-40°C...+125°C,
при отсутствии буквы = 0°C...+70°C.
И, наконец, последние буквы через косую черту - обозначают тип корпуса табл1.
Например, PIC16F873-20/P - означает микроконтроллер фирмы микрочип среднего семейства, с FLASH памятью программ (многократное перепрограммирование порядка 1000 циклов), максимальная частота кварца 20мГц, рабочий диапазон температур 0°C...+70°C, корпус пластиковый типа DIP.
L | PLCC (пластиковый выводной кристаллоноситель) |
P | пластиковый DIP |
S | кристалл в ячеистой упаковке |
W | кристалл в форме пластины |
MR | микромодуль на ленте, 8 контактный, 35 мм |
MT | микромодуль на подносе, 8 контактный |
OT | SOT-23, 5 контактный |
SL | SO 150 mil, 14 выводный |
SM | SO 207 mil, 8 выводный |
SN | SO 150 mil, 8 выводный |
SO | SOIC 300 mil |
SS | пластиковый узкий SSOP |
ST | тонкий узкий SO (4.4 мм) |
TO | пластиковый транзисторный, 3 выводный |
TS | тонкий SO (8x20 мм) |
TT | маленький пластиковый транзисторный, 3 выводный |
VS | очень маленький SO (8x12 мм) |
WF | нарезанная пластина |
CL | CERQUAD с окошком |
JW | CERDIP с окошком для УФ стирания |
PQ | PQFP (пластиковый, квадратный, плоский) |
PT | TQFP (тонкий, пластиковый, квадратный, плоский) |
SP | пластиковый DIP |
SB | COB (кристалл на плате) |
СИСТЕМА КОМАНД PIC МИКРОКОНТРОЛЛЕРОВ
- содержит 35 инструкций, полный список приведен в табл.2. Команды разделены на три группы: байт ориентированные, бит ориентированные, команды управления и операций с константами.
Табл.2
Мнемоника команды | Описание | Циклов | Изм. флаги |
Байт ориентированные команды | |||
ADDWF f,d | Сложение W и f | 1 | C,DC,Z |
ANDWF f,d | Побитное 'И' W и f | 1 | z |
CLRF f | Очистить f | 1 | z |
CLRW> | Очистить W | 1 | z |
COMF f,d | Инвертировать f | 1 | z |
DECF f,d | Вычесть 1 из f | 1 | z |
DECFSZ f,d | Вычесть 1 из f и пропустить если 0 | 1(2) | |
INCF f,d | Прибавить 1 Kf | 1 | z |
INCFSZ f,d | Прибавить 1 к f и пропустить если 0 | 1(2) | |
IORWF f,d | Побитное 'ИЛИ' W и f | 1 | z |
MOVF f,d | Переслать f | 1 | z |
MOVWF f | Переслать W в f | 1 | |
NOP | Нет операции | 1 | |
RLF f,d | Циклический сдвиг f влево через перенос | 1 | с |
RRF f,d | Циклический сдвиг f вправо через перенос | 1 | с |
SUBWF f,d | Вычесть W из f | 1 | C.DC.Z |
SWAPF f,d | Поменять местами полубайты в регистре f | 1 | |
XORWF f,d | Побитное исключающее ИЛИ1 W и f | 1 | z |
Бит ориентированные команды | |||
BCF f,b | Очистить бит b в регистре f | 1 | |
BSF f,b | Установить бит b в регистре f | 1 | |
BTFSC f,b | Проверить бит b в регистре f, пропустить если 0 | 1(2) | |
BTFSS f,b | Проверить бит b в регистре f, пропустить если 1 | 1(2) | |
Команды управления и операций с константами | |||
ADDLW k | Сложить константу с W | 1 | C,DC,Z |
ANDLW k | Побитное 'И' константы и W | 1 | Z |
CALL k | Вызов подпрограммы | 2 | |
CLRWDT | Очистить WDT | 1 | -TO,-PD |
GOTO k | Безусловный переход | 2 | |
IORLW k | Побитное 'ИЛИ' константы и W | 1 | Z |
MOVLW k | Переслать константу в W | 1 | |
RETFIE | Возврат из подпрограммы с разрешением прерываний | 2 | |
RETLW k | Возврат из подпрограммы с загрузкой константы в W | 2 | |
RETURN | Возврат из подпрограммы | 2 | |
SLEEP | Перейти в режим SLEEP | 1 | -TO.-PD |
SUBLW k | Вычесть W из константы | 1 | C,DC,Z |
XORLW k | Побитное 'исключающее ИЛИ' константы и W | 1 | Z |
В таблице:
w -означает рабочий регистр, в некоторых микроконтроллерах данный регистр называют аккумулятором. Например при выполнении команды над регистром w и константой результат будет помещен в w (аккумулятор).
f – означает адрес регистра.
d –указатель адресата результата операции, при d=0 –результат сохраняется в регистре w, при d=1 –результат сохраняется в регистре f. В кодах программы вместо d иногда напрямую указывают регистр f или w.
b – номер бита в 8 –разрядном регистре.
k – константа, под которой понимается метка или 8 –разрядные данные.
C – флаг признака переноса.
DC- флаг признака вспомогательного переноса из младшего полубайта в старший.
Z – флаг признака нулевого результата, выполненной арифметической или логической операции.
–TO=1 – флаг выполнения команды clrwdt, sleep или включено питание,
–TO=0 – сработал wdt .
–PD=1 - флаг выполнения команды clrwdt или включено питание,
–PD=0 – выполнена команда sleep .