Следующие программы являются примерами, которые я использую для обучения программированию 8-разрядных микроконтроллеров PIC. Хорошей ссылкой является книга Тима Уилмсхерста “Проектирование встраиваемых систем с микроконтроллерами PIC: принципы и приложения”. Спецификация для PIC также является хорошим справочником для получения информации о битах для каждого регистра адреса памяти в микросхеме.
Скачать asm файл и программы для данной статьи можно – здесь.
Метод, который мы используем, заключается в программировании микросхемы PIC с использованием PICKit2 на языке ассемблера. PICKit2 относительно недорог и обслуживает большое разнообразие микроконтроллеров PIC. Обычно мы начинаем с микроконтроллера PIC16F690, поскольку в нем есть практически все, что нам нужно, и небольшое количество контактов (20). Разместив PIC16F690 на макетной плате, мы используем PICKit2 “только” и подключаем наши собственные 6 проводов от PICKit2 к микроконтроллеру, как показано на схеме схемы Pickit2.
Мы выполняем следующую процедуру для тестирования нашей системы. Программирование выполняется с помощью программного обеспечения MPLAB (скачать бесплатно) от microchip in assembly.
1. Сначала запрограммируйте микросхему PIC с помощью программы test.asm, которая подает 5 вольт, затем 0 вольт на вывод # 16 (C0).
2. Проверьте выходной сигнал вывода № 16 с помощью осциллографа. Должен быть виден выход 5 вольт, который длится 1 микросекунду (для тактовой частоты 4 МГц), и 0 вольт, который длится 3 микросекунды. Если это работает, то мы знаем, что правильно настроили программатор и микросхему.
3. Затем мы проверяем последовательную передачу, так как мы захотим получать и сохранять данные, которые мы отправляем с микроконтроллера. В качестве первой проверки мы программируем код sertest1.asm, который отправляет тот же номер по последовательному каналу со скоростью 9600 БОД
4. Чтобы проверить, работает ли последовательный выход, мы подключаем осциллограф к контакту TX (# 10 для PIC16F690). Выходной сигнал для нуля в двоичном числе должен составлять 5 вольт длительностью 1 микросекунду (для 9600 БОД). Выходной сигнал для единицы в двоичном числе должен составлять 0 вольт и длиться 1 микросекунду (для 9600 БОД). Там также будет начальный и стоповый биты, так что полный сигнал будет иметь длину 10 бит.
5. Если вывод TX выдает правильный вывод, есть два способа считывания последовательных данных с ПК: с помощью кабеля TTL-232R-5V к usb или с помощью микросхемы MAX232 к последовательному порту. Первый метод прост и удобен в использовании.
а). USB-вход на ПК: Самый простой способ передачи данных с PIC на ПК – использовать кабель TTL-USB: TTL-232R-5V (прямой разъем) или TTL-232R-5V-WE (концы проводов) производства FTDI. Кабель имеет 6 выводов, 4 из которых подключены непосредственно к выводам PIC. Принципиальную схему соединений см. в разделе PIC-usb connections.
б). Ввод через ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ на ПК: Если требуется ввести данные в последовательный порт, то микросхема MAX232 обеспечивает соответствующий сдвиг напряжения для порта. Микросхема MAX232 переключит напряжение с 5 вольт на + 8 вольт и с 0 вольт на -8 вольт для ввода в последовательный порт. См. Схему max232 (дополняет www.SoDoItYourself.com ) для получения принципиальной схемы подключения PIC к последовательному порту.
Чтобы проверить схему, мы считываем выходные данные микросхемы MAX232 с помощью осциллографа, чтобы убедиться, что правильные +/- 8 вольт представляют двоичное число.
6. Наконец, асинхронный последовательный вывод на ПК считывается в операционной системе Linux с помощью одной из программ на языке Си, перечисленных ниже (считывание асинхронного последовательного вывода). Как только правильное двоичное число будет воспроизведено на мониторе ПК, мы сможем приступить к нашим проектам. Поскольку в этом тесте мы каждый раз отправляем одно и то же двоичное число, иногда мы получаем ошибки кадрирования.
7. В качестве еще одной проверки последовательной передачи мы программируем микроконтроллер с помощью программы sertest3.asm, которая увеличивает двоичное число на единицу и отправляет его через serial на ПК. Последовательные числа должны выводиться на монитор ПК.
8. См. раздел “Подключения макетной платы” для нашей настройки внутрисхемного программирования на макетной плате.
Фотографию нашего макета смотрите в разделе protoboard. К чипу, изображенному на рисунке, был подключен резонатор с частотой 20 МГц.
Примеры программ для микроконтроллера PIC
1. time2.asm – это ассемблерный код, который считывает таймер и отправляет данные на ПК по последовательному каналу. В коде есть хорошая процедура прерывания, которая увеличивает регистры при переполнении timer0. Полные часы используют 4 регистра.
2. timer2.asm – это ассемблерный код, который мы используем для синхронизации лазерного (или фото) затвора. Программа ожидает, пока вывод 11 разрядится, принимает временную метку и отправляет 4 байта таймера по последовательному каналу на ПК. Затем он ожидает, пока вывод 11 не станет высоким, принимает временную метку и отправляет 4 байта таймера по последовательному каналу на ПК. Цикл повторяется вечно. Эта программа была разработана “СИ Джеем” Беккарелли в рамках его старшего проекта.
3. atod20hl.asm – это ассемблерный код, который быстро преобразуется из аналогового в цифровой 80 раз со значениями, сохраненными в памяти. Затем данные передаются по последовательному каналу на ПК. Строка конфигурации включает внешний резонатор с частотой 20 МГц (_HS_OSC), а последовательная передача осуществляется со скоростью 115,2 Кбод. С помощью этой программы можно выполнить 10-битную дискретизацию A-to-D на частоте 300 кГц. Эта программа была написана Майклом Мэнселлом в рамках его выпускного проекта.
Считывание асинхронного последовательного вывода с микросхемы через последовательный порт ПК и порт USB
Отличным веб – сайтом для чтения и записи на последовательный и параллельный порты является “www.beyondlogic.com “. Ниже мы перечислим пример программы, которая работает в Linux, для чтения последовательного порта.
1. picserin.c: Эта программа написана на C и работает в Linux. Он считывает последовательный порт 24 раза подряд и выводит байты на экран. Мы просто используем его в качестве теста, чтобы проверить, правильно ли микросхема PIC передает последовательные данные.
2. Последовательные данные также могут быть считаны через USB-порт. Программа usbserial.c: написана на C и работает в Linux. Мы используем последовательный USB-адаптер, для которого в Ubuntu есть драйвер. После подключения USB-разъема устанавливается драйвер устройства “ttyUSB0”.
Синхронизация на ПК через параллельный порт
Можно сделать довольно точную синхронизацию для ввода TTL с помощью параллельного порта. Ниже мы перечислим некоторые коды, которые мы используем (или использовали) в нашем классе для определения времени фотогейта.
1. pend.c: Эта программа написана на C и работает в Linux для нашего эксперимента с маятником. Он проверяет параллельный порт на наличие изменений на выводе 10. Когда происходит изменение, временная метка получается с помощью вызова rdtsc.
2. atwoodxpar.c: Эта программа написана на C и работает в Linux для нашего эксперимента с машиной atwood. Он проверяет параллельный порт на наличие изменений на выводе 10 параллельного порта. Когда происходит изменение, временная метка получается с помощью вызова rdtsc. Данные могут быть отображены на мониторе с помощью библиотеки X11. Для компиляции используйте gcc -lm -lX11 в woodxpar.c