Часы на pic: Часы на PIC-микроконтроллере

Содержание

Очень простые часы на PIC-контроллере

РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Очень простые часы на PIC-контроллере

Бонжур!

Предлагаю Вашему вниманию схему очень простых часов на PIC -контроллере.

Напряжение питания: 5 V

Конфигурационное слово для контроллера находится внутри файла прошивки ledclock.hex.

Индикаторы можно использовать либо 4 штуки по 1 цифре, либо 2 штуки по 2 цифры.

(Я взял Kingbright DC 56-11 GWR , двухзнаковые семисегментные индикаторы с зеленым цветом свечения)

Тип индикатора общий катод или общий анод выбирается переключателем (перемычкой) S3: общий анод — вверх по схеме, общий катод — вниз по схеме. Выбирать надо ДО ВКЛЮЧЕНИЯ ПИТАНИЯ.

Важное примечание: Индикатор(ы) минут нужно устанавливать «вверх ногами», чтобы точки DP были вверху (как на схеме).

Режим вывода времени — 12-часовой.

Таблица используемых деталей:

Индекс

Номинал

   

Индикаторы

 

HL1,HL2

DC 56-11 GWR или другой сдвоенный индикатор

 

 

Кнопки

 

S1-S2

Микрокнопка 6х6

S3

Микропереключатель

   

Конденсаторы

 

С1, С2

30 пФ

   

Микросхема

 

DD1

PIC16F628

   

Резисторы

 

R1,R2

10 кОм

 
 

S1 = Установка часов
S2 = Установка минут
S3 = Выбор индикатора (ОК / ОЭ)

Надеюсь ничего не забыл…

Про копирайты 🙂

Схема не моя, прошивка не моя, мое оформление и описание на русском 🙂


Как вам эта статья?

Заработало ли это устройство у вас?


Эти статьи вам тоже могут пригодиться:

Программатор для PIC или про то как мне захотелось самодельных электронных часов

Старым стал наверное, стал испытывать проблемы, при попытке разглядеть, сколько там времени на дисплее ресивера за тюлевой занавеской.
Хотелось что либо сколхозить.
А так как на столе, уже около года, валялись пара сегментных дисплейчика, была выбрана схема на PIC (простейшая, с возможностью регулировки хода)
А для программирования PIC требовался как раз программатор
Чтоб узнать что из этого получилось, добро пожаловать под кат

В выбранной мной схеме часы собирались на основе PIC16F628A
В списке поддерживаемых программатором микроконтроллеров — был указан и мой
Это и повлияло на выбор

Список поддерживаемых микроконтроллеров

10 Серия:
PIC10F200 * PIC10F202 * PIC10F204 * PIC10F206 *
PIC10F220 * PIC10F222 *
12C серии:
PIC12C508 PIC12C508A PIC12C509 PIC12C509A
PIC12C671 PIC12C672 PIC12CE518 PIC12CE519
PIC12CE673 PIC12CE674
12F серии:
PIC12F509 PIC12F629 PIC12F635
PIC12F675 PIC12F683
16C серии:
PIC16C505 PIC16C554 PIC16C558 PIC16C61
PIC16C62 PIC16C62A PIC16C62B PIC16C63
PIC16C63A PIC 16C64 PIC16C64A PIC16C65
PIC16C65A PIC16C65B PIC16C66 PIC16C66A
PIC16C67 PIC16C620 PIC16C620A PIC16C621
PIC16C621A PIC16C622 PIC16C622A PIC16C71
PIC16C71A PIC16C72 PIC16C72A PIC16C73
PIC16C73A PIC16C73B PIC16C74 PIC16C74A
PIC16C74B PIC16C76 PIC16C77 PIC16C710
PIC16C711 PIC16C712 PIC16C716 PIC16C745
PIC16C765 PIC16C773 PIC16C774 PIC16C83
PIC16C84
16F серии:
PIC16F505 PIC16F506 PIC16F54 PIC16F57 *
PIC16F59 * PIC16F627 PIC16LF627A PIC16F627A
PIC16F628 PIC16LF628A PIC16F628A PIC16F630
PIC16F631 PIC16F631-1 PIC16F636 PIC16F636-1
PIC16F639 * PIC16F639-1 * PIC16F648A PIC16F676
PIC16F677 PIC16F677-1 PIC16F684 PIC16F685 *
PIC16F685-1 * PIC16F687 * PIC16F687 *-1 PIC16F688
PIC16F689 * PIC16F689-1 * PIC16F690 * PIC16F690-1 *

PIC16F72 PIC16F73 PIC16F74
PIC16F76 PIC16F77 PIC16F737 PIC16F747
PIC16F767 PIC16F777 PIC16F83 PIC16F84
PIC16F84A PIC16F87 PIC16F88 PIC16F818
PIC16F819 PIC16F870 PIC16F871 PIC16F872
PIC16F873 PIC16F873A PIC16LF873A PIC16F874

PIC16F874A PIC16F876 PIC16F876A PIC16F877
PIC16F877A
18 Серия:
PIC18F242 PIC18F248 PIC18F252 PIC18F258 PIC18F442 PIC18F448
PIC18F452 PIC18F458 PIC18F1220 PIC18F1320 PIC18F2220 PIC18F2320
PIC18F2321 PIC18F4210 PIC18F2331 PIC18F2450 PIC18F2455 PIC18F2480
PIC18F2510 PIC18F2515 PIC18F2520 PIC18F2550 PIC18F2580
PIC18F2585 PIC18F2610 PIC18F2620 PIC18F2680 PIC18F4220 PIC18F4320
PIC18F6525 PIC18F6621 PIC18F8525 PIC18F8621 PIC18F2331 PIC18F2431
PIC18F4331 PIC18F4431 PIC18F2455 PIC18F2550 PIC18F4455 PIC18F4580 PIC18F2580 PIC18F2420 PIC18F2520 PIC18F2620 PIC18F6520 PIC18F6620 PIC18F6720 PIC18F6585 PIC18F6680 PIC18F8585 PIC18F8680


Заказ был сделан 19.08.2016, а уже 15.09.2016 был у меня
Фотографии упаковки не сохранилось, но комплектация соответствовала фото продавца, всё упаковано в отдельные пакетики, пакетики в общем большем пакете, а тот в свою очередь в почтовый жёлтый пакет с пупыркой

Внешний вид платы программатора — спаяно аккуратно, но плата не отмыта от слова СОВСЕМ

Но, плата оказалась вполне рабочей
Для работы с ним потребуется программа и драйвера, скачать их можно например тут
Программа интуитивно понятная, выбираем микроконтроллер, указываем путь к файлу прошивки, прошиваем
Как установить микроконтроллер в разъёме программатора — программа подскажет
Мой необходимо было установить первой ногой во второй контакт
Обычно я жму считать чип, чтоб убедиться, что программа видит микроконтроллер, потом заливаю прошивку

В общем-то программатор вполне работоспособный и прошить мой PIC мне удалось
Фузы я не выставлял — заводские, по умолчанию, — вполне прокатили

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

Скорее всего рекомендую к покупке, чем нет

Теперь о том для чего я всё это затеял

Самодельные часы

Проект взят отсюда

Схема:

Там-же описание, прошивка, рисунок платы

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

И получились часики:




В качестве питания — зарядка от мобилки
Часы показывают попеременно время и температуру, уличный датчик — не задействовал
Так-же были изготовлены ещё одни маленькие под самодельный корпус:

плата

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

По этому захотелось чего ни будь большего
Так что ПРОДОЛЖЕНИЕ СЛЕДУЕТ…

Сделать gps-часы с микроконтроллером pic

Сделать GPS-часы с микроконтроллером PIC

Используйте микроконтроллер PIC для получения времени и даты от модуля GPS.

Требования

  • Компьютер с MPLAB X и компилятор XC8.
  • PICKIT 3.5 или аналогичный программист PIC.
  • Модуль GPS, который отправляет предложения NMEA.
  • Макет и перемычки, ЖК-дисплей и горшок 5K.
  • Детали из списка деталей.

Введение

В предыдущих статьях сделайте GPS-часы с Arduino и сделайте GPS-часы с PICAXE, я сделал GPS-часы с Arduino и PICAXE. В этой статье я использую PIC16F628A. Для краткого ознакомления с GPS и навигацией прочитайте статью в первой ссылке.

В этой статье я использую другой модуль GPS, чем в предыдущих статьях. Скорость передачи составляет 9600, поэтому я должен настроить порт uart, чтобы соответствовать этому. Чтобы узнать время, я собираюсь использовать предложение GPRMC. Это предложение выглядит так:

$ GPRMC, 161229.487, A, 3723.2475, N, 12158.3416, W, 0.13, 309.62, 120598,, * 10

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

аппаратные средства

На макете построена следующая схема. Обратите внимание на выходной блок дисплея дисплея. D6 и D7 подключены к контактам PIC 12 и 13. Это, как правило, PGC и PGD, программируемые контакты. Я не буду читать с ЖК-дисплея, поэтому я заземляю вывод RW. Я также основал D0-D3. Хорошей практикой является заземление неиспользуемых штырей, подобных этому, однако неиспользуемые контакты на ПОС, смонтированном на печатной плате, мне нравится наводить на площадку для легкого доступа, если я добавлю еще несколько функций в проект. Это не так, потому что схема макета.

Нажмите на изображение, чтобы открыть его в полном размере.

Список деталей

Ниже приведен отредактированный список из BOM ulp в EagleCAD.

Программного обеспечения

Программное обеспечение прокомментировано, но я пройду через него в целом.

Во-первых, это библиотеки включений, биты конфигурации, объявление переменных и прототипирование функций. Затем у меня есть функции для управления ЖК-дисплеем. Чтобы ЖК-дисплей работал правильно, вам нужно будет следовать определенному рецепту. После этого появляются функции uart и две функции для отображения сообщения, когда принятое время и дата недействительны.

Основная программа начинается с некоторых инструкций: выключение компараторов, настройка правильных направлений на порты и установка всех портов s на низкий. Затем он инициализирует порт LCD и порт uart. В основном цикле while каждый байт, полученный на RX, помещается в переменную. Переменная сравнивается, чтобы увидеть, является ли это знаком доллара, $. Если это знак доллара, теперь я знаю, что я нахожусь в начале предложения NMEA, но я не знаю, какой из них. Затем он считывает следующие шесть байтов и помещает их в массив. Затем этот массив сравнивается с предопределенным массивом. Если он равен, то я знаю две вещи: один, у меня есть предложение и два, у меня есть правильное предложение. Теперь следует много циклов for-loops, чтобы прочитать и поместить правильные значения в нужные места. В этом примере он считывает время, дату, широту и долготу, но на дисплее отображаются только время и дата.

Когда программа находится ближе к концу основного цикла while, она отображает время и дату на ЖК-дисплее. Отображаемое время часто называют временем GPS ZULU.

Вы можете скачать c-исходный код ниже.

Исходный код

Вывод

В этой статье я показал вам один способ получить время и дату с модуля GPS с помощью микроконтроллера PIC. При небольших изменениях кода вы можете использовать это на другом ПОС. Программа считывает время, дату, широту и долготу, но отображает только время и дату. Я призываю читателя отображать lat и lon.

Фотографии и видео

Вот несколько фотографий макета.

Экран запуска.

Прежде чем ПИК получит достоверные данные.

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

Теперь в предложении NMEA имеется достоверная информация.

Попробуйте этот проект сами! Получить спецификацию .

Точные часы и таймеры


 Этот вариант часов сделан таким образом, чтобы максимально упростить схему, снизить энергопотребление, и в итоге получить прибор, который легко помещается в кармане. Выбрав миниатюрные аккумуляторы для питания схемы, SMD — монтаж и миниатюрный динамик (например от нерабочего мобильного телефона), Вы можете получить конструкцию, размером чуть больше спичечного коробока.
   Применение сверхяркого индикатора позволяет снизить ток, потребляемый схемой. Снижение тока потребления также достигается в режиме «LoFF» — индикатор погашен, при этом включена только мигающая точка младшего разряда часов. Рис 1. Вид передней панели.


   Регулируемая яркость индикаторов позволяет выбрать наиболее комфортное отображение показаний (и опять же снизить энергопотребление).
   В часах реализовано 9 режимов индикации. Переход по режимам осуществляется с помощью кнопок «плюс» и «минус». Перед выводом на индикацию самих показаний, на индикаторы выводится короткая подсказка названия режима. Длительность вывода подсказки — одна секунда. Применение кратковременных подсказок позволило достичь хорошей эргономичности часов. При переходах по режимам отображения (которых получилось достаточно много, для такого простого прибора, как обычные часы) не возникает путаницы, и всегда понятно, какие именно показания выведены на индикатор.Рис 2. Режимы индикации.


   Коррекция показаний, выведенных на индикатор включается при нажатии на кнопку «Коррекция». При этом кратковременная подсказка выводится на 1/4 секунды, после чего корректируемое значение начинает мигать с частотой 2 Гц. Корректируются показания кнопками «плюс» и «минус». При длительном нажатии на кнопку, включается режим автоповтора, с заданной частотой. Частоты автоповтора нажатия кнопки составляют:  для часов, месяцев и дня недели — 4 Гц;  для минут, года и яркости индикатора — 10 Гц;  для корректирующего значения — 100 Гц.
   Все откорректированные значения, кроме часов, минут и секунд, записываются в EEPROM и восстанавливаются после выключения — включении питания. Секунды при коррекции обнуляются. Из всех режимов, кроме часы-минуты, минуты-секунды и LoFF организован автоматический возврат. Если в течение 10 секунд ни одна из кнопок не нажата, то часы переходят в режим отображения часов — минут.
  Нажатием на кнопку «Вкл/Выкл буд.» включается/выключается будильник. Включение будильника подтверждается коротким двухтональным звуком. При включенном будильнике светится точка в младшем разряде индикатора.
   В режиме «Corr» на индикатор выведена корректирующая константа, начальное значение которой 5000 микросекунд в секунду. При отставании часов константу увеличиваем на величину отставания, вычисленное в микросекундах за одну секунду. Если часы спешат, то константу уменьшаем по тому же принципу.Рис 3. Схема часов.

Прошивки

Clock_4c_bat.hex   Прошивка, полностью соответствующая выше приведенному описанию (обычный HEX формат)
Clock_4c_01.hex     Прошивка с изменённым расположением кнопок для платы-1  — укорочен от 1/10 до 1/20 сек. звук подтверждения  нажатия на кнопку

Печатные платы


Рис 4. Вид смонтированных часов.

Часы удалось смонтировать в корпус от неисправных электромеханических часов. Туда же установлены три мизинчиковых батарейки.
Замерены токи потребления часов в разных режимах:
— режим LoFF                0,95 мА  (расчётное время работы 80 суток для батарей, ёмкостью 2000 мАч )
                            — режим 10%   яркости   1,9 мА
                            — режим 50%   яркости   5,0 мА
                            — режим 100% яркости   8,8 мА

Успехов Вам в творчестве!

PIC микроконтроллеры | PIC микроконтроллеры

Поигравшись с термометром и часами реального времени DS1307 я решил совместить их в один девайс – часы-термометр. Еще одной причиной создания часов были сломавшиеся китайские настольные часы и я решил, что корпус не должен пропадать просто так.

Получилось что-то такое:

Читать далее →

Рубрика: PIC микроконтроллеры, Схемотехника | Метки: 1-wire, 7-segment, DS1307, DS18b20, I2C, I2C expander, one-wire, PIC микроконтроллеры, pic16f628a, RTC |

Задача: Измерение температуры с помощью датчика DS18b20

Исходный материал: PIC16f628a, DS18b20, MAX232 level converter, devboard, proteus.

В данной статье рассмотрен пример работы в случае присутствия на линии одного датчика DS18b20, также здесь приводится текст стандартных функций для работы с протоколом 1-wire.

Читать далее →

Рубрика: PIC микроконтроллеры | Метки: 1-wire, DS18b20, I2C, one-wire, PIC микроконтроллеры, pic16f628a |

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

Задача: Запись значения времени/чтение значения времени и вывод через USART из микросхемы DS1307.

Исходный материал: PIC16f628a, DS1307, MAX232 level converter, devboard, proteus.

Читать далее →

Рубрика: PIC микроконтроллеры | Метки: DS1307, I2C, PIC, PIC микроконтроллеры, RTC, USART |

Рассмотрим примеры работы с USART. В статье я постараюсь идти двумя путями:

1. Применяем готовые решения из компилятора.

2. Пишем свои функции.

В общем обо всем по-порядку.

Читать далее →

Рубрика: PIC микроконтроллеры | Метки: PIC микроконтроллеры, pic16f628a, UART, USART |

Следующим экспериментом в серии выступает применение протокола передачи I2C. Здесь нет описания самого протокола, этого добра в сети хватает 🙂 в статье содержится инструкция по установке связи между микроконтроллером PIC16f628a и так называемым “расширителем” портов мк PCA9539.

Итак:

Задача: Установка связи по протоколу I2C.

Исходный материал: PIC16f628a, PCA9539, devboard.

Читать далее →

Рубрика: PIC микроконтроллеры | Метки: I2C, PIC микроконтроллеры, pic16f628a, SCI |

Задача: Запись и чтение из внутренней энергонезависимой памяти EEPROM

Исходный материал: PIC16f628a и простенькая devboard.

Микроконтроллер PIC16f628a имеет на борту 128 байт EEPROM, не шибко много, но что есть то есть. Обычно в компиляторах уже есть встроенные функции записи/чтения из памяти, Hi-tech PICC не исключение, но здесь я приведу разработку своих функций с нуля. Начнем с регистра EECON1:

Читать далее →

Рубрика: PIC микроконтроллеры | Метки: EEPROM, PIC микроконтроллеры, pic16f628a |

Продолжим изучать модуль CCP и остановимся на самом интересном применении ШИМ.

Задача: регулировка яркости светодиода с помощью ШИМ.

Исходный материал: PIC16f628a и простенькая devboard + proteus.

Читать далее →

Рубрика: PIC микроконтроллеры | Метки: PIC микроконтроллеры, pic16f628a, PWM, ШИМ |

Мужские часы Speake-Marin Unique Pieces Magister Tourbillon PIC.10030

После успешного дебюта модели Vertical Double Tourbillon швейцарская мануфактура Speake-Marin представила часы Black Magister Vertical Double Tourbillon. Главной особенностью новинки являются два 60-секундных турбийона, которые установлены вертикально в левой стороне циферблата.  Создатель часов и основатель мануфактуры Питер Спик-Марин испытывает особое трепетное отношение к турбийонам. Это его любимое усложнение в часах. Кроме двух турбийонов, на циферблате еще расположены индикаторы времени, дня/ночи и…

Часы Dong Son Tourbillon имеют циферблат из красного золота с тщательно гравированным центром для рельефного узора доисторических бронзовых барабанов древних людей Dong Son, которые жили в дельте Красной реки в северном Вьетнаме в период с 600 г. до н.э. до 300 г. н.э. Подробно детализированный циферблат дополняет барабаноподобный корпус Пикадилли диаметром 38 мм из красного золота 18к. Традиционный стиль и иллюстрации Dong Son обеспечили вдохновение для высоко-усложненного узора на циферблате…

В 2015 году часы Velsheda были представлены в розовом золоте. Модель из нержавеющей стали была презентована на выставке Baselworld 2014. Часы названы в честь знаменитой британской яхты «J класса», построенной в 1933 году в Великобритании и до сих пор принимающей участие в гонках. Velsheda обладает циферблатом в стиле минимализма с единственной стрелкой из вороненой стали, которая используется для индикации времени. Стрелка вытянута в обе стороны на многоуровневом циферблате белого цвета. В…

Механически мощная модель Speake-Marin Vertical Double Tourbillon оснащена двумя 60-секундными турбийонами и смещенным от центра эмалированным циферблатом белого цвета с индикатором запаса хода, расположенным над циферблатом и индикатором день/ночь, расположенным под циферблатом. Примечательно, что турбийоны связаны между собой одним массивным мостом красивой формы и с красивой отделкой. Каждый турбийон имеет свою собственную независимую зубчатую передачу и ходовую пружину, которые…

Радиолюбители, электроника — ПАЯЛЬНИК | VK

Ну, погоди! — игра 80-ых

Мой знакомый, увидев старую добрую игру «Ну, погоди!» (электроника им-02) в интернете начал ностальгировать по тем временам и решил ее купить. Но шло время, а маленькая мечта оставалась мечтой…

See more
Тут мне в руки попал «наглухо» умерший телефон Samsung GT-S5230. Данный телефон имеет TFT дисплей 3.0′ размером 400х240 пикселей, 8-ми битной шиной и шлейфом “шириной” 31 пин.
Дисплей оказался жив и мне пришла идея накидать программку для микроконтроллера (далее МК) а-ля «эхо 80-х – волк ловит яйца».
Как вы уже догадались речь пойдет о разработке собрата игры «Ну, погоди!» и никакой пользы человечеству не несет кроме «фо фан».

Об оригинале …

Электроника им-02 «Ну, погоди!» начала выпускаться в 1984 г. (по началу не имела порядкового номера 02) и являлась точной копией Nintendo “ Game&watch EG-26 EGG” 1981 года (Только там волк со шляпой). «Начинкой» игры являлись: пьезокерамический звонок ЗП, часовой кварц, однокристальная 4-х разрядная ЭВМ КБ1013ВК1-2, дисплей ИЖМ2-71 и немного «рассыпухи». Однокристальная ЭВМ КБ1013ВК1-2 представляет собой законченное устройство с контроллером жидкокристаллических дисплеев, центральным процессором и т.д.. Программа для него была написана на ассемблере длинной около 2000 строк. Контроллер не особо был трудягой, т к дисплей ИЖМ2-71 представлял из себя жидкокристаллический мнемонический индикатор (с уже нанесенным рисунком) работающим при освещении. Т. е. прорисовки каждого пикселя от него не требовалось. Да и частота в 32кГц не способствовала этому (часы важнее:)).

Поехали…

В нашей схеме используется PIC18F2455 производительностью 12 MIPS.

Чтобы «прорисовать» картинку 400х240 пикселей с глубиной цвета 16 бит (к слову сказать дисплей от S5230 на пару сантиметров по более дисплея ИЖМ2-71), требуется объем памяти 192000 байт, что для нашего МК непозволительная роскошь, а усложнять устройство добавлением внешней памяти нам не нужно. PIC18F2455 имеет 24 кБ памяти программ и 2 кБ данных. Для того, чтоб вся картинка поместилась в память МК – она была разбита на блоки. Блок представляет собой массив, где каждый пиксель описан не двумя байтами цвета, а одним битом. Массив ссылается на свою палитру цветности (2 цвета.) Чтоб прорисовка динамических объектов была менее заметна глазу, в особенности больших объектов типа волка, создана функция вывода с «зацикливанием» байта (не бита).

#игра #pic@cxem_net_payalnik #микроконтроллер

Читать далее: https://cxem.net/mc/mc460.php
Автор Fuckir: https://cxem.net/profile/243
Видео работы: https://youtu.be/dlyVR7j-Z4M

Создание GPS-часов с помощью микроконтроллера PIC

Используйте микроконтроллер PIC для получения времени и даты от модуля GPS.

Требования

Введение

В предыдущих статьях «Создание GPS-часов с помощью Arduino» и «Создание GPS-часов с помощью PICAXE» я делал GPS-часы с помощью Arduino и PICAXE. В этой статье я использую PIC16F628A. Краткое введение в GPS и навигацию читайте в статье по первой ссылке.

В этой статье я использую другой модуль GPS, чем в предыдущих статьях.Скорость передачи составляет 9600 бод, поэтому мне нужно настроить порт uart, чтобы он соответствовал этому. Чтобы прочитать время, я собираюсь использовать предложение GPRMC. Это предложение выглядит так:

$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10

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

Оборудование

Следующая схема построена на макетной плате. Обратите внимание на блок вывода ЖК-дисплея.D6 и D7 подключены к контактам 12 и 13 PIC. Это PGC и PGD, контакты для программирования. Я не собираюсь читать с ЖК-дисплея, поэтому я заземлил контакт RW. Я также заземлил D0-D3. Хорошей практикой является заземление неиспользуемых контактов таким образом, однако неиспользуемые контакты на PIC, установленном на печатной плате, я предпочитаю направлять на контактную площадку для быстрого доступа, если я добавляю в проект дополнительные функции. Здесь это не так, поскольку схема макетная.

Нажмите на изображение, чтобы открыть его в полном размере.

Список деталей

Ниже приведен отредактированный список из спецификации ulp в EagleCAD.

Программное обеспечение

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

Во-первых, это библиотеки, биты конфигурации, объявление переменных и прототипирование функций. Затем у меня есть функции для управления ЖК-дисплеем. Чтобы ЖК-дисплей работал правильно, вам придется следовать определенному рецепту. После этого идут функции uart и две функции для отображения сообщения, когда полученное время и дата недействительны.

Основная программа начинается с некоторых инструкций: отключите компараторы, установите правильные направления для портов и установите для всех портов низкие значения. Затем он инициализирует порт LCD и порт uart. В основном цикле while каждый байт, полученный на RX, помещается в переменную. Переменная сравнивается, чтобы увидеть, является ли она знаком доллара, $. Если это знак доллара, теперь я знаю, что нахожусь в начале предложения NMEA, но не знаю, в каком именно. Затем он считывает следующие шесть байтов и помещает их в массив.Затем этот массив сравнивается с предопределенным массивом. Если оно равно, то я знаю две вещи: во-первых, у меня есть предложение, и во-вторых, у меня есть правильное предложение. Теперь следует множество циклов for, чтобы читать и размещать нужные значения в нужных местах. В этом примере он считывает время, дату, широту и долготу, но на ЖК-дисплее отображаются только время и дата.

Когда программа приближается к концу основного цикла while, она отображает время и дату на ЖК-дисплее. Отображаемое время часто называют временем GPS ZULU.

Вы можете скачать исходный код c-файла ниже.

jc_pic16f628a-gpsclock-v2.c.zip

Заключение

В этой статье я показал вам один способ получить время и дату от модуля GPS с помощью микроконтроллера PIC. С небольшими изменениями в коде вы можете использовать это на другом PIC. Программа считывает время, дату, широту и долготу, но отображает только время и дату. Я призываю читателя показать широту и долготу.

Фото и видео

Вот несколько фотографий макетной платы.

Стартовый экран.

До того, как PIC получит достоверные данные.

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

Теперь в предложении NMEA есть верная информация.

Попробуйте этот проект сами! Получите спецификацию .

PIC часы

PIC часы

Сделай сам веселую электронику проект

…Вы можете создать цифровую часы с парящими в воздухе цифрами…

 


Мой небольшой хобби-часы со светодиодной подсветкой. Он был построен в 1998 году. Красные цифры на этом фото кажутся парящими в воздухе перед часами. Эта иллюзия основана на инерции человеческого глаза. Если светодиодные цифры будут периодически и достаточно часто мигать, они будут казаться твердыми и устойчивыми. А так как матрица цифры формируются механически сканируемой одиночной линией светодиодов, а быстро вращающийся Корпус часов не виден, он оставляет цифры «подвешенными» в воздухе.Насколько я знаете, первые часы, использующие эту концепцию, были построены в 1997 году Бобом Бликом, так что полная заслуга классная идея, оригинальный дизайн и программное обеспечение достаются Бобу. Пожалуйста, посетите его страницу для еще большего количества фотографий его оригинальных часов и часов, построенных другими людьми.

Сердцем этих часов является микроконтроллер PIC16F84. (Старая версия PIC16C84 работает только отлично). Микроконтроллер программируется кодом, представленным ниже.



Во-первых, механические вещи.Мы будем использовать автомобильный вентилятор на 12 В (продается за 12,95 долларов США) в качестве комплекта. содержащий почти все необходимые механические части. Единственная дополнительная часть, которая вам понадобится, это шариковый подшипник и латунная трубка диаметром около 2 мм. Подшипник, который я использовал, был 22 мм. диам., 10 мм внутр. в диаметре и высотой 6 мм. Этот размер не очень критичен, (это как раз то, что я был в руке) но попробуй найти что-нибудь близкое: этот очень подходит.



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



Следующий шаг – разборка двигателя. Сдвиньте обмотки и коллектор вдоль вала. к нерезьбовому концу вала, оставляя около 15 мм вала на этом конце. Быть будьте осторожны, чтобы не отделить коллектор от обмоток ротора. Самый простой способ сделать это заключается в том, чтобы приклеить коллекторный конец вала к заднему подшипнику скольжения (белый пластиковый часть) и просто постучите молотком по валу с другой стороны, используя подшипник скольжения в качестве служба поддержки.Как только это будет сделано, вам нужно будет припаять провод к концам трех коммутаторов. сегменты: 2 провода к любым соседним сегментам и один провод к сегменту, противоположному другому два выбранных ранее.



Готовый ротор должен выглядеть так. Конечно, припой не должен стекать по поверхности. сегменты коллектора, где щетки будут касаться их. Обмотка коммутатора полоску бумаги (несколько слоев) перед пайкой, оставив открытыми только концы. помощь.



Снимите малый подшипник скольжения с пластиковой детали. Больший подшипник (левый на этом картинка) займет свое место. Просто увеличьте отверстие сверлом «unibit» до диаметра немного меньше внешнего диаметра подшипника, чтобы обеспечить плотную посадку.



Возьмите маленькую пластиковую шестеренку из поворотного механизма вентилятора и вставьте ее в шар. подшипник плотно. Возможно, вам придется немного подпилить механизм.Самый простой способ сделать это — поставить его на вал, вставьте вал в патрон электродрели и напильником сточите часть пластика. Как только эта пластиковая деталь вставлена ​​в подшипник, просверлите 3 крошечных отверстия. отверстия (диаметром от 0,8 мм до 1 мм) для проводов, проходящих через его стенки. Расположение отверстий должно примерно отражать положение сегментов коммутатора, к которым подключены провода. припаян. Вся сборка должна выглядеть так, как на этом фото.



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



Теперь самое интересное: сборка электроники. Электрическая схема часов включена эта картинка.Щелкните правой кнопкой мыши на нем, чтобы увеличить вид. Оригинальный дизайн Боба Блика слегка изменен, чтобы приспособиться к колебаниям напряжения, возникающим в результате различных скоростей вращения вы можете желать. Кроме того, небольшая, дешевая и легкая литиевая кнопочная батарейка на 3 В заменяет батарейку. большая, тяжелая и более дорогая крышка памяти. Это поможет сбалансировать часы. Некоторые другие также внесены изменения (в каскадах выпрямления и формирования индексных импульсов).



Поместите все компоненты на кусок макетной платы, припаяв компоненты к металлизированные сквозные отверстия.Я настоятельно рекомендую сокет для PIC16F84, так как вы, возможно, захотите измените код позже, чтобы отображать секунды, мигающее двоеточие или даже отображать все часы аналоговые «руки». Соедините все компоненты пайкой точка к точке с проволочная обмотка. Аппаратное обеспечение настолько простое, что на самом деле не стоит делать печатную плату, но вы конечно можно это сделать.



После того, как компоненты соединены вместе, сделайте панель со светодиодами. Припаять катоды каждого Светодиод к латунной трубке, выстраивающей их.Семь тонких магнитных проводов, идущих внутри трубки используются для подключения анодов к цепи. После того, как светодиоды на месте, согните трубка, как показано здесь. Маленькие штифты (я использовал выводы 1N4401) припаяны к нижняя часть доски (на каждом конце) будет удерживать трубку под доской. Но прежде закрепив трубку под платой, поместите на нее пластиковую втулку. Концентратор, как вы могли догадаться, центральная часть винта. Вырежьте его и просверлите отверстие чуть меньше диаметра из латунной трубки.Это позволит перемещать трубку вперед и назад для балансировки. вращающийся узел.



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



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



Пластиковый корпус двигателя будет служить опорой. Я бы посоветовал вам безопасно Держите часы подальше от лица, прежде чем включать питание двигателя в первый раз. время, так как устройство, вероятно, будет разбалансировано.Лучше всего использовать переменную подачу и медленно увеличивайте напряжение. На 3-4 вольта часы пока не заработают, но можно сбалансируйте узел, наклонив и/или сдвинув его в ступице. После настройки часов баланс, перезагрузите контроллер: сначала отключите питание двигателя, затем закоротите контакты 4 и 5, при условии, что на месте находится элемент 3 В, который поддерживает питание схемы, пока питание двигателя отключено. Затем установите время и подайте питание на двигатель.



Теперь, если вы предоставите хотя бы 8.5V на двигатель, вы должны увидеть, что ваши часы работают! Я упал вы видите размазанные случайные символы, отключите питание, замкните на мгновение контакты 4 и 5 PIC (что сбрасывает его), затем установите время и снова включите питание (так же, как над).


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


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


Код с отображением секунд дает следующее:

 


Несколько фото другой разновидности похожих часов с индикацией секунд Я построил, показаны ниже. С яркими светодиодами и правильной балансировкой дисплей будет выглядеть резкий и крутой, как на этом фото (сделано в темноте).Удачи!

 


Вы можете написать мне по электронной почте: [email protected]

Переключение часов — Помощь разработчикам

Источник системных часов можно переключать между внутренним и внешним источником с помощью управляющих битов в регистре OSCCON. Это позволяет микроконтроллеру PIC ® управлять скоростью работы, а также может способствовать снижению энергопотребления.Более медленный генератор будет потреблять меньше тока, чем высокоскоростной генератор. Во время нормальной работы может потребоваться более высокая скорость, но когда приложение менее активно, более медленный осциллятор может справиться с задачами обработки. Это уменьшит энергопотребление. Различные варианты сна доступны для очень низкого энергопотребления, но часто необходимо поддерживать непрерывную работу во время сна. Более низкая частота генератора может быть всем, что требуется во время работы в спящем режиме.

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

Примечание: Переключение часов — это операция, управляемая программным приложением, а не автоматическая операция. Другие функции переключения часов, такие как Fail Safe Clock Monitor и Two Speed ​​Start-Up, представляют собой функции автоматического переключения часов, которые не влияют на настройки переключения часов.

Режим переключения часов управляется битами SCS в регистре OSCCON.Эти биты можно изменить с помощью программного обеспечения во время выполнения, чтобы изменить источник синхронизации.

Когда биты SCS = 00 , системные часы переключаются на источник синхронизации, выбранный битами Fosc в регистре конфигурации. Это может быть внутренний генератор , внешний кристалл/резонатор или внешний тактовый генератор .

Когда биты SCS = 01 , системные часы переключаются на вторичный генератор, который является внешним 32.Кристалл 768 кГц, который управляет Timer1 Peripheral . Внешний тактовый кристалл является дополнительным источником тактового сигнала, который должен быть частью схемы разработки Timer1.

Когда биты SCS = 10 или 11 , системные часы переключаются на внутренний генератор независимо от настроек бита конфигурации Fosc. Биты IRCF регистра OSCCON выбирают частоту внутреннего генератора.

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

Статус Fosc

Бит OSTS указывает состояние генератора, выбранного настройками бита конфигурации Fosc.После сброса внутренний генератор INTOSC может управлять устройством, в то время как выбор Fosc завершает задержку запуска или даже задержку таймера включения питания . Проверка бита OSTS покажет, какой осциллятор управляет устройством.


Опции часов микроконтроллера PIC

Г. Ширер из Исследовательского центра лазеров на свободных электронах Университета Вандербильта. Нэшвилл, Теннесси говорит:

Существует несколько основных способов обеспечения синхронизации микроконтроллера.Микроконтроллер имеет внутренний генератор и два контакта. на 16F84 (контакты 15 и 16) для подключения стандарта частоты для Часы. Микроконтроллеры 16F84 доступны как в DC — 4 МГц, так и в DC – версии 10 МГц. Номер чипа имеет суффикс /04 или /10. Версия 16Ф84А способна работать от постоянного тока до 20 МГц, однако это версия в настоящее время недоступна.

Разница в стоимости между единицами небольшая и при небольших количествах, вероятно, было бы лучше купить версию с самой высокой тактовой частотой, которая доступен.Для больших количеств было бы разумно выбрать самый низкий тактовая частота, которая полностью соответствует требованиям приложения, поскольку экономия средств увеличивается с увеличением количества. Спецификации частоты только гарантия производителя. Я в курсе экспериментов по разгону (работа микроконтроллера с более высокой скоростью, чем указано) микроконтроллеры с приемлемыми результатами. Это было бы хорошо для экспериментов, но не считается хорошей практикой проектирования

Наименее точным методом будет RC-цепочка (резисторный конденсатор), подключенная к сети. к штифту 15.Режим RC можно использовать, когда синхронизация не имеет решающего значения. например, когда два входа имеют высокий уровень, желаемый выход становится высоким. Время постоянная RC сети определяет частоту, где

т = Р * С
 

а также

f=1/Т

t = время в секундах
R = сопротивление в Омах
C = емкость в фарадах
f = частота в герцах
 

Если вы планируете использовать метод эталона частоты RC, рекомендуется: номиналы резисторов должны оставаться в пределах от 5 К до 100 К, что потребует емкость конденсатора примерно 20 пФ.Сопротивление <= 2,2 кОм может вызвать осциллятор становится нестабильным или вообще останавливается. Чрезвычайно высокое сопротивление например, 1 Мег может привести к тому, что осциллятор станет чрезмерно чувствительным к шуму, влажность и протечки.

Недорогие резисторы и конденсаторы не имеют допусков, способных обеспечить точную тактовую частоту, достаточную для измерения времени, передачи или получение последовательной информации и других измерений времени или критичных ко времени Приложения. Стандартные резисторы мощностью ¼ Вт обычно имеют допуск 1%, а керамические конденсаторы будут иметь допуск примерно 5%.RC компоненты, имеющие достаточную устойчивость к последовательной связи, быть значительно дороже, чем другие варианты, доступные в качестве хорошего эталон частоты.

Кристаллы кварца имеют чрезвычайно высокую устойчивость, которая измеряется в частях на миллион (промилле). Однако кварцевые кристаллы стоят несколько долларов за штуку. обеспечивают высочайшую точность. Вместе с кристаллом два конденсатора потребуется примерно 22 пФ (см. список ниже). рекомендую использование для этой работы монолитных керамических конденсаторов, так как они намного меньше и более стабилен, чем обычная версия с керамическим диском.Использование этой опции может стоит почти столько же, сколько сам микроконтроллер. Если бы вы строили цифровые часы или измеритель емкости, кварцевый кристалл будет компонентом выбора.

Microchip рекомендует следующие номиналы конденсаторов для кварцевых генераторов. Более высокая емкость повысит стабильность генератора, но Также увеличьте время запуска. Библиотека целевых чипов JAL установит предохранителя режима правильно для выбранной частоты. Однако помните, что выбор частоты, отличной от 4 МГц или 10 МГц, приведет к синхронизации и задержке проблемы, поскольку JAL вычисляет эти значения на основе стандартных тактовых частот.

Режим Частота Емкость

LP 23 кГц 68 – 100 пФ
LP 200 кГц 15 – 33 пФ
XT 100 кГц 100 – 150 пФ
XT 2 МГц 15 – 33 пФ
XT 4 МГц 15 – 33 пФ
ГС 4 МГц 15 – 33 пФ
ГС 10 МГц 15 – 33 пФ
 

Третьим и на мой взгляд лучшим вариантом для общего пользования будет керамический резонатор. Допуск для керамического резонатора составляет примерно 0,5%, что более чем достаточно для всех, кроме наиболее критического измерения времени Приложения.Помните также, что деление тактовой частоты также делит толерантность одновременно. Для керамических резонаторов также требуются конденсаторы. как кристаллы кварца. Во всех смыслах и целях микроконтроллер не знаю разницы между керамическим резонатором и кварцевым кристаллом. Более того, доступны версии керамических резонаторов, которые со встроенными конденсаторами и стоят всего на копейки больше, чем версия без конденсаторы. Лучше всего то, что любая версия стоит менее одного доллара.

Ниже приведен список керамических резонаторов, которые я использовал в экспериментах. Я провел. Обратите внимание, что резонаторы на 20 МГц предназначены для использования с 16F877. Микроконтроллер.

Частота Номер детали производителя Конденсаторы

4 МГц Murata Erie CSA4.00MG без
4 МГц Panasonic EFO-MN4004A4 без
4 МГц Panasonic EFO-MC4004A4 Вт
10 МГц Murata Erie CSA10.00MG без
10 МГц Panasonic EFO-MN1005B4 без
10 МГц Panasonic EFO-MC1005B4 Вт
10 МГц ECS, Inc.ЗТА-10.00МТ Б/Б
10 МГц ECS, Inc ZTT-10.00MT W
20 МГц ECS, Inc. ZTA-20.00MX011 без
20 МГц ECS, Inc. ZTT-20.00MT W
 

Для керамических резонаторов без конденсаторов мне удалось использовать 22 пФ для резонаторов 4 и 10 МГц. Microchip рекомендует 15 – 33 пФ и установка предохранителя режима на XT для резонаторов 4 МГц и HS для резонаторов 10 МГц. Все перечисленных выше резонаторов составляют +- 0,5%.

Это следствие закона Мерфи. «Осцилляторы усиливаются.Усилители колеблются».

.

Цифровой таймер PIC

Примечание: В этой программе есть ошибка, из-за которой тревога не включается. работает, если минуты установлены на ноль. Итак, установка будильника 8:59 или 6:01 будет работать, а 6:00 — нет. Ошибка может быть исправлена путем добавления строки программы для вызова процедуры будильника после часы увеличиваются.
Текущий список в разделе прерываний:

           вызов будильника
           movlw d'60'
           xorwf МИНУТЫ,0
           СТАТУС btfss,2 ; Проверка на 60 минут
           перейти к Готово; Выпрыгивай, если не 60
           CLRF МИНУТЫ
           incf ЧАСЫ,f


Новый листинг должен быть:

           вызов будильника
           movlw d'60'
           xorwf МИНУТЫ,0
           СТАТУС btfss,2 ; Проверка на 60 минут
           перейти к Готово; Выпрыгивай, если не 60
           CLRF МИНУТЫ
           incf ЧАСЫ,f
           вызов будильника; Здесь добавлена ​​новая строка
 
Этот таймер использует микроконтроллер PIC16F628 для отображения 3 и 1/2. время разряда и управление внешней нагрузкой.Часы включают календарь с високосным годом и дополнительными настройками перехода на летнее время. Таймер выход может быть установлен от 1 до 59 минут и вручную включаться и выключаться. Часы также имеют функцию коррекции, которая позволяет добавить дополнительную секунду. будет добавляться каждые столько часов, чтобы компенсировать немного медленное бегущий осциллятор. Генератор использует обычные часы с частотой 32,768 кГц. кристалл и частоту можно немного отрегулировать с помощью 24pF конденсатор на правой стороне кристалла.

При загрузке на дисплее должно отображаться время 2:56, а другие данные могут отобразиться, переключив переключатель продвижения (D). Каждый раз, когда (D) переключатель замкнут и разомкнут, дисплей перейдет к следующие данные. Порядок отображаемых данных и значений загрузки следующий: следует:

Время ------------------------------------------------------------ (2:56 )
Будильник ------------------------------------------------------------ (6:30 )
Календарь --------------------------------------------- (3:07 )
День недели (воскресенье=1), секунды ------------------------------------------- (1:секунды)
AM/PM (будильник) (AM=0/PM=1), длительность таймера ------------- (0:45)
AM/PM (время) (AM=0/PM=1), переход на летнее время отключен -- (0:00)
Год (от 1 до 4), исправление ошибок ---------- (2:18)
 

При каждом переключении переключателя «D» отображаются 7 дисплеев.Для регулировки установите переключатель RA5 в положение «В», а затем переключите переключатели E и F, чтобы продвинуть данные в часах или минутах цифры. Затем переключите переключатель «D», чтобы перейти к следующим данным. После 7-й дисплей, он вернется наверх и отобразит текущее время. Или просто нажмите переключатель времени «C», чтобы добраться до вершины в любое время. Когда все настроите, установите переключатель RA5 в положение «А». положение, чтобы данные не могли быть случайно изменены. Вы все еще можете просмотреть все с помощью клавиши продвижения «D», но переключатели E и F просто включить или выключить сигнализацию на RB7.Я использую его с внешним транзистором для включать и выключать радио. Настройка «Летнее время» (на 6-м дисплее в цифрах минут) используется для включения корректировки летнего времени, на один час вперед на 2-е воскресенье марта и на час позже первого воскресенья ноября. Запись будет либо 0, либо 1, либо 3. 0 = Летнее время отключено (по умолчанию). 1 = экономия времени включена, текущее время стандартное. 3 = экономия времени включена, и текущее время соответствует летнему времени.Последние 2 записи в списке (Год и Исправление) относятся к текущий год (от 1 до 4) (4 = високосный год), поэтому сегодняшняя установка (2006) будет будет 2, так как високосный год будет в 4-м году, то есть через 2 года. Настройка коррекции будет добавлять секунду каждые столько-то часов для точной настройки частоты генератора. Мои настройки равно 18, что добавляет секунду каждые 18 часов. Это довольно точно и теряет только 3 секунды в месяц. Вы, вероятно, хотите запустить его на пару недель, чтобы выяснить, какая коррекция нужна для кристалл у вас есть.Функции переключателя: RA0 (переключатель C) = время отображения RA1 (переключатель D) = переход к следующим данным (будильник, календарь и т. д.) RA2, RA3 (переключатель E и F) = перевод часов и минут вперед (в режиме настройки). RA2, RA3 (переключатели E и F) = включение/выключение тревожного выхода (в рабочем режиме) RA5 в положении «B» (открыто) = режим настройки

;------------Список программ, Clock.asm - REV 1 - 11/08/06 --------- СПИСОК P=16F628 ; Номер устройства (PIC16F628) УРОВЕНЬ ОШИБКИ -224 ; подавить надоедливое сообщение из-за триса УРОВЕНЬ ОШИБКИ -302 ; подавить сообщение из-за смены страницы ;--------------------- Конфигурация --------------------------- ------ _BODEN_OFF равно H'3FBF' ; Обнаружение затухания выключено _CP_OFF ​​равно H'3FFF' ; Защита кода выключена _PWRTE_ON эквивалент H'3FF7' ; Сброс при включении включен _WDT_OFF равно H'3FFB' ; Таймер сторожевой собаки выключен _LVP_OFF ​​или H'3F7F' ; Программирование низкого напряжения выключено _INTRC_OSC_NOCLKOUT или H'3FFC'; Используйте внутренний RC-генератор _MCLRE_OFF или H'3FDF' ; Используйте RA5 в качестве функционального входа __CONFIG _CP_OFF ​​& _WDT_OFF & _INTRC_OSC_NOCLKOUT & _PWRTE_ON & _LVP_OFF ​​& _BODEN_OFF & _MCLRE_OFF ;--------------------- Определение переменных -------------------------- ----- INDF экв. 00h FSR экв. 04h CMCON equ 1Fh ; Адрес управления компаратором INTCON equ 0Bh ; Регистр управления прерываниями OPTION_REG equ 81h ; Регистрация опций СТАТУС equ 03h ; Регистр статуса TRISA equ 85h; Управление вводом/выводом для порта A ТРИСБ экв. 86h ; Управление вводом/выводом для порта B ПОРТВ equ 06h ; Адрес порта Б ПОРТ экв. 05h ; Адрес порта А ПК экв 02h ; Счетчик команд СЧЕТЧИК экв 20ч ; Адреса 20H-7FH = общая оперативная память ЧАСЫ экв. 21ч ; Эти 20 адресов для отображения МИНУТЫ экв. 22ч HOURS_A экв 23ч MINUTES_A экв. 24 ч. МЕСЯЦ экв. 25ч ДНЕЙ экв. 26ч ДЕНЬ НЕДЕЛИ экв. 27ч СЕКУНДЫ экв. 28ч AMPM_A экв. 29 ч TIMER_LIMIT экв. 2 часа AMPM экв. 2bh ДНЕВНОЙ ЭКВ 2ch ГОД экв 2dh ПОПРАВКА equ 2eh ТЕМП экв 35ч ; Значение, переданное подпрограмме Digits ДЕСЯТКИ экв. 36ч ; Значение, возвращаемое процедурой Digits TEMPW экв. 37 ч ; Используется в прерывании для сохранения w ПЕРЕКЛЮЧАТЕЛЬ экв. 38ч ; Значение, возвращаемое переключателями STATUS_SAVE экв 39ч ; Прервать (сохранить статус) TEMP1 экв. 3ah ; Часть процедуры задержки СИГНАЛИЗАЦИЯ equ 3bh ; Аварийный сигнал вкл./выкл. (бит 7 = вкл.) ; ПУСТО экв 3ch ; Не используется ПРЕДЕЛ экв 3dh ; Увеличивается каждый час до (коррекция) TEMP_SAVE equ 3eh ; Сохраняет копию TEMP ТАЙМЕР экв. 3fh AMPM_LED экв. 40 ч. ;--------------------- Здесь начинается программа ------------------------- - перейти к ИНИТ ;--------------------- Прерывание процедуры для обновления времени ------------- организация 0x04 моввф TEMPW ; Сохранить ж СТАТУС свопф,0 ; Получить регистр состояния в w STATUS_SAVE моввф ; Сохранить регистр статуса СОСТОЯНИЕ БКФ,5 ; Перейти в банк 0 (00) incf SECONDS,f ; Секунды вперед movlw d'60' xorwf SECONDS,0 СТАТУС btfss,2 ; Проверить 60 секунд перейти к Готово; Выпрыгивай, если не 60 СЕКУНДЫ incf МИНУТЫ,f вызов будильника movlw d'60' xorwf МИНУТЫ,0 СТАТУС btfss,2 ; Проверка на 60 минут перейти к Готово; Выпрыгивай, если не 60 CLRF МИНУТЫ incf ЧАСЫ,f позвони вызвать Add_Second ; Компенсация медленного осциллятора movlw d'13' xorwf ЧАСОВ,0 СТАТУС btfss,2 ; Проверка на 13 часов перейти к полудню; Выпрыгивай, если не 13 ЧАСЫ incf ЧАСЫ,f ; Установите часы на 1:00 Полдень movlw d'12' xorwf ЧАСОВ,0 СТАТУС btfss,2 ; Проверка на 12 часов перейти к Готово; Выпрыгивай, если не 12 вкл. AMPM,f bcf AMPM,1 ; Очистите бит 1, чтобы остановить переполнение btfsc AMPM,0 ; AM = Бит 0 очищен Перейти к выполнению incf ДНЕЙ,f МЕСЯЦ стол вызовов xorwf ДНЕЙ,0 ; Проверить количество дней = лимит СТАТУС БТФСС, 2 перейти к дню недели clrf ДНЕЙ incf ДНЕЙ,f incf МЕСЯЦ,f movlw d'13' xorwf МЕСЯЦ,0 СТАТУС btfss,2 ; Проверить на новый год перейти к дню недели МЕСЯЦ incf МЕСЯЦ,f incf ГОД,f movlw d'5' xorwf ГОД,0 СТАТУС БТФСС, 2 перейти к дню недели CLRF ГОД incf ГОД,f НеделяДень incf ДЕНЬ НЕДЕЛИ,f movlw d'8' xorwf ДЕНЬ НЕДЕЛИ,0 СТАТУС btfss,2 ; Проверить на новую неделю Перейти к прыжку clrf ДЕНЬ НЕДЕЛИ incf ДЕНЬ НЕД,f ; Установите день недели на 1 = воскресенье Прыгнуть movlw d'2' xorwf МЕСЯЦ,0 СТАТУС БТФСС, 2 перейти Готово movlw d'29' xorwf ДНЕЙ,0 СТАТУС БТФСС, 2 перейти Готово movlw d'4' xorwf ГОД,0 СТАТУС БТФСК, 2 перейти Готово movlw d'3' МЕСЯЦ clrf ДНЕЙ incf ДНЕЙ,f Сделанный БКФ ИНТКОН, 2 STATUS_SAVE,0 СТАТУС movwf swapf TEMPW,f подкачка TEMPW,0 ретфи ;-------------------- Завершить процедуру прерывания ---------------------- В ЭТОМ ; Инициализировать переменные СТАТУС bsf,5 ; Выберите банк памяти 1 (01) bcf СТАТУС,6 ; Выберите банк памяти 1 (01) movlw b'00000000' movwf ТРИСБ ; Установите порт B в качестве выхода movlw b'01110000' ; моввф ТРИСА ; Установите порт A как выход, RA4,5,6 = вход bsf OPTION_REG,5 ; Выберите Timer0 (TOCS=1) bcf OPTION_REG,3 ; Назначить прескалер на timer0 БКФ OPTION_REG,0 ; Установите прескалер на 128 СОСТОЯНИЕ БКФ,5 ; Сбросить в банк 0 СОСТОЯНИЕ БКФ,0 ; Очистить бит переноса bcf СТАТУС,2 ; Очистить нулевой флаг bcf СТАТУС,1 ; bsf INTCON,5 ; Включить прерывание timer0 bcf INTCON,2 ; Очистить флаг прерывания bsf INTCON,7 ; Включить глобальное прерывание мовлв 07ч movwf CMCON ; Компараторы выключены movlw d'2' моввф ЧАСОВ ; Инициализировать часы до 2 movlw d'56' movwf МИНУТЫ ; Инициализировать минуты до 56 movlw d'6' movwf HOURS_A ; Инициализировать часы будильника до 6 movlw d'30' моввф MINUTES_A movlw d'3' МЕСЯЦ ; Инициализировать месяц до 7 марта movlw d'7' movwf ДНЕЙ movlw d'1' movwf ДЕНЬ НЕДЕЛИ ; Инициализировать день недели в воскресенье (1) СЕКУНДЫ clrf AMPM ; Инициализировать AMPM в AM movlw d'45' моввф TIMER_LIMIT ; Инициализировать таймер будильника до 45 CLRF AMPM_A clrf ДНЕВНОЙ СВЕТ ; Отключить летнее время movlw d'2' movwf ГОД ; Установите год на 2 (Високосный год = 4) movlw d'18' ПОПРАВКА movwf ; Добавляйте 1 секунду каждые 18 часов clrf ТРЕВОГА ; Выключить будильник CLRF ТАЙМЕР CLRF LIMIT CLRF AMPM_LED movlw h'21' моввф ФСР ; Указатель адреса указывает на часы movlw d'15' ПЕРЕКЛЮЧАТЕЛЬ перейти на главную Множество ; Данные для 7-сегментных цифр addwf ПК, 1 retlw b'01000000' ; "0" retlw b'01111001' ; "1" retlw b'00100100' ; "2" retlw b'00110000' ; "3" retlw b'00011001' ; "4" retlw b'00010010' ; "5" retlw b'00000010' ; "6" retlw b'01111000' ; "7" retlw b'00000000' ; "8" retlw b'00010000' ; "9" Стол ; Дней в месяц плюс 1 addwf ПК, 1 отсрочка d'00' ; Неиспользуемая линия relw d'32' ; Ян отсрочка д'30' ретлв д'32' ретлв д'31' relw d'32' ; май ретлв д'31' ретлв д'32' ретлв д'32' ретлв д'31' ретлв д'32' ретлв д'31' relw d'32' ; Декабрь Основной ; ------------ Основной цикл ---------------------- дисплей вызова ; Данные дисплея вызвать Read_Port ; Проверьте, замкнут ли переключатель movlw d'14' ; Проверьте, замкнут ли таймер ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСС, 2 перейти к Set_Time movlw h'21' movwf FSR Установить время movlw d'46' ; Проверьте таймер и RA5 закрыт. ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСС, 2 перейти к Increment_Display movlw h'21' movwf FSR Increment_Display movlw d'13' ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСС, 2 перейти к функции ; Функциональная клавиша не нажата (13) вызов Подождите; Подождите, пока переключатель разомкнется вызов Increment_Pointer Функция movlw d'45' ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСС, 2 перейти к Increment_100s ; Функциональная клавиша не нажата (13) вызов Подождите; Подождите, пока переключатель разомкнется вызов Increment_Pointer Инкремент_100с ; На плюс RA5 = 32 + 11 = 43 movlw d'43' ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСС, 2 перейти к Increment_10s позвонить Подождите incf INDF,f movlw d'13' ; Переворот в 12 xorwf INDF,0 СТАТУС БТФСК, 2 clrf INDF Инкремент_10с ; RA5 + тревога выключена = 39 movlw d'39' ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСС, 2 перейти к Alarm_Toggle позвонить Подождите вкл FSR,f incf INDF,f movlw d'60' ; Переворот в 60 лет xorwf INDF,0 СТАТУС БТФСК, 2 clrf INDF movlw h'28' ; Проверьте отображение секунд xorwf FSR,0 СТАТУС БТФСК, 2 СЕКУНДЫ ; Ноль секунд decf FSR,f Alarm_Toggle movlw d'7' ; Будильник выключен ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСК, 2 СИГНАЛИЗАЦИЯ БКФ, 7 movlw d'11' ; Будильник включен ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСС, 2 перейти на главную БСФ СИГНАЛИЗАЦИЯ,7 CLRF ТАЙМЕР перейти на главную ;--------------------- Конец основного цикла ------------------------ ------ Выход ; Записать данные в порт B вызов массива iorwf ТРЕВОГА,0 movwf ПОРТБ вернуть Задержка ; ------------------------ Задержка ---- около 600 мкс ------------ movlw d'25' Задержка_0 movwf TEMP1 Delay_1 movwf СЧЕТЧИК Delay_2 decfsz COUNTER,f перейти к Delay_2 decfsz TEMP1,f перейти к Delay_1 вернуть цифры ; Преобразует значение TEMP в две однозначные цифры — TENS и TEMP. clrf ДЕСЯТКИ movlw d'10' Петля incf ДЕСЯТКИ,f subwf TEMP,f СТАТУС btfss, 0 перейти к единицам перейти к петле Единицы decf ДЕСЯТКИ,f addwf TEMP,f вернуть Чтение_Порт ; Посмотрите, замкнут ли переключатель movlw d'127' movwf ПОРТ iorwf ТРЕВОГА,0 ; добавить бит тревоги movwf ПОРТБ ; Установите порт B на высокий уровень СТАТУС bsf,5 ; Выберите банк 1 (01) movlw b'01111111' моввф ТРИСА ; Установите порт A в качестве входа, RA7 = выход movlw b'00111111' моввф ТРИСА ; Установите RA6 на выход СОСТОЯНИЕ БКФ,5 ; Возврат в банк 0 (00) bcf PORTA,6 ; Низкий уровень на RA6 movlw d'10' вызов Delay_0 ; Ждать ПОРТ movfw ; Читать контакты ПЕРЕКЛЮЧАТЕЛЬ СТАТУС bsf,5 ; Выберите Банк 1 movlw b'01111111' моввф ТРИСА ; Установите порт A на вход movlw b'01110000' моввф ТРИСА ; Установите porta,0,1,2,3 на выход СОСТОЯНИЕ БКФ,5 ; Вернуться в банк 0 movlw b'00101111' ; RA5 обычно равен 0 иwf ПЕРЕКЛЮЧАТЕЛЬ,f ; Переключатель возвращает значение от 0 до 47 вернуть Тревога incf ТАЙМЕР,f movfw TIMER_LIMIT ; По умолчанию 45 минут. xorwf ТАЙМЕР,0 СТАТУС БТФСК, 2 СИГНАЛИЗАЦИЯ БКФ, 7 ЧАСОВ xorwf HOURS_A,0 СТАТУС БТФСС, 2 вернуть мовфв МИНУТ xorwf MINUTES_A,0 СТАТУС БТФСС, 2 вернуть мовфв AMPM xorwf AMPM_A,0 СТАТУС БТФСС, 2 вернуть БСФ СИГНАЛИЗАЦИЯ,7 CLRF ТАЙМЕР вернуть Add_Second incf LIMIT,f ИСПРАВЛЕНИЕ xorwf ПРЕДЕЛ, 0 СТАТУС БТФСС, 2 вернуть incf СЕКУНД,f CLRF LIMIT вернуть Летнее время ;------------------------------------- Регулировка перехода на летнее время btfss ДНЕВНОЙ СВЕТ,0 ; Бит 0 установлен = включен дневной свет вернуть movlw d'1' ; Проверить на воскресенье xorwf ДЕНЬ НЕДЕЛИ,0 СТАТУС БТФСС, 2 вернуть movlw d'3' ; Отрегулируйте дневной свет в 3 часа ночи xorwf ЧАСОВ,0 СТАТУС БТФСС, 2 вернуть btfsc AMPM,0 ; Отрегулируйте дневной свет, если AM вернуть movlw d'3' xorwf МЕСЯЦ,0 СТАТУС БТФСС, 2 перейти к MinusHour btfss ДНЕЙ,3 ; Бит 3 должен быть установлен на второе воскресенье. вернуть btfsc ДНЕВНОЙ СВЕТ,1 ; Бит 1 установлен = коррекция выполнена (март) вернуть incf ЧАСЫ,f bsf ДНЕВНОЙ СВЕТ,1 ; Исправление сделано вернуть MinusHour ;---------- Вычесть 1 час в 1-е воскресенье ноября movlw d'11' xorwf МЕСЯЦ,0 СТАТУС БТФСС, 2 вернуть btfss ДНЕВНОЙ СВЕТ,1 ; Бит 1 установлен = Выполнить коррекцию вернуть decf ЧАСЫ,f ДНЕВНОЙ СВЕТ,1 ; Бит 1 очищен = коррекция выполнена вернуть Отображать ; -------------------- Данные дисплея ----------------------- clrf AMPM_LED ; AMPM отключен movlw h'21' xorwf FSR,0 СТАТУС БТФСС, 2 перейти к $ +3 бтфск AMPM, 0 bsf AMPM_LED,7 ; Добавить свет AMPM (время) мовлв ч'23' xorwf FSR,0 СТАТУС БТФСС, 2 перейти к $ +3 btfsc AMPM_A,0 bsf AMPM_LED,7 ; Добавить индикатор AMPM (сигнализация) movfw INDF ; Получить данные сотен ТЕМП моввф звонить цифры бтфсс ДЕСЯТКИ,0 перейти к Ones_Hours movfw ДЕСЯТКИ ; Светодиодный индикатор на 10 часов вызов Выход movlw d'14' iorwf AMPM_LED,0 ; Добавьте свет AMPM, если время или будильник movwf ПОРТ Задержка вызова Ones_Hours ТЕМП мовфв вызов Выход movlw d'13' iorwf AMPM_LED,0 ; Добавьте свет AMPM, если время или будильник movwf ПОРТ Задержка вызова вкл FSR,f movfw INDF ТЕМП моввф звонить цифры ДЕСЯТКИ вызов Выход movlw d'11' iorwf AMPM_LED,0 ; Добавьте свет AMPM, если время или будильник movwf ПОРТ Задержка вызова ТЕМП мовфв вызов Выход movlw d'7' iorwf AMPM_LED,0 ; Добавьте свет AMPM, если время или будильник movwf ПОРТ Задержка вызова decf FSR,f вернуть Ждать ; Подождите, пока переключатели не разомкнутся вызов дисплей вызов Read_Port movlw d'15' ; Переключатели открыты в рабочем режиме ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСК, 2 вернуть movlw d'47' ; Переключатели открыты в программном режиме ПЕРЕКЛЮЧАТЕЛЬ xorwf, 0 СТАТУС БТФСК, 2 вернуть перейти Подождите Increment_Pointer incf FSR,f ; Увеличение указателя на 2 шага вкл FSR,f movlw h'2f' xorwf FSR,0 СТАТУС БТФСС, 2 вернуть movlw h'21' моввф ФСР ; Установите указатель на отображение времени вернуть конец ------------------------- Скомпилированный шестнадцатеричный код ---------------------- ---- :0200000059287D :08000800B700030EB12DA :10001000A80A3C302806031D5328A801A20A122171 :100020003C302206031D5328A201A10A2E212621BD :100030000D302106031D1E28A101A10A0C30210646 :10004000031D5328AB0AAB102B185328A60A25080A :1000500097202606031D3C28A601A60AA50A0D30F6 :100060002506031D3C28A501A50AAD0A05302D066D :10007000031D3C28AD01AD0AA70A08302706031D61 :100080004328A701A70A02302506031D53281D3067 :1000

606031D532804302D0603195328033068 :1000A000A500A601A60A0B11390E8300B70E370E64 :1000B00001603130030860070308500811616 :1000C0008111011083120310031183108B160B1181 :1000D0008B1707309F000230A1003830A200063095 :1000E000A3001E30A4000330A5000730A600013095 :1000F000A700A801AB012D30AA00A901AC01023074 :10010000AD001230AE00BB01BF01BD01C001213006 :1001100084000F30B800A528820740347934243495 :1001200030341934123402347834003410348207F5 :10013000003420341E3420341F3420341F34203443 :1001400020341F3420341F3420344E21FA200E3046 :100150003806031DAD28213084002E303806031DDB :10016000B328213084000D303806031DB9287E21C4 :1001700089212D303806031DBF287E2189212B308F :100180003806031DC9287E21800A0D300006031998 :1001

00127303806031DD9287E21840A800A71 :1001A0003C30000603198001283004060319A80119 :1001B0008403073038060319BB130B303806031DC0 :1001C000A528BB17BF01A5288C203B04860008008A :1001D0001930BA00A000A00BEB28BA0BEA280800DF :1001E000B6010A30B60AB502031CF728F228B60396 :1001F000B50708007F3085003B04860083167F30FA :1002000085003F308500831205130A30E920050878 :10021000B80083167F3085007030850083122F3040 :10022000B8050800BF0A2A083F060319BB132108B6 :100230002306031D080022082406031D08002B08BE :1002400021D0800BB17BF010800BD0A2E08C0 :100250003D06031D0800A80ABD0108002C1C08006B :1002600001302706031D080003302106031D080086 :100270002B18080003302506031D4529A61D08007C :10028000AC180800A10AAC1408000B302506031DA9 :1002

800AC1C0800A103AC100800C00121300C :1002A0000406031D55292B18C01723300406031D0F :1002B0005B292918C0170008B500F020361C6629F4 :1002C0003608E4200E3040048500E8203508E4209C :1002D0000D3040048500E820840A0008B500F020B5 :1002E0003608E4200B3040048500E8203508E4207F :1002F000073040048500E820840308004E21FA20DE :100300000F303806031

2F3038060318B :100310007E29840A840A2F300406031D0800213038 :04032000840008004D :02400E00103F61 :00000001FF

Меню

Цифровые часы с изображением

Подробнее

Эта схема основана на проекте цифровых часов Дэна Мэтьюза, опубликованном компанией Microchip.

К счастью и благодаря Денису Кроули, оригинальная программа для PIC (программируемого контроллера прерываний) 16C54 была адаптирована и может использоваться с более современным PIC, 16F84A, с сохранением той же схемы.

Мы внесли некоторые аппаратные изменения в схему, сделав ее еще проще.
Мы также добавили дополнительный источник энергии с батареей; в случае, если свет гаснет, токи точного времени не теряются.
Эта схема очень маленькая, поэтому мы можем использовать ее как часы на прикроватной тумбочке или как офисные часы, не занимая слишком много места.
Подготовленная нами печатная плата состоит из двух панелей, расположенных в виде «сэндвича»; в некоторых случаях трассы располагаются довольно близко друг к другу, поэтому следует быть внимательным при изготовлении печатной платы и выполнении сварки.
Сначала мы рассмотрим исходную схему.

Схема состоит из PIC, дисплеев, кварцевого генератора, нескольких сопротивлений и переключателей настройки.
Мы предлагаем другую схему.Изготовлен из двух наложенных друг на друга панелей.

На одной из панелей размещаем визуализацию: дисплеи.
На другой кладем остальные компоненты, все, кроме трансформатора и аккумулятора.

Это будет схема панели номер один.

Печатная плата.

Мы разработали третий разъем (разъем номер три вверху справа), оставив вам возможность подключить трансформатор и аккумулятор к третьей панели.Мы не разрабатывали эту последнюю панель.
Выпрямитель и конденсатор С6 (1000мкФ) идут на «нижнюю» грань. Обратите внимание, что имя и значение идут наоборот.
Теперь посмотрим на схему панели 2, той, что с визуализацией дисплеев.

У нас есть два разъема для соединения основной панели, панели №1, с дисплеями. Дизайн панели номер 2 основан на ширине дисплеев. Каждый дисплей имеет ширину 12 миллиметров

Реальные размеры 53×38 миллиметров, что на самом деле немного больше, чем занимают дисплеи.
Помните, что схема и плата должны находиться в одной папке и иметь одинаковое имя, только менять расширение на .sch для схемы и на .brd для платы, таким образом обе будет признан и связан Орлом.
Несколько важных моментов, на которые следует обратить внимание:
Мы удалили транзисторы оригинальной конструкции (2N5401) и резисторы, расположенные в их основаниях. Этим мы упростили конструкцию, но резисторы с R1 по R8 должны быть не менее 150 Ом.С резисторами 220 Ом и «kingbright sc52-11srwa» мы добились более чем достаточной яркости дисплея, чтобы видеть в ярко освещенном помещении.
Если вы собираетесь использовать часы на прикроватной тумбочке, желательно увеличить номинал резисторов, чтобы часы не мешали вам в темноте. Мы также удалили переключатель, который соединял вывод MCLR интегральной схемы с землей.
Переключатель устанавливает час на 12:00, что является временем по умолчанию, которое вы видите, когда часы включены.
Файл для скачивания сжат, для его распаковки необходимо ввести пароль: www.kemisa.es
Актуальная версия кода программы V1.

Шестнадцатеричный код — это программа, которую вы должны выгравировать в микроконтроллере 16F873A, что необходимо для работы схемы.

Если вы не знаете, как программировать микроконтроллеры, нажмите здесь.

Если вы не знаете, как сделать печатную плату, нажмите здесь.

тактовый генератор — МикроЭлектроника

3.10 Тактовый генератор

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

Как видно на рисунке ниже, тактовый сигнал может генерироваться как внешним, так и внутренним встроенным генератором.Внешний генератор встроен в микроконтроллер и подключен к выводам OSC1 и OSC2. Он называется «внешним», так как подключается к внешним компонентам, таким как кварцевый кристалл, керамический резонатор или цепь резистор-конденсатор. Режим генератора выбирается битами слова конфигурации, загружаемого в микроконтроллер при программировании. Внутренний генератор состоит из двух отдельных внутренних генераторов: Генератор HFINTOSC представляет собой высокочастотный внутренний генератор, работающий на частоте 8 МГц.Микроконтроллер может использовать тактовый сигнал, сгенерированный на этой частоте или после деления в прескалер. Генератор LFINTOSC представляет собой низкочастотный внутренний генератор, работающий на частоте 31 кГц. Генерируемые им часы используются для сторожевого таймера и времени включения, но их также можно использовать в качестве часов для работы всего микроконтроллера. Бит выбора системных часов (бит SCS) регистра OSCCON используется для выбора между внешним и внутренним генератором.

ОСККОН Регистр

Регистр OSCCON используется для выбора и управления тактовым генератором и тактовой частотой.Он содержит следующие биты: биты выбора частоты (IRCF2, IRCF1, IRCF0), биты состояния генератора (HTS, LTS) и биты управления системными часами (OSTA, SCS). IRCF2-0 — Биты выбора частоты внутреннего генератора. Комбинация этих трех битов определяет частоту предделителя, следовательно, тактовую частоту внутреннего генератора.
IRCF2 IRCF1 IRCF0 ЧАСТОТА ОСК.
1 1 1 8 МГц HFINTOSC
1 1 0 4 МГц HFINTOSC
1 0 1 2 МГц HFINTOSC
1 0 0 1 МГц HFINTOSC
0 1 1 500 кГц HFINTOSC
0 1 0 250 кГц HFINTOSC
0 0 1 125 кГц HFINTOSC
0 0 0 31 кГц LFINTOSC
OSTS — Тайм-аут запуска генератора Бит состояния указывает, какой источник синхронизации используется в данный момент.Он доступен только для чтения.
  • 1 — Используется внешний тактовый генератор.
  • 0 — Используется один из внутренних тактовых генераторов (HFINTOSC или LFINTOSC).
HTS — HFINTOSC Бит состояния (8 МГц — 125 кГц) показывает, стабилен ли высокочастотный внутренний генератор.
  • 1 — HFINTOSC работает стабильно.
  • 0 — HFINTOSC нестабилен.
LTS — LFINTOSC Стабильный бит (31 кГц) указывает, стабилен ли низкочастотный внутренний генератор.
  • 1 — LFINTOSC работает стабильно.
  • 0 — LFINTOSC нестабилен.
SCS — бит System Clock Select выбирает генератор, который будет использоваться в качестве источника тактового сигнала.
  • 1 — В качестве источника тактового сигнала используется внутренний генератор.
  • 0 — В качестве источника тактового сигнала используется внешний генератор. Режим генератора устанавливается битами в конфигурационном слове, записываемом в память микроконтроллера в процессе программирования.

РЕЖИМЫ ВНЕШНИХ ЧАСОВ

Внешний генератор можно настроить на работу в нескольких различных режимах, что также означает, что он может работать на разных скоростях и использовать разные компоненты для стабилизации частоты.Режим работы выбирается в процессе записи программы в микроконтроллер. Прежде всего, необходимо запустить программу на ПК, чтобы использовать ее для программирования. В данном случае это программа PICflash. Нажмите на поле осциллятора и выберите нужный осциллятор из выпадающего списка. Информация об этих настройках автоматически сохраняется в Config Word. В процессе программирования микроконтроллера биты конфигурационного слова записываются в специальные регистры ПЗУ, недоступные пользователю.На основе этих битов микроконтроллер «знает», что делать, даже если это явно не указано в программе. Режим работы генератора выбирается после завершения написания и компиляции программы.
ВНЕШНИЙ ГЕНЕРАТОР В РЕЖИМЕ ЕС
Внешний тактовый генератор, установленный в режим EC, использует независимый внешний генератор в качестве источника тактового сигнала. Максимальная частота этого тактового сигнала ограничена 20 МГц. Преимущества внешнего генератора при настройке на работу в режиме EC:
  • Независимый внешний источник синхронизации подключен к входу OSC1, а OSC2 доступен как ввод-вывод общего назначения;
  • Возможна синхронизация работы микроконтроллера с остальной бортовой электроникой;
  • В этом режиме микроконтроллер начинает работу сразу после подачи питания.Для стабилизации частоты не требуется временная задержка; и
  • Временная приостановка работы внешнего источника тактового сигнала автоматически приведет к остановке работы микроконтроллера, при этом все данные останутся нетронутыми. После перезапуска внешнего генератора микроконтроллер продолжает работу как ни в чем не бывало.
ВНЕШНИЙ ГЕНЕРАТОР В РЕЖИМАХ LP, XT ИЛИ HS
Внешний генератор в режимах LP, XT и HS использует внешний генератор внутри микроконтроллера в качестве источника тактового сигнала.Тактовая частота зависит от кварцевого или керамического резонаторов, подключенных к контактам OSC1 и OSC2. В зависимости от рабочей частоты используемого компонента выберите один из следующих режимов:
  • Режим LP — (Низкая мощность) используется только для низкочастотного кварцевого кристалла. Этот режим предназначен для управления только кварцевыми кристаллами с частотой 32,768 кГц, которые обычно встраиваются в кварцевые часы. Их легко узнать по небольшим размерам и специфической цилиндрической форме. Потребляемый ток — наименьший из трех режимов.
  • Режим XT используется для кварцевых резонаторов промежуточной частоты до 8 МГц. Потребляемый ток является средним из трех режимов.
  • Режим HS — (High Speed) используется для высокочастотных кварцевых кристаллов свыше 8 МГц. Потребляемый ток самый высокий из трех режимов.
Керамические резонаторы в режиме XT или HS
Керамические резонаторы по своим свойствам очень похожи на кристаллы кварца и поэтому подключаются таким же образом.В отличие от кристаллов кварца, они дешевле, а генераторы на их основе имеют несколько худшие характеристики. Они используются для тактовых частот в диапазоне от 100 кГц до 20 МГц.
ВНЕШНИЙ ГЕНЕРАТОР В РЕЖИМАХ RC И RCIO
Компоненты для стабилизации частоты, безусловно, очень полезны, но иногда ненужны. В большинстве случаев генератор может работать на частотах, которые точно не определены, поэтому установка таких компонентов является пустой тратой денег. Самым простым и дешевым решением здесь является использование одного резистора и одного конденсатора для работы генератора.Есть два режима, в которых используются эти два компонента:

Режим дистанционного управления. Когда внешний генератор настроен на работу в RC-режиме, вывод OSC1 должен быть подключен к RC-цепи, как показано на рисунке справа. Вывод OSC2 выводит частоту RC-генератора, деленную на 4. Этот тактовый сигнал может использоваться для калибровки, синхронизации или других приложений.

Режим RCIO. Аналогично, RC-цепь подключается к контакту OSC1. На этот раз доступный вывод OSC2 используется в качестве дополнительного вывода ввода-вывода общего назначения.

В обоих случаях рекомендуется использовать компоненты, как показано на рисунках. Частота такого осциллятора рассчитывается по формуле f = 1/T, в которой:
  • f = частота [Гц];
  • T = R * C = постоянная времени [с];
  • R = сопротивление резистора [Ом]; и
  • C = емкость конденсатора [Ф].

РЕЖИМЫ ВНУТРЕННИХ ЧАСОВ

Схема внутреннего генератора состоит из двух отдельных генераторов, которые можно выбрать в качестве источника системного тактового сигнала: Генератор HFINTOSC откалиброван на заводе и работает на частоте 8 МГц.Его частоту можно точно настроить из программного обеспечения, используя биты регистра OSCTUNE. Генератор LFINTOSC не откалиброван на заводе и работает на частоте 31 кГц. Как и внешний генератор, внутренний генератор также может работать в нескольких режимах. Режим работы выбирается так же, как и для внешнего генератора — с помощью битов слова конфигурации. Другими словами, все настройки выполняются из программного обеспечения до записи программы в микроконтроллер.

ВНУТРЕННИЙ ГЕНЕРАТОР В РЕЖИМЕ INTOSC В этом режиме вывод OSC1 доступен как ввод-вывод общего назначения, а вывод OSC2 выводит выбранную частоту внутреннего генератора, деленную на 4.

ВНУТРЕННИЙ ГЕНЕРАТОР В РЕЖИМЕ INTOSCIO В этом режиме оба контакта доступны как контакты ввода-вывода общего назначения.

НАСТРОЙКИ ВНУТРЕННЕГО ГЕНЕРАТОРА

Внутренний генератор состоит из двух отдельных цепей. 1. Высокочастотный внутренний генератор HFINTOSC откалиброван на заводе и работает на частоте 8 МГц.Он подключен к постскейлеру (делителю частоты). Постделитель позволяет этому генератору выводить тактовые импульсы на одной из семи частот. Выбор частоты выполняется в программном обеспечении с использованием битов IRCF2, IRCF1 и IRCF0 регистра OSCCON. Генератор HFINTOSC активируется выбором одной из семи частот (от 8 МГц до 125 кГц) и установкой бита источника системных тактовых импульсов (SCS) в регистре OSCCON. Как видно на рисунке ниже, все настройки выполняются с помощью битов регистра OSCCON.2. Генератор низких частот LFINTOSC не калиброван и работает на частоте 31 кГц. Он включается выбором этой частоты с помощью битов регистра OSCCON и установкой бита SCS того же регистра.

РЕЖИМ ЗАПУСКА ДВУХСКОРОСТНЫХ ЧАСОВ

Режим запуска двухскоростных часов позволяет микроконтроллеру обеспечить дополнительную экономию энергии, когда он работает в спящем режиме. О чем это все? При настройке на работу в режимах LP, XT или HS внешний генератор будет отключаться при переходе в спящий режим для снижения общего энергопотребления устройства.При выполнении условий пробуждения микроконтроллер не сразу начнет работать, поскольку ему необходимо дождаться стабилизации тактовой частоты. Микроконтроллеру требуется ровно 1024 импульса, чтобы продолжить выполнение программы. После подсчета 1024 импульсов и выполнения лишь нескольких программных инструкций микроконтроллер обычно снова переводится в спящий режим. Это означает, что большая часть времени, а также большая часть энергии, подаваемой от батарей, тратится впустую. Эта проблема решается использованием внутреннего генератора для выполнения программы во время подсчета этих 1024 импульсов.Как только частота внешнего генератора станет стабильной, он автоматически возьмет на себя «ведущую роль». Весь процесс активируется установкой одного бита слова конфигурации. Чтобы запрограммировать микроконтроллер таким образом, необходимо выбрать в программном обеспечении опцию Int-Ext Switchover.

АВАРИЙНЫЙ МОНИТОР ЧАСОВ

Как следует из названия, Fail-Safe Clock Monitor (FSCM) отслеживает работу внешнего генератора и позволяет микроконтроллеру продолжать выполнение программы, даже если внешний генератор по какой-либо причине выходит из строя.В этом случае его место занимает внутренний осциллятор. Отказоустойчивый монитор часов обнаруживает сбой, сравнивая внутренние и внешние источники часов. Если для поступления тактового сигнала внешнего генератора требуется более 2 мс, источник тактового сигнала будет автоматически переключен. Внутренний генератор возьмет на себя роль основного источника тактовой частоты, работа которого управляется битами регистра OSCCON. Когда бит OSFIE в регистре PIE2 установлен, будет сгенерировано прерывание. Системные часы будут продолжать поступать от внутреннего генератора до тех пор, пока микроконтроллер успешно не перезапустит внешний генератор и не переключится обратно на внешний источник часов.Этот модуль также активируется путем изменения слова конфигурации непосредственно перед началом процесса программирования. В этом примере это делается путем выбора опции Fail-Safe Clock Monitor.

OSCTUNE Регистр

Изменения в регистре OSCTUNE влияют на частоту HFINTOSC, но не на частоту LFINTOSC. Во время работы микроконтроллера нет индикации того, что произошел сдвиг частоты. TUN4 — TUN0 Биты настройки частоты. Комбинируя эти пять бит, частота генератора 8 МГц сдвигается.Таким образом, сдвигаются и частоты, полученные его делением в постскейлере.
ТУН4 ТУН3 ТУН2 ТУН1 ТУН0 ЧАСТОТА
0 1 1 1 1 Максимальный
0 1 1 1 0
0 1 1 0 1
0 0 0 0 1
0 0 0 0 0 Калибровка
1 1 1 1 1
1 0 0 1 0
1 0 0 0 1
1 0 0 0 0 Минимум

.

Добавить комментарий

Ваш адрес email не будет опубликован.