На главную страницу | Новости | Ссылки | Контакты
Микроконтроллеры AVR фирмы ATMEL являются базовой частью плат Arduino. Например, в ARDUINO UNO R3 (orig) используется MK Atmega328P, и в случае выхода его из строя возможна замена.
Однако микроконтроллеры AVR могут также использоваться и для построения собственных схем.
AVR ATMEGA8 -- один из наиболее популярных микроконтроллеров семейсва AVR, поскольку обладает наиболее привлекательным соотношением возможности/цена. Он обладает большим количеством выводом и портов, что позволяет без особых проблем подключать к нему разную переферию. Купить их можно здесь 5 шт. за $4.99
Когда мы пишем программу для Arduino, то можем либо использовать специальный язык Wirgin, либо же писать на чистом C/C++ и напрямую работать с портами микроконтроллера AVR.
--- Здесь краткое введение в микроконтроллеры AVR ---
Общая внутренняя архитектура микроконтроллеров AVR (далее МК AVR) показан на рисунке
Переферийные устройства МК AVR: порты ввода-вывода, а также блок прерывания (UI) и таймер-счетчик.
- Port(P) - параллельный порт
- SPI
- UART
- TWSI
В состав порта Px (x=A,B,C,D,E) входят 3 регистра ввода-вывода:
1) DDRx (направление)
2) PORTx (состояние)
3) PINx (не имеет аппаратной реализации)
Для настройки портов нужно задать значения для DDRx и PORTx. Например так:
DDRB = 0x00;
PORTB = 0x00;
Состояние разряда DDRX.Y определяет направление передачи бита через вывод порта PX.Y:
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
* режимы работы показаны в таблице
Получить значение входного сигнала на отдельном выводе можно с помощью команд условного перехода:
* на 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».
Правда, это не относится к Arduino UNO.