Вот этого я, как Вы помните и боялся, что будут светиться.
В итоге, что имеем: при 12 не светятся даже включённые, а при 13.2 уже начинают немного всетиться выключенные.
Т.е. остаётся узенькое окошечко и это плохо. Чуть малейшая нестабильность (чуть повысится или понизатся во время работы) и прибор идёт вразнос :(
Я предлагаю вернуться к идее использовать либо другие слвиговые регистры (на большее напряжение, а заодно и ток), либо навешивать чертову уйму транзисторов. Тразнисторов потребуется по числу сегментов - 28 и два резистора к кадждому.
Блин, а ведь в даташите написано падение напряжения 1.8. Не зря я сразу же Вам написал, что это подозрительно.
Итак, решение за Вами
1) делаем как есть, но рискуем, что при любой нестабильности начнутся проблемы (не светятся или наоборот светятся где не надо)
2) ищем другие сдвиговые регистры, но тогда так, чтоби хватало честные 20мА подать на сегменты, чтобы светились на всю.
3 покупаем много транзисторов и вешаем по транзистору и паере резисторов на каждый сегмент. Опять же подаём 20мА на сегменты
Выбирайте, что делаем.
Кстати, повышающий DC-DC преобразователь нам понадобится по-любому, чтобы напряжение поднять. Какой? Это зависит от решения по трём пунктам выше.
Вот этого я, как Вы помните и боялся, что будут светиться.
В итоге, что имеем: при 12 не светятся даже включённые, а при 13.2 уже начинают немного всетиться выключенные.
Т.е. остаётся узенькое окошечко и это плохо. Чуть малейшая нестабильность (чуть повысится или понизатся во время работы) и прибор идёт вразнос :(
Я предлагаю вернуться к идее использовать либо другие слвиговые регистры (на большее напряжение, а заодно и ток), либо навешивать чертову уйму транзисторов. Тразнисторов потребуется по числу сегментов - 28 и два резистора к кадждому.
Блин, а ведь в даташите написано падение напряжения 1.8. Не зря я сразу же Вам написал, что это подозрительно.
Итак, решение за Вами
1) делаем как есть, но рискуем, что при любой нестабильности начнутся проблемы (не светятся или наоборот светятся где не надо)
2) ищем другие сдвиговые регистры, но тогда так, чтоби хватало честные 20мА подать на сегменты, чтобы светились на всю.
3 покупаем много транзисторов и вешаем по транзистору и паере резисторов на каждый сегмент. Опять же подаём 20мА на сегменты
Выбирайте, что делаем.
Кстати, повышающий DC-DC преобразователь нам понадобится по-любому, чтобы напряжение поднять. Какой? Это зависит от решения по трём пунктам выше.
он при 13.2 светится настолько слабо, что плохо видно в полностью темном помещенении. Так что я думаю 1 вариант сойдет, потому что при 13в не светятся вообще
Повыщающий преобразователь? Я думал что будет трансформатор с 220 до 13в или таких не бывает?
Теперь определяете какой резистор нужен для двоеточия и тоже закупаетесь.
-------------
По поводу БП. Точно на 13 не бывает. Можно сделать, но при цене в полдоллара лучше не выпендриваться и купить готовый. Вы пока закажите, а работайте с Вашим БП. Пока сделаем и посылка приедет. Не обязательно покупать такой, можно и другой, лишь бы умел с 5 до 13 поднимать с точной настройкой. Этот умеет. Выходное напряжение подстроечным резистором выставляется.
Теперь определяете какой резистор нужен для двоеточия и тоже закупаетесь.
-------------
По поводу БП. Точно на 13 не бывает. Можно сделать, но при цене в полдоллара лучше не выпендриваться и купить готовый. Вы пока закажите, а работайте с Вашим БП. Пока сделаем и посылка приедет. Не обязательно покупать такой, можно и другой, лишь бы умел с 5 до 13 поднимать с точной настройкой. Этот умеет. Выходное напряжение подстроечным резистором выставляется.
перепроверил, при 1.5ом 10ма.
И я заметил что в диапазонах 1.5ма до 10ма яркость этих светодиодов не изменялась, для чего тогда это всё?
Ну, да. Его земля к земле блока питания (Вы же купили уже маленький такой на 5В?), вход - к выходу БП, а выход на общий анод. Точно 13В выставите отвёрточкой на резисторе, Вы уже руку набили :)
Ну, да. Его земля к земле блока питания (Вы же купили уже маленький такой на 5В?), вход - к выходу БП, а выход на общий анод. Точно 13В выставите отвёрточкой на резисторе, Вы уже руку набили :)
нет, не купил, я когда узнал, что работет сегмент от 12 в отложил покупку, я так понял мне нужно его купить?
нет, не купил, я когда узнал, что работет сегмент от 12 в отложил покупку, я так понял мне нужно его купить?
Тогда можно купить его, а можно на 12В - всё равно. На 12 можно найти дешевле, если без корпуса. Но 12 Вам мало, так что преобразователь всё равно нужен по-любому.
нет, не купил, я когда узнал, что работет сегмент от 12 в отложил покупку, я так понял мне нужно его купить?
Тогда можно купить его, а можно на 12В - всё равно. На 12 можно найти дешевле, если без корпуса. Но 12 Вам мало, так что преобразователь всё равно нужен по-любому.
Не сходите с ума. Это же трансформатор! Его выход - переменный ток. Вам его потом надо ещё выпрямлять и стабилизировать. Оно Вам надо? Тем более за такую цену!
Всё, что Вам нужно AC-DC преобразователь от 5 ватт. Вон, смотрите, сколько их (это только то, что первое попалось) и переделывать ничего не надо и в разы дешевле.
Не сходите с ума. Это же трансформатор! Его выход - переменный ток. Вам его потом надо ещё выпрямлять и стабилизировать. Оно Вам надо? Тем более за такую цену!
Всё, что Вам нужно AC-DC преобразователь от 5 ватт. Вон, смотрите, сколько их (это только то, что первое попалось) и переделывать ничего не надо и в разы дешевле.
Такс праздники закончились. Резисторы я уже купил, что дальше делать? Я пока не представляю как будет выглядеть код и как микроконтроллер поймёт какие сегменты нужно засвечивать, когда будет идти время
Так, напомните текущую ситуацию, а то я уже запутался. Что у Вас есть, чего нет, что работает, а что - нет. Подробно и спокойно распишите.
нету питания. я заказал преобразователь с 220 на 12 и умножитель напряжения, чтобы сделать 13 вольт
Из остального всё есть модуль часов, регисты, сегменты, резисторы, адруина и тд. До этого времени мы пытались узнать какой мне нужен резистор и от скольки вольт будет работать вся схема.
По поводу работает. Модуль часов работает, вы мне говорили переделать код под них, чтобы время правильно показывало
соеденил я на макетке все свои регистры, только немного просчитался и нехватило пары проводов проводов на 4 резистр, надо сьездить докупить. Но потренироваться можно и с 3 индикаторами.
1. Онн нагружает МК, который долже постоянно в loop что-то проверять и ни в коем случае нельзя задерживать loop
2. переключение происходит не точно, а тогда, когда Вы проверите свой миллис. Вот, например, если Вы в loop вставите delay(100500), то Ваши часы не будут переключаться 10,5 секунд.
Даже в самом лучше случае точность у Вас +/- полсекунды потому, что Вы переключать будете не тогда, когда часы переключились на новую минуту, а тогда, когда Вы спросите свой миллис. Вы понимаете?
Давайте по-другому. Дело в том, что часы умеют сообщать Вам когда именно они переключаются на новую минуту. И вот точно в этот момент Вам и нужно переключать минуту.
#include <Wire.h>
#include <DS3231.h>
#define PIN_SQW 3 // можно использовать 2 или 3 пин
static DS3231 Clock; // Собственно часы
//
// Обработчик прерывания от часов, которое приходит при переходе минуты
// Вообще-то гнать в сериал в обработчике прерывания - очень плохая идея,
// Здесь это делается только чтобы не усложнять пример выводом на экран.
// По уму, конечно, нужно на экран выводить.
//
static void everyMinuteAlarm(void) {
const byte oldSReg = SREG;
sei();
Serial.print(Clock.getHour());
Serial.print(":");
Serial.println(Clock.getMinute());
Clock.clearAlarmSignal(2);
SREG = oldSReg;
}
void setup(void) {
Serial.begin(115200);
pinMode(PIN_SQW, INPUT);
Wire.begin();
Clock.setClockMode(false); // Часы в 24-часовом режиме. Нужен 12-ти - пишем true
Clock.turnOffAlarm(2); // Для очистки совести, мы не знаем что там часы делают
Clock.EnableMinuteInterrupt(); // включаем ежеминутное прерывание
attachInterrupt(PIN_SQW - 2, everyMinuteAlarm, FALLING); // собираемся его обрабатывать
}
void loop(void) {}
Пин, который Вы укажете в строке 4, соедините с пином SQW модуля часов. Запустите и
1. Онн нагружает МК, который долже постоянно в loop что-то проверять и ни в коем случае нельзя задерживать loop
2. переключение происходит не точно, а тогда, когда Вы проверите свой миллис. Вот, например, если Вы в loop вставите delay(100500), то Ваши часы не будут переключаться 10,5 секунд.
Даже в самом лучше случае точность у Вас +/- полсекунды потому, что Вы переключать будете не тогда, когда часы переключились на новую минуту, а тогда, когда Вы спросите свой миллис. Вы понимаете?
Давайте по-другому. Дело в том, что часы умеют сообщать Вам когда именно они переключаются на новую минуту. И вот точно в этот момент Вам и нужно переключать минуту.
#include <Wire.h>
#include <DS3231.h>
#define PIN_SQW 3 // можно использовать 2 или 3 пин
static DS3231 Clock; // Собственно часы
//
// Обработчик прерывания от часов, которое приходит при переходе минуты
// Вообще-то гнать в сериал в обработчике прерывания - очень плохая идея,
// Здесь это делается только чтобы не усложнять пример выводом на экран.
// По уму, конечно, нужно на экран выводить.
//
static void everyMinuteAlarm(void) {
const byte oldSReg = SREG;
sei();
Serial.print(Clock.getHour());
Serial.print(":");
Serial.println(Clock.getMinute());
Clock.clearAlarmSignal(2);
SREG = oldSReg;
}
void setup(void) {
Serial.begin(115200);
pinMode(PIN_SQW, INPUT);
Wire.begin();
Clock.setClockMode(false); // Часы в 24-часовом режиме. Нужен 12-ти - пишем true
Clock.turnOffAlarm(2); // Для очистки совести, мы не знаем что там часы делают
Clock.EnableMinuteInterrupt(); // включаем ежеминутное прерывание
attachInterrupt(PIN_SQW - 2, everyMinuteAlarm, FALLING); // собираемся его обрабатывать
}
void loop(void) {}
Пин, который Вы укажете в строке 4, соедините с пином SQW модуля часов. Запустите и
1. В пин часов с пином ардуины соеднили? Правильные пины? Проверьте.
2. Потерпите. Он не сразу показывает. Он показывает тольуо при переходе минуты. Т.е. После запуска он может показать сразу, а может только через минуту - как повезёт.
1. В пин часов с пином ардуины соеднили? Правильные пины? Проверьте.
2. Потерпите. Он не сразу показывает. Он показывает тольуо при переходе минуты. Т.е. После запуска он может показать сразу, а может только через минуту - как повезёт.
Проверяёте. особенно пины.
1. все верно
2. подождал, но всреавно не показывает. Я соеденил sqw с a3.
И ещё я заметил в 32 строке, там указано pin_sqw-2 что это значит? в примере же указан пин 3.
И ещё я заметил в 32 строке, там указано pin_sqw-2 что это значит? в примере же указан пин 3.
В той строке не номер пина, а номер прерывания. Прерывания бывают на двух пинах - на втором (у него номер 0) и на третьем - у него номер 1. Поэтому. чтобы из номера пина получить номер прерывания, нужно вычесть два.
Ага, Вы понимаете как оно работает? На пине 3 у Вас постоянно высокий уровень (HIGH) его туда подают часы. Точно при переходе минуты яасы прижимают этот пин к LOW. Это Вы ловите прерыванием. И именно в этот момент Вам нужно показывать новое время.
При таком подходе loop у Вас пустой. Можете поставить туда delay(100500) прерыванию пофигу - ничего не сломается. Часы будут переключаться точно когда нужно.
Вы всё понимаете как работает?
Тогда попробуйте выводить время на экран (пусть на три цифры - десятки часов пока не выводите). Покажете мне скетч.
Ага, Вы понимаете как оно работает? На пине 3 у Вас постоянно высокий уровень (HIGH) его туда подают часы. Точно при переходе минуты яасы прижимают этот пин к LOW. Это Вы ловите прерыванием. И именно в этот момент Вам нужно показывать новое время.
При таком подходе loop у Вас пустой. Можете поставить туда delay(100500) прерыванию пофигу - ничего не сломается. Часы будут переключаться точно когда нужно.
Вы всё понимаете как работает?
Тогда попробуйте выводить время на экран (пусть на три цифры - десятки часов пока не выводите). Покажете мне скетч.
то что вы обьяснили я понимаю, но не совсем понимаю что значит каждая комманда в скетче, где можно найти описание каждой комманды этой библиотке? и ещё я заметил время выводится неарвильно. 19:1 19:2 и тд. Ну мне с моими дисплеями как раз пойдет). Завтра уделю и постараюсь сделать. Только я всреавно не понимаю как регист поймет какие сегменты включать, а какие нет? Раньше же я сам просто цифры строил, но с часами такое не пойдет
Почему неправильно? Числа правильные, а как их выводить - это уже дело программиста. В пробе с сериалом нам особая красота не нужна, вот никто и не парится. Числа-то правильные. Этого и добивались.
protone77 пишет:
не понимаю как регист поймет какие сегменты включать, а какие нет?
Никак не поймет. Это Вы должны делать.
Вы знаете какие биты надо взвести, чтобы показать тот или иной сегмент? Можете выписать (тролько правильно) такую последовательность
Затем выпишите все цифры по сегментам. Должно получиться что-то вроде такого (возможно, если у Вас свечение задаётся 0, а не 1, то нужно будет | поменять на &
Почему неправильно? Числа правильные, а как их выводить - это уже дело программиста. В пробе с сериалом нам особая красота не нужна, вот никто и не парится. Числа-то правильные. Этого и добивались.
protone77 пишет:
не понимаю как регист поймет какие сегменты включать, а какие нет?
Никак не поймет. Это Вы должны делать.
Вы знаете какие биты надо взвести, чтобы показать тот или иной сегмент? Можете выписать (тролько правильно) такую последовательность
Затем выпишите все цифры по сегментам. Должно получиться что-то вроде такого (возможно, если у Вас свечение задаётся 0, а не 1, то нужно будет | поменять на &
И когда Вам нужно вывести цифру N спокойно пихаете в SPI байт allDigits[N]
Например, если у Вас часы - это дальние от ардуины регистры, а минуты ближние, и у Вас есть время в двух переменных h и m, то вывести его можно очень просто. Пихаете в SPI последовательно
вот что я кстати заметил, когда я подключил 3 сегмента, они начали светится ярко даже при 10.6-11в( но потребление тока меньше 0.01а)с моими резисторами по 1.5ома я начал увеличивать напряжение и где-то на 11.4-11.5 показало 0.01 ампера, хотя когда был включен один сегмент и один регистр 0.01 ампер был при 12.3-12.5 вольтах.
вот что я кстати заметил, когда я подключил 3 сегмента, они начали светится ярко даже при 10.6-11в( но потребление тока меньше 0.01а)с моими резисторами по 1.5ома я начал увеличивать напряжение и где-то на 11.4-11.5 показало 0.01 ампера, хотя когда был включен один сегмент и один регистр 0.01 ампер был при 12.3-12.5 вольтах.
Немного странно, но мы об этом подумаем. Пока же, доделайте скетч по нормальному. Я не об этом Вас просил.
Сделайте следующее.
1. Оформите функцию с названием ита showTime(). Она должна:
а) спрашивать время у часов
б) показывать это время на индиакторе
Только не надо спрашивать у часов одно и то же дважды подряд, как Вы это делаете в строках 54-55. Спросите один раз, присвойте переменной, а дольше работайте с этой переменной.
Массив allDigits засуньте внутрь этой функции, он ведь только там нужен, так и нечего ему снаружи отвечивать.
2. Вызывайте эту функцию один раз в setup, после инициализации SPI и один раз в everyMinuteAlarm.
А печать в сериал уберите вовсе.
Должно получитьтся: при старте Вы сразу показываете время на индикаторе, а потом меняете его раз в минуту. Собственно, уже близко к работающим часам, так ведь?
вот что я кстати заметил, когда я подключил 3 сегмента, они начали светится ярко даже при 10.6-11в( но потребление тока меньше 0.01а)с моими резисторами по 1.5ома я начал увеличивать напряжение и где-то на 11.4-11.5 показало 0.01 ампера, хотя когда был включен один сегмент и один регистр 0.01 ампер был при 12.3-12.5 вольтах.
Немного странно, но мы об этом подумаем. Пока же, доделайте скетч по нормальному. Я не об этом Вас просил.
Сделайте следующее.
1. Оформите функцию с названием ита showTime(). Она должна:
а) спрашивать время у часов
б) показывать это время на индиакторе
Только не надо спрашивать у часов одно и то же дважды подряд, как Вы это делаете в строках 54-55. Спросите один раз, присвойте переменной, а дольше работайте с этой переменной.
Массив allDigits засуньте внутрь этой функции, он ведь только там нужен, так и нечего ему снаружи отвечивать.
2. Вызывайте эту функцию один раз в setup, после инициализации SPI и один раз в everyMinuteAlarm.
А печать в сериал уберите вовсе.
Должно получитьтся: при старте Вы сразу показываете время на индикаторе, а потом меняете его раз в минуту. Собственно, уже близко к работающим часам, так ведь?
я сейчас ухожу так что задам пару вопросов сразу.
1. У вас есть ссылки на команды и что они делают в библиотке часов(которую вы скидывали)
я в программировании не силен так что не совсем всё понял
про функцию showtime она получается будет вместо 30-33 строк?
Ну, это стандартная библиотека взятая с гитхаба. Что-то описано в самом коде, посмотрите. Там же должна быть ссылка на гитхаб, может там ещё есть какая документация. Сам я добавил в неё только функцию EnableMinuteInterrupt, она как раз инструктирует часы. чтобы те выдавали прерывание раз в минуту.
Функция о которой я говорю - это по сути Ваши строки 50-56. ТОлько их надо офрмить отдельной функцией и не спрашивать одно и тоже дважды. Саму функцию расположите повыше в коде. Можно прямо после строки 25.
А вызывает её нужно, да, вместо строк 30-32 и вместо строк 50-56.
вот код часы идут, чувствую что намудрил там с присвоением переменной, делал как учили в школе с паскалем. И ещё вы просили убрать сериал принт, но я не понял, как без него это будет работать
1. Строки 61-63 убрать. SPI и без Вас это сделает.
2. Строки 29, 31, 32 убрать, время должно показываться на экране часов, Зачем Вам сериал?
3. Строку 25 внести внутрь функции showTime, сразу после строки 28. Чего это объявление забыло снаружи, если переменные используются только внутри функции?
По поводу "сбивается". Ищите сопли на макетке. Код нормальный. Земля у БП (от которого питается экран) и Ардуины общая, я надеюсь? Не забыли сделать её общей?
1. Строки 61-63 убрать. SPI и без Вас это сделает.
2. Строки 29, 31, 32 убрать, время должно показываться на экране часов, Зачем Вам сериал?
3. Строку 25 внести внутрь функции showTime, сразу после строки 28. Чего это объявление забыло снаружи, если переменные используются только внутри функции?
По поводу "сбивается". Ищите сопли на макетке. Код нормальный. Земля у БП (от которого питается экран) и Ардуины общая, я надеюсь? Не забыли сделать её общей?
я пересобрал полностью всё и заработало, похоже какой-то провод отсоеденился. всё в коде исправил. Что дальше делать
Температуру, если она Вам нужна сама ардуина тоже умеете измерять.
Хотите мигать двоеточием. Ну, можно просто "блинк" на него напустить. Вы с какой частотой хотите мигать?
А что сейчас делать.
1. Продумать что Вы хотите от сових часов. Продумать и выписать все фичи и возможности (например, про темепратуру я сегодня впервые услышал).
2. Когда всё выписано, потихоньку делать всё шаг за шагом.
3. как только появится БП, и как только вся аппаратура (кнопки, датчики) будет подключена, собрать всё вместе, ещё раз проверить токи и всё остальное и, если всё устраивает, сделать плату и всё спаять, чтобы соплей не было. Продолжать программировать можно и на спаянной плате.
Вот этого я, как Вы помните и боялся, что будут светиться.
В итоге, что имеем: при 12 не светятся даже включённые, а при 13.2 уже начинают немного всетиться выключенные.
Т.е. остаётся узенькое окошечко и это плохо. Чуть малейшая нестабильность (чуть повысится или понизатся во время работы) и прибор идёт вразнос :(
Я предлагаю вернуться к идее использовать либо другие слвиговые регистры (на большее напряжение, а заодно и ток), либо навешивать чертову уйму транзисторов. Тразнисторов потребуется по числу сегментов - 28 и два резистора к кадждому.
Блин, а ведь в даташите написано падение напряжения 1.8. Не зря я сразу же Вам написал, что это подозрительно.
Итак, решение за Вами
1) делаем как есть, но рискуем, что при любой нестабильности начнутся проблемы (не светятся или наоборот светятся где не надо)
2) ищем другие сдвиговые регистры, но тогда так, чтоби хватало честные 20мА подать на сегменты, чтобы светились на всю.
3 покупаем много транзисторов и вешаем по транзистору и паере резисторов на каждый сегмент. Опять же подаём 20мА на сегменты
Выбирайте, что делаем.
Кстати, повышающий DC-DC преобразователь нам понадобится по-любому, чтобы напряжение поднять. Какой? Это зависит от решения по трём пунктам выше.
Вот этого я, как Вы помните и боялся, что будут светиться.
В итоге, что имеем: при 12 не светятся даже включённые, а при 13.2 уже начинают немного всетиться выключенные.
Т.е. остаётся узенькое окошечко и это плохо. Чуть малейшая нестабильность (чуть повысится или понизатся во время работы) и прибор идёт вразнос :(
Я предлагаю вернуться к идее использовать либо другие слвиговые регистры (на большее напряжение, а заодно и ток), либо навешивать чертову уйму транзисторов. Тразнисторов потребуется по числу сегментов - 28 и два резистора к кадждому.
Блин, а ведь в даташите написано падение напряжения 1.8. Не зря я сразу же Вам написал, что это подозрительно.
Итак, решение за Вами
1) делаем как есть, но рискуем, что при любой нестабильности начнутся проблемы (не светятся или наоборот светятся где не надо)
2) ищем другие сдвиговые регистры, но тогда так, чтоби хватало честные 20мА подать на сегменты, чтобы светились на всю.
3 покупаем много транзисторов и вешаем по транзистору и паере резисторов на каждый сегмент. Опять же подаём 20мА на сегменты
Выбирайте, что делаем.
Кстати, повышающий DC-DC преобразователь нам понадобится по-любому, чтобы напряжение поднять. Какой? Это зависит от решения по трём пунктам выше.
он при 13.2 светится настолько слабо, что плохо видно в полностью темном помещенении. Так что я думаю 1 вариант сойдет, потому что при 13в не светятся вообще
Повыщающий преобразователь? Я думал что будет трансформатор с 220 до 13в или таких не бывает?
Ну, тогда ещё раз переповеряете чтобы при 13В боле 10мА. Причём чем точнее, тем лучше.
1 Ом, так один, 2 - так два, полтора, так полтора.
И закупаетесь резисторами на все сегменты. например, резистор на 1,5Ома в России стоит меньше рубля (российского).
Продолжайте выполнять мою инструкцию
Теперь определяете какой резистор нужен для двоеточия и тоже закупаетесь.
-------------
По поводу БП. Точно на 13 не бывает. Можно сделать, но при цене в полдоллара лучше не выпендриваться и купить готовый. Вы пока закажите, а работайте с Вашим БП. Пока сделаем и посылка приедет. Не обязательно покупать такой, можно и другой, лишь бы умел с 5 до 13 поднимать с точной настройкой. Этот умеет. Выходное напряжение подстроечным резистором выставляется.
Ну, тогда ещё раз переповеряете чтобы при 13В боле 10мА. Причём чем точнее, тем лучше.
1 Ом, так один, 2 - так два, полтора, так полтора.
И закупаетесь резисторами на все сегменты. например, резистор на 1,5Ома в России стоит меньше рубля (российского).
Продолжайте выполнять мою инструкцию
Теперь определяете какой резистор нужен для двоеточия и тоже закупаетесь.
-------------
По поводу БП. Точно на 13 не бывает. Можно сделать, но при цене в полдоллара лучше не выпендриваться и купить готовый. Вы пока закажите, а работайте с Вашим БП. Пока сделаем и посылка приедет. Не обязательно покупать такой, можно и другой, лишь бы умел с 5 до 13 поднимать с точной настройкой. Этот умеет. Выходное напряжение подстроечным резистором выставляется.
перепроверил, при 1.5ом 10ма.
И я заметил что в диапазонах 1.5ма до 10ма яркость этих светодиодов не изменялась, для чего тогда это всё?
http://www.rotr.info/electronics/mcu/seven_segment.htm вот тут прочитал,что увеличивая напряжение можно регулировать яркость свечения
со светодиодами я уже определился, нудно 150 ом.
А как будет подключатся этот преобразователь. От 5в ардуины получается будет повышать до 13в и на анод?
Вот 1.5 ома и покупайте в нужном количестве.
150, так 150 - нужен Вам всего один.
Ну, да. Его земля к земле блока питания (Вы же купили уже маленький такой на 5В?), вход - к выходу БП, а выход на общий анод. Точно 13В выставите отвёрточкой на резисторе, Вы уже руку набили :)
Вот 1.5 ома и покупайте в нужном количестве.
150, так 150 - нужен Вам всего один.
Ну, да. Его земля к земле блока питания (Вы же купили уже маленький такой на 5В?), вход - к выходу БП, а выход на общий анод. Точно 13В выставите отвёрточкой на резисторе, Вы уже руку набили :)
нет, не купил, я когда узнал, что работет сегмент от 12 в отложил покупку, я так понял мне нужно его купить?
ну как придет преобразователь куплю
нет, не купил, я когда узнал, что работет сегмент от 12 в отложил покупку, я так понял мне нужно его купить?
Тогда можно купить его, а можно на 12В - всё равно. На 12 можно найти дешевле, если без корпуса. Но 12 Вам мало, так что преобразователь всё равно нужен по-любому.
Ток - ну, от 600мА и больше
Сами выбирайте.
нет, не купил, я когда узнал, что работет сегмент от 12 в отложил покупку, я так понял мне нужно его купить?
Тогда можно купить его, а можно на 12В - всё равно. На 12 можно найти дешевле, если без корпуса. Но 12 Вам мало, так что преобразователь всё равно нужен по-любому.
Ток - ну, от 600мА и больше
Сами выбирайте.
https://ru.aliexpress.com/item/HLK-PM01-AC-DC-220V-to-5V-Step-Down-Power...
я этот решил заказать.
Во вторник сьезжу за резисторами и можно уже будет собирать на макетке полноценные часы получается.
Сейчас посчитаем поточнее, минутку.
Опньки, а боюсь, что этот не подойдёт.
На 600мА, но 12В - точно хватит, а этого нет.
Давайте считать:
если на всех цифрах зажечь восьмерки, имеем
28 сегментов по 10мА и 13 вольт, итого 28*0,01*13 = 3,64 ватта
Двоеточие - 5В и 10мА - 5*0,01 = 0,05
Ардуина 5В и 20мА - 5*0,02 = 0,1Вт
Итого, суммарно нужно 3,79 ватта
Учитывая, что 100% КПД не бывает, я бы смотрел не менее 5 ватт.
У этого же блока питания всего 3 ватта - этого мало.
например БП 12В и 600мА - 12*0,6 = 7,2 ватта - подходит.
Ищите либо 5В от 1А и больше, либо 12В от 500мА и больше.
Понятно?
На 600мА, но 12В - точно хватит, а этого нет.
Давайте считать:
если на всех цифрах зажечь восьмерки, имеем
28 сегментов по 10мА и 13 вольт, итого 28*0,01*13 = 3,64 ватта
Двоеточие - 5В и 10мА - 5*0,01 = 0,05
Ардуина 5В и 20мА - 5*0,02 = 0,1Вт
Итого, суммарно нужно 3,79 ватта
Учитывая, что 100% КПД не бывает, я бы смотрел не менее 5 ватт.
У этого же блока питания всего 3 ватта - этого мало.
например БП 12В и 600мА - 12*0,6 = 7,2 ватта - подходит.
Ищите либо 5В от 1А и больше, либо 12В от 500мА и больше.
Понятно?
понятно http://belchip.by/product/?selected_product=17896 вот такой у себя нашел
Не сходите с ума. Это же трансформатор! Его выход - переменный ток. Вам его потом надо ещё выпрямлять и стабилизировать. Оно Вам надо? Тем более за такую цену!
Всё, что Вам нужно AC-DC преобразователь от 5 ватт. Вон, смотрите, сколько их (это только то, что первое попалось) и переделывать ничего не надо и в разы дешевле.
№1, №2, №3, №4, №5, №6, №7 и ещё 100500 разных.
Смотрите на геометрические размеры, цену, ну а там. где всё "ровненько", лучше прихватить лишний ваттик мощности - карман не тянет.
Не сходите с ума. Это же трансформатор! Его выход - переменный ток. Вам его потом надо ещё выпрямлять и стабилизировать. Оно Вам надо? Тем более за такую цену!
Всё, что Вам нужно AC-DC преобразователь от 5 ватт. Вон, смотрите, сколько их (это только то, что первое попалось) и переделывать ничего не надо и в разы дешевле.
№1, №2, №3, №4, №5, №6, №7 и ещё 100500 разных.
Смотрите на геометрические размеры, цену, ну а там. где всё "ровненько", лучше прихватить лишний ваттик мощности - карман не тянет.
7 вариант наверное самый лучший. Цены-то почти одинаковые у всех
Ну, если по размеру подходит, то отлично - шестикратный запас по мощности - греться особо не будет :)
Такс праздники закончились. Резисторы я уже купил, что дальше делать? Я пока не представляю как будет выглядеть код и как микроконтроллер поймёт какие сегменты нужно засвечивать, когда будет идти время
Так, напомните текущую ситуацию, а то я уже запутался. Что у Вас есть, чего нет, что работает, а что - нет. Подробно и спокойно распишите.
Так, напомните текущую ситуацию, а то я уже запутался. Что у Вас есть, чего нет, что работает, а что - нет. Подробно и спокойно распишите.
нету питания. я заказал преобразователь с 220 на 12 и умножитель напряжения, чтобы сделать 13 вольт
Из остального всё есть модуль часов, регисты, сегменты, резисторы, адруина и тд. До этого времени мы пытались узнать какой мне нужен резистор и от скольки вольт будет работать вся схема.
По поводу работает. Модуль часов работает, вы мне говорили переделать код под них, чтобы время правильно показывало
вот что у меня получилось.
Не знаю, что ещё подробней расписать).
соеденил я на макетке все свои регистры, только немного просчитался и нехватило пары проводов проводов на 4 резистр, надо сьездить докупить. Но потренироваться можно и с 3 индикаторами.
Хорошо. Докупайте. А пока.
Вы умеете на идикатор выводить те числа, которые Вам нужны?
Хорошо. Докупайте. А пока.
Вы умеете на идикатор выводить те числа, которые Вам нужны?
да, но я работал пока с одним только
Ну, тогда начинайте работу с часами.
Вы знаете как их правильно подсоединить, чтобы перевод минуты был точно вовремя.
Покажите Ваш скетч безо всякого экрана - просто скетч, который выводи часы и минуты в сериал раз в минуту.
вот. Я скидывал в 268 посте или это не правильно будет работать?
про подключение? ну питание всегда одинаково а scl к a5 , sda к а4
У этого скетча есть два недостатка.
1. Онн нагружает МК, который долже постоянно в loop что-то проверять и ни в коем случае нельзя задерживать loop
2. переключение происходит не точно, а тогда, когда Вы проверите свой миллис. Вот, например, если Вы в loop вставите delay(100500), то Ваши часы не будут переключаться 10,5 секунд.
Даже в самом лучше случае точность у Вас +/- полсекунды потому, что Вы переключать будете не тогда, когда часы переключились на новую минуту, а тогда, когда Вы спросите свой миллис. Вы понимаете?
Давайте по-другому. Дело в том, что часы умеют сообщать Вам когда именно они переключаются на новую минуту. И вот точно в этот момент Вам и нужно переключать минуту.
1. Возьмите вот эту библиотеку.
2. Запустите вот такой скетч
Пин, который Вы укажете в строке 4, соедините с пином SQW модуля часов. Запустите и
1. Убедитесь, что работает
2. Убедитесь, что Вы всё понимаете.
У этого скетча есть два недостатка.
1. Онн нагружает МК, который долже постоянно в loop что-то проверять и ни в коем случае нельзя задерживать loop
2. переключение происходит не точно, а тогда, когда Вы проверите свой миллис. Вот, например, если Вы в loop вставите delay(100500), то Ваши часы не будут переключаться 10,5 секунд.
Даже в самом лучше случае точность у Вас +/- полсекунды потому, что Вы переключать будете не тогда, когда часы переключились на новую минуту, а тогда, когда Вы спросите свой миллис. Вы понимаете?
Давайте по-другому. Дело в том, что часы умеют сообщать Вам когда именно они переключаются на новую минуту. И вот точно в этот момент Вам и нужно переключать минуту.
1. Возьмите вот эту библиотеку.
2. Запустите вот такой скетч
Пин, который Вы укажете в строке 4, соедините с пином SQW модуля часов. Запустите и
1. Убедитесь, что работает
2. Убедитесь, что Вы всё понимаете.
cкетч скомпилировался, но время не показывает
1. В пин часов с пином ардуины соеднили? Правильные пины? Проверьте.
2. Потерпите. Он не сразу показывает. Он показывает тольуо при переходе минуты. Т.е. После запуска он может показать сразу, а может только через минуту - как повезёт.
Проверяйте, особенно пины.
1. В пин часов с пином ардуины соеднили? Правильные пины? Проверьте.
2. Потерпите. Он не сразу показывает. Он показывает тольуо при переходе минуты. Т.е. После запуска он может показать сразу, а может только через минуту - как повезёт.
Проверяёте. особенно пины.
1. все верно
2. подождал, но всреавно не показывает. Я соеденил sqw с a3.
И ещё я заметил в 32 строке, там указано pin_sqw-2 что это значит? в примере же указан пин 3.
С какого перепугу A3???
Просто 3-й цифровой пин - не аналоговый!
И ещё я заметил в 32 строке, там указано pin_sqw-2 что это значит? в примере же указан пин 3.
В той строке не номер пина, а номер прерывания. Прерывания бывают на двух пинах - на втором (у него номер 0) и на третьем - у него номер 1. Поэтому. чтобы из номера пина получить номер прерывания, нужно вычесть два.
Соедините правильно и проверьте, я жду.
С какого перепугу A3???
Просто 3-й цифровой пин - не аналоговый!
исправил и мне показало в мониторе порта такую бкуву I
scl к a5 , sda к а4 sqw к d3 но на плате он по счету 4( начинается же от 0) вот у меня так подключено. и в мониторе порта пишет набор букв
все заработало в мониторе порта было выставлена скорость 9600, а я не заметил
Ага, Вы понимаете как оно работает? На пине 3 у Вас постоянно высокий уровень (HIGH) его туда подают часы. Точно при переходе минуты яасы прижимают этот пин к LOW. Это Вы ловите прерыванием. И именно в этот момент Вам нужно показывать новое время.
При таком подходе loop у Вас пустой. Можете поставить туда delay(100500) прерыванию пофигу - ничего не сломается. Часы будут переключаться точно когда нужно.
Вы всё понимаете как работает?
Тогда попробуйте выводить время на экран (пусть на три цифры - десятки часов пока не выводите). Покажете мне скетч.
Ага, Вы понимаете как оно работает? На пине 3 у Вас постоянно высокий уровень (HIGH) его туда подают часы. Точно при переходе минуты яасы прижимают этот пин к LOW. Это Вы ловите прерыванием. И именно в этот момент Вам нужно показывать новое время.
При таком подходе loop у Вас пустой. Можете поставить туда delay(100500) прерыванию пофигу - ничего не сломается. Часы будут переключаться точно когда нужно.
Вы всё понимаете как работает?
Тогда попробуйте выводить время на экран (пусть на три цифры - десятки часов пока не выводите). Покажете мне скетч.
то что вы обьяснили я понимаю, но не совсем понимаю что значит каждая комманда в скетче, где можно найти описание каждой комманды этой библиотке? и ещё я заметил время выводится неарвильно. 19:1 19:2 и тд. Ну мне с моими дисплеями как раз пойдет). Завтра уделю и постараюсь сделать. Только я всреавно не понимаю как регист поймет какие сегменты включать, а какие нет? Раньше же я сам просто цифры строил, но с часами такое не пойдет
Мне все делать в сетапе, луп не трогать, да? вы писали,что это мк нагружает
неарвильно. 19:1 19:2 и тд.
Почему неправильно? Числа правильные, а как их выводить - это уже дело программиста. В пробе с сериалом нам особая красота не нужна, вот никто и не парится. Числа-то правильные. Этого и добивались.
не понимаю как регист поймет какие сегменты включать, а какие нет?
Никак не поймет. Это Вы должны делать.
Вы знаете какие биты надо взвести, чтобы показать тот или иной сегмент? Можете выписать (тролько правильно) такую последовательность
#define SEG_A 0x01
#define SEG_A 0x02
#define SEG_A 0x04
....
Или, если Вам удобнее, то так
#define SEG_A 00000001b
#define SEG_A 00000010b
#define SEG_A 00000100b
...
Выпишите все сегменты.
Затем выпишите все цифры по сегментам. Должно получиться что-то вроде такого (возможно, если у Вас свечение задаётся 0, а не 1, то нужно будет | поменять на &
Это Вы можете сделать?
неарвильно. 19:1 19:2 и тд.
Почему неправильно? Числа правильные, а как их выводить - это уже дело программиста. В пробе с сериалом нам особая красота не нужна, вот никто и не парится. Числа-то правильные. Этого и добивались.
не понимаю как регист поймет какие сегменты включать, а какие нет?
Никак не поймет. Это Вы должны делать.
Вы знаете какие биты надо взвести, чтобы показать тот или иной сегмент? Можете выписать (тролько правильно) такую последовательность
#define SEG_A 0x01
#define SEG_A 0x02
#define SEG_A 0x04
....
Или, если Вам удобнее, то так
#define SEG_A 00000001b
#define SEG_A 00000010b
#define SEG_A 00000100b
...
Выпишите все сегменты.
Затем выпишите все цифры по сегментам. Должно получиться что-то вроде такого (возможно, если у Вас свечение задаётся 0, а не 1, то нужно будет | поменять на &
Это Вы можете сделать?
да, все зааботало
Ну, вот и прекрасно, теперь Вы можете завести массив типа такого
static const uint8_t allDigits[] = { SYMBOL_0, SYMBOL_1, ... SYMBOL_9};
И когда Вам нужно вывести цифру N спокойно пихаете в SPI байт allDigits[N]
Например, если у Вас часы - это дальние от ардуины регистры, а минуты ближние, и у Вас есть время в двух переменных h и m, то вывести его можно очень просто. Пихаете в SPI последовательно
allDigits[h / 10]
allDigits[h % 10]
allDigits[m / 10]
allDigits[m % 10]
И всё.
Попробуйте.
все, сделал.
вот что я кстати заметил, когда я подключил 3 сегмента, они начали светится ярко даже при 10.6-11в( но потребление тока меньше 0.01а)с моими резисторами по 1.5ома я начал увеличивать напряжение и где-то на 11.4-11.5 показало 0.01 ампера, хотя когда был включен один сегмент и один регистр 0.01 ампер был при 12.3-12.5 вольтах.
вот что я кстати заметил, когда я подключил 3 сегмента, они начали светится ярко даже при 10.6-11в( но потребление тока меньше 0.01а)с моими резисторами по 1.5ома я начал увеличивать напряжение и где-то на 11.4-11.5 показало 0.01 ампера, хотя когда был включен один сегмент и один регистр 0.01 ампер был при 12.3-12.5 вольтах.
Немного странно, но мы об этом подумаем. Пока же, доделайте скетч по нормальному. Я не об этом Вас просил.
Сделайте следующее.
1. Оформите функцию с названием ита showTime(). Она должна:
а) спрашивать время у часов
б) показывать это время на индиакторе
Только не надо спрашивать у часов одно и то же дважды подряд, как Вы это делаете в строках 54-55. Спросите один раз, присвойте переменной, а дольше работайте с этой переменной.
Массив allDigits засуньте внутрь этой функции, он ведь только там нужен, так и нечего ему снаружи отвечивать.
2. Вызывайте эту функцию один раз в setup, после инициализации SPI и один раз в everyMinuteAlarm.
А печать в сериал уберите вовсе.
Должно получитьтся: при старте Вы сразу показываете время на индикаторе, а потом меняете его раз в минуту. Собственно, уже близко к работающим часам, так ведь?
вот что я кстати заметил, когда я подключил 3 сегмента, они начали светится ярко даже при 10.6-11в( но потребление тока меньше 0.01а)с моими резисторами по 1.5ома я начал увеличивать напряжение и где-то на 11.4-11.5 показало 0.01 ампера, хотя когда был включен один сегмент и один регистр 0.01 ампер был при 12.3-12.5 вольтах.
Немного странно, но мы об этом подумаем. Пока же, доделайте скетч по нормальному. Я не об этом Вас просил.
Сделайте следующее.
1. Оформите функцию с названием ита showTime(). Она должна:
а) спрашивать время у часов
б) показывать это время на индиакторе
Только не надо спрашивать у часов одно и то же дважды подряд, как Вы это делаете в строках 54-55. Спросите один раз, присвойте переменной, а дольше работайте с этой переменной.
Массив allDigits засуньте внутрь этой функции, он ведь только там нужен, так и нечего ему снаружи отвечивать.
2. Вызывайте эту функцию один раз в setup, после инициализации SPI и один раз в everyMinuteAlarm.
А печать в сериал уберите вовсе.
Должно получитьтся: при старте Вы сразу показываете время на индикаторе, а потом меняете его раз в минуту. Собственно, уже близко к работающим часам, так ведь?
я сейчас ухожу так что задам пару вопросов сразу.
1. У вас есть ссылки на команды и что они делают в библиотке часов(которую вы скидывали)
я в программировании не силен так что не совсем всё понял
про функцию showtime она получается будет вместо 30-33 строк?
массив alldigits запихнуть в шоутайм?
Ну, это стандартная библиотека взятая с гитхаба. Что-то описано в самом коде, посмотрите. Там же должна быть ссылка на гитхаб, может там ещё есть какая документация. Сам я добавил в неё только функцию EnableMinuteInterrupt, она как раз инструктирует часы. чтобы те выдавали прерывание раз в минуту.
Функция о которой я говорю - это по сути Ваши строки 50-56. ТОлько их надо офрмить отдельной функцией и не спрашивать одно и тоже дважды. Саму функцию расположите повыше в коде. Можно прямо после строки 25.
А вызывает её нужно, да, вместо строк 30-32 и вместо строк 50-56.
вот код часы идут, чувствую что намудрил там с присвоением переменной, делал как учили в школе с паскалем. И ещё вы просили убрать сериал принт, но я не понял, как без него это будет работать
странно, сейчас включил часы, но когда переходит на новую минуту всё сбивается, но в мониторе порта всё нормально. До этого час всё отлично работало
я пересобрал полностью всё и заработало, похоже какой-то провод отсоеденился. всё в коде исправил. Что дальше делать
мне на днях обещали подкинуть dht22 думаю подключить тоже этот датчик и выводить температуру и влажность. И ещё я забыл про двоеточие.
Просто, которое горит постоянно сделать проще, а если мигать им, то через дилей или как?
Температуру, если она Вам нужна сама ардуина тоже умеете измерять.
Хотите мигать двоеточием. Ну, можно просто "блинк" на него напустить. Вы с какой частотой хотите мигать?
А что сейчас делать.
1. Продумать что Вы хотите от сових часов. Продумать и выписать все фичи и возможности (например, про темепратуру я сегодня впервые услышал).
2. Когда всё выписано, потихоньку делать всё шаг за шагом.
3. как только появится БП, и как только вся аппаратура (кнопки, датчики) будет подключена, собрать всё вместе, ещё раз проверить токи и всё остальное и, если всё устраивает, сделать плату и всё спаять, чтобы соплей не было. Продолжать программировать можно и на спаянной плате.
4. Закончить программирование и сделать корпус