Краткий курс - Самоучитель - AVR - быстрый старт с нуля

 

Страница 3

Самоучитель Краткий курс AVR

Микроконтроллер AVR  ATmega ключевые моменты - Устройство AVR Attiny ATmega.

Это продолжение !  начало на стр. 2 курса

 

     
 

Прерывания в AVR  -  подробно описаны
на этой странице - чуть ниже ...  

А в самом низу, в "подвале" есть Великолепные проекты - устройства на микроконтроллерах AVR и PIC на русском языке ! 

И практические обучающие материалы по электронному рукоделию и примеры устройств от SparkFun 

 
     

 

Напомню: Самая подробная и полная информация по МК содержится КОНЕЧНО в ДШ (в паспорте) на МК ! Он доступен в оригинале и даташит AVR на русском языке.  

 

Книги и учебники по электронике
скачайте  в  библиотеках !

 

Язык Си для МК AVR - только нужное  там

 

Страницы курса :   заглавная    1   2   3   4   5   6   7   8   9

Задачи-упражнения курса по AVR  -   там
 
Скачать весь курс по AVR одним архивом на заглавной странице курса.

 

 

 

Возможности заложенные 
в МК производителем
 



Они определяются конструкцией МК - и дают вам шанс реализовать на нем то или иное устройство и в тоже время ограничивают вас. 

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

Я ранее уже перечислял основные устройства содержащиеся в МК  AVR ATmega и называемые периферией МК. 

Далее в ДШ идет подробное описание каждой ножки МК и затем структурно-логическая схема МК - то как связаны его модули воедино. 

 

Если вы считаете эту информацию полезной, пожалуйста, помогите информировать в интернете о курсе - просто щелкните по банеру. Большое спасибо !


Electronic Banner Exchange (ElBE)


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

Если производитель подключил входы АЦП к конкретным ножкам МК то вы не можете это изменить - это данность. Тоже относится и к другим периферийным устройствам - всем им сопоставлены определенные ножки МК. 

Однако  некоторые из этих устройств (например USART, SPI,  TWI он же i2c) можно реализовать программно (старайтесь избегать этого!) и тогда им можно сопоставить любые не занятые ножки IO. 

 

     
 

Хорошая новость: 

Есть микроконтроллеры где вы можете сами назначить что к каким ножкам подключить и как состыковать модули внутри МК - такие микросхемы называют SoC - "систем он чип" или система на кристалле. 

Такие микросхемы выпускает и atmel.com 
и ряд других фирм: philips.com cypress.com  xemics.com

 
     

 

 

А что делать если вам нужно, например 4 интерфейса TWI (боле известен как i2c от philips) а в МК AVR он только один ? 

Выход прост - можно применить аналоговые ключи - мультиплексоры, например компании Analog.com серии ADGxxx и программно коммутировать (переключать) ими линию SCL МК на линию SCL одного из 4 интерфейсов TWI используемого в данный момент.  Напомню что на одну линию TWI ( i2c ) можно поставить несколько устройств с разными адресами! 

Аналогично можно поступить и в других случаях.

Либо реализовать дополнительные интерфейсы программно.

 

Важно !           

Говорят:  Работа МК - шевелить, дергать ножками.

Это очень метко сказано.

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

т.е. программа работающая в МК буквально "дергает" 
его ногами в нужные моменты времени. 

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

 

Реклама недорогих радиодеталей почтой:

 

Программа может "приказывать" МК AVR выводить либо "1" либо "0" на ножки I/O назначенные выходами.   На входы тоже можно вывести "1" и "0"  -  но слабенько.

МК преобразует эти логические уровни в напряжения на ножках открывая соответствующий полевой транзистор - ключ. 

Чтобы вывести "1" открывается транзисторный ключ соединяющий ножку МК с + питания. 

Чтобы вывести "0"  открывается транзисторный ключ соединяющий ножку МК с выводом GND МК.

Если к ножке ни чего не подключено то при выводе "1" на ножке будет напряжение почти равное напряжению питания МК - это VCC  - в курсе по умолчанию считаем +5 вольт. 

А при выводе логического "0" - напряжение на ножке будет очень близко к 0 вольт - это потенциал GND

Однако: 

Если к ножке МК подключить что либо проводящее ток и так "сопротивляющееся" созданию нужных программе выходных сигналов - напряжения на ножках могут уже не достигать потенциалов VCC и GND и значительно ! 

Это связано с тем что открытый полевой транзистор имеет некоторое не нулевое сопротивление и по закону Ома протекание тока через него вызывает падение напряжения.  Значения этого отклонения показывают графики в конце ДШ. 

     
 

Там есть и другие графики поясняющие работу МК - найдите время разобраться в них !  

Наверно теперь вы понимаете почему я советую вам использовать один универсальный МК ...   Я надеюсь что ОДИН МК вы сможете изучить от и до.

 
     


Вот, к примеру, для ATmega16

Скачать даташит ATmega16 

График 179 показывает каким будет напряжение на ножке МК при выводе на нее "0" при подключенной нагрузке "тянущей" эту ножку током (в мА на левой вертикальной оси графика) к источнику положительного напряжения :   

примечание: бит в регистре PORTx равен "0" а бит в регистре DDRx установлен т.е. равен "1" - значит ножка сконфигурирована как выход.

Из графика видно, что при втекающем в ножку токе равном 10 мА напряжение на ножке МК будет 0.25 вольт, а при токе 20 мА уже 0.45 вольт 

 

     
 

пример:  

Вы подключили к ножке МК катодом (где у диода черточка на схеме) светодиод и хотите чтоб через него протекал ток 15 мА. 

Как рассчитать токоограничительный резистор включаемый последовательно со светодиодом - от его анода к +5 вольт питания МК?  

Вот так:  

1) в ДШ на светодиод вы находите (или измеряете на "живом" светодиоде) падение напряжения на нем при токе через него 15 мА  - пусть это будет 2 вольта. 

2) По графику выше находите что при токе 15 мА на ножке будет примерно 0.35 вольт. 

3) Суммируете эти напряжения и вычитаете из напряжения питания МК:

5 - (2 + 0.35) = 2.65 вольт - это напряжение которое должно падать  на искомом резисторе при токе 15 мА 

4) Чтоб найти номинал этого резистора - по закону Ома нужно разделить падение напряжения на ток его вызывающий:

2.65 / 0.015 = 177   Ом  

Выбираем ближайший стандартный номинал резистора  - 180 Ом.

 
     



Так как линия графика почти прямая до 20 мА - можно вычислить внутреннее сопротивление ключа обеспечивающего вывод низкого напряжения на ножку МК - это примерно 24 Ома. (нужно напряжение разделить на ток).

   

График 177 показывает каким будет напряжение на ножке МК при выводе на нее "1" при подключенной нагрузке "прижимающей" эту ножку током (в мА на левой вертикальной оси графика) к "земле" т.е. к нулю вольт :

примечание: бит в регистре PORTx равен "1" а бит в регистре DDRx установлен т.е. равен "1" - значит ножка сконфигурирована как выход.

По этому графику можно определить что при токе "на землю" в 10 мА на ножке МК будет не 5 вольт а примерно 4.75 вольт - это соответствует подключению резистора 475 Ом от ножки МК на GND.

При токе 20 мА напряжение на ножке будет 4.5 вольт примерно - это соответствует подключению к ножке МК резистора 225 Ом. 

 

     
 

Значит резистор 240 Ом гарантирует не превышение тока через ножку МК более 20мА при замыкании его на VCC или GND.

 
     

 

Пожалуйста хорошо усвойте что означают эти графики - вы будете знать что реально будет на ножках МК когда вы ими "шевелите" - т.е. выводите на них нужные вам сигналы. 

 

Я уже говорил ранее что все сигналы аналоговые и поэтому 

изменение напряжения на ножках МК не происходит мгновенно

Фронт сигнала (переход из "0" в "1") и спад сигнала (переход из "1" в "0") 
не вертикальные линии, а наклонные !
 

Наклон этот тем больше чем выше емкость нагрузки подключенной к ножке. 

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

вывод: 

Стремитесь к разумному уменьшению емкостей 
того что подключено к выходам МК

Если же емкость уменьшить не возможно - например ножка МК управляет затвором мощного полевого транзистора (затвор это по сути конденсатор) то поставьте между ними резистор хотя бы на 100 Ом. 

 

     
 

Если вам нужно получить ток превышающий 20 мА

Вы можете объединить несколько ножек МК вместе - лучше через токо-уравнивающие резисторы 20-33 Ом 

А можно применить какие либо внешние буферные микросхемы с более высоким выходным током, например счетверенный Операционный Усилитель (ОУ) AD8534 обеспечивает выходной ток до 250 мА

 
     

 

МК это МикроКомпьютер и он тоже может зависнуть ...

В результате не совершенства созданной вами программы или под влиянием внешних "злых сил" а может и по вашему умыслу МК может зависнуть. 

Для воскрешения зависшего МК в нем предусмотрено специальное устройство - Сторожевой таймерWatchdog Timer (сокращенно WDT) - это таймер который тактируется (т.е. ведет отсчет) своим собственным встроенным в МК RC-генератором с частотой примерно 1 МГц. 

WDT - в некоторых AVR (таблица фьюзов в низу стр. 2) активируется специальным фьюзом при программировании МК и затем программа может выключать и включать его (фьюз конечно не меняется при этом) через регистр управления сторожевым таймером - Watchdog Timer Control Register WDTCR  В этом же регистре делают установку времени через которое WDT  перезагрузит МК путем установки коэффициента деления частоты задающего  генератора.

WDT - в ATmega32 ATmega16 включается в программе установкой Bit 3 – WDE в регистре WDTCR и может быть отключен программой специальной последовательностью команд (стр. 43 в ДШ ATmega16) в CVAVR вот так: 

#asm("wdr")  /* Сбросить WDT */
/* Вписать "1" в бит_4 WDTOE и бит_3 WDE */
WDTCR |= (1 << 4) | (1 << 3);
WDTCR = 0x00; /* Выключить WDT */

 

Если WDT активирован то вы должны в своей программе
расставить команды обнуления его счетчика 

#asm("wdr")  //так в компиляторе CodeVisionAVR

так часто чтобы обнуление WDT  происходило через промежутки времени ГАРАНТИРОВАНО меньшие чем время переполнения таймера WDT  - я советую расставлять такие команды так часто насколько возможно.

В соответствии с ДШ Table 17. Watchdog Timer Prescale Select время от обнуления до переполнения WDT  и вызванного этим сброса МК (т.е. рестарта его программы с начала) может быть установлено вами программно от 16 мСек до 2 Сек. 

Предположим вы установили это время 16 мСек и пока программа в МК не зависла, она исправно обнуляет за счет предусмотренных вами команд. 

#asm("wdr") 


Но вот МК завис     - теперь как только WDT переполнится (не позднее чем через 16 мСек с последнего обнуления) произойдет перезагрузка МК и программа начнет свою работу снова.

При этом будет установлен специально обученный бит прочитав который программа сможет при необходимости определить причину сброса, перезагрузки МК - в данном случае сброс по переполнению WDT.

     
 

Хорошая новость:

WDT - удобно использовать в энергосберегающем режиме работы - подробнее в ДШ раздел - Power Management and Sleep Modes 

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

Соответственно МК потребляет очень мало энергии. 

Существуют и другие источники пробуждения МК - например изменение напряжения на его ножке.

AVR   ATtiny24 Attiny44 ATtiny84  - потребляют 
во сне всего 100
НАНО-Ампер ! 

 
     

 

 

 

и Так ... 

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

Почти.

 

 

 

Далее ...

Электроника подключенная к МК


МК обычно располагается на плате, среди других электронных компонентов, для удобства рассмотрения я условно делю их на группы: 

1) задача первой группы отсечь опасные токи и напряжения для защиты схемы и нормировать сигналы подлежащие обработке в МК к виду допустимому и понятному для МК  и ещё наиболее удобному для обработки средствами содержащимися в МК. 

Например: вам нужно обработать сигнал датчика тока - такого как мы рассмотрели при разборе АпНоута на стр1 курса - с максимальным током в 2А. 

При токе 2 А падение напряжения на резисторе в 0.1 Ом будет всего 2 * 0.1 = 0.2 вольта - если подать такой сигнал на АЦП МК ATmega  (а рекомендованное минимальное опорное напряжение для него - 2 вольта и тогда 2 вольта это код АЦП 1023) то  оно будет преобразовано в код 102 а меньший ток в еще меньший код. Значит несмотря на то что АЦП имеет разрядность в 10 бит вы получите результат лишь в 7 бит примерно - грубовато...  

Очевидно нужно усилить сигнал с датчика тока в 10 раз - до 2-х вольт и мы получим оцифровку тока с разрешением 10 бит - это и называется нормирование сигналов - предварительная их подготовка.  

 

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

Пример: задача 9_b "Фильтрация и нормирование
                измеряемого сигнала перед подачей на АЦП". 

 

     
 

Хорошая новость: 

МК ATmega16 -32 -64 -128 и некоторые другие  имеют встроенный 
усилитель входного сигнала в 10 и в 200 раз. 

Так себе новость: 

Этот усилитель симулирует PROTEUS но не симулирует VMLAB

 
     

 

Например еще раз: вам нужно передавать в МК информацию от COM-пота ПК - но сигналы USART MK  "перевернуты" относительно COM-овских и напрямую связать их неправильно!  Оптимальное решение поставить специальную микросхему MAX232 или ее дешевый и доступный аналог - который можно найти  на rel.ru  по запросу:  *232* 

С помощью этой микросхемы вы согласуете физические уровни (проще - напряжения) сигналов ПК к уровням требуемым USART МК (ножка RxD)  - можно сказать нормируете их. 

Тоже делает и "шнурок" для сотового телефона  

 

2) другая часть электроники подключенной к МК предназначена для обеспечения стабильного и достаточно "чистого" питания МК - пример вы видели в разборе АпНоута, их много и в других аналогичных документах. 


3) группа электронных компонентов подключенных к МК и обеспечивающие 
вывод в том или ином виде результата его работы. 

Примером может быть также микросхема MAX232 но теперь нормирующая сигнал от USART МК (ножка TxD) для того чтобы его принял и понял COM-порт ПК

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

Важно! 

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

И сами силовые элементы управляемые МК и коммутирующие большие токи так же могут являться источником помех - вы видели это в разборе АпНоута на стр1 курса.

 

Это деление "обвязки" МК на группы чисто условное, и конечно элементы любой группы могут не только передавать или принимать информацию (сигналы) на МК но и обмениваться с ним - это микросхемы памяти, LCD дисплеи, другие микросхемы сообщающие МК тем или иным способом о том что в них происходит. 

 

     
 

О защите входов и выходов МК и устройства в целом я 
рассказываю в задаче-упражнении 9.

Там же пример нормирования входного сигнала с датчика.

Подробней о защите читайте на сайте очень полезном для начинающих электронщиков микроконтроллерщиков эмбедеров 
caxapa
раздел:
схемы - защита.

 
     


как работают прерывания в микроконтроллере AVR прерывается как объявить функцию обработчик прерывания прерывания в МК



Прерывания в AVR.

Interrupts - прерывания, очень важная и 
мощная функция МК  AVR  ATmega  ATtiny.
 

Иногда требуется максимально быстрая реакция 
программы на какие-то события. 

Например приход данных на USART или завершение
АЦП или изменение уровня на ножке МК подключенной
к контактному датчику или переполнение таймера ...  


Быструю реакцию обеспечивает механизм прерываний. 

 

ЗАПОМНИТЕ ! При возникновении события которое может вызвать разрешенное (программой МК) в данный момент времени прерывание (список таких событий в даташите в разделе Interrupts таблица "Reset and Interrupt Vectors")  или при наличии установленного флага разрешенного прерывания и при ГЛОБАЛЬНОМ разрешении прерываний (бит7 в регистре SREG "установлен"), выполняется до конца текущая инструкция, запоминается какая должна была быть следующая инструкция, сохраняются (запоминаются) некоторые нужные данные, бит7 в регистре SREG обнуляется, очищается флаг сработавшего прерывания и происходит вызов и выполнение функции обработчика данного прерывания. 

От момента наступления события до начала выполнения функции обработчика прерывания проходит не менее 4 тактов процессора.     Значит 

Скорость реакции на прерывание напрямую зависит 
от частоты на которой работает МК !

     
 

В регистре SREG есть бит7 называется он " I "

Если этот бит равен "1" (установлен) то ГЛОБАЛЬНО разрешены прерывания - значит могут возникать разрешенные индивидуально прерывания. 

Если этот бит равен "0" (бит сброшен, очищен) то ГЛОБАЛЬНО запрещены прерывания  - значит любые события не вызывают прерывания программы. 

Флаг прерывания  - это просто бит 
который становится "1" (устанавливается) при возникновении события которое может вызвать прерывание
не зависимо от того разрешены ли прерывания ГЛОБАЛЬНО (установленным битом 7 в SREG) или индивидуально - т.е. флаг всегда устанавливается при возникновении события которое может вызывать прерывание - даже если это прерывание не обрабатывалось программой и не было разрешено.

Что бы сбросить флаг прерывания нужно записать в него "1"

Программно установить бит-флаг НЕВОЗМОЖНО !

 
 

 

 

 

Если программа находится в функции обработчике прерывания ( и в этой функции программно не был установлен бит SREG.7 - так обычно и есть ) то другие события вызывающие прерывания не могут уже вызвать прерывание программы и свою обработку, они лишь "устанаваливают" свои флаги - получается очередь флагов. 

Поэтому:

Делайте функции обработчики прерывания как можно короче ! 
Не засиживайтесь в них ...


Нужно тщательно продумывать алгоритм программы чтоб успевать обрабатывать все прерывания - т.е. не пропускать нужные события
и обрабатывать их вовремя.


В конце функции обработчика прерывания компилятор ставит инструкцию RETI после выполнения которой  бит7 в регистре SREG становится "1" - т.е. прерывания опять ГЛОБАЛЬНО разрешаются и программа продолжает выполняться с того места где она была в момент возникновения прерывания - т.е. выполняет инструкцию следующую за той на которой прервалась.

НО !

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

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

Если возникнет несколько разрешенных прерываний одновременно или несколько прерываний пока бит7 был нулем, то после установки бит7 в SREG первым будет выполняться то прерывание, которое выше в списке векторов прерываний МК в ДШ. Соответственно  по мере отработки очереди накопившихся и разрешенных прерываний их флаги будут очищаться. 

А вот флаги неразрешенных прерываний не очистятся пока программа этого не сделает записью в них числа 1.  

Вы можете сами очистить флаги прерываний записью в них "1".

Вы можете запрещать и разрешать как все прерывания сразу, так и каждое по отдельности!

Все сразу - изменяя бит7 в регистре SREG вот такими строчками 
в компиляторе
CodeVisionAVR:

#asm("sei") /* бит_I сделать "1" теперь разрешенные прерывания будут обрабатываться, если есть установленный флаг разрешенного прерывания то произойдет вызов его функции обработчика и флаг очистится */

#asm("cli") 
/* бит_I сделать "0" запретить все прерывания ГЛОБАЛЬНО. */ 



По отдельности рулить прерываниями сложней  - желательно читать даташит  AVR

Даташит AVR на русском языке есть на странице 2 самоучителя AVR.

НО !

Прерывания легко настроить интерактивно и главное ПРАВИЛЬНО с помощью мастеров  кода настройки AVR в компиляторе CVAVR  
и  ICC. 

Как использовать мастер начального кода показано в упражнениях курса



В МК AVR и других, прерывания могут возникать по многим событиям:

- изменение уровня на некоторых ножках МК
- "0" на некоторых ножках МК
- переполнение таймеров
- "насчитывание" таймером определенного значения
- завершение АЦП преобразования
- изменение уровня на выходе компаратора
- события в USART
- другие события ...

В общем снова - читайте ...  ДатаШит AVR на русском есть на стр .2 курса

Для ATmega16 прерывания перечислены в таблице 18
"
Reset ana Interrupt Vectors"

 

     
 

Примеры объявления функций обработчиков 
прерываний в популярных компиляторах:

 

В этих примерах слово "прерывание" нужно заменить
на название прерывания из ДатаШита либо из заголовочного
файла   *
.h  для вашего МК AVR.


Подробнее
Язык Си для AVR  рассмотрим позже на стр. 5 курса AVR.

Подробнее Компиляторы и симуляторы для AVR  рассмотрим позже на стр. 4 курса AVR.

 


Прерывание в  CVAVR - CodeVisionAVR:

interrupt [прерывание] void adc_isr(void) 
{
 код выполняемый при возникновении прерывания
 разрешенного локально (значит индивидуально
 - в данном примере это прерывание по
 завершении АЦП) и если прерывания разрешены
 глобально - т.е. бит I в SREG установлен.
}

adc_isr - это обычное название функции Си - вы можете
использовать любое своё название.

 

Прерывание в компиляторе ICC :

#pragma interrupt_handler timer0_ovf_isr:7
{
 код выполняемый при возникновении
 разрешенного локально и глобально прерывания
}

Мы просто указываем компилятору название функции timer0_ovf_isr 
- можете назвать по-своему - которая будет вызываться при возникновении прерывания
№ 7 в таблице прерываний в даташите используемого нами AVR или в заголовке   *.h
 



Прерывание в компиляторе IAR:

#pragma vector=прерывание
__interrupt void irqHandler(void)
{
 код выполняемый при возникновении
 разрешенного локально и глобально прерывания
}

 

Прерывание в компиляторе WinAVR:     

#include <avr/interrupt.h>


ISR(прерывание_vect)
{
 код выполняемый при возникновении
 разрешенного локально и глобально прерывания
}

В компиляторах IAR  и WinAVR обработчик прерывания
не имеет названия.

 
 

 

 


 

Скачайте и запустите проект:

Демонстрация механизма прерываний в AVR 

Программировал в CVAVR и симулировал в VMLAB

 

К ножкам-входам внешних прерываний  INT0  INT1  INT2  ATmega16 я подключил резисторы по 10 кОм к + питания МК для создания внешней подтяжки и еще подключил три кнопки   0,  1  и  2 в "Control Panel" симулятора VMLAB. Нажимая кнопку мышкой можно замыкать соответствующую ножку на "землю" создавая на ней "0" на время пока кнопка нажата. Когда кнопки не нажаты на ножках "1".

Конфигурировал прерывания и USART с помощью мастера генератора начального кода CVAVR и код конечно же работает.

Прерывания INT0  INT1 разрешены и сконфигурированы "по любому изменению уровня" - т.е. прерывание может возникать и по фронту ("0" -> "1") и по спаду ("1"->"0") сигнала на ножке PD2 и PD3 соответственно. 

Прерывание INT2 не конфигурировал - оно оставлено "по-умолчанию" т.е. отключено.

Откройте проект  vmlab.prj  в VMLAB и сделайте "ребилд-ол" 

В меню View откройте, если их нет на экране, панели "регистры и флаги" 
"SCOPE" и "Control Panel" - разместите их поудобней.

Теперь нажмите несколько раз на светофор - чтоб прекратились меседжи 
и симуляция шла непрерывно. Кликните по панели "регистры и флаги" 
чтоб вывести ее на передний план.

Теперь нажмите кнопку K2 и отпустите. 

Посмотрите в панели "регистры и флаги" в регистре флагов GIFR (обязательно почитайте об этом регистре в ДатаШите) установился бит_5,  если навести на него мышку то появится его название - INTF2 - это флаг прерывания INT2. Вы видите что хотя мы не включали это прерывание его флаг установился при событии соответствующем ему. Как я вам и обещал выше !

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

int0

Отпустите K0 и нажмите K1 и отпустите K1 

Смотрите: так как мы находимся в отработке паузы 100 мС в обработчике прерывания от INT0.   Бит_7 в SREG остается "0" и значит прерывания не исполняются. Все правильно - но отпускание кнопки K0 вызвало установку флага INTF0 а нажатие и отпускание K1 установило флаг  INTF1.  

Если теория прерываний изложенная мной выше верна то по завершении текущей обработки прерывания  INT0  должны произойти еще по 1 вызову обработчиков прерываний INT0 и  INT1 - причем сейчас МК AVR не "знает" какое из них случилось первым и значит будет обрабатывать их по порядку перечисления в таблице 18 ДШ. 

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

int0
int1

При этом вначале очистится бит INTF0, а затем INTF1.


Вопрос для самоконтроля:
Почему нажатие и отпускание кнопки K0 вызвало две обработки прерывания INT0, а от кнопки K1 только одно ?


Попробуете симуляцию снова и измените порядок нажатия кнопок:
вначале K1 а затем K0  - и вы увидите что последние два прерывания все равно будут выполнены в том же порядке:  int0  и затем   int1

 

Важно ! Из примера выше следует что 

Накопление не обработанных прерываний может быть не желательно или даже не допустимо по алгоритму программы, так как МК "не помнит" последовательность возникновения соответствующих событий ! 


Практическое применение  прерываний будет 
рассмотрено  в задачах - упражнениях курса.

 

 

 

... и теперь самый пожалуй 
интересный пунктик -

ПРОГРАММА  "зашитая" в МК AVR

 

Я постулировал ранее что - 

Возможность МК действовать по вашей программе - вот суть-соль МК. 

Это главное отличие МК от "обычных" непрограммируемых микросхем.


Я уже рассказал выше

- о внешних электрических сигналах поступающих на МК

- про электронику подключенную к МК

- о возможностях заложенных производителем AVR

 

AVR ATmega содержит многократно (не менее 10 000 раз) программируемую FLASH память программ - в нее загружается (есть различные варианты прошивки, загрузки программы - достаточно пяти проводков от LPT-порта к МК) программа которую будет исполнять МК при наличии следующих условий: 

1) есть питание МК 
2) есть уровень "1" на выводе Reset 
3) есть источник тактового сигнала 
4) нет сброса от иного источника сброса (== перезагрузки МК)

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

 


Даю определение - запомните

Программа взаимодействует с МК записывая, изменяя в нужное время числа в регистрах МК и читая в нужное время числа из определенных регистров.

Важно понимать !  

Именно взаимодействует с МК, а не просто управляет! 

То, что содержится в регистрах МК влияет на ход выполнения программы если она это предусматривает.

О как !   ... да что ж это за регистры такие, будь они не ладны!

 

 

Регистры  МК AVR  

Регистр (Register) микроконтроллера AVR - это набор из 8 бит т.е. 1 байт. 

Как бы ящичек с 8-ю ячейками с номерами от 7 до 0. 
В этих ячейках находятся 8 бит этого регистра.

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

бит7 самый левый - MSB - наиболее значимый бит, старший бит.

бит0 самый правый - LSB - наименее значимый бит, младший бит.

Бит может иметь значение "1" или "0". 

8 бит составляют байт и могут хранить десятичное 
число от 0 до 255 
 

другие формы записи этого диапазона чисел таковы: 
в 16-тиричном виде: от 0 до 0xFF  или от $0 до $FF  или от 0h до FFh
в двоичном виде от 0b00000000 до 0b11111111  

 

Число которое находится в регистре - есть значение регистра.

Значение в регистре вычисляется как сумма составленная из восьми 
таких слагаемых : 

(значение бита) умножить на (2 в степени равной номеру бита)

Пример: 
- если бит 7 равен "1" то он добавляет в сумму число 128 (это 2 в 7-й степ.)
- если бит 4 равен "1" то он добавляет в сумму число 16 (это 2 в 4-й)

Теперь вы видите почему бит 7 называется "мост сигнификант бит"  - MSB - наиболее значимый бит, старший бит.

Если некоторый бит равен "0" он конечно ни чего не добавляет в сумму.

     
 

Запись бит_Х означает что речь идет о бите с номером Х

Запись бит_5_2 или бит 5..2 и подобные означают что речь 
идет о нескольких битах, тут:  5  4  3  и  2

 
     

 

Регистры в других МК бывают и 16 битными и больше! но лучше говорить: шире.

в МК AVR есть 32 регистра общего назначения из которых 6 регистров R26 - R31 (или R26_31) могут быть виртуально объединены в пары и таким образом получается три 16-битных регистра.

 

Регистры МК имеют индивидуальные, уникальные адреса 
и наименования которые обычно образуются из их полного названия в ДШ (DS, DataSheet). 

Полное название регистра соответствует назначению регистра. 

Например: 
полное название регистра - Watchdog Timer Control Register 
сокращенное название – WDTCR
назначение регистра - управление сторожевым таймером  
адрес регистра WDTCR - $21 или 0x21

 

Такой же принцип соблюдается в именовании 
отдельных битов регистров.


Например: 
название бит - Bits 2..0 – Watchdog Timer Prescaler 2, 1, and 0
сокращенное название – WDP2, WDP1, WDP0
назначение регистра - биты установки коэффициента деления 
тактовой частоты сторожевого таймера  

 

При программировании на языке Си вы можете в программе обращаться к регистрам МК по их названию в ДШ - это удобней чем помнить абстрактные 
числа - адреса регистров. 

Например так: 

PORTB++;       // добавить 1 в значение регистра PORTB

PORTA = 135;
  // записать число 135 в регистр PORTA

PORTA ^= (1 << n);
  /* изменить 
бит_n в 
регистре PORTA 

я специально
написал этот комментарий 
в несколько 
строк для примера
 
  */

 

 

 

Все  регистры МК  в
таблице в конце ДШ !

Там же названия всех бит в регистрах,
их номера и страницы ДШ на которых
они описываются.

Суть - это путеводитель по ДШ!   

Распечатайте  обязательно! 

Скачать даташит ATmega16 

 

 

Вот пример схемы -- устройства регистра WDTCR из ДШ

Регистры целиком либо отдельные биты могут быть: 

- R/W можно читать и записывать (== изменять) 
- W   можно только записывать в него
- R    можно только читать, записать в него не получится.

Initial Value - это то что будет в регистре после включения питания или после появления перехода из "0" в "1" на ножке Reset или после прекращения сброса 
МК от другого источника. 

После такой схемы регистра в ДШ идет 
подробное описание функций каждого бита !

 

 

Обязательно разберитесь с регистрами !

они являются средством общения программы с МК 

т.е. РЕГИСТРЫ очень важны. 

Белых пятен быть не должно !

 

Программа не может измерить уровень существующий на ножке МК, но она может узнать об этом прочитав значение соответствующего бита в соответствующем регистре !  

 

Например так : 


if
(PINB.5) { сделать что-то };   
/* если на ножке PB5 есть "1" (не "0" значит "истинно") то программа сделает что-то, а если на ней "0" (значит "ложно") то не сделает, а просто пойдет дальше, на следующую строку */

Дойдя до этой строчки программа проверит чему равен бит_5 в регистре PINB - в нем МК сохраняет результат преобразования напряжения на ножках порта_В  в логические уровни "0" или "1" по правилам о которых я рассказал уже ранее - и по результату проверки программа будет действовать далее. 

while (PINA.6) { делать что-то };   
/* пока на ножке PA6 есть "1" (не "0" значит "истинно") то программа будет  делать что-то, и опять проверять что на
PA6 */

Дойдя до этой строчки программа проверит чему равен бит_6 в регистре PINA - если он "1" то выполнит то что в скобках {        } затем опять проверит этот бит. Так программа будет работать пока не будет прерывания либо пока бит_6 не станет "0". 

Если бит_6 стал "0" то программа пойдет дальше не выполняя того что в  {        } 

Значит так вы можете ввести в программу ожидание нажатия кнопки замыкающей ножку PA6 на "землю" (только обеспечив "1" на ножке при отпущенной кнопке).

while (PINA.6); 
/* пока на ножке PA6 есть "1" программа будет выполнять эту строчку. 
Когда возникнет "0" программа перейдет на следующую строку программы.
*/

 

 

Если вы уже "въехали" или "въезжаете" то надеюсь поняли 
что регистры PIN_Х должны быть ReadOnly - "только чтение" - ведь значения в них определяют только реальные уровни напряжений на соответствующих выводах МК

Программа может только читать из этих регистров.

Если не понятно - перечитайте пожалуйста ! 

Не оставляйте на потом !

 

     
 

Записывайте возникающие вопросы ! 
                               и лучше на бумагу - моторная память !

- найдите в DataSheet (ДШ) регистры и устройства МК о которых 
шла речь, прочитайте о  них подробней.

- если вопросы остались перечитайте материал снова !

- если вопросы не разрешены, ищите ответ:

1) поиском GOOGLE по Краткому КурсуAVR в on-line

2) поиском Windows в папке где сохранен у вас курс. 

3) в моем не структурированном AVRFAQ - это сборник ответов на часто задаваемые мне по курсу вопросы и советы по применению 
МК от знающих людей.

4) в АпНоутах

5) в книгах по AVR  и  МК
 

 

 

 

 


 

 

<- Назад                                  Дальше ->

 

 



 

          

 

Микроэлектронные проекты

        Фролов Дмитрий. Контроллер графического ЖКИ WG32240
        Буров Михаил. Редактор ресурсов RCE v1.1.1.1.
        Сергей. GSM сигнализация для автомобиля на Atmega16.
        Сергей. GSM сигнализация для дома.
        Владислав Шаповалов. ALR REVOLUTION.
        Василь Урманчеев. PIC для младенца.
 

 

Реклама недорогих радиодеталей почтой:

 

 

 

ключевые слова: программирование микроконтроллеров, как написать программу для микроконтроллера, обучение программированию микроконтроллеров, микроконтроллеры atmega128, как запрограммировать микроконтроллер, как прошить микроконтроллер, отладка программы для AVR, моделирование работы электронных схем, электронные проекты, хобби, язык си для микроконтроллеров, язык программирования си Основы программирования (кнопочки, светодиоды) Работа с портами. Прерывания и таймеры. Основы ШИМ, программная и аппаратная реализация. Сервоприводы. Работа с АЦП Настройка и программирование UART Работа с I2C Связь (UART, I2C, SPI) 
AT76C712 , AT76C713 , AT90CAN128 , AT90CAN128 Automotive , AT90CAN32 , AT90CAN64 , AT90PWM2 , AT90PWM3 , AT90S1200 , AT90S2313 , AT90S2323 , AT90S2343 , AT90S4433 , AT90S8515 , AT90S8535 , ATmega128 , ATmega1280 , ATmega1281 , ATmega16 , ATmega161 , ATmega162 , ATmega163 , ATmega164 , ATmega165 , ATmega168 , ATmega168 Automotive , ATmega169 , ATmega2560 , ATmega2561 , ATmega32 , ATmega323 , ATmega324 , ATmega325 , ATmega3250 , ATmega329 , ATmega3290 , ATmega406 , ATmega48 , ATmega48 Automotive , ATmega64 , ATmega640 , ATmega644 , ATmega645 , ATmega6450 , ATmega649 , ATmega6490 , ATmega8 , ATmega8515 , ATmega8535 , ATmega88 , ATmega88 Automotive , ATtiny11 , ATtiny12 , ATtiny13 , ATtiny15L , ATtiny2313 , ATtiny25 , ATtiny26 , ATtiny28L , ATtiny45 , ATtiny85

 

 


AVR раз, два, три...   это просто!

действительно Краткий Курс !

МикроКонтроллеры AVR Начинающим "с нуля" 


 

SparkFun Projects -

http://www.sparkfun.com/tutorial/Key-Counter/Key-Counter-Mini.jpg Key-Counter - Playing with the PS2 keyboard protocol. How many times have you hit the 'n' key today?

http://www.sparkfun.com/tutorial/Sin7/Sinister7Icon-K-S.jpg Sinister7 - A venture into the unknown with a simple device to detect mysterious waves, and to generate winning lottery numbers.

Giant Nintendo Controller - A sociological study on team work. Checkout how we built this 5' long, 83 lbs. Nintendo controller.

The image “http://www.sparkfun.com/tutorial/Nike+iPod/Nike_iPod-Thumb.jpg” cannot be displayed, because it contains errors. Picture Frame Tetris - Another tutorial on why we like big blinky things. We've made the game of Tetris interactive with 720 LEDs, 16 microcontrollers, and 10lbs of wires, sweat, and code.

The image “http://www.sparkfun.com/tutorial/Nike+iPod/Nike_iPod-Thumb.jpg” cannot be displayed, because it contains errors. Nike+iPod Dissection - Another commercial product destroyed. A good example of how to use a PIC and the nRF2401 to make a gazzilion dollars.

History Museum - A trip down memory lane with a box full of prototypes collected over the years. Learn what not to do from what we screwed up.

The image “http://www.sparkfun.com/tutorial/ReflowToaster/Paste-Mini.jpg” cannot be displayed, because it contains errors. Wii-mote guts - We crack the case on the infamous flying Nintendo controller, so you don't have to.

Ethernet to Color LED Matrix - Controlling a color LED matrix from anywhere in the world using a simple java script interface.

Maker Faire 2006 - Pictures from the wildly popular fair of hacks and toys.

Roomba Remote Tilt Controller - How to hack a Roomba, a WiTilt, and the Federal Trade Commission. Ok, maybe not the Federal Trade Commission.

The image “http://www.sparkfun.com/tutorial/ReflowToaster/Paste-Mini.jpg” cannot be displayed, because it contains errors. 12ft GPS Wall Clock - A fun project using LED light bars, a PIC for control, 7-segment driving, playing with 2Amps, and some assorted other fun tricks.

How Far Does It Go? - A range comparison of Spark Fun RF products.  Which is for you?  This will help you decide.

Bluetooth Primer - Implementing a Bluetooth serial link is easier than you think, and we spell it out for you!

High Voltage Ringer - How do you make the classic bell ringer work off 3.8VDC?  The magic of a DC/DC converter!

The image “http://www.sparkfun.com/tutorial/ReflowToaster/Paste-Mini.jpg” cannot be displayed, because it contains errors. Port-O-Rotary - We take an old rotary phone, dissect it, and cross-pollinate it with a cellular module.

Robot Building! - A simplistic approach to getting a two-wheel robot to move across the floor. Oh, and chasing my cat.

Pseudo-Datasheet for the Serial ADXL - Not a real datasheet, but everything you need to know for implementing the Serial ADXL PCB into your project. Includes the PCB layout, firmware, and discussions on sensor sensitivity.

Overclocking a PIC - How fast can you push it? We actually don't know. But 32MHz is where we stopped for the moment...

Crazy Soldering - Ever wonder how to solder that surface mount package? We can show you how - with lots of pictures! LCC soldering not recommended for the faint of heart.

Foamware - Besides liking that word, we really enjoy flying our gliders. We decided to use the new ADXL sensors we put together in connection with a wireless transmitter. Foamware is what came out.


Beginning Embedded Electronics Tutorials -

http://www.sparkfun.com/tutorial/BeginningEmbedded/BEE-Mini.jpg Don't know anything about Embedded Electronics? Start here!


Surface Mount Soldering Tutorials -

The SMD How To:

The image “http://www.sparkfun.com/tutorial/ReflowToaster/Paste-Mini.jpg” cannot be displayed, because it contains errors. Solder Paste Stenciling - How to apply solder paste with a $35 stencil.

The image “http://www.sparkfun.com/tutorial/ReflowToaster/Skillet-Mini.jpg” cannot be displayed, because it contains errors. Reflow Skillet - Reflowing trickier PCBs with a $30 hot plate!

The image “http://www.sparkfun.com/tutorial/ReflowToaster/Toaster-Mini.jpg” cannot be displayed, because it contains errors. Reflow Toaster - Attempting to reflow PCBs with a toaster oven.


Open Circuits -

The image “http://www.sparkfun.com/tutorial/OpenCircuits-Mini.jpg” cannot be displayed, because it contains errors. Open Circuits Homepage - Open Circuits is a wiki for sharing electronics knowledge, schematics, board layouts, and parts libraries. This is where SFE posts their footprints, board layouts, schematics, and breaks down projects in a friendly, open source mindset. We're here to teach! And to learn...

SparkFun Eagle Library - This is the complete Spark Fun Electronics default foot prints for Eagle PCB Layout software. We switched to Eagle back in 2006 and have been extremely impressed with its ease of use and flexibility. As with any new software, it's like learning a new language and takes time. Do it. Eagle is great.


General Explanation -

http://www.sparkfun.com/tutorial/Erase-Jumper.jpgYour Atmel Board May Not Be Dead - Another great tutorial by Jim Lynch shows how to recover a locked SAM7 board.

http://www.sparkfun.com/commerce/images/Nokia6100_Tutorial.jpg Nokia 6100 - Jim Lynch writes another great tutorial demonstrating how to interface to this popular color LCD. Source code here. Updated to include support for both Epson and Philips controllers.

Product Info Sensor Interfacing - Some basic techniques to get a 3.3V sensor hooked up to a 5V micro.

ARM tutorial - Jim Lynch's tutorial for setting up the free GCC/GNU tool chain. The example software is available here.

Product Info Bluetooth - We've have the Blue SMiRF, the Extended Blue SMiRF, and the DIP module.  We've also have the WiTilt and the 6DOF, each of which have a Blue Tooth module on them.

Product Info GPS Overview - General background information and descriptions of the modules we carry.


PIC Boot Loader -

Bloader and Screamer - New version v1.6! Thanks Mike K! Support for 16F877A, 16F876A, 16F873A, 16F88.

Bloader and Screamer 877A - (Outdated but good info) An in-depth tutorial on our in-house boot loader and accompanying Windows program. Find out how to build your own!

Bloader for the 16F88 - (Outdated but good info) A short and sweet tutorial to setup the P18 dev board using the PIC 16F88.


PIC Programmer Setup Tutorials  -

Programmer and Board Test Program - Blink! As well as some other helpful test routines.

PG1B - The PG1 and PG2C are the same functional device, only the PG2C has a socket built in. Please refer to the PG2C documentation - it works just fine for the PG1. Also, see 'Basic PIC Tutorial' located below.

PG2C ICProg tutorial - Get the PG2C setup and burning with this very popular socketed programmer.

Breadboard programming with ICSP - A tutorial using the PIC-PG2C programmer, an ICSP cable, a polarized header, and a breadboard.

PG3B ICProg tutorial - Updated! Now using the ever popular ICProg. All you need to know to get our popular parallel programmer up and burning!

PG3B WinPicProg tutorial - The original tutorial using WinPicProg. Saved for educational purposes.

Setting up the MCP under MPLAB - Not as bad as you think!

Setting up the In Circuit Debugger under MPLAB - Just as bad as you think! (Not really)


General PIC Tutorials -

The Biggie - A lengthy tutorial that covers:

  • How to get the MAX232 IC working on many Olimex Development boards

  • How to get the UART hardware module (TX/RX) working on a PIC 16F628

  • How to use nice printf("Hello!", 0); routines for debugging

  • How to talk to an I2C EEProm

  • How to control a standard servo using the computer's keyboard through hyperterminal

Courtesy of Joyner Network Solutions

The Serial Biggie - 'Nuther long tutorial running the gauntlet of good MPLAB and Serial Communications info. This is all about implementing RS232 timing in software.

  • Intro and the basic idea behind RS232 timing

  • How to setup a project under MPLAB v6.4

  • All about the Stopwatch and Debug functions

  • Using the Stopwatch to tailor delays used in RS232 timing

  • Straight through hardware connections (No MAX232!) and HyperTerminal setup

What is this place? - A few common answer to a few common questions about uCs and this site.

Basic breadboard tutorial using the PIC-PG1B programmer - An amazing low-cost programmer that impressed us the first time we used it! A great tutorial to get your first PIC project blinking.

Set up your space! - Have you got the LED blinking? Time to get coding! A tutorial on setting up a free code editor with a free C compiler. Very quick, very easy to use

Serial IO - Our own spin on serial communication. Serial out is a must have feature for debugging. What the heck is the value of that variable? Just pipe it out through 'serial_out' and find out in Windows' HyperTerminal. Outdated - See 'The Serial Biggie' above for newest information.

MCP Upgrade tutorial - Getting errors under MPLAB? You may need to upgrade the firmware on your MCP. Use this step-by-step tutorial to upgrade to the newest release from Olimex.

Mini-ICSP Updates - Have you noticed the itty bitty white rectangles on some of the SparkFun designed boards? These are a miniature version of the ICSP connection. This tutorial will show you how to use a special adapter to re-program boards with this type header.

 

 

 

 

 

http://www.sparkfun.com ARM tutorial - Jim Lynch's tutorial for setting up the free GCC/GNU tool chain. The example software is available here.
Bluetooth - We've have the Blue SMiRF, the Extended Blue SMiRF, and the DIP module. We've also have the WiTilt and the 6DOF, each of which have a Blue Tooth module on them.
GPS Overview - General background information and descriptions of the modules we carry.
Surface Mount Soldering Tutorials -
The SMD How To:
Page 1 - Recommended Tools
Page 2 - Basic SMD Soldering
Page 3 - Rework with just a soldering iron
Page 4 - Hot-air rework
Page 5 - Green wire fixes
Page 6 - Advanced hot-air techniques
Solder Paste Stenciling - How to apply solder paste with a $35 stencil.
Reflow Skillet - Reflowing trickier PCBs with a $30 hot plate!
Reflow Toaster - Attempting to reflow PCBs with a toaster oven.

Open Circuits -
Open Circuits Homepage - Open Circuits is a wiki for sharing electronics knowledge, schematics, board layouts, and parts libraries. This is where SFE posts their footprints, board layouts, schematics, and breaks down projects in a friendly, open source mindset. We're here to teach! And to learn...
PIC Boot Loader -
Bloader and Screamer - New version v1.6! Thanks Mike K! Support for 16F877A, 16F876A, 16F873A, 16F88.
Bloader and Screamer 877A - (Outdated but good info) An in-depth tutorial on our in-house boot loader and accompanying Windows program. Find out how to build your own!
Bloader for the 16F88 - (Outdated but good info) A short and sweet tutorial to setup the P18 dev board using the PIC 16F88.
PIC Programmer Setup Tutorials -
Programmer and Board Test Program - Blink! As well as some other helpful test routines.
PG1B - The PG1 and PG2C are the same functional device, only the PG2C has a socket built in. Please refer to the PG2C documentation - it works just fine for the PG1. Also, see 'Basic PIC Tutorial' located below.
PG2C ICProg tutorial - Get the PG2C setup and burning with this very popular socketed programmer.
Breadboard programming with ICSP - A tutorial using the PIC-PG2C programmer, an ICSP cable, a polarized header, and a breadboard.
PG3B ICProg tutorial - Updated! Now using the ever popular ICProg. All you need to know to get our popular parallel programmer up and burning!
PG3B WinPicProg tutorial - The original tutorial using WinPicProg. Saved for educational purposes.
Setting up the MCP under MPLAB - Not as bad as you think!
Setting up the In Circuit Debugger under MPLAB - Just as bad as you think! (Not really)
General PIC Tutorials -
The Biggie - A lengthy tutorial that covers:
How to get the MAX232 IC working on many Olimex Development boards
How to get the UART hardware module (TX/RX) working on a PIC 16F628
How to use nice printf("Hello!", 0); routines for debugging
How to talk to an I2C EEProm
How to control a standard servo using the computer's keyboard through hyperterminal
Courtesy of Joyner Network Solutions
The Serial Biggie - 'Nuther long tutorial running the gauntlet of good MPLAB and Serial Communications info. This is all about implementing RS232 timing in software.
Intro and the basic idea behind RS232 timing
How to setup a project under MPLAB v6.4
All about the Stopwatch and Debug functions
Using the Stopwatch to tailor delays used in RS232 timing
Straight through hardware connections (No MAX232!) and HyperTerminal setup
What is this place? - A few common answer to a few common questions about uCs and this site.
Basic breadboard tutorial using the PIC-PG1B programmer - An amazing low-cost programmer that impressed us the first time we used it! A great tutorial to get your first PIC project blinking.
Set up your space! - Have you got the LED blinking? Time to get coding! A tutorial on setting up a free code editor with a free C compiler. Very quick, very easy to use
Serial IO - Our own spin on serial communication. Serial out is a must have feature for debugging. What the heck is the value of that variable? Just pipe it out through 'serial_out' and find out in Windows' HyperTerminal. Outdated - See 'The Serial Biggie' above for newest information.
MCP Upgrade tutorial - Getting errors under MPLAB? You may need to upgrade the firmware on your MCP. Use this step-by-step tutorial to upgrade to the newest release from Olimex.
Mini-ICSP Updates - Have you noticed the itty bitty white rectangles on some of the Spark Fun designed boards? These are a miniature version of the ICSP connection. This tutorial will show you how to use a special adapter to re-program boards with this type header.
More Projects -
Ethernet to Color LED Matrix - Controlling a color LED matrix from anywhere in the world using a simple java script interface
Maker Faire 2006 - Pictures from the wildly popular fair of hacks and toys.
Roomba Remote Tilt Controller - How to hack a Roomba, a WiTilt, and the Federal Trade Commission. Ok, maybe not the Federal Trade Commission.
12ft GPS Wall Clock - A fun project using LED light bars, a PIC for control, 7-segment driving, playing with 2Amps, and some assorted other fun tricks.
How Far Does It Go? - A range comparison of Spark Fun RF products. Which is for you? This will help you decide.
Bluetooth Primer - Implementing a Bluetooth serial link is easier than you think, and we spell it out for you!
High Voltage Ringer - How do you make the classic bell ringer work off 3.8VDC? The magic of a DC/DC converter!
Port-O-Rotary - We take an old rotary phone, dissect it, and cross-pollinate it with a cellular module.
Robot Building! - A simplistic approach to getting a two-wheel robot to move across the floor. Oh, and chasing my cat.
Pseudo-Datasheet for the Serial ADXL - Not a real datasheet, but everything you need to know for implementing the Serial ADXL PCB into your project. Includes the PCB layout, firmware, and discussions on sensor sensitivity.
Overclocking a PIC - How fast can you push it? We actually don't know. But 32MHz is where we stopped for the moment...
Crazy Soldering - Ever wonder how to solder that surface mount package? We can show you how - with lots of pictures! LCC soldering not recommended for the faint of heart.
Foamware - Besides liking that word, we really enjoy flying our gliders. We decided to use the new ADXL sensors we put together in connection with a wireless transmitter. Foamware is what came out.
программирование микроконтроллеров, как написать программу для микроконтроллера, обучение программированию микроконтроллеров, микроконтроллеры atmega128, как запрограммировать микроконтроллер, как прошить микроконтроллер, отладка программы для AVR, моделирование работы электронных схем, электронные проекты, хобби, язык си для микроконтроллеров, язык программирования си Основы программирования (кнопочки, светодиоды) Работа с портами. Прерывания и таймеры. Основы ШИМ, программная и аппаратная реализация. Сервоприводы. Работа с АЦП Настройка и программирование UART

Сайт управляется системой uCoz