Atmega32A распиновка: Распиновка atmega32

Содержание

Проекты на микроконтроллерах AVR — Отладочная плата ATmega32 с дисплея от Nokia3310

  Отладочная плата представляет собой универсальный модуль с микроконтроллером ATmega32 фирмы ATMEL. Идея модуля заключается в том, чтобы на плате с микроконтроллером было минимум компонентов, необходимых для прошивки/отладки устройства. А вся необходимая периферия подключается отдельно. Таким образом, плата становится небольших размеров, отпадает  необходимость закладывать в плату избыточный функционал, так как после знакомства с тем или иным компонентом он будет висеть мертвым грузом, тогда как лучше его пустить в дело, да и саму отладочную плату можно будет использовать в готовом устройстве.

ОСНОВНОЙ МОДУЛЬ

На основной плате помимо микроконтроллера предусмотрен стандартный 6-и пиновый разъем для внутрисхемного программирования, преобразователь на микросхеме FT232RL для подключения устройства к персональному компьютеру посредством стандартного UART, внешний высокочастотный кварцевый резонатор в усеченном корпусе и кнопка аппаратного сброса микроконтроллера.

Так же в своей версии платы установил аналоговый акселерометр ADW22035 от Analog Device (поставлен для ознакомительных целей). Акселерометр использует 7-ой канал АЦП микроконтроллера и подключен к нему через керамический конденсатор С3 емкостью 0,1 мкф. При такой емкости частота опроса акселерометра должна составлять 50Гц (подробнее в даташите).  На выходе акселерометра в зависимости от измеренного значения ускорения, будет находиться значение напряжения от 0 до напряжения питания. Аналоговый акселерометр можно заменить на подстроечный резистор номиналом 10-20 кОм, средний вывод нужно будет подключить к входу АЦП, а крайние к шине питания (Vcc и Gnd)

 Плата выполнена на двухсторонней печатной плате, все компоненты, за исключением резистора подтяжки ножки Reset, находятся сверху. Все свободные ножки микроконтроллера выведены на разъемы J1 и J2.

 В качестве индикации применены SMD светодиоды: PLED – индикатор наличия питания в схеме, D1 и D2 индикация передачи данных по UART.  

 Для облегчения разводки платы в районе преобразователя FT232RL, сигнальные светодиоды было решено перенести на вспомогательные выводы микросхемы CBUS3 и CBUS4. Поэтому для индикации приема/передачи данных, необходимо перепрограммировать EEPROM микросхемы FT232RL.

Остальные номиналы компонентов:

R2, R3, R6 – 510Ом

R4, R5 – 1кОм

C1, C2 – 20пф

С4, С5, С6 – 0,1 мкрФ

все компоненты в типоразмере корпуса 0805.

Фото получившихся плат



И с обратной стороны


МОДУЛЬ РАСШИРЕНИЯ С ДИСПЛЕЕМ NOKIA3310



 

Для освоения работы с дисплеем на контроллере PCD8544 от Nokia3310, собрана плата расширения, подключаемая к основной плате через штырьковые разъемы J1 и J2 (при подключении индекс разъемов на обеих платах должен совпадать). Дисплей занимает для подключения  следующие ножки МК:

Reset – PortC.0

SCE – PortC.1

D/C – PortC.2

SDin – PortC.3

SCLK – PortC.4

К выводу Vout подключен электролитический конденсатор емкостью 4,7мкФ.

 

Также на данной плате предусмотрены 4 тактовые кнопки и 3 светодиода. Светодиоды подключены через токоограничительные резисторы (номиналом 510Ом) к выводам PortD.4, PortD.5 и PortD.7 что позволяет помимо стандартного включения/выключения индикации использовать аппаратный ШИМ (OC1A, OC1B и OC2). Для подключения кнопок задействованы ножки микроконтроллера умеющие обрабатывать внешние прерывания (S1 – int0, S2 – int1, S4 – int2). Для подключения кнопки S3 отведен PortB.3 без внешнего прерывания. Резисторы R1-R4 номиналом 10кОм, они подтягивают линии подключения кнопок к шине питания. Поэтому при конфигурировании условия нажатия необходимо задавать по заднему фронту или по низкому уровню. Для быстрого подключения дополнительной периферии несколько линий микроконтроллера выведены на разъем J3.  Для возможности генерировать звук, с обратной стороны платы расположен динамик. В данном исполнении динамик подключается проводами, поэтому специального места для него не выведено. Динамик подключен к выводу PortD.6.

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


Проверка на работоспособность дисплея

 Так как в качестве разъема программирования выбран угловой штырьковый разъем PLS необходимо было предусмотреть некую защиту от того, чтобы контролировать правильность подключения шлейфа от программатора. Был придуман такой вариант:


 Разъем отдален от края платы и немного поднят над ней, позволяя воткнуть разъем IDC-06 только определенным образом — как показано на фото (если попытаться воткнуть наоборот, то этому помешает выступ на разъеме). Вот такая маленькая хитрость. Еще есть один момент при подключении программатора: так как разъем припаян с верхней стороны платы получилось так, что распиновка перевернулась зеркально и поэтому для подключения необходимо использовать кабель с перекрестным соединением шлейфа:


Скачать

Печатные платы

Тестовая прошивка

ATmega32: 16-битный таймер/счетчик 1 | avr

Аппаратный блок 16-разрядного таймера/счетчика 1 (далее для сокращения TC1) позволяет программе точно работать в реальном времени (отслеживать события), генерировать звук и измерять длительности импульсов.

Основные возможности TC1:

• Честный 16-битный дизайн (например, он дает возможность аппаратно реализовать 16-разрядный ШИМ).
• Два независимых друг от друга узла сравнения (Output Compare Units).
• Регистры сравнения с двойной буферизацией (Double Buffered Output Compare Registers).
• Один узел захвата по входу (Input Capture Unit).
• Блок подавления шума на входе захвата (Input Capture Noise Canceler).

• Автоматический сброс таймера при событии захвата, Clear Timer on Compare Match (Auto Reload, автоперезагрузка).
• Модулятор ШИМ без дрожания фронтов, с корректной фазой (Glitch-free, Phase Correct Pulse Width Modulator, PWM).
• Изменяемый период ШИМ.
• Генератор частот.
• Счетчик внешних событий (External Event Counter).
• 4 независимых источника прерывания (TOV1, OCF1A, OCF1B и ICF1).

Примечание: в этом описании большинство имен регистров и бит написаны в общей форме. В некоторых местах n в нижнем регистре заменяется номером таймера/счетчика. В частности, в этом тексте n почти всегда заменяется на 1, что означает Timer/Counter 1, или TC1 (во врезке про прескалер буква n оставлена, потому что информация по прескалеру относится к обоим таймерам 0 и 1, поэтому буква n может быть заменена на 0 или 1). Буква x в нижнем регистре часто заменяет обозначение канала Output Compare. Однако при использовании имен регистров и бит в программе следует приводить полное имя, например для доступа к значению счетчика TC1 следует использовать имя регистра TCNT1, и т. п.

Упрощенная блок-схема TC1 показана на рисунке 19-1. Реальное размещение сигналов на внешних выводах см. во врезке ниже. Также см. разделы даташита [1]: «Pin Configurations», «Alternate Functions of Port B», «Alternate Functions of Port D».

Рис. 19-1. Блок-схема 16-bit Timer/Counter 1.

[Корпус TQFP44]

[Выводы макетной платы AVR-USB-MEGA16]

Контакт платы Имя порта Описание возможностей
P9 PB1 T1 — эта ножка может работать как тактовый вход для таймера/счетчика 1 (Timer/Counter1 External Counter Input). Подробнее см. статью [4].
P20 PD5 OC1A — сигнал события совпадения A таймера 1 (Timer/Counter1 Output Compare A Match Output).
P21 PD6 ICP1, вход для захвата внешних импульсов (Timer/Counter1 Input Capture Pin). Может использоваться для измерения длительностей сигнала с помощью таймера 1.

Ножка PD4, к которой привязан сигнал OC1B, задействован на сигнал USB D-, но его можно использовать, если USB не нужен.

В таблицах ниже показаны функции ножек портов GPIO, которые имеют отношение к работе TC1.

[Порт PB]

Порт Альтернативные функции
PB1 T1, внешний вход для подачи тактов на таймер/счетчик 1 (Timer/Counter1 External Counter Input).

[Порты PD]

Порт Альтернативные функции
PD4 OC1B, выход сигнала о событии совпадения таймера/счетчика 1 с заданным значением канала B (Timer/Counter1 Output Compare B Match Output).
PD5 OC1A, выход сигнала о событии совпадения таймера/счетчика 1 с заданным значением канала A (Timer/Counter1 Output Compare A Match Output).
PD6 ICP1, вход захвата значения таймера/счетчика по внешнему событию (Timer/Counter1 Input Capture Pin).

Особенности регистров

. Регистры Timer/Counter (TCNT1), Output Compare Registers (OCR1A, OCR1B) и Input Capture Register (ICR1) являются 16-разрядными. Поэтому для доступа к ним следует придерживаться специальной процедуры (микроконтроллер AVR 8-разрядный). Эти процедуры описаны в разделе даташита «Accessing 16-bit Registers» (также см. [2]). Регистры управления TC1 (Timer/Counter Control Registers TCCR1A и TCCR1B) 8-разрядные, так что для доступа к ним со стороны программы CPU нет никаких ограничений. Сигналы запросов прерывания (Interrupt requests, что на рис. 19-1 показаны сокращениями Int.Req.) отображаются на флаги в регистре Timer Interrupt Flag Register (TIFR). Все прерывания TC1 маскируются индивидуально в битами регистра Timer Interrupt Mask Register (TIMSK). На рисунке TIFR и TIMSK не показаны, потому что эти регистры также связаны и с другими таймерами микроконтроллера.

TC1 может получать тактирование внутренне, через делитель частоты (prescaler), или от внутреннего источника тактов на выводе T1. Логика выбора тактов (Clock Select) управляет, какой источник тактов, и какой его активный перепад будет использоваться для инкремента (или декремента) значения счетчика TC1. Счетчик не активен, когда не выбран источник тактирования. Выход логики выбора тактов обозначается как такты таймера TC1 (сигнал clkT1).

Регистры сравнения для генерации выходного сигнала с двойной буферизацией (Output Compare Registers, OCR1A, OCR1B) постоянно сравниваются со значением счетчика TC1 (регистр Timer/Counter, TCNT1). Результат сравнения может использоваться для генерации сигнала ШИМ или для изменяемой выходной частоты на ножках Output Compare Pin (OC1A, OC1B), подробнее см. «Узлы Output Compare» ниже. При совпадении генерируется событие Compare Match, которое установит флаг Compare Match Flag (OCF1A, OCF1B), и это может использоваться для генерации запроса на прерывание Output Compare.

Регистр захвата (Input Capture Register, ICR1) может захватывать значение счетчика (TCNT1) по внешнему событию, которое возникает (это настраивается) либо на выводе Input Capture Pin (ICP1), или на выводах Analog Comparator (см. раздел «Analog Comparator» даташита [1]). На входе блока Input Capture может быть подключен цифровой узел подавления помех (Noise Canceler), чтобы снизить шансы случайного захвата коротких импульсов.

Значение TOP, или максимальное значение счетчика, может быть в некоторых режимах работы определено либо регистром OCR1A, либо регистром ICR1, либо установлено в одно из фиксированных значений (см. таблицу 19-1). Когда в режиме ШИМ (PWM) используется OCR1A в качестве значения TOP, регистр OCR1A не может использоваться для генерации выхода ШИМ. Однако в этом случае значение TOP получит двойную буферизацию, что позволяет программно менять значение TOP в режиме реального времени (run time). Если требуется фиксированное значение TOP, регистр ICR1 может использоваться как альтернатива, освобождая OCR1A для использования в качестве выхода ШИМ.

Определения. В этом описании часто будут использоваться следующие определения:

Таблица 19-1. Определения констант.

BOTTOM Счетчик достиг BOTTOM, когда он становится равным 0x0000.
MAX Счетчик достиг максимального значения MAX, когда он становится равным 0xFFFF (в десятичной форме 65535).
TOP Счетчик достигает TOP, когда он становится равным самому большому значению в последовательности счета. Значение TOP может быть назначено в одно из фиксированных значений: 0x00FF, 0x01FF или 0x03FF, или значение TOP может быть сохранено в регистре OCR1A или ICR1. Присваивание значения TOP зависит от режима работы.

Совместимость. 16-bit Timer/Counter был обновлен и улучшен по сравнению с предыдущими версиями 16-bit AVR Timer/Counter. Совместимость полностью соблюдается в контексте следующего:

• Все регистры 16-bit Timer/Counter относятся к адресному пространству регистров I/O, включая регистры прерываний таймера (Timer Interrupt Registers).
• Положение бит внутри всех регистров 16-bit Timer/Counter, включая регистры прерываний таймера.
• Векторы прерывания.

У следующих бит управления поменялись имена, однако у них сохранился функционал и размещение в регистрах:

• Имя PWM10 изменено на WGM10.
• PWM11 изменено на WGM11.
• CTC1 изменено на WGM12.

Добавлены следующие биты в регистры управления:

• FOC1A и FOC1B добавлены в регистр TCCR1A.
• WGM13 добавлен в регистр TCCR1B.

16-bit Timer/Counter имеет улучшения, которые в некоторых случаях влияют на совместимость.

[Источники тактирования]

Как уже упоминалось, TC1 может получать такты либо от внутреннего, либо от внешнего источника. Логика выбора тактов управляется битами CS12..CS10, которые находятся в Timer/Counter Control Register B (TCCR1B). Частота тактирования может быть поделена прескалером, см. врезку ниже.

Таймеры Timer/Counter1 и Timer/Counter0 (TC1 и TC0) имеют общий модуль делителя (prescaler module), однако эти таймеры/счетчики могут иметь разные настройки. Описание ниже применимо к обоим таймерам/счетчикам TC1 и TC0.

Внутренний источник тактов. Таймер/счетчик может тактироваться напрямую от системной тактовой частоты (путем установки CSn2:0 = 1). Это предоставляет самый быстрый счет, поскольку счетчик работает на частоте ядра и портов ввода/вывода (fCLK_I/O). Альтернативно может быть выбран один из выходов прескалера, где частота тактирования может быть либо fCLK_I/O/8, fCLK_I/O/64, fCLK_I/O/256 или fCLK_I/O/1024.

Сброс прескалера. Прескалер всегда работает (т. е. его работа не зависит от состояния логики выбора тактов таймеров/счетчиков), и используется совместно TC1 и TC0. Поскольку на сам прескалер не влияет логика выбора тактов, внутреннее состояние прескалера неявно влияет на ситуации, когда используются частоты прескалера. Один из примеров возникновения таких артефактов, когда таймер разрешен и тактируется от прескалера (6 > CSn2:0 > 1). Количество системных тактов от момента, когда таймер разрешен, до первого момента счета может быть в диапазоне от 1 до N+1 системных тактовых циклов, где N равно выбранному коэффициенту прескалера (8, 64, 256 или 1024).

Есть возможность сбросить прескалер, чтобы засинхронизировать таймер/счетчик с ходом выполнения программы. Однако при этом следует иметь в виду, что тот же самый прескалер может использоваться и другим таймером/счетчиком. Сброс прескалера повлияет на период всех таймеров/счетчиков, которые к нему подключены.

Внешний источник тактов. Внешний источник тактов, подключенный к выводу T1/T0, может использоваться для тактирования таймеров/счетчиков TC1 и TC0 (сигналы clkT1 и clkT0). Вывод T1/T0 анализируется на каждом такте системной частоты специальной логикой синхронизации внешнего вывода. Синхронизированный (оцифрованный) внешний сигнал затем передается на детектор перепада. На рис. 18-1 показана функциональная блок-схема логики синхронизации и детектора перепада T1/T0. Регистры тактируются по положительному перепаду внутренней системной частоты (clkI/O). Защелка прозрачна в интервале лог. 1 сигнала внутренних системных тактов.

Детектор перепада генерирует импульс clkT1/clkT0 для каждого положительного (CSn2:0 = 7) или отрицательного (CSn2:0 = 6) перепада уровня, который он определил.

Рис. 18-1. Логика оцифровки (выборки уровня) на выводах T1/T0.

Логика синхронизации и детектора перепада вводит задержку от 2.5 до 3.5 системных такта между сигналом на выводе T1/T0 и моментом обновления счетчика.

Разрешение и запрет входа тактов должны осуществляться, когда уровень T1/T0 стабилен как минимум в течение одного периода системных тактов, иначе есть риск генерации ошибочного импульса счета для таймера/счетчика.

Каждая половина периода поступающей внешней тактовой частоты должна быть дольше одного периода системных тактов, чтобы гарантировать корректную оцифровку T1/T0. Внешняя частота должна быть гарантированно ниже половины системной частоты (fExtClk < fclk_I/O/2) при скважности 50%. Поскольку детектор перепада использует оцифровку уровня, максимальная частота, которую он может детектировать, равна половине частоты дискретизации (в соответствии с теоремой Найквиста). Однако из-за вариации системной частоты и скважности, производимой генератором (определяется допусками внешнего кварца, керамического резонатора, емкостью конденсаторов, подключенных к выводам XTAL1 и XTAL2, температурой окружающей среды и другими факторами), рекомендуется ограничить максимальную частоту внешних тактов, чтобы она была меньше fclk_I/O/2.5.

Внешняя тактовая частота не может быть поделена прескалером.

Рис. 18-2. Прескалер для Timer/Counter1 и Timer/Counter0. Логика синхронизации ножек входов (T1/T0) показана на рисунке 18-1.

Регистры прескалера. Когда используются специальные команды ассемблера IN и OUT, относящиеся к I/O, должно использоваться адресное пространство I/O 0x00 .. 0x3F. Когда регистры адресуются через пространство данных инструкциями LD и ST, к этим адресам нужно добавить 0x20.

SFIOR – Special Function IO Register, смещение 0x30 в адресном пространстве I/O, состояние после сброса 0. Когда этот регистр адресуется командами LD и ST, адрес смещения этого регистра 0x50.

 

Разряд 7 6 5 4 3 2 1 0  
    —     —     —     —     —     —     —   PSR10 SFIOR
Чтение/запись               R/W  
Сброс 0 0 0 0 0 0 0 0  

PSR10 (бит 0): Prescaler Reset Timer/Counter1 и Timer/Counter0

Когда в этот бит записывается лог. 1, то будет сброшен общий прескалер для TC1 и TC0. Этот бит будет очищен аппаратно после выполнения операции сброса. Запись лог. 0 в этот бит не дает никакого эффекта. Имейте в виду, что TC1 и TC0 используют один и тот же прескалер, поэтому если прескалер используется на обоих этих таймерах, то сброс прескалера повлияет на них одновременно, и вызовет повлияет на последовательность из счета. Бит PSR10 всегда читается как 0.

[Узел счетчика]

Основная часть 16-bit Timer/Counter это программируемый 16-разрядный счетчик, который может считать в обоих направлениях. На рис. 19-2 показана блок-схема счетчика и его окружения.

Рис. 19-2. Блок-схема Counter Unit.

Описание внутренних сигналов:

count инкрементирует или декрементирует на единицу TCNT1.
direction выбирает направление счета (инкремент или декремент).
clear очищает TCNT1 (сбрасывает в 0 все его биты).
clkT1 такты таймера/счетчика.
TOP сигнализирует, что TCNT1 достиг максимального значения.
BOTTOM сигнализирует, что TCNT1 достиг минимального значения (нуля).

16-битный счетчик отображается на две 8-битные ячейки адресного пространства I/O: старшая половина счетчика (TCNT1H) и младшая половина счетчика (TCNT1L). К регистру TCNT1H процессор может обратиться только косвенной адресацией (indirect access). Когда CPU осуществляет доступ к TCNT1H ячейке I/O, то на самом деле CPU получает доступ к временному регистру старшего байта (TEMP). Этот временный регистр обновляется значением TCNT1H, когда читается регистр TCNT1L, и TCNT1H обновляется значением из временного регистра, когда записывается регистр TCNT1L. Это позволяет процессору читать или записывать весь 16-битный счетчик целиком за 1 такт через внутреннюю 8-битную шину данных (подробнее см. [2]).

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

В зависимости от используемого режима работы счетчик очищается, инкрементируется или декрементируется на каждом такте таймера (clkT1). Сигнал clkT1 может генерироваться из внешнего или внутреннего источника, выбранного битами CS12:0). Когда ни один из источников тактов не выбран (CS12:0 = 0), таймер остановлен. Однако к значению счетчика TCNT1 можно получить доступ со стороны CPU, независимо от того, присутствует clkT1 или нет. Операции записи CPU отменяют (т. е. запись имеет приоритет) все очистки счетчика или операции счета.

В последовательность счета определяется установкой бит Waveform Generation (WGM13:0), находящихся в Timer/Counter Control Register A и B (TCCR1A и TCCR1B). Имеется строгая зависимость между поведением (счетом) счетчика и формами сигнала, генерируемыми на выходах Output Compare (OC1x). Для дополнительной информации по последовательностям счета и формам генерируемых сигналов см. «Режимы работы».

Флаг переполнения Timer/Counter Overflow (TOV1) установится в соответствии с выбранным битами WGM13:0 режимом работы. TOV1 может использоваться для генерации прерывания CPU.

[Узел Input Capture]

В таймере/счетчике реализован узел захвата по входному сигналу (Input Capture), который может захватывать внешние события и привязывать к ним метки реального времени. Событие показывает внешний сигнал, который может поступать на вывод ICP1 или альтернативно на блок компаратора (Analog Comparator). Эти метки времени могут использоваться для вычисления частоты, скважности и других параметров сигнала, который генерирует события захвата. Альтернативно метки времени могут использоваться для создания лога событий.

Input Capture показан на рис. 19-3. На этой блок схеме элементы, которые не являются непосредственно частями узла Input Capture, показаны серым цветом.

Рис. 19-3. Блок схема Input Capture Unit.

Когда меняется логический уровень (это изменение является событием) на выводе Input Capture Pin (ICP1), или альтернативно на выходе компаратора Analog Comparator Output (ACO), то это изменение, подтверждаемое детектором перепада, вызовет срабатывание захвата (capture). При захвате 16-битное значение счетчика (TCNT1) записывается в регистр Input Capture Register (ICR1). Установится флаг Input Capture Flag (ICF1) на том же системном такте, на котором значение TCNT1 копируется в регистр ICR1. Если разрешено прерывание захвата (TICIE1 = 1), то флаг Input Capture генерирует прерывание Input Capture. Флаг ICF1 автоматически сбросится, когда выполнится соответствующий обработчик прерывания. Альтернативно флаг ICF1 может быть очищен программно путем записи лог. 1 в соответствующую позицию бита I/O флага ICF1.

Чтение 16-битного значения Input Capture Register (ICR1) осуществляется сначала чтением младшего байта (ICR1L), и затем старшего байта (ICR1H). Когда читается младший байт, старший при этом копируется во временный регистр старшего байта (TEMP). Когда CPU читает ячейку I/O ICR1H, то на самом деле он читает регистр TEMP [2].

Регистр ICR1 может быть записан только когда режим генерации сигнала (Waveform Generation mode) использует регистр ICR1 для определения значения TOP счетчика (см. таблицу 19-1). В этом случае биты Waveform Generation mode (WGMn3:0) должны быть установлены до того, как значение TOP может быть записано в регистр ICR1. Когда записывается регистр ICR1, сначала должен быть записана старшим байтом I/O ячейка ICR1H, затем записан младший байт в ICR1L [2].

Источник сигнала Input Capture. Основным триггером срабатывания блока Input Capture таймера TC1 служит вход Input Capture Pin (ICP1). TC1 может альтернативно для Input Capture использовать выход компаратора (Analog Comparator Output, сигнал ACO). Analog Comparator выбирается как источник триггера захвата путем установки бита Analog Comparator Input Capture (ACIC) в регистре управления компаратором Analog Comparator Control and Status Register (ACSR). Имейте в виду, что изменение источника триггера может привести к ложному одиночному срабатыванию функции захвата. Таким образом, флаг ICF1 должен быть очищен после изменения источника сигнала захвата.

Оба входа, и Input Capture Pin (ICP1), и Analog Comparator Output (ACO) оцифровываются той же самой техникой, что и вывод T1 (см. рис. 18-1). Детектор перепада также аналогичный. Однако когда разрешен noise canceler, перед детектором перепада вставляется дополнительная логика, которая увеличивает задержку на 4 системных такта. Имейте в виду входной noise canceler и детектор перепада всегда разрешены, за исключением случаев, когда таймер/счетчик установлен в режим генерации сигнала (Waveform Generation mode), в котором ICR1 используется для определения TOP.

Input Capture может сработать под действием программы, если она управляет ножкой порта GPIO сигнала ICP1, настроенного как выход.

Noise Canceler. Узел подавления помех (noise canceler) улучшает помехозащищенность путем применения схемы цифровой фильтрации. Вход noise canceler оцифровывается 4 раза, и когда все 4 выборки оказываются одинаковыми, то этот логический уровень передается на вход детектора перепада как достоверный.

Noise canceler разрешается путем установки бита Input Capture Noise Canceler (ICNC1) в регистре Timer/Counter Control Register B (TCCR1B). Если noise canceler разрешен, то это вводит задержку из 4 системных тактов от изменения уровня события до обновления регистра ICR1. Noise canceler использует системную тактовую частоту, поэтому на него не влияет настройка прескалера таймера/счетчика.

Использование узла Input Capture. Основная сложность применения функции Input Capture — предоставить достаточное количество процессорного времени для обработки входных событий. Время между двумя соседними событиями является критичным, за это время обработчик прерывания должен успеть обработать факт события. Если процессор не прочитал (например, не успел прочитать) значение захвата в регистре ICR1 до наступления следующего события, то ICR1 будет перезаписан новым значением счетчика. В этом случае результат захвата будет некорректен.

Когда используется прерывание Input Capture, в обработчике прерывания регистр ICR1 должен быть как можно раньше, насколько это возможно. Даже несмотря на то, что прерывание Input Capture имеет довольно высокий приоритет, максимальное время реакции на прерывание зависит от максимального количества периодов тактов, которое тратится запросами на другие прерывания. Следует помнить, что активное прерывание AVR с низким приоритетом не может быть прервано, если вытеснение специально не разрешено в этом низкоприоритетном обработчике прерывания (см. «О приоритетах прерываний архитектуры AVR» в [3]).

Не рекомендуется использование узла Input Capture в любом режиме, когда значение TOP (разрешающая способность) активно меняется в процессе работы.

Измерение скважности сигнала требует срабатывания захвата после каждого перепада. Изменение чувствительного перепада должно быть сделано как можно ближе к моменту окончания чтения регистра ICR1. После изменения перепада флаг Input Capture Flag (ICF1) должен быть очищен программно (записью в его I/O позицию единицы). Для измерения только частоты очистка флага ICF1 не требуется (если используется обработчик прерывания).

[Узлы Output Compare]

16-битный цифровой компаратор непрерывно сравнивает TCNT1 с регистрами Output Compare (OCR1x). Если TCNT1 становится равным OCR1x, компаратор сигнализирует о совпадении. Совпадение установит флаг Output Compare Flag (OCF1x) на следующем такте таймера. Если прерывание сравнения разрешено (OCIE1x = 1), то флаг Output Compare генерирует прерывание Output Compare. Флаг OCF1x автоматически очищается, когда выполняется обработчик прерывания. Альтернативно флаг OCF1x может быть очищен программно записью лог. 1 в его I/O позицию бита. Генератор сигнала (waveform generator) использует сигнал совпадения для генерации выхода в соответствии с установленным режимом битами Waveform Generation mode (WGM13:0) и битами Compare Output mode (COM1x1, COM1x0). Сигналы TOP и BOTTOM используются блоком waveform generator для обработки специальных случаев предельных значений счетчика в некоторых режимах работы (см. «Режимы работы»).

Специальная функция блока Output Compare A позволяет определить для таймера/счетчика значение TOP (т. е. разрешающую способность счета). В дополнение к разрешающей способности счетчика, значение TOP определяет время периода сигнала, который синтезирует waveform generator.

На рис. 19-4 показана блок-схема узла Output Compare. Маленькая буква x соответствует одному из блоков сравнения Output Compare (A/B). Элементы блок-схемы, которые не являются непосредственно частью узла Output Compare, обозначены серым цветом.

Рис. 19-4. Блок-схема Output Compare Unit.

Регистр OCR1x применяет двойную буферизацию, когда используется один из 12 режимов ШИМ (Pulse Width Modulation, PWM). Для режимов работы Normal и Clear Timer on Compare (CTC) двойная буферизация запрещена. Двойная буферизация синхронизирует обновление регистра сравнения OCR1x на последовательности счета TOP или BOTTOM. Эта синхронизация предотвращает появление несимметричных импульсов ШИМ, генерируя чистый, свободный от паразитных выбросов выходной сигнал.

Доступ к регистру OCR1x может показаться сложным, однако это не так. Когда разрешается двойная буферизация, ядро CPU получает доступ к регистру буфера OCR1x, и если двойная буферизация запрещена, то доступ осуществляется к регистру OCR1x напрямую, без буфера. Содержимое OCR1x (регистра сравнения или его буфера) меняется только операцией записи (таймер/счетчик не обновляет этот регистр автоматически, как он это делает с регистром TCNT1 и ICR1). Таким образом, OCR1x не читается через временный регистр старшего байта (TEMP). Однако хорошей практикой остается предварительное чтение младшего байта при доступе к другим 16-битным регистрам. Запись регистров OCR1x должна осуществляться через регистр TEMP, поскольку все 16-бит используются одновременно и непрерывно. Сначала записывается старший батй (OCR1xH). Когда старший байт записан в ячейку I/O, регистр TEMP обновляется этим записанным значением. Тогда после этого записывается младший байт (OCR1xL), и во время этой операции в том же самом системном такте старший байт будет скопирован в старшие 8 байт либо регистра OCR1x, либо его буфера. Подробнее про операции с 16-битными регистрами см. [2].

Force Output Compare. В режимах генерации сигнала, не относящихся к ШИМ (non-PWM Waveform Generation modes), есть возможность принудительно запустить совпадение цифрового компаратора записью лог. 1 в бит Force Output Compare (FOC1x). Forcing Compare Match не установит флаг OCF1x и не приведет к перезагрузке или очистке таймера, однако уровень на выводе OC1x обновится, как если бы произошло реальное событие совпадения сравнения Compare Match (настройки бит COM1x1, COM1x0 определяют, как изменится уровень на выводе OC1x: он установится, сбросится или переключится в противоположное состояние).

Блокирование Compare Match записью в TCNT1. Все записи со стороны CPU в регистр TCNT1 будут блокировать любые совпадения Compare Match, которые произойдут на следующем такте таймера, даже когда таймер остановлен. Эта функция позволяет инициализировать OCR1x в то же самое значение, что и TCNT1, без срабатывания прерывания, когда разрешается тактирование таймера/счетчика.

Использование Output Compare Unit. Поскольку запись TCNT1 в любом режиме работы заблокирует все совпадения compare match на один такт таймера, есть риски при изменении TCNT1, когда используется любой из каналов Output Compare, независимо от того, работает таймер/счетчик, или нет. Если значение, записанное в TCNT1, равно значению OCR1x, то Compare Match будет потеряно, в результате чего получится неправильно сгенерированный сигнал. Не записывайте TCNT1 равным значению TOP в режимах ШИМ (PWM) с переменными значениями TOP. Compare Match для TOP будет проигнорировано, и счетчик продолжит счет до значения 0xFFFF. Подобным образом не записывайте значение TCNT1, равным BOTTOM, когда счетчик считает вниз.

Настройка OC1x должна быть выполнена перед установкой регистра Data Direction Register (DDR), чтобы соответствующая ножка порта работала как выход. Самый простой способ установки значения OC1x — использовать биты строба Force Output Compare (FOCnx) в режиме Normal. Регистр OC1x сохраняет свое значение, даже когда меняются режимы генерации сигнала (Waveform Generation modes).

Будьте внимательны, биты COM1x1, COM1x0 не имеют двойной буферизации вместе со значением сравнения. Изменение бит COM1x1, COM1x0 вступают в силу немедленно.

[Выход Compare Match]

Биты режима Compare Output (COM1x1, COM1x0) выполняют 2 функции. Генератор сигналов (waveform generator) использует биты COM1x1, COM1x0 для определения состояния Output Compare (OC1x) на следующем событии совпадения Compare Match. Вторая функция бит COM1x1, COM1x0 это управление источником сигнала выхода вывода OC1x. Рис. 19-5 показывает упрощенную схему логики, на которую влияют настройки бит COM1x1, COM1x0. Регистры I/O, биты I/O и внешние выводы I/O на этом рисунке показаны жирным шрифтом. Показаны только те части регистров GPIO (регистры DDR и PORT), на которые влияют биты COM1x1, COM1x0. Когда ссылаются на состояние OC1x, имеется в виду внутреннее состояние регистра OC1x, а не вывода OC1x. Если происходит сброс системы (System Reset), то регистр OC1x сбрасывается в 0.

Рис. 19-5. Схема формирования выходного сигнала Compare Match.

Функция GPIO ножки порта (программный цифровой ввод/вывод) отменяется функцией Output Compare (OC1x) генератора сигналов (waveform generator), если установлен любой из бит COM1x1, COM1x0. Однако направление работы ножки порта OC1x (вход или выход) все еще контролируется соответствующим битом регистра DDR. Таким образом, если требуется на выводе OC1x формировать выходной сигнал, то соответствующий разряд регистра DDR (DDR_OC1x) должен быть установлен, иначе значение OC1x не появится на выходе порта. Функция переназначения порта в основном не зависит от Waveform Generation mode, но есть некоторые исключения. За подробностями обращайтесь к таблицам 19-2, 19-3 и 19-4.

Дизайн логики вывода Output Compare позволяет инициализацию состояния OC1x перед разрешением работы выхода. Обратите внимание, что некоторые настройки бит COM1x1, 0 зарезервированы для определенных режимов работы (см. ниже во врезках описание регистров).

Биты COM1x1, COM1x0 не оказывают влияния на узел Input Capture.

Compare Output Mode и генерация сигналов. Генератор сигналов (waveform generator) использует биты COM1x1, COM1x0 по-разному в режимах Normal, CTC и PWM. Для всех режимов настройка COM1x1, COM1x0 = 0 говорит генератору сигналов, что не нужно выполнять никаких действий с регистром OC1x на следующем событии Compare Match. Для действий, связанных с выводом сигнала сравнения (compare output) в режимах не ШИМ (non-PWM modes) см. таблицу 19-2. Для режима быстрого ШИМ (fast PWM mode) см. таблицу 19-3, и для режима ШИМ с корректными частотой и фазой (режим phase correct PWM и режим phase and frequency correct PWM) см. таблицу 19-4.

Изменение состояния бит COM1x1, COM1x0 даст эффект на первом Compare Match после того, как эти биты были записаны. Для режимов не ШИМ (non-PWM modes) действие может быть немедленно применено использованием бит строба FOC1x.

Режим быстрого ШИМ (fast PWM mode) больше всего подходит для синтеза сигналов звуковых частот. Режимы с корректной фазой (phase correct PWM и phase and frequency correct PWM) подойдут только для формирования медленно изменяющихся или статичных сигналов — по принципу настроил и забыл, без изменения параметров генерации на лету в обработчике прерывания. Причина в том, что для обработчика прерывания этих режимов (по флагу переполнения или флагу совпадения) в предельных значениях регулирования остается слишком мало времени на проведение каких-либо серьезных вычислений.

[Режимы работы]

Режим работы (т. е. поведение таймера/счетчика и выводов Output Compare) определяется комбинацией настроек бит Waveform Generation mode (WGM13:0) и Compare Output mode (COM1x1, COM1x0). Биты Compare Output mode никак не влияют на последовательность счета, в то время как биты Waveform Generation mode на это влияют. Биты COM1x1, COM1x0 управляют, должен ли быть выход ШИМ проинвертирован или нет (inverted PWM или non-inverted PWM). Для не ШИМ режимов (non-PWM modes) биты COM1x1, COM1x0 определяют, как будет изменять свой уровень OC1x на событиях Compare Match: установка, очистка или переключение в противоположное состояние (см. предыдущую главу «Выход Compare Match»).

Подробную информацию с диаграммами времени см. главу «Диаграммы сигналов таймера/счетчика».

Normal Mode. Самый простой режим работы это режим Normal (WGM13:0 = 0). В этом режиме счетчик всегда считает вверх (инкрементируется), и очистка счетчика не происходит. Счетчик просто переваливает через свое максимальное 16-битное значение (MAX = 0xFFFF), и затем перезапускает счет со значения BOTTOM (0x0000). В режиме Normal флаг переполнения Timer/Counter Overflow Flag (TOV1) установится на том же самом тайте таймера, на котором регистр счетчика TCNT1 станет нулем. В этом случае флаг TOV1 ведет себя наподобие 17-го бита счетчика, кроме случаев, если он только установлен и после этого не очищен. Однако в комбинации с использованием прерывания переполнения таймера флаг TOV1 будет автоматически очищаться, и аппаратная разрешающая способность таймера может быть увеличена программно. В режиме Normal нет никаких специальных случаев, требующих учета, новое значение счетчика может быть записано в любой момент времени.

Блок Input Capture в режиме Normal прост в использовании. Однако рассмотрите ситуации, когда максимальный измеряемый интервал времени превышает разрешающую способность счетчика. Если интервал между событиями слишком большой, то следует использовать прерывание переполнения, или нужно настроить прескалер таким образом, чтобы изменить разрешающую способность блока захвата.

Блоки Output Compare могут использовать для генерации прерываний в некоторое заданное время. Использование Output Compare для генерации сигналов в режиме Normal не рекомендуется, поскольку это будет занимать слишком много процессорного времени по сравнению с другими режимами.

Clear Timer on Compare Match (CTC) Mode. В этом режиме (очистка таймера при совпадении сравнения, WGM13:0 = 4 или 12), регистр OCR1A или ICR1 используется для манипулирования разрешающей способностью счетчика. В режиме CTC счетчик очищается (сбрасывается в 0), когда значение счетчика (TCNT1) совпадает либо с OCR1A (WGM13:0 = 4), либо с ICR1 (WGM13:0 = 12). OCR1A или ICR1 определяют верхнее значение для счетчика, и таким образом его разрешающую способность. Этот режим дает больше контроля над выходной частотой Compare Match. Он также упрощает операцию подсчета внешних событий.

На рис. 19-6 ниже показаны диаграммы времени работы в режиме CTC. Значение счетчика (TCNT1) растет, пока не произойдет совпадение сравнения Compare Match со значением либо OCR1A, либо ICR1, после чего счетчик (TCNT1) очищается.

Рис. 19-6. Диаграмма времени работы CTC Mode.

Может генерироваться прерывание каждый раз, когда счетчик достигает значения TOP, путем использования флага OCF1A или ICF1, в зависимости от того, какой регистр использовался для определения значения TOP. Если прерывание разрешено, то подпрограмма обработчика прерывания (ISR) может использоваться для обновления значения TOP. Однако изменение значения TOP на значение, близкое к BOTTOM,

Когда счетчик работает без прескалера или с малым коэффициентом деления прескалера (т. е. тактируется высокой частотой), следует обратить внимание на то, что режим CTC не имеет функции двойной буферизации. Поэтому если новое значение, которое было записано в OCR1A или ICR1, меньше, чем  текущее значение TCNT1, то счетчик пропустит Compare Match. После этого пропуска счетчик продолжит счет до своего максимального 16-битного значения (0xFFFF) и перевалит в 0x0000 перед тем как возникнет Compare Match. Во многих случаях такое поведение может быть нежелательным. Альтернативой будет режим fast PWM с использованием OCR1A для определения TOP (WGM13:0 = 15), поскольку в этом случае OCR1A получит двойную буферизацию.

Для генерации сигнала в режиме CTC выход OC1A может быть установлен на переключение своего логического уровня на каждом Compare Match путем установки битов Compare Output mode в режим переключения (toggle mode COM1A1:0 = 1). Значение OC1A не появится на выводе порта, соответствующего сигналу OC1A, пока этот порт не будет установлен как выход настройкой регистра DDR (DDR_OC1A = 1). Максимальная частота на выходе fOCnA получится равной fclk_I/O/2, когда OCR1A установлен в 0 (0x0000). Частота выхода fOCnA определяется по формуле:

            fclk_I/O
fOC1A = ——————-
        2 · N · (1 + OCR1A)

N представляет коэффициент деления прескалера (1, 8, 64, 256 или 1024).

Как и в режиме Normal, флаг переполнения TOV1 установится на том же самом такте таймера, на котором значение счетчика перейдет от MAX к 0x0000.

Fast PWM Mode. Режим быстрой ШИМ (fast Pulse Width Modulation, или fast PWM mode, WGM13:0 = 5, 6, 7, 14 или 15) предоставляет опцию генерации ШИМ повышенной частоты. Fast PWM отличается от других опций генерации ШИМ своим однотактным принципом работы. Счетчик считает от BOTTOM до TOP, после чего перезапускается со значения BOTTOM. В режиме не инверсного вывода при совпадении сравнения (noninverting Compare Output mode) выход Output Compare (OC1x) очищается, когда произошло совпадения Compare Match между TCNT1 и OCR1x, и установится на значении BOTTOM. В режиме инверсии (inverting Compare Output mode) все наоборот, выход установится при Compare Match, и сбросится на BOTTOM. Из-за однотактного принципа работы частота ШИМ в режиме fast PWM может быть в 2 раза выше, чем в режимах phase correct PWM и phase and frequency correct PWM, которые работают по двухтактному принципу. Эта высокая частота делает режим fast PWM хорошо подходящим для регулирования мощности, выпрямления тока и и приложений ЦАП (DAC). Высокая частота позволяет применять внешние компоненты (индуктивности, конденсаторы) малых размеров, уменьшая общую стоимость системы.

Разрешающая способность fast PWM может быть зафиксирована на 8, 9 или 10 битах, или может быть определена либо ICR1, либо OCR1A. Минимальная допустимая разрешающая способность составляет 2 бита (ICR1 или OCR1A в значении 0x0003), и максимальная 16 бит (ICR1 или OCR1A в значении MAX). Разрешающая способность ШИМ в битах вычисляется по формуле:

         log(TOP+1)
RFPWM = ————-
           log(2)

В режиме fast PWM счетчик инкрементируется, пока его значение не достигнет одного из фиксированных значений 0x00FF, 0x01FF или 0x03FF (WGM13:0 = 5, 6 или 7), значения в ICR1 (WGM13:0 = 14), или значения в OCR1A (WGM13:0 = 15). Затем счетчик будет очищен на следующем такте таймера. Диаграмма режима fast PWM показана на рис. 19-7 ниже. Здесь показан режим fast PWM, когда OCR1A или ICR1 используется для определения TOP. Значение TCNT1 показано на гистограмме, чтобы проиллюстрировать его однотактный принцип работы. Эта диаграмма включает не инверсный (non-inverted PWM) и инверсный (inverted PWM) выходные сигналы ШИМ. Маленькие горизонтальные черточки показывают совпадения между значениями OCR1x и TCNT1. Флаг прерывания OC1x установится, когда произойдет Compare Match.

Рис. 19-7. Диаграмма времени Fast PWM Mode.

Флаг переполнения счетчика TOV1 установится каждый  раз, когда счетчик достигает TOP. Дополнительно установится флаг OCF1A или ICF1 на том же такте таймера, на каком установится флаг TOV1, когда либо OCR1A, либо ICR1 используется для определения значения TOP. Если одно из прерываний разрешено, обработчик прерывания может использоваться для обновления значения TOP и значения сравнения.

Когда меняется значение TOP, программа должна гарантировать, что новое значение TOP больше или равно значению всех регистров сравнения. Если TOP меньше, чем любой из регистров Compare, то совпадение Compare Match никогда не произойдет при счете между TCNT1 и OCR1x. Имейте в виду, что когда используются фиксированные значения TOP, то не используемые биты маскируются нулями, когда записывается любой из регистров OCR1x (т. е. при использовании фиксированных значений TOP условие TOP >= OCR1x выполнится автоматически).

Процедура обновления ICR1 отличается от обновления OCR1A, когда они используются для определения значения TOP. Регистр ICR1 не имеет двойной буферизации. Это означает, что если ICR1 меняется на малое значение, когда счетчик работает без прескалера или с малым коэффициентом деления прескалера, то есть риск, что новое записанное значение ICR1 окажется меньше текущего значения TCNT1. В результате счетчик пропустит Compare Match на этом значении TOP, продолжая счет до значения MAX (0xFFFF) и вернется к начальному значению 0x0000 перед возникновением Compare Match. Однако регистр OCR1A имеет двойную буферизацию. Это позволяет безопасно записать I/O ячейку OCR1A в любой момент времени. Когда I/O ячейка OCRnA записана, записанное значение будет помещено в буферный регистр OCR1A. Затем регистр OCR1A Compare будет обновлен значением из буферного регистра на следующем такте таймера после того, как TCNT1 совпадет с TOP. Обновление произойдет на том же такте таймера, на каком очистится TCNT1 и установится флаг TOV1.

Регистр ICR1 для определения TOP хорошо работает при использовании фиксированных значений TOP (т. е. когда ICR1 постоянно и не меняется). При использовании ICR1 регистр OCR1A свободен для применения в формировании ШИМ-сигнала на OC1A. Однако если базовая частота ШИМ активно меняется (путем изменения значения TOP), то очевидно, что использование OCR1A в качестве TOP намного более лучший выбор, потому что OCR1A имеет двойную буферизацию.

В режиме fast PWM узлы сравнения позволяют генерировать сигналы ШИМ на выводах OC1x. Установка битов COM1x1, COM1x0 в значение 2 будет давать не инверсный ШИМ (non-inverted PWM), и при установке COM1x1, COM1x0 в значение 3 будет генерироваться инверсный ШИМ (inverted PWM), см. таблицу 19-3. Сигнал OC1x появится на ножке порта только тогда, когда его направление работы настроено регистром DDR как выход (должен быть установлен в единицу соответствующий бит DDR_OC1x). Сигналы ШИМ генерируются установкой (или очисткой) OC1x при Compare Match (совпадении) между OCR1x и TCNT1, и очисткой (или установкой) OC1x на такте таймера, когда его счетчик очищается (автоматически меняет свое значение от TOP к BOTTOM).

Частота ШИМ может быть вычислена по следующей формуле:

             fclk_I/O
fOC1xPWM = ————-
           N · (1 + TOP)

N представляет коэффициент деления прескалера (1, 8, 64, 256 или 1024).

Предельные значения регистра OCR1x представляют специальные случаи, когда генерируется ШИМ в режиме fast PWM. Если OCR1x установлен равным BOTTOM (0x0000), то на выходе получатся короткие пики для каждого TOP+1 такта таймера. Установка OCR1x равным TOP приведет к постоянному уровню лог. 1 или лог. 0 (в зависимости от полярности/инверсии OC1x, что устанавливается битами COM1x1, COM1x0).

Генерация частоты прямоугольного сигнала (со скважностью 50%) в режиме fast PWM может быть осуществлена установкой OC1A в режим переключения уровня на каждом Compare Match (COM1A1:0 = 1). Это применимо только когда OCR1A используется для определения значения TOP (WGM13:0 = 15). Генерируемый сигнал будет иметь максимальную частоту fOC1A = fclk_I/O/2, когда OCR1A установлен в ноль (0x0000). Эта функция подобна переключению OC1A на противоположное состояние в режиме CTC, за исключением того, что в режиме fast PWM разрешена функция двойной буферизации в узле Output Compare.

Phase Correct PWM Mode. Режим генерации ШИМ с корректной фазой (phase correct PWM mode, WGM13:0 = 1, 2, 3, 10 или 11) предоставляет опцию генерации качественного ШИМ с высокой разрешающей способностью. Режим phase correct PWM, как и режим phase and frequency correct PWM, основан на двухтактном принципе работы. Счетчик считает сначала от BOTTOM (0x0000) до TOP, и затем обратно от TOP до BOTTOM. В не инверсном (non-inverting Compare Output) режиме выход Output Compare (OC1x) очищается при совпадении Compare Match между TCNT1 и OCR1x, когда идет счет вверх, и устанавливается при Compare Match, когда идет счет вниз. В инверсном режиме все наоборот. Двухтактный принцип работы понижает максимальную рабочую частоту ШИМ вдвое по сравнению с однотактным принципом. Однако из-за симметричности счета в двухтактных режимах ШИМ эти режимы лучше всего подходят для приложений управления моторами.

Разрешающая способность ШИМ в режиме phase correct PWM может быть фиксирована на разрядности 8, 9 или 10 бит, или может быть определено значением ICR1 или OCR1A. Минимально допустимая разрешающая способность 2 разряда (ICR1 или OCR1A в значении 0x0003), и максимальная разрешающая способность 16 разрядов (ICR1 или OCR1A в значении MAX). Разрешающая способность ШИМ в битах тогда может быть рассчитана по следующей формуле:

         log(TOP+1)
RPCPWM = ————-
           log(2)

В режиме phase correct PWM счетчик инкрементируется до тех пор, пока не достигнет одного из фиксированных значений 0x00FF, 0x01FF или 0x03FF (WGM13:0 = 1, 2 или 3), значения ICR1 (WGM13:0 = 10) или значения OCR1A (WGM13:0 = 11). По достижении TOP счетчик меняет направление счета. Значение TCNT1 будет равно TOP в течение одного такта таймера. Диаграмма времени phase correct PWM показана на рис. 19-8. Этот рисунок показывает режим phase correct PWM, когда OCR1A или ICR1 используются для определения TOP. Значение TCNT1 на этой диаграмме времени показано как гистограмма в качестве иллюстрации двухтактного принципа работы. Диаграмма включает не инверсный и инверсный выходные сигналы ШИМ. Маленькие горизонтальные черточки на склонах гистограммы обозначают значения TCNT1, когда происходят совпадения между OCR1x и TCNT1. Флаг прерывания OCF1x установится, когда произойдет Compare Match.

Рис. 19-8. Диаграмма времени Phase Correct PWM Mode.

Флаг переполнения TOV1 установится всякий раз, когда счетчик достигнет BOTTOM. Когда либо OCR1A, либо ICR1 используются для определения значения TOP, флаги OC1A или ICF1 соответственно установятся на том же самом такте таймера, на каком регистры OCR1x обновятся значением из двойного буфера (на TOP). Флаги прерывания могут использоваться для генерации прерывания каждый раз, когда счетчик достигает значения TOP или BOTTOM.

Когда меняется значение TOP, программа должна гарантировать, что новое значение TOP окажется больше или равно значению всех регистров сравнения (Compare Registers). Если TOP будет меньше, чем любой из регистров сравнения, то Compare Match никогда не произойдет между TCNT1 и OCR1x. Обратите внимание, что когда используются фиксированные значения TOP, то когда записываются регистры OCR1x, их не используемые биты маскируются нулями. Как иллюстрирует третий период диаграммы рис. 19-8, активное изменение TOP, когда таймер/счетчик считает в режиме Phase Correct, может привести к несимметричному выходному сигналу. Причину этого можно найти во времени обновления регистра OCR1x. Поскольку обновление OCR1x происходит на TOP, период PWM начинается и заканчивается на TOP. Это подразумевает, что длина падающего склона определяется предыдущим значением TOP, в то время как длина склона нарастания определяется новым значением TOP. Когда эти два значения различаются для двух склонов, два наклона периода будут отличаться по длительности. Эта разница в длине в результате приведет к несимметричному выходному сигналу.

Рекомендуется использовать режим корректной фазы и частоты (Phase and Frequency Correct mode) вместо режима корректной фазы (Phase Correct mode), когда меняется значение TOP в процессе счета таймера счетчика. Когда используется статическое TOP (т. е. не изменяющееся значение предела счета), то практически нет никакой разницы в работе этих двух режимов.

В режиме phase correct PWM узлы сравнения позволяют генерацию сигналов ШИМ на выводах OC1x. Установка бит COM1x1, COM1x0 в значение 2 даст не инверсный ШИМ (non-inverted PWM), и инверсный ШИМ (inverted PWM) может генерироваться установкой COM1x1, COM1x0 в значение 3 (см. таблицу 19-4). Сигнал OC1x появится на ножке порта только тогда, когда его направление работы настроено регистром DDR как выход (должен быть установлен в единицу соответствующий бит DDR_OC1x). Сигнал ШИМ генерируется установкой (или очисткой) OC1x на совпадении Compare Match между OCR1x и TCNT1, когда счетчик считает вверх, и очищает (или устанавливает) OC1x на совпадении Compare Match между OCR1x и TCNT1, когда считчик считает вниз. Частота ШИМ на выходе, когда используется phase correct PWM, может быть вычислена по следующей формуле:

               fclk_I/O
fOC1xPCPWM = ————-
              2 · N · TOP

N представляет коэффициент деления прескалера (1, 8, 64, 256 или 1024).

Предельные значения для регистра OCR1x представляют специальные случаи, когда генерируется ШИМ в режиме phase correct PWM. Если OCR1x установлено равным BOTTOM, то на выходе будет постоянный лог. 0, и если OCR1x установлено равным значению TOP то на выходе будет постоянно лог. 1, когда ШИМ не инвертирован (non-inverted PWM). Для инверсного ШИМ эти выходные значения поменяются на противоположные.

Если OCR1A используется для определения значения TOP (WGM13:0 = 11), и COM1A1:0 = 1, то выход OC1A будет переключаться со скважностью 50%.

Phase and Frequency Correct PWM Mode. Режим корректной фазы и частоты ШИМ, или phase and frequency correct PWM mode (WGM13:0 = 8 или 9) предоставляет опцию формирования качественного ШИМ с высокой разрешающей способностью. Режим phase and frequency correct, как и режим phase correct PWM основан на двухтактном принципе работы. Счетчик считает с повторениями от BOTTOM (0x0000) до TOP, и затем от TOP до BOTTOM. В не инвертирующем режиме (non-inverting Compare Output mode) сигнал Output Compare (OC1x) очищается при совпадении значений (Compare Match) TCNT1 и OCR1x при счете вверх, и устанавливается при Compare Match во время счета вниз. В режиме инверсии Compare Output уровни OCR1x меняются на противоположные. Двухтактный принцип формирования ШИМ дает максимальную частоту ШИМ в 2 раза ниже, чем однотактный принцип работы. Однако из-за симметричности сигнала двухтактных режимов ШИМ эти режимы лучше подходят для приложений управления моторами.

Главное отличие режимов phase correct PWM и phase and frequency correct PWM в моменте времени, когда регистр OCR1x обновляется содержимым буферного регистра OCR1x (см. рисунки 19-8 и 19-9).

Разрешающая способность ШИМ для режима phase and frequency correct PWM может быть определена либо ICR1, либо OCR1A. Минимальная допустимая разрешающая способность 2 бита (ICR1 или OCR1A в значении 0x0003), и максимальная разрешающая способность 16 бит (ICR1 или OCR1A в значении MAX). Разрешающая способность ШИМ в битах может быть вычислена по формуле:

          log(TOP+1)
RPFCPWM = ————
            log(2)

В режиме phase and frequency correct PWM счетчик инкрементируется, пока его значение не совпадет с ICR1 (WGMn3:0 = 8) или с OCR1A (WGM13:0 = 9). Тем самым счетчик достиг TOP, после чего меняет направление счета. Значение TCNT1 будет равно TOP в течение одного такта таймера. Диаграмма сигналов режима phase correct and frequency correct PWM показана на рис. 19-9. Рисунок показывает режим phase and frequency correct PWM, когда OCR1A или ICR1 используются для определения TOP. Значение TCNT1 показано как гистограмма, что иллюстрирует двухтактный принцип работы. Диаграмма включает не инверсный и инверсный выходы ШИМ. Маленькие горизонтальные черточки помечают на склонах изменения TCNT1 моменты совпадения OCR1x и TCNT1 (Compare Match). Флаг прерывания OCF1x будет установлен, когда произойдет Compare Match.

Рис. 19-9. Диаграммы времени Phase and Frequency Correct PWM Mode.

Флаг переполнения TOV1 установится на том же такте таймера, на каком регистры OCR1x обновятся значением из двойного буфера (в момент, когда счетчик TCNT1 становится равным BOTTOM). Когда OCR1A или ICR1 используются для определения значения TOP, установится флаг OC1A или ICF1, когда TCNT1 достигает TOP. Могут использоваться флаги прерывания для генерации прерывания каждый раз, когда счетчик достигает значения TOP или BOTTOM.

Когда меняется значение TOP, программа должна гарантировать, что новое значение TOP больше или равно всем регистрам сравнения. Если же значение TOP окажется меньше любого из регистров сравнения, то совпадение Compare Match никогда не произойдет между TCNT1 и OCR1x.

Как видно на диаграмме рис. 19-9, все периоды ШИМ симметричны, что отличается от режима Phase Correct PWM. Поскольку регистры OCR1x обновляются на BOTTOM, длительность склонов спада и нарастания всегда будет одинаковой. Это дает симметричные выходные импульсы, и таким образом корректную частоту.

Использование регистра ICR1 для определения TOP хорошо работает, когда используются постоянные (которые не меняются в процессе работы) значения TOP. При использовании ICR1 регистр OCR1A освобождается для генерации ШИМ на выводе OC1A. Однако если базовая частота ШИМ активно меняется путем изменения значения TOP, использование OCR1A в качестве TOP очевидно будет намного лучшим выбором из-за наличия двойной буферизации OCR1A.

В режиме phase and frequency correct PWM блоки сравнения позволяют генерировать сигналы ШИМ на выводах OC1x. Установка бит COM1x1, COM1x0 в значение 2 будет генерировать не инверсный ШИМ, и установка COM1x1, COM1x0 в значение 3 будет генерировать инверсный ШИМ (см. таблицу 19-4). Реальные значения OC1x будут выводиться на ножку порта только если направление работы этой ножки порта настроено регистром DDR на выход(DDR_OC1x == лог. 1). Сигнал ШИМ генерируется путем установки (или очистки) OC1x при совпадении сравнения Compare Match между OCR1x и TCNT1, когда счетчик считает вверх, и очистки (или установки) OC1x при Compare Match между OCR1x и TCNT1, когда счетчик считает вниз. Частота ШИМ режима phase and frequency correct PWM может быть вычислена по формуле:

                fclk_I/O
fOC1xPFCPWM = —————
               2 · N · TOP

N представляет коэффициент деления прескалера (1, 8, 64, 256 или 1024).

Предельные значения регистра OCR1x представляют специальные случаи, когда генерируется ШИМ в режиме phase and frequency correct PWM. Если OCR1x установлен равным BOTTOM, то в режиме не инверсного ШИМ на выходе будет постоянно лог. 0, и если OCR1x установлен равным TOP, но на выходе будет постоянно лог. 1. Для инверсного ШИМ выходные сигналы получат противоположные значения.

Если OCR1A используется для определения значения TOP (WGM13:0 = 9), и COM1A1:0 = 1, то выход OC1A будет переключаться со скважностью 50%.

[Диаграммы сигналов таймера/счетчика]

Таймер/счетчик имеет синхронный дизайн. На следующих рисунках частота тактов тактов таймера (clkT1) показана как сигнал разрешения тактирования. Рисунки включают информацию о том, когда устанавливаются флаги прерывания, и когда обновляется регистр OCR1x значением буфера OCR1x (только для режимов, где задействовано двойная буферизация). Следующий рисунок показывает диаграмму времени для установки OCF1x.

Рис. 19-10. Установка OCF1x, без деления частоты прескалером.

Следующий рисунок показывает те же самые диаграммы времени, но с разрешенным прескалером.

Рис. 19-11. Установка OCF1x, прескалер делит частоту на 8 (fclk_I/O/8).

Следующий рисунок показывает в разных режима последовательность счета при значениях, близких к TOP. Когда используется режим phase and frequency correct PWM, регистр OCR1x обновляется на BOTTOM. Диаграммы времени будут такими же, но TOP должнен быть заменен на BOTTOM, TOP-1 на BOTTOM+1, и так далее. Тот же самый принцип переименования применим для режимов, когда флаг TOV1 устанавливается на BOTTOM.

Рис. 19-12. Диаграмма таймера счетчика без деления частоты прескалером.

Следующий рисунок показывает те же данные времени, но с разрешенным прескалером.

Рис. 19-13. Диаграмма таймера счетчика, прескалер делит частоту на 8 (fclk_I/O/8).

[Описание регистров]

Адресация регистров. Когда используются специальные инструкции ассемблера IN и OUT, для обращения к регистрам I/O должны использоваться адреса в диапазоне 0x00 .. 0x3F. Когда к тем же регистрам I/O адресация осуществляется с помощью инструкций LD и ST (адресация через пространство данных), то к этим адресам должна быть добавлена константа 0x20.

Регистр A управления таймером/счетчиком 1, имеет адрес I/O 0x2F (при адресации через пространство данных адрес 0x4F), состояние после сброса 0.

Разряд 7 6 5 4 3 2 1 0  
  COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10 TCCR1A
Чтение/запись R/W R/W R/W R/W W W R/W R/W  
Сброс 0 0 0 0 0 0 0 0  

COM1A1 (биты 7, 6): Compare Output Mode for Channel A

Определяют режим вывода при сравнении для канала A.

COM1B1 (биты 5, 4): Compare Output Mode for Channel B [n = 1:0]

Определяют режим вывода при сравнении для канала B.

COM1A1:0 и COM1B1:0 управляют поведением внешних выводов Output Compare pins (OC1A и OC1B соответственно). Если один из битов COM1A1:0 установлен в лог. 1, то для выхода OC1A отменяется нормальный GPIO-функционал соответствующей ножки порта PD5. Если один или оба бита COM1B1:0 установлены в лог. 1, то для выхода OC1B отменяется нормальный GPIO-функционал соответствующей ножки порта PD4. Однако следует иметь в виду, что регистр настройки направления работы ножек порта (Data Direction Register, DDR) все еще оказывает соответствующее влияние на работу выходов OC1A или OC1B (PD5 или PD4). Поэтому если требуется выводит аппаратно формируемый сигнал сравнения на выводы OC1A или OC1B, то для разрешения работы выходного драйвера также следует установить соответствующие биты PD5 или PD4 в регистре DDR.

Когда сигнал OC1A или OC1B выводится на ножку порта, функция бит COM1x1, COM1x0 (x заменяется на A или B) зависит от настроек бит WGM13:0. В таблице 19-2 показан функционал бит COM1x1, COM1x0, когда биты WGM13:0 установлены в режим Normal или CTC (режимы non-PWM, т. е. не относящиеся к формированию ШИМ).

Таблица 19-2. Compare Output Mode (режим вывода совпадения сравнения), режимы non-PWM.

COM1A1/COM1B1 COM1A0/COM1B0 Функция
0 0 Нормальная работа порта GPIO, сигналы OC1A/OC1B отключены от ножки порта.
0 1 Переключение уровня OC1A/OC1B в противоположное состояние при Compare Match.
1 0 Очистка уровня OC1A/OC1B (установка выхода в лог. 0) при Compare Match.
1 1 Установка уровня OC1A/OC1B (установка выхода в лог. 1) при Compare Match.

Таблица 19-3 показывает функционал бит COM1x1, COM1x0, когда биты WGM13:0 установлены в режим fast PWM.

Таблица 19-3. Compare Output Mode, режим Fast PWM(1).

COM1A1/COM1B1 COM1A0/COM1B0 Функция
0 0 Нормальная работа порта GPIO, сигналы OC1A/OC1B отключены от ножки порта.
0 1 WGM13:0 = 15: переключение в противоположный уровень OC1A при Compare Match, OC1B отключен (нормальная работа порта). Для всех других настроек WGM1 будет задана нормальная работа порта, OC1A/OC1B отключены от ножки порта.
1 0 Очистка уровня OC1A/OC1B при Compare Match, установка OC1A/OC1B на BOTTOM (не инверсный режим).
1 1 Установка уровня OC1A/OC1B при Compare Match, очистка OC1A/OC1B на BOTTOM (инверсный режим).

Примечание (1): имеет место специальный случай, когда OCR1A/OCR1B равен TOP, и установлен COM1A1/COM1B1. В этом случае Compare Match игнорируется, но установка или очистка происходят на BOTTOM. Подробнее см. описание режима Fast PWM.

Таблица 19-4 показывает функционал бит COM1x1, COM1x0, когда биты WGM13:0 установлены в режим phase correct PWM или режим phase and frequency correct PWM.

Таблица 19-4. Compare Output Mode, режим Phase Correct PWM и Phase and Frequency Correct PWM(2).

COM1A1/COM1B1 COM1A0/COM1B0 Функция
0 0 Нормальная работа порта GPIO, сигналы OC1A/OC1B отключены от ножки порта.
0 1 WGM13:0 = 9 или 14: переключение в противоположный уровень OC1A при Compare Match, OC1B отключен (нормальная работа порта). Для всех других настроек WGM1 будет задана нормальная работа порта, OC1A/OC1B отключены от ножки порта.
1 0 Очистка уровня OC1A/OC1B на Compare Match при счете вверх, установка OC1A/OC1B на Compare Match при счете вниз (не инверсный режим).
1 1 Установка уровня OC1A/OC1B на Compare Match при счете вверх, очистка OC1A/OC1B на Compare Match при счете вниз (инверсный режим).

Примечание (2): имеет место специальный случай, когда OCR1A/OCR1B равен TOP, и установлен COM1A1/COM1B1. Подробнее см. описание режима Phase Correct PWM.

FOC1A (бит 3): Force Output Compare for channel A

Принудительное срабатывание совпадения сравнения для канала A.

FOC1B (бит 2): Force Output Compare for channel B

Принудительное срабатывание совпадения сравнения для канала B.

Биты FOC1A/FOC1B активны только когда биты WGM13:0 задают режим non-PWM (не относящийся к формированию ШИМ режим). Однако для гарантирования совместимости с будущими моделями микроконтроллеров эти биты должны устанавливаться в 0, когда TCCR1A записывается в режиме ШИМ. Когда в бит FOC1A/FOC1B записывается лог. 1, немедленно происходит Compare Match в узле генерации сигнала, и выход OC1A/OC1B поменяет свое состояние в соответствии с настройкой бит COM1x1, COM1x0. Обратите внимание, что биты FOC1A/FOC1B реализованы как стробы. Значение в битах COM1x1, COM1x0 определяют эффект от принудительного сравнения.

Строб FOC1A/FOC1B не будет генерировать ни прерывание, ни очистку таймера в режиме Clear Timer on Compare Match (CTC) при использовании OCR1A в качестве TOP.

Биты FOC1A/FOC1B всегда читаются как 0.

WGM11, WGM10 (биты 1, 0): Waveform Generation Mode

Вместе с битами WGM13, WGM12 из регистра TCCR1B эти биты управляют последовательностью счета, источником для TOP и типом используемой генерации сигнала, см. таблицу 19-5. Режимы, поддерживаемые узлом таймера/счетчика: Normal mode (counter), Clear Timer on Compare match (CTC) mode, и также 3 типа режимов ШИМ (Pulse Width Modulation, PWM), см. описание режимов в главе «Режимы работы».

Таблица 19-5. Описание функционала бит управления режимом генерации сигнала (Waveform Generation).

Mode WGM13 WGM12
(CTC1)
WGM11
(PWM11)
WGM10
(PWM10)
Режим работы таймера/счетчика(3) TOP Когда обновляется OCR1x Когда устанавливается TOV1
0 0 0 0 0 Normal 0xFFFF Немедленно MAX
1 0 0 0 1 PWM, Phase Correct, 8-bit 0x00FF TOP BOTTOM
2 0 0 1 0 PWM, Phase Correct, 9-bit 0x01FF TOP BOTTOM
3 0 0 1 1 PWM, Phase Correct, 10-bit 0x03FF TOP BOTTOM
4 0 1 0 0 CTC OCR1A Немедленно MAX
5 0 1 0 1 Fast PWM, 8-bit 0x00FF BOTTOM TOP
6 0 1 1 0 Fast PWM, 9-bit 0x01FF BOTTOM TOP
7 0 1 1 1 Fast PWM, 10-bit 0x03FF BOTTOM TOP
8 1 0 0 0 Phase and Frequency Correct PWM ICR1 BOTTOM BOTTOM
9 1 0 0 1 OCR1A BOTTOM BOTTOM
10 1 0 1 0 Phase Correct PWM ICR1 TOP BOTTOM
11 1 0 1 1 OCR1A TOP BOTTOM
12 1 1 0 0 CTC ICR1 Немедленно MAX
13 1 1 0 1 Зарезервировано
14 1 1 1 0 Fast PWM ICR1 BOTTOM TOP
15 1 1 1 1 OCR1A BOTTOM TOP

Примечание (3): столбец Mode показывает номер режима. Имена бит CTC1, PWM11 и PWM10 устарели, вместо них используйте имена WGM12, WGM11, WGM10. Однако функционал и место размещения этих бит совместимы с предыдущими версиями таймера.

Регистр B управления таймером/счетчиком 1, имеет адрес I/O 0x2E (при адресации через пространство данных адрес 0x4E), состояние после сброса 0.

Разряд 7 6 5 4 3 2 1 0  
  ICNC1 ICES1   —   WGM13 WGM12 CS12 CS11 CS10 TCCR1B
Чтение/запись R/W R/W   —   R/W R/W R/W R/W R/W  
Сброс 0 0 0 0 0 0 0 0  

ICNC1 (бит 7): Input Capture Noise Canceler

Установка этого бита в лог. 1 активирует функцию подавления помех по входу (Input Capture Noise Canceler). Когда подавитель активирован, то сигнал на входе захвата (Input Capture pin, ICP1) проходит через цифровой фильтр. Чтобы сигнал прошел через этот фильтр, требуется 4 одинаковые следующие друг за другом выборки уровня ICP1. Таким образом, при работе подавителя помех Input Capture получает задержку на 4 такта генератора.

ICES1 (бит 6): Input Capture Edge Select

Этот бит выбирает, какой перепад на выводе ICP1 используется как триггер события захвата. Когда ICES1 == 0, в качестве события триггера захвата используется спад уровня лог. 1 -> лог. 0 (отрицательный перепад), и когда ICES1 == 1, в качестве триггера используется нарастание уровня лог. 0 -> лог. 1 (положительный перепад).

Когда срабатывает захват в соответствии с перепадом, настроенным битом ICES1, значение счетчика копируется в регистр захвата Input Capture Register (ICR1). Это событие также установит флаг Input Capture Flag (ICF1), и это может использоваться для прерывание Input Capture Interrupt, если оно разрешено.

Когда ICR1 используется как значение TOP (см. описание бит WGM13 .. WGM10 в описании регистров TCCR1A и TCCR1B), ICP1 отключен и соответственно функция захвата Input Capture запрещена.

WGM13 (бит 4): Waveform Generation Mode

WGM12 (бит 3): Waveform Generation Mode

Биты WGM13, WGM12 вместе с битами WGM11, WGM10 определяют режим генерации сигнала, см. описание регистра TCCR1A.

CS12, CS11, CS10 (биты 2..0): Clock Select

Эти 3 бита выбирают источник тактирования таймера/счетчика, см. рисунки 19-10, 19-11 и таблицу 19-6.

Таблица 19-6. Описание бит выбора тактов.

CS12 CS11 CS10 Описание
0 0 0 Источник тактов не задан (таймер/счетчик остановлен).
0 0 1 clkI/O (без делителя частоты)
0 1 0 clkI/O / 8 (с выхода делителя)
0 1 1 clkI/O / 64 (с выхода делителя)
1 0 0 clkI/O / 256 (с выхода делителя)
1 0 1 clkI/O / 1024 (с выхода делителя)
1 1 0 Внешний тактовый сигнал, поданный на вход T1. Тактирование происходит по срезу (спаду) уровня сигнала.
1 1 1 Внешний тактовый сигнал, поданный на вход T1. Тактирование происходит по фронту (нарастанию) уровня сигнала.

Если для тактирования Timer/Counter1 используются режимы с внешним выводом, то перепады на ножке T1 будут тактировать счетчик, даже если вывод T1 сконфигурирован как выход. Эта возможность позволяет программе подсчитывать внутренние события. 

[TCNT1L – Timer/Counter1 Low byte]

Младший байт таймера/счетчика, имеет адрес I/O 0x2C (при адресации через пространство данных адрес 0x4C), состояние после сброса 0.

[TCNT1H — Timer/Counter1 High byte]

Старший байт таймера/счетчика, имеет адрес I/O 0x2D (при адресации через пространство данных адрес 0x4D), состояние после сброса 0.

Эти два регистра TCNT1H и TCNT1L, скомбинированные в 16-битный регистр TCNT1, дает прямой доступ на операции чтения и записи к 16-битному счетчику таймера 1. Для гарантии атомарного доступа к половинкам регистра TCNT1 имеется специальный 8-битный регистр TEMP, и специальные способы доступа (подробнее см. [2]).

Модификация счетчика (TCNT1), когда счетчик считает, добавляет риск пропуска события совпадения сравнения Compare Match между TCNT1 и одним из регистров OCR1x.

Запись в регистр TCNT1 блокирует (устраняет) Compare Match на следующем такте таймера для всех узлов сравнения.

[OCR1AL – Output Compare Register 1 A Low byte]

Младший байт регистра сравнения канала A, имеет адрес I/O 0x2A (при адресации через пространство данных адрес 0x4A), состояние после сброса 0.

[OCR1AH – Output Compare Register 1 A High byte]

Старший байт регистра сравнения канала A, имеет адрес I/O 0x2B (при адресации через пространство данных адрес 0x4B), состояние после сброса 0.

Регистры сравнения содержат 16-битное значение, которое постоянно сравнивается со значением счетчика (TCNT1). Совпадение может использоваться для генерации прерывания Output Compare, или для генерации вывода сигнала (waveform output) на выводе OC1x.

Регистры сравнения 16-битные, поэтому для атомарного обращения к ним применяют специальные методы [2]. Регистры доступны на чтение и запись.

[OCR1BL – Output Compare Register 1 B Low byte]

Младший байт регистра сравнения канала B, имеет адрес I/O 0x28 (при адресации через пространство данных адрес 0x48), состояние после сброса 0.

[OCR1BH – Output Compare Register 1 B High byte]

Старший байт регистра сравнения канала B, имеет адрес I/O 0x29 (при адресации через пространство данных адрес 0x49), состояние после сброса 0.

См. описание регистров OCR1AH и OCR1AL.

[ICR1L – Input Capture Register 1 Low byte]

Младший байт регистра захвата, имеет адрес I/O 0x26 (при адресации через пространство данных адрес 0x46), состояние после сброса 0.

[ICR1H – Input Capture Register 1 High byte]

Старший байт регистра захвата, имеет адрес I/O 0x27 (при адресации через пространство данных адрес 0x47), состояние после сброса 0.

Регистр Input Capture обновляется значением счетчика (TCNT1) каждый раз, когда происходит событие изменения уровня на выводе ICP1 (или опционально на выходе компаратора Analog Comparator). ICR1 может использоваться для определения значения TOP для счетчика.

Регистр захвата 16-битный, поэтому для атомарного обращения к нему применяют специальные методы [2]. Регистры доступны на чтение и запись.

Регистр маски прерываний таймера/счетчика, имеет адрес I/O 0x39 (при адресации через пространство данных адрес 0x59), состояние после сброса 0.

Разряд 7 6 5 4 3 2 1 0  
    —     —   TICIE1 OCIE1A OCIE1B TOIE1   —     —   TIMSK
Чтение/запись   —     —   R/W R/W R/W R/W   —     —    
Сброс 0 0 0 0 0 0 0 0  

TICIE1 (бит 5): Timer/Counter1, Input Capture Interrupt Enable

Когда в этот бит записана лог. 1, и установлен флаг I в Status Register (SREG), т. е. когда глобально разрешены прерывания, то разрешено прерывание захвата по входу значения счетчика (Timer/Counter1 Input Capture Interrupt). Управление ходом выполнения программы будет передано по соответствующему вектору (см. раздел Interrupts даташита [1]), когда установится флаг ICF1, находящийся в регистре TIFR.

OCIE1A (бит 4): Timer/Counter1, Output Compare A Match Interrupt Enable

Когда в этот бит записана лог. 1, и установлен флаг I в Status Register (SREG), т. е. когда глобально разрешены прерывания, то разрешено прерывание по событию совпадения сравнения значения счетчика с регистром OCR1A (Timer/Counter1 Output Compare A match Interrupt). Управление ходом выполнения программы будет передано по соответствующему вектору (см. раздел Interrupts даташита [1]), когда установится флаг OCF1A, находящийся в регистре TIFR.

OCIE1B (бит 3): Timer/Counter1, Output Compare B Match Interrupt Enable

Когда в этот бит записана лог. 1, и установлен флаг I в Status Register (SREG), т. е. когда глобально разрешены прерывания, то разрешено прерывание по событию совпадения сравнения значения счетчика с регистром OCR1B (Timer/Counter1 Output Compare B match Interrupt). Управление ходом выполнения программы будет передано по соответствующему вектору (см. раздел Interrupts даташита [1]), когда установится флаг OCF1B, находящийся в регистре TIFR.

TOIE1 (бит 2): Timer/Counter1, Overflow Interrupt Enable

Когда в этот бит записана лог. 1, и установлен флаг I в Status Register (SREG), т. е. когда глобально разрешены прерывания, то разрешено прерывание по событию переполнения счетчика (Timer/Counter1 Overflow Interrupt). Управление ходом выполнения программы будет передано по соответствующему вектору (см. раздел Interrupts даташита [1]), когда установится флаг TOV1, находящийся в регистре TIFR.

Регистр флагов прерываний таймера/счетчика, имеет адрес I/O 0x38 (при адресации через пространство данных адрес 0x58), состояние после сброса 0.

Разряд 7 6 5 4 3 2 1 0  
    —     —   ICF1 OCF1A OCF1B TOV1   —     —   TIFR
Чтение/запись   —     —   R/W R/W R/W R/W   —     —    
Сброс 0 0 0 0 0 0 0 0  

ICF1 (бит 5): Timer/Counter1, Input Capture Flag

Этот флаг установится, когда произошло событие захвата по входу ICP1 (или по выходу ACO компаратора). Когда в Input Capture Register (ICR1) настроен битами WGM13..WGM10 для использования в качестве значения TOP, флаг ICF1 установится, когда счетчик достигнет значения TOP.

ICF1 автоматически очистится, когда выполнится обработчик прерывания по адресу Input Capture Interrupt Vector. Альтернативно ICF1 можно очистить записью в него лог. 1 (запись 0 не оказывает никакого действия).

OCF1A (бит 4): Timer/Counter1, Output Compare A Match Flag

Этот флаг установится на том же такте таймера, на котором значение счетчика (TCNT1) совпадет с Output Compare Register A (OCR1A).

Имейте в виду, что строб Forced Output Compare (FOC1A) не будет устанавливать флаг OCF1A.

OCF1A автоматически очистится, когда выполнится обработчик прерывания по адресу Output Compare Match A Interrupt Vector. Альтернативно OCF1A можно очистить записью в него лог. 1 (запись 0 не оказывает никакого действия).

OCF1B (бит 3): Timer/Counter1, Output Compare B Match Flag

Этот флаг установится на том же такте таймера, на котором значение счетчика (TCNT1) совпадет с Output Compare Register B (OCR1B).

Имейте в виду, что строб Forced Output Compare (FOC1B) не будет устанавливать флаг OCF1B.

OCF1B автоматически очистится, когда выполнится обработчик прерывания по адресу Output Compare Match B Interrupt Vector. Альтернативно OCF1B можно очистить записью в него лог. 1 (запись 0 не оказывает никакого действия).

TOV1 (бит 2): Timer/Counter1, Overflow Flag

Установка этого флага зависит от настроек бит WGM13..WGM10. В режимах Normal и CTC флаг TOV1 установится, когда счетчик таймера переполнится. См. описание действия бит WGM13..WGM10 в таблице 19-5 для получения информации по поведению флага TOV1 для различных настроек бит WGM13..WGM10.

TOV1 автоматически очистится, когда выполнится обработчик прерывания по адресу Timer/Counter1 Overflow Interrupt Vector. Альтернативно TOV1 можно очистить записью в него лог. 1 (запись 0 не оказывает никакого действия).

[Ссылки]

1. Atmel ATmega32A DATASHEET site:microship.com.
2. Доступ к 16-битным регистрам AVR.
3. Мелочи, о которых полезно помнить.
4. Использование 16-bit Timer/Counter1 для измерения и подсчета импульсов.
5. ATmega16 — PWM с помощью T/C0, T/C1, T/C2.
6. ATmega32: программируемый делитель частоты.

Как подключить AVR микроконтроллер к программатору

Научимся искать информацию по разным моделям AVR микроконтроллеров, разберемся c чтением PDF документов в операционной системе Linux. Узнаем как подключить микроконтроллер к программатору используя интерфейс ISP при помощи нескольких проводников.

Содержание:

  1. Несколько рекомендаций
  2. Чтение PDF документов в Linux
  3. Подключение AVR микроконтроллера к программатору
  4. Заключение

Несколько рекомендаций

Чтобы правильно подключить микросхему-микроконтроллер к программатору нужно разобраться где у него и какие выводы. Для получения исчерпывающей информации о интересующем нас микроконтроллере качаем на официальном сайте даташит (datasheet) на интересующий нас чип — Даташиты по микроконтроллерам ATMEL.

На первой страничке даташита приводится подробное описание возможностей микроконтроллера, а далее приведена распиновка микросхем под каждый из типов корпусов. Каждый даташит по AVR чипу содержит массу подробной информации на английском языке, к примеру даташит на микроконтроллер ATmega8 содержит 326 страниц!

Не знаете английского? — старайтесь понемногу изучать, без него сейчас очень трудно в современном мире радиоэлектроники и компьютерной техники, это универсальный международный язык. А пока что, если не знаете что означает какое-то слово или предложение — переведите его через сервис машинных переводов translate.google.com.

Чтение PDF документов в Linux

Как правило, все даташиты на микросхемы поставляются в формате PDF (Portable Document Format) — формат электронных документов для использования на разных платформах, разработан фирмой Adobe Systems.

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

Программы в Linux что умеют читать PDF:

  • Okular — универсальная и мощная программа для просмотра документов, входит в окружение рабочего стола KDE;
  • Qpdfview — простая и легковесная программа для просмотра документов в формате PDF, DjVu и PS;
  • Evince (Document Viewer) — очень быстрый и легковесный просмотрщик документов PostScript (PS), EPS, DJVU, DVI, PDF;
  • Xpdf — высокопроизводительный просмотрщик PDF-файлов.

Какую программу выбрать для просмотра PDF под Linux? — очень хорошо справляются со своими задачами программы Okular и Evince.

Если у вас установлена рабочая среда KDE то скорее всего что программа Okular уже присутствует в системе. Если Okular не установлен то исправить это можно командой:

sudo apt-get install okular okular-extra-backends

Если же у вас рабочая среда отличная от KDE — GNOME, XFCE, UNITY то более экономичным решением будет установить Evince, поскольку установка в данных средах программы Okular потребует некоторые компоненты от рабочей среды KDE.

Рис. 1. Универсальный просмотрщик документов Evince под Linux — средство для листания PDF документов по микроконтроллерам.

Просмотрщик документов Evince очень хорошо открывает огромные документы и справляется иногда с такими что не под силу прочитать для Okular. Установка Evince в Linux:

sudo apt-get install evince

Думаю что у вас теперь не возникнет проблем с чтением документов в формате PDF под ОС GNU Linux .

Подключение AVR микроконтроллера к программатору

Выше было рассказано что для подключения микроконтроллера к программатору нужно соединить выводы ISP: VCC, GND, MISO, MOSI, SCK, RST. Выводы с данными названиями присутствуют у всех микроконтроллеров, так что даташит нам в помощь.

Рис. 2. Распиновка микроконтроллера ATmega8 и подключение его к ISP (USB ASP).

У программатора USB ASP на коннекторе ISP предусмотрено напряжение +5В (VCC), так что для программирования чипа можно воспользоваться питанием от программатора, а вернее от USB порта к которому он подключен.

В рассмотреных раньше программаторах, что используют COM и LPT порты, нет вывода VCC, а это значит что с использованием этих программаторов на выводы GND (-) и VCC (+) микроконтроллера нужно подать напряжение питания 5В от внешнего источника.

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

Рис. 3. Подключение к ISP коннектору программатора USB ASP на беспаечной макетной панели.

Рис. 4. Программатор USBASP подключен к микроконтроллеру ATmega8 (увеличение рисунка по клику).

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

Заключение

Как видите, нет ничего сложного в подключении микроконтроллера к программатору используя интерфейс ISP. Главное найти даташит под нужный микроконтроллер и разобраться с его ножками, а там останется подсоединить несколько проводков и… готово!

В следующей статье рассмотрим программное обеспечение для работы с AVR микроконтроллерами под ОС GNU Linux, а также кратко рассмотрим разные среды для разработки и написания кода.

Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.

ATmega32A-PU мікросхема (0032A DIP-40-600 ATmega32A-PU Atmel)

  1. Продукция
  2. Мікросхеми
  3. ATmega …

Производитель: Atmel

Код товара: Т0000005714

Маркировка: ATmega32A-PU

Количество приборов:

Параметры
НаименованиеЗначениеЕдиница измеренияРежим изменения
Функциональное назначение8-bit AVR-микроконтроллер
Напряжение питания диапазон+2.7…5.5Vdc
частота тактовая16MHz@Vcc=5V±5% 1.0MHz@Vcc=3V
Program Memory FLASH32Kbites
Data Memory SRAM2048byte
Data Memory EEPROM1024byte
Registers32 x 8 General Purpose Working
кол-во A/D8-channel 10-bit AD
TimersTwo 8-bit Timer/Counters
TimersOne 16-bit Timer/Counter
>Programming of Flash, EEPROM, Fuses, and Lock Bitsthrough the JTAG Interface
кол-во вх/вых32 …..
Температура рабочая-40…+85

Обзор программатора USBAsp v.2.0 – RobotChip

Сегодня расскажу, о недорогим и очень простом программаторе USBAsp v.2.0 для микроконтроллеров AVR (основанный на дизайне Томаса Фишла), с его помощью можно прошивать контроллеры AVR по интерфейсу ISP (не выпаивая его с платы), а самое главное, можно прошить загрузочный сектор на контроллерах Arduino.

Технические параметры

► Напряжение питания: 5 В, DC
► Интерфейс: USB 2.0
► Программирование/ чтение: Atmel (AVR)
► Габариты: 70 мм x 18 мм x 10 мм
►  Поддержка операционных систем: Windows XP / 7 / 8 / 8.1 / 10.

Общие сведения

Программатор USBAsp распространяется и открытым исходным кодом, так что при желании можно изготовить самому, скачав печатную плату и прошивку с сайта Thomas, из-за этого в различных интернет магазинах существует различные варианты программатора с одинаковым функционалом. В моем случае буду рассказывать о USBAsp V2.0 китайского производителя LC Technelogy.

Программатор собран на синий печатной плате, слева расположен USB-разъем необходимый для подключения к компьютеру. В центре располагается контроллер ATmega8A, рядом установлен кварцевый резонатор на 12 МГц и электрическая обвязка (резисторы, конденсаторы). Справа расположен 10-контактный разъем (два ряда, по пять выводов, шагом 2.54 мм), обеспечивающий обмен данными с прошиваемым микроконтроллером (интерфейс ISP). В комплекте поставляется кабель, с каждой стороны которого, установлен разъем IDC (10 выводов), для простоты прошивки некоторых плат (например Arduino), советую приобрести адаптер-переходник с 10-pin на 6-pin. Назначение выводов программатора USBAsp можно посмотреть на рисунке ниже, вид на стороне программатора.

Назначение выводов:
►  1 – MOSI
►  2 – VCC
►  3, 8, 10 –  GND
►  4 – TXD
►  5 – RESET
►  6 – RXD
►  7 – SCK
►  9 – MISO

Световая индикация
►  Красный светодиод G — Включен
►  Красный светодиод R — Обмен данными

Перемычки
►  JP1 — POWER, управляет напряжением на разъеме ISP VCC (вывод 2), можно установить на + 3.3В, + 5В или вовсе убрать перемычку, если программируемое устройство, имеет собственный источник питания.
►  JP2 — SERVICE, обновления прошивки USBasp.
►  JP3 — SLOW, программирования на низких скоростях, если программируемое устройство, работает на частоте ниже 1.5 МГц, SCK (вывод 7) уменьшит частоту с 375 кГц до 8 кГц.

Принципиальная схема программатора USBAsp V2.0 можно посмотреть на рисунке ниже.

Список поддерживаемых AVR микроконтроллеров:
►  Mega Series: 
ATmega8, ATmega8A, ATmega48, ATmega48A, ATmega48P, ATmega48PA, ATmega88, ATmega88A, ATmega88P, ATmega88PA, ATmega168, ATmega168A, ATmega168P, ATmega168PA, ATmega328, ATmega328P, ATmega103, ATmega128, ATmega128P, ATmega1280, ATmega1281, ATmega16, ATmega16A, ATmega161, ATmega162, ATmega163, ATmega164, ATmega164A, ATmega164P, ATmega164PA, ATmega169, ATmega169A, ATmega169P, ATmega169PA, ATmega2560, ATmega2561, ATmega32, ATmega32A, ATmega324, ATmega324A, ATmega324P, ATmega324PA, ATmega329, ATmega329A, ATmega329P, ATmega329PA, ATmega3290, ATmega3290A, ATmega3290P, ATmega64, ATmega64A, ATmega640, ATmega644, ATmega644A, ATmega644P, ATmega644PA, ATmega649, ATmega649A, ATmega649P, ATmega6490, ATmega6490A, ATmega6490P, ATmega8515, ATmega8535,
►  Tiny Series: ATtiny12, ATtiny13, ATtiny13A, ATtiny15, ATtiny25, ATtiny26, ATtiny45, ATtiny85, ATtiny2313, ATtiny2313A
►  Classic Series: AT90S1200, AT90S2313, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535
►  Can Series: AT90CAN128
►  PWN Series: AT90PWM2, AT90PWM3

Установка драйвера USBAsp на Windows 8/10

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

Так как, в операционной системе нету необходимого драйвера, в «Диспетчере устройств» появится устройство «USBAsp» с восклицательным знаком.

Скачиваем архив с цифровой подписью, разархивируем и запускаем «InstallDriver.exe» 

Драйвер установлен, в «Диспетчере устройств» пропадет восклицательный знак с «USBAsp».

Установка драйвера на Windows XP и Windows 7 аналогичная, программатор готов к работе.

Программа для USBAsp V2.0

Программу разработал «Боднар Сергей», работает не только с китайским программатором USBAsp v.2.0, но и другими программаторами. Первым делом скачиваем программу, разархивируем и запускаем «AVRDUDEPROG.exe».
В качестве примера, прошью китайскую плату Arduino UNO R3 в которой установлен микросхема ATmega328P. В программе, жмем на вкладку «Микроконтроллеры» и выбираем ATmega328P.

Далее, необходимо выбрать прошивку, в строке «Flash» нажимаем «. . .», переходим в папку «C:\Program Files\Arduino\hardware\arduino\avr\bootloaders\atmega» и выбираем «ATmegaBOOT_168_atmega328.hex», жмем «Открыть»

Подключаем программатор к плате «Arduino UNO R3», и нажимаем кнопку «Программирование».

В конце, выйдет диалоговое окно, о удачном окончании программировании.

Ссылки
  Скачать драйвер для программатора USBASP v2.0 (LC Technology, ATMEL)
  Скачать программу AVRDUDE_PROG v.3.3

Купить на Aliexpress
  Программатор USBASP v2.0 (LC Technology, ATMEL)
  Адаптер для ATMEL AVRISP, USBASP, STK500 (10 pin на 6 pin)

Купить в Самаре и области
  Программатор USBASP v2.0 (LC Technology, ATMEL)
  Адаптер для ATMEL AVRISP, USBASP, STK500 (10 pin на 6 pin)

Отладочная плата для Atmega32 своими руками / Хабр

1. Введение

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

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


Для начала нужен программатор, но информации об этом в интернете тонны, потому остановлюсь лишь поверхностно. Самый простой из них — это так называемые «5 проводов», сделать его легко — берем LPT кабель и через резисторы соединяем с МК, как показанно на рисунке:

Делать все нужно предельно аккуратно, спалить LPT таким — на раз.
Гораздо лучше сделать что то приличнее — например USBasp он безопаснее, и работает через USB.
Как вариант — купить программатор в том же Voltmaster или Чип-и-Дип.
Параметры для начала не так важны, кроме цены и поддерживаемых микросхем.

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

Конечно есть макетные платы, но по мне так паутина из проводов и перемычек выглядит ужасно, да и ненадежно и, что самое главное не наглядно (а при разработке и обучении это важно).

Существуют отладочные платы для различных микроконтроллеров. И все в них хорошо, кроме цены (самая простенькая от 2-3 тыс.р — оно конечно того стоит, но на то оно и радиолюбительство, чтобы по возможности обойтись своими руками). Потому я принял решение создать свою простую отладочную плату, которая будет отвечать моим требованиям.

Какие требования были к данной плате:

  • Простота исполнения
  • Наглядность
  • Универсальность
  • Дешевизна
  • Простота создания тестового устройства
  • Наличие LCD дисплея
  • Встроенная клавиатура
  • 2 свободных порта (с возможностью их использовать по своему усмотрению)
  • COM порт у платы для интеграции с компьютером

Что было использованно при изготовлении:

  1. Стеклотекстолит односторонний ~70р
  2. Колодки для подключения периферии и коммутации (штырьки как на материнках, на которые вешаются джамперы) ~50р
  3. Кнопки тактовые — ~ 50р
  4. Панелька для микросхемы 30р
  5. Разьем для COM порта 20р
  6. Микросхема MAX232a 50р
  7. LCD индикатор — от 250р
  8. Сама микросхема ATmega32 от 200р

итого 720р по московским безумным ценам на радиодетали (А точнее по прайсу Вольтмастера).

вот что в итоге у меня получилось:

2. Разводка

Теперь по порядку. Начнем с разводки платы в Sprint-Layout. По сути, это самый ответственный момент в создании устройства, нужно учесть все ньюансы, а также на этом моменте нужно понять — что конкретно требуется от платы, как это должно выглядеть, как удобнее. Потому не советую повторять в слепую, стоит сесть и просмотреть аналоги, вычленить для себя интересные решения или узлы. У меня получилось вот так:


подробнее о периферии, для этого стоит взглянуть на распиновку кристалла:

  • На PORTA будет висеть клавиатура — 7 кнопок, расположенных так, чтобы с помощью них можно было при надобности осуществить навигацию, например, по меню (крестовина), и пара кнопок для доп ф-й.
  • на PORTB я разместил LCD дисплей, таким образом, как это предусмотренно в codevision avr стандартными средствами (используются три командных регистра дисплея и 4 регистра данных)
  • PORTC и PORTD вывел колодками для подключения периферии. еще я предусмотрел рядом с колодками еще цанговые панельки, но в моем хозяйстве их неоказалось и их установка отложена до лучших времен
  • Также я разместил max232 c обвязкой из конденсаторов и разъем COM порта.
    подробнее о подключении max232
  • Для универсальности каждый пин контроллера выведен на колодки, параллельные панельке для микросхемы.
  • пины программирования SCK, MISO, MOSI и RESET продублированны еще одним рядом колодок
3. Изготовление печатки

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

подробнейшее описание есть на Хабре

. Результат:


4. Завершающий этап

далее сверлим, лудим, паяем нашу плату.


5. Заключение

И вот, наша отладочная плата для упрощения разработки на МК готова. Теперь для того, чтобы научиться работать с функционалом МК AVR нам не придется ваять клубок проводов. просто подключаем к свободным портам нужную периферию (будь то светодиоды, датчики, драйверы приводов и сервомашинок, а так же многое другое), и спокойно пишем программу.

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

Статья написана nortonix.

Прошивка зарядника после замены микроконтроллера Atmega32А — Паркфлаер

Приветствую!
Многие пользуются зарядниками

и я не исключение))) И вот на столе неисправный Vista Power EV-650 Charger 5A 12V
http://www.rcdrive.ru/unit.php?unit=7784
Железо у них практически одинаковое за исключением — чем дороже зарядник тем больше деталей установлено )))
При включении на дисплее в верхней строке черные прямоугольники, при нажатии кнопок звуков
никаких. В ходе поиска неисправности выявлено: неисправен контроллер (греется как печка)
неисправен дисплей (подключал его в заведомоисправный БП на дисплее прямоугольники).
В восстановлении девайса на первый взгляд нет смысла.
Дисплей есть и на удивление в магазине радиодеталей в наличии один контроллер
Atmega 32L (смутила последняя буква, в ЗУ Atmega 32А) ну попробую восстановить.

И так приступим.
На семерке KhazamaAVRProgrammer не хотел записывать fuse биты в чип, а понипрог вис
на 30-40%в ходе записи flash. Запись fuse провел в ponyprog с LPT программатором,
а прошивку залил KhazamaAVRProgrammer.
Пришлось использовать два программатора и два загрузчика
http://www.msevm.com/main/prog/lpt/
http://easyelectronics.ru/usb-programmator-avr-usbasp.html
Ponyprog v207  http://www.f1cd.ru/soft/base/ponyprog/ponyprog_207/
KhazamaAVRProgrammer http://khazama.com/project/programmer/
Сначала нужно запрограммировать fuse биты для работы чипа от внешнего генератора,
по умолчанию задействован внутренний и работает на низкой частоте.
Как заливать прошивку в чип, пропущу (в загрузчике нажать write flash тут элементарно)
Прошивки ЗУ различаются по мощности зарядника 50,80,200,400W можно скачать
https://github.com/njozsef/cheali-charger-test1/archive/master.zip
В архиве есть и обычные прошивки «сток» которые залиты с завода
(сначала заливал несколько, так менюха один в один только
названия зарядников разные в разных прошивках при включении ЗУ)
у меня зарядник 50W заливал прошивку «cheali-charger-50W-5A-0.32m»
Конфигурация fuse бит и настройка порта, распиновка подключения
картинки кликабельны для просмотра

Всё прошилось и вот первое включение

Большой плюс в прошивке — это возможность калибровки :
входное напряжение, напряжение по 6ти банкам раздельно, токи заряда и разряда.
Клоны, подделки врут в показаниях это мне очень не нравится. Теперь процесс калибровки.
Перемещение по меню кнопками как в обычных зарядках.
Подключаем акк (силовые провода и балансир) заходим в меню «option» далее «calibrate»
и далее «volt» для выбора параметра на дисплее две галки справа и слева указывают на
активную строку.

В качестве эталонного измерителя взял переносной осциллограф OWON
http://micromir.ucoz.ru/publ/hds3102m_n_cifrovoj_skopmetr_owon/85-1-0-1992
В меню «volt» доступна калибровка входного напряжения и напряжения по банкам.
Точным мультиметром замеряем напряжение и подгоняем чтоб совпадало с показаниями ЗУ.
Выбор напряжения кнопкой «старт» (значения начнут мигать) а кнопками «+,-» выставляем
что показывает мультиметр,чтоб записать в память еще раз нажимаем «старт», на дисплее
появится на пару сек «wait» ЗУ вернется в предыдущее меню и запишет в епром данные калибровки.

Далее проведем калибровку тока заряда, подключаем щупы амперметра в выходной разъем
(акк не подключен), заходим в меню «I charge» в нем доступна калибровка по току 50мА и 1А.

При входе в меню калибровки — зайцы)) «value» в ноле, при увеличении значения параметра
возрастает ток. В начале нижней строки показывается значение тока при настройке,
есть небольшое несовпадение на малом токе в 1 мА ну это не так страшно.

Теперь калибровка тока разряда.
Подключаем акк и в разрыв плюсового провода амперметр, заходим в меню
«I discharge» в этом меню доступна калибровка по току 50мА, 1А.
В ходе настройки тока разряда 300мА, во второй строке «d» осталась нулевой. почему так
не понятно, но при разряде акка с подключенным амперметром и выставленном токе 300мА
действительно всё верно в показаниях на дисплее зарядника и амперметра 

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

> номер строки : тип акка, емкость, ток заряда

Вот такая работа проведена.
Зарядник работает, балансирует акк просто «сказка»
Набор фукций зарядника чуть больше чем у заводского (еще полностью не разобрался
самое главное начал заряжать), точность показаний на высоте.
В дальнейшем планирую поставить мосфеты мощнее и зашить прошивку предназначенную
для зарядника большей мощности, токи в прошивках ограничены програмно так что железо
усилить и прошивку перезалить и будет 400W зарядник клон за 1000р)))

Благодарю за внимание. Если будут вопросы отвечу в коментариях.

Схема контактов микроконтроллера

ATMega32, конфигурация контактов, характеристики, замены и техническое описание

Конфигурация контактов ATMEGA32

Контактный №

Название пина

Описание

Альтернативная функция

1

PB0 (XCK / T0)

Контакт 0 порта PORTB

T0 (Вход внешнего счетчика Timer0)

XCK (ввод / вывод внешних часов USART)

2

PB1 (Т1)

Контакт 1 порта PORTB

T1 (Вход внешнего счетчика Timer1)

3

PB2 (INT2 / AIN0)

Контакт 2 порта PORTB

AIN0 (Аналоговый компаратор, положительный I / P)

INT2 (вход внешнего прерывания 2)

4

PB3 (OC0 / AIN1)

Контакт 3 PORTB

AIN1 (отрицательный I / P аналогового компаратора)

OC0 (Выход таймера 0, сравнение выхода)

5

PB4 (нержавеющая сталь)

Контакт 4 порта PORTB

SS (вход выбора ведомого SPI).Этот вывод низкий, когда контроллер действует как ведомый.

[Последовательный периферийный интерфейс (SPI) для программирования]

6

PB5 (MOSI)

Контакт 5 PORTB

MOSI (главный выход, подчиненный вход). Когда контроллер действует как подчиненный, данные принимаются на этот вывод.

[Последовательный периферийный интерфейс (SPI) для программирования]

7

PB6 (MISO)

Контакт 6 порта PORTB

MISO (главный вход и выход подчиненного устройства). Когда контроллер действует как подчиненный, данные передаются этим контроллером мастеру через этот вывод.

[Последовательный периферийный интерфейс (SPI) для программирования]

8

PB7 (SCK)

Контакт 7 PORTB

SCK (последовательные часы шины SPI).Это часы, совместно используемые этим контроллером и другой системой для точной передачи данных.

[Последовательный периферийный интерфейс (SPI) для программирования]

9

СБРОС

Пин сброса, активный низкий сброс

Контроллер ВЫСОКОГО ВЫСОКОГО ДАВЛЕНИЯ.

10

Vcc

Vcc = + 5 В

11

GND

ЗЕМЛЯ

12

XTAL2

подключен к кварцевому генератору

13

XTAL1

подключен к кварцевому генератору

14

PD0 (RXD)

Контакт 0 PORTD

RXD (входной контакт USART)

Интерфейс последовательной связи USART

[Может использоваться для программирования]

15

PD1 (TXD)

Контакт 1 PORTD

TXD (выходной контакт USART)

Интерфейс последовательной связи USART

[Может использоваться для программирования]

16

PD2 (INT0)

Контакт 2 PORTD

Внешнее прерывание INT0

17

PD3 (INT1)

Контакт 3 PORTD

Внешнее прерывание INT1

18

PD4 (OC1B)

Контакт 4 PORTD

Выходы канала ШИМ

19

PD5 (OC1A)

Контакт 5 PORTD

20

ПД6 (ICP)

Контакт 6 PORTD

Таймер / счетчик1 Вход захвата Pin

21

PD7 (OC2)

Контакт 7 PORTD

Выход таймера / счетчика2 Выход сравнения сравнения

22

PC0 (SCL)

Контакт 0 PORTC

Интерфейс TWI

23

PC1 (SDA)

Контакт 1 PORTC

24

PC2 (TCK)

Контакт 2 PORTC

Интерфейс JTAG

25

PC3 (TMS)

Контакт 3 PORTC

26

PC4 (TDO)

Контакт 4 PORTC

27

PC5 (TDI)

Контакт 5 PORTC

28

PC6 (TOSC1)

Контакт 6 PORTC

Вывод осциллятора таймера 1

29

PC7 (TOSC2)

Контакт 7 PORTC

Вывод 2 генератора таймера

30

AVcc

Vcc для внутреннего преобразователя АЦП

31

GND

ЗЕМЛЯ

32

AREF

Аналоговый опорный вывод для АЦП

33

PA7 (АЦП7)

Контакт 7 PORTA

АЦП (аналого-цифровой преобразователь), канал 7

34

PA6 (ADC6)

Контакт 6 PORTA

АЦП (аналого-цифровой преобразователь), канал 6

35

PA5 (АЦП5)

Контакт 5 PORTA

АЦП (аналого-цифровой преобразователь), канал 5

36

PA4 (ADC4)

Контакт 4 PORTA

АЦП (аналого-цифровой преобразователь), канал 4

37

PA3 (АЦП3)

Контакт 3 PORTA

АЦП (аналого-цифровой преобразователь), канал 3

38

PA2 (АЦП2)

Контакт 2 PORTA

АЦП (аналого-цифровой преобразователь), канал 2

39

PA1 (АЦП1)

Контакт 1 PORTA

АЦП (аналого-цифровой преобразователь), канал 1

40

PA0 (АЦП0)

Контакт 0 PORTA

АЦП (аналого-цифровой преобразователь), канал 0

Характеристики ATMEGA32

ATMEGA32 — Упрощенные функции

ЦП

8-битный AVR

Количество контактов

40

Рабочее напряжение (В)

+4.От 5 до +5,5 В (+ 5,5 В является абсолютным максимумом)

Количество контактов ввода / вывода

32

Интерфейс связи

Интерфейс JTAG (24,25,26,27 PINS) [Может использоваться для программирования этого контроллера]

Главный / подчиненный последовательный интерфейс SPI (5,6,7,8 PINS) [Может использоваться для программирования этого контроллера]

Программируемый последовательный USART (14,15 контактов) [Может использоваться для программирования этого контроллера]

Двухпроводной последовательный интерфейс (22,23 PINS) [Может использоваться для подключения периферийных устройств, таких как датчики и ЖК-дисплеи]

Модуль АЦП

8 каналов, разрешение 10 бит АЦП

Модуль таймера

Два 8-битных счетчика, Один 16-битный счетчик [Всего три]

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

1

Модуль ЦАП

Нет

ШИМ каналов

4

Внешний осциллятор

0-8 МГц для ATMEGA32L

0-16 МГц для ATMEGA32

Внутренний осциллятор

Калиброванный внутренний осциллятор 0-8 МГц

Тип памяти программ

Вспышка

Программная память (КБ)

32 Кбайт [10000 циклов записи / стирания]

Частота процессора (MIPS)

16 MIPS

Байт ОЗУ

2 КБ

Данные EEPROM

1024 байта

Сторожевой таймер

Программируемый сторожевой таймер

с отдельным встроенным генератором

Режимы энергосбережения

Шесть режимов [режим ожидания, шумоподавление АЦП, энергосбережение, отключение питания, режим ожидания и расширенный режим ожидания]

Рабочая температура

от -55 ° C до + 125 ° C (+125 — абсолютный максимум, -55 — абсолютный минимум)

Замены ATMEGA32

ATMEGA16, ATMEGA8535

Альтернативы ATMEGA32

ATMEGA8, ATMEGA328p

Где использовать ATMEGA32

ATMEGA32 — простой в программировании контроллер AVR.Имея значительную программную память, он может удовлетворить большинство ВСТРОЕННЫХ СИСТЕМ. В различных режимах сна он может работать в МОБИЛЬНЫХ ВСТРОЕННЫХ СИСТЕМАХ. Наряду с 32 программируемыми контактами ввода / вывода он может легко взаимодействовать со многими периферийными устройствами. Благодаря сторожевому таймеру для сброса при ошибке его можно использовать в системах без вмешательства человека. Благодаря такому количеству функций, которые ценят друг друга, мы можем внедрить ATMEGA32 во многие системы управления.

Как использовать ATMEGA32

Использование ATMEGA32 аналогично использованию любого другого микроконтроллера.Подобно им, это не цифровые ИС Plug and Play. Для работы ATMEGA32 сначала необходимо сохранить соответствующий программный файл во FLASH-памяти ATMEGA32. После сброса этого программного кода контроллер выполняет этот код для создания ответа.

Весь процесс использования ATMEGA32 выглядит следующим образом:

  1. Список функций, которые должен выполнять ATMEGA32
  2. писать функции в программах IDE, используя относительный язык

(Обычно Atmel Studio 6.2 для Windows7,

Atmel Studio 7 для Windows10 [https://www.microchip.com/avr-support/atmel-studio-7])

(для этих IDE функции должны быть написаны на языке «C»)

  1. После написания нужной программы скомпилируйте для устранения ошибок с помощью IDE.
  2. Указывает, что приложение IDE генерирует файл HEX для написанной программы.
  3. Выберите устройство программирования (обычно программатор SPI для контроллеров AVR), который устанавливает связь между ПК и ATMEGA32
  4. Запустите программу дампа файла HEX, которая связана с выбранным устройством программирования.
  5. Выберите соответствующий шестнадцатеричный файл программы в SPI или другом программном обеспечении.
  6. Запишите шестнадцатеричный файл программы во флэш-память ATMEGA32 с помощью этой программы.
  7. Отключите программатор, подключите соответствующие периферийные устройства для контроллера и включите систему.

Приложения

Есть тысячи приложений для ATMEGA32.

  • Системы контроля температуры
  • Измерение аналоговых сигналов и манипуляции с ними.
  • Встроенные системы, такие как кофеварка, торговый автомат.
  • Системы управления двигателями.
  • Цифровая обработка сигналов.
  • Система периферийного интерфейса.

2D Модель

ATMEGA32A-PU Лист данных | Встроенные — Микроконтроллеры IC MCU 8BIT 32KB FLASH 40DIP -Apogeeweb

8-битный микроконтроллер AVR® с 32 Кбайт внутрисистемной программируемой флеш-памятью

Обзор ATmega32A — это маломощный CMOS 8-битный микроконтроллер на базе AVR Архитектура RISC
.Выполняя мощные инструкции за один такт, ATmega32A достигает пропускной способности, приближающейся к 1 MIPS на МГц, что позволяет разработчику системы оптимизировать энергопотребление в зависимости от скорости обработки.

Характеристики

• Высокопроизводительный 8-разрядный микроконтроллер AVR® с низким энергопотреблением
• Усовершенствованная архитектура RISC
— 131 Мощные команды — выполнение большинства одно тактовых циклов
— 32 x 8 рабочих регистров общего назначения
— Полностью статическая работа
— Пропускная способность до 16 MIPS при 16 МГц
— 2-тактный умножитель на кристалле
• Сегменты энергонезависимой памяти повышенной прочности
— 32 Кбайт внутрисистемной самопрограммируемой флэш-памяти программ
— 1024 байта EEPROM
— 2 КБ Байтная внутренняя SRAM
— Циклы записи / стирания: 10 000 Flash / 100 000 EEPROM
— Срок хранения данных: 20 лет при 85 ° C / 100 лет при 25 ° C (1)
— Дополнительная секция загрузочного кода с независимыми битами блокировки
• Внутрисистемное программирование с помощью встроенной программы загрузки
• Настоящая операция чтения-во время записи
— Блокировка программирования для безопасности программного обеспечения
• JTAG (IEEE std.1149.1) Интерфейс
— Возможности граничного сканирования в соответствии со стандартом JTAG
— Расширенная поддержка отладки на кристалле
— Программирование флэш-памяти, EEPROM, предохранителей и битов блокировки через интерфейс JTAG
• Периферийные функции
— Два 8-битных Таймер / счетчики с отдельными предделителями и режимами сравнения
— Один 16-разрядный таймер / счетчик с отдельным предделителем, режимом сравнения и режимом захвата
— Счетчик реального времени с отдельным генератором
— Четыре канала ШИМ
— 8-канальный, 10-битный АЦП
• 8 несимметричных каналов
• 7 дифференциальных каналов только в корпусе TQFP
• 2 дифференциальных канала с программируемым усилением 1x, 10 или 200x
— Двухпроводной последовательный интерфейс с байтовой ориентацией
— Программируемый последовательный порт USART
— Мастер / Последовательный интерфейс ведомого SPI
— Программируемый сторожевой таймер с отдельным встроенным генератором
— Встроенный аналоговый компаратор
• Специальные функции микроконтроллера
— Сброс при включении питания и программирование Обнаружение пониженного напряжения
— Внутренний калиброванный RC-генератор
— Внешние и внутренние источники прерываний
— Шесть спящих режимов: холостой ход, шумоподавление АЦП, энергосбережение, отключение питания, режим ожидания и расширенный режим ожидания
• Ввод / вывод и пакеты
— 32 программируемых линии ввода / вывода
— 40-контактный PDIP, 44-контактный TQFP и 44-контактный QFN / MLF
• Рабочие напряжения
— 2.7 — 5,5 В для ATmega32A
• Классы скорости
— 0 — 16 МГц для ATmega32A
• Потребляемая мощность при 1 МГц, 3 В, 25 ° C для ATmega32A
— Активный: 0,6 мА
— Режим ожидания: 0,2 мА
— Питание- Down Mode:

ATmega32 Распиновка микроконтроллера, примеры программирования и особенности

ATMega32 — один из самых популярных микроконтроллеров Atmel. Он имеет сходство с ATMega328P. Размер памяти в ATMega32 меньше, чем в ATMega328P, но количество контактов больше.Каждый вывод GPIO предназначен только для одной из двух функций, что позволяет использовать все различные протоколы контроллера одновременно, и они могут позволить разработчику взаимодействовать друг с другом внутри контроллера. ATMega32 использует 8-битную технологию CMOS, основанную на архитектуре RSIC, что позволяет оптимизировать производительность за счет мощности (и наоборот) посредством программирования.

Схема расположения выводов

ATMega32

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

Эта диаграмма представляет собой схему контактов ATMega32 для TQFP и пакета MLF.

Детали конфигурации контактов

Цифровой ввод / вывод

Входные и выходные контакты — это основная потребность любого устройства для работы, а в ATMega32 имеется 32 входа / выхода. Устройство CMOS можно использовать с любым контактом ввода / вывода. Напряжение на этих выводах не должно превышать напряжение подаваемой мощности, а входное напряжение также не должно превышать мощность.Все контакты ввода / вывода напрямую выходят из портов A, B, C и D, они также имеют внутренний резистор. Все контакты ввода / вывода в ATMega32 приведены ниже:

  • PA0 — GPIO40
  • PA1 — GPIO39
  • PA2 — GPIO38
  • PA3 — GPIO37
  • PA4 — GPIO36
  • PA5 — GPIO35
  • PA6 — GPIO34
  • PA7 — GPIO33
  • PB0 — GPIO0
  • PB1 — GPIO1
  • PB2 — GPIO2
  • PB3 — GPIO3
  • PB4 — GPIO4
  • PB5 — GPIO5
  • PB6 — GPIO6
  • PB7 — GPIO7
  • PC0 — GPIO22
  • ПК1 — GPIO23
  • ПК2 — GPIO24
  • PC3 — GPIO25
  • PC4 — GPIO26
  • PC5 — GPIO27
  • PC6 — GPIO28
  • PC7 — GPIO29
  • PD0 — GPIO14
  • ПД1 — GPIO15
  • ПД2 — GPIO16
  • PD3 — GPIO17
  • PD4 — GPIO18
  • PD5 — GPIO19
  • PD6 — GPIO20
  • PD7 — GPIO21

Контакты прерывания

Контакты прерывания являются требованиями большинства схем, и их количество постоянно увеличивается в соответствии с законами физики.Основное назначение контактов прерывания — привлечь внимание ЦП, когда требуется каждое внешнее устройство. Контроллеру требуется внешний импульс на определенных контактах, а затем ЦП выполнит запрограммированные инструкции, удерживая все остальные инструкции. В ATMega32 количество контактов прерывания равно трем. Все эти булавки можно использовать, не влияя друг на друга. Все контакты прерывания в ATMega32:

  • INT0 — GPIO16
  • INT1 — GPIO17
  • INT2 — GPIO3

Последовательные порты связи ATMega32:

Асинхронный последовательный

ATMega32 поддерживает несколько типов протоколов последовательной связи, и асинхронная последовательная связь является одним из них.Связь UART довольно популярна в большинстве периферийных устройств из-за своей простоты и зависимости от программирования. Он взаимодействует с двумя контактами, один для отправки данных, а второй для их приема. В этом микроконтроллере есть модуль для асинхронной последовательной связи, который представлен ниже:

  • RXD — GPIO14
  • TXD — GPIO15
Синхронный последовательный

Асинхронные и синхронные системы последовательной связи в основном одинаковы, но в асинхронных устройствах используется внутренняя программа для часов, а в синхронных и внешних тактовых сигналах входные / выходные контакты необходимы для поддержания синхронизации данных между двумя устройствами.В ATMega32 есть контакт для ввода / вывода внешних часов во время последовательной связи.

SPI Протокол

SPI также является популярным для последовательной связи из-за его способности управлять разными устройствами одновременно. Он использует четыре провода, два для данных и один для часов, но четвертый провод можно использовать в случае нескольких устройств. Когда несколько устройств должны работать с ATMega32, тогда будет увеличиваться только четвертый вывод (SS), а количество данных и тактовых выводов будет одинаковым.ATMega поддерживает только четыре контакта для одного устройства связи SPI, но в случае нескольких устройств выбор контакта Slave может быть выполнен с помощью программирования.

  • SS ’- GPIO5
  • MOSI — GPIO6
  • MISO — GPIO7
  • SCK — GPIO8
I 2 C

Это также разновидность последовательной связи, но в основном она используется в тех устройствах, для которых большую часть времени требуется только односторонняя связь. Он довольно популярен в большинстве датчиков, ЖК-дисплеев и двигателей.I 2 Выводы C используют один провод для данных, а второй — для тактового импульса, оба этих вывода приведены ниже:

  • SCL — GPIO22
  • SDA — GPIO23

Аналого-цифровой канал

Всего имеется 8 аналогов цифровых каналов, которые можно использовать в качестве АЦП. Все эти каналы используют один 10-битный АЦП, который может использоваться несколькими каналами одновременно. Каналы есть только в порту A, и все они перечислены ниже:

  • АЦП0 — GPIO40
  • АЦП1 — GPIO39
  • АЦП2 — GPIO38
  • АЦП3 — GPIO37
  • АЦП4 — GPIO36
  • АЦП5 — GPIO35
  • АЦП6 — GPIO34
  • АЦП7 — GPIO33

Контакты модуля таймера

В ATMega32 всего три таймера.Первые два таймера — 8-битные, а третий — 16-битный. Timer0 и Timer1 могут работать только с внешним импульсом, timer1 работают только внутри микроконтроллера. Все эти таймеры могут использовать внутренний и внешний осцилляторы, но они также могут использовать осциллятор sperate. Осциллятор sperate будет передаваться через определенные контакты. Все эти выводы генератора и таймера приведены ниже:

  • Т0 — GPIO1
  • Т1 — GPIO2
  • TOSC1 — GPIO28
  • TOSC2 — GPIO29

Захват / сравнение / ШИМ

Некоторые выводы микроконтроллера могут использоваться для генерации желаемого выходного сигнала.Эти контакты захватывают входной сигнал, затем сравнивают его с заданным сигналом, а затем генерируют событие для совпадения. Эти контакты в основном используются для генерации ШИМ. Все эти контакты в ATMega32:

  • OC0 — GPIO4
  • OC1B — GPIO18
  • OC1A — GPIO19
  • OC2 — GPIO21

ПМС

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

ICP1 использует таймер 1, который является 8-битным таймером.

Выводы компаратора

ATMega32 имеет внутренний компаратор, который можно использовать для сравнения аналоговых входных сигналов. Он имеет два контакта, один используется для неинвертированного сигнала, а второй — для инвертированного сигнала. Внутренние регистры могут использовать аналоговый сравниваемый сигнал. Все эти пины приведены ниже:

  • AN0 (не инвертированный) — GPIO3
  • AN1 (перевернутый) — GPIO4

Выводы программатора JTAG

Контакты

JTAG были введены компанией для отладки или тестирования микроконтроллеров.ATMega32 имеет контакты связи JTAG, которые также можно использовать для программирования микроконтроллера. Все контакты JTAG приведены ниже:

  • TDI — GPIO27
  • TDO — GPIO26
  • TMS — GPIO25
  • TCK — GPIO24

Выводы питания ATMega32

AREF

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

AVCC

Аналого-цифровой преобразователь микроконтроллера требует внешнего входа напряжения для активации, чтобы он мог работать. Аналоговый вывод питания ATMega32:

Потребляемая мощность

Каждое устройство требует питания для работы. ATMega32 имеет три вывода питания. Один предназначен для подачи питания, а другой — для заземления. Все выводы питания:

  • VCC — GPIO10
  • GND — GPIO11, GPIO31
Осциллятор

ATMega32 имеет внутреннюю тактовую частоту 8 МГц, которую можно расширить с помощью внешних тактовых выводов.Контакты внешних часов могут увеличить тактовую частоту до 16 МГц.

  • XTAL2 — GPIO12
  • XTAL1 — GPIO13
Сброс

ATMega имеет внешний вывод сброса для сброса устройства с помощью внешних устройств и кнопок. Вывод сброса в ATMega32:

Альтернативные микроконтроллеры

Атмега16, Аттини45, Аттини85, Аттини88

Блок-схема

ATMega32

Блок-схема

обеспечивает обзор всех периферийных устройств, таких как порты GPIO, порты связи и контакты прерывания.Это также показывает интерфейс шины данных и шины адреса с этими внутренними периферийными устройствами.

ATmega32 Основные характеристики и характеристики

ХАРАКТЕРИСТИКИ И ХАРАКТЕРИСТИКИ
Архитектура ЦП 8-битная архитектура RISC
Частота процессора 16MIPS
Диапазон рабочего напряжения (4,5–5,5 В)
ПОРТЫ GPIO 32 контакта ввода / вывода
Прерывания 3
Таймеры 3 (два 8-битных и один 16-битный таймер)
ШИМ 4
ПМС Один контакт ICP
Синхронный последовательный Один канал
Асинхронный последовательный Один канал
I2C Один канал I2C
SPI Один канал SPI
JTAG В наличии
Загрузчик В наличии
Сторожевой таймер В наличии
LAN Нет в наличии
CAN Нет в наличии
АЦП 8 каналов, 10 бит
SRAM 32Кб
FLASH (память программ) 1024 КБ
EEPROM 512 байт
Компаратор 1
Пакеты PDIP (40 контактов), TQFP (44 контакта) и MLF (44 контакта)

Программирование Atmega32

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

  1. Во-первых, загрузите интегрированную среду разработки (IDE), которая имеет встроенный компилятор для выбранного вами микроконтроллера
  2. Выберите программиста, который мы будем использовать для загрузки кода в Atmega32
  3. Напишите свою первую простую программу, такую ​​как мигание светодиода, и загрузите код.
  4. После строительных норм, создание схемы подключения светодиодов и подачи питания
  5. Вы увидите мигание светодиода в соответствии со скоростью, которую вы определили в программе
  6. .

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

Следуйте этим руководствам, начиная с загрузки компилятора и заканчивая написанием программы для вашего первого проекта:

  1. ATMEL STUDIO 6 TUTORIAL Пошаговое руководство
  2. МИГАЕТ СВЕТОДИОД при использовании микроконтроллера AVR ATMEGA32
  3. Как использовать кнопку с микроконтроллером AVR ATMEGA32
  4. ЖК-дисплей с микроконтроллером AVR ATMEGA32
  5. Двигатель постоянного тока, взаимодействующий с atmega32 и L293

Atmega32 пр.

Приложения

  • ATMega32 подходит для цифровой обработки сигналов.
  • Большинство периферийных устройств используют ATMega32 в качестве интерфейса в промышленных системах.
  • Для создания интерфейса между двумя видами периферийных устройств микроконтроллер ATMega32 является лучшим выбором.

Двухмерная диаграмма

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

Atmega32A, запрограммированный с использованием Arduino Ide

Недавно мы начали проект по интерфейсу часов реального времени (RTC) DS3231 с микроконтроллером atmega32. Сначала мы написали программу в atmel studio ide, наша логика работала, и оборудование работало должным образом.Затем нам нужно, чтобы некоторые другие датчики были связаны с той же системой. Поэтому мы решили перейти от студии atmel к arduino ide из-за простоты работы с arduino ide. В студии atmel мы должны инициализировать регистры и другие вещи самостоятельно. В arduino ide это предопределенные библиотеки, нам нужно только вызывать функции, которые требуются конкретному приложению.

Arduino ide не поддерживает микроконтроллер atmega32 напрямую. Некоторые сторонние драйверы написаны гиками, которые заставляют atmega32 программировать с помощью arduino ide.Итак, чтобы работать с микроконтроллером atmega32 в arduino ide, мы должны внести некоторые изменения в файлы и добавить несколько новых файлов в каталог arduino.

Микроконтроллер Atmega32 Поддержка Arduino IDE

Прежде всего, мы должны сделать atmega32 видимым в arduino ide. Для этого мы должны добавить наш файлboards.txt. Этот файл содержит список плат Arduino, которые в настоящее время установлены и поддерживают arduino ide. Вы можете найти этот файл в C: \ Program Files (x86) \ Arduino \ hardware \ arduino \ avr \boards.текст. Откройте файл и в конце поместите код, который находится справа.

Поддержка микроконтроллера

Atmega32 для arduino ide

########################################################################## #############
mega32-1.name = ATmega32-1mhz
mega32-1.build.mcu = atmega32
mega32-1.build.f_cpu = 1000000L
mega32-1.build. core = arduino: arduino
mega32-1.build.variant = mega32
mega32-1.upload.maximum_size = 32000
mega32-1.bootloader.low_fuses = 0xE1
mega32-1.bootloader.high_fuses = 0xD9
# mega32-1.bootloader.extended_fuses = 0xFD
############################### #############################
mega32-8.name = ATmega32-8mhz
mega32-8.build.mcu = atmega32
mega32-8.build.f_cpu = 8000000L
mega32-8.build.core = arduino: arduino
mega32-8.build.variant = mega32
mega32-8.upload.maximum_size = 32000
mega32-8.bootloader.low_fuses = 0xE4
mega32-8.bootloader.high_fuses = 0xD9
# mega32-8.bootloader.extended_fuses = 0xFD
########################### #################################
mega32-16.name = ATmega32-External 16mhz
mega32-16.build.mcu = atmega32
mega32-16.build.f_cpu = 16000000L
mega32-16.build.core = arduino: arduino
mega32-16.build.variant = mega32
mega32 -16.upload.tool = avrdude
mega32-16.upload.maximum_size = 32000
mega32-16.bootloader.low_fuses = 0xEF
mega32-16.bootloader.high_fuses = 0x89
# mega324-16.bootloader.extended_fuses =
########################################################################## ############

После добавления досок.txt, вы можете увидеть, что atmega32 теперь отображается в arduino ide. Микроконтроллер Atmega32 виден с трех частот. Два внутренних и один внешний. Если вы хотите использовать внутренний RC-генератор, это две тактовые частоты, поддерживаемые arduino ide, 1 МГц и 8 МГц. Для внешнего кристалла поддерживается только одна частота 16 МГц. Итак, у вас есть три варианта работы. Вы можете пойти с кем угодно.

Распиновка микроконтроллера

Atmega32 для arduino ide.

Определение выводов
После того, как платы появились в arduino ide, пришло время определить выводы atmega32, на которые мы программируем с помощью arduino ide. Перейдите в C: \ Program Files (x86) \ Arduino \ hardware \ arduino \ avr \ sizes и вставьте папку atmega32 в их. Вы можете скачать папку снизу.

Исходный вывод atmega32 не совпадает с выводом, предназначенным для программирования в arduino ide. Оригинальные штифты пронумерованы от 1,2,3 до 40.Где в качестве номеров контактов, которые определены для использования для программирования в arduino ide, являются D0, D1, D2 — D31. Вспомните ардуино, в котором для программирования пины пронумерованы от D0-D13. Здесь действует то же правило. Поэтому для программирования в arduino ide следует использовать число, начинающееся с буквы «D». Теперь все готово, полная поддержка atmega32 была добавлена ​​в arduino ide, и теперь можно программировать микроконтроллер atmega32 с помощью arduino ide.

Примечание: Есть некоторые ограничения: вы не можете программировать atmega32, как вы программируете arduino.Поскольку у них нет загрузчика, написанного для atmega32. Поэтому нам нужен внешний программатор для программирования atmega32. Для этого я использую USBasp.

7-сегментный дисплей

, взаимодействующий с atmega32A и запрограммированный с использованием Arduino IDE

Теперь пришло время протестировать новые настройки arduino ide. Я собираюсь соединить 7-сегментный дисплей с микроконтроллером atmega162. 7-сегментный дисплей подключается к порту A микроконтроллера. Цифры от 0 до 9 будут отображаться на 7-сегментном дисплее.В проекте используется 7-сегментный дисплей с общим анодом. Поэтому, пожалуйста, убедитесь, что общий сегмент анода семь подключен к порту-A. Я использую внешний кристалл 16 МГц для ввода часов в микроконтроллер.

Atmega32 arduino ide USBasp Выбор программиста

7-сегментный дисплей с интерфейсом микроконтроллера Atmega32A

При загрузке кода убедитесь, что вы выбрали правильную тактовую частоту для микроконтроллера atmega32.Поскольку я использую внешний микроконтроллер с частотой 16 МГц, я выбрал плату как «Atmega32-External16Mhz». Выберите подходящего программатора для загрузки кода. Я использую программатор USBasp. Я выбрал его. На рынке доступно множество других популярных программистов, поэтому перед загрузкой кода убедитесь, что вы выбрали правильный программист. Поскольку мы используем внешний программатор, мы должны загрузить код, используя опцию «Загрузить с помощью программатора». Опцию можно найти в Меню> Эскиз .Картинка слева показывает выбор платы и программатора, а также вариант загрузки.

Я также протестировал интерфейс atmega32 I2C, подключив DS3231 и запрограммировав его с помощью arduino ide, и он отлично работает. Но последовательный интерфейс у меня не заработал. Поэтому я решил инициализировать регистры uart индивидуально. Ссылка на руководство по интерфейсу UART находится ниже, посетите ее, чтобы увидеть конфигурацию и работу uart. «Atmega32A Uart, запрограммированный с помощью Arduino IDE»

Загрузите код проекта.ino и отправьте нам свой отзыв о публикации. Дополнительные проекты, связанные с микроконтроллером Atmega32A, можно найти на сайте.

0,4 балла Вопрос 10 Glven распиновка ATmega32A

Расшифровка текста изображения: 0,4 балла Вопрос 10 Glven распиновка микроконтроллера ATmega32A, используемого на плате OUSB-IO (как показано ниже: CXCKTOP 1 (TP81 2 CUPB2 2 2 (ANTOCOPI Z4 85) PS4 MOSI) POS 5 MSOJ POS T (SCK) PO7 B RESET VOC TO 20 PAO LADCO 39 PM1ADG1) 38 PA2 ADC25 37 PAG IADC3 36 PMIADCA) PASIADC 23 PASIADCO SPATIADC) 32ARET 31 CND 30 ANOG 29 PO (TOSC2) 28 (TOSCA) 2PCS (TDD PCA (TO) 2 PCS (TMS) 24 PC2 (TCK) 93 PC180W 22 PCO (SCL) 21 PO (OC21 GND XTALA 12 XTALI 13 CODI POS 14 ((TX) PO1 18 ONTÚj PD2 10 ONTI)) POS 7 (OCB) PD4 18 (OCTA) POS 19 CP1) POE 20 Назначение контактов 14 и 152 Контакт 15 используется для вывода корневого сигнала. Слои 14 и 15 объединяются для формирования последовательного порта. Контакты 14 и 15 используются для подачи питания (5) на устройство, чтобы оно работало правильно при выходе из строя.Контакт 14 должен быть подключен к SV, а контакт 13 должен быть подключен к GND, чтобы устройство было запрограммировано. Вопрос 13 0,4 балла На упрощенной схеме портов AVR ниже различные компоненты помечены (A..F). Определите, написав правильную букву от A до F, триггер Шмитта B PUD WDX RESET RD С ro DATA BUS RESET WP SLEEP RR E SYNCHRONIZER RP D to PUD SLEEP RDS PULLUP ОТКЛЮЧИТЬ КОНТРОЛЬ СНА DO CLOCK WRITE DORA READ DDR TAD PORTA REOINTER READ PORT ЗАПИСАТЬ ПИН-кодами MEISTER WP 0,4 балла Вопрос 13 0.4 балла Вопрос 10 Учитывая распиновку микроконтроллера ATmega32A, используемого на плате OUSB-10 (как показано ниже: На упрощенной схеме портов AVR ниже различные компоненты были помечены (AF). Определите, написав правильную букву A — F, Триггер Шмитта B PUD OCCHITO PO 1 (TH) P12 PS2 IANUOCOP 4 65 POL MOSP95 MOJPOS OSCKPOT RESET vec TO GND 11 XTALA12 XTALI 13 ODPOD 14 (PO 15 ONTO PER 16 ONTSPOO 17 (OCPO4 OCTAPOS OPPD20 POIAD 37 OCTAPOS OPPD20 POIAD IADCA) PASIADCA 542 PMG IADCH 53Z PAT LADC) 12 ARD OND AVOC 29 PCP (TOSCA 2POS (TOCI 2 PCS (TOO 20PCA (TO)) PCI (TMS) PC2 (TCK 2PCSO) 22 POL 21 POOCH A WD RESET HD С Что такое Назначение контактов 14 и 15? СБРОС ШИНЫ ДАННЫХ LW SLEEP Контакт 15 используется для подачи сигнала форта. Ons 14 15, включенного в отчет, 14 был po 15V) к устройству функционирует только один звук двигателя, который нужно скорректировать, чтобы подключить к GND замедлить их, чтобы они были запущены ROL E SYNCHRONIFER RP PUD SLEEP PULLUP DILABLE SELP CONTROL FOCLOCK we De WRITE DOR PLEADOR SAD PORT OISTER READ PORINO WRITE MONTER

Предыдущий вопрос Следующий вопрос

40% Клавиатуры: сентябрь 2020 г.

Я хотел опробовать сервис сборки SMT в JLCPCB.У них был специальное предложение со скидочным купоном на 8 долларов.

Первое, что нужно понять с этой услугой, — это то, что есть много ограничения:

  • Только зеленая паяльная маска
  • Только печатная плата толщиной 1 мм, 1,2 мм, 1,6 мм
  • Соберите только с одной стороны. При заказе вы выбираете верхнюю или нижнюю сторону. Если возможно, положите все детали SMT на одну сторону.
  • медь 1 унция (обычная)
  • Максимальный размер 100×100 мм для рекламной скидки, в противном случае максимальный размер 480×320 мм.
  • Вам нужно добавить отверстия для инструментов на вашей печатной плате. Вы можете добавить их сами или позволить им сделать это.
  • 2, 5 или 10 штук в сборе, других вариантов нет. У вас либо 2 собранных, либо все 5 или 10 из вашего заказа на печатную плату. Если вы соберете только 2, оставшуюся часть пустые печатные платы возвращаются вместе с вашим заказом
  • Вы не получаете трафарет для припоя с вашим заказом
  • Только запчасти в наличии в Инвентаризация JLCPCB доступен для сборки.Любые другие детали, даже если они есть в LCSC, будут пропущено.
  • За установку расширенных частей, отличных от BASIC, взимается плата в размере 3 долларов США.

Поскольку я не мог сделать печатную плату толщиной 0,6 мм, как Gherkin Express, я переделал ее на есть штатный разъем micro USB. JLCPCB не имеет разъемов USB в инвентарь, так что это предмет, который придется припаять вручную.

Тактильные переключатели 5,1 мм были в их инвентаре, но как расширенный элемент, поэтому за их использование взимается единовременная плата в размере 3 долларов США.

Их тоже не было в наличии на ATmega32U2, но у них есть ATmega328p. и это БАЗОВАЯ часть, поэтому плата за установку не взимается. Я переделал Gherkin Express 2 в Плата V-USB.

Остальные необходимые элементы я нашел эквивалент BASIC, чтобы сэкономить при настройке сборы. Единственные предметы, для которых я не смог найти БЕЙСИК, были предохранитель и 3,6в стабилитрон. У меня есть стабилитроны, поэтому я оставил их, но включил расширенный. предохранитель.

Итого 6 $ за установку тактильных переключателей и расширенных частей предохранителя.

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

Предварительный просмотр в JLCPCB показывает размещение и ориентацию всех деталей. В Разъем USB и 2 стабилитрона не засорены и не будут собран.Вы можете увидеть 3 отверстия для инструментов в углах.

Вот что было получено. Все как положено. Только разъем USB и Добавлены стабилитроны.

Остальные части припаяны.

Пробовал 3 разных USB-разъема. Тот, что слева, не подходит для этого посадочного места. Он достаточно выстроен, чтобы работать. Средняя часть — правильная, у нее есть усиливающие фланцы на передней части разъема. Справа — вариант разъема без фланцев, что делает его чуть более низким профилем.

Вид сбоку на 3 различных разъема. Также 2 оригинальных Gherkin Express выше. Самая высокая часть платы — это переключатели.

5 клавиатур в жестяной банке Altoids.

Еще несколько может поместиться.

Поскольку у них есть ATmega328p, загрузчика нет. Я сделал приспособление для подключения к контактным площадкам ISP. После прошивки с помощью USBasploader его можно прошить через USB как устройство USBasp. Переключатели сброса и usbasp работают так же, как и на трубкозубе.Он использует тот же загрузчик, что и трубкозуб.

Общая стоимость 5 собранных плат со всеми включенными деталями составила 32,32 доллара США с учетом купона на 8 долларов США. Добавьте к этому стоимость печатной платы 5 долларов и доставку. Если вы закажете другие печатные платы одновременно, они будут ждать 1-2 дня для сборки SMT и все будут отправлены вместе.

Страница не найдена — RAM Electronics

Все категорииВсе продуктыХлебные доски и аксессуарыКристаллические осцилляторыДатчики Медицинские датчикиUSB-хост и аксессуарыСветодиодные и лазерные источникиКабели и преобразователи данныхВидео и ТВ аксессуарыРоботики | Аксессуары для робототехникиОптопарыКоробки и корпусаБаззеры, пьезо и микрофоны / DC модулиИсточник питания-SMPSAudio | Звук | КамерыПостоянные вентиляторыТеплоусадка и упаковкаПлаты и экраны ArduinoПлата Raspberry PiЭлектронное управлениеРегулируемый источник питания постоянного токаВинты и гайкиПродукты SparkFunКонтроль жидкостиИндуктор / катушкиРаспылитель, очистители и клейСтабилизатор и инвертор питанияСолнечный элементРоторный датчик температурыДиагностика батареи FC-Sockets) Разъемы SMA и BNC Клеммы кабелей Общие разъемы Разъемы питания Контактные разъемы Клеммные колодки D-сверхминиатюрные разъемы RJ USB-разъемы Разъемы RCA Специальные разъемы Водонепроницаемые и пыленепроницаемые разъемы Банановые вилки и аудиоразъемы Электрические разъемы Конденсаторы Плата для разработчиков (с открытым исходным кодом) PIC Microchip Raspberry Pi Arduino Процессор ARM Учебная плата RAM TEXAS INSTRUMENTS Комплекты FPGA Предохранители Стеклянные предохранители Керамические быстродействующие предохранители Карманы для предохранителейПрограммисты и тестеры IC Разъемы для IC и адаптер IC ersIntegrated Circuits (ICs) Микроконтроллеры MCU IC’s TTL & CMOS 74xx, 40xx и 45xx IC Датчик температуры IC Конвертеры АЦП и ЦАП IC Специальная функция IC Драйверы двигателей и контроллеры IC Протоколы USB, RS232 и RS485 IC Таймеры и часы реального времени (RTC) Напряжение ИС Ссылки Усилители ИС с памятью IC | Операционные усилители | Матрица транзисторов ИС компаратора и драйверы ЖК-модули ИС Символьный ЖК-дисплей Графический ЖК-дисплей | OLED Uart Smart TFT LCD Модуль Измерительные приборы HDMI LCD Цифровой мультиметр Токоизмерительные клещи | Измерительные аксессуары для измерителей мощности Осциллографы и функциональный генератор Заземление | Тестеры сопротивления изоляции Кабельный тестер | Логический зонд Измерители окружающей среды и тестеры Продукция торговой марки UNI-T Дальномер Тахометр (измерение числа оборотов в минуту) Мультиметр с автоматическим выбором диапазонаДвигатели, приводы и детали ЧПУ Шаговые двигатели и приводы Двигатели постоянного тока Управление движением (монтажная плата) Шарико-винтовая передача и ходовой винт Гибкая муфта Линейная направляющая и подшипник Шпиндели Зубчатая рейка Рельс и шестерни Кабельная цепь Драйвер двигателя постоянного тока Алюминиевый профиль Маленькие роботизированные серводвигатели Шаговые двигатели с замкнутым контуром Концевые фрезы и цанги Промышленные серводвигатели переменного тока Инструменты для печатных плат ) Распорки для печатных платРезисторы и потенциометры Резисторные сети (матрица) Фоторезисторы на основе компакт-дисков (LDR) NTC | Резисторы RTD Силовые резисторы 5 Вт и 10 Вт Резисторы SMD Углеродный резистор 1 / 4Вт Значения Ом 1 / 4Вт Значения КилоОма 1 / 4Вт Значения Мега Ом Потенциометры Провода и крокодилы Кабели и разъемы типа «крокодил» Провода с предварительно обжатыми выводами Транзисторы Транзисторы MOSFET и JFET-транзисторы Затворные полевые МОП-транзисторы Биполярные транзисторы общего назначения IGBT-транзисторыИнструменты Обжимные инструменты Другие инструменты Инструмент для зачистки проводов и ниппели Пинцет Компоненты и ящики для инструментов Микроскоп и лупы Отвертки Набор инструментов Проводящая жидкость Шестигранный ключ | Звездный ключ | Гаечный ключ Измерительные и измерительные инструменты Сверлильные и шлифовальные инструменты Пайка и демонтаж ЯПОНИЯ Оригинальные инструменты goot ToolsSwitches Переключатель прихвата (кнопки) Микропереключатели Установленные на печатной плате переключатели DIP-переключатели Переключатели включения / выключения питания Термовыключатель Джойстик | Аркадные кнопки Сенсорные переключателиSMD-компоненты SMD-интегральные схемы (IC) SMD-регуляторы напряжения SMD-транзисторы3d-детали для принтеров и детали для 3D-принтеров с нитью накаливания DIY и электроника для детей Простые проекты DIY и детская электроника Профессиональные проекты DIY

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *