
- •2.1. Аналого-цифровые преобразователи в pic-микроконтроллерах
- •2.2. Библиотека функций управления аналогово-цифровым преобразователем компилятора с18
- •3. Порядок выполнения работы
- •3.1. Разработка мку для измерения и индикации величины аналогового напряжения
- •3.2. Задание для самостоятельной работы
- •5. Содержание отчета
3. Порядок выполнения работы
3.1. Разработка мку для измерения и индикации величины аналогового напряжения
3.1.1. Требуется разработать микроконтроллерное устройство (МКУ) на базе PIC18F242, которое измеряет аналоговое напряжение U1 в диапазоне от 0 до +5 В и выводит результат измерения на ЖК-дисплей. Тактовая частота работы МК равна 4 МГц. Принципиальная схема МКУ (при моделировании ее в среде Proteus) приведена на рис. 1.
Рис. 1. Принципиальная схема МКУ для измерения аналогового напряжения
На рис. 1 потенциометр RV1 используется для изменения величины входного напряжения U1 в пределах от 0 до +5 В (напряжение UDD = +5 В). Вольтметр PV1 служит для измерения действительной величины входного напряжения U1, снимаемого с движка потенциометра RV1. На экран дисплея должен выводиться текст в виде двух строк: в 1-й строке – величина напряжения U1 в милливольтах, во 2-й строке – величина напряжения U1 в вольтах, например:
U1 = 2500 mV
U1 = 2,50 V
Текст программы работы МКУ на языке Си имеет вид:
/*******************************************
adc.c – программа измерения напряжения и вывода результата на ЖКД
****************************************************/
#include<p18f242.h>
#include<stdio.h> // заголовочный файл для библиотеки функций вывода
#include<xlcd.h> // заголовочный файл для библиотеки функций ЖКД
#include<delays.h> // заголовочный файл для библиотеки функций задержек
#include<adc.h> // заголовочный файл для библиотеки функций АЦП
#pragma config WDT=OFF, OSC=HS // установка битов конфигурации МК
void init(void); // прототип функции инициализации
char line[17]; // объявление строчной переменной для вывода на ЖКД
unsigned int ad_res; // объявление переменной результата АЦ-преобразования
void main(void)
{
init( ); // вызов функции инициализации
// бесконечный цикл АЦ – преобразования и вывода на ЖКД
while(1)
{
SetChanADC(ADC_CH0); // выбор канала 0
Delay10TCYx(2); // задержка на 20 мкс (при FOSC = 4 МГц)
ConvertADC( ); // запуск АЦП
while( BusyADC( )); // ожидание окончания преобразования АЦП
ad_res = ReadADC( ); // чтение кода АЦП
ad_res = (ad_res * 5000.) / 1023. ; // преобразование кода АЦП
// в милливольты
sprintf(line, “U1 = %4d mV”, ad_res);
while(BusyXLCD( ));
SetDDRamAddr(0x00);
putsXLCD(line); // вывод результата измерения в 1-ю строку
//ЖКД в милливольтах
sprintf(line, “U1 = %d.%02d V”, ad_res / 1000, (ad_res / 10) % 100);
while(BusyXLCD( ));
SetDDRamAddr(0x40);
putsXLCD(line); // вывод результата измерения во 2-ю строку
//ЖКД в вольтах
}
}
void init(void) // функция инициализации
{
// инициализация МК
PORTA = 0;
TRISA = 0b00000001; // настроить RA0 на ввод, остальные – на вывод
PORTB = 0;
TRISB = 0; // настроить все линии порта В на вывод
// инициализация ЖКД
OpenXLCD(FOUR_BIT & LINES_5X7);
while(BusyXLCD( ));
WriteCmdXLCD(CURSOR_OFF & BLINK_OFF);
// инициализация модуля АЦП
OpenADC(ADC_FOSC_4 & ADC_RIGHT_JUST & ADC_1ANA_0REF,
ADC_CH0 & ADC_INT_OFF);
/* функция задает тактирование АЦП от генератора МК, коэффициент деления частоты FOSC равен 4; правое выравнивание результата АЦ-преобразования; один аналоговый вход AN0, опорные напряжения UREF+ = UDD, UREF- = USS ; выбирается канал 0 (вход AN0); запрещаются прерывания от АЦП. */
}
// функции задержки для работы с ЖКД
void DelayFor18TCY(void) // функция задержки на 18 командных циклов
{
Delay10TCYx(2); // задержка на 20 мкс
}
void DelayPORXLCD(void) // функция задержки на 15 мс
{
Delay1KTCYx(15);
}
void DelayXLCD(void) // функция задержки на 5 мс
{
Delay1KTCYx(5);
}
3.1.2. Проверьте на диске E наличие своей папки для хранения проектов разрабатываемых программ. Полный путь к вашей папке может быть:
E:\Users\MPT\PM-41\Ivanov
Примечание. Буквы в именах директорий (папок) должны быть обязательно латинские. При использовании кириллицы возможна некорректная работа среды MPLAB IDE.
3.1.3. Запустите программу MPLAB IDE с помощью ярлычка на рабочем столе компьютера.
3.1.4. Выберите тип микроконтроллера, который будет использоваться в проекте: PIC18F242.
3.1.5. Далее создайте проект с именем pr15 в новой папке, которую можно назвать proj15. С этой целью выберите пункт меню Project > New. На рабочем столе MPLAB IDE откроется окно New Project. Введите имя создаваемого проекта pr15 в строку Project Name. Затем переведите курсор в строку Project Directory и запишите полный путь к проекту, который будет находиться в новой папке с именем proj15:
e:\Users\MPT\PM-41\Ivanov\proj15
Щелкните по кнопке OK. При этом на экране появится окно с текстом “The directory e:\Users\.....\proj15 does not exist. Would you like to create it?” (Директория e:\Users\....\proj15 не существует. Желаете ее создать?) Щелкните по кнопке OK для подтверждения выбора.
3.1.6. Наберите текст программы adc.c в окне редактора. Ввод текста постарайтесь выполнить в точном соответствии с расположением его в приведенном выше примере.
3.1.7. Теперь необходимо внести исходный файл adc.c и файл сценария линкера 18f242.lkr в созданный проект pr15.
3.1.8. Перед выполнением компиляции программы необходимо проверить установки опций для создания проекта. С этой целью выберите пункт меню Project > Build Options... > Project и в раскрывшемся окне откройте вкладку Directories.
Затем щелкните по стрелке в правой части строки с заголовком Show directories for: . В раскрывшемся списке выберите строку Library Search Path (путь для поиска библиотек) и щелкните по кнопке Suite Defaults (установка по умолчанию). В окне должен появиться путь для поиска библиотек C:\MCC18\lib. Остальные пути поиска будут после этого установлены автоматически, если были правильно выбраны исполняемые файлы, входящие в пакет MCC18.
В заключение щелкните по кнопке OK для сохранения установок и закрытия окна.
3.1.9. После того, как были выполнены все указанные выше пункты по предварительной подготовке проекта, можно приступить к его построению, используя пункт меню Project > Build All . При этом сначала выполняется компиляция исходного файла, а затем компоновка всех файлов, входящих в проект.
В случае успешной компиляции проекта закройте его, выбрав пункт меню Project > Close…. Затем сверните окно MPLAB IDE.
3.1.10. Для проверки работы МКУ запустите программу ISIS.exe пакета Proteus VSM. Для упрощения разработки схемы можно использовать файл проекта с именем hello.dsn из папки проектов proj13. С этой целью выберите пункт меню File > Open Design. В раскрывшемся диалоговом окне найдите папку с именем proj13 и выберите файл hello.dsn.
3.1.11. В схему из файла hello.dsn необходимо добавить потенциометр и вольтметр. Потенциометр можно выбрать из библиотеки компонентов Proteus. С этой целью щелкните мышью по значку с всплывающей надписью Component Mode на панели инструментов, а затем по кнопке P в верхнем левом углу переключателя объектов Object Selector. На экране появится окно Pick Devices библиотеки компонентов. Для выбора потенциометра наберите в окне Keywords слово POT-HG. Это потенциометр с активаторами, т.е. возможностью интерактивного изменения положения движка. В окне результата дважды щелкните по строке POT-HG ACTIVE для занесения компонента в список окна Object Selector. После этого закройте библиотеку нажатием на клавишу Enter.
3.1.12. Теперь разместите потенциометр в окне редактирования согласно рис. 1. Для выбора вольтметра подведите курсор мыши к значку на панели инструментов с всплывающей надписью Virtual Instruments Mode и щелкните левой кнопкой мыши. В окне Object Selector появится список виртуальных приборов (Instruments). Выберите строку DC VOLTMETER (Вольтметр постоянного напряжения) и щелкните левой кнопкой мыши. Затем разместите вольтметр в окне редактирования согласно рис. 1. После этого перейдите в режим Terminals Mode, для чего требуется щелкнуть мышью по иконке с соответствующей надписью на панели инструментов. Выберите из списка клемму GROUND (земля, общий провод), а затем клемму POWER (питание). Выполните соединение элементов между собой согласно принципиальной схеме, приведенной на рис. 1.
После завершения разводки необходимо сохранить новый проект в папке proj15. Для этого выберите пункт меню File > Save Design As… Раскройте папку e:\...\proj15 и сохраните в ней проект под именем adc.dsn.
3.1.13. Теперь можно приступить к проверке работы МКУ. Сначала нужно записать hex-код разработанной программы в память МК. С этой целью наведите курсор мыши на изображение МК и дважды щелкните левой кнопкой. В открывшемся окне редактирования свойств компонента Edit Component щелкните по кнопке в правой части строки Program File. Откроется окно Select File Name с hex-файлами из папки proj15. Выберите файл с именем pr15.hex (это скомпилированный файл исходной программы adc.c, написанной на языке Си), и нажмите кнопку «Открыть». Затем в строке Processor Clock Frequency (тактовая частота процессора) выставьте 4 МГц. Нажмите кнопку ОК для подтверждения выбора параметров. В заключение щелкните по пустому месту схемы для снятия выделения с МК.
Для проверки работы МКУ с помощью кнопки Play (Пуск) запустите проект на выполнение. На экране ЖК-дисплея должен появиться текст с сообщением о величине входного напряжения U1 в милливольтах (1-я строка) и в вольтах (2-я строка). Действительные значения этого напряжения на входе МК показывает вольтметр PV1. Если эти значения совпадают, то все в порядке.
Далее можно проверить работу МКУ при различных значениях напряжения U1, которые можно задавать изменением положения движка потенциометра RV1. С этой целью подведите курсор мыши к активатору потенциометра RV1 со значком «+», и несколько раз щелкните левой кнопкой мыши. Наблюдайте за изменением положения движка потенциометра RV1, величиной напряжения на вольтметре PV1 и данными на экране ЖКД.
Затем подведите курсор мыши к активатору потенциометра RV1 со значком «-«, и также несколько раз щелкните левой кнопкой мыши. Наблюдайте за изменением положения движка потенциометра RV1, величиной напряжения на вольтметре PV1 и данными на экране ЖКД.
В заключение остановите выполнение программы МКУ и закройте окно Proteus.