Проекты на основе Arduino ATmega
Микроконтроллер в современной электронике – основа для любого устройства, начиная от простой мигалки на светодиодах, до универсальных измерительных приборов и даже средств автоматизации производства.
Пример 1
Можно сделать тестер с 11 функциями на микроконтроллере atmega32.
Устройство имеет крайне простую схему, в которой использовано немногим более дюжины деталей. Однако вы получаете вполне функциональный прибор, которым можно производить измерения. Вот краткий перечень его возможностей:
- Прозвонка цепи с возможностью измерять падение напряжения на переходе диода.
- Омметр.
- Измеритель ёмкости.
- Измерение активного сопротивления конденсатора или ESR.
- Определение индуктивности.
- Возможность счёта импульсов.
- Измерение частоты – пригодится в диагностике, например, для проверки ШИМ источника питания.
- Генератор импульсов – тоже полезен в ремонте.
- Логический анализатор позволит просмотреть содержимое пачек цифровых сигналов.
- Тестер стабилитронов.
Пример 2
Для радиолюбителей будет полезно иметь качественное оборудование, но станция стоит дорого. Есть возможность собрать паяльную станцию своими руками, для этого нужна плата Arduino, имеющая в своем составе микроконтроллер atmega328.
Пример 3
Для продвинутых радиолюбителей есть возможность собрать более чем бюджетный осциллограф. Мы опубликуем данный урок в дальнейших статьях.
Для этого вам понадобится:
- Arduino uno или atmega
- Tft дисплей 5 дюйма.
- Небольшой набор обвязки.
Или его упрощенный аналог на плате Nano и дисплее от nokia 5110.
Такой осциллографический пробник станет полезным для автоэлектрика и мастера по ремонту радиоэлектронной аппаратуры.
Пример 4
Бывает, что управляемые модули удалены друг от друга или возможностей одной ардуино не хватает – тогда можно собрать целую микроконтроллерную систему. Чтобы обеспечить связь двух микроконтроллеров стоит использовать стандарт RS 485.
На фото приведен пример реализации такой системы и ввода данных с клавиатуры.
Ардуино своими руками
Atmega2560 – хоть и мощный и продвинутый контроллер, но проще и быстрее собрать первую плату на atmega8 или 168.
Левая часть схемы – это модуль связи по USB, иначе говоря, USB-UART/TTL конвертер. Его, вместе с обвязкой, можно выбросить из схемы, для экономии места, собрать на отдельной плате и подключать только для прошивки. Он нужен для преобразования уровней сигнала.
DA1 – это стабилизатор напряжения L7805. В качестве основы можно использовать целый ряд avr микросхем, которые вы найдете, например, серии, arduino atmega32 или собрать arduino atmega16. Для этого нужно использовать разные загрузчики, но для каждого из МК нужно найти свой.
Можно поступить еще проще, и собрать всё на беспаечной макетной плате, как это показано здесь, на примере 328-й атмеги.
Микроконтроллеры – это просто и весело – вы можете сделать кучу приятный и интересных вещей или даже стать выдающимся изобретателем, не имея при этом ни образования, ни знаний о низкоуровневых языках. Ардуино – шаг в электронику с нуля, который позволяет перейти к серьезным проектам и изучению сложных языков, типа C avr и других.
Семейства микроконтроллеров
Стандартные семейства:
- tinyAVR (ATtinyxxx):
- Флеш-память до 16 КБ; SRAM до 512 Б; EEPROM до 512 Б;
- Число линий ввода-вывода 4-18 (общее количество выводов 6-32);
- Ограниченный набор периферийных устройств.
- megaAVR (ATmegaxxx):
- Флеш-память до 256 КБ; SRAM до 16 КБ; EEPROM до 4 КБ;
- Число линий ввода-вывода 23-86 (общее количество выводов 28-100);
- Аппаратный умножитель;
- Расширенная система команд и периферийных устройств.
- XMEGA AVR (ATxmegaxxx):
- Флеш-память до 384 КБ; SRAM до 32 КБ; EEPROM до 4 КБ;
- Четырёхканальный DMA-контроллер;
- Инновационная система обработки событий.
Как правило, цифры после префикса обозначают объём встроенной flash-памяти (в КБ) и модификацию контроллера. А именно — максимальная степень двойки, следующая за префиксом, обозначает объём памяти, а оставшиеся цифры определяют модификацию (напр., ATmega128 — объём памяти 128 КБ; ATmega168 — объём памяти 16 КБ, модификация 8; ATtiny44 и ATtiny45 — память 4 КБ, модификации 4 и 5 соответственно).[источник не указан 3304 дня]
На основе стандартных семейств выпускаются микроконтроллеры, адаптированные под конкретные задачи:
- со встроенными интерфейсами USB, CAN, контроллером LCD;
- со встроенным радиоприёмопередатчиком — серии ATAxxxx, ATAMxxx;
- для управления электродвигателями — серия AT90PWMxxxx;
- для автомобильной электроники;
- для осветительной техники.
Кроме указанных выше семейств, ATMEL выпускает 32-разрядные микроконтроллеры семейства AVR32, которое включает в себя подсемейства AT32UC3 (тактовая частота до 66 МГц) и AT32AP7000 (тактовая частота до 150 МГц).
Версии контроллеров
AT (mega/tiny)xxx — базовая версия.
ATxxxL — версии контроллеров, работающих на пониженном (Low) напряжении питания (2,7 В).
ATxxxV — версии контроллеров, работающих на низком напряжении питания (1,8 В).
ATxxxP — малопотребляющие версии (до 100 нА в режиме Power-down), применена технология picoPower (анонсированы в июле 2007), повыводно и функционально совместимы с предыдущими версиями.
ATxxxA — уменьшен ток потребления, перекрывается весь диапазон тактовых частот и напряжений питания двух предыдущих версий (также, в некоторых моделях, добавлены новые возможности и новые регистры, но сохранена полная совместимость с предыдущими версиями). Микроконтроллеры «А» и «не-А» обычно имеют одинаковую сигнатуру, что вызывает некоторые трудности, так как Fuse-bit’ы отличаются.
Номер модели дополняется индексом, указывающим вариант исполнения. Цифры (8,10,16,20) перед индексом означают максимальную частоту, на которой микроконтроллер может стабильно работать при нормальном для него напряжении питания).
Первая буква индекса означает вариант корпуса:
АТxxx-P — корпус DIP
АТxxx-A — корпус TQFP
АТxxx-J — корпус PLCC
АТxxx-M — корпус MLF
АТxxx-MA — корпус UDFN/USON
АТxxx-C — корпус CBGA
АТxxx-CK — корпус LGA
АТxxx-S — корпус EIAJ SOIC
АТxxx-SS — узкий корпус JEDEC SOIC
АТxxx-T — корпус TSOP
АТxxx-TS — корпус (ATtiny4/5/9/10)
АТxxx-X — корпус TSSOP
Следующая буква означает температурный диапазон и особенности изготовления:
АТxxx-xC — коммерческий температурный диапазон (0 °C — 70 °C)
АТxxx-xA — температурный диапазон −20 °C — +85 °C, с использованием бессвинцового припоя
АТxxx-xI — индустриальный температурный диапазон (-40 °C — +85 °C)
АТxxx-xU — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием бессвинцового припоя
АТxxx-xH — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием NiPdAu
АТxxx-xN — расширенный температурный диапазон (-40 °C — +105 °C), с использованием бессвинцового припоя
АТxxx-xF — расширенный температурный диапазон (-40 °C — +125 °C)
АТxxx-xZ — автомобильный температурный диапазон (-40 °C — +125 °C)
АТxxx-xD — расширенный автомобильный температурный диапазон (-40 °C — +150 °C)
последняя буква R означает упаковку в ленты (Tape & Reel) для автоматизированных систем сборки.
ATMEGA8 Datasheet — Atmel
Part Name
Description
MFG CO.
ATMEGA8
8-bit Atmel with 8KBytes In-System Programmable Flash
Other PDF
not available.
DOWNLOAD
OverviewThe AtmelAVR ATmega8 is a low-power CMOS 8-bit microcontroller based on the AVR RISC architecture. By executing powerful instructions in a single clock cycle, the ATmega8 achieves throughputs approaching 1MIPS per MHz, allowing the system designer to optimize power consumption versus processing speed.
Features• High-performance, Low-power AtmelAVR 8-bit Microcontroller• Advanced RISC Architecture – 130 Powerful Instructions – Most Single-clock Cycle Execution – 32 × 8 General Purpose Working Registers – Fully Static Operation – Up to 16MIPS Throughput at 16MHz – On-chip 2-cycle Multiplier• High Endurance Non-volatile Memory segments – 8Kbytes of In-System Self-programmable Flash program memory – 512Bytes EEPROM – 1Kbyte Internal SRAM – Write/Erase Cycles: 10,000 Flash/100,000 EEPROM – Data retention: 20 years at 85°C/100 years at 25°C(1) – Optional Boot Code Section with Independent Lock Bits In-System Programming by On-chip Boot Program True Read-While-Write Operation – Programming Lock for Software Security• Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode – Real Time Counter with Separate Oscillator – Three PWM Channels – 8-channel ADC in TQFP and QFN/MLF package Eight Channels 10-bit Accuracy – 6-channel ADC in PDIP package Six Channels 10-bit Accuracy – Byte-oriented Two-wire Serial Interface – Programmable Serial USART – Master/Slave SPI Serial Interface – Programmable Watchdog Timer with Separate On-chip Oscillator – On-chip Analog Comparator• Special Microcontroller Features – Power-on Reset and Programmable Brown-out Detection – Internal Calibrated RC Oscillator – External and Internal Interrupt Sources – Five Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, and Standby• I/O and Packages – 23 Programmable I/O Lines – 28-lead PDIP, 32-lead TQFP, and 32-pad QFN/MLF• Operating Voltages – 2.7V — 5.5V (ATmega8L) – 4.5V — 5.5V (ATmega8)• Speed Grades – 0 — 8MHz (ATmega8L) – 0 — 16MHz (ATmega8)• Power Consumption at 4Mhz, 3V, 25C – Active: 3.6mA – Idle Mode: 1.0mA – Power-down Mode: 0.5µA
Page Link’s:
Part Name
Description
PDF
MFG CO.
SIT8103
High Performance 1-110 MHz Oscillator
View
Unspecified
CAT93C56VA-1.8T3E
2K-Bit Microwire Serial EEPROM
View
Catalyst Semiconductor => Onsemi
CAT25C03GLE-1.8
1K/2K/4K/8K/16K SPI Serial CMOS EEPROM
View
Catalyst Semiconductor => Onsemi
CAT25C01
1K/2K/4K/8K/16K SPI Serial CMOS E2PROM
View
Catalyst Semiconductor => Onsemi
RTH22
SENSISTORS
View
Unspecified
RTH221-8270J
Positive Temperature Coefficient Silicon Thermistors
View
Microsemi Corporation
CAT93C56
2-Kb Microwire Serial CMOS EEPROM
View
ON Semiconductor
110IMX35
35 Watt Quad-Output DC-DC Converters
View
Power-One Inc.
CAT25010L
1-Kb, 2-Kb and 4-Kb SPI Serial CMOS EEPROM
View
Catalyst Semiconductor => Onsemi
CAT25010LE-1.8TE13
1K/2K/4K SPI Serial CMOS EEPROM
View
Catalyst Semiconductor => Onsemi
ATmega8 Memory Interface
The memory space in the controller is the manifestation of the linear and regular memory map. This AVR module comes with a Harvard Architecture that houses separate memories for both data and program.
Single pipelining is used for the executions of the instructions in the Program Memory – A programmable Flash Memory – where the next instruction is called and executed followed by the next instruction that helps in executing the instructions in every clock cycle.
The Fast Access File Register comes with 32 x 8 – Bit general purpose working registers that can be accessed with the single clock cycle that assists in performing the ALU (Arithmetic Logic Unit) operation where the result is stored in the Register File.
The I/O Memory can be accessed in multiple ways by direct manner or using data Space locations covering Register File, 0x20 – 0x5F.
Program Memory (ROM)
- Program memory comes with a memory space around 8K and can perform the instructions in every clock cycle.
- It stores information permanently and doesn’t depend on the source of power supply and is widely known as ROM or Non-Volatile Memory.
- The program memory address can access 16 or 32-bit instruction.
- Program Flash is divided into two parts including the Application Program section and the Boot Program section.
- The latter comes with Applications Flash Memory used for SPM instruction writing.
Data Memory (RAM)
The data memory comes with memory space around 1K (1024 bytes). It can be accessed through the five different addressing modes in the AVR architecture named Direct, Indirect, Indirect with Displacement, Indirect with Pre-decrement, and Indirect with Post-increment.
Three address registers X, Y, and Z are capable to increment and decrement with regular intervals in the presence of indirect addressing modes.
The flexible interrupt module houses control registers that further contain global interrupt enable bit sitting in the Status Register. All these interrupts contain Interrupt Vector Table with Interrupt Vector where the former depends on the Interrupt Vector Position and are inversely proportional to each other.
The ALU module, which is divided into three major functions known as direct, arithmetic and bit functions, has a direct connection with 32 general-purpose registers within a single clock cycle.
Микроконтроллеры
Микроконтроллер Atmega8 довольно часто используется в радиолюбительских схемах,сделан он с использованием технологии CMOS на AVR RISC архитектуре. За один такт выполняется одна инструкция, на микроконтроллера ATmega8 достигается производительность в 1MIPS на МГц, и тем самым достигается наиболее оптимальная производительность и потребляемая энергия.
Технические характеристики:
- Программная память равна 8 кБ, цикл составляет 10000 раз;
- объем флеш памяти 512 байт который хранит переменные (цикл перезаписи 100 000);
- Оперативная память (ОЗУ) 1кб;
- 32 регистра общего назначения;
- Два 8-ми разрядных таймера/счетчика с раздельным прескалером, режим сравнения, режим захвата;
- таймер реального времени с независимым генератором;
- три канала ШИМ;
- шесть каналов АЦП, канал 10-ти разрядный;
- последовательный интерфейс двухпроводной;
- USART;
- SPI ;
- Сторожевой таймер с независимым генератором;
- аналоговый компаратор;
- внутренний RC генератор;
- возможность обработки внешних и внутренних прерываний;
- режимы с пониженным энергопотреблением: Idle,Power-save,Power-down,Standby,ADC Noise Reduction;
- напряжение от 4.5 В до 5.5 В;
- тактовая частота от 0-16 МГц.
Расположение выводов микроконтроллера Atmega8
Порты ввода/вывода
Порты микроконтроллера сгруппированы в 3 группы:
Порт D
- PD0 — цифровой вход/выход, RxD — вход приемника USART;
- PD1 — цифровой вход/выход, TxD — выход передатчика USART;
- PD2 — цифровой вход/выход, INT0 — внешнее прерывание нулевого канала;
- PD3 — цифровой вход/выход, INT1 — внешнее прерывание первого канала;
- PD4 — цифровой вход/выход, XCK — внешний такт для USART, T0 — внешний вход Timer0;
- PD5 — цифровой вход/выход, T1 — внешний вход Timer1;
- PD6 — цифровой вход/выход, AIN0 — вход аналогового компаратора канал 0;
- PD7 — цифровой вход/выход, AIN1 — вход аналогового компаратор канал 1.
Порт C
- PС0 — цифровой вход/выход, ADC0 — аналоговый вход канал 0;
- PС1 — цифровой вход/выход, ADC1 — аналоговый вход канал 1;
- PС2 — цифровой вход/выход, ADC2 — аналоговый вход канал 2;
- PС3 — цифровой вход/выход, ADC3- аналоговый вход канал 3;
- PС4 — цифровой вход/выход, ADC4- аналоговый вход канал 3;
- PC5 — цифровой вход/выход, SDA- двух проводной последовательный интерфейс (канал данных);
- PС6 — цифровой вход/выход, RESET- внешний сброс.
Порт B
- PB0 — цифровой вход/выход, ICP1 — захват входа 1;
- PB1 — цифровой вход/выход, OC1A — выход сравнения/ШИМ 1A;
- PB2 — цифровой вход/выход, OC1B — выход сравнения/ШИМ 1B;
- PB3 — цифровой вход/выход, OC2 — вход сравнения/ШИМ2, MOSI
- PB4 — цифровой вход/выход, MISO
- PB5 — цифровой вход/выход, SCK — тактовый вход;
- PB6 — цифровой вход/выход, XTAL1- тактовый вход для резонатора;
- PB7 — цифровой вход/выход, XTAL2- тактовый вход для резонатора, TOSC2 — тактовый вход в случае работы от встроенного резонатора.
Выводы для питания микроконтроллера
- VCC — вход напряжение питания;
- GND — это общий «минусовой» вывод, земля;
- AVcc — вход напряжения питания для модуля АЦП;
- ARef — вход опорного напряжение для АЦП.
Datasheet микроконтроллера Atmega8
- < Назад
- Вперёд >
Конденсаторы по питанию
Перед тем, как подать на микроконтроллер питающее напряжение, выполним правило, которое обязательно для всех цифровых микросхем: в непосредственной близости от выводов питания микросхемы должен быть керамический конденсатор емкостью 0,06 — 0,22 мкф. Обычно устанавливают конденсатор 0,1 мкф. Его часто называют блокировочным конденсатором.
В схему необходимо установить и электролитический конденсатор емкостью 4-10 мкф. Он также является блокировочным фильтром, но на менее высоких частотах. Такой конденсатор можно устанавливать один для нескольких микросхем. Обычно на 2-3 корпуса микросхем.
Дело в том, что микроконтроллер (как и другие цифровые микросхемы) состоит из транзисторных ячеек, которые в процессе работы постоянно переключаются из открытого состояния в закрытое, и наоборот. При этом изменяется потребляемая транзисторными ячейками энергия. В линии питания возникают кратковременные «провалы» напряжения. Этих ячеек в микроконтроллере сотни тысяч (думаю, что сейчас уже миллионы!), поэтому по питающим проводам начинают гулять импульсные помехи с частотами от единиц до десятков тысяч Герц.
Для предотвращения распространения этих помех по цепям схемы, да и самой микросхемы микроконтроллера, параллельно его выводам питания устанавливают такой блокировочный конденсатор. При этом на каждую микросхему необходимо устанавливать индивидуальный конденсатор.
Конденсатор для постоянного тока является изолятором. Но при установке конденсатора в цепи с непостоянным током он делается сопротивлением. Чем выше частота, тем меньшее сопротивление оказывает конденсатор. Следовательно, блокировочный конденсатор с малой емкостью пропускает через себя (шунтирует) высокочастотные сигналы (десятки и сотни Герц), а конденсатор с бОльшей емкостью — низкочастотные. Об этом я писал еще в статье Конденсатор в цепи постоянного и переменного тока
ATmega8 Internal Block Diagram
- A Block diagram will help you get a hold of how major functions and components are connected and perform inside the device.
- The following figure shows the block diagram of ATmega8:
ATmega8 is a low-power CMOS AVR microcontroller that is mainly based on RISC architecture. By executing powerful instructions in a single clock cycle, the ATmega8 is capable to perform and execute powerful instructions using 1MIPS per MHz in a single clock cycle that drastically helps in optimizing the power consumption.
8. ATmega8 Projects and Applications
- Used in embedded and robotics system
- It is widely used in students projects
- Home Security System
- For the designing of quadcopters
- Industrial Automation
That’s all for today. I hope you have found this article information. If you are unsure or have any questions, you can approach me in the comment section below. I’d love to help you the best way I can. Feel free to feed us with your valuable suggestions – they help us provide you quality work. Thanks for reading the article.
Дисплейный модуль на ATMega8/168/328
Опубликовано вт, 05/17/2016 — 18:51 пользователем trol
При разработке микроконтроллерных поделок практически всегда возникает потребность реализации пользовательского ввода и вывода.
Часто функции ввода информации берёт на себя клавиатура (реже — энкодер), а для отображения состояния устройства используются либо светодиоды, либо
светодиодные семисегментные индикаторы, либо ЖК-дисплеи (текстовые вроде 16х2 или графические). Последний вариант часто выигрывает по соотношению
цена/возможности если использовать недорогой экран от телефонов Nokia 5110. Разрешающая способность экрана 84х48 позволяет выводить до 5 строк
текста длиной до 16 символов. Естественно, помимо текста можно выводить и графику. С таким экраном обычно можно реализовать горазо более
удобный пользовательский интерфейс, по сравнению с экранами 16х2, и тем более, по сравнению с семисегментными индикаторами.
Исходный код программы на языке С (Си)
Программа для передающей части
C++
#include <io.h>
#include <delay.h>
void main(void)
{
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// инициализация Port C
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
// инициализация Port D
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
while (1)
{
if(PINB.0 == 1) {
PORTD = 0x10;
}
if(PINB.0 == 0) {
PORTD = 0x20;
}
}
}
1 |
#include <io.h> voidmain(void) { DDRB=(<<DDB7)|(<<DDB6)|(<<DDB5)|(<<DDB4)|(<<DDB3)|(<<DDB2)|(<<DDB1)|(<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0 PORTB=(<<PORTB7)|(<<PORTB6)|(<<PORTB5)|(<<PORTB4)|(<<PORTB3)|(<<PORTB2)|(<<PORTB1)|(<<PORTB0); // инициализация Port C DDRC=(1<<DDC6)|(1<<DDC5)|(1<<DDC4)|(1<<DDC3)|(1<<DDC2)|(1<<DDC1)|(1<<DDC0); // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(<<PORTC6)|(<<PORTC5)|(<<PORTC4)|(<<PORTC3)|(<<PORTC2)|(<<PORTC1)|(<<PORTC0); // инициализация Port D DDRD=(1<<DDD7)|(1<<DDD6)|(1<<DDD5)|(1<<DDD4)|(1<<DDD3)|(1<<DDD2)|(1<<DDD1)|(1<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(<<PORTD7)|(<<PORTD6)|(<<PORTD5)|(<<PORTD4)|(<<PORTD3)|(<<PORTD2)|(<<PORTD1)|(<<PORTD0); while(1) { if(PINB.==1){ PORTD=0x10; } if(PINB.==){ PORTD=0x20; } } } |
Программа для приемной части
C++
#include <io.h>
#include <delay.h>
// объявляем глобальные переменные
unsigned char byte = 0;
unsigned char lightON = 0;//статус света
int LED_status = 0;
void main(void)
{
// инициализация Port B
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=0 Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// инициализация Port D
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
while (1)
{
byte = PIND;
if(PIND.7==0 && PIND.6==0 && PIND.5==0 && PIND.4==1 && LED_status==0)
{
PORTB.0 = ~PORTB.0;
delay_ms(1000);
}
}
}
1 |
#include <io.h> unsignedcharbyte=; unsignedcharlightON=;//статус света intLED_status=; voidmain(void) { DDRB=(<<DDB7)|(<<DDB6)|(<<DDB5)|(<<DDB4)|(<<DDB3)|(<<DDB2)|(<<DDB1)|(1<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=0 Bit0=0 PORTB=(<<PORTB7)|(<<PORTB6)|(<<PORTB5)|(<<PORTB4)|(<<PORTB3)|(<<PORTB2)|(<<PORTB1)|(<<PORTB0); // инициализация Port D DDRD=(<<DDD7)|(<<DDD6)|(<<DDD5)|(<<DDD4)|(<<DDD3)|(<<DDD2)|(<<DDD1)|(<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(<<PORTD7)|(<<PORTD6)|(<<PORTD5)|(<<PORTD4)|(<<PORTD3)|(<<PORTD2)|(<<PORTD1)|(<<PORTD0); while(1) { byte=PIND; if(PIND.7==&&PIND.6==&&PIND.5==&&PIND.4==1&&LED_status==) { PORTB.=~PORTB.; delay_ms(1000); } } } |
Устройства ввода-вывода МК
МК AVR имеют развитую периферию:
- До 86 многофункциональных, двунаправленных GPIO линий ввода-вывода, объединённых в 8-битные порты ввода-вывода. В зависимости от программно-задаваемой конфигурации регистров, могут независимо друг от друга работать в режиме «сильного» драйвера, выдающего или принимающего (на «землю») ток до 40 мА, что достаточно для подключения светодиодных индикаторов. Любой из выводов портов может быть сконфигурирован на «ввод» либо в свободном состоянии, либо с использованием встроенного подтягивающего (на плюс) резистора.
- До 3 внешних источников прерываний (по фронту, срезу, или уровню) и до 32 по изменению уровня на входе.
- В качестве источника тактовых импульсов может быть выбран:
- керамический или кварцевый резонатор (не у всех моделей);
- внешний тактовый сигнал;
- калиброванный внутренний RC-генератор (частота 1, 2, 4, 8 МГц, а также, для некоторых моделей ATtiny — 4,8, 6.4, 9.6 МГц и 128 кГц).
- Внутренняя флеш-память команд до 256 KБ (не менее 10 000 циклов перезаписи).
- Отладка программ осуществляется с помощью интерфейсов JTAG или debugWIRE
сигналы JTAG (TMS, TDI, TDO, и TCK) мультиплексированы на порт ввода-вывода. Режим работы — JTAG или порт — задаётся соответствующим битом в регистре fuses. МК AVR поставляются с включённым интерфейсом JTAG.
:
- Внутренняя память данных EEPROM до 4 КБ (ATmega/ATxmega)/512 байт (ATtiny) (до 100 000 циклов перезаписи).
- Внутренняя память SRAM до 32 KБ (ATxmega)/16 Кб (ATmega)/1 Кб (ATtiny) c временем доступа 2 такта.
- Внешняя память объёмом до 64 КБ (ATmega8515, ATmega162, ATmega640, ATmega641, ATmega1280, ATmega1281, ATmega2560, ATmega256).
- Таймеры c разрядностью 8, 16 бит.
- ШИМ-модулятор (PWM) 8-, 9-, 10-, 16-битный.
- Аналоговые компараторы.
-
АЦП (ADC) с дифференциальными входами, разрядность 8 (ATtiny)/10 (ATtiny/ATmega)/12 (ATxmega) бит:
- программируемый коэффициент усиления перед АЦП 1, 10 и 200 (в дифференциальном режиме);
- в качестве опорного напряжения могут выступать: напряжение питания, внешнее напряжение, или внутреннее некалиброванное опорное напряжение около 2,56 В (для моделей, имеющих минимальное напряжение питания от 2,7 В и выше) либо 1,1 В (с минимальным напряжением питания 1,8 В).
- Различные последовательные интерфейсы, включая:
- двухпроводной интерфейс TWI, совместимый с I²C;
- универсальный синхронно/асинхронный приёмопередатчик UART/USART;
- синхронный последовательный порт Serial Peripheral Interface (SPI).
- USB серия AT90USBxxxx.
- CAN серия AT90CANxxx.
- LCD серии ATmega169 и ATmega329.
- Датчики температуры ATtiny25, ATtiny45, ATtiny85.
- Почти все (за исключением некоторых ранних моделей ATtiny, у которых перепрограммирование идёт по особому интерфейсу) поддерживают внутрисхемное программирование (ISP) через последовательный интерфейс SPI. Многие микроконтроллеры поддерживают альтернативное последовательное или параллельное программирование с использованием высокого напряжения, для случаев, если fuse-регистры были настроены так, что обычное программирование стало недоступно.
- Поддержка самопрограммирования, при котором основная программа может изменить часть своего кода.
- Поддержка загрузки основной программы с помощью защищённой от перезаписи подпрограммы (bootloader). Код основной программы обычно принимается через один из портов микроконтроллера с использованием одного из стандартных протоколов.
- Ряд режимов пониженного энергопотребления.
Примечание: не все периферийные устройства могут быть включены программно. Некоторые из них предварительно должны быть активированы битами в регистрах Fuses, которые могут быть изменены только программатором.