Автор Тема: Часы на микроконтроллере или первый блин не комом, а вот третий...  (Прочитано 14756 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MrEagle

  • Знакомый
  • *
  • Сообщений: 45
  • Репутация: 0
  • Володя
  • Поблагодарили: 0
Здравствуйте все! Недавно начал изучать микроконтроллеры(пора бы уже, а то совсем отстал от жизни) ну и разумеется, параллельно и язык Си, т.к. увы, в школе у нас программирование было пару уроков, и то, на уровне выведения рисунка из звёздочек "*" на экран в QBasic. Немного получше в институте: Visual Basic и 8 лабораторных работ, но опять же почти никаких объяснений :( Но, не будем о грустном)))
В итоге пришлось додумывать и понимать самому, но оно к лучшему. Изучив статьи Спирита с известного сайта и ещё разные статьи и конструкции с других сайтов, решил сделать сам что-нибудь. Не знаю почему, но первая мысль, которая пришла в голову - часы! Сразу же "вымыслился" алгоритм работы. По моей задумке было 3 вложенных один в другой цикла For, каждый из которых отвечал за секунды, минуты и часы. Цикл секунд содержит в себе инкрементирование переменной секунд и задержку на 1000мс, повторяется от 0 до 60(или 59, не помню), и вложен с цикл минут, а минутный - в часовой. В общем, примерно принцип работы понятен. Если будет востребовано(сомневаюсь ;)), могу выложить и исходник. Всё ничего, но, как выяснилось позже, часы прилично спешат(по 1-2с за минуту). Поняв, что такая реализация в общем-то только чтобы поиграться, было решено переделать. Опять поиски в сети... Нашёл часы на основе системного таймера. То что надо!
Изучил код, рекомендации и прочее, начал писать свой код. Попутно, добавил в "тех. задание" меню настройки "всего, что нужно", будильник и календарь. Сегодня с обеда за CodeVision-ом и Proteus-ом, как итог - полурабочая программа и большое кол-во времени за поиском "неисправностей". Некоторые из них до сих пор не исправил :wall:. Пока не стал делать будильник и календарь.
Проблема вот: [ Вложение: Вам нельзя просматривать вложения ] Я, конечно, всё понимаю, но зачем 4 раза показывать время одновременно :ROFL:? А календарь тогда куда?)))
Во вложении папка clock3 - к компилятору, а остальные файлы к Протеусу.
Часы работают так:
Таймер с частотой 7.813 кГц  считает до 7811 импульсов(по совету с сайта взял), потом вызывает прерывание, выполняет инкрементирование переменной секунд (ss), сбрасывается и опять сначала... В бесконечном цикле крутится проверка состояния кнопки на PIND.3, которая отвечает за вход в "меню" настройки и условия для минут, часов, дней, месяцев и лет. Переход в меню последовательный:
текущее время->минуты->часы->будильник.минуты->будильник.часы->дни->месяцы->года->текущее время
За переход по пунктам меню отвечает кнопка Set. За вход в меню - как это ни странно, кнопка snooze(приготовил под будильник, но пришлось пока переназначить). При запуске часов сразу появляется меню настройки. Нажимаем Set раз 6-10(как повезёт) и появятся часы или ждём пока меню само пройдёт все пункты(около половины минуты). ;D
Помогите, кто чем может. Часы при некоторых попытках исправления кода то показывают 4 раза подряд одно и то же, то в режиме очень быстро бегущей строки, похоже, что только одну строку со временем.
Извините, уж, за такие неудобства. На удобство пользованием не претендую, да и многое ещё буду дорабатывать(если,конечно, оно в нынешнем варианте начнёт нормально работать).
Да, между первой(часы) и третьей(аналогично) конструкциями была вполне удачная попытка сделать простого робота(опять же в протеусе) отсюда и название темы.
Ух, вот расписал-то)) Надеюсь, меня не оштрафуют
« Последнее редактирование: 26 Февраля 2011, 02:08:47 от MrEagle »

Оффлайн ohmjke

  • Знакомый
  • *
  • Сообщений: 60
  • Репутация: 0
  • Алексей
  • Поблагодарили: 0
Странная херь, если закомментить настройку часов и минут будильника, то все ок.
Чет я думал, думал, почему так, ничего не понял... Бред какой-то. Пробовал менять названия переменных/массивов - безрезультатно.
Если выяснишь, в чем дело, отпишись, интересно будет узнать из-за чего так.
« Последнее редактирование: 28 Февраля 2011, 22:32:35 от ohmjke »

Оффлайн Althair

  • Старожил
  • *****
  • Сообщений: 1766
  • Репутация: 11
  • Поблагодарили: +348
Имхо, код индусский. Слишком много... э... гм... "байтодвижений". Озадачусь на днях, перекопаю, хотя тут проще свое написать...

Оффлайн MrEagle

  • Знакомый
  • *
  • Сообщений: 45
  • Репутация: 0
  • Володя
  • Поблагодарили: 0
Ну, я же говорю, почти первый код))) Осваиваю Си около недели, может двух.

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

и добавил...
Эх. Боюсь, из-за прерывания на таймер все проблемы(((
« Последнее редактирование: 01 Марта 2011, 17:26:55 от MrEagle »

Оффлайн L0ki

  • Старожил
  • *****
  • Сообщений: 1740
  • Репутация: 7
  • Поблагодарили: +30
код индусский
Гош, "индусский" код еще и компилеры иной раз таааакой  :o делают....
примерчик порожденный некрософт вижуал це:
mov eax,0
mov eax,0
(видимо для надежности два раза  :D )
Посему я ретроград и с МК предпочитаю ассемблер.

Оффлайн MrEagle

  • Знакомый
  • *
  • Сообщений: 45
  • Репутация: 0
  • Володя
  • Поблагодарили: 0
Прошил контроллер. Вроде как той версией, что прикреплена к предыдущему сообщению. В Протеусе экран моргал. На реальном контроллере заметно, только если долго и усиленно всматриваться.

Оффлайн ohmjke

  • Знакомый
  • *
  • Сообщений: 60
  • Репутация: 0
  • Алексей
  • Поблагодарили: 0
А мне как-то не нравятся эти ЖК индикаторы. Всегда хотел часы с большими семисегментными светодиодными индикаторами зеленого цвета :P
Пока что набросал такую прогу - [ Вложение: Вам нельзя просматривать вложения ] Будильник, дата и т.д. не нужны. Важно наличие секунд. Вроде бы все нормально работает, но есть проблемка. Инкрементирование секунд происходит в теле прерывания от таймера при совпадении, который считает с частотой 62500Гц. Но более менее нормальная точность получается только если в регистр OCR1A записать 50000. Если же поставить 62500, как по идее и должно быть, то время идет медленно :o
Никак не вкурю в чем дело, может, у кого-нибудь было что-то подобное?
Схема в Протеусе тоже в архиве.
« Последнее редактирование: 07 Марта 2011, 09:50:31 от ohmjke »

Оффлайн MrEagle

  • Знакомый
  • *
  • Сообщений: 45
  • Репутация: 0
  • Володя
  • Поблагодарили: 0
Что-то у меня не открывает. Пишет, что версия у меня старая. 7.4 SP3.
А по поводу отставания - среди диагностических сообщений нет сообщения о большой загрузке процессора? Если да, то в неправильности хода часов нет ничего удивительного. (там ещё написано, что эмуляция не идёт в реальном времени)

и добавил...
Насчёт ЖК - сделал на нём, т.к. проще подключать. Просто в учебных целях. А вообще, я бы сделал на плате, из синих сверхъярких светодиодов аналог семисегментного индикатора. Причём, с цифрами, сантиметров 15 в высоту, чтобы было хорошо видно)))
« Последнее редактирование: 07 Марта 2011, 20:51:29 от MrEagle »

Оффлайн ohmjke

  • Знакомый
  • *
  • Сообщений: 60
  • Репутация: 0
  • Алексей
  • Поблагодарили: 0
Насчет версии, у меня 7.7 SP2, так что действительно старая у тебя :)
Диагностические сообщения имеются в виду эти? - [ Вложение: Вам нельзя просматривать вложения ] И то я их сам вывел на экран. А так никаких сообщений не выскакивало. Загрузка процессора(которая написана в нижней строке радом с кнопками пуск/пауза...) в среднем 65-75%. Хотя у меня ещё стоит отдельная программа, не имеющая к протеусу никакого отношения, в ней написано, что загрузка 25-30% :o
Где может быть написано, что эмуляция не идёт в реальном времени?
В принципе я так и думал, что это proteus шалит, надеюсь с реальной тинькой все OK будет.
И насчет индикатора, я тоже про примерно такую высоту говорил, но только на уже готовых индикаторых. Хотя, конечно, на светодиодах отдельных вышло бы дешевле, я так думаю.

Оффлайн MrEagle

  • Знакомый
  • *
  • Сообщений: 45
  • Репутация: 0
  • Володя
  • Поблагодарили: 0
Да, именно эти. И сообщение о процессоре и эмуляции тоже там. Но, увы, списать неправильный ход часов на Протеус не удасться((( А как же хотелось верить, что проблема только в этом ;)

и добавил...
Примерно так: [ Вложение: Вам нельзя просматривать вложения ]
И, похоже, что "большая" нагрузка процессора это нормально. На Atom330: [ Вложение: Вам нельзя просматривать вложения ]
А вообще, странновато, т.к. на ББ при той же реальной загрузке процессора, загрузка в Протеусе около 60-70%
« Последнее редактирование: 09 Марта 2011, 06:52:24 от MrEagle »

Оффлайн Mic Dragon

  • Прохожий
  • Сообщений: 2
  • Репутация: 0
  • Михаил
  • Поблагодарили: 0
[ Вложение: Вам нельзя просматривать вложения ]

Раз уж зашел разговор о часах, выложу для желающих свой проект. Полностью рабочий.
Сами часы собраны на отдельной микросхеме Philips PCF8593T с кварцем на 32,768 кгц и резервной батарейкой CR2032, для работы даже при отключенной сети. (Для разработки с нуля сейчас впрочем предпочел бы DS1338.) Процессор Atmega48 соединяется с часовой микросхемой по TWI/I2C. Плюс прерывание раз в секунду, по этому же сигналу удобно калибровать ход. Индикация на 4 семисегментниках (часы-минуты), драйвер индикатора на сдваиговых регистрах 74AC164 (именно AC как наиболее мощных по выходу). Предусмотрены регулировка яркости (ШИМ, ключ на мощном полевике) и контроль напряжения батареи. Управление - 4 кнопки, питание - импульсный стабилизатор на 5 вольт. Пока выкладываю программу и печать (P-CAD8), завтра выложу схему и инструкцию (они у меня на работе).

Оффлайн xar

  • Старожил
  • *****
  • Сообщений: 5224
  • Репутация: 16
  • Ренат
  • Поблагодарили: +271
хыхы. а я думал я один такой извращенец и часы делаю xD
тута мой проектик )

Оффлайн MrEagle

  • Знакомый
  • *
  • Сообщений: 45
  • Репутация: 0
  • Володя
  • Поблагодарили: 0
Хах) Я теперь ещё на светодиодах делаю. Циферблат - 12 светодиодов, в центре семисегментные индикаторы - минуты. ;D Так же есть желание сделать на ИВ-22(жаль, из ИН-ок только один штук ИН-12 :()

 

Похожие темы

  Тема / Автор Ответов Последний ответ
43 Ответов
34712 Просмотров
Последний ответ 19 Мая 2015, 08:34:51
от xar
0 Ответов
5742 Просмотров
Последний ответ 22 Декабря 2014, 22:22:25
от Althair
140 Ответов
58684 Просмотров
Последний ответ 11 Апреля 2017, 23:48:47
от W.GARIK