Atmega8 16pu используется где

от admin

Осваиваем микроконтроллеры на примере Atmega8

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

В качестве подопытного предлагаю выбрать популярный и довольно высокопроизводительный 8-разрядный AVR микроконтроллер Atmega8 в удобном для наших целей 28-выводном DIP корпусе.

Итак, что нам нужно для полного счастья?

1. Простая и, в приоритете, бесплатная среда разработки, в которой можно посредством слов и цифр написать программу, а затем скомпилировать её, т. е. перевести на язык, понятный микроконтроллеру.
Одним из удачных примеров такой среды является Atmel Studio. Скачать эту программу не составит никакого труда, в том числе и на официальном сайте разработчика – https://www.microchip.com/.

2. Отладочная плата для микроконтроллера, желательно с DIP28 панелькой для микросхемы.

Удачным вариантом такой платы я бы посчитал изделие под названием «плата разработки ATmega8 – сделай сам», предлагаемое нашими китайскими друзьями за символические 150 отечественных рублей.

В комплект поставки входят:
– собственно, сама плата;
– Панелька DIP28;
– Кварцевый резонатор на 8 МГц;
– Разъём для подключения программатора;
– Разные деталюшки в виде: конденсаторов, резисторов, кнопок, светодиодов, т. е. всего того, что позволит легко запрограммировать и проверить микропроцессор в работе.

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

3. Программатор AVR USB, для того чтобы запрограммировать микроконтроллер, то есть перенести в него информацию с компьютера.

Программатор AVR USB

Такой программатор оценивается на aliexpress примерно в ту же стоимость, что и предыдущее изделие.

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

Питание берётся от USB разъёма компьютера.
Работать программатор может под разными операционными системами, в том числе – под Windows.

Если тип приобретённого программатора не будет поддерживаться Atmel Studio, то придётся скачать и бесплатную программу прошивки микроконтроллеров, например, AVRDude.

4. Контактная макетная плата для монтажа без пайки.

Контактная макетная плата для монтажа без пайки

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

Она без какого-либо напряга и паяльника позволит соединить любые электронные элементы обвеса микроконтроллера в единую конструкцию, превращая весь процесс создания схемы в увлекательную игру с конструктором LEGO.

Подобный набор, состоящий из беспаечной макетной платы и комплекта проводов, обойдётся не дороже 200 рублей.

5. Для того чтобы в процессе отладки не перепрошивать ATmega8 бесчисленное количество раз, жизненно необходима программа, позволяющая отладить прошивку без участия микроконтроллера.
Для этой цели как нельзя лучше подходит программа для автоматизированного проектирования электронных схем (в том числе и микроконтроллеров) – Proteus. Она значительно упрощает процесс отладки программы без участия микроконтроллера, ведь любой накопитель имеет конечное число перезаписей, хотя это число и достаточно большое.

6. Если написать и отладить программу для микроконтроллера можно и без его непосредственного участия, то, по-любому, рано или поздно встанет конкретный вопрос: «А на фига мы всё это делали?».
Поэтому хочешь, не хочешь, а приобрести ATmega8 нам также всё ж таки придётся. Стоит она на Али, как и всё остальное, довольно-таки гуманных денег – около 100 рублей за единицу продукции, поэтому кошелёк опорожнит не сильно, но уважительного к себе отношения потребует.

А теперь давайте-ка посмотрим: А что это за штука ATMEGA8 попала к нам в руки?
Внешний вид и назначение выводов Atmega8Внешний вид и назначение выводов Atmega8
Рис.1 Внешний вид и назначение выводов Atmega8

У данного типа МК есть два типа питания – цифровое VCC (выв.7) и аналоговое AVCC (выв.20). В стандартном включении, когда на входы/выходы контроллера подаются логические 1 и 0, оба вывода питания соединяют (физически соединяются VCC и AVCC, поскольку GND выводы 8 и 22 уже замкнуты внутри ИМС через сопротивление 0,7 Ом). Однако при подключении нагрузки, эти земляные выводы необходимо замкнуть на плате, т. к. внутри они соединены тонким проводником, который при существенном токе не следует рассматривать как «перемычку».
Если используется встроенный АЦП, или входы/выходы задействованы для работы с аналоговыми сигналами, то для уменьшения помех производитель рекомендует использовать последовательный LC-фильтр по AVCC.
Между выводами питания и землёй (в непосредственной близости от выводов питания микросхемы) всегда следует устанавливать керамические конденсаторы ёмкостью 0,1 Мкф, которые обычно называют блокировочными конденсаторами.

Ещё один непомеченный цветом вывод (Рис.1) – 21 вывод (AREF).
AREF означает Analog Reference и является входом для подачи (при необходимости) опорного напряжения от внешнего источника питания.

Все раскрашенные выводы микроконтроллера (Рис.1) – это порты ввода-вывода, через которые микроконтроллер общается с внешним миром. У ATmega8 их три: PB0. PB7, PC0. PC6, PD0. PD7.
PB0. PB7 и PD0. PD7 – это полные, т. е. 8-разрядные порты, PC0. PC6 – неполный 7-разрядный порт, т. к. для полноты ему тупо не хватило лишнего вывода у микросхемы.

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

1. Порты PB0. РВ7. Два вывода (РВ6 и PB7) используются для подключения кварцевого резонатора. Выводы РВ2. РВ5 зарезервированы для программирования МК. Таким образом, для общего применения остаются порты PB0 и PB1.
2. Порты PC0. РС6. Порты PC0. РС5 есть возможность использовать в качестве аналоговых входов. РС6 обычно используется для общего внешнего сброса настроек, т. е. перезагрузки прошивки МК.
3. Порты PD0. РD7. Эти порты можно использовать для общего применения.

Atmega8 выпускается с уже настроенным для использования встроенным RC-генератором с частотой 1МГц, который позволяет запустить МК без внешних элементов. Посредством конфигурационных манипуляций, значения этой частоты могут принимать также значения: 2, 4 и 8 MHz. Однако для решения многих задач стабильности RC-генератора оказывается явно недостаточно, в связи с чем для тактирования микроконтроллера используется внешний кварцевый резонатор.

Следует запомнить, что МК не является устройством, которое управляет большими мощностями, для этого есть транзисторы, тиристоры и прочие силовые элементы. Максимальный ток линии ввода/вывода составляет 40мА, максимальный суммарный ток по цепям питания и GND – 200мА.
И под занавес:

Основные технические параметры ATmega8:

— Память для программ составляет 8 Кб с возможностью перезаписать 10 000 раз;
— 512 байт флеш-памяти для хранения переменных (100 000 циклов перезаписи);
— 1 Кб ОЗУ и 32 регистра общего назначения;
— Два 8-разрядных Таймера/Счетчика с раздельным прескалером, режим сравнения;
— 16-разрядный Таймер/Счетчик с раздельным прескалером, режим сравнения, режим захвата;
— Таймер реального времени с независимым генератором;
— 3 канала ШИМ;
— 6 каналов 10-разрядного АЦП;
— Двухпроводный последовательный интерфейс;
— Программируемый последовательный USART;
— Интерфейс SPI с режимами Master/Slave;
— Программируемый сторожевой таймер с отдельным независимым генератором;
— Встроенный аналоговый компаратор;
— Сброс при включении питания, программируемая защита от провалов питания;
— Встроенный калиброванный RC-генератор;
— Обработка внутренних и внешних прерываний;
— 5 режимов с пониженным энергопотреблением: Idle, ADC Noise Reduction, Power-save, Power-down и Standby;
— Напряжение питания 4.5 — 5.5В;
— Тактовая частота 0-16 МГц.

Ну, на этом, пожалуй, и всё.
Для желающих посерьёзней углубиться в знания, могу порекомендовать datasheet производителя и русскоязычное описание ATmega8, с которым можно познакомиться по ссылке — ATMEGA8.

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

Микроконтроллеры AVR для начинающих — 1

Микроконтроллеры (далее МК) прочно вошли в нашу жизнь, на просторах интернета можно встретить очень много интересных схем, которые исполнены на МК. Чего только нельзя собрать на МК: различные индикаторы, вольтметры, приборы для дома (устройства защиты, коммутации, термометры…), металлоискатели, разные игрушки, роботы и т.д. перечислять можно очень долго. Первую схему на микроконтроллере я увидел лет 5-6 назад в журнале радио, и практически сразу же перелистнул страницу, подумав про себя «все равно не смогу собрать». Действительно, в то время МК для меня были чем то очень сложным и непонятым устройством, я не представлял как они работают, как их прошивать, и что делать с ними в случае неправильной прошивки. Но около года назад, я впервые собрал свою первую схему на МК, это была схема цифрового вольтметра на 7 сегментных индикаторах, и микроконтроллере ATmega8. Так получилось, что микроконтроллер я купил случайно, когда стоял в отделе радиодеталей, парень передо мной покупал МК, и я тоже решил купить, и попробовать собрать что-нибудь. В своих статьях я расскажу вам про микроконтроллеры AVR фирмы ATMEL, научу вас работать с ними, рассмотрим программы для прошивки, изготовим простой и надежный программатор, рассмотрим процесс прошивки и самое главное проблемы, которые могут возникнуть и не только у новичков.

Основные параметры некоторых микроконтроллеров семейства AVR:

Дополнительные параметры МК AVR mega:

Рабочая температура: -55…+125*С
Температура хранения: -65…+150*С
Напряжение на выводе RESET относительно GND: max 13В
Максимальное напряжение питания: 6.0В
Максимальный ток линии ввода/вывода: 40мА
Максимальный ток по линии питания VCC и GND: 200мА

Распиновка ATmega 8X

Расположение выводов моделей ATmega 8X

Распиновка ATmega48x, 88x, 168x

Расположение выводов моделей ATmega48x, 88x, 168x

Распиновка ATmega8515x

Расположение выводов у моделей ATmega8515x

Распиновка ATmega8535x

Расположение выводов у моделей ATmega8535x

Распиновка ATmega16,32x

Расположение выводов у моделей ATmega16, 32x

Распиновка ATtiny2313

Расположение выводов у моделей ATtiny2313

В конце статьи прикреплён архив с даташитами на некоторые микроконтроллеры

Установочные FUSE биты MK AVR

Запомните, запрограммированный фьюз – это 0, не запрограммированный – 1. Осторожно стоит относиться к выставлению фьюзов, ошибочно запрограммированный фьюз может заблокировать микроконтроллер. Если вы не уверены какой именно фьюз нужно запрограммировать, лучше на первый раз прошейте МК без фьюзов.

Самыми популярными микроконтроллерами у радиолюбителей являются ATmega8, затем идут ATmega48, 16, 32, ATtiny2313 и другие. Микроконтроллеры продаются в TQFP корпусах и DIP, новичкам рекомендую покупать в DIP. Если купите TQFP, будет проблематичнее их прошить, придется купить или изготовить переходник и паять плату т.к. у них ножки располагаются очень близко друг от друга. Советую микроконтроллеры в DIP корпусах, ставить на специальные панельки, это удобно и практично, не придется выпаивать МК если приспичит перепрошить, или использовать его для другой конструкции.

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

Для программирования используется 6 выводов:
RESET — Вход МК
VCC — Плюс питания, 3-5В, зависит от МК
GND — Общий провод, минус питания.
MOSI — Вход МК (информационный сигнал в МК)
MISO — Выход МК (информационный сигнал из МК)
SCK — Вход МК (тактовый сигнал в МК)

ATmega8

Иногда еще используют вывода XTAL 1 и XTAL2, на эти вывода цепляется кварц, если МК будет работать от внешнего генератора, в ATmega 64 и 128 вывода MOSI и MISO не применяются для ISP программирования, вместо них вывода MOSI подключают к ножке PE0, a MISO к PE1. При соединении микроконтроллера с программатором, соединяющие провода должны быть как можно короче, а кабель идущий от программатора на порт LPT так-же не должен быть слишком длинным.

В маркировке микроконтроллера могут присутствовать непонятные буквы с цифрами, например Atmega 8L 16PU, 8 16AU, 8A PU и пр. Буква L означает, что МК работает от более низкого напряжения, чем МК без буквы L, обычно это 2.7В. Цифры после дефиса или пробела 16PU или 8AU говорят о внутренней частоте генератора, который есть в МК. Если фьюзы выставлены на работу от внешнего кварца, кварц должен быть установлен на частоту, не превышающей максимальную по даташиту, это 20МГц для ATmega48/88/168, и 16МГц для остальных атмег.

Читать:
Как измерить седалищные кости для велосипеда

Первые цифры в названии микроконтроллера обозначают объем FLASH ПЗУ в килобайтах, например ATtiny15 – 1 Кб, ATtiny26 – 2 Кб, AT90S4414 – 4 Кб, Atmega8535 – 8 Кб, ATmega162 – 16Кб, ATmega32 – 32 Кб, ATmega6450 – 64Кб, Atmega128 – 128Кб.

Иногда встречаются схемы, где применены микроконтроллеры с названиями типа AT90S… это старые модели микроконтроллеров, некоторые из них можно заменить на современные, например:

AT90S4433 – ATmega8
AT90S8515 – ATmega8515
AT90S8535 – ATmega8535
AT90S2313 – ATtiny2313
ATmega163 – ATmega16
ATmega161 – ATmega162
ATmega323 – ATmega32
ATmega103 – ATmega64/128

ATmega 8 имеет несколько выводов питания, цифровое – VCC, GND и аналоговое – AVCC, GND. В стандартном включении обе пары выводов соединяют параллельно, т.е. вместе. Микроконтроллеры AVR не любят повышенного напряжения, если питание выше 6 вольт, то они могут выйти из строя. Я обычно применяю маломощный стабилизатор напряжения на 5 вольт, КР142ЕН5 или 78L05. Если напряжение питания слишком низкое, то МК не прошьется, программа будет ругаться и выдавать ошибки (к примеру -24 в PonyProg).

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

Микроконтроллер Atmega8A-16PU

1.JPG» />

  1. Цена: $8,93 за 10шт.

Преамбула.
Так уж сложилось, что свое знакомство с мк я начал с Arduino. Мигал светодиодом, подключал различные датчики и шилды, делал различные проекты. Все работало, меня устраивало, однако хотелось чего-то большего. Подвернулся мне один проект, где участвует Atmega8A, под которую нужно самостоятельно написать прошивку. Именно он подтолкнул меня к изучению процесса программирования «голого» мк.
Итак, перед нами микроконтроллер фирмы Atmel, семейства AVR Atmega8A.

Распиновка:

Тут находится datasheet
Теперь для работы и программирования нужно подключить его к программатору по схеме:

К сожалению, я как сапожник — без сапог, сейчас под руками нет программатора, поэтому я буду использовать Arduino UNO для загрузки в мк готовой прошивки и настройки фьюзов. Достаточно лишь загрузить скетч «Arduinoisp» из папки примеров Arduino IDE и подключить по схеме:

Однако, у данного решения есть существенный недостаток, о котором расскажу чуть позже. Перед тем, как приступить к написанию программы в CodeVisionAvr (далее CvAvr), нам нужно определиться, на какой частоте будет работать наш мк. По умолчанию, с завода наш герой работает от внутреннего rc-генератора на частоте 1Мгц (с возможностью перенастройки на 2, 4, и 8Мгц). Поскольку внутренний rc-генератор калибруют на заводе при определенных условиях (точное напряжение, температура), то точность его работы в «полевых» условиях может отличаться от 3% до 10%. Для задач, где не нужна высокая точность тактирования, этим можно пренебречь, в остальных случаях лучше использовать внешний кварц. В своем проекте я использовал внешний кварц на частоту 8 Мгц. Теперь нам надо «объяснить» мк, что нужно работать от внешнего кварца. Делается это при помощи изменения фьюзов. Если пояснить «на пальцах», то это что то вроде БИОСа, как на материнской плате, где вы указываете режимы её работы, аналогично мы сообщаем мк, в каких режимах, помимо частоты, он должен работать. Вся информация будет храниться в энергонезависимой памяти.
О прошивке фьюзов я расскажу под спойлером, те, кто умеет это делать самостоятельно, могут листать дальше.
Как же прописать эти самые фьюзы?! Для этого я использовал программу AvrDude, она бесплатна и легко найдется в интернете. Для того, чтобы правильно выставить фьюзы в соответствии с нужной частотой, смотрим datasheet, а можно и воспользоваться простым он-лайн калькулятором.
Выставляем параметры, как на картинке.

Тут все просто:
Clock Source — задаем частоту (External Crystal 3 — 16 Mhz) от внешнего кварца.
Start-up Time — скорость старта мк после снятия RESET или подачи питания (16K CK + 4.1ms fast).
Ставим галку: Ext. Clock/RC Osc./Low-freq. Crystal: enable internal Capacitors (36 pF)
Internal R/C Osc.: leave unchecked! External Crystal: enable full swing (neccessary for >8 MHz).
Таким образом, мы получили Low Fuse 0xEF и High Fuse 0xC9. Отлично, полдела сделали. Теперь подключаем мк к Arduino UNO, а саму Arduino к компьютеру соответственно. Запускаем командную строку, переходим в папку с AvrDude. Далее вводим строку: avrdude -C avrdude.conf -c avrisp -P COM13 -b 19200 -p m8 -U lfuse:w:0xef:m -U hfuse:w:0xc9:m
Вот как это выглядит на картинке:

Разберем строку, которую ввели:
avrisp — это тип нашего ардуиноподобного программатора
COM13 — номер com порта, которым определяется наша Arduino в системе (в вашем случае его надо посмотреть в диспетчере устройств)
19200 — скорость com порта, оставляем как есть
m8 — указываем, что наш мк — Atmega8
-U lfuse:w:0xef:m -U hfuse:w:0xc9:m — тут указаны наши Low Fuse 0xEF и High Fuse 0xC9
Будьте ВНИМАТЕЛЬНЫ . неправильно указанные Fuse могут привести к окирпичиванию мк (танцы с бубном по восстановлению нам не нужны).
Нажимаем «Ввод» и на выходе получаем результат, как на картинке:

Если не появилось никаких ошибок в процессе, то работа выполнена, наш мк теперь будет работать от внешнего кварца.
Очень подробно о фьюзах можно прочитать тут и тут, а так же используя поиск в google.
После установки и запуска среды воспользуемся мастером создания проектов. Выбираем «File» — «New» — «Project». На вопрос, будем ли мы использовать мастер, отвечаем утвердительно. Target AVR Chip Type указываем AT90, ATtity, ATmega.
Так выглядит мастер проектов:

На вкладке Chip выбираем ATmega8A, Clock 8.000000 Mhz. Переходим во вкладку Ports. Наш светодиод будет подключен к 14 выводу микроконтроллера, согласно распиновке — PB0. На вкладке выбираем Port B, Bit 0 переключаем с IN на OUT, т.е. переводим режим работы 14 ножки нашего мк на выход.

На этом работа мастера окончена. Выбираем «Program» — «Generate, Save and Exit». Сохраняем наш проект, например, под именем Blink.

/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
Chip type: ATmega8A
Program type: Application
AVR Core Clock frequency: 8.000000 MHz
Memory model: Small
External RAM size: 0
Data Stack size: 256
*******************************************************/
#include <mega8.h>
#include <delay.h>
// Declare your global variables here

void main(void)
<
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator’s positive input is
// connected to the AIN0 pin
// The Analog Comparator’s negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

while (1)
<
PORTB.0=1;
delay_ms (1000);
PORTB.0=0;
delay_ms (1000);
>
Тут мы устанавливаем высокий уровень на PB0, ждем 1 секунду и устанавливаем низкий уровень, затем цикл повторяется. Еще не забываем подключить библиотеку в начале проекта #include <delay.h>. Наша программа готова. Как видите, всё очень просто. Теперь выбираем «Project» — «Build All». Если ошибок допущено не было, то увидим отчет мастера:

Размер нашей программы составил 198 bytes, и занял 2.4% памяти мк.
Далее собираем схему:

Теперь переходим в папку с нашим проектом, заходим в папку «Debug», затем «Exe», там находится файл с расширением hex. В моем случае это blink.hex.
Остался последний шаг. Копируем этот файл в папку с AvrDude. Снова запускаем командную строку, переходим в нашу папку. Вводим строку avrdude -C avrdude.conf -c avrisp -P COM13 -b 19200 -p m8 -U flash:w:blink.hex
Так это выглядит на картинке:

Если все ввели правильно, жмем «Ввод»

Поздравляю! Работа выполнена, светодиод должен вам радостно мигать 🙂
Заключение.
В заключении хочу сказать о недостатке ардуиноподобного программатора, CvAvr его просто не поддерживает. Имея на руках, например, AVRISP mkII, выполнить прошивку фьюзов и загрузку программы можно непосредственно из CodeVisionAvr. Кстати, использовать графический интерфейс AvrDude доморощенный программатор то же отказался и работал только из командной строки.
С CodeVisionAvr я разобрался довольно быстро, в интернете полно текстовых и видео уроков. За пару недель освоил работу аппаратного ШИМ, прерываний, таймеров, работу с кнопками и подключение графического дисплея. Конкретно мне надо было сделать часть своего проекта: на Atmega8 организовать аппаратный 16-битный ШИМ, подключить 2 кнопки для его управления, а также выводить режимы его работы на графический дисплей, что с легкостью я и сделал 🙂 Вот пара фото:



P.s. Много еще о чем хотел написать, но это уже получится не обзор, а огромная статья. Готов ответить на вопросы в рамках своей компетенции, в привате или комментариях. Очень много уроков по AVR можно подсмотреть тут.

upd 25.01.2016 Хочу привести ссылку на Geektimes, где рассматривается работа Arduino против прямого программирования «голого мк».

Atmega8 16pu используется где

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

ATMEGA8A-PU однозначно заменяет следующие микроконтроллеры. Для программатора новый микроконтроллер идентичен старым (имеет ту же сигнатуру и набор "фьюзов"). Ознакомьтесь с документацией производителя о переходе (migration) на новые изделия (на английском языке).

Микросхемы с индексом -PU выполнены по бессвинцовой технологии (Pb free) и пришли на смену аналогичным микросхемам -PI. PC — устаревшие приборы для бытового диапазона температур (0..+70°C).

Похожие публикации