Схемы на atmega48 своими руками

Обновлено: 06.07.2024

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

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

1. Программатор

На рынке предлагается много вариантов — от самых дешевых ISP (In-System Programming) программаторов за несколько долларов, до мощных программаторов-отладчиков за пару сотен. Не имея большого опыта в этом деле, для начала я решил попробовать один из самых простых и дешевых — USBasp. Купил в свое время на eBay за $12, сейчас можно найти даже за $3-4. На самом деле это китайская версия программатора от Thomas Fischl. Что могу сказать про него? Только одно — он работает. К тому же поддерживает достаточно много AVR контроллеров серий ATmega и ATtiny. Под Linux не требует драйвера.


Для прошивки надо соединить выходы программатора VCC, GND, RESET, SCK, MOSI, MISO с соответствующими выходами микроконтроллера. Для простоты я собрал вспомогательную схему прямо на макетной плате:

image

Слева на плате — тот самый микроконтроллер, который мы собираемся прошивать.

2. Микроконтроллер

image

После этого, естественно, необходим перезапуск сервиса

Компилировать и прошивать без проблем можно прямо из командной строки (кто бы сомневался), но если проектов много, то удобнее поставить плагин AVR Eclipse и делать все прямо из среды Eclipse.

Под Windows придется поставить драйвер. В остальном проблем нет. Ради научного интереса попробовал связку AVR Studio + eXtreme Burner в Windows. Опять-таки, все работает на ура.

Начинаем программировать

Программировать AVR контроллеры можно как на ассемблере (AVR assembler), так и на Си. Тут, думаю, каждый должен сделать свой выбор сам в зависимости от конкретной задачи и своих предпочтений. Лично я в первую очередь начал ковырять ассемблер. При программировании на ассемблере архитектура устройства становится понятнее и появляется ощущение, что копаешься непосредственно во внутренностях контроллера. К тому же полагаю, что в особенно критических по размеру и производительности программах знание ассемблера может очень пригодиться. После ознакомления с AVR ассемблером я переполз на Си.

После знакомства с архитектурой и основными принципами, решил собрать что-то полезное и интересное. Тут мне помогла дочурка, она занимается шахматами и в один прекрасный вечер заявила, что хочет иметь часы-таймер для партий на время. БАЦ! Вот она — идея первого проекта! Можно было конечно заказать их на том же eBay, но захотелось сделать свои собственные часы, с блэк… эээ… с индикаторами и кнопочками. Сказано — сделано!

В качестве дисплея решено было использовать два 7-сегментных диодных индикатора. Для управления достаточно было 5 кнопок — “Игрок 1” , “Игрок 2” , “Сброс” , “Настройка” и “Пауза” . Ну и не забываем про звуковую индикацию окончания игры. Вроде все. На рисунке ниже представлена общая схема подключения микроконтроллера к индикаторам и кнопкам. Она понадобится нам при разборе исходного кода программы:


Разбор полета

Начнем, как и положено, с точки входа программы — функции main . На самом деле ничего примечательного в ней нет — настройка портов, инициализация данных и бесконечный цикл обработки нажатий кнопок. Ну и вызов sei() — разрешение обработки прерываний, о них немного позже.


Рассмотрим каждую функцию в отдельности.

Настройка портов ввода/вывода происходит очень просто — в регистр DDRx (где x — буква, обозначающая порт) записивается число, каждый бит которого означает, будет ли соответствующий пин устройством ввода (соответствует 0) либо вывода (соответствует 1). Таким образом, заслав в DDRB и DDRD число 0xFF, мы сделали B и D портами вывода. Соответственно, команда DDRC = 0b11100000; превращает первые 5 пинов порта C во входные пины, а оставшиеся — в выходные. Команда PORTC |= 0b00011111; включает внутренние подтягивающие резисторы на 5 входах контроллера. Согласно схеме, к этим входам подключены кнопки, которые при нажатии замкнут их на землю. Таким образом контроллер понимает, что кнопка нажата.

Далее следует настройка двух таймеров, Timer0 и Timer1. Первый мы используем для обновления индикаторов, а второй — для обратного отсчета времени, предварительно настроив его на срабатывание каждую секунду. Подробное описание всех констант и метода настройки таймера на определенноый интервал можно найти в документации к ATmega8.

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

При срабатывании таймера управление передается соответствующему обработчику прерывания. В нашем случае это обработчик TIMER0_OVF_vect, который вызывает процедуру вывода времени на индикаторы, и TIMER1_COMPA_vect, который обрабатывает обратный отсчет.

Вывод на индикаторы

Функция display использует метод динамической индикации. Дело в том, что каждый отдельно взятый индикатор имеет 9 контактов (7 для управления сегментами, 1 для точки и 1 для питания). Для управления 4 цифрами понадобилось бы 36 контактов. Слишком расточительно. Поэтому вывод разрядов на индикатор с несколькими цифрами организован по следующему принципу:

Напряжение поочередно подается на каждый из общих контактов, что позволяет высветить на соответствующем индикаторе нужную цифру при помощи одних и тех же 8 управляющих контактов. При достаточно высокой частоте вывода это выглядит для глаза как статическая картинка. Именно поэтому все 8 питающих контактов обоих индикаторов на схеме подключены к 8 выходам порта D, а 16 управляющих сегментами контактов соединены попарно и подключены к 8 выходам порта B. Таким образом, функция display с задержкой в 0.25 мс попеременно выводит нужную цифру на каждый из индикаторов. Под конец отключаются все выходы, подающие напряжение на индикаторы (команда PORTD = 0; ). Если этого не сделать, то последняя выводимая цифра будет продолжать гореть до следующего вызова функции display, что приведет к ее более яркому свечению по сравнению с остальными.

Обработка нажатий

Эта функция по очереди опрашивает все 5 кнопок и обрабатывает нажатие, если таковое случилось. Нажатие регистрируется проверкой bit_is_clear(BUTTON_PIN, bit) , т.е. кнопка нажата в том случае, если соответствующий ей вход соединен с землей, что и произойдет, согласно схеме, при нажатии кнопки. Задержка длительностью DEBOUNCE_TIME и повторная проверка нужна во избежание множественных лишних срабатываний из-за дребезга контактов. Сохранение статуса нажатия в соответствующих битах переменной _pressed используется для исключения повторного срабатывания при длительном нажатии на кнопку.
Функции обработки нажатий достаточно тривиальны и полагаю, что в дополнительных комментариях не нуждаются.

Прототип был собран на макетной плате:


После тестирования прототипа пришло время все это добро разместить в корпусе, обеспечить питание и т.д.


Ниже показан окончательный вид устройства. Часы питаются от 9-вольтовой батарейки типа “Крона”. Потребление тока — 55 мА.


Заключение

Потратив $20-25 на оборудование и пару вечеров на начальное ознакомление с архитектурой микроконтроллера и основными принципами работы, можно начать делать интересные DIY проекты. Статья посвящается тем, кто, как и я в свое время, думает, что начать программировать микроконтроллеры — это сложно, долго или дорого. Поверьте, начать намного проще, чем может показаться. Если есть интерес и желание — пробуйте, не пожалете!


--> -->

--> Ваш браузер
chrome 23.0.1271.26




Ниже представлена схема простого термометра на PIC'е. Описание не требуется, и так все понятно. В архиве находится файл для Proteus'а и программа в HEX. Поэтому Вы сами сможете промоделировать схему и посмотреть как она работает.


В последнее время конструирование цифровых термометров очень популярно. Применение микроконтроллеров (МК) и современных датчиков температуры позволяет упростить подобные устройства до предела. Однако цифровые термометры с питанием от сети — явно не лучший вариант для портативного прибора, которым пользуются всего несколько раз в сутки.
Для отображения показаний радиолюбители применяют в термометрах либо светодиодные индикаторы, потребляющие довольно большой ток и, следовательно, неоптимальные при батарейном питании, либо дорогостоящие ЖКИ со встроенным контроллером. Между тем существуют дешевые ЖКИ без контроллера, например ИЖЦ5-4/8


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


Мне иногда приходится заниматься ремонтом телефонных аппаратов. И я здорово надоел жене с просьбой перезвонить домой, чтобы проверить аппарат. Так родилась эта простенькая схемка и программка к ней. Написал для тех процессоров, что были под рукой - PIC16F84 и PIC16F628.
Это приставка на PIC для проверки телефонных аппаратов. Просто выдает сигнал вызова одну секунду и четыре секунды паузы. И так по кругу и беспрерывно.




Этой зимой нам пришлось надолго уехать из дому. Но как быть? Ведь могут же и обворовать. Квартира месяц без хозяев стоит! Именно в целях сохранности этой самой квартиры и её содержимого я собрал данное устройство.
Это устройство представляет собой хитрый таймер, который управляет четырьмя нагрузками. Хитрость этого таймера заключается в том, что каждый день он сам решает в какое время зажжется свет и в когда потухнет (псевдослучайные числа). Происходит это в 3 часа ночи. А промежутки, в которые свет может включиться и выключится, установлены таким образом, чтобы имитировать присутствие людей в квартире. (Включение с 17:00 до 19:00, выключение с 23:00 до 1:00, эти промежутки адаптированы "под зиму", и легко меняются, так как они записаны в EEPROM). Также, устройство управляет освещением двух аквариумов, которое включает и выключает в фиксированное в памяти время.


Тестер емкости аккумулятора на Atmega8. Схема и описание

Это тестер емкости аккумулятора позволяет измерять емкость аккумулятора или аккумуляторной батареи (измерение в мА/ч или … читать далее

Калибратор OSC генератора и устройство восстановления фьюзов AVR микроконтроллеров


Тахометр — простой измеритель оборотов на базе микроконтроллера ATtiny13A


Данный тахометр позволяет измерять количество оборотов двигателя в минуту. Измерение основано на подсчете отраженного света … читать далее

Маломощные ЖК-часы на микроконтроллере AVR128DA48. Схема и описание

Это достаточно маломощные ЖК-часы построены на микроконтроллере AVR128DA48. Часы способные работать более трех лет от … читать далее

ШИМ-контроллер для RGB светодиодов с использованием PIC PIC12F629


Данный ШИМ-контроллер RGB светодиодов позволяет использовать 5 мм RGB светодиоды или квадратные светодиоды типа Superflux … читать далее

Дистанционный регулятор освещенности на микроконтроллере PIC12F629 / PIC12F675. Схема диммера


Особенность данного диммера в том, что его питание осуществляется от сети через нагрузку (обычно это … читать далее

bigtimefront

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

Термометр на Attiny85 и термопаре

thermocouplewater

Наноамперметр на Attiny84

nanocurrentmeter

В этой статье описывается простой измеритель слабых токов, который можно использовать для замера потребления в спящем режиме различных цифровых схем, в том числе и на микроконтроллерах. Он позволяет измерять токи от 30нА до 10 мкA с достаточной точностью, и собран на микроконтроллере ATtiny84 и нескольких других недорогих деталях.

Простой USB-осциллограф на Tiny45

Ниже представлен проект USB-осциллографа, который вы сможете собрать своими руками. Возможности USB-осциллографа минимальны, но для многих радиолюбительских задач вполне сойдет. Также, схема данного USB-осциллографа может использоваться как основа для построения более серьезных схем. В основе схемы стоит микроконтроллер Atmel Tiny45.

Анализатор спектра на Atmega32

Spectrum analizer mega32 photo

В статье описан небольшой анализатор аудиоспектра (0 - 10 кГц), состоящий из ЖК-дисплея 16x2 и микроконтроллера ATmega32. Используется простой алгоритм ДПФ (Дискретное Преобразование Фурье). БПФ (Быстрое Преобразование Фурье) отличается от ДПФ только большей скоростью но и более сложным алгоритмом.

Электронный замок с ключами iButton на AVR

domofon keys

Замок имеет простую конструкцию и предназначен в основном для индивидуального использования. Замок работает с любыми типами ключей iButton, поэтому можно применять уже имеющиеся ключи, предназначенные для других целей. Всего в память может быть записано до 9 ключей, хотя это количество можно легко увеличить. Для авторизации процесса программирования используется мастер-ключ, код которого занесен в ПЗУ и не может быть стерт или изменен обычной процедурой программирования замка.

Регуляторы мощности на AVR

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

ШИМ-регулятор на ATtiny2313

PWMon2313 photo1

В этой статье описан проект ШИМ-контроллера для регулировки скорости вращения вентилятора. Для данного устройства использовался микроконтроллер Atmel Attiny2313.

Емкостный тач-сенсор на AVR

touchsensor photo

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

Измеритель емкости на AVR

capmeter photo1

Этот измеритель емкости может измерять емкость конденсаторов с разрешением 1 пФ в нижнем конце диамазона. Максимальная измеряемая емкость - 10000 мкФ. Реальная точность не известна, но линейная ошибка лежит в пределах максимум 0.5 % , и обычно меньше 0.1% (получено измерением параллельно подключенных нескольких конденсаторов). Наибольшие затруднения возникают при измерении электролитических конденсаторов большой емкости.

Уроки для радиолюбителя radiostroi.ru

Полицейская крякалка своими руками


Предоставляю вам схему спец сигнала (Крякалка), для самостоятельной сборки. Решил поставить ребенку на велосипед (пусть прохожих под домом пугает), но так же можно и в автомобиль поставить (если есть связи в ГАИ). Данное устройство состоит из минимум деталей, а так же простая в сборке и под силу каждому.

Часы на лампах ИН своими руками

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

JDM программатор своими руками с внешним питанием


Пришло время еще раз затронуть тему изготовление программатора, так как цены на них не такие и маленькие,и при этом гарантии нет что он заработает. Рассмотрим схему программатора jdm с внешним питанием,с помощью которого програмируются микросхемы PIC и подключаемому к стационарному компьютеру через COM(rs232) порт.

Список прошиваемых PIC микроконтроллеров в статье.

Простое ИК управление своими руками

Простое ИК управление своими руками


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

Данное устройство предназначено для управления нагрузками на небольшой дистанции. За основу взят дешевый, миниатюрный ПДУ с eBay. К нему был изготовлен дешифратор на микроконтроллере PIC12F675. Режим работы - кнопка. Состояние на выходе дешифратора удерживается до тех пор, пока нажата кнопка на пульте.

Схема новогодней гирлянды на микроконтроллере своими руками

Гирлянда на микроконтроллере своими руками

гирлянда своими руками

С наступающим вас дорогие пользователи. И к предстоящему празднику решил порадовать вас схемой- новогодняя гирлянда на микроконтроллере pic.

И прошу к просмотру подробнее данной статьи.

Полицейская крякалка своими руками на PIC

Полицейская крякалка своими руками на PIC

схема крякалки сирены

Предлагаю вам для повторения схему звукового устройства, имитирующего сигнал "Милицейской Сирены". Устройство сделано на микроконтроллере PIC16F628. Схема имеет две различные сирены и "Крякалку".

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

Так же вам понадобиться программатор для PIC, вот схема

Схема простого измерителя емкости

Простой измеритель емкости и индуктивности

схема измерителя емкости

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

В статье предлагается проверенная схема своими руками измерителя емкости и индуктивности катушки.Если вы задавались вопросом как измерить емкость или индуктивность.То вам сюда.Схема собрана на микроконтроллере PIC 16F84A.

Дубликатор(копировальщик) ключей от домофона своими руками

Схема копирования ключей от домофона

схема копирования ключей ключ для всех домофонов

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

Копии домофонных ключей делаются с помощью компьютерной программы и адаптера, подключаемого к компьютеру.

Схема электронных часов на PIC микроконтроллере

Часы с будильником на PIC

схема электронных часов

Схема часов с будильником своими руками вы можете собрать такую как на фото слева.

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

Схема электронных часов

Схема электронных часов на pic16f628a

схема электронных часов

Предлогаю вашему вниманию схему электронных часов своими руками на микроконтроллере PIC 16F628A

Читайте также: