AVR. Учебный курс. Архитектура.
Автор DI HALT
Опубликовано 10 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, Микроконтроллер
Итак, камрад, прежде чем ты начнешь работать с контроллером, то неплохо бы тебе узнать что у него внутри.
Поэтому дам тебе краткий ликбез по архитектуре контроллера AVR.
| Архитектура AVR |
А теперь чуть подробней о каждом.
ALU занимается всеми операциями процессора, сложениями, вычитаниями, сдвигами и прочим. Это математическое ядро контроллера. Операнды на вход ALU поступают из регистров общего назначения (РОН), а результат появляется на шине и обрабатывается в соответствии с текущей командой.
Блок регистров (РОН), он же регистровый файл. Это пачка из 32 ячеек памяти по 8 бит каждая. Отличаются самой быстрой скоростью работы, а также с ними производятся почти все процессорные операции. В AVR регистры нумеруются от 0 до 31, причем первая половина регистров (R0-R15) весьма кастрированная от природы и ряд очень нужных и удобных команд (например засылка непосредственных данных в регистр командой LDI) не хочет работать. Вторая половина регистров полнофункциональна, но надо помнить, что регистры с R26 по R31 являются так называемыми индексными регистрами. Это 16ти разрядные X,Y,Z регистровые пары (X=R26:R27, Y=R28:R29, Z=R30:R31), служащие для адресации памяти в некоторых командах. Читать полностью
AVR. Учебный курс. Устройство и работа портов ввода-вывода
Автор DI HALT
Опубликовано 11 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, I/O, Интерфейс, Начинающим, Порт
С внешним миром микроконтроллер общается через порты ввода вывода. Схема порта ввода вывода указана в даташите:
![]() |
Но новичку там разобраться довольно сложно. Поэтому я ее несколько упростил Читать полностью
Подключение микроконтроллера. Ликбез.
Автор DI HALT
Опубликовано 12 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, Начинающим, Опорное напряжение, Порт, Схемотехника
Казалось бы простая тема, а однако в комментах меня завалили вопросами как подключить микроконтроллер. Как подключить к нему светодиод, кнопку, питание. Что делать с AGND или AREF. Зачем нужен AVCC и все в таком духе. Итак, раз есть вопросы, значит тема не понятна и надо дать по возможности исчерпывающий ответ. Все описываю для контроллеров AVR, но для каких нибудь PIC все очень и очень похоже. Т.к. принципы тут едины.
Питание
Для работы микроконтроллеру нужна энергия — электричество. Для этого на него естественно нужно завести питалово. Напряжение питание у МК Atmel AVR разнится от 1.8 до 5 вольт, в зависимости от серии и модели. Все AVR могут работать от 5 вольт (если есть чисто низковольтные серии, то просьба уточнить в комментах, т.к. я таких не встречал). Так что будем считать что напряжение питания контроллера у нас всегда 5 вольт или около того. Плюс напряжения питания обычно обозначается как Vcc. Нулевой вывод (а также Земля, Корпус, да как только его не называют) обозначают GND. Если взять за пример комповый блок питания. То черный провод это GND (кстати, земляной провод традиционно окрашивают в черный цвет), а красный это +5, будет нашим Vcc. Если ты собираешься запитать микроконтроллер от батареек, то минус батареек примем за GND, а плюс за Vcc (главное чтобы напряжение питания с батарей было в заданных пределах для данного МК, позырь в даташите. Параметр обычно написан на первой странице в общем описании фич:
• Operating Voltages
–1.8 - 5.5V (ATtiny2313V)
–2.7 - 5.5V (ATtiny2313)
• Speed Grades
–ATtiny2313V: 0 - 4 MHz @ 1.8 - 5.5V, 0 - 10 MHz @ 2.7 - 5.5V
–ATtiny2313: 0 - 10 MHz @ 2.7 - 5.5V, 0 - 20 MHz @ 4.5 - 5.5V
Обрати внимание, что есть особые низковольтные серии (например 2313V низковльтная) у которых нижня граница напряжения питания сильно меньше. Также стоит обратить внимание на следующий пункт, про частоты. Тут показана зависимость максимальной частоты от напряжения питания. Видно, что на низком напряжении предельные частоты ниже. А низковольтные серии раза в два медленней своих высоковольтных коллег. Впрочем, разгону все процессоры покорны ;))))) Читать полностью
AVR. Учебный курс. Трактат о программаторах
Автор DI HALT
Опубликовано 13 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, Программатор
Программа для микроконтроллера пишется на любом удобном языке программирования, компилируется в бинарный файл (или файл формата intel HEX) и заливается в микроконтроллер посредством программатора.
Итак, первым шагом в освоении микроконтроллера обычно становится программатор. Ведь без программатора невозможно загнать программу в микроконтроллер и он так и останется безжизненным куском кремния.
Что же представляет из себя это устройство?
В простейшем случае программатор это девайс который связывает микроконтроллер и компьютер, позволяя. Также нужна прошивающая программа, которая по специальному протоколу загонит данные в микроконтроллер.
Программаторы бывают разные под разные семейства контроллеров существуют свои программаторы. Впрочем, бывают и универсальные. Более того, даже ту же простейшую AVR’ку можно прошить несколькими способами:
Внутрисхемное программирование (ISP)
Самый популярный способ прошивать современные контроллеры. Внутрисхемным данный метод называется потому, что микроконтроллер в этот момент находится в схеме целевого устройства — он может быть даже наглухо туда впаян. Для нужд программатора в этом случае выделяется несколько выводов контроллера (обычно 3..5 в зависимости от контроллера).
Демоплата
Автор DI HALT
Опубликовано 15 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, Печатная плата
После программатора, вторая вещь которая тебе пригодится (если конечно ты планируешь изучить микроконтроллеры, а не повторить одно два готовых устройства) это демоплата.
Демоплата представляет собой кусок текстолита на котором распаян микроконтроллер и вся необходимая обвязка для его функционирования — кварц, стабилизатор питания, подтяжка RESET, фильтр на АЦП (если АЦП конечно есть) стабилизирующие конденсаторы, а выводы портов микроконтроллера подключены к штырям или гнездам — чтобы было удобно подключать к ним светодиоды, кнопки, разные другие модули которые мы будем изучать. Этакий радиоконструктор. Также крайне желательно, чтобы на плате был и ISP разъем — через него идет процесс прошивки внутри схемы (т.е. не вытаскивая из панельки готового устройства)
Когда то давно делал я плату для статьи в журнал Хакер — проект Trashduino. Простенькая демоплата на ATmega8 с кучей штырей и по параметрам схожая с Arduino, как минимум туда можно было зашить Ардуиновский загрузчик и работать потом из ее среды.
Мне правда загрузчик этот никуда не уперся, равно как и среда, но вот сама платка в итоге получилась удобной и в дальнейшем я ее активно использовал.
![]() |
А судя по письмам и комментам читателей она заинтересовала, поэтому я выкладываю ее LAY файл. Читать полностью
AVR Studio ликбез
Автор DI HALT
Опубликовано 17 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, AVR Studio
Вообще, честно говоря, с этого надо было и начинать. Но я как то упустил этот момент - IDE как IDE, ничего особенного, что там расписывать? Оказалось есть что, непоняток масса. Так что исправляюсь и даю инструкцию как писать и отлаживать код в AVR Studio. А также опишу ряд примочек и плагинов для студии.
Установка.
Сначала надо с сайта скачать последнюю версию AVR Studio. Весит она что то около 30 метров. Можно и старые релизы использовать, не преступно, но там может не оказаться новых микроконтроллеров. AVR Studio, как и многие буржуйские программы, крайне хреново понимает русские имена и длинные пути. Поэтому ставь ее по максимально простому пути, что то вроде C:\AVR\ А сами проекты тоже держи как можно ближе к корню, У меня, например, это D:\Work\AVR — никаких имен длинней 8 символов и, конечно же, никаких русских символов. Привет родимый DOS, как говорится.
Да, если планируешь (если не планируешь, то все равно скачай и поставь, не помешает) писать на Си, то рекомендую скачать GCC aka WinAVR и установить ее ДО студии, туда же, поближе к корню. Тогда студия подхватит ее в качестве своего плагина. Если поставить после, то тоже, может быть подхватит, но возможны проблемы.
Читать полностью
AVR Studio и HAPSim
Автор DI HALT
Опубликовано 19 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR Studio, Отладка, Софт
Раз уж пошел разговор об отладке AVR Studio, то стоит упомянуть про ряд примочек для нее. Одной из самых интересных примочек является небольшая программка - HAPSim. Программка почти не известна, по крайней мере я лишь пару раз слышал упоминание о ней на форуме. Прога не слишком стабильна, иногда работает не так как надо, а еще ей не хватает многих эргономических моментов, но, надеюсь, в следующий версиях это будет исправлено.
Итак, что делает Hapsim. Он всего лишь подцепляется к студии и в момент выполнения эмуляции программы может симулировать работу разных устройств, прицепленных на порты. Из доступных устройств есть:
- Кнопки. Как обычные, прижимающие к земле, так и трехвыводные, которые могут поставить как высокий, так и низкий уровень в зависимости от состояния
- LCD на базе HD44780
- Терминал (USART или I2C) с возможностью осуществить трансфер на комповый COM порт (сам не проверял, но заявлено в мануале)
- Клавиатурная матрица 4х4
- Блок светодиодов
AVR. Учебный курс. Постановка задачи
Автор DI HALT
Опубликовано 19 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, Робот
Будем конструировать робота своими руками. Это конечно будет не Терминатор и даже не ходячий механизм, и интеллектом он особым обладать не будет. Для начала сделаем простенького, потом наворачивая его все больше и больше. Тут тебе и программирование и схемотехнические заморочки. В общем, надеюсь, будет интересно.
Итак, общая конструкция. Поскольку я робота делать уже начинал и даже сделал нечто адекватное и самостоятельно передвигающееся, то изобретать велосипед заново я не буду.
Что, в итоге, мы имеем:
- Для начала шасси. Из соображений проходимости, легкости управления и доступности я выбрал гусеничное шасси от советской игрушки “БМП“. Здоровенное корыто в которое влезут и аккумуляторы, и куча плат с контроллерами и много чего еще.
- Два двигателя на правую и левую гусеницу соответственно. Исходя из того, что привод двигателя удобней всего делать на микросхеме L293 или L298, то на каждый двигатель нам надо три линии порта. Две задают направление вращения, а одна разрешает вращение.
AVR. Учебный курс. Макроассемблер
Автор DI HALT
Опубликовано 24 июля 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, Макро язык
Перед изучением системы команд микроконтроллера надо бы разобраться в инструментарии. Плох тот плотник который не знает свой топор. Основным инструментом у нас будет компилятор. У компилятора есть свой язык — макроассемблер, с помощью которого жизнь программиста упрощается в разы. Ведь гораздо проще писать и оперировать в голове командами типа MOV Counter,Default_Count вместо MOV R17,R16 и помнить что у нас R17 значит Counter, а R16 это Default_Count. Все подстановки с человеческого языка на машинный, а также многое другое делается средствами препроцессора компилятора. Его мы сейчас и рассмотрим.
Читать полностью
AVR. Учебный курс. Простейшая программа.
Автор DI HALT
Опубликовано 03 Авг 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, Программирование, Робот, Типы выходов
Итак, заюзав созданную мною отладочную плату для контроллера ATmega8 я просимулировал логику работы простейшего робота.
Схему силового блока робота ты сможешь найти в разделе Робототехника, а пока же я присобачил к макетной плате простую обвязку из светодиодов и кнопок. Получилось примерно следующее:
Увеличить картинку
Кнопки имитируют нажатия на датчики (собственно сами датчики это те же кнопки под бампером), а светодиоды имитируют подачу сигналов на силовой мост L293/
Задачу я поставил простейшую, выполнив лишь несколько пунктов собственного технического задания. Данная программа ждет нажатия кнопки “Старт” после чего “врубает движки” на полный вперед и “ломится” до тех пор, пока не “наткнется” своими передними датчиками (левым или правым) на препятствие. После чего движки отключаются и робот зажигает лампу, мол приехали. В кавычках, поскольку ничего на самом деле не происходит, только лампочки перемигиваются. Но если подключить к реальному шасси, то будет все именно так.
Исходник программы находится в файле Mega8Robot.asm. Рекомендую скачать этот файл и открыть блокнотом. Так как некоторые браузеры могут не понять кодировку в которой написаны комментарии.
Простенько, но это не надолго, в следующем примере все будет серьезней и объемней :) Цель же данной программы показать на простом примере как пишется ассеблерная программа для микроконтроллеров. Читать полностью
AVR. Учебный курс. Подпрограммы и прерывания
Автор DI HALT
Опубликовано 09 Авг 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, Программирование
Чтобы понятно было сразу и на века приведу отвлеченный пример.
Представь ты просыпаешься утром и идешь умываться и чистить зубы. Сам процесс умывания и чистки зубов отработан уже до автоматизма и ничем не отличается от вечерней процедуры. Да и если тебе захочется вдруг взять умыться среди дня или почистить зубы просто так, то все ты повторишь в точно такой же последовательности. Мелкие вариации, конечно не в счет. Совершенно очевидно, что в твоих мозгах зашиты две подпрограммы: “Чистка зубов” и “Умывание“.
Также и в коде, когда у тебя какая то последовательность действий часто повторяется, то ее рациональней вынести в подпрограмму. Они же процедуры, функциями называть их можно, но это не совсем корректно. В функцию можно передавать параметры, для передачи же параметров в подпрограмму в ассемблере механизмов нет, их приходится изобретать самостоятельно. Например я передаю через регистры, заранее загрузив туда нужные значения перед вызовом процедуры.
AVR. Учебный курс. Флаги
Автор DI HALT
Опубликовано 09 Авг 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, Программирование, Флаги
Распишу его по битам:
I - флаг разрешения прерываний. Если I=1 то прерывания разрешены. Если I=0 то прерывания запрещены. Все запрещены, без исключения. Ставится и сбрасыватся командами SEI и CLI соответственно. Также флаг I сбрасывается при вызове прерывания и если мы ждем более важное прерывание, то его надо установить вручную.
T - пользовательский флаг. Можно юзать по своему назначению. Кроме того, есть две команды которые позволяют в этот бит записать любой бит любого из 32 регистров общего назначения R0-R31 (далее буду их звать РОН). Это команды BLD Rn,bit и BST Rn,bit
Сбрасывается и устанавливается командами CLT и SET соответственно.
H - флаг полупереноса. Это если произошел заем бита из старшей половины байта в младшую. То есть когда из
числа 0001 0111 пытаются вычести 0000 1000, то происходит заем бита из более старшего разряда, так как младшая тетрада уменьшаемого меньше чем младшей тетрады вычитаемого. Используется этот флаг в некоторых математических операциях.
Сбрасывается и устанавливается командами CLH и SEH соответственно.
AVR. Учебный курс. Ветвления
Автор DI HALT
Опубликовано 12 Авг 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, Таблица переходов, Трюки
Поскольку поскольку стандартных механизмов вроде If-Then-Else в ассемблере нет, то приходится вначале оперировать командами сравнения, которые нифига не делают только выставляют флаги. А потом, команды условного перехода в зависимости от флагов либо переходят на указанный адрес, либо игнорируют команду.
Так что обычный переход выглядит так:
Сравнение ; IF
Переход_Если_на Метка
Код ; ELSE
Код
Код
Переход на Метка2
Метка: Код ; THEN
Код
Код
Метка2: Код ; Далее
Перехода по метке2 можно избежать если грамотно подобрать условие и порядок следования. Впрочем, экономия тут будет всего четыре байта памяти и два такта времени, так что это для маньяков =).
AVR. Учебный курс. Вторая программа
Автор DI HALT
Опубликовано 17 Авг 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, Макро язык, Программирование, Трюки, Флаги
Усложняем алгоритм.
Поскольку у нас на каждом двигателе теперь есть одометрический датчик, дающий импульс на каждый оборот шестерни, то мы по нему можем вычислять относительные перемещения. Добавим в наш алгоритм еще одну строку — после встречи препятствия откатиться назад на пол корпуса. Пол корпуса это, примерно, 200 оборотов шестерни.
Поэтому нам нужно сосчитать импульсы от каждого колеса, и как только одно из них пройдет 200 оборотов остановить двигатели.
Импульсы от одометров приходят на PIND,5 и PIND,4 от правого и от левого редуктора соответственно.
Конечно можно их считать непосредственно на месте, с каждым импульсом увеличивая число в регистре на единицу.
Но это неудачный метод, так как на период подсчета импульсов мы намертво застрянем в цикле счетчика, а значит ничем кроме как гусеницами заниматься не сможем. Лажа, короче.
Что делать?
AVR. Учебный курс. Таймеры
Автор DI HALT
Опубликовано 19 Авг 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, Программирование, Таймеры
Таймер это всего лишь периферийное устройство, основная задача которого щелкать своим счетным регистром. Когда регистр дощелкает, то возникает прерывание. Также прерывание может возникать еще по кучи разных событий, например когда содержимое счетного регистра станет равным содержимому в ячейке сравнения. Таймеры бывают трех типов, различающихся количеством наворотов. Впрочем, обо всем по порядку.
Источник тиков.
Таймер/Счетчик (далее буду звать его Т/С) считает либо тактовые импульсы от встроенного тактового генератора, либо со счетного входа. Погляди внимательно на распиновку ног ATmega8, видишь там ножки T1 и T0? Так вот это и есть счетные входы Timer 0 и Timer 1. При соответствующей настройке Т/С будет считать либо передний (перепад с 0-1), либо задний (перепад 1-0) фронт импульсов, пришедших на эти входы. Главное, чтобы частота входящих импульсов не превышала тактовую частоту процессора, иначе он не успеет обработать импульсы.
Кроме того, Т/С2 способен работать в асинхронном режиме. То есть Т/С считает не тактовые импульсы процессора, не входящие импульсы на ножки, а импульсы своего собственного внутреннего тактового генератора. Для этого у Т/С2 есть входы TOSC1 и TOSC2, на которые можно повесить кварцевый резонатор. Зачем это вообще надо? Да хотя бы организовать часы реального времени. Повесил на них часовой кварц на 32768 Гц да считай время - за секунду произойдет 128 переполнений (т.к. Т/С2 восьми разрядный). Так что одно переполнение это 1/128 секунды. Причем на время обработки прерывания по переполнению таймер не останавливается, он также продолжает считать. Так что часы сделать плевое дело!
AVR. Учебный курс. Использование ШИМ
Автор DI HALT
Опубликовано 25 Авг 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, PWM, Программирование, ШИМ
Вот уже несколько раз я ругался странным словом ШИМ. Пора бы внести ясность и разьяснить что же это такое. Вообще, я уже расписывал этот режим работы, но все же повторюсь в рамках своего курса.
| Из ШИМ в аналоговый, ну почти :) |
В кратце, Широтно Импульсная Модуляция (в буржуйской нотации этот режим зовется PWM - Pulse Width Modulation) это способ задания аналогового сигнала цифровым методом, то есть из цифрового выхода, дающего только нули и единицы получить какие то плавно меняющиеся величины. Звучит как бред, но тем не менее работает. А суть в чем:
Представь себе тяжеленный маховик который ты можешь вращать двигателем. Причем двигатель ты можешь либо включить, либо выключить. Если включить его постоянно, то маховик раскрутится до максимального значения и так и будет крутиться. Если выключить, то остановится за счет сил трения.
А вот если двигатель включать на десять секунд каждую минуту, то маховик раскрутится, но далеко не на полную скорость - большая инерция сгладит рывки от включающегося двигателя, а сопротивление от трения не даст ему крутится бесконечно долго. Чем больше продолжительность включения двигателя в минуту, тем быстрей будет крутится маховик.
При ШИМ мы гоним на выход сигнал состоящий из высоких и низких уровней (применимо к нашей аналогии — включаем и выключаем двигатель), то есть нулей и единицы. А затем это все пропускается через интегрирующую цепочку (в аналогии — маховик). В результате интегрирования на выходе будет величина напряжения, равная площади под импульсами.
Меня скважность (отношение длительности периода к длительности импульса) можно плавно менять эту площадь, а значит и напряжение на выходе. Читать полностью
AVR. Учебный курс. Передача данных через UART
Автор DI HALT
Опубликовано 07 Сен 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, RS232, UART, Интерфейс
Протокол
Вначале передатчик бросает линию в низкий уровень - это старт бит. Почуяв что линия просела, приемник выжидает интервал Т1 и считывает первый бит, потом через интервалы Т2 выковыриваются остальные биты. Последний бит это стоп бит. Говорящий о том, что передача этого байта завершена. Это в самом простом случае.
В конце байта, перед стоп битом, может быть и бит четности. Который получается если поксорить между собой все биты, для контроля качества передачи. Также может быть два стопа, опять же для надежности. Битов может быть не 8, а 9. О всех этих параметрах договариваются на берегу, до начала передачи. Самым же популярным является 8 бит, один старт один стоп, без четности.
Причем с самим протоколом можно не заморачиваться - все реализованно аппаратно. Разве что захочется завести второй UART, тогда придется делать его программно.
По такому же протоколу работает COM порт компьютера, разница лишь в разнице напряжений, поэтому именно этот протокол я буду использовать для связи микроконтроллера с компом. Для преобразования напряжений используется RS232-TTL конвертер.
Извращенский ШИМ из UART
Автор DI HALT
Опубликовано 07 Сен 2008
Рубрики: AVR. Учебный курс
Метки: PWM, UART, Микроконтроллер, Трюки, ШИМ
Достаточно только сделать где-нибудь в памяти переменную, куда мы будем совать число с заданной скважностью нулей и единиц, а по прерыванию опустошения буфера это число снова пихать в регистр UDRE. Таким образом, генерация ШИМ будет самопроизвольной, без лишних телодвижений. Правда можно получить всего 10 разных значений ШИМ, но зато нахаляву!!!
Для тех кто не понял как, приведу числа которые надо будет непрерывно слать через UART:
два дополнительных значения мы получим за счет старт и стоп битов.
00000000 - 1/10
00000001 - 2/10
00000011 - 3/10
00000111 - 4/10
00001111 - 5/10
00011111 - 6/10
00111111 - 7/10
01111111 - 8/10
11111111 - 9/10
Да и частоты там можно получить нефиговые!
Красота!=)))))
AVR. Учебный курс. Использование аналогового компаратора
Автор DI HALT
Опубликовано 13 Сен 2008
Рубрики: AVR. Учебный курс
Метки: AVR, Аналог, АЦП, Компаратор, Микроконтроллер, Описание
| Схема контроля напряжения |
Есть почти в каждой AVRке, такая полезная приблуда как аналоговый компаратор. Это уже почти стандартное устройство и встречается очень часто во множестве разных контроллеров. Даже в древнем, как говно мамонта, АТ89С2051 он уже есть. Штучка прикольная, позволяет сравнивать два аналоговых сигнала и выносить свой вердикт 0 первый больше второго, 1 второй больше первого.
Применить его можно, например, чтобы отслеживать уровень заряда аккумулятора по просадке напряжения. Схема простейшая - стабилитрон создает опорное напряжение, которое всегда одиннаково, а напряжение с резистивного делителя зависит от входного напряжения.
Например, на входе у нас 8 вольт. Со стабилитрона, рассчитанного на 3.3 вольта, выходит всегда одно и то же напряжение — 3.3 вольта. А с симметричного резистивного делителя выходит половина напряжения то есть 4 вольта. 4 это больше чем 3.3, (3.3 - 4 = -0.7 результат меньше нуля) с компаратора выходит 0
Теперь если просядет батарейка и напряжение снизится до 6 вольт, то с делителя будет уже 3 вольта, а с опорного как было 3.3 так и осталось. Зато теперь на компараторе ситуация в корне поменялась - 3 меньше чем 3.3 (3.3 - 3 = 0.3 результат больше нуля) , а значит на выходе у него будет 1
Вот так, например, можно легко и просто следить за питающим напряжением и выдавать сигнал тревоги если батарейка сядет.
Настройка компаратора в контроллере AVR ATMega8
Для других моделей AVR все очень и очень похоже, просто мне так удобней. Если будет затруднение спросишь в комментах.
Мега 8 имеет на борту компаратор, со входами AIN0(прямой вход) и AIN1(инверсный вход) Читать полностью
Пара слов о оптимизации кода.
Автор DI HALT
Опубликовано 17 Сен 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, Макро язык, Начинающим, Оптимизация, Трюки
Это не наезд на Си, это камень в огород тех, кто считает что изучать микроконтроллеры проще на Си. Может кому то и проще, но для этого надо очень даже неплохо знать Си. Если не знаешь ни Си, ни Ассемблера, то писать на МК на асме проще в разы.




