Site Loader

Прерывания. Таблица векторов прерываний ATtiny13

В этом разделе описываются особенности обработки прерываний, выполняемые в ATtiny13A.

Полезная справочная таблица по векторам прерываний Attiny2313:

Расположение векторов прерываний в таблице определяет приоритет их обработки. Чем младше адрес прерывания, тем выше приоритет.

Взято с сайта avrinfo

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

Vector No. Program AddressSourceInterrupt Definition
10x0000RESETВнешний контакт, сброс при включении питания, cброс при отключении питания, сброс сторожевого таймера
20x0001INT0Внешнее прерывание 0
30x0002PCINT0Прерывание по изменению состояния выводов
40x0003TIM0_OVFПереполнение таймера\счётчика
50x0004EE_RDYEEPROM готова
60x0005ANA_COMPАналоговый компаратор
70x0006TIM0_COMPAСовпадение А таймера\счётчика T0
80x0007TIM0_COMPBСовпадение B таймера\счётчика T0
90x0008WDTПереполнение сторожевого таймера
100x0009ADCПреобразование АЦП завершено
Векторы прерывания и сброса МК Attiny 13A

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

Наиболее типичная и общая настройка программы для адресов вектора сброса и прерывания в
ATtiny13A (пример):

Address Labels Code         Comments
0x0000 rjmp RESET                    ; Reset Handler
0x0001 rjmp EXT_INT0                 ; IRQ0 Handler
0x0002 rjmp PCINT0                   ; PCINT0 Handler
0x0003 rjmp TIM0_OVF                 ; Timer0 Overflow Handler
0x0004 rjmp EE_RDY                   ; EEPROM Ready Handler
0x0005 rjmp ANA_COMP                 ; Analog Comparator Handler
0x0006 rjmp TIM0_COMPA               ; Timer0 CompareA Handler
0x0007 rjmp TIM0_COMPB               ; Timer0 CompareB Handler
0x0008 rjmp WATCHDOG                 ; Watchdog Interrupt Handler
0x0009 rjmp ADC                      ; ADC Conversion Handler
                                     ;
0x000A RESET: ldi r16, low(RAMEND)   ; Main program start
0x000B out SPL,r16                   ; Set Stack Pointer to top of RAM
0x000C sei                           ; Enable interrupts
0x000D <instr> xxx
.
.. ... ... ...

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

Внешние прерывания запускаются выводом INT0 или любым выводом PCINT[5:0]. Заметьте, что если они включены, прерывания будут срабатывать, даже если выводы INT0 или PCINT[5:0] сконфигурированы как выходы. Эта функция позволяет применять программное прерывание. Прерывания смены контакта PCI сработает, если какой-либо включенный вывод PCINT[5:0] переключится. Регистр PCMSK определяет, какие контакты способствуют прерываниям по смене пина. Прерывания смены пина на PCINT[5:0] обнаруживаются асинхронно. Это означает, что эти прерывания могут использоваться для пробуждения устройства из спящего (sleep) режима, отличающегося от режима ожидания (idle).

Прерывания INT0 могут быть вызваны падающим или нарастающим фронтом или низким уровнем. Это настраивается, как указано в спецификации для регистра управления MCU – MCUCR. Когда прерывание INT0 включено и настроено как срабатывание по уровню, прерывание будет срабатывать до тех пор, пока контакт удерживается на низком уровне. Обратите внимание, что распознавание прерываний по заднему или переднему фронту на INT0 требует наличия таймера ввода-вывода (I/O clock).

Прерывание по низкому уровню (low level interrupt)

Прерывание низкого уровня на INT0 обнаруживается асинхронно. Это означает, что это прерывание может быть использовано для пробуждения детали из спящего режима (sleep), в отличие от режима ожидания (idl). Таймер ввода-вывода (I/O Clock) остановлен в
всех спящих режимах (sleep), кроме режима ожидания (idle).


Обратите внимание, что если прерывание, запускаемое по уровню, используется для пробуждения после выключения питания (power down), то необходимый уровень должен удерживаться достаточно долго, чтобы MCU завершил пробуждение, чтобы вызвать прерывание по уровню. Если
уровень исчезнет до наступления запущенного состояния (Start-up Time), MCU всё равно проснётся, но уже без прерывания. Время запуска определяется фьюзами SUT и CKSEL, как описано в
«Системные таймеры и параметры таймеров».

Если низкий уровень на контакте прерывания изменён до того, как устройство проснулось, тогда исполнение команды по прерыванию не будет переключено на процедуру обслуживания прерывания, а продолжится с инструкции, следующей за командой SLEEP.

Програмирование в AVR Studio 5 с самого начала. Часть 7 » Журнал практической электроники Датагор

Поговорим о прерываниях. Слово прерывание говорит само за себя, происходит остановка какого — то процесса на какое — то время, для того чтобы выполнить дополнительные действия. Прерывания могут быть внешними или внутренними. Приведу простой пример, услышанный из уст моего друга…

Собрался он помыть посуду на кухне, взялся с азартом, засучив рукава…но посуда оказалась жирной и он был вынужден прерваться, чтобы найти на одной из полок кухонного гарнитура средство для мытья жирной посуды, после чего снова продолжил свое занятие. Но в какой-то момент зазвонил телефон, и он опять прервался от своей работы, поднял трубку, звонила теща и сказала, что придет в гости, значит надо сходить в магазин купить продукты к ее приходу. Сходил в магазин и только после этого домыл посуду.

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


🌼 Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.

Трансформатор R-core 30Ватт 2 x 6V 9V 12V 15V 18V 24V 30V

Паяльная станция 80W SUGON T26, жала и ручки JBC!

Отличная прочная сумочка для инструмента и мелочей

Хороший кабель Display Port для монитора, DP1.4

Конденсаторы WIMA MKP2 полипропилен

Трансформатор-тор 30 Ватт, 12V 15V 18V 24V 28V 30V 36V

SN-390 Держатель для удобной пайки печатных плат

Панельки для электронных ламп 8 пин, керамика

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


Вторым, и наверное во многих случаях основным считается ускорение процесса выполнения всех функций, за счет внутренних дополнительных устройств. Вернемся к нашему примеру. Допустим, мой друг взялся мыть посуду, когда его жена уже пришла домой. Увидев жирную посуду, он просит ее найти средство для мытья посуды, и пока он моет, она уже принесет ему это средство. Но, вот зазвонил телефон, трубку поднимет жена, поговорит с мамой и сходит в магазин. Совместно все дела сделаны очень быстро!
А еще проще зациклится – т.е. основной программы нет.
Мой друг сидит на диване и ничего не делает, домоработница увидев грязную посуду, говорит ему об этом, и получив разрешение, начинает мыть сама. Когда звонит телефон, он говорит жене, чтобы она подняла трубку, жена разговаривает по телефону, и поле разговора идет в магазин за продуктами… Красота! В таком случае в микроконтроллере одновременно работают несколько устройств ввода-вывода (в современных микроконтроллерах их может быть достаточно много) и общая производительность процессора возрастает во много раз, но прерывания от устройств обрабатываются последовательно одно за другим (не одновременно), в зависимости от приоритета (в нашем примере жена имеет больший приоритет, нежели домоработница).

За управление прерываниями отвечают несколько регистров

SREG –регистр статуса (состояния). Смотрим таблицу устройств ввода-вывода. Седьмой бит регистра SREG –флаг I (interrupt), который называется флагом глобального разрешения прерываний. Если флаг опущен (седьмой бит равен нулю), то все прерывания запрещены. Если флаг поднять (установить I в 1), мы разрешим прерывания.

Устанавливается и сбрасывается флаг I командами:
SEI — разрешить прерывания
CLI — запретить прерывания
Какие из прерываний будут работать, задается с помощью регистров называемых – масками прерываний.
Обозначаются маски прерываний следующим образом:
TIMSK,..,..,.. – управление прерываниями от таймеров и других встроенных устройств

.
GIMSK (GIKR в семействе Mega) — управление всеми внешними прерываниями.
Маски прерываний в свою очередь зависят от флагов прерываний:
TIFR и GIFR соответственно (не путайте с флагом глобального разрешения прерываний).

Последовательность выполнения прерываний:
При включении микроконтроллера все флаги прерываний сброшены в 0. Для включения прерываний программа должна установить флаг I регистра SREG в 1. После этого прописать регистры маски с установленными локальными прерываниями (прерывания, которые нам нужны).

Когда приходит (сигнал) запрос на прерывание, то он поднимает флаг прерывания (даже в том случае если прерывание запрещено, для организации вложенных прерываний и приоритета между разными прерываниями). Если нет запрета прерываний, то контроллер обратится к соответствующему (Interrupt Vectors) — вектору прерываний, приостанавливая текущую программу.
Вектор прерывания – это фиксированная строка программной области, куда переходит программа в случае возникновения прерывания.
Весь список векторов прерывания – называется таблицей векторов прерывания, который располагается в начале программного кода.
Итак, в момент обращения к вектору прерывания, флаг I регистра SREG и флаг вызвавший прерывание сбрасывается в 0, запрещая другие прерывания.
Если в процессе выполнения прерывания, возникли другие запросы прерываний, флаги этих прерываний остаются поднятыми. По окончании выполнения текущего прерывания флаг I регистра SREG поднимается, разрешая выполнение следующего. Если пришли несколько запросов, и их флаги окажутся поднятыми то первым будет выполнено прерывание, чей вектор меньше по адресу в таблице, ближе к началу памяти. За ним второй, и так далее. Кроме этого программист может организовать так называемое вложенное прерывание, когда в процессе выполнения программы прерывания возникает еще одно прерывание. Тогда прекращается выполнение текущего прерывания и выполняется новое, после завершения которого, возобновляется выполнение остановленного прерывания.

В качестве примера приведена таблица векторов прерывания для ATtiny2313

Таблица векторов прерывания для Атмега16 выглядит следующим образом:

При сравнении, таблицы совершенно не совпадают.
В семействе ATtiny строка вектора прерывания занимает 16 бит, а в семействе Mega занимают 32 бита (обратите внимание на адреса векторов прерывания, напомню, что адресная строка в программной области представлена 16 битным словом).

Программный код для ATtiny2313 может выглядеть следующим образом:

.cseg
.org 0
rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP
rjmp PCINT
rjmp Timer1_compB
rjmp Timer0_compA
rjmp Timer0_compB
rjmp USI_START
rjmp USI_OVERFLOW
rjmp EE_READY
rjmp WDT_ OVERFLOW

Как видно, вектор прерывания создает относительный переход на метки программ прерываний. Ниже в таблице показаны варианты; 1. Когда нет прерываний; 2, 3. с внешним прерыванием по входу INT_1.
Если метки «пустые” (под меткой нет программы), то ничего не происходит, и программа последовательно «пробежавшись” по оставшимся меткам благополучно доходит до команды RETI- Interrupt return — выход из обработчика прерывания как показано в первом столбце таблицы.

Чтобы выполнить программу прерывания, например по входу INT_1, нужно метку INT_1: вынести из списка. Это схематично показано во втором столбце таблицы.
Но, программисту неудобно каждый раз прописывать все прерывания и отдельно метки к ним, особенно в последних моделях, где таблица достаточно большая, проще в строке вектора прерывания сразу написать команду RETI, если прерывание не используется. Тогда программа будет выглядеть, как показано в третьем столбце таблицы.

В AVR-контроллерах в зависимости от модели может быть от 1 до 8 входов внешних прерываний.
Рассмотрим систему управления внешними прерываниями. Для этого предусмотрены следующие комбинации I/O-регистров в зависимости от модели (см. соответствующий DataSheet):
 — GIMSK, EIFR, PCMSK, MCUCR;
 — GIKR, GIFR, MCUCR;
 — EIMSK, EICR, EIFR;
GIMSK, GIKR, EIMSK — маски прерываний,
EIFR, PCMSK, GIFR, EIFR – флаги прерываний
Для разрешения или запрещения внешних прерываний предназначены управляющие регистры: GIMSK-(General Interrupt Mask Register)(Tiny), GICR- (General Interrupt Control Register)(Mega), MCUCR – (MCU Control Register)

Tiny

и соответствующий ему регистр флагов

EIFR- External Interrupt Flag Register: 1- разрешено, 0 – запрещено. Каждый бит (флаг) разрешает соответствующему выводу работать в качестве источника прерываний.

Биты управления регистра GIMSK:
Бит 7 – INT1: External Interrupt Request 1 Enable – бит разрешения прерывания INT1: 1 – разрешено, 0 – запрещено. Прерывание будет формироваться, даже если вывод INT1 настроен как выход. Бит INT1 настраиваются на прерывание в регистре флагов EIFR. Вывод INT1 синхронизирован с тактовым генератором.

Бит 6 – INT0: External Interrupt Request 0 Enable — бит разрешения прерывания INT0: 1 – разрешено, 0 – запрещено. Прерывание будет формироваться, даже если вывод INT0 настроен как выход. Бит INT0 настраиваются на прерывание в регистре флагов EIFR. Вывод INT10 синхронизирован с тактовым генератором.

Бит 5 – PCIE: Pin Change Interrupt Enable – бит разрешения прерывания на выводах PCINT0…7: 1- разрешено, 0 – запрещено. Любое изменение на любом из выводов PCINT0…7 будет формировать прерывание. Выводы PCINT0…7 настраиваются на прерывание индивидуально, битами в регистре флагов PCMSK.

PCMSK — Pin Change Mask Regiser — регистр флагов PCMSK: 1- разрешено, 0 – запрещено. Каждый бит (флаг) разрешает соответствующему выводу работать в качестве источника прерываний. Выводы PCINT0…7 не синхронизированы с тактовым генератором, т.е. прерывание наступает по факту изменения на любом из выводов.

Mega8

и соответствующий ему регистр флагов

GIFR– General Interrupt Flag Register: 1- разрешено, 0 – запрещено. Каждый бит (флаг) разрешает соответствующему выводу работать в качестве источника прерываний.

Биты управления регистра GICR:
Бит 7 – : External Interrupt Request 1 Enable – бит разрешения прерывания INT1: 1 – разрешено, 0 – запрещено. Прерывание будет формироваться, даже если вывод INT1 настроен как выход. Бит INT1 настраиваются на прерывание в регистре флагов GIFR

Бит 6 – INT0: External Interrupt Request 0 Enable — бит разрешения прерывания INT0: 1 – разрешено, 0 – запрещено. Прерывание будет формироваться, даже если вывод INT0 настроен как выход. Бит INT0 настраиваются на прерывание в регистре флагов GIFR

Mega16


GIFR– General Interrupt Flag Register: 1- разрешено, 0 – запрещено. Каждый бит (флаг) разрешает соответствующему выводу работать в качестве источника прерываний.

Биты управления регистра GICR:
Бит 7 – : External Interrupt Request 1 Enable – бит разрешения прерывания INT1: 1 – разрешено, 0 – запрещено. Прерывание будет формироваться, даже если вывод INT1 настроен как выход. Бит INT1 настраиваются на прерывание в регистре флагов GIFR

Бит 6 – INT0: External Interrupt Request 0 Enable — бит разрешения прерывания INT0: 1 – разрешено, 0 – запрещено. Прерывание будет формироваться, даже если вывод INT0 настроен как выход. Бит INT0 настраиваются на прерывание в регистре флагов GIFR

Бит 5 – INT2: External Interrupt Request 2 Enable — бит разрешения прерывания INT2: 1 – разрешено, 0 – запрещено. Прерывание будет формироваться, даже если вывод INT2 настроен как выход. Бит INT2 настраиваются на прерывание в регистре флагов GIFR

Функциями входов INT0 и INT1во всех контроллерах управляют младшие биты регистра MCUCR

MCUCR– MCU Control Register
Биты управления:
Биты 1, 0 – ISC01, ISC00 (Interrupt Sense Control 0 Bit 1 and Bit 0) – состояние данных битов определяет событие на выводе INT0, при котором формируется прерывание INT0:
ISC01=0, ISC00=0 – уровень логического нуля;
ISC01=0, ISC00=1 – любая смена логического состояния;
ISC01=1, ISC00=0 – по спадающему фронту;
ISC01=1, ISC00=1 – по нарастающему фронту.

Биты 3, 2 – ISC11, ISC10 (Interrupt Sense Control 1 Bit 1 and Bit 0) – состояние данных битов определяет уровень сигнала на выводе INT1, по которому формируется прерывание INT1:
ISC11=0, ISC10=0 – уровень логического нуля;
ISC11=0, ISC10=1 – любая смена логического состояния;
ISC11=1, ISC10=0 – по спадающему фронту;
ISC11=1, ISC10=1 – по нарастающему фронту.

Ну вот, вроде как с минимумом о внешних прерываниях поговорили.
Понятно, что для того, чтобы прерывания работали, нужно соответственно их прописывать.
Допишем начатую для tiny, инициализацию прерывания на INT1 по возрастающему фронту сигнала:

ldi r16,0x80    ; запишем в r16 число 0b10000000
ldi r17,0x0C    ; запишем в r17 число 0b00001100
out MCUCR,r17   ; прерывание сформируется по нарастающему фронту ISC11=1, ISC10=1
out GIMSK,r16    ; выставим маску INT0
sei

Кстати на tiny2313 можно сформировать прерывание на любых выводах PCINT0…7, на Mega до 48 серии эти возможности отсутствуют…
Есть такие операции, при выполнении которых, возникшие прерывания могут вызвать сбой программы. В таких случаях перед началом выполнения операции пишем CLI, а после SEI. Называются такие операции – атомарными.
Желательно, чтобы программы прерываний были компактными и выполнялись с максимальной скоростью, потому, что целью любых прерываний является фиксация события. Если по разным причинам программа выполняется медленно, то достаточно зафиксировать событие и обработать его чуть позже.

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

 

векторов прерываний AVR

векторов прерываний AVR

Векторы прерываний AVR

Ниже приведены таблицы прерываний, доступных на микроконтроллерах AVR, используемых в классе. Имя вектора — это идентификатор, который следует использовать в начале процедура обслуживания прерывания (ISR). Например, ISR для вывода ATmega328P. Изменить запрос на прерывание 0 будет выглядеть так.

ISR(PCINT0_vect)
{
// ISR-код
}
 

Примечание. Имена векторов не всегда совпадают для одного и того же прерывания. в разных процессорах. Проверьте таблицу для правильного процессора, прежде чем написание ИСР.

ATmega328P
Vector Number Interrupt definition Vector name
2 External Interrupt Request 0 INT0_vect
3 External Interrupt Request 1 INT1_vect
4 Запрос прерывания по смене контакта 0 PCINT0_vect
5 Pin Change Interrupt Request 1 PCINT1_vect
6 Pin Change Interrupt Request 2 PCINT2_vect
7 Watchdog Time-out Interrupt WDT_vect
8 Таймер/Счетчик2 Сравнить совпадение A TIMER2_COMPA_vect
9 Таймер/Счетчик2 Сравнить совпадение B TIMER2_COMPB_vect
10 Timer/Counter2 Overflow TIMER2_OVF_vect
11 Timer/Counter1 Capture Event TIMER1_CAPT_vect
12 Timer/Counter1 Compare Match A TIMER1_COMPA_vect
13 Timer/Counter1 Сравнить соответствие B TIMER1_COMPB_vect
14 Timer/Counter1 Overflow TIMER1_OVF_vect
15 Timer/Counter0 Compare Match A TIMER0_COMPA_vect
16 Timer/Counter0 Compare Match B TIMER0_COMPB_vect
17 Таймер/Счетчик0 Переполнение TIMER0_OVF_vect
180910019 SPI Serial Transfer Complete SPI_STC_vect
19 USART Rx Complete USART_RX_vect
20 USART Data Register Empty USART_UDRE_vect
21 USART Tx Complete USART_TX_vect
22 Преобразование ADC завершено ADC_vect
23 EEPROM Ready EE_READY_vect
24 Analog Comparator ANALOG_COMP_vect
25 Two-wire Serial Interface TWI_vect
26 Сохранить чтение памяти программы SPM_READY_vect
ATtiny4313
Vector Number Interrupt definition Vector name
2 External Interrupt Request 0 INT0_vect
3 External Interrupt Request 1 INT1_vect
4 Таймер/Счетчик 1 Событие захвата TIMER1_CAPT_vect
5 Таймер/Счетчик 1 Сравнить совпадение A TIMER1_COMPA_vect
6 Timer/Counter1 Overflow TIMER1_OVF_vect
7 Timer/Counter0 Overflow TIMER0_OVF_vect
8 USART Rx Complete USART0_RX_vect
9 Регистр данных USART пуст USART0_UDRE_vect
10 USART Tx Complete USART0_TX_vect
11 Analog Comparator ANA_COMP_vect
12 Pin Change Interrupt Request 0 PCINT_B_vect
13 Таймер/Счетчик 1 Сравнить совпадение B TIMER1_COMPB_vect
14 Таймер/Счетчик 0 Сравнить совпадение A TIMER0_COMPA_vect
15 Timer/Counter0 Compare Match B TIMER0_COMPB_vect
16 USI Start Condition USI_START_vect
17 USI Overflow USI_OVERFLOW_vect
18 EEPROM готов EEPROM_READY_vect
19 Watchdog Timer Overflow WDT_OVERFLOW_vect
20 Pin Change Interrupt Request 1 PCINT_A_vect
21 Pin Change Interrupt Request 2 PCINT_D_vect
ATtiny85
Номер вектора Определение прерывания Имя вектора
1 External Interrupt Request 0 INT0_vect
2 Pin Change Interrupt Request 0 PCINT0_vect
3 Timer/Counter1 Compare Match A TIMER1_COMPA_vect
4 Переполнение таймера/счетчика 1 TIMER1_OVF_vect
5 Переполнение таймера/счетчика 0 TIMER0_OVF_vect
6 EEPROM Ready EE_RDY_vect
7 Analog Comparator ANA_COMP_vect
8 ADC Conversion Complete ADC_vect
9 Таймер/Счетчик 1 Сравнение соответствия B TIMER1_COMPB_vect
10 Timer/Counter0 Compare Match A TIMER0_COMPA_vect
11 Timer/Counter0 Compare Match B TIMER0_COMPB_vect
12 Watchdog Time-out WDT_vect
13 Состояние запуска USI USI_START_vect
14 Переполнение USI USI_OVF_vect

задание_8

задание_8

Тема: Встроенное программирование

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

Результаты обучения: Определите соответствующую информацию в листе данных микроконтроллера.
Реализовать протоколы программирования.

У вас:

Задокументировано то, что вы узнали из чтения данных микроконтроллера. лист.
Какие вопросы у вас есть? О чем бы вы хотели узнать больше?
Запрограммировал вашу плату.
Описал используемые вами процессы программирования.
Включен ваш код.

ATTINY 24/44/84 Технический паспорт

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

ATTiny44A имеет флэш-память 4K, 8-битный и 16-битный таймер/счетчик, 10-разрядный АЦП, рабочее напряжение 1,8 — 5,5 В, потребляемая мощность 210 мкА при 1,8 В и 1 МГц и диапазоне температур от -40 до +85 °С. Скорость класс 0 — 4 МГц 1,8 — 5,5 В, 0 — 10 МГц 2,7 — 5,5 В и 0 — 20 МГц 4,5 — 5,5В. Порядок выводов следующий:

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

Я запрограммировал свою плату ранее, когда я сделал это. Я задокументировал это в Задание 6. Это был простой код на основе Arduino, который мигал светодиодом и быстрее, если кнопка нажата. Я использовал программатор FAB TinyISP там. Мне помогла страница http://highlowtech.org/?p=1695.

Теперь я хочу использовать Atmel Studio 7 и сделать тот же код мигания светодиода в первый. Я создал новый проект как исполняемый проект GCC.

Затем я выбрал подходящее устройство, ATtiny44A из семейства устройств ATtiny. Затем, как важно, чтобы Avrdude и FAB TinyISP работали плавно с Atmel Studio, я добавил команду avrdude -c usbtiny -p t44 -U flash:w:»$(SolutionName).hex» к документации проекта как к событиям сборки и к событию после сборки командная строка.
Это запускает программирование платы после компиляции этим Avrdude командой и через программатор FAB tinyISP. Также я нашел готовые старые кабель от компа думаю. Я использовал его как кабель FTDI, даже если он 8×2 контакта.

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


Затем я протестировал две программы. Оба были написаны на языке C, и я написал их с помощью страницы https://tinusaur.org/2014/01/06/tutorial-001-blinking-led/. Я скомпилировал код и запрограммировал свою плату командой Build в IDE Atmel Studio. Этот первый код мигает светодиодом, подключенным к ПОРТ B как контакт PB2.

Второй код мигал светодиодом быстрее, если нажималась кнопка. Кнопка была подключена к PORT A как контакт PA7. Я также получил помощь от страница http://www.elecrom.com/avr-tutorial-2-avr-input-output/.

Программа эха

hello.ftdi.44.echo.c Третья программа могла бы отправить определенный текст на компьютер, если какой-то текст написал первым. Я протестировал пример программы hello.ftdi.44.echo.c со страницы Fab Academy. Он хорошо скомпилирован, когда я добавил правильные часы определение командой #define F_CPU 20000000UL в начале.

Однако текст был нечитаем, даже я изменил байтрейты на FTDI кабель USB-to-serial и терминальную программу. Я использовал TeraTerm как терминальная программа. Возможно, причина могла быть в незапрограммированных предохранителях.

Раньше у меня были проблемы с предохранителями, когда я программировал свой FAB Программатор TinyISP с программой Avrdude (версия 5. 11). Раньше я использовал одну готовую установленную Atmel Studio 7 в нашей лаборатории. компьютер (Windows 7) и программатор AtmelICE. И теперь я использовал то же самое и удалось. Ставил предохранители, но все равно привет.ftdi.44.echo.c текст был нечитаем.

Затем я закодировал программу, аналогичную программе Arduino, с помощью страницы http://archive.fabacademy.org/2016/fablabsingapore/students/98/exercise08.html. Я добавил мигающий светодиод, чтобы быть уверенным в правильной работе. Я установил скорость передачи данных до 9600 и использовали внутренние часы с частотой 1 МГц.
Затем я загрузил пустой скетч в Arduino и подключил свою приветственную плату. к Arduino UNO: PA0 (TX) к контакту 1 Arduino (TX) и PA1 (RX) к Контакт Arduino 0 (RX). Я открыл последовательный монитор Arduino, и я был в состоянии прочитать некоторый текст, но все еще есть лишние пометки.

Это означает, что проблема с часами и скоростью передачи данных решена. Далее, я прокомментировал эхо данных и теперь программа отправляет только запрограммированные данные. И лишние отметки исчезли. Я изменил на 8 МГц внутренний часы и установите их, прожег Bootloader.
И снова я смог четко прочитать текст. Это означает соединение TX к моей плате где-то попали помехи. Затем я перешел на внешний Тактовая частота 20 МГц. Светодиод мигает, но текст теперь не читается. Это значит проблема с внешними часами 20 МГц. Тем не менее, я смог изменить часы вернуться к внутренней 1 МГц.

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

Осталась только проблема с внешними часами. Может быть, я проверяю сигналы осциллограф позже.

Пробуждение Attiny44

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

Я сделал несколько попыток и нашел много помощи во многих интернетах. страницы.

Последняя помощь найдена на странице http://www.avrfreaks.net/forum/pcint-attiny44.

Я отредактировал код с учетом своего предыдущего опыта и потребностей и получил программа для Attiny44, которая мигает светодиодом 10 раз и переходит к спать. Параметр в режиме не использовался.

Просыпается, при нажатии кнопки моргает 10 раз и спать снова.

Я использовал режим прерывания PCINT, потому что кнопка была подключена к контакту PA7/PCINT7. В этом режиме Attiny44 реагирует на изменение контакта. имеет место.

В качестве спящего режима использовал SLEEP_MODE_PWR_DOWN и значит внутренний часы и все останавливается, а прерывания только работают. Он падает энергопотребление до минимума. В паспорте указано 0,1 мкА при 1,8 В.

Я несколько раз проверял свой код и удивлялся помехам. Даже я не трогал, плата проснулась.
Я снова проверил свой код и нашел ошибку. Порт А необходим для также инициализировать. Я должен прочитать лист данных снова. И я добавил два строки моего кода, как показывает красная метка. Тогда это сработало хорошо.

Я также измерил потребляемую мощность. При рабочем напряжении 5 В потребовалось максимум7 мА. Ток сна был 0,000 мА, потому что я не мог измерить уАс. Далее он работал даже на 1,8 В, но с очень тусклым миганием вел.

Комментарии и задачи: Avrdude и предохранители


Код Нила Hello получил 2256 байт файла .hex и мой аналогичный Arduino код 6637 байт. Таким образом, он в 3 раза больше.
Мой код пробуждения получил 816 байт.

Могу ли я по-прежнему использовать Avrdude для предохранителей? Я хотел бы протестировать больше команда:

avrdude -p t44 -P usb -c usbtiny -U lfuse:w:0x5E:m.

Может быть, позже, если у меня будет время.

Код мигания светодиода: BlinkL_main.

alexxlab

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

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