Часы с нуля, хотелось бы пройти все этапы реализации проекта

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Доброго всем дня!

Года два тому назад приобрел партию  крупных (высотой 7 см) семисегментных индикаторов с мыслью, что буду делать часы, а точнее переделаю какой-нибудь китайский конструктор часов с мелкими индикаторами. А тут недавно заинтересовался ардуинкой и решил начать делать часы на ардуино. Программированием я никогда не занимался, но жуть как интересно. Так на данный момент я располагаю arduino uno ( c чипом CH340G), модуль реального времени на DS3231 и индикаторы.

Начать хочу с изготовления индикаторов. Технических параметров на индикаторы нет. От 5 вольт засветить сегменты не получилось, скорее всего сегмент состоит из не менее трех  последовательно соединенных светодиодов. От 9 вольт сегмент засветился ток потребления 6,5 мА с токоограничивающим резистором на 330 ом. Цвет свечения - красный, индикатор с общим анодом.

Теперь первый вопрос к сообществу: какой выбрать способ реализации управления индикаторами?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

AR пишет:

Теперь первый вопрос к сообществу: какой выбрать способ реализации управления индикаторами?

 

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

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

DetSimen пишет:

AR пишет:

Теперь первый вопрос к сообществу: какой выбрать способ реализации управления индикаторами?

 

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

Юмор понятен, но я бы хотел вместо маёра использовать ардуино.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Можно и так. У ардуины даже, думаю, мозгов-то поболе будет.  Но исполнительности поменьше.  На каждый сегмент придётся транзистор городить. или одну ULN2003 на 7 сегментов. Полторы цыфры спаять, потом у Дуни ноги кончатся, надо будет еще что-нить городить, например PCF8574 перед ULN.

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

И надо было тему создавать в "Аппаратных вопросах", ведь готового проекта еще нет.  А в этой теме люди только хвастаюца. 

bwn
Offline
Зарегистрирован: 25.08.2014

Таки для начала решите, какую желаете индикацию (статическую али динамическую). От этого будет зависеть количество занятых пинов. Что в часах будет кроме часов? Чисто для часов, с динамической индикацией , ног Ардуины достаточно. Нужна она, модуль RTC и ключи для индикаторов. 

Ну и да, попросите модераторов тему перенести, нех ей пока в прожектах делать.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

AR пишет:
какой выбрать способ реализации управления индикаторами?
Альтернативный.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Благодарю всех откликнувшихся. Выбрал данную ветку форума с мыслью совместно пройти все шаги по организации проекта, т.е. и аппаратную и программную. Думаю это будет интересным и другим начинающим “бойцам”. Буду просить перенести тему в другую ветку форума.

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

AR пишет:

с мыслью совместно пройти все шаги по организации проекта, т.е. и аппаратную и программную.

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

AR пишет:

Думаю это будет интересным и другим

Боюсь, что ошибаешься.

bwn
Offline
Зарегистрирован: 25.08.2014

AR пишет:

Благодарю всех откликнувшихся. Выбрал данную ветку форума с мыслью совместно пройти все шаги по организации проекта, т.е. и аппаратную и программную. Думаю это будет интересным и другим начинающим “бойцам”.

Дело в целом хорошее, заводите например в "Общем" разделе тему типа "Чайник строит часики" (не глумлюсь), в первом посте даете преамбулу (его нельзя потом редактировать), а в следующих начинаете выкладывать наработки: распиновку индикатора, схему их объединения и управления и т.д. по шажкам. Говнеца конечно подкинут, не без этого, будете вести себя адекватно и помогут. Как то так. Сумеете сами довести до конца, уважуха, и пускай изначально это будет говнокод, лишь бы был рабочий, опыта наберетесь подредактируете.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Вижу свою ошибку, исправлюсь.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Отличный вариант как осуществить мою идею с созданием часов. Благодарю.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Есть специальные микросхемы - LED драйверы, например MBI5026 и другие. У них стабилизация тока внешним резистором, у 5026 от 5 до 90ма, частота до 25MHz и напряжение ключей до 17В. И никакого огорода из UNL и PCF.

samid2403
Offline
Зарегистрирован: 01.12.2017

Собирал часы, где в качестве индикаторов брал куски диодной ленты. Запитывал ленту от 12В, которые коммутировались через ULN2003. В конце концов скетч залил в атмегу8. Итого для часов понадобилось 1 атмега8, стабилизатор напряжения на 5В типа LM7805, кучка резисторов и пара конденсаторов, несколько кнопок для установки времени и модуль RTC. Так же куча терпения, чтоб спаять куски ленты в сегменты. Индикация динамическая.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Что я вижу в часах:

Четырех разрядный дисплей с несколькими режимами индикации

-часы и минуты

-минуты и секунды

-месяц и день

-температура

 

Кнопки управления

 

На передней панели

- кнопка переключения режимов индикации (сенсорная)

- кнопка отключения будильника (сенсорная)

 

На задней панели

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

 
bwn
Offline
Зарегистрирован: 25.08.2014

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

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

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

bwn
Offline
Зарегистрирован: 25.08.2014

Не, дело конечно ваше, но мне было бы лениво идти к часам, чтобы нажать кнопку и узнать сегодняшнее число или температуру, а потом не забыть нажать, чтобы начали время показывать. По обнулению секунд, если так хочется супер-мега-точного, то ройте в сторону синхронизации с сервером, а в обычной жизни расхождение на десяток секунд с реальным ни на что не влияет. ИМХО.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

AR пишет:

мне не нравится когда часы самостоятельно меняют режимы

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

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

DetSimen пишет:

чтоб в темноте своей яркостью по глазикам не били.

Мне нравиться такая самостоятельность ардуинки. Вот появилась еще одна функция. Изменение яркости свечения индикаторов в зависимости от отсвещенности.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

bwn пишет:

ройте в сторону синхронизации с сервером

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

bwn
Offline
Зарегистрирован: 25.08.2014

Нормальные DS3231 идут весьма точно.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

bwn пишет:

Нормальные DS3231 идут весьма точно.

Это прекрасно, вот и посмотрим как будет вести себя моя платка, покупал на Aliexpress а там возможно все.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

У меня возникла сложность с оформлением блок-схемы, нарисовал в VISIO и при сохранении в графический формат, изображение получается не “комильфо”. Буду искать другие возможности рисования схем.

 

А теперь про часы: явно не хватает ног у ардуинки по крайней мере динамик включить некуда и возник вопрос правильности использования аналоговых входов для работы с кнопками.

У меня есть один сдвиговый регистр 74HC595 можно его приспособить для работы с семью сегментами матриц и разделительных точек,  а для выбора разряда использовать четыре  вывода платы Arduino. Таким образом я освобождаю 4  цифровых выхода. Один под динамик и три для кнопок.

 
bwn
Offline
Зарегистрирован: 25.08.2014

Найдите тему "Работа с кнопками. В помощь новичку". Узнаете много нового и будете приятно удивлены. Вот не хочу напрямую подсказывать, надеюсь сами догадаетесь об альтернативном методе. В моих сообщениях намек был. 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Читаю читаю...."все придумано до нас" в пн скину готовое, часы барометр  термометр на 7 сегментный с самостоятельным переключение режимов, но без кнопок.

Вообще с каждым годом все больше возникает кризис идей :(

bwn
Offline
Зарегистрирован: 25.08.2014

andycat пишет:

Читаю читаю...."все придумано до нас" в пн скину готовое, часы барометр  термометр на 7 сегментный с самостоятельным переключение режимов, но без кнопок.

А смысл, если ТС хочет сам пройти весь путь, желание похвальное, а главное значительно повысит скил в схемотехнике и программировании (если дотянет). А готовое собрать - пойти, да купить китайский будильник рублей за двести и деньги и время сэкономишь. Но ведь скучно же. ИМХО.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Учиться можно и по чужим примерам, всегда в яндекс поиске первым словом пишу пример, например : 74hc595 на arduino.

Все равно придётся мозг включить, так как в реальной жизни / проектах комментариев нет и приходиться разбираться 

alex_r61
Offline
Зарегистрирован: 20.06.2012

AR пишет:

А теперь про часы: явно не хватает ног у ардуинки по крайней мере динамик включить некуда и возник вопрос правильности использования аналоговых входов для работы с кнопками.

 

Таким темпом и у М2560 ног не хватит, особенно если по чужим граблям ходить.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

AR пишет:

А теперь про часы: явно не хватает ног у ардуинки по крайней мере динамик включить некуда и возник вопрос правильности использования аналоговых входов для работы с кнопками.

 
можно все 5 кнопок подвесить на 1 аналоговый вход.  наморщи мозг чучуть. 
AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Я благодарен всем участникам дискуссии.

 

Наверное стоит все таки сказать, что я хотел бы научится программировать саму ардуинку и это главное. Т.е. хочю сделать часы не ради часов, хотя я их, по-любому, сделаю. Понимаю, что не каждому это дано, но желание есть,.Брать готовые скетчи и запускать их у меня уже получается, но вот что происходит на просторах кода как то не очень понятно. Поэтому идея сделать часы самому и является той самой интересной процедурой в понимании. Пусть я буду изобретать велосипед, но зато это будет мой велосипед) и естественно я не собираюсь ну уж прям совсем изобретать то что уже множество раз изобретено и наступать на грабли разбившие множество лбов ,  А форум мне нужен как помощник, с  “наставниками” многие вещи воспринимаются более доходчиво и ярко. Есть еще одна проблема - живу на Сахалине и доступ к элементной базе только через интернет магазины, а доставка длится месяцами. Поэтому весь процесс может затянутся на долгое время. Сейчас почитаю про LED драйверы - по-моему отличный вариант решения по части индикации для крупных индикаторов.

 

А пока  вообще  наверное надо собрать динамическую индикацию на маленьких LED индикаторах без наворотов и попытаться на них увидеть время.

 
alex_r61
Offline
Зарегистрирован: 20.06.2012

Работу с регистрами, динамическую и статическую индикацию можно освоить и без деталек. Достаточно Arduino IDE и Proteus.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

alex_r61 пишет:

Достаточно Arduino IDE и Proteus.

Вот подсказка про САПР отличная посмотрю.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

DetSimen пишет:

пропробуй это 

Буду сразу заказывать микросхемы LED драйверов для своих индикаторов.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Ура! Получил MBI5026GN, 16-и канальные светодиодные драйвера. Пока они шли разбирался с работой драйверов. По документации как бы все понятно.

А вот как прикрутить к ардуинке? Остановил свой выбор на функции последовательного вывода данных (побитно) shiftOut(). Собрал тестовую схемку.

Т,к.функция shiftOut() может передать 8 бит, а нам надо 64 бита то применяю ее четыре раза.

Тестовая работа драйверов получилась. На индикаторах в цикле отображаются по разрядно 0000 потом 1111 потом 2222 и т.д и т.п.  до 9999, потом цикл повторяется. Как бы по индикации мне все нравится.

// выыодит на индикаторы 0123456789 с псевдообнулением регистров с организацией функции DISP

int SDI = 10; // пин ардуинки выход данных на регистры LED драйвера
int CLK = 9;  // пин ардуинки выход синхроимпульсов на регистры LED драйвера
int LE = 8;   // пин ардуинки выход «защёлка» на регистры LED драйвера

 void setup() 
{

  pinMode(CLK, OUTPUT);
  pinMode(SDI, OUTPUT);
  pinMode(LE, OUTPUT);

  digitalWrite(LE, HIGH);
  
  DISP(0, 0, 0, 0); // работает функция DISP передаем в регистры 64 бита, псевдо сброс регистров, так на всякий случай (индикаторы ни чего не показывают) 
}

 void loop()
 {
 DISP(0b00111111, 0b00111111, 0b00111111, 0b00111111); // работает функция DISP передаем в регистры 64 бита (на индикаторах нули)
 delay(1000);
 DISP(0b00000110, 0b00000110, 0b00000110, 0b00000110); // работает функция DISP передаем в регистры 64 бита (на индикаторах единицы)
 delay(1000);
 DISP(0b01011011, 0b01011011, 0b01011011, 0b01011011); // .... 2
 delay(1000);
 DISP(0b01001111, 0b01001111, 0b01001111, 0b01001111); // .... 3
 delay(1000);
 DISP(0b01100110, 0b01100110, 0b01100110, 0b01100110); // .... 4
 delay(1000);
 DISP(0b01101101, 0b01101101, 0b01101101, 0b01101101); // .... 5
 delay(1000);
 DISP(0b01111101, 0b01111101, 0b01111101, 0b01111101); // .... 6
 delay(1000);
 DISP(0b00000111, 0b00000111, 0b00000111, 0b00000111); // .... 7
 delay(1000);
 DISP(0b01111111, 0b01111111, 0b01111111, 0b01111111); // .... 8
 delay(1000);
 DISP(0b01101111, 0b01101111, 0b01101111, 0b01101111); // .... 9
 delay(1000);
 }

// организуем функцию для работы с shiftOut
void DISP(byte segment_1, byte segment_2, byte segment_3, byte segment_4) 
{  
  shiftOut(SDI, CLK, MSBFIRST, segment_4); // 8 бит для 4-ого сегмента  
  shiftOut(SDI, CLK, MSBFIRST, segment_3); // 8 бит для 3-ого сегмента
  shiftOut(SDI, CLK, MSBFIRST, segment_2); // 8 бит для 2-ого сегмента
  shiftOut(SDI, CLK, MSBFIRST, segment_1); // 8 бит для 1-ого сегмента 
  // Импульс высокого уровня длительностью 1 микросекунда переход данных из регистров в буферный каскад 
  digitalWrite(LE, HIGH);
  delayMicroseconds(1);
  digitalWrite(LE, LOW); 
}

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

вообще всё это спокойно делается на MT1638 и даже наверное tini13 потянет и пинов хватит на всё

 

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Посмотрел ТМ 1638 интересный драйвер и кнопки можно прикрутить. Но уже пошел в направлении MBI5026. А вообще спасибо за инфу.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Теперь буду разбираться, как запустить часики на этих индикаторах. Буду рад любым идеям.

alex_r61
Offline
Зарегистрирован: 20.06.2012

ELITE, Вы вопрос в начале прочитайте. AR, а почему не аппаратный SPI? У этих драйверов очень высокая скорость, МК будет разгружен.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

alex_r61 пишет:

AR, а почему не аппаратный SPI? У этих драйверов очень высокая скорость, МК будет разгружен.

Даже не думал в этом направлении. Мысль была попробовать запустить индикаторы. Сегодня покопаюсь с аппаратным SPI посмотрю, что за "зверь".

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Запустил индикаторы с управлением по  SPI, соответственно поменяв выводы на ардуинке. Теперь CLK -это D13, а  SDI- это D11. Работает.

// вывод D13 синхроимпульсы на регистры LED драйвера
// вывод D11 данные на регистры LED драйвера

#include <SPI.h> // подключаем библиотеку SPI

int LE = 8;   // пин ардуинки выход «защёлка» на регистры LED драйвера

void setup()
{
  //Инициализируем шину SPI
  SPI.begin();

  pinMode(LE, OUTPUT);
  
  DISP(0,0,0,0); // работает функция DISP передаем в регистры 64 бита, псевдо сброс регистров, так на всякий случай (индикаторы ни чего не показывают) 
  digitalWrite(LE, HIGH);
  delayMicroseconds(1);
  digitalWrite(LE, LOW); 
}

void loop()
 {
  
 DISP(0x3F,0x3F,0x3F,0x3F); // работает функция DISP передаем в регистры 64 бита (на индикаторах нули)
 delay(1000);
 DISP(0x6,0x6,0x6,0x6); // работает функция DISP передаем в регистры 64 бита (на индикаторах единицы)
 delay(1000);
 DISP(0x5B,0x5B,0x5B,0x5B); // .... 2
 delay(1000);
 DISP(0x4F,0x4F,0x4F,0x4F); // .... 3
 delay(1000);
 DISP(0x66,0x66,0x66,0x66); // .... 4
 delay(1000);
 DISP(0x6D,0x6D,0x6D,0x6D); // .... 5
 delay(1000);
 DISP(0x7D,0x7D,0x7D,0x7D); // .... 6
 delay(1000);
 DISP(0x7,0x7,0x7,0x7);     // .... 7
 delay(1000);
 DISP(0x7F,0x7F,0x7F,0x7F); // .... 8
 delay(1000);
 DISP(0x6F,0x6F,0x6F,0x6F); // .... 9
 delay(1000);

 // движение точки по индикаторам
  DISP(0x80,0,0,0);
 delay(1000);
  DISP(0,0x80,0,0);
 delay(1000);
  DISP(0,0,0x80,0);
 delay(1000);
  DISP(0,0,0,0x80);
 delay(1000);
  DISP(0,0,0,0);
 delay(1000);
  }

// организуем функцию для работы с SPI.transfer

void DISP(byte segment_1, byte segment_2, byte segment_3, byte segment_4) 
{  
  SPI.transfer(segment_4); // 8 бит для 4-ого сегмента  
  SPI.transfer(segment_3); // 8 бит для 3-ого сегмента
  SPI.transfer(segment_2); // 8 бит для 2-ого сегмента
  SPI.transfer(segment_1); // 8 бит для 1-ого сегмента 
  // Импульс высокого уровня длительностью 1 микросекунда переход данных из регистров в буферный каскад 
  digitalWrite(LE, HIGH);
  delayMicroseconds(1);
  digitalWrite(LE, LOW); 
}

 

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

Теперь попробуйте запустить и вывести часы. Подключите выход прерывания DS3231 к INT0 или INT1 дуни, настройте прерывание часов на 1Гц. И по прерыванию от часов в прерывании дуни устанавливайте флаг обновления. А по нему в основном цикле обновляйте информацию на индикаторах и делеи будут не нужны.

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

alex_r61 пишет:

настройте прерывание часов на 1Гц. И по прерыванию от часов в прерывании дуни устанавливайте флаг обновления

Мысль интересная. Буду ее "курить" :-))

Green
Offline
Зарегистрирован: 01.10.2015

Часы, часы... Как то делал человеку часы с обратным отсчётом. Задаётся дата/время предположительного конца и счёт пошел. Годов, месяцев... до секунд. 16 разрядов всего. Человек утверждает что очень мотивирует.)

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

Green пишет:

Часы, часы... с обратным отсчётом....16 разрядов всего. Человек утверждает что очень мотивирует.)

Даже страшно начать считать, сколько это. Но соглашусь - это может мотивировать.

Артур Шопенгауэр: "Человеческую жизнь нельзя, в сущности, назвать ни длинной, ни короткой, так как в сущности она именно и служит масштабом, которым мы измеряем все остальные сроки."

 
alex_r61
Offline
Зарегистрирован: 20.06.2012

Green пишет:

Часы, часы... Как то делал человеку часы с обратным отсчётом. Задаётся дата/время предположительного конца и счёт пошел. Годов, месяцев... до секунд. 16 разрядов всего. Человек утверждает что очень мотивирует.)

А календарь Майя, предсказания Глобы и пролёт метеоритов на данный период туда закладывали?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alex_r61 пишет:

А календарь Майя, предсказания Глобы и пролёт метеоритов 

Или там "Водолей стал Раком на Весы" - всё надо учитывать.

Green
Offline
Зарегистрирован: 01.10.2015

Так любой каприз! Какие вопросы?

b707
Offline
Зарегистрирован: 26.05.2017

AR пишет:

Артур Шопенгауэр: "Человеческую жизнь нельзя, в сущности, назвать ни длинной, ни короткой, так как в сущности она именно и служит масштабом, которым мы измеряем все остальные сроки."

 

неужели Шопенгауэр тоже говорил "значит" и "этта" ? :)

AR
AR аватар
Offline
Зарегистрирован: 18.01.2018

b707 пишет:

AR пишет:

Артур Шопенгауэр: ".... в сущности, .... в сущности ..."

 

неужели Шопенгауэр тоже говорил "значит" и "этта" ? :)

Он философ, ему все можно.