ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Xdisp LCD(16 2 250K) PA0 PA1 PA2 PA7 PA6 PA5 PA4 nc3 nc2 nc1 nc0
Не закрывая VMLAB вернитесь в компилятор CVAVR. После команды #include <mega16.h> добавьте команду #include <delay.h> // функции организации задержек После команды lcd_putsf("Hello!"); добавьте команды: Delay_ms(200); lcd_clear(); // очистка экрана LCD Delay_ms(200); Lcd_gotoxy(5,1); lcd_putsf("FINISH!");
В последнем цикле программы перед комментарием // Place your code here добавьте команду #asm("wdr") и перекомпилируйте проект. Вернитесь в VMLAB. Сделайте глубокий рестарт и запустите Re-build all... Как теперь выводится информация на табло дисплея? Почему не загорается светофор после запуска непрерывной симуляции? Ниже приведен пример программы, выводящей на LCD-дисплей строку со значением переменной temp = 43.2 C. К сожалению, демоверсия компилятора CVAVR не позволяет использовать в программе команду ввода/вывода sprintf.
#include <mega16.h> #asm .equ __lcd_port=0x1B;PORTA #endasm #include <lcd.h> #include <stdio.h>
unsigned int temp=432; char lcd_buffer[33]; // Буфер в ОЗУ для LCD-дисплея
void main(void){ lcd_init(16); // Подготовка строки для LCD-дисплея в массиве ОЗУ sprintf(lcd_buffer," temp = %u. %u C",temp/10,temp%10); lcd_gotoxy(1,0); lcd_puts(lcd_buffer); //Передача строки в LCD-дисплей while (1);}
5. Проведите исследование работы АЦП. В папке z3 с помощью компилятора создайте файлы проекта задачи 3 на базе программы z3.c, текст которой приведен ниже (он подробно прокомментирован в разделе 4 пособия).
Затем с помощью симулятора запишите файл z3_vm.prj.
Запустив проект на симуляцию, понаблюдайте за светодиодами и осциллографом, изменяя положение движка потенциометра. Какое напряжение соответствует единице младшего разряда АЦП? Раскройте окно Peripherals и понаблюдайте за регистрами АЦП при изменении положения движка потенциометра S1. Сравните показания светодиодов и содержимое регистров ADCH и ADCL. Просмотрите содержимое памяти программ и текст программы на ассемблере. Сколько ячеек занимает программа? По какому адресу расположен вектор прерывания по завершению процесса аналого-цифрового преобразования?
6. Запустите на симуляцию проект, подготовленный в папке C:\CVAVR \ z4 (задача 4). Проект реализован на МК ATmega16. В окне SCOPE (это виртуальный осциллограф) можно увидеть изменения напряжений на ножках МК, указанных в файле проекта - vmlab.prj. Верхняя осциллограмма – это сигнал на ножке TXD (PD1) последовательного порта USART, по которой МК передает данные на COM-порт ПК через интерфейс RS232 – что передает МК мы видим в виртуальном терминале TTY панели Control Panel. Там выводится значение ШИМ (PWM) сигнала, создаваемого на ножке PD5. Сам сигнал виден в окне SCOPE – посмотрите, как он меняется в соответствии с сообщаемыми числовыми значениями. На ножке PD4 формируются импульсы той же частоты с неизменной длительностью. В файле проекта vmlab.prj к ножке PD5 подключен простейший фильтр нижних частот (ФНЧ) из резистора и конденсатора – он преобразует ШИМ-сигнал в постоянное напряжение, которое можно увидеть в окне SCOPE (сигнал DAC). Формат передачи данных в примере – 8N1 (это формат по умолчанию для ПК). В таком формате передача байта начинается со "старт-бита" – это лог. "0" на ножке TXD для USART МК и +5...+15 В для COM-порта ПК. Затем на ножку TXD выводятся все 8 бит передаваемого байта, начиная с нулевого. За время передачи бита приемник должен определить и запомнить этот уровень. Далее идет "стоп-бит" – это лог. "1" на ножке TXD для USART МК и -5...-15 В для COM-порта ПК. Для согласования уровней между МК и ПК включают адаптер MAX232. Подключение внешнего файла stdio.h с помощью директивы #include <stdio.h> позволяет использовать в программе команды ввода/вывода (такие как printf и sprintf). Ниже показан пример вывода на персональный компьютер показания датчика температуры с помощью команды printf: char sign='+'; //датчик дал положительное число printf ("temp = %c%u. %u С",sign,temp/10,temp%10);
temp = +43.2 C
7. Протестируйте работу программы, текст которой приведен ниже. При нажатии кнопки 0 эффект «бегущая тень» на светодиодах, подключенных к линиям порта В МК ATmega16, должен сменить направление. Для выполнения работы создайте папку z5, в которую поместите файлы проекта.
Кнопка 0 включена между выводом PD6 и общим выводом. При подключении кнопки к ножке МК надо соответствующий вывод конфигурировать как вход с подтяжкой (записать 1 в бит PORTD.6). Между выводом и плюсом питания будет подключен внутренний резистор, фиксирующий логическую 1 на выводе при разомкнутой кнопке. Кнопки панели Control Panel имеют фиксацию состояния, выбираемого их нажатием.
// файл z5.c /* При нажатии кнопки 0 световой эффект «бегущая тень» на светодиодах порта В меняет направление*/
#include <mega16.h> #include <delay.h> void main(void){ DDRB=0xFF; // Настройка порта В на вывод PORTD=0x40; // 6 линия порта D - вход с подтяжкой m1: if(PIND.6){ PORTB=1; while (PORTB!=0){ Delay_ms(10); PORTB=PORTB<<1;};} else { PORTB=128; while (PORTB!=0){ Delay_ms(10); PORTB=PORTB>>1;};} goto m1;} ; файл z5_vm.prj .MICRO "ATmega16" .TOOLCHAIN GENERIC" .TARGET "z5.hex" .COFF "z5.cof" .SOURCE "z5__.c" CLOCK 4meg .POWER VDD = 5 VSS = 0 K0 PD6 VSS LATCHED; кнопка 0 панелиControl Panel ; Эмулятор имеет 8 светодиодов - ; подключаем их к выводам порта B
D1 VDD PB0 D2 VDD PB1 D3 VDD PB2 D4 VDD PB3 D5 VDD PB4 D6 VDD PB5 D7 VDD PB6 D8 VDD PB7 Модифицировать программу в соответствии со своим вариантом индивидуального задания и произвести ее отладку:
1. При нажатии кнопки 1 (пятая линия порта А) должна меняться частота мигания светодиодов порта С. 2. В одном положении кнопки 2 (седьмая линия порта А) должен наблюдаться эффект бегущего огонька на светодиодах порта D, в другом положении – светодиоды должны тухнуть. 3. При нажатии кнопки 3 (первая линия порта D) эффект бегущего огонька на светодиодах порта А должен измениться на эффект бегущей тени. 4. В одном положении кнопки 4 (шестая линия порта А) должен наблюдаться эффект бегущего огонька со сменой направления на светодиодах порта В, в другом положении – светодиоды должны тухнуть. 5. При нажатии кнопки 5 (первая линия порта А) эффект бегущего огонька на светодиодах порта C должен измениться на их постоянное горение. 6. При нажатии кнопки 6 (пятая линия порта А) должна меняться частота мигания светодиодов порта D (эффект реализовать за счет смены горящих тетрад порта). 7. Эффект «елочка» (последовательное заполнение огнями линий порта С и их общее погасание) при нажатии кнопки 7 (первая линия порта D) должен измениться на эффект бегущей тени. 8. Эффект «елочка» (последовательное заполнение огнями линий порта D и их общее погасание) при нажатии кнопки 8 (вторая линия порта В) должен измениться на эффект бегущего огонька. Контрольные вопросы · Назовите нагрузочную способность линий портов AVR. · Какими ассемблерными вставками можно разрешать и запрещать глобально прерывания в программе для AVR на языке Си? · Запишите результат выполнения арифметических операций: 245/37 и 245%37. · К линиям порта В через дешифраторы подключены два цифровых семисегментных индикатора. Записать команду на языке Си, выводящую на индикаторы число (от 00 до 99), соответствующее значению переменной period. · Дать комментарий к команде PORTA=~(per++); · Объявите переменную mnogo, если она может принимать значения от нуля до миллиона. · Прокомментировать результат выполнения команды ADCSRA|=0x40;
Не нашли, что искали? Воспользуйтесь поиском:
|