Вводная лекция «программирование микропроцессоров, микроконтроллеров, микрокомпьютеров »

 

Адрес документа:

http://90.189.213.191:4422/temp/gr_mi38_37_mp1_sh/gr_mi38_37_mp1_sh.doc

 

программирование микроконтроллеров avr  программирование микроконтроллеров для начинающих   

 

 

 

Прежде всего, необходимо обрисовать ситуацию с микроконтроллерами. Дело в том, что они выпускаются не одной фирмой, а сразу несколькими, поэтому существует довольно много различных микроконтроллеров, которые имеют разные параметры, разные особенности при использовании и различные возможности. Различаются они по скорости быстродействия, дополнительным интерфейсам и количеству выводов.

Самыми популярными на всем пространстве бывшего СССР являются представители РІС и AVR. Программирование микроконтроллеров AVR и РІС не составляет труда, что и обеспечило их популярность.

Программирование микроконтроллеров осуществляется, как правило, с помощью специальных приспособлений, которые называются программаторами. Программаторы могут быть или покупными или самодельными.

 

 

 

 Но при прошивке микроконтроллера с помощью самодельного программатора шанс того, что он превратится в «кирпич», довольно высокий. Есть ещё один вариант, который можно рассмотреть на примере платы «Ардуино». Плата работает на МК фирмы Atmel, и в ней осуществляется программирование микроконтроллеров AVR. В плате уже есть заранее прошитый порт USB, которые позволяют безопасно прошить используемый микроконтроллер, не давая пользователю доступа к данным, что могут этот самый МК вывести из строя.

 

При выборе микроконтроллеров следует обратить внимание на некоторые аппаратные различия даже не разных компаний, а и в одном модельном ряду. Для начала следует обратить внимание на возможность перезаписи информации на микроконтроллер. Эта функция позволит вам долго экспериментировать с одним МК.

языки программирования микроконтроллеров

. Также обратите внимание на количество выводов с их предназначением. Не обделяйте вниманием и частоту работы кристалла, на котором работает схема: от неё зависит количество операций в секунду, которые может выполнить микроконтроллер.

 

Микроконтроллеры AVR являются разработкой и продуктом фирмы Atmel. Отличие данных микроконтроллеров от аналогичных, в довольно удачной архитектуре ядра процессора и широкому набору периферийных модулей, что облегчает процесс программирования устройства. Эти микросхемы производятся по технологии 0,35 мкм, и работают с тактовой частотой от - 16 МГц, обеспечивая производительность до 16 MIPS.

     В основе микроконтроллеров семейства AVR лежит 8-ми битное центральное процессорное устройство, построенное по принципу RISK-архитектуры. Базой данного блока является арифметико-логическое устройство - АЛУ. По тактовому сигналу из памяти программ в соответствии с содержимым счетчика команд, выбирается нужная команда и выполняется вычисление. При выборе команды из памяти программ происходит выполнение предыдущей выбранной команды, это позволяет получить быстродействие на уровне 1 MIPS на 1 МГц. АЛУ подключено к 32-м регистрам общего назначения. РОН находятся в начале адресного пространства оперативной памяти, но не являются ее частью физически. Поэтому к ним идёт обращение и как к регистрам, и как к памяти.

 

Микроконтроллеры AVR

 

 

 

 Фирма ATMEL выпускает такие семейства 8-битных микроконтроллеров: tiny и mega. Микроконтроллеры tiny имеют Флэш-ПЗУ по 1 и 2 кбайт в корпусе на 8 –20 выводов, а микроконтроллеры mega соответственно: Флэш-ПЗУ 8 –128 кбайт в корпусе на 28 –64 вывода

.       Технические характеристики микроконтроллеров AVR:

  - частота до 16 МГц с временем выполнения команды 62,5 нс;

  - встроенный програмируемый RC-генератор, частота 1, 2, 4, 8 МГц; 

 - Флэш-ПЗУ программ,программируемое в системе, до 128 кбайт; 

 - двухпроводный интерфейс TWI, совместимый с интерфейсом I2C;

  - многоканальный 8-, 9-, 10-, 16-битный ШИМ-модулятор; 

 - 10-битный АЦП со временем преобразования 70 мкс и дифференциальными входами;

  - программируемый коэффициент усиления — 1; 10 или 200; 

 - встроенный источник опорного напряжения; 

 - аналоговый компаратор;  

 - настраиваемая схема задержки запуска после подачи питания; 

 - схема слежения за напряжением питания; 

 - JTAG-интерфейс для подключения эмулятора; 

 - электрически перепрограммируемое ПЗУ данных до 4 кбайт; 

 - внутреннее ОЗУ со временем доступа 1 такт, до 4 кбайт; 

 - мощный набор команд (более 120 инструкций); 

 - 6 аппаратных команд умножения (для семейства mega); 

 - развитая система адресации, оптимизированная для работы с С-компиляторами; 

 - 32 регистра общего назначения (аккумулятора); 

- синхронный (USART) или асинхронный (UART) последовательные порты; 

 - синхронный последовательный порт (SPI);

 - потребление тока 0.1 мА в активном режиме.

     Типы микроконтроллеров AVR: ТИП память программ,КБайт EEPROM данных,байт ОЗУ данных,байт Такт.частота,МГц

ATTiny11   1 - - 6  6 

ATTiny11L   1 - - 2  6 

ATTiny12   1 64 - 8  6 

ATTiny12L   1 64 - 4  6 

ATTiny12V   1 64 - 1,2  6 

ATTiny13   1 64 64 20  6 

ATTiny15L   1 64 - 1,2  6 

ATTiny28L   2 - - 4  19 

ATTiny28V   2 - - 1,2  19 

AT90S2313   4 256 512 10  15 

ATMega16   16 512 1024 16  32 

ATMega48   4 256 512 20  40                                                               

Микроконтроллеры AVR

 

 

 

    Так-же микроконтроллеры AVR семейства Mega имеют возможность самостоятельного изменения содержимого своей памяти программ. Это позволяет создавать на их основе гибкие системы, алгоритм работы которых будет изменяться самим микроконтроллером в зависимости от внутренних условий и внешних событий. Микроконтроллеры AVR имеют встроенный  8-канальный 10-битный аналого-цифровой преобразователь. Режим энергосбережения позволяет отключить неиспользуемые модули и в результате снизить энергопотребление.  

    Микроконтроллеры AVR могут работать при напряжениях питания 2 - 6 Вольт. Ток потребления в активном режиме составляет около 1 мА для работы на частоте 500 кГц, 6 мА для 5 МГц и до 10 мА на частоте 12 МГц. Есть возможность переводить их программным путем в такие режимы пониженного энергопотребления:

1.Экономичный режим. Продолжает работать только генератор таймера обеспечивая сохранность временной базы, остальные функции отключены.

2.Режим холостого хода. Прекращает работу только процессор и фиксируется содержимое памяти данных, внутренний генератор синхросигналов, таймеры, система прерываний и сторожевой таймер продолжают работать, при этом ток потребления в районе 2,5 мА на частоте 12 МГц.

3.Стоповый режим. Сохраняется содержимое регистрового файла, останавливается внутренний генератор синхросигналов, и останавливаются все функции, до поступления сигнала внешнего прерывания или аппаратного сброса, ток потребления составляет 80 мкА.
 

Пример схемы на микроконтроллере  -- ЛЮКСМЕТР

Схема люксметра

 

 

 

 

 

Конструкция люксометра

   ЛЮКСМЕТР САМОДЕЛЬНЫЙ - детали

Прибор для измерения освещенности обычно используется для измерения уровня светового потока, падающего на поверхность. Световой поток - видимый компонент, который определяется человеческим глазом в видимом спектре. Это означает, что прибор хорошо подходит для уровня освещенности, подходящему для глаза. Но есть разница между спектрами реакции обычных кремниевых фотодиодов и человеческим глазом, поэтому они не могут быть использованы для качественного люксметра.

Фотодиод желательно использовать такой, который пропорционален входной мощности света. В этой схеме, выходной ток преобразуется в напряжение с I-V преобразователя, он обрабатывается контроллером Attiny-26 и значение показыватся LED индикаторами. Элемент U1 в этой схеме выступает в качестве вольт-амперного преобразователя и его коэффициент пересчета становится 50 мв/мкА по обратной связи R5. Конденсатор С5 вводит коррекцию коэффициента усиления, он нейтрализует собственную ёмкость фотодиода.

 

Микроконтроллеры PIC

 

микроконтроллер             

1.2. Таблица популярных представителей PIC16

 

Кол-во выводов/портов

ПП, слов

ОЗУ, Кбайт

FLASH ПД, Байт

Таймеры

Встроенные периферийные модули

Розн.цена, $

PIC12F629

8/6

64

128

TMR0, TMR1

аналоговый компаратор

1,4

PIC12F675

8/6

64

128

TMR0, TMR1

аналоговый компаратор, 10-разр. АЦП

1,8

PIC12F683

8/6

128

256

TMR0, TMR1, TMR2

аналоговый компаратор, 10-разр. АЦП, модуль захвата/сравнения/ШИМ

2,3

PIC12F630

14/12

64

128

TMR0, TMR1

аналоговый компаратор

1,8

PIC16F676

14/12

64

128

TMR0, TMR1

аналоговый компаратор, 10-разр. АЦП

1,9

PIC16F684

14/12

128

256

TMR0, TMR1, TMR2

аналоговый компаратор, 10-разр. АЦП, модуль захвата/сравнения/ШИМ

2,5

PIC16F688

14/12

256

256

TMR0, TMR1, TMR2

аналоговый компаратор, 10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART

2,8

PIC16F628A

18/16

224

128

TMR0, TMR1, TMR2

аналоговый компаратор, 10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART/SC

3,5

PIC16F648A

18/16

256

256

TMR0, TMR1, TMR2

аналоговый компаратор, 10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART/SC

3,9

PIC16F84A

18/13

68

64

TMR0

популярный, устарел

4,6

PIC16F818

18/16

128

128

TMR0, TMR1, TMR2

10-разр. АЦП, SPI(master/slave)/I2C(slave)модуль захвата/сравнения/ШИМ

3,0

PIC16F819

18/16

256

256

TMR0, TMR1, TMR2

10-разр. АЦП, SPI(master/slave)/I2C(slave)модуль захвата/сравнения/ШИМ

3,3

PIC16F870

28/22

128

64

TMR0, TMR1, TMR2

10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART

4,0

PIC16F871

40/33

128

64

TMR0, TMR1, TMR2

10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART, PSP (parallel slave port)

5,0

PIC16F872

28/22

128

64

TMR0, TMR1, TMR2

10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART, MSSP SPI(master/slave)/I2C(master/slave)

5,5

PIC16F873

28/22

192

128

TMR0, TMR1, TMR2

10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART, MSSP SPI(master/slave)/I2C(master/slave)

6,5

PIC16F874

40/33

192

128

TMR0, TMR1, TMR2

10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART, MSSP SPI(master/slave)/I2C(master/slave), PSP(parallel slave port)

7,5

PIC16F876

28/22

368

256

TMR0, TMR1, TMR2

10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART, MSSP SPI(master/slave)/I2C(master/slave)

7,5

PIC16F877

40/33

368

256

TMR0, TMR1, TMR2

10-разр. АЦП, модуль захвата/сравнения/ШИМ, USART, MSSP SPI(master/slave)/I2C(master/slave), PSP (parallel slave port)

7,8

Таблица 1.1. Иллюстрация сочетаний свойств различных типов микроконтроллеров PIC16. Все МК имеют

·         Диапазон тактовой частоты 0...20МГц.

·         Одинаковое ядро.

·         35 простых инструкций.

·         Режим энергосбережения SLEEP.

·         POR (Power On Reset) - сброс по подаче питания (при достижении Vddmin).

·         OST (Oscillator Start-up Timer) - удерживает МК в состоянии сброса на время запуска и стабилизации тактового кварцевого или кристаллического генератора.

·         BOD или BOR (Brown-out Detect или Brown-out Reset) - детектор снижения Vdd с настраиваемым порогом.

·         WDT (Watchdog Timer) - сторожевой таймер с настраиваемым периодом.

·         Микроконтроллеры PIC16F873…877 могут программировать свою память программ в процессе работы.

·         Все 8-ми и 14-ти выводные МК, кроме режимов генератора, типичных для всех PIC16, имеют встроенный стабильный (1%) тактовый RC генератор.

 

Языки программирования микроконтроллеров

В качестве языков программирования микроконтроллеров используется два: С/С++ и ассемблер. Каждый из них имеет свои преимущества и недостатки. Так, если говорить про ассемблер, то он даёт возможность сделать всё очень тонко и качественно, особенно важно это, когда не хватает оперативной памяти или оперативных мощностей (что, впрочем, довольно редко происходит). Но его изучение и написание программ на нём требует довольно много усилий, пунктуальности и времени. Поэтому для разработок на основе микроконтроллеров часто используют языки программирования С и С++. Они являются более понятными, по своему виду и структуре они близки человеческой речи, хотя и не представляют из себя её в полноценном понимании. Также они имеют очень хорошо проработанный функционал, который может запросто взаимодействовать с аппаратной частью, представляя, что это всего лишь элемент программы. При всех своих явных преимуществах на С и С++ создают более объемные программы, нежели на ассемблере.

Также в отдельных случаях, когда критичным является используемое оперативное пространство, можно соединить эти языки. Почти все среды разработки для С и С++ имеют возможность установки в программу ассемблерных вставок. Поэтому в случае возникновения проблемы на критическом участке можно написать ассемблерную вставку и интегрировать её в прошивку для микроконтроллера, а саму прошивку, точнее, большую её часть, написать на С или С++. Программирование микроконтроллеров на СИ является более лёгким, поэтому многие выбирают именно эти языки. Но те, кто не боится трудностей и хочет понять особенность работы аппаратуры, могут попробовать свои силы и с ассемблером.

Пример программы на Ассемблере:

;======================== «ШАПКА» ПРОГРАММЫ ======================
;=========================================
; Имя файла: main.asm
; Дата: 28.05.07
; Автор: Ирков Алексей Николаевич
; E-mail: nsuirkov@ngs.ru
;==================================================================
; Используется микроконтроллер PIC16F877. Частота кварца 20 МГц.
;==================================================================
; Описание программы
; Данная программа заставляет все светодиоды загореться
;==================================================================
 
 
;================================================
; Настройка и конфигурация микроконтроллера
;================================================
       LIST  p=16F877
       __CONFIG H'3F72'
 
;================================================
; Инициализация регистров специального назначения
;================================================
 
INTCON              equ 0x0B
STATUS              equ 0x03
PORTB               equ 0x06
TRISB               equ 0x86
 
;================================================
; Инициализация констант
;================================================
 
RP0                 equ 0x05
 
;================================================
; Инициализация переменных в памяти данных
;================================================
 
;================================================
; Начало программы
;================================================
       ORG 0x00
       goto Start

 

 В таблице ниже пример команды

 

 

Пример программирования на СИ

 

#include <pic.h> 
__CONFIG(0x03F72);
 
int i=0;
void main(void)
{
       T0IE=0;
       GIE=0; 
       TRISB=0;
       PORTB=0;
 
       while(1==1)
       {
              PORTB++;
              for(i=0; i<10000; i++)
              {
                    i++;
                    i--;
              }
       }      
}

 

Визуальные языки

Пример программы FlowCode

В отличие от классических языков программирования, визуальные языки позволяют разрабатывать программы в виде изображений. Среди таких языков можно выделить FlowCODE или Scratah. Достоинством визуальных языков является хорошо воспринимаемая структура алгоритма. Это позволяет просто разобраться в его функционировании любому человеку, знающему основные символы языка. Перевод структурных схем в команды микроконтроллера, как правило, выполняется не сразу. Вначале алгоритм транслируется в команды ассемблера или какого-либо языка высокого уровня. Только затем, все преобразуется в машинный код.

Такая схема, несмотря на свою сложность, позволяет использовать наиболее удобные компиляторы разных разработчиков.

Еще одним достоинством визуального программирования становится простота изучения, поэтому подобные языки часто используются для обучения детей. Недостатком визуального подхода является громоздкость исходных материалов. Тем не менее, подобные языки программирования нашли очень большое распространение для решения специальных задач.

Промышленные контроллеры в основном программируются на визуальных языках. Например Оwen

 

Пример  Включатель света с автоматическим отключением

 

В подсобных помещениях и коридорах электрический свет нужен ограниченное время. После включения освещения, его нередко забывают отключить, что приводит к излишнему расходу электроэнергии.

Задача обеспечить включение света на заданный интервал времени, например, у входной двери в квартиру, по следующему алгоритму:

1)   перед входной дверью установлен датчик освещения (F1) и кнопка  включения света ТАЙМЕР (SB1);

2)  при кратковременном нажатии на кнопку ТАЙМЕР, при недостаточном естественном освещении, светильник должен включаться на интервал времени 1 мин   – этого времени достаточно, чтобы найти замочную скважину и ключом открыть дверь;

3) при удерживании нажатой кнопки ТАЙМЕР в течение 2 с светильник должен включаться на интервал времени 3 мин независимо от внешнего освещения – этот режим может потребоваться при уборке коридора;

4) предусмотреть возможность управления работой светильника по командам от внешних управляющих устройств или при помощи  включателя СВЕТ (SA1), независимо от внешнего освещения. Этот режим удобен во время приема гостей или для дальнейшей автоматизации квартиры в рамках программы «умный дом»;

5) предусмотреть возможность включения светильника только в вечернее и ночное время.

Схема

Включатель света с автоматическим отключением, image002 300x215

 

На этапе планирования составляется схема реализации поставленной задачи на основе логических элементов и функциональных блоков, доступных в программе (см. Приложения А и Б).

Схема может иметь вид, приведенный на рисунке 2.

Выход Q2 схемы используется как контрольный для проверки функционирования логической части (элементов D1–D6). Выход Q1 является основным и может включиться только в заданные таймером D7 интервалы времени, при соблюдении логических условий, обеспечиваемых элементами    D1–D6.

Включатель света с автоматическим отключением, image004 300x193     Включатель света с автоматическим отключением, image006 286x300

 

Вывод по лекции и  программированию микроконтроллеров. Что должен уяснить обучаемый, рассказать и показать:

 

 

Литература и источники:

 

Подготовлено на 11-2-2016