Jump to content
maks2008

Часы На Pic

Recommended Posts

Здравствуйте! Я не давно начал интерисоваться pic - микрконтролерами, и решил попробовать сделать часы вот схема :

01.gif

И возникла вот такая проблема : здесь программа написана на два индикатора а я поставил один все работает, только две последние цифры перевернуты вверх дном .

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

Вот программа

Заранее спасибо :)

Edited by maks2008

Share this post


Link to post
Share on other sites

То что у вас приклеплено, это код (прошивка). Показывать надо исходник.

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

Так что показывайте исходник.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

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

Подробнее

отец не разрешает делать апаратно, токо программно через дизассм.

Edited by maks2008

Share this post


Link to post
Share on other sites

Для начала надо сделать функцию динамического димической индикации. Что бы можно было отображать данные.

Share this post


Link to post
Share on other sites
                     

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

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

:) Странно... Тогда он хочет что-бы вы этому научился :) В этом случае будет не спрортивно подсказывать :) В этом случае это ваш бой и вам его выигрывать... Боюсь что не будет это так просто... Возможно будет быстрее написать снова с нужным розположением... Ну или если всёже - рекомендую найти кусок кода который выводит данные на дисплей и вместо него поставить джамп на свободное место в памяти и написать свой кусочек...

Share this post


Link to post
Share on other sites

Если человек хочет научиться - то надо подсказывать ему, но не писать код. А просто направлять.

Share this post


Link to post
Share on other sites

Блин, кто бы меня направил :) Сколько я уже с этой индикацией мучаюсь! Алгоритм часов я составил, да там ничего сложного-то нет, но вот как заставить циферки бегать, я ума не приложу (точнее, как заставить МК гонять эти циферки). Господа модераторы, может направите толпу новичков на путь истинный, хотя бы скажите, где копать :) Давно хочу собрать часы, схем куча, но ведь гораздо интересней придумать самому, разобраться как работает.

Edited by Данила

Share this post


Link to post
Share on other sites

тут программа есть такая - PIC Simulator IDE, в ней есть дизассм. Не знаю правильно ли она это делает, вот то,что получилось clock.rar

Share this post


Link to post
Share on other sites

Надо разабратся что такое динмическая нидикация. Динмическая - значит подвижная. Это в свою очередь означает, что в еденицу времени горит только 1 сегмент. То что мы видим картинку, в виде нескольких символов, это илюзия. Вызвано это инертностью нашего зрения. Сейчас вам необходимо продумать как заставить гореть именно те пины которужны, в определеной последовательности. Возьмите ваш семисегмегметный индиватор, посмотрите на него. Возьмите батарейку, резистор и помучайте. Зажгите последовательно элементы цифр от 0 до 9. Запишите это дело на бумагу. Далее создайте таблицу, а затем функцию вывода данных.

Share this post


Link to post
Share on other sites

Это-то мы знаем, нам бы с программой помочь... Lexi, как это вообще делается, что бы цифры менялись каждую секунду, в зависимости от алгоритма программы? Хотя бы в двух словах :rolleyes:

Для тех кто не знает, что такое динамическая индикация:

post-50124-1217835543_thumb.png

Edited by Данила

Share this post


Link to post
Share on other sites

Саму индикацию осилили??

если да то все остальное давольно тупо...

у вас есть часы и минуты, так?

если да то далее, у вас есть таймеры и генератор тактовых импульсов (для пика) на кварце.

вот если так настроить таймер2 setup_timer_2(T2_DIV_BY_16,255,1);

то прерывание будет прерыване будет присходить каждые 4мс.

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

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

Share this post


Link to post
Share on other sites

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

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

Далее. настраиваешь таймер на генерацию прерывания каждые скажем 10мс, иил 1мс - это не очень важно, важно лишь что с этого можно было бы получить цифру ровно в 1с умножением на целое число.

так же тебе надо организовать из отсчетов таймера примерно 20мс - это получается обычным счетчиком который прибавляет 1 каждое срабатывание прерывания и достигнув некого значения сбрасывается и вызывает процедуру обновления индикатора в которой...

прибавляем номер текущего знакоместа (0-3 если оно больше 3 - сбрасываем в ноль) выбираем с памяти значение отображаемых данных (4 байта, в которых хранятся состояния сегментов индикаторов) соотв. знакоместу - устанавливаем это сочетание на выходе порта - сегмент горит. До этого нужно выключить все сегменты и переключить знакоместо на нужное, если не выключить - будет наблюдаться эффект тени на следующем знакоместе от предыдущего.

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

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

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

Share this post


Link to post
Share on other sites

в коде прошивки автор прописал адрес своего сайта,на нем можно посмотреть еще парочку проэктов.

Загрузил прошивку для эмуляции и наглядного просмотра, стало видно, что таблица символов часов расположена с адреса 046H по 04FH, таблица символов минут расположена с адреса 03СН по 045Н. По адресу 026Н происходит загрузка порта А, как раз тут и переключается динимическая индикация, по адресу 027H хранится символ загружаемый в порт В. Нужно разобратьсяс включением запятой, да и еще с кучей всего.

post-59513-1217916180_thumb.jpg

Edited by maks2008

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...