На главную страницу | Новости  |  Ссылки | Контакты

Spyphy Farnsworth
Квантовая реальность. Кибернетика. Искусственный интеллект


Микроконтроллеры AVR фирмы ATMEL.


Микроконтроллеры AVR фирмы ATMEL являются базовой частью плат Arduino. Например, в ARDUINO UNO R3 (orig) используется MK Atmega328P, и в случае выхода его из строя возможна замена.

Однако микроконтроллеры AVR могут также использоваться и для построения собственных схем.

AVR ATMEGA8 -- один из наиболее популярных микроконтроллеров семейсва AVR, поскольку обладает наиболее привлекательным соотношением возможности/цена. Он обладает большим количеством выводом и портов, что позволяет без особых проблем подключать к нему разную переферию. Купить их можно здесь 5 шт. за $4.99

atmega8

Когда мы пишем программу для Arduino, то можем либо использовать специальный язык Wirgin, либо же писать на чистом C/C++ и напрямую работать с портами микроконтроллера AVR.

--- Здесь краткое введение в микроконтроллеры AVR ---

Архитектура AVR


Общая внутренняя архитектура микроконтроллеров AVR (далее МК AVR) показан на рисунке

avr-arch

Переферийные устройства МК AVR: порты ввода-вывода, а также блок прерывания (UI) и таймер-счетчик.

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

- Port(P) - параллельный порт

- SPI

- UART

- TWSI

Параллельные порты ввода-вывода


В состав порта Px (x=A,B,C,D,E) входят 3 регистра ввода-вывода:

1) DDRx (направление)

2) PORTx (состояние)

3) PINx (не имеет аппаратной реализации)

avr-ports

Для настройки портов нужно задать значения для DDRx и PORTx. Например так:

DDRB = 0x00;  
PORTB = 0x00; 

Состояние разряда DDRX.Y определяет направление передачи бита через вывод порта PX.Y:


DDRx.y = 0; // вход
DDRx.y = 1; // выход

Режимы работы портов:


1) режим входа (DDRX.Y=0)

PORTx.y = 0 – высокоимпендансное состояние (z-состояние) -- по умолчанию.

Cопротивление порта очень велико. Он не оказывает на шину никакого влияния. Но если он висит в воздухе, то напряжение на нем (и значение PIN) будет скакать в зависимости от внешних наводок.

PORTx.y = 1 – через внутренний подтягивающий резистор 100кОм ввод подключается к шине VCC. Поэтому в неподключенном состоянии на вводе будет висеть PIN=1.

2) режим выхода (DDRX.Y=1)

PORTx.y = 0 – низкий уровень (UOL, IOL<20mA) – логический 0

PORTx.y = 1 – высокий уровень (UOL, IOL<3mA) – логическая 1

* режимы работы показаны в таблице

avr-ports-table

Работа с отдельными выводами (пинами, ножками) порта:


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

* на asm:

SBIC	PINx, y					
SBIS	PINx, y	

* на C:

z = PINx.y;	

Задать значение выходного сигнала на отдельном выводе:

CBI	PORTx, y
SBI	PORTx, y

Приём и выдача байт на целый порт на asm:

IN Rd, PINx     (приём)
OUT PORTx, Pr   (выдача)

или на C:

z = PINx       (приём)
PINx = z       (выдача)

При сборосе по умолчанию все биты DDRx и PORTx установлены в «0».

Примечание: На некоторых котроллерах (например Atmega8) входной ток может быть выше чем выходной! Это значит, что лучше, если ток будет втекать в управлящий вывод, т.е. надо подключать к нему минусовой полюс светодиода.

Правда, это не относится к Arduino UNO.





galaxy