Отладочная система для МК
При разработке программы на микроконтроллерах часто, почти всегда, требуется видеть промежуточные результаты её выполнения. Программатор STK500, которым я пользуюсь, имеет 8 светодиодов позволяющих наблюдать их в двоичном виде. Для того чтобы их увидеть, необходимо прибегать к специальным ухищрениям в программе, останавливать, циклически выводить результат и т.д. Если бы STK500 был снабжён символьным экраном с памятью, то многие вопросы с отладкой программы были бы решены.
Технические требования для разработки
-
Микроконтроллер (МК) для разработки встраимого программного обеспечения (ПО) вставляется в предназначенный для него сокет STK500.
-
Количество портов контроллера для управления символьным экраном (СИ) должно быть минимально.
-
Библиотека для управления СИ должна занимать как можно меньше ресурсов МК.
-
Питание СИ от STK500.
Принципиальная схема
Представлена на Рис.1
Рис.1
STK500 имеет семь 10-и контактных вилок типа IDC-10 для вывода портов МК для связи с внешними устройствами. Стенд имеет 10-и контактное гнездо IDC-10 сопрягаемое с любой из семи разъёмов. Адаптация стенда к определённым каналам происходит путём перепрограммирования макросов (указано ниже).
Для уменьшения каналов для символьного экрана (WH1604A), используется быстродействующий 8-и разрядный сдвиговый регистр (<>RG) 561ИР6. Для связи с МК используется 4 канала, SN - синхронизация записи информации обозначено как DATA. На выходе <>RG появляется параллельный 8-и разрядный код для записи в память СИ. Для управления записью 8-и разрядного кода <>RG используются ещё 2 порта МК, сигналы RS и E. Следовательно, для управления СИ необходимы 4 сигнала управления и два провода питания, всего 6. Для управления СИ используются два локальных сигнала, управление контрастностью – переменный резистор 10к на 3-ей ножке СИ
Программное обеспечение
Используются стандартные заголовочные файлы #include <mega16.h>, #include <delay.h>, #include <string.h>, #include <STDLIB.H> и одна разработанная мной библиотека в виде заголовочного файла #include "lcd1604.c".
Программа состоит из нескольких простых подпрограмм:
-
void Init_LCD(void) – инициализация LCD.
-
void RG(unsigned char x) – последовательная запись в регистр 561ИР6 байта «х» для подготовки передачи в LCD.
-
void Data(unsigned char d) – запись символа в LCD.
-
void Out_Word(char *str) – запись слова в LCD.
-
void WrS(unsigned char stroka,unsigned char znakomesto,char *mes) – запись в LCD целой строки в конкретную позицию.
-
void awatar(void) – запись в LCD диагностической информации для проверки
-
void Clear(void) – очистка экрана LCD.
Макросы для привязки стенда к конкретному МК
#define S0E1 PORTB.3=0;PORTB.2=1;
#define S0E0 PORTB.3=0;PORTB.2=0;
#define S1E1 PORTB.3=1;PORTB.2=1;
#define S1E0 PORTB.3=1;PORTB.2=0;
#define DATA PORTB.1
#define SN DDRD.7=PORTD.7=1;PORTD.7=0;
// S=RS(на принцип.схеме), E=E(на принцип.схеме), S0,E0-сигналы в 0, S1, E1-сигналы в 1
Отладка конкретного МК связана с корректировкой указанных макросов с последующей компиляцией. Если по окончании отладки ПО будущему встраиваемому модулю не нужна визуализация, модуль #include "lcd1604.c" удаляется с последующей компиляцией.
Печатная плата
Представлена на Рис.2
Рис.2
Внешний вид отладочного стенда представлен на Рис.3
Рис.3