Часы на pic16f876a своими руками

Добавил пользователь Владимир З.
Обновлено: 19.09.2024

Ну вот наконец-то я разродился, собрал часы своей мечты.
Часы получились очень хорошие, показывают одновременно время дату и день недели в формате 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

Простой частотомер до 40 МГц на микроконтроллере ATmega16

07.11.2011 1 комментарий

В статье мы рассмотрим, как построить маленький, дешевый и простой частотомер, способный измерять частоту до 40 МГц с ошибкой ниже 1%. Подобной точности вполне достаточно для отладки большинства собственных аналоговых и цифровых устройств. Прибор позволит Вам проанализировать многие аспекты работы схем. Принципиальная схема частотомера изображена на рисунке 1. Рис.1. Принципиальная схема прибора Частотомер собран на […]

Паяльная станция термофен и паяльник

Паяльная станция термофен и паяльник

07.11.2011 1 комментарий

Импульсный блок питания усилителя на IR2151-IR2153

Импульсный блок питания усилителя на IR2151-IR2153

06.11.2011 3 комментария

Измеритель параметров полупроводниковых приборов на PIC16F876

Измеритель параметров полупроводниковых приборов на PIC16F876

06.11.2011 0 комментариев

Матричные часы-будильник-термометр

06.11.2011 4 комментария

Устройство защиты от критических изменений сети 220 Вольт

Устройство защиты от критических изменений сети 220 Вольт

03.11.2011 0 комментариев

(Автор не несет ответственности за ущерб, который может быть нанесен в результате изготовления и использования нижеуказанного устройства) Предлагаемое микроконтроллерное устройство предназначенодля защиты электрооборудования и аппаратуры, подключенных к сети220 В. При возникновении аварийной ситуации, когда напряжение сетивыйдет за допустимые пределы, устройство защиты отключает нагрузку.Одновременно устройство отображает значение напряжения сетина светодиодном 7″сегментном 3″разрядном индикаторе.Устройствопозволяет устанавливать min и […]

Велоспидометр на микроконтроллере ATtiny2313

Велоспидометр на микроконтроллере ATtiny2313

03.11.2011 0 комментариев

Велокомпьютер представляет собой устройство,устанавливаемое на велосипед для измерения скорости, пройденного пути,и управления яркостью фары. Схема состоит из распространённогомикроконтроллера ATtiny2313, стандарного индикатора и несколькихдискретных элементов. Основные параметры устройства: Напряжение питания: 4,5…5,5 В Потребляемый ток: меньше 10 мА (без подсветки индикатора) Измеряемые параметры: Скорость. Полный путь. Промежуточный путь. Диапазон измеряемых скоростей: 3 км/ч…60 км/чТочность измерения скорости: […]

USB звуковая карта

USB звуковая карта

03.11.2011 0 комментариев

Программируемый таймер на PIC16F628A

Программируемый таймер на PIC16F628A

03.11.2011 1 комментарий

WWVB часы на основе PIC

Особенности 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 мА, а не внутренний источник в корпусе часов.

WWVB часы на основе PIC

WWVB часы на основе PIC

Описание программы

Десятичная точка на индикаторе секунд загорается, при обнаружении сигнала синхронизации и гаснет при потере сигнала. Для детектирования бит нулей и единиц требуется не менее 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

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 интерфейсом на 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) на PIC12F629

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

Гоночное использование Shift Light — это переключение на оборотах на которых мотор отдает пиковую мощность. Некоторые моторы имеют нелинейную характеристику и быстрее получается переключиться вверх чем продолжать набирать обороты.

Вторая область применения — начинающие водители не могут определить обороты на слух, а взгляд на приборную панель, отвлекает их внимание. Яркая вспышка Shift Light дает возможность отслеживать момент переключения периферическим зрением, что позволяет не фокусировать внимание на панели управления.

Всепротокольный OBD-II AllPro адаптер

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