Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабРабота_4.doc
Скачиваний:
24
Добавлен:
04.05.2019
Размер:
191.49 Кб
Скачать

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]