Микроконтроллеры AVR: Режимы работы таймеров/счетчиков

В микроконтроллере ATmega328 есть три таймера. 2 из низ по 8 бит (T0, T2) и один 16 бит (T1). Для них всех есть одинаковые режимы работы, представленные ниже:
  • Обычный режим работы. Самый распространенный режим, когда таймер просто считает приходящие импульсы и при переполнении счетного регистра устанавливает флаг прерывания по переполнению. При этом счетный регистр сбрасывается в 0 и подсчет импульсов начинается сначала.
  • Режим подсчета импульсов (Сброс при совпадении).  Также называется CTC. В этом режиме при совпадении счетного регистра с одним из регистров сравнения выставляется флаг прерывания по совпадению, счетный регистр обнуляется и подсчет начинается сначала. При этом по совпадению может меняться сигнал на выходе таймера, соответствующего используемому регистру совпадения. 
  • Режим ШИМ. В данном режиме изменяется ширина импульса в зависимости от значения, записанного в регистр совпадения. Для 8-битного таймера, к примеру, если записать в регистр совпадения число 10, состояние логической единицы на выходе совпадения будет 10 тактов из 256, а логический 0 246 тактов из 256 (для неинверсного режима). В инверсном же режиме 10 тактов будет состояние логического 0 и 246 тактов логической единицы. 
  • Режим коррекции фазы ШИМ. В обычном режиме ШИМ мы получаем плавающую фазу выходного сигнала. Для того, чтобы этого избежать, в режиме коррекции фазы ШИМ при достижении максимального значения, счетный регистр таймера/счетчика начинает уменьшатся. Это происходит циклически.
Это все основные режимы работы таймеров/счетчиков. К примеру у таймера/счетчика T0 присутствуют только они. 
  • Асинхронный режим работы. В асинхронном режиме работы к микроконтроллеру подключается внешний кварцевый резонатор 32 кГц. Чаще всего этот режим используется для работы таймера/счетчика T2 в качестве часов реального времени.
  • Режим коррекции фазы и частоты ШИМ. Отличается от режима коррекции фазы ШИМ лишь моментом обновления регистра сравнения. Регистр сравнения обновляется когда значение счетного регистра достигает минимума.
  • Режим захвата. При поступлении сигнала от аналогового компаратора, а также на вывод ICP1 (14 ножка) значение счетного регистра сохраняется в регистре захвата, устанавливая при этом флаг прерывания по захвату.

avrprog.blogspot.com

Микроконтроллеры AVR: Таймер/счетчик T1 (16 бит)

Характеристики таймера/счетчика T1 (16 бит):
  • Два независимых выхода по совпадению
  • Таймер сброса при совпадении
  • Один вход захвата
  • Блок шумоподавления входа захвата
  • Изменяемый период ШИМ сигнала
  • Фазовый корректор ШИМ сигнала
  • Изменяемый период ШИМ сигнала
  • Тактовый генератор
  • Три независимых источника прерывания

Регистры таймера/счетчика T1:

  • TCNT1 - счетный регистр таймера/счетчика T1 (16 бит)
  • OCR1A - регистр сравнения A (16 бит)
  • OCR1B - регистр сравнения B (16 бит)
  • TIMSK1 - регистр маски прерываний для таймера/счетчика T1
  • TIFR1 - регистр флагов прерываний для таймера/счетчика T1
  • TCCR1A - регистр управления A
  • TCCR1B - регистр управления B
  • TCCR1C - регистр управления C
  • ICR1 - регистр захвата (16 бит)
Источником тактового сигнала для таймера/счетчика T1 может быть как тактовый сигнал используемый для всего микроконтроллера с использованием предделителя, так и сигнал, поступающий на вход T1 (11 ножка). Если не выбрано ни одного источника тактового сигнала, то таймер/счетчик останавливается.

Регистр TCCR1A:

Режим работы таймера/счетчика T1 устанавливается регистрами TCCR1A и TCCR1B 

Биты COM1A1 (7) и COM1A0 (6) влияют на то, какой сигнал появится на выводе OC1A (15 ножка) при совпадении с A (совпадение значения счетного регистра TCNT1 со значением регистра сравнения OCR1A):

    1. Обычный режим

  • 00 - вывод OC1A не функционирует
  • 01 - изменение состояния вывода OC1A на противоположное при совпадении с A
  • 10 - сброс вывода OC1A в 0 при совпадении с A
  • 11 - установка вывода OC1A в 1 при совпадении с A
    2. Режим ШИМ
  • 00 - вывод OC1A не функционирует
  • 01 - если биты WGM13 - WGM10 установлены в (0000 - 1101), вывод OC1A не функционирует
  • 01 - если битыWGM13 - WGM10 установлены в 1110 или 1111, изменение состояния вывода OC0A на противоположное при совпадении с A
  • 10 - сброс вывода OC1A в 0 при совпадении с A, установка  вывода OC1A в 1 если регистр TCNT1 принимает значение 0x00 (неинверсный режим)
  • 11 - установка вывода OC1A в 1 при совпадении с A, установка  вывода OC1A в 0 если регистр TCNT1 принимает значение 0x00  (инверсный режим)

    3. Режим коррекции фазы ШИМ

  • 00 - вывод OC1A не функционирует
  • 01 - если биты WGM13 - WGM10 установлены в (0000 - 1100, 1010, 1100 - 1111), вывод OC1A не функционирует
  • 01 - если битыWGM13 - WGM10 установлены в 1101 или 1011, изменение состояния вывода OC1A на противоположное при совпадении с A
  • 10 - сброс вывода OC1A в 0 при совпадении с A во время увеличения значения счетчика, установка  вывода OC1A в 1  при совпадении с A во время уменьшения значения счетчика
  • 11 - установка вывода OC1A в 1 при совпадении с A во время увеличения значения счетчика, сброс  вывода OC1A в 0  при совпадении с A во время уменьшения значения счетчика

Биты COM1B1 (5) и COM1B0 (4) влияют на то, какой сигнал появится на выводе OC0B (12 ножка) при совпадении с B (совпадение значения счетного регистра 

TCNT1 со значением регистра сравнения OCR1B):

    1. Обычный режим

  • 00 - вывод OC1B не функционирует
  • 01 - изменение состояния вывода OC1B на противоположное при совпадении с B
  • 10 - сброс вывода OC1B в 0 при совпадении с B
  • 11 - установка вывода OC1B в 1 при совпадении с B
    2. Режим ШИМ
  • 00 - вывод OC1B не функционирует
  • 01 - вывод OC1B не функционирует
  • 10 - сброс вывода OC1B в 0 при совпадении с B, установка  вывода OC1B в 1 если регистр TCNT1 принимает значение 0x00 (неинверсный режим)
  • 11 - установка вывода OC1B в 1 при совпадении с B, установка  вывода OC1B в 0 если регистр TCNT1 принимает значение 0x00  (инверсный режим)

    3. Режим коррекции фазы ШИМ

  • 00 - вывод OC1B не функционирует
  • 01 - вывод OC1B не функционирует
  • 10 - сброс вывода OC1B в 0 при совпадении с B во время увеличения значения счетчика, установка  вывода OC1B в 1  при совпадении с B во время уменьшения значения счетчика
  • 11 - установка вывода OC1B в 1 при совпадении с B во время увеличения значения счетчика, сброс  вывода OC1B в 0  при совпадении с B во время уменьшения значения счетчика


Биты WGM13 (4) , WGM12 (3) регистра TCCR1B и биты WGM11 (1) , WGM10 (0) регистра TCCR1A устанавливают режим работы таймера/счетчика T1:

  • 0000 - обычный режим
  • 0001 - коррекция фазы PWM, 8-бит
  • 0010 - коррекция фазы PWM, 9-бит
  • 0011 - коррекция фазы PWM, 10-бит
  • 0100 - режим счета импульсов (OCR1A) (сброс при совпадении)
  • 0101 - PWM, 8-бит
  • 0110 - PWM, 9-бит
  • 0111 - PWM, 10-бит
  • 1000 - коррекция фазы и частоты PWM (ICR1)
  • 1001 - коррекция фазы и частоты PWM (OCR1A)
  • 1010 - коррекция фазы PWM (ICR1)
  • 1011 - коррекция фазы и частоты PWM (OCR1A)
  • 1100 - режим счета импульсов (ICR1) (сброс при совпадении)
  • 1101 - резерв
  • 1110 - PWM (ICR1)
  • 1111 - PWM (OCR1A)

Бит ICNC1 (7) регистра TCCR1B управляет схемой подавления помех блока захвата (0 - выключена / 1 - включена).
Бит ICES1 (6) регистра TCCR1B выбирает активный фронт регистра захвата (0 - по спадающему фронту сигнала / 1 - по нарастающему фронту сигнала).

Биты CS12 (2), CS11 (1), CS10 (0) регистра 

TCCR1B устанавливают режим тактирования и предделителя тактовой частоты таймера/счетчика T1:

  • 000 - таймер/счетчик T1 остановлен
  • 001 - тактовый генератор CLK
  • 010 - CLK/8
  • 011 - CLK/64
  • 100 - CLK/256
  • 101 - CLK/1024
  • 110 - внешний источник на выводе T1 (11 ножка) по спаду сигнала
  • 111 - внешний источник на выводе T1 (11 ножка) по возрастанию сигнала

Биты FOC1A (7) и FOC1B (6) регистра TCCR1С принудительно устанавливают значение на выводах OC1A и OC1B.

Регистр TIMSK1:

Управление прерываниями от таймера осуществляется в регистре TIMSK1.

Бит ICIE1 (5) разрешает прерывание по захвату, биты OCIE1B (2) и OCIE1A (1) разрешают прерывания при совпадении с A и B, бит TOIE1 (0) разрешает прерывание по переполнению при установке 1. Если в эти биты записать 0, прерывания от таймера/счетчика будут запрещены.

Также есть регистр флагов прерываний TIFR1, который показывает какое прерывание поступило от таймера/счетчика T0.

Регистр TIFR1:


Биты ICF1 (5), OCF1B (2), OCF1A (1) и TOV1 (0) устанавливаются в 1 в зависимости от того, какое прерывание поступило - захват, совпадение с A, B или переполнение.

avrprog.blogspot.com

Микроконтроллеры AVR: Таймер/счетчик T0 (8 бит)

Характеристики таймера/счетчика T0 (8 бит):
  • Два независимых выхода по совпадению
  • Таймер сброса при совпадении
  • Изменяемый период ШИМ сигнала
  • Фазовый корректор ШИМ сигнала
  • Тактовый генератор
  • Три независимых источника прерывания

Регистры таймера/счетчика T0:

  • TCNT0 - счетный регистр таймера/счетчика T0
  • OCR0A - регистр сравнения A
  • OCR0B - регистр сравнения B
  • TIMSK0 - регистр маски прерываний для таймера/счетчика T0
  • TIFR0 - регистр флагов прерываний для таймера/счетчика T0
  • TCCR0A - регистр управления A
  • TCCR0B - регистр управления B

Источником тактового сигнала для таймера/счетчика T0 может быть как тактовый сигнал используемый для всего микроконтроллера с использованием предделителя, так и сигнал, поступающий на вход T0 (6 ножка). Если не выбрано ни одного источника тактового сигнала, то таймер/счетчик останавливается. 

Режим работы таймера/счетчика T0 устанавливается регистрами TCCR0A и TCCR0B.

Регистр TCCR0A:


Биты COM0A1 (7) и COM0A0 (6) влияют на то, какой сигнал появится на выводе OC0A (12 ножка) при совпадении с A (совпадение значения счетного регистра TCNT0 со значением регистра сравнения OCR0A):

    1. Обычный режим

  • 00 - вывод OC0A не функционирует
  • 01 - изменение состояния вывода OC0A на противоположное при совпадении с A
  • 10 - сброс вывода OC0A в 0 при совпадении с A
  • 11 - установка вывода OC0A в 1 при совпадении с A
    2. Режим ШИМ
  • 00 - вывод OC0A не функционирует
  • 01 - если бит WGM02 регистра TCCR0B установлен в 0, вывод OC0A не функционирует
  • 01 - если бит WGM02 регистра TCCR0B установлен в 1, изменение состояния вывода OC0A на противоположное при совпадении с A
  • 10 - сброс вывода OC0A в 0 при совпадении с A, установка  вывода OC0A в 1 если регистр TCNT0 принимает значение 0x00 (неинверсный режим)
  • 11 - установка вывода OC0A в 1 при совпадении с A, установка  вывода OC0A в 0 если регистр 
    TCNT0
     принимает значение 0x00  (инверсный режим)

    3. Режим коррекции фазы ШИМ

  • 00 - вывод OC0A не функционирует
  • 01 - если бит WGM02 регистра TCCR0B установлен в 0, вывод OC0A не функционирует
  • 01 - если бит WGM02 регистра TCCR0B установлен в 0, изменение состояния вывода OC0A на противоположное
  • 10 - сброс вывода OC0A в 0 при совпадении с A во время увеличения значения счетчика, установка  вывода OC0A в 1  при совпадении с A во время уменьшения значения счетчика
  • 11 - установка вывода OC0A в 1 при совпадении с A во время увеличения значения счетчика, сброс  вывода OC0A в 0  при совпадении с A во время уменьшения значения счетчика

Биты COM0B1 (5) и COM0B0 (4) влияют на то, какой сигнал появится на выводе OC0B (11 ножка) при совпадении с B (совпадение значения счетного регистра TCNT0 со значением регистра сравнения OCR0B):

    1. Обычный режим

  • 00 - вывод OC0B не функционирует
  • 01 - изменение состояния вывода OC0B на противоположное при совпадении с B
  • 10 - сброс вывода OC0B в 0 при совпадении с B
  • 11 - установка вывода OC0B в 1 при совпадении с B
    2. Режим ШИМ
  • 00 - вывод OC0B не функционирует
  • 01 - резерв
  • 10 - сброс вывода OC0B в 0 при совпадении с B, установка  вывода OC0B в 1 если регистр TCNT0 принимает значение 0x00 (неинверсный режим)
  • 11 - установка вывода OC0B в 1 при совпадении с B, установка  вывода OC0B в 0 если регистр TCNT0 принимает значение 0x00  (инверсный режим)

    3. Режим коррекции фазы ШИМ

  • 00 - вывод OC0B не функционирует
  • 01 - резерв
  • 10 - сброс вывода OC0B в 0 при совпадении с B во время увеличения значения счетчика, установка  вывода OC0B в 1  при совпадении с B во время уменьшения значения счетчика
  • 11 - установка вывода OC0B в 1 при совпадении с B во время увеличения значения счетчика, сброс  вывода OC0B в 0  при совпадении с B во время уменьшения значения счетчика

Биты WGM01 (1) , WGM00 (0) регистра TCCR0A устанавливают режим работы таймера/счетчика T0:

  • 00 - обычный режим
  • 01 - режим коррекции фазы ШИМ
  • 10 - режим подсчета импульсов (сброс при совпадении)
  • 11 - режим ШИМ


Биты FOC0A (7) и FOC0B (6) регистра TCCR0B принудительно устанавливают значение на выводах OC0A и OC0B.

Биты CS02 (2), CS01 (1), CS00 (0) регистра TCCR0B устанавливают режим тактирования и предделителя тактовой частоты таймера/счетчика T0:

  • 000 - таймер/счетчик T0 остановлен
  • 001 - тактовый генератор CLK
  • 010 - CLK/8
  • 011 - CLK/64
  • 100 - CLK/256
  • 101 - CLK/1024
  • 110 - внешний источник на выводе T0 (6 ножка) по спаду сигнала
  • 111 - внешний источник на выводе T0 (6 ножка) по возрастанию сигнала
Управление прерываниями от таймера осуществляется в регистре TIMSK0.

Регистр TIMSK0:


Биты OCIE0B (2) и OCIE0A (1) разрешают прерывания при совпадении с A и B, а бит TOIE0 (0) разрешает прерывание по переполнению при установке 1. Если в эти биты записать 0, прерывания от таймера/счетчика будут запрещены.

Также есть регистр флагов прерываний TIFR0, который показывает какое прерывание поступило от таймера/счетчика T0.

Регистр TIFR0:


Биты OCF0B (2), OCF0A (1) и TOV0 (0) устанавливаются в 1 в зависимости от того, какое прерывание поступило - совпадение с A, B или переполнение.

avrprog.blogspot.com

Микроконтроллеры AVR: Таймер/счетчик T2 (8 бит)

Характеристики таймера/счетчика T2 (8 бит):
  • Два независимых выхода по совпадению 
  • Таймер сброса при совпадении
  • Изменяемый период ШИМ сигнала 
  • Фазовый корректор ШИМ сигнала
  • Тактовый генератор
  • Возможность работы от независимого внешнего часового тактового генератора 32 кГц
  • Три независимых источника прерывания
  • Делитель частоты 10-бит
  • Асинхронный режим

Регистры таймера/счетчика T2:

  • TCNT2 - счетный регистр таймера/счетчика T2
  • OCR2A - регистр сравнения A
  • OCR2B - регистр сравнения B
  • TIMSK2 - регистр маски прерываний для таймера/счетчика T2
  • TIFR2 - регистр флагов прерываний для таймера/счетчика T2
  • TCCR2A - регистр управления A
  • TCCR2B - регистр управления B
  • ASSR - регистр асинхронного режима 
  • GTCCR - главный регистр всех таймеров/счетчиков

Источником тактового сигнала для таймера/счетчика T2 может быть тактовый сигнал используемый для всего микроконтроллера с использованием предделителя. Если не выбран коэффициент деления, то таймер/счетчик останавливается. 

Режим работы таймера/счетчика T2 устанавливается регистрами TCCR2A и TCCR2B аналогично таймеру/счетчику T0.

Регистр TCCR2B:


Разница лишь в битах CS22 (2), CS21 (1), CS20 (0) регистра TCCR2B которые устанавливают режим тактирования.
  • 000 - таймер остановлен
  • 001 - CLK
  • 010 - CLK/8
  • 011 - CLK/32
  • 100 - CLK/64
  • 101 - CLK/128
  • 110 - CLK/256
  • 111 - CLK/1024
Также у таймера/счетчика есть асинхронный режим работы.

Регистр ASSR:


Бит EXCLK (6) регистра ASSR разрешает использование внешнего тактового сигнала от кварцевого резонатора 32 кГц при записи в него 1.

Бит  AS2 (5) регистра ASSR управляет способом тактирования (1 - от внешнего резонатора 32 кГц, подключенного к TOSC1 (9 ножка) / 0 - от внутреннего генератора CLK)/

Бит TCN2UB (4) регистра ASSR показывает доступен ли для записи регистр TCNT2 (1-недоступен / 0 - доступен).

Бит OCR2AUB (3) регистра ASSR показывает доступен ли для записи регистр OCR2A (1-недоступен / 0 - доступен).

Бит OCR2BUB (2) регистра ASSR показывает доступен ли для записи регистр OCR2B (1-недоступен / 0 - доступен).

Бит TCR2AUB (1) регистра ASSR показывает доступен ли для записи регистр TCCR2A (1-недоступен / 0 - доступен).

Бит TCR2BUB (0) регистра ASSR показывает доступен ли для записи регистр TCCR2B (1-недоступен / 0 - доступен).

Регистр GTCCR:

Бит PSRASY (1) регистра GTCCR сбрасывает предделитель таймера/счетчика T2 если установить в 1, после этого бит сбрасывается в 0  автоматически.

Бит PSRASYNC (0) регистра GTCCR сбрасывает предделитель таймера/счетчика T0 и T1 если установить в 1, после этого бит сбрасывается в 0  автоматически.

Бит TSM (0) регистра GTCCR запрещает автоматический сброс битов PSRASY и PSRASYNC регистра GTCCR.

avrprog.blogspot.com

Микроконтроллер ATmega328 — описание, характеристики

От iteh  26/02/2018 | 7 989 просмотров | Микроконтроллеры AVR 

Микроконтроллер ATMega328 является 8-ми разрядным CMOS микроконтроллером с низким энергопотреблением, основанным на усовершенствованной AVR RISC архитектуре.

ATmega328/P — микроконтроллер семейства AVR, как и все остальные имеет 8-битный процессор и позволяет выполнять большинство команд за один такт.

Память:

  • 32 kB Flash (память программ, имеющая возможность самопрограммирования)
  • 2 kB ОЗУ
  • 1 kB EEPROM (постоянная память данных)

Периферийные устройства:

  • Два 8-битных таймера/счетчика с модулям сравнения и делителями частоты
  • 16-битный таймер/счетчик с модулем сравнения и делителем частоты, а также с режимом записи
  • Счетчик реального времени с отдельным генератором
  • Шесть каналов PWM (аналог ЦАП)
  • 6-канальный ЦАП со встроенным датчиком температуры
  • Программируемый последовательный порт USART
  • Последовательный интерфейс SPI
  • Интерфейс I2C
  • Программируемый сторожевой таймер с отдельным внутренним генератором
  • Внутренняя схема сравнения напряжений
  • Блок обработки прерываний и пробуждения при изменении напряжений на выводах микроконтроллера

Специальные функции микроконтроллера ATmega328:

  • Сброс при включении питания и программное распознавание снижения напряжения питания
  • Внутренний калибруемый генератор тактовых импульсов
  • Обработка внутренних и внешних прерываний
  • 6 режимов сна (пониженное энергопотребление и снижение шумов для более точного преобразования АЦП)

Напряжения питания и скорость процессора:

  • 1.8 — 5.5 В  при частоте до 4 МГц
  • 2.7 — 5.5 В при частоте до 10 МГц
  • 4.5 — 5.5 В при частоте до 20 МГц

Файлы:

>> Скачать даташит ATMega328

Похожие записи

robolive.ru

ATMEGA328P-PU как замена Arduino

Раз уж Arduino стал практически мейнстримом, напишу обзор про микроконтроллеры ATMEGA328
Данный микроконтроллер является сердцем Arduino Uno, Nano, Pro Mini и ряда других плат.
Но Arduino — это слишком просто. Купил, подключил, загрузил программу и вот уже гордо мигает светодиод на плате. Мы же легких путей не ищем и программируем голые микроконтроллеры на ассемблере поэтому и куплены данные микросхемы. Тем кому интересно, прошу под кат.

Итак зачем все это нужно?
Ну во первых, это экономия в деньгах (Правда с ценами на Pro Mini очень сомнительная)

Во вторых, экономия места

В третьих, микросхемы без всяких преобразователей и светодиодов очень экономичны, что немаловажно в проектах с батарейным питанием.

В четвертых, проекты на Arduino весьма неопрятны из за мотка проводов вокруг платы. Микроконтроллеры же вполне можно паять на макетках или нормальных печатных платах.

Ну и в пятых, это ведь интересно и познавательно!

Заказал я данные микросхемы на Алиэксперсс. Лот состоит из 10 микроконтроллеров, 10 панелек для них, и 10 кварцевых резонаторов на 16МГц. Сейчас лот подорожал до $35 и купить за адекватную цену Atmegу можно разве что на Таобао.

Заказ шел целых 97 дней. Трек быстро отозвался в Китае и завис, не дойдя до России. Я успел пообщаться с продавцом, открыть спор и выиграть его, когда нежданно посылка нарисовалась в Москве. Деньги я вернул продавцу на PayPal, видимо у него где-то есть еще и магазин.
Итак все довольны — продавец получил заслуженную прибыль, а я долгожданный товар.

Подробное описание ATMEGA328 можно посмотреть на сайте atmel.com.
Буковка «P» в названии означает низкое энергопотребление, а PU-корпус DIP28, который удобно паять обычным паяльником.

Сам товар:

Контроллер с панелькой и кварцем

Как это все готовить?
Для программирования взят очень дешевый программатор USBasp за 3.14 (Пи?) баксов.
Для простоты, используем ICSP разъем стандартной Arduino UNO

В панельку Arduino вставляем наш микроконтроллер.

Далее качаем и устанавливаем драйвер для программатора. Запускам стандартную ArduinoIDE, выбираем в меню «Сервис->Программатор->USBasp», плату ArduinoUNO и нажимаем «Записать загрузчик». После окончания процесса загрузки мы получаем контроллер, такой же как и в UNO, в который можно уже в дальнейшем заливать программы через стандартный USB Ардуины.

Далее мне захотелось использовать встроенный кварцевый резонатор на 8МГц, чтобы иметь минимум деталей на плате.
Открываем файл с описанием микроконтроллера c:\Program Files (x86)\Arduino\hardware\arduino\boards.txt
Копируем блок с Uno и правим в нм Фьюзы. Это специальные биты для настроки контроллера. Прочитать про них можно здесь. Сконфигурировать при помощи онлайн-калькулятора. Загрузив в калькулятор значения от UNO я устанавливаю стандартное значение с встроенным кварцем на 8МГц.
Затем заменяю значение в файле с описанием плат и получаю такое описание:

tmega328_8.name=Atmega328 (5V, 8 MHz internal) 

atmega328_8.upload.protocol=arduino
atmega328_8.upload.maximum_size=30720
atmega328_8.upload.speed=57600

atmega328_8.bootloader.low_fuses=0xE2
atmega328_8.bootloader.high_fuses=0xDE
atmega328_8.bootloader.extended_fuses=0x05
atmega328_8.bootloader.path=optiboot
atmega328_8.bootloader.file=optiboot_atmega328.hex
atmega328_8.bootloader.unlock_bits=0x3F
atmega328_8.bootloader.lock_bits=0x0F

atmega328_8.build.mcu=atmega328p
atmega328_8.build.f_cpu=8000000L
atmega328_8.build.core=arduino
atmega328_8.build.variant=standard

Затем в среде Arduino выбираю свой микроконтроллер и снова прошиваю загрузчик.
Все, я получил микроконтроллер, в который можно заливать скетчи на Arduino UNO плате, а затем использовать его без внешнего кварца.

Можно не прошивать контроллеру загрузчик, но тогда заливать в него программы всегда придется через программатор.

Чтобы не соединять самому 10пинвый разъем на USBasp к 6-ти пиновому ICSP на Arduino заказал такой переходник
Потом подумал, и заказал такой переходник для программатора, позволяющий обходится без Arduino Uno. Так что надеюсь, следующие микросхемы буду шить с большим комфортом.

Рекомендую ли я данные микроконтроллеры — скорее нет. При цене на Arduino Pro Micro — $2.88 это не особенно целесообразно. Сейчас я бы купил Atmega8 стоимостью около 1$ или Atiny, для проектов, где не нужно возможности Atmega328.

Где я все это планирую применять?
Хочу сделать сенсорные беспроводные выключатели света, вентиляторов и др. устройств, причем разместить их прямо в корпусах выключателей.
В люстрах, для получения радиокоманд от этих выключателей, а также для диммирования.
В миниатюрном погодном датчике на аккумуляторе за окном.
В контроллере управления вентилятором на кухне и в ванной.
Да мало ли сколько еще «нужных и полезных» устройств можно сделать?

А как же мозг не вскипел все это реализовывать?
Ну конечно же был помощник

Все статьи мои статьи можно найти в моем блоге samopal.pro

mysku.ru

Пишем свою операционку для Arduino. Шаг 1 — настраиваем таймер — Misc

Люблю я на досуге поиграться с 8-битными AVR-микроконтроллерами. Почему? Потому что они просты в использовании и программировании, у них весьма очевидное внутреннее устройство, но при всем этом они позволяют быстро, дешево и без sms запиливать достаточно нетривиальные проекты. Arduino (и всевозможные дешевые китайские клоны, разумеется) - вообще достаточно популярная железка (и среда разработки) среди погромистов и инженеров. Имея на руках пару breadboard'ов и клубок проводов для них, с Arduino вы сможете без пайки собрать макет какого-нибудь проекта и закодить его, практически не напрягаясь.

Но я сюда пишу не для того, чтобы поднять продажи китайцам, а чтобы заняться настоящей хардкорной разработкой под AVR. Сегодня мы с вами начнем писать настоящую операционную систему с вытесняющей многозадачностью, которую потом запустим на обычных железяках Arduino! Но это еще не все, ведь мы будем писать эту ОСь на C C++14, сдабривая все это щедрым количеством ассемблерных вставок и макросов. Вот это будет пламенная смесь! А назовем мы нашу операционную систему пафосно - Atmos!

Перед тем, как начать, я должен сказать, что подобные ОС достаточно профессионального уровня и с длительной поддержкой уже существуют. Это, например, кросс-платформенная богатая на фичи и толстая FreeRTOS, или компактная (но не очень удобная) Femto OS. Вы, конечно, можете открыть их исходные коды и постараться разобраться, в чем я вам желаю удачи. Но я в этом цикле статей поясню базовые принципы, которые стоят за созданием такой операционки для AVR и буду писать ее по шагам, разжевывая подробно каждый этап. Если вы готовы вместе со мной окунуться в раскаленные пучины кода, то вперед!

Сперва я отвечу на вопрос, который мог у вас возникнуть: "В AVR и так памяти для кода и оперативки раз-два и обчелся, какая нах*й еще многозадачность?!". Ну тогда сначала определим, зачем нам вообще может понадобиться операционная система с вытесняющей многозадачностью для AVR8. Например, у вас в контроллере несколько кусков кода (функций/задач), которые должны выполняться независимо и одновременно, а пихать их все в один цикл - не комильфо. Или, например, одна из этих функций должна ожидать определенных условий и только тогда запускаться. Особенно, если такие условия выставляются другими уже работающими задачами. Или часть времени у вас контроллер вообще должен простаивать, а все эти задачи должны приостанавливаться на заданный промежуток времени. А когда ни одна из задач не выполняется, вообще неплохо было бы переключить контроллер в режим экономии энергии. И так далее. "Оке, это, вроде бы, полезные фишки, ну а что с памятью?" - спросите вы. А с памятью все не так плохо. В 3-4 килобайта можно уместить массу функционала со стороны ОС. Даже если брать Atmega8 - у этого контроллера 8 кб доступно, итого у вас останется еще ~4 килобайта для ваших задач. А с оперативкой вот что: на каждую задачу будет необходимо выделить блок оперативной памяти определенного размера, порядка 40 байтов (для архитектуры reduced tiny - почти в два раза меньше). Сама ОС тоже потребует около 20 байтов оперативной памяти. А дальше все уже зависит от того, сколько памяти требует ваш код. Если брать ту же Atmega8, то для трех выполняемых задач и ОС потребуется порядка 140 байтов оперативки из 1 килобайта доступной. Почему именно такие цифры, увидим дальше, по ходу разработки. По-моему, это не очень большое количество ресурсов, которое у вас отожрет ОС, особенно, если вы не планируете забить контроллер под завязку. Конечно, независимо работающие задачи могут потребовать больше кода со своей стороны (для синхронизации доступа к портам, например), но в любом случае оверхед не будет слишком объемным.

Ну, а теперь поехали! Для начала определим, а можно ли вообще такую ОСь запилить под 8-битные AVR. Что нам для

kaimi.io

alexxlab

leave a Comment