Работаем:
Результаты
будут выводится в окно "терминал"
контрольной панели
(Control Panel) эмулятора VMLAB -
старший байт (HB), затем младший (LB).
Окно "терминал"
симулирует прием данных через COM порта ПК.
Результат каждого измерения будет
выводиться в новой строке.
Сохраните
файлы задачи 01 из папки work - затем
очистите ее.
1) Запускаем
компилятор ICC

2) нажмите
иконку запуска мастера "Application Builder"
Это
очень удобный инструмент!
Он
позволяет создать Си код для
конфигурирования МК
под вашу задачу даже не зная
досконально ДШ и МК.
|
Прочитайте
Help ICC
раздел по "Application Builder" |
3) в секции CPU установите:
-
используемый МК -> М16 (значит ATmega16)
- частоту
кварца 3,6864 МГц
Такие
"не круглые" частоты используют для
точного задания стандартных скоростей COM
портов ПК.
В разделе USART ДШ есть таблица где
их можно найти.
- комментарий
можете добавить по своему усмотрению.
| |
|
|
| |
Обратите
внимание! Здесь
же вы можете
-
включить прерывания по завершению
записи в EEPROM и по внешнему сигналу -
по фронту, по спаду или по уровню.
- включить сторожевой таймер - WatchDog
Timer - это устройство
перезапускает программу МК при его
"зависании". |
|
| |
|
|
4) в секции Potrs
(порты МК) настроим направление работы (вход
или выход) отдельных ножек МК.
По умолчанию
- т.е. после включения питания МК или после
сброса по уровню "0" на "Reset" -
все ножки МК являются входами с высоким
сопротивлением (порядка 10 мегаОм и более).
Поэтому в
мастере, в поле "Direction" (направление) изначально
находятся буквы "I" от слова "Input"
= Вход. Это соответствует нулям в
соответствующих битах регистра DDRx для порта X. Запись в
соответствующий бит числа "1" (установка
бита) делают ножку МК Выходом. И на этой
ножке будет уровень определяемый
значением бита в регистре PORTx - эти
значения отражаются в поле Value.
| |
|
|
| |
Важно
!
В
поле бит_0 стоит стрелочка вверх - так
обозначается подтяжка входа (pull-up)
виртуальным резистором около 40 кОм к
+ питания МК.
Это
происходит если ножка назначена
входом в регистре DDRx
и соответствующий бит в регистре PORTx
установлен
(значит равен "1").
См.
Устройство МК
AVR |
|
| |
|
|
Значения в
клеточках меняйте кликая мышкой.
На рисунке
выше сделана такая настройка ножек МК:
PA0 - вход с
подтяжкой (pull-up)
PA1 - вЫход и
"0" на ножке.
PA2 - вЫход и
"1" на ножке.
| |
|
|
| |
Важно
!
Ножки
станут выходами и на них может
появиться подтяжка или логические
единицы лишь после выполнения
соответствующих строк программы !
т.е.
не мгновенно после включения МК.
По
ходу программы вы можете менять
все эти настройки так как вам нужно. |
|
| |
|
|
Вы
можете присвоить свои названия ножкам МК
- кликните правой кнопкой мыши на бит_2 и на
меню кликните левой кнопкой:
В
открывшимся окне введите название -
желательно связанное
с функциональным назначением ножки.
ПОЧТОЙ по России
!
Программаторы
USB AVR PIC ARM 8051,
прошивание микроконтроллеров AVR PIC LPC ARM 8051 на заказ,
изготовление "любительских" печатных плат по
ЛУТ
технологии,
сборка
электронных наборов - Мастер
Кит и других,
закупка для вас радио деталей
электронных компонентов в "Тэрраэлектроника"
+ добавлю резисторы и конденсаторы + отправка почтой,
изготовление
электронных устройств для вас на заказ
не дорого по вашим схемам
или
разработаю сам, другие
услуги для радио
электронщиков любителей,
для
мастеровых людей и хоббийщиков
RC
моделистов и
для строящих
Роботов,
компоненты для самодельных станков с ЧПУ.
На сайте - "МК
ПОЧТОЙ народ РУ"
| |
Программатор для AVR на USB

Собран и проверен -
стоит всего 500 рублей
в
Москве, а по России пересылка почтой всего
100 рублей.
В подарок к программатору вы бесплатно получаете
дополнительный микроконтроллер
ATmega8 -16PU и уникальный
DVD с материалами по электронике и
библиотекой КНИГ !
Микроконтроллер ATmega8
прошитый для этого программатора
можно приобрести отдельно за 120 рублей
+
схема и и рисунок платы.
Программатор позволяет питать ваше
устройство от USB.
Скачать документацию на программатор.
Обращайтесь к
Семенову
Михаилу. |
|
| |
Электронные компоненты
ПОЧТОЙ
из
"Тэрраэлектроника"
- мои услуги - это 350
рублей для заказов до 1500 руб. оплаты в Тэрру, 450
руб. для заказов на сумму 1500-3000 рублей и
650 рублей для заказов
стоимостью более 3000 рублей. После получения денег
я выкупаю ваш заказ в "Тэрраэлектроника"
или получаю если его оплатили вы
сами и отправляю его вам почтой.
Укомплектую резисторами и конденсаторами. |
|
| |
Программатор
отладчик
для всех микроконтроллеров PIC
на USB -
PICkit2
Полный аналог собран
мной и проверен в работе
- только корпус прямоугольный
без закруглений а разъемы такие же, кнопка
КРАСНАЯ,
все функции фирменного - всего
899 руб.
Микроконтроллер PIC18F2550 прошитый для
самостоятельного изготовления
программатора
PICkit2
можно приобрести отдельно за 239
рублей
+
схема и и рисунок платы.
Прочитайте подробно о
PICkit2
и о его возможностях.
Средняя цена фирменного - 1550
рублей ! |
|
Программаторы изготовлены качественно, надежно,
высылаются полностью собранные, протестированные и
готовые к
работе. К программаторам получаемым по почте приложен
бесплатно
DVD
диск с драйверами для
программаторов, ПО для разработки программ для
AVR PIC ARM 8051
и огромным количеством документации от производителей МК и
множеством книг по микроконтроллерам и электронике на русском языке,
учебными материалами для начинающих.
Вы можете приобрести уникальный
DVD
всего за
199
рублей с пересылкой по России.
Скачайте
содержание этого DVD
и ознакомьтесь.
| |
Прошивка, программирование
микроконтроллеров AVR PIC ARM
8051 LPC
на заказ
вашими прошивками. Вы
присылаете прошивку - я проверяю,
что файл читается программатором и сообщаю вам номер
счета, вы переводите деньги, я покупаю нужный
МК, прошиваю и отправляю вам.
Цена услуги со стоимостью услуги по покупке МК
25 рублей
при прошивке 21 микроконтроллера и более
35
рублей за 11-20 МК
45 рублей за 5-10 МК
65 рублей за 2-4 МК
80 рублей за 1 МК
Для популярных AVR
ATmega8
ATmega16 ATmega169
ATtiny2313 AT90s2313
ATtiny13 и популярных
PIC16F84 PIC18F452 PIC18F2550
PIC18c508 PIC16F628 PIC24FJ64GA002 dsPIC30F2010
dsPIC30F2020 dsPIC30F2012
стоимость прошивки одного МК
- 60 рублей.
|
|
Цены
могут уменьшаться при комбинации ЛЮБЫХ услуг
например
получение различных компонентов в
"Тэрраэлектроника" + прошивка AVR PIC из
этой закупки естественно будет стоить дешевле.
Есть прошивки ко многим конструкторам наборам МастерКит
и других производителей - стоимость таких прошивок подлежит
отдельной оплате. Спрашивайте какие прошивки вам нужны.
6) Я могу купить вам наборы электронные МастерКит и других
производителей - собрать и настроить и отправить вам, цена услуги от
500 рублей.
7) Изготовление печатных плат по лазерно утюжной технологии - ЛУТ -
по вашим рисункам для печати на лазерном принтере.
8) Изготовить, спаять нужную вам схему, электронное устройство.
9) Разработать нужное вам устройство по КОНКРЕТНОМУ техническому
заданию.
10) Разработать новую прошивку для любых электронных устройств или
наборов МастерКит и аналогичных.
|
Я планирую
использовать PA2 для выдачи
диагностического
сигнала поэтому назову:
И клик "Ок"
5) в секции Timer0
настроим таймер:
- поставим галочку "Использовать таймер"
- частоту
переполнения - 50 Гц (50 раз в секунду)
- выбираем
коэф. пред-делителя частоты кварца на 1024
Теперь
таймер_0
будет "тикать" - т.е. добавлять к числу
в регистре
TCNT0 единицу
каждые 1024 периода колебаний кварца.
- поставим
галочку "по переполнению прерывание"
| |
|
|
| |
Внимание
!
Мастер вычислил
значение в регистре
TCNT0
с которого должен считать Таймер_0
для переполнения 50 раз в секунду - это
0xB8
( или
184
в "нормальном" == десятичном виде.)
Давайте
посчитаем, проверим вручную:
3686400
Гц / 1024 / (256-184) = 50 Гц
ровненько !
(256-184)
означает что таймер будет считать от
184 до 255 и после следующего добавления
1 к 255 в регистре возникнет 0 и
произойдет переполнение таймера (Таймер_0
8-ми битный)
и
возникнет соответствующее
прерывание,
если конечно оно разрешено и
разрешены прерывания глобально - т.е.
бит I
в
регистре
SREG установлен.
|
|
| |
|
|
6) в секции UART
настроим USART МК на передачу данных в
обычном формате COM порта ПК 8N1
и выберем довольно высокую скорость
- 115200 бод в сек.
вот так:
7) под
кнопочкой Options выбираем и кликаем:
добавить
функцию
main() в
текст программы.
8) Нажимаем
кнопку "ОК" - сгенерированный текст
программы на языке Си появился в рабочем
окне компилятора.
Мы
получили программу на языке Си
, конфигурирующую МК под нашу задачу,
даже не глядя в ДШ - великолепно!
Эта программа вызывает
обработчик прерывания по переполнению Таймер_0 каждые 20 мС.
9)
Создайте рабочую папку для проекта: z3icc_vmlab
и
сохраните в ней полученный текст
программы в виде файла icc.c
Смотрите - текст программы стал разноцветным.
Компилятор понял по расширению .c
что это именно программа на Си.
10) Теперь
нужно создать проект:
Сохраните его например под именем icc702.prj
11) Включим в созданный
проект файл .c исходным текстом
программы:
затем:
добавить
файл:
12) Настроим
проект:
правда из
настроек всего то выбрать нужный тип МК:
Так как
больше изменений не требуется - жмем "ОК"
|
|
-
записывайте возникающие вопросы !
и лучше на бумагу -
моторная память !
-
найдите в DataSheet
(ДШ) регистры и устройства МК
о которых шла речь,
прочитайте о них подробней.
- если
вопросы остались перечитайте снова !
-
если вопросы не разрешены, ищите
ответ:
1) в
help и документации компилятора,
симулятора, других используемых
программ!
2)
поиском Windows в папках и help
компилятора и симулятора.
3)
поиском Windows в папке где сохранен у
вас курс.
4) в
моем не структурированном AVRFAQ
- это сборник ответов на часто
задаваемые мне по курсу вопросы и
советы по применению МК от знающих
людей.
Если
все же не найдете ответа -
задавайте вопрос в
конференцию
Вам
ответят в течении дня, если вы
правильно, на нормальном русском
языке, сформулируете ваш вопрос и
напишите его в заголовке сообщения.
|
|
УРА !
у нас все
готово для компиляции
нашей программы!
13) Кликаем по
пиктограмме "построить проект":
Компилятор
подумает чуток и выдаст
сообщение о результате компиляции:
C:\ICCV7AVR\BIN\imakew -f icc702.mak
iccavr -c -e -D__ICC_VERSION="7.02" -DATMEGA -DATMega16 -l -g
-Mavr_enhanced C:\VMLAB\z3icc_vmlab\icc.c
iccavr -o icc702 -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f
-bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @icc702.lk
-lcatmega
Device 1% full.
Done.
|
Настроим
компилятор ICC на
отображение русских букв.
Так будет удобней писать комментарии к
программе.
Откройте диалог
настройки "красивости" интерфейса
компилятора:
Вот он:
Выбираем
русский язык:
и "ОК"
Давайте
посмотрим повнимательней
текст программы созданной мастером.
#include
<iom16v.h>
/*
строка
добавляет файл с именами регистров и
битов МК ATmega16 по ДШ и их реальными адресами
в МК */
#include
<macros.h>
/*
строка добавляет файл с очень полезными
определениями битовых операций (см.
задачу 1) и функциями для анализа
использования стека если программа
совершает вложенные прерывания -
посмотрите внимательно текст этого файла
в папке iccv7avr\include
*/
Ага... а
после строчек "#include"
идут сразу функции, а не их прототипы. Значит компилятор их не
требует - учтем на будущее.
Я считаю
что лучше перечислять прототипы функций -
Программа становится более читаемой.
Вот это интересно:
TCCR0 =
0x00; //stop timer
TCNT0 = 0xB8; //записать
в регистр таймера число 184
TCCR0 = 0x05; //start timer - clock/1024
О !
теперь мы знаем на будущее как
остановить и как запустить
таймер_0, как установить с какого числа
начинать ему счет...
| |
|
|
| |
Значит
!
Чтоб
остановить Timer_0 нужно обнулить
биты 2, 1 и 0
регистра TCCR0.
а
чтоб запустить Timer_0
нужно в биты 2, 1 и 0 регистра
TCCR0 вписать необходимый коэф.
деления - его значения
берем из таблицы в ДШ на МК.
подробней по регистру TCNT0
см. ДШ. |
|
| |
|
|
Дополним программу.
Итак, если
мастер начального кода нас не подвел то
после запуска МК с залитой в него
программой будут происходить
переполнения таймера_0 и будет вызываться соответствующая
функция обработчик.
Давайте
дополним эту функцию изменением уровня на
ножке PA2 МК - это позволит узнать о вызове
функции обработки прерывания и измерить
реальный период прерывания в VMLAB.
И добавим
вывод некоторых символов на ПК.
добавляемый
текст красным :
| |
|
|
| |
#pragma
interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
TCNT0 = 0xB8; //reload counter value
//загрузить
число с которого вести новый отсчет
PORTA ^= BIT(TEST_OUT);
/* изменить уровень на ножке PA2 */
putchar('R');
putchar('x');
/*
вывести через USART на ПК символы
"R" и затем "x" */
} |
|
| |
|
|
Как меняет уровень на ножке строчка
PORTA ^= BIT(TEST_OUT);
Вы
должны знать из Си для МК и задачи 01
курса.
Если
не понятно - ПЕРЕЧИТАЙТЕ !
Внимание ! Не всегда
удается получить нужный интервал переполнения таймера точно.
Боле "тонко" можно
подогнать время между прерываниями добавив в самом начале функции
обработчика прерывания по переполнению таймера_0 нужное количество
ассемблерных инструкций NOP.
NOP делает паузу в 1 период тактирующего микроконтроллер сигнала .
В рассматриваемой
программе это могло бы выглядеть так:
| |
|
|
| |
#pragma
interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{asm("nop");
asm("nop");
asm("nop");
asm("nop");
TCNT0 = 0xB8; //reload counter value
//загрузить
число с которого вести новый отсчет
|
|
| |
|
|