Часы на pic16f876a своими руками
Ну вот наконец-то я разродился, собрал часы своей мечты.
Часы получились очень хорошие, показывают одновременно время дату и день недели в формате 1-7, месяц, надеюсь, все помнят, но можно и его приклеить.
Схема часов
Все описание и программа в архиве, здесь много описывать не буду.
Ссылка на архив
0 Спам
0 Спам
0 Спам
0 Спам
Вот решил написать маленький отчет по часам, прошло ровно пол года с последней коррекции, корректировал 12 января, за пол года часы отстали на 3 секунды, показатель на мой взгляд отличный, я собрал уже трое таких часов, и у всех коррекция разная на первых 4018 на вторых 4021 на третьих 4016, вот такой разброс у кварцев, хотя кварцы и кондеры с одной посылки, утверждать что с одной партии не буду.
Вообщем часами доволен не только я, в доме хоть одни нормальные часы появились, похрену отключение света, идут точно, рекомендую попробовать, не пожалеете. Просьба если кто повторил, напишите отзыв, интересно узнать от людей впечатления, все-же это моя первая разработка на PIC.
Желаю всем удачи.
0 Спам
Подскажите на плате два полярных конденсатора а на схемеодин и еще на плате R или С рядом с пол.конденс.на схеме его нет
0 Спам
Ура сделал часы, работают. xaker-sss огромное спасибо за помощь . Я рад что естьтакие люди как ты. Вы радуете и приносите
хорошее настроение, удачи.
0 Спам
Поздравляю, но неделя мучений это долго, просто надо делать аккуратно, и все сразу получится. Да мы настраивали часы по мылу, так мне было удобно. Еще раз поздравляю.
0 Спам
0 Спам
0 Спам
0 Спам
0 Спам
Уважаемый автор! Я понимаю, что прошло много времени, но хочу спросить:
Как бы сделать так, чтобы день недели отображался не порядковым номером, а выводился на 14- или 16-ти сегментный индикатор в формате ПН, ВТ, СР, ЧТ, ПТ, СБ, ВС.
Вы не пробовали ? Было бы здорово! Часы эти с собрал, работают замечательно.
07.11.2011 0 комментариев
В статье представлена схема USB термометра c выводом показания температуры на монитор компьютера. В качестве датчика использован NPN транзистор КТ315В, изменение напряжения на нем составляет примерно 2,3 мВ на каждые 10°C. Микроконтроллер PIC18F2550 имеет 10-битный аналоговый-цифровой преобразователь. Схема питается от USB. Интерфейс для персонального компьютера — HID класса. Калибровка термометра: калибровка датчиков схемы производится в […]
Простой частотомер до 40 МГц на микроконтроллере ATmega16
07.11.2011 1 комментарий
В статье мы рассмотрим, как построить маленький, дешевый и простой частотомер, способный измерять частоту до 40 МГц с ошибкой ниже 1%. Подобной точности вполне достаточно для отладки большинства собственных аналоговых и цифровых устройств. Прибор позволит Вам проанализировать многие аспекты работы схем. Принципиальная схема частотомера изображена на рисунке 1. Рис.1. Принципиальная схема прибора Частотомер собран на […]
Паяльная станция термофен и паяльник
07.11.2011 1 комментарий
Импульсный блок питания усилителя на IR2151-IR2153
06.11.2011 3 комментария
Измеритель параметров полупроводниковых приборов на PIC16F876
06.11.2011 0 комментариев
Матричные часы-будильник-термометр
06.11.2011 4 комментария
Устройство защиты от критических изменений сети 220 Вольт
03.11.2011 0 комментариев
(Автор не несет ответственности за ущерб, который может быть нанесен в результате изготовления и использования нижеуказанного устройства) Предлагаемое микроконтроллерное устройство предназначенодля защиты электрооборудования и аппаратуры, подключенных к сети220 В. При возникновении аварийной ситуации, когда напряжение сетивыйдет за допустимые пределы, устройство защиты отключает нагрузку.Одновременно устройство отображает значение напряжения сетина светодиодном 7″сегментном 3″разрядном индикаторе.Устройствопозволяет устанавливать min и […]
Велоспидометр на микроконтроллере ATtiny2313
03.11.2011 0 комментариев
Велокомпьютер представляет собой устройство,устанавливаемое на велосипед для измерения скорости, пройденного пути,и управления яркостью фары. Схема состоит из распространённогомикроконтроллера ATtiny2313, стандарного индикатора и несколькихдискретных элементов. Основные параметры устройства: Напряжение питания: 4,5…5,5 В Потребляемый ток: меньше 10 мА (без подсветки индикатора) Измеряемые параметры: Скорость. Полный путь. Промежуточный путь. Диапазон измеряемых скоростей: 3 км/ч…60 км/чТочность измерения скорости: […]
USB звуковая карта
03.11.2011 0 комментариев
Программируемый таймер на PIC16F628A
03.11.2011 1 комментарий
Особенности WWVB часов
- Прием данных WWVB из эфира.
- Автоматическая синхронизация внутреннего времени с временем WWVB.
- Поддержка локального времени в отсутствие сигнала WWVB.
- Данная версия для запрограммирована стандартного тихоокеанского времени. Предусмотрена автоматическая корректировка для летнего времени.
- 6-ти разрядный дисплей для часов, минут и секунд, состоящий из семисегментных светодиодных индикаторов.
- Индикатор синхронизации с WWVB.
- Отображение времени в 12 часовом формате.
- Микроконтроллер PIC16F628.
- ПО написанное на С.
- Все утилиты (редактор схем, компилятор С, ПО для разработки печатной платы, PIC программатор распространяются свободно и доступны для загрузки в сети.
Описание схемы
Как показано на схеме, сердцем этих часов является микроконтроллер PIC16F628, работающий на частоте 4 МГц. Декодированные данные времени последовательно выводятся из портов микроконтроллера (RA0 - RA3) на семисегментные драйверы/дешифраторы по четырехбитной шине данных. Данные выводятся последовательно как секунды, десятки секунд, минуты, десятки минут, часы и десятки часов. Выходы микроконтроллера (RB1, RB2, RB3) коммутируют 10 мкс строб импульс из порта RB4 поочередно на каждый семисегментный драйвер/дешифратор, чтобы записать информацию с шины данных. Отображаемые значения секунд и десятков секунд обновляются раз в секунду. Минуты, десятки минут, часы и десятки часов обновляются раз в минуту. Дисплей состоит из одиночных красно-оранжевых светодиодных семи сегментных индикаторов. Десятичные точки на индикаторах используются для формирования двоеточий чтобы разделить секунды минуты и часы. Индикаторы десятков секунд и десятков минут смонтированы вверх ногами, чтобы сформировать верхние точки двоеточия. WWVB приемник фирмы C-MAX модель CMMR-6 поставляется вместе с ферритовой антенной. Выходные данные приемника поступают в микроконтроллер через порт RB0.
Конструкция
Я собрал двое таких часов, одни используя проводные соединения и другие на печатных платах. Обе версии работают хорошо. Только держите приемник подальше от источников помех и по возможности укоротите провода, чтобы минимизировать индуктивность. Я заметил также, что приемник чувствителен к магнитным полям, производимым источниками питания. Поэтому я использовал сетевой адаптер на 9 В 200 мА, а не внутренний источник в корпусе часов.
Описание программы
Десятичная точка на индикаторе секунд загорается, при обнаружении сигнала синхронизации и гаснет при потере сигнала. Для детектирования бит нулей и единиц требуется не менее 28 выборок входного сигнала при 32 выборках хранимого идеального сигнала. Если любой из детектируемых бит не обнаружен, или не прошел порог корреляции, целый кадр игнорируется и запускается новый поиск бит синхронизации кадра. Когда биты синхронизации и все данные времени в кадре успешно определены, данные корректируются для Стандартного Тихоокеанского времени и летнего времени. Для правильной коррекции в других временных зонах программа должна быть изменена. Время так же корректируется с учетом задержки возникающей при приеме WWVB сигнала, поскольку передаваемые данные времени соответствуют моменту начала кадра. Полностью откорректированное время преобразуется в 12 часовой формат, затем им обновляется внутреннее время. В отсутствии WWVB сигнала внутреннее время отсчитывается микроконтроллером, с точностью, определяемой его кварцевым резонатором. Так продолжается до тех пор, пока не будет принят следующий кадр данных WWVB. Программа для PIC16F628 написана с использованием WIN PIC.
Продолжаем работу над программированием микроконтроллеров PIC.
И прежде чем продолжить заниматься остальными таймерами, давайте немного отдохнём и сделаем какой-нибудь проект, который позволит нам управлять отображением информации на светодиодном семисегментном индикаторе.
Начнём с того, что посмотрим назначение ножек контроллера PIC17F876A
Назначение ножек практически такое же, как и у рассмотренного нами в ранних уроках контроллера 64A, но только этих ножек уже больше и есть уже несколько новых обозначений, касающихся периферии, которая отсутствует у предыдущего контроллера. С назначением данных ножек мы будем знакомиться в процессе изучения данных видов периферии. И, так как программирование статической индикации — это ничто иное, как управление светодиодами сегментов с помощью ножек портов, а этим мы уже занимались на предыдущих занятиях, то теория нам в принципе по программированию для этого никакая больше не нужна.
Давайте тогда познакомимся с самим индикатором и принципом его работы. Хотя я это уже писал в уроках по программированию других контроллеров, которые вы, я надеюсь, тоже смотрите, тем не менее все равно проведу некоторый обзор.
Семисегментный индикатор представляет собой совокупность планарных светодиодов, определённым образом расположенных в корпусе с целью отображения в основном цифр, но также можно отображать некоторые другие символы. Каждый светодиод является сегментом индикатора и обозначать его принято особой буквой
Один контакт каждого светодиода сегмента выведены на определённую ножку, а вторые контакты соединены и выведены на одну общую ножку, приблизительно так же, как и на нашей схеме бегущих огней. Только существуют две разновидности. Первая — когда объединены аноды, а катоды выведены отдельно. Такой индикатор называется светодиодный семисегментный индикатор с общим анодом, а если наоборот — то с общим катодом.
У нас будет индикатор с общим анодом, поэтому данный общий анод мы подсоединим к проводу питания, а катодами мы уже будем управлять с помощью ножек портов, к которым мы их и подсоединим, конечно не в коем случае не забывая о токоограничивающих резисторах. Вы должны знать характеристики конкретного индикатора и подобрать для него резисторы нужного номинала, чтобы ток не превышал максимальный, а также чтобы не превысить максимальный ток, протекающий через ножку порта. Я, например, установил такие же резисторы, как и на бегущие огни — по 220 ом.
Для того, чтобы было легче данными сегментами управлять и выводить с помощью их свечения определённые цифры или символы, то мы соединим их по порядку с ножками одного порта — a с ножкой RB0, b — с RB1 и так далее по порядку и будем в уме постоянно себе представлять вот такое вот двоичное число
Давайте создадим новый проект в среде программирования MPLAB X с именем LED_STAT. Проект мы создавать умеем. Только надо будет выбрать другой контроллер
Как обычно, создадим в проекте файл main.c со следующим стандартным содержимым
main.c:
void main( void )
while ( 1 )
return ;
Конфигурационные биты сконфигурируем следующим образом (назначение каждого бита разъяснено в комментариях)
// CONFIG
Добавим переменную для счётчика, а также инициализируем ножки порта
unsigned char i;
TRISB = 0x00 ;
PORTB = 0xFF ;
Мы настроили ножки на выход и на всех ножках порта установили высокий уровень, так как индикатор у нас с общим анодом, и чтобы сегмент не светился, необходимо подавать на него высокий уровень, тогда разность потенциалов между анодом и катодом будет ноль, так как анод у нас также подключен к высокому уровню (шине питания), и сегмент светиться не будет.
Выше функции main() добавим функцию отображения определённой цифры на индикаторе
void segchar ( unsigned int seg)
switch (seg)
case 1 :
PORTB = 0 b11111001;
break ;
case 2 :
PORTB = 0 b10100100;
break ;
case 3 :
PORTB = 0 b10110000;
break ;
case 4 :
PORTB = 0 b10011001;
break ;
case 5 :
PORTB = 0 b10010010;
break ;
case 6 :
PORTB = 0 b10000010;
break ;
case 7 :
PORTB = 0 b11111000;
break ;
case 8 :
PORTB = 0 b10000000;
break ;
case 9 :
PORTB = 0 b10010000;
break ;
case 0 :
PORTB = 0 b11000000;
break ;
В зависимости от пришедшего в функцию целого положительного однозначного числа мы попадаем в соответствующий ему кейс и включаем необходимые уровни на ножке порта B, соответственно единичку отправляем на ножку, которая управляет сегментом, который не должен светиться, и наоборот — ноль — на ножку, управляющую сегментом, который будет светиться.
Осталось нам лишь только написать код отправки цифр по порядку с некоторой задержкой в данную функцию в бесконечном цикле. Для этого мы воспользуемся циклом for, который нам и поможет считать от 0 до 9
for (i= 0 ;i 10 ;i++)
segchar(i);
__delay_ms( 500 );
Вот, собственно, и весь код. Мы будем инкрементировать счётчик раз в полсекунды, а как только он дойдёт до 9, то процесс опять повторится с нуля.
Соберём наш код. Соберем следующую схему в протеусе
Зайдём в свойства контроллера, выберем там прошивку, а также настроим частоту и конфигурационные биты
Сохраним настройки и запустим программу на выполнение
Счётчик наш прекрасно считает, значит мы всё сделали правильно.
Ну и теперь перейдём к настоящей практической схеме (нажмите на картинку для увеличения изображения)
Схема собрана также на макетной плате, также подключен кварцевый резонатор к соответствующим ножкам с конденсаторами и также подключен подтягивающий резистор на ножку MCLR. И также проведены провода для подключения программатора.
Мы видим также установленный на схеме индикатор, подключенный к контроллеру посредством токоограничивающих резисторов. У каждого отдельно-взятого индикатора схема распиновки своя. У моего она вот такая:
Запустим программу PICkit 2, у нас обнаружится наш контроллер. Включим питание аналогично как мы и делали в ранних занятиях, импортируем файл прошивки и прошьём наш контроллер. В результате мы получим счётчик от 0 до 9
Таким образом, мы сегодня создали цифровой счётчик на семисегментном светодиодном индикаторе, применив статическую индикацию, а также познакомились с контроллером PIC16F876A, на котором мы и применили данный способ статической индикации.
Спасибо за внимание!
Купить программатор (неоригинальный) можно здесь: PICKit3
Купить программатор (оригинальный) можно здесь: PICKit3 original
Отладочную плату PIC Open18F4520-16F877A можно прибрести здесь: PIC Open18F4520-16F877A
Часы построены на микроконтроллере PIC16F628A, в качестве датчика используется DS18B20, транзисторы BC212 управляют общими анодами семисегментного индикатора, также в состав схемы входят несколько пассивных элементов.
Устройство настраивается с помощью 4-х кнопок. Одна увеличивает, другая уменьшает значение, третья кнопка используется для входа в меню, а также переключает элементы меню. При выходе из меню настройки сохраняются в EEPROM контроллера. Если часы зависают по какой-то причине кнопкой сброса они могут быть перезапущены. Часы будут продолжать работать с последними сохраненными значениями. Микроконтроллер тактируется от внешнего кварца частотой 4МГц для более точного отсчета времени. PIC16F628 управляет дисплеем в режиме мультиплексирования. Индикаторы находятся под контролем одного типа транзистора - BC212.
Вольтметр сетевого напряжения на PIC16F72
Простой вольтметр построенный на базе микроконтроллера PIC16F72 позволяет измерять переменное напряжение величиной до 255 Вольт. Контроллер тактируется от внешнего кварца частотой 4 МГц. При загрузке прошивки в микроконтроллер не требуется изменять конфигурационные ячейки. Индикатор используется однострочный на 16 знакомест, совместимый с контроллером HD44780. Также возможно использование других индикаторов, которые могут отличаться количеством строк и знакомест.
0-9999 секундный таймер на PIC12F683
Таймер предназначен для отработки выдержки времени от 0 до 9999 секунд, с точностью 1 секунда. Во время отсчета показания индикатора уменьшаются и в любой момент можно посмотреть сколько еще секунд осталось до окончания заданного интервала.
RGB индикатор уровня на PIC18F2550
Это проект полноцветного светодиодного индикатора уровня, который управляется по USB с компьютера на Windows 7 или Vista. Проект преследует несколько целей:
Во-первых, он показывает, как читать аудиоинформацию от машины на Windows и передавать эти данные через USB к устройству.
Во-вторых, он реализует обмен данными с драйвером TLC5940, открыт исходный код. Хотя библиотека была доступна для микроконтроллеров AVR, я не смог найти открытую библиотеку для PIC. Надеемся, что это демонстрация будет полезна любому желающему контролировать большое количество светодиодов с регулировкой яркости с помощью ШИМ.
Часы-таймер на PIC16F628
Проект представляет собой часы с таймером, который может быть запрограммирован на включение и на выключение. Я начал его делать так как мне было лень включать и выключать каждый день аквариум. Не стал использовать уже готовые вещи по нескольким причинам - в том числе и потому что планирую добавить автоматическую систему для кормежки рыб.
Схема часов довольно проста, если не сказать очень проста. Главная часть, безусловно - программа на ассемблере. Для программирования я использовал Microchip's MPASMP, а для рисования схемы - Eagle.
Электронный замок с ключём i-Button (DS1990A) на PIC16F627A
Здесь представлена схема электронного замка, в котором в качестве ключа используется устройство DS1990A(Touch Memory). Touch Memory типа DS1990A представляет собой пассивное устройство (без внутреннего источника питания), которое имеет записанное с помощью лазера ПЗУ(ROM), содержащее уникальный серийный номер. Для считывания данных с DS1990A используется 1-проводная шина фирмы DALLAS. DS1990A является подчинённым устройством, а мастером является обычно микропроцессор(микроконтроллер). Питание DS1990A во время обмена данными производится от 1-проводной шины. Эквивалентная схема интерфейсной части DS1990A показана на рисунке:
RGB контроллер с USB интерфейсом на PIC18F2550
Этот проект представляет собой RGB контроллер, который может быть настроен через соединение USB. Цвет подключенных светодиодов (общий анод) зависит от выбранного режима работы:
- Медленное изменение цвета (около 40 минут);
- Быстрое изменение цвета (около 2 минут);
- Изменение цвета по температуре (диапазоны температуры регулируются);
- Постоянный цвет 1;
- Постоянный цвет 2;
- Постоянный цвет 3;
- Постоянный цвет 4.
Термометр на PIC12F683 и графическом дисплее NOKIA 3310
Термометр состоит из минимума деталей: микроконтроллера PIC12F683, цифрового датчика DS1820 и подтягивающего резистора, графического дисплея от сотового телефона NOKIA 3310 и электролитического конденсатора, литиевого аккумулятора CR2032.
В верхней части дисплея отображается текущая температура в цифровом виде, в левой части отображается температура в виде ртутного термометра, пределы измерения температуры от -40 до +40 °С. В центре экрана выводится график изменения температуры за определенный интервал времени. Регистрацию температуры можно установить от 1 сек до 65535 сек, при этом на экране помещается 57 значений. Каждый пиксель в вертикальном масштабе представляет собой значение в 2 °С, при этом следующий пиксель выше 0 °С будет показывать температуру от 2 до 4 °С.
Индикатор отсечки оборотов двигателя автомобиля(Shift Light) на PIC12F629
Shift Light это программируемый индикатор оборотов, работающий следующим образом: при достижении заданных оборотов включается индикация, как правило — световая. При переключении передачи вверх — индикация гаснет, пока мотор снова не наберет заданных оборотов. Shift Light всегда работает вверх — т.е. показывает обороты, на которых нужно переключиться вверх.
Гоночное использование Shift Light — это переключение на оборотах на которых мотор отдает пиковую мощность. Некоторые моторы имеют нелинейную характеристику и быстрее получается переключиться вверх чем продолжать набирать обороты.
Вторая область применения — начинающие водители не могут определить обороты на слух, а взгляд на приборную панель, отвлекает их внимание. Яркая вспышка Shift Light дает возможность отслеживать момент переключения периферическим зрением, что позволяет не фокусировать внимание на панели управления.
Всепротокольный OBD-II AllPro адаптер
Читайте также: