Оглавление
- Конденсаторы по питанию
- Hello, world!
- Обозначения индексов микроконтроллеров
- Supported microcontrollers:
- 16-разрядные таймеры-счетчики 1 и 3
- Расширенный дежурный режим (Extended Standby)
- Распиновка Atmega8
- Загрузчик для ATmega128A
- Управление энергопотреблением и режимы сна
- 8-разрядный AVR-микроконтроллер с внутрисистемно программируемой флэш-памятью емкостью 128 кбайт
- Getting started with MegaCore
- Магнитофон для компьютеров ZX Spectrum
- How to install
- Файл boards.txt
- Экономичный режим (Power-save)
- Режим холостого хода (Idle)
- PROGMEM with flash sizes greater than 64kB
- Порты ввода-вывода
Конденсаторы по питанию
Перед тем, как подать на микроконтроллер питающее напряжение, выполним правило, которое обязательно для всех цифровых микросхем: в непосредственной близости от выводов питания микросхемы должен быть керамический конденсатор емкостью 0,06 — 0,22 мкф. Обычно устанавливают конденсатор 0,1 мкф. Его часто называют блокировочным конденсатором.
В схему необходимо установить и электролитический конденсатор емкостью 4-10 мкф. Он также является блокировочным фильтром, но на менее высоких частотах. Такой конденсатор можно устанавливать один для нескольких микросхем. Обычно на 2-3 корпуса микросхем.
Дело в том, что микроконтроллер (как и другие цифровые микросхемы) состоит из транзисторных ячеек, которые в процессе работы постоянно переключаются из открытого состояния в закрытое, и наоборот. При этом изменяется потребляемая транзисторными ячейками энергия. В линии питания возникают кратковременные «провалы» напряжения. Этих ячеек в микроконтроллере сотни тысяч (думаю, что сейчас уже миллионы!), поэтому по питающим проводам начинают гулять импульсные помехи с частотами от единиц до десятков тысяч Герц.
Для предотвращения распространения этих помех по цепям схемы, да и самой микросхемы микроконтроллера, параллельно его выводам питания устанавливают такой блокировочный конденсатор. При этом на каждую микросхему необходимо устанавливать индивидуальный конденсатор.
Конденсатор для постоянного тока является изолятором. Но при установке конденсатора в цепи с непостоянным током он делается сопротивлением. Чем выше частота, тем меньшее сопротивление оказывает конденсатор. Следовательно, блокировочный конденсатор с малой емкостью пропускает через себя (шунтирует) высокочастотные сигналы (десятки и сотни Герц), а конденсатор с бОльшей емкостью — низкочастотные. Об этом я писал еще в статье Конденсатор в цепи постоянного и переменного тока
Hello, world!
Осталось проверить работоспособность. Подключаем к выводу PB4 светодиод (12 пин) и наслаждаемся его незамысловатым миганием, предварительно загрузив представленный ниже скетч в микроконтроллер, выбрав микроконтроллер Custom ATmega 128 Breakout Board using AVRISP и программатор USBasp из среды Arduino IDE.
int ledPin=12;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
1 2 3 4 5 6 7 8 9 10 11 12 |
intledPin=12; voidsetup(){ pinMode(ledPin,OUTPUT); } voidloop(){ digitalWrite(ledPin,HIGH); delay(1000); digitalWrite(ledPin,LOW); delay(1000); } |
Обозначения индексов микроконтроллеров
После обозначения базовой версии и серии микроконтроллера, через дефис идет индекс, указывающий вариант исполнения микроконтроллера.Индекс состоит из 1-2 цифр, которые означают максимальную частоту, на которой микроконтроллер может стабильно работать при нормальном для него напряжении питания, и из 1-3 букв, которые обозначают вариант корпуса, температурный диапазон работы, и особенности изготовления.Первая буква (или две буквы) после частоты обозначает тип корпуса:P — корпус DIP (PDIP)A — корпус TQFPM — корпус MLFTS — корпус SOT-23 (ATtiny4/5/9/10)J — корпус PLCCA — корпус UDFN/USONC — корпус CBGACK — корпус LGAS — корпус EIAJ SOICSS — узкий корпус JEDEC SOICT — корпус TSOPX — корпус TSSOP
Следующая буква означает температурный диапазон и особенности изготовления:C — коммерческий температурный диапазон (0 °C — 70 °C)A — температурный диапазон −20 °C — +85 °C, с использованием бессвинцового припояI — индустриальный температурный диапазон (-40 °C — +85 °C)U — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием бессвинцового припояH — индустриальный температурный диапазон (-40 °C — +85 °C), с использованием NiPdAuN — расширенный температурный диапазон (-40 °C — +105 °C), с использованием бессвинцового припояF — расширенный температурный диапазон (-40 °C — +125 °C)Z — автомобильный температурный диапазон (-40 °C — +125 °C)D — расширенный автомобильный температурный диапазон (-40 °C — +150 °C)
Еще в самом конце может быть буква R, которая означает, что микроконтроллеры упакованы в ленты для автоматизированных систем сборки
К примеру:ATmega8L-8AU — максимальная частота — 8 мегагерц, корпус — TQFP, индустриальный температурный диапазон (-40 °C — +85 °C), с использованием бессвинцового припояATmega8-16PN — максимальная частота — 16 мегагерц, корпус — PDIP, расширенный температурный диапазон (-40 °C — +105 °C), с использованием бессвинцового припоя
Если вы знаете, что обозначают буквы и цифры в маркировке микроконтроллера, значит знаете основные параметры микроконтроллеров, и всегда сможете подобрать для своей конструкции наиболее оптимальный вариант микроконтроллера.
Линейка микроконтроллеров ATmegaЛинейка микроконтроллеров ATtiny
Маркировка микроконтроллеров AVR ATmega и ATtinyМаркировка микроконтроллеров AVR семейства ATmega и ATtiny, базовые версии и версии микроконтроллеров, индекс микроконтроллеров
Published by: Мир микроконтроллеров
Date Published: 04/27/2015
Supported microcontrollers:
- ATmega2561
- ATmega2560
- ATmega1281
- ATmega1280
- ATmega640
- ATmega128
- ATmega64
- AT90CAN128
- AT90CAN64
- AT90CAN32
(All variants — A, L, V)
Can’t decide what microcontroller to choose? Have a look at the specification table below:
Mega2560 | Mega1280 | Mega640 | Mega2561 | Mega1281 | Mega128CAN128 | Mega64CAN64 | CAN32 | |
---|---|---|---|---|---|---|---|---|
Flash | 256kB | 128kB | 64kB | 256kB | 128kB | 128kB | 64kB | 32kB |
RAM | 8kB | 8kB | 8kB | 8kB | 8kB | 4kB | 4kB | 2kB |
EEPROM | 4kB | 4kB | 4kB | 4kB | 4kB | 4kB | 2kB | 1kB |
IO pins | 70/86 * | 70/86 * | 70/86 * | 54 | 54 | 53 | 53 | 53 |
PWM pins | 15 | 15 | 15 | 8 | 8 | 7 | 7 | 7 |
LED pin | PB7 | PB7 | PB7 | PB5 | PB5 | PB5 | PB5 | PB5 |
* pin 70-85 is not broken out on the Arduino Mega. Make sure to check out the for a cleaner an more logical pinout.
16-разрядные таймеры-счетчики 1 и 3
16-разрядные таймеры-счетчики предназначены для точного задания временных интервалов, генерации прямоугольных импульсов и измерения временных характеристик импульсных сигналов.
Основные отличительные особенности:
- 16-разрядные счетчики (в т.ч. возможность организации 16-разр. ШИМ)
- Три раздельных блока сравнения
- Двойная буферизация регистров порога сравнения (OCR)
- Один блок захвата
- Подавитель шума на входе блока захвата
- Режим сброса таймера при совпадении с порогом сравнения (автоматическая перезагрузка)
- Широтно-импульсная модуляция без генерации ложных импульсов при записи нового порога сравнения в OCR (двойная буферизация) и фазовая коррекция
- Переменный период ШИМ
- Частотный генератор
- Счетчик внешних событий
- 10 самостоятельных источников прерываний (TOV1, OCF1A, OCF1B, OCF1C, ICF1, TOV3, OCF3A,
OCF3B, OCF3C и ICF3)
Ограничения на режим совместимости с ATmega103
Обратите внимание, что в режиме совместимости с ATmega103 доступен только один 16-разр. таймер-счетчик (таймер-счетчик 1)
Кроме того, в режиме совместимости с ATmega103 таймер-счетчик 1 имеет только два регистра порогов сравнения (OCR1A и OCR1B).
Расширенный дежурный режим (Extended Standby)
Запись в SM2..0 значения 111 с учетом выбора в качестве тактового источника внешнего кварцевого или керамического резонатора означает, что после выполнения команды SLEEP микроконтроллер будет переведен в расширенный дежурный режим. Данный режим идентичен экономичному за исключением продолжения работы тактового генератора.
Выход из расширенного дежурного режима происходит за шесть машинных циклов.
Таблица 18 – Активные тактируемые модули и источники пробуждения в различных режимах сна
Наименование режима сна | Тактируемые модули микроконтроллера | Активные генераторы | Источник пробуждения | ||||||||||
clkCPU (ЦПУ) | clkFLASH (флэш-амять) | clkIO (ввод-вывод) | clkADC (АЦП) | clkASY (Асинхр.модули) | Основной тактовый | Генератор таймера | INT7:0 | Набл. адреса TWI | Таймер 0 | Готовность SPM/EEPROM | АЦП | Др. ввод-вывод | |
Холостой ход | * | * | * | * | * | * | * | * | * | * | * | ||
Уменьшение шумов АЦП | * | * | * | * | * | * | * | * | * | ||||
Выключение | * | * | |||||||||||
Экономичный | * | * | * | * | * | ||||||||
Дежурный (1) | * | * | * | ||||||||||
Расширенный дежурный (1) | * | * | * | * | * | * |
Прим.
- В качестве внешнего тактового источника выбран кварцевый или керамический резонатор.
- Если установлен бит AS0 в ASSR.
- Только INT3:0 или прерывание по уровню на INT7:4
Распиновка Atmega8
На следующей странице публикуется расположение выводов данного микроконтроллера при использовании разных типов корпусов:
Советую этот листок из даташита распечатать и иметь под рукой. В процессе разработки и сборки схемы очень полезно иметь эти данные перед глазами.
Внимание!
Обратите внимание на такой факт: микросхема микроконтроллера может иметь (и имеет в данной модели) несколько выводов для подключения источника питания. То есть имеется несколько выводов для подключения «земли» — «общего провода», и несколько выводов для подачи положительного напряжения
Изготовители микроконтроллеров рекомендуют подключать соответствующие выводы вместе, т.е., минус подавать на все выводы, помеченные как Gnd (Ground — Земля), плюс — на все выводы помеченные как Vcc.
При этом через одинаковые выводы МК не должны протекать токи, так как внутри корпуса МК они соединены тонкими проводниками! То есть при подключении нагрузки эти выводы не должны рассматриваться как «перемычки».
Загрузчик для ATmega128A
Для того, чтобы записать программу в память микроконтроллера непосредственно из Arduino IDE потребуется специальная программа-загрузчик (bootloader), размещенная в специальной области памяти микроконтроллера, которая постоянно опрашивает UART.
Это немного измененная версия загрузчика с сайта www.chip45.com.
Bootloader Mega128 bootloader_mega128.zip
10.0 KiB 2022 Downloads
Category: | Programs |
Date: | 27.10.2015 |
Для компиляции я использовал AVR-GCC.
$ avr-gcc -mmcu=atmega128 -Wall -Os -o boot_mega128.o boot_mega128.c
$ avr-objcopy -O ihex boot_mega128.o boot_mega128.hex
1 2 |
$avr-gcc-mmcu=atmega128-Wall-Os-oboot_mega128.oboot_mega128.c $avr-objcopy-Oihex boot_mega128.oboot_mega128.hex |
В архиве содержится исходный C-файл, объектый файл и готовый hex-файл. Для дальнейших действий понадобится только последний.
Устанавливаем фьюзы микроконтроллера и прошиваем загрузчик, используя программатор USBasp и AVRDUDE:
$ sudo avrdude -p m128 -c usbasp -P usbasp -Uefuse:w:0xff:m -Uhfuse:w:0xca:m -Ulfuse:w:0xff:m -Ulock:w:0x3F:m
$ sudo avrdude -p m128 -c usbasp -e -U flash:w:boot_mega128.hex -Ulock:w:0x0F:m
1 2 |
$sudo avrdude-pm128-cusbasp-Pusbasp-Uefusew0xffm-Uhfusew0xcam-Ulfusew0xffm-Ulockw0x3Fm $sudo avrdude-pm128-cusbasp-e-Uflashwboot_mega128.hex-Ulockw0x0Fm |
В Windows sudo писать не нужно.
Создадим папку atmega128 и перепишем в нее файл boot_mega128.hex в папке с загрузчиками среды Arduino для того, чтобы можно было прошивать bootloader прямо из Arduino IDE.
В MacOS X путь к папке с загрузчиками выглядит следующим образом:
.../arduino/Contents/Java/hardware/arduino/avr/bootloaders
Управление энергопотреблением и режимы сна
Использование режимов сна позволяет отключать неиспользуемые модули микроконтроллера, тем самым уменьшая потребляемую мощность. Микроконтроллер поддерживает несколько режимов сна, позволяющих программисту оптимизировать энергопотребление под требования приложения.
Для перевода микроконтроллера в один из шести режимов сна необходимо предварительно установить бит SE в регистре MCUCR, а затем выполнить инструкцию SLEEP. Биты SM2, SM1 и SM0 регистра MCUCR задают в какой именно режим будет переведен микроконтроллер (холостой ход «Idle», уменьшение шумов АЦП «ADC Noise Reduction», выключение «Power-down», экономичный «Power-save», дежурный «Standby» или расширенный дежурный «Extended Standby») после выполнения команды SLEEP (см. табл. 17). Выход из режима сна происходит при возникновении разрешенного прерывания. В этом случае, помимо времени старта микроконтроллер приостанавливается на 4 машинных цикла, выполняет процедуру обработки прерывания и продолжает выполнять команды следующие за SLEEP. Содержимое файла регистров и статического ОЗУ остается неизменным после выхода из режима сна. Если во время действия режима сна возникает условие сброса, то микроконтроллер пробуждается и исполняет код программы по вектору сброса.
На рисунке 18 представлены различные системы синхронизации микроконтроллера ATmega128 и их распределение. Данный рисунок может быть полезным при выборе соответствующего режима сна.
Регистр управления микроконтроллером – MCUCR
Регистр управления микроконтроллером содержит биты управления энергопотреблением.
Разряд 5 – SE: Разрешение перевода в режим сна
В бит SE должна быть записана лог. 1, когда необходимо микроконтроллер перевести в режим сна командой SLEEP. Во избежание незапланированного программистом перевода микроконтроллера в режим сна рекомендуется устанавливать этот бит непосредственно перед выполнением инструкции SLEEP и сбрасывать сразу после пробуждения.
Разряды 4..2 – SM2..0: Биты 2, 1 и 0 выбора режима сна
С помощью данных бит можно выбрать один из шести режимов сна в соответствии с таблицей 17.
Таблица 17 – Выбор режима сна
SM2 | SM1 | SM0 | Наименование режима сна |
Холостой ход | |||
1 | Уменьшение шумов АЦП | ||
1 | Выключение | ||
1 | 1 | Экономичный | |
1 | Зарезервирован | ||
1 | 1 | Зарезервирован | |
1 | 1 | Дежурный (1) | |
1 | 1 | 1 | Расширенный дежурный (1) |
Прим. 1: Дежурный режим и расширенный дежурный режим доступны только при использовании внешних кварцевых или керамических резонаторов.
8-разрядный AVR-микроконтроллер с внутрисистемно программируемой флэш-памятью емкостью 128 кбайт
- Общее описание
- Ядро центрального процессорного устройства AVR
- Память
- Интерфейс внешней памяти
- Системная синхронизация и тактовые источники
- Внешняя синхронизация
- Управление энергопотреблением и режимы сна
- Системное управление и сброс
- Прерывания
-
Порты ввода-вывода
- — Порты в качестве универсального цифрового ввода-вывода
- — Альтернативные функции порта
- — Описание регистров портов ввода-вывода
- Внешние прерывания
- Аналоговый компаратор
-
16-разр. таймеры-счетчики 1 и 3
- — Доступ к 16-разрядным регистрам
- — Тактовые источники таймера-счетчика 1/3
- — Блок счетчика
- — Блок захвата
- — Блоки сравнения
- — Блок формирования выходного сигнала
- — Режимы работы
- Временные диаграммы 16-разрядных таймеров-счетчиков
- Описание регистров 16-разрядных таймеров-счетчиков
- Предделители таймеров-счетчиков 1, 2 и 3
- Аналогово-цифровой преобразователь
- Интерфейс JTAG и встроенная отладочная система
- Модулятор выходов таймеров (OCM1C2)
-
Последовательный периферийный интерфейс — SPI
- — Функционирование вывода SS
-
8-разр. таймер-счетчик 0 с функциями ШИМ и асинхронного тактирования
- — Блок формирования выходного сигнала
- — Временные диаграммы таймера-счетчика 0
- — Описание регистров 8-разрядного таймера-счетчика 0
- — Асинхронная работа таймера-счетчика 0
- — Предделитель таймера-счетчика 0
-
УСАПП
- — Генерация тактовых импульсов
- — Форматы посылки
- — Инициализация УСАПП
- — Передача данных — Передатчик УСАПП
- — Прием данных — Приемник УСАПП
- — Асинхронный прием данных
- — Многопроцессорный режим связи
- — Описание регистров УСАПП
- — Примеры установок скоростей связи
-
Двухпроводной последовательный интерфейс TWI
- — Формат посылки и передаваемых данных
- — Системы многомастерных шин, арбитраж и синхронизация
- — Обзор модуля TWI
- — Описание регистров TWI
- — Рекомендации по использованию TWI
- — Режимы передачи
-
Программирование памяти
- — Параллельное программирование
- — Последовательное программирование
- — Программирование через интерфейс JTAG
-
Электрические характеристики
- — Требования к характеристикам внешнего тактового сигнала
- — Характеристики двухпроводного последовательного интерфейса
- — Характеристики временной диаграммы SPI
- — Предварительные данные по характеристикам АЦП
- — Временная диаграмма внешней памяти данных
-
Типовые характеристики ATmega128: предварительные данные
- — Типовые характеристики ATmega128: предварительные данные (продолжение)
- — Типовые характеристики ATmega128: предварительные данные (продолжение)
- Сводная таблица регистров
- Набор инструкций
- Информация для заказа
Исходный файл:
4464Kb Engl |
Getting started with MegaCore
Ok, so you’re downloaded and installed MegaCore, but how to get started? Here’s a quick start guide:
- Hook up your microcontroller as shown in the .
- Open the Tools > Board menu item, and select ATmega64, ATmega128, ATmega1281, ATmega2561, ATmega640, ATmega1280, ATmega2560, AT90CAN32, AT90CAN64 or AT90CAN128.
- Select your preferred clock frequency. 16 MHz is standard on most Arduino boards.
- Select what kind of programmer you’re using under the Programmers menu.
- Hit Burn Bootloader. If an LED is connected to pin PB5/PB7, it should flash twice every second.
- Now that the correct fuse settings is sat and the bootloader burnt, you can upload your code in two ways:
- Disconnect your programmer tool, and connect a USB to serial adapter to the microcontroller, like shown in the . Then select the correct serial port under the Tools menu, and click the Upload button. If you’re getting some kind of timeout error, it means your RX and TX pins are swapped, or your auto reset circuity isn’t working properly (the 100 nF capacitor on the reset line).
- Keep your programmer connected, and hold down the button while clicking Upload. This will erase the bootloader and upload your code using the programmer tool.
Your code should now be running on the microcontroller!
Магнитофон для компьютеров ZX Spectrum
Опубликовано вс, 09/20/2015 — 20:59 пользователем trol
ZX Spectrum — компьютер, созданный более 30 лет назад с 3.5 МГц процессором и всего лишь 48 Кб ОЗУ, под который написано огромное
количество игр (да и прикладного софта тоже), в которые интересно играть даже сегодня. При том, что эти игры часто представляют
собой мегашедевры с точки зрения программирования и оптимизации кода, их разработчики умудрялись вмещать огромные игровые миры
в эти скромные 48 Кб.
Программы в те времена загружались с магнитофонной ленты. Причем, в отличии от самого Spectrum-а, магнитофоны и процесс загрузки с них
вызывают гораздо меньше теплых воспоминаний — загрузка не всегда заканчивалась успешно, иногда игрушку приходилось грузить
по несколько раз получая ошибку «R Tape loading error» регулируя положение головки магнитофона, прочищая ее поверхность одеколоном,
либо, если совсем не повезло, вытаскивать из магнитофона «зажеванную» им кассету при этом с трудом сдерживая желание сильно стукнуть виновника
апстену 🙂
How to install
Boards Manager Installation
This installation method requires Arduino IDE version 1.6.4 or greater.
- Open the Arduino IDE.
- Open the File > Preferences menu item.
- Enter the following URL in Additional Boards Manager URLs:
- Open the Tools > Board > Boards Manager… menu item.
- Wait for the platform indexes to finish downloading.
- Scroll down until you see the MegaCore entry and click on it.
- Click Install.
- After installation is complete close the Boards Manager window.
Manual Installation
Click on the «Download ZIP» button in the upper right corner. Extract the ZIP file, and move the extracted folder to the location «~/Documents/Arduino/hardware». Create the «hardware» folder if it doesn’t exist.
Open Arduino IDE, and a new category in the boards menu called «MegaCore» will show up.
Файл boards.txt
В Windows этот файл расположен в папке с Arduino:
.../hardware/arduino/avr/boards.txt
В Mac OS X:
.../arduino/Contents/Java/hardware/arduino/avr/boards.txt
В конец файла boards.txt среды Arduino добавляем следующие строчки:
###############################################################
atmega128A.name=Custom ATmega 128 Breakout Board using AVRISP
atmega128A.upload.tool=usbasp
atmega128A.upload.maximum_size=126976
atmega128A.bootloader.low_fuses=0xFF
atmega128A.bootloader.high_fuses=0xCA
atmega128A.bootloader.extended_fuses=0xFF
atmega128A.bootloader.path=atmega
atmega128A.bootloader.file=boot_mega128.hex
atmega128A.bootloader.unlock_bits=0x3F
atmega128A.bootloader.lock_bits=0x0F
atmega128A.build.mcu=atmega128
atmega128A.build.f_cpu=8000000L
atmega128A.build.core=arduino
atmega128A.build.variant=mega128
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
############################################################### atmega128A.name=Custom ATmega128Breakout Board using AVRISP atmega128A.upload.tool=usbasp atmega128A.upload.maximum_size=126976 atmega128A.bootloader.low_fuses=0xFF atmega128A.bootloader.high_fuses=0xCA atmega128A.bootloader.extended_fuses=0xFF atmega128A.bootloader.path=atmega atmega128A.bootloader.file=boot_mega128.hex atmega128A.bootloader.unlock_bits=0x3F atmega128A.bootloader.lock_bits=0x0F atmega128A.build.mcu=atmega128 atmega128A.build.f_cpu=8000000L atmega128A.build.core=arduino atmega128A.build.variant=mega128 |
Обратите внимание на фьюзы загрузчика. Они в точности должны совпадать с указанными при его прошивке!. Тактовая частота микроконтроллера у меня установлена равной 8 МГц
Тактовая частота микроконтроллера у меня установлена равной 8 МГц.
Экономичный режим (Power-save)
Если установить значения бит SM2..0 равным 011, то действие команды SLEEP приведет к переводу микроконтроллера в экономичный режим. Данный режим идентичен режиму выключения за некоторыми исключениями:
Если таймер-счетчик 0 тактируется асинхронно, т.е. установлен бит AS0 в регистре ASSR, то таймер-счетчик 0 в режиме сна продолжит работу. Выход из режима сна возможен как по переполнению таймера, так и при выполнении условия сравнения, если соответствующее прерывание для таймера-счетчика разрешено в регистре TIMSK, а также установлен бит общего разрешения прерываний в регистре SREG.
Если для асинхронного таймера НЕ включено асинхронное тактирование, то рекомендуется использовать режим выключения вместо экономичного, т.к. содержимое регистров асинхронного таймера должно рассматриваться как неопределенное после выхода из экономичного режима, в котором значение AS0 было равно 0.
В данном режиме сна останавливаются все тактовые источники за исключением асинхронных (clkASY), работающих только совместно с асинхронными модулями, в т.ч. таймер-счетчик 0 с разрешенной опцией асинхронного тактирования.
Режим холостого хода (Idle)
Если значение бит SM2..0 равно 000, то после выполнения инструкции SLEEP микроконтроллер переходит в режим холостого хода, в котором останавливается ЦПУ, но продолжают работу SPI, УСАПП, аналоговый компаратор, АЦП, двухпроводной интерфейс, таймеры-счетчики, сторожевой таймер и система прерываний. По сути, в данном режиме останавливается синхронизация ядра ЦПУ и флэш-памяти (clkCPU и clkFLASH), а остальная продолжает работу.
В режиме холостого хода допускается пробуждение от любого внешнего или внутреннего прерывания, например, при переполнении таймера или завершении передачи УСАППом. Если пробуждение по прерыванию аналогового компаратора не требуется, то аналоговый компаратор может быть отключен путем установки бита ACD в регистре управления и состояния аналогового компаратора ACSR. Это позволит уменьшить потребляемый ток в режиме холостого хода. Если разрешена работа АЦП, то преобразование автоматически запускается после перевода в данный режим.
PROGMEM with flash sizes greater than 64kB
The usual attribute stores constant data such as string arrays to flash and is great if you want to preserve the precious RAM. However, PROGMEM will only store content in the lower section, from 0 and up to 64kB. If you want to store data in other sections, you can use (64 — 128kB), (128 — 192kB), or (192 — 256kB), depending on the chip you’re using.
Accessing this data is not as straight forward as with , but it’s still doable:
const char far_away[] PROGMEM1 = "Hello from far away!\n"; // (64 - 128kB) const char far_far_away[] PROGMEM2 = "Hello from far, far away!\n"; // (128 - 192kB) const char far_far_far_away[] PROGMEM3 = "Hello from far, far, far away!\n"; // (192 - 256kB) void print_progmem() { uint8_t i; char c; // Print out far_away for(i = ; i < sizeof(far_away); i++) { c = pgm_read_byte_far(pgm_get_far_address(far_away) + i); Serial.write(c); } // Print out far_far_away for(i = ; i < sizeof(far_far_away); i++) { c = pgm_read_byte_far(pgm_get_far_address(far_far_away) + i); Serial.write(c); } // Print out far_far_far_away for(i = ; i < sizeof(far_far_far_away); i++) { c = pgm_read_byte_far(pgm_get_far_address(far_far_far_away) + i); Serial.write(c); } }
Порты ввода-вывода
Введение
Все порты ввода-вывода (ПВВ) AVR-микроконтроллеров работают по принципу чтение-модификация-запись при использовании их в качестве портов универсального ввода-вывода. Это означает, что изменение направления ввода-вывода одной линии порта командами SBI и CBI будет происходит без ложных изменений направления ввода-вывода других линий порта. Данное распространяется также и на изменение логического уровня (если линия порта настроена на вывод) или на включение/отключение подтягивающих резисторов (если линия настроена на ввод). Каждый выходной буфер имеет симметричную характеристику управления с высоким втекающим и вытекающим выходными токами. Выходной драйвер обладает нагрузочной способностью, которая позволяет непосредственно управлять светодиодными индикаторами. Ко всем линиям портов может быть подключен индивидуальный выборочный подтягивающий к плюсу питания резистор, сопротивление которого не зависит от напряжения питания. На всех линиях ПВВ установлены защитные диоды, которые подключены к VCC и Общему (GND), как показано на рисунке 29. Подробный перечень параметров ПВВ приведен в разделе «Электрические характеристики».
Рисунок 29 – Эквивалентная схема линии ПВВ
Ссылки на регистры и биты регистров в данном разделе даны в общей форме. При этом, символ “x” заменяет наименование ПВВ, а символ “n” заменяет номер разряда ПВВ. Однако при составлении программы необходимо использовать точную форму записи. Например, PORTB3, означающий разряд 3 порта B, в данном документе записывается как PORTxn. Адреса физических регистров ввода-вывода и распределение их разрядов приведены в разделе “Описание регистров портов ввода-вывода».
Для каждого порта ввода-вывода в памяти ввода-вывода зарезервировано три ячейки: одна под регистр данных – PORTx, другая под регистр направления данных – DDRx и третья под состояние входов порта – PINx. Ячейка, хранящая состояние на входах портов, доступна только для чтения, а регистры данных и направления данных имеют двунаправленный доступ. Кроме того, установка бита выключения подтягивающих резисторов PUD регистра SFIOR отключает функцию подтягивания на всех выводах всех портов.
Ниже приведено описание порта ввода-вывода для универсального цифрового ввода-вывода. Большинство выводов портов поддерживают альтернативные функции встроенных периферийных устройств микроконтроллера. Описание альтернативных функций приведено далее в подразделе “Альтернативные функции порта” (см. также описание функций соответствующих периферийных модулей).
Обратите внимание, что для некоторых портов разрешение альтернативных функций некоторых выводов делает невозможным использование других выводов для универсального цифрового ввода-вывода