7- cегментный дисплей для arduino

protone77
Offline
Зарегистрирован: 02.10.2016

https://yadi.sk/d/EPoJicxuvDVUd вот библиотека

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

Хорошо, пусть будет в теме. Как появятся вопросы, дёргайте.

protone77
Offline
Зарегистрирован: 02.10.2016

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

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

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

protone77
Offline
Зарегистрирован: 02.10.2016

далее мне нужно делать плату, нарисовать её. Я немного представляю, как она должна разводится, но не уверен что это правильно. Мне же на каждый вывод регистра, который подключается к сегменту нужен будет резистор? Ещё нужно где-то разместить тот трансформатор, который вы скидывали

protone77
Offline
Зарегистрирован: 02.10.2016

Я разобрался с этим примером и поудалял пока ненужные функции типо будильника и сделал так, чтобы показывало только часы и минуты( у меня же 4 сегмента)

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

Разумеется, на каждый вывод нужен резистор. Думаю, что не 390 ом. Но это Вы сами можете помеярть и определиться.

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

Давайте для начала нарисуем принципиальную схему подключения. Умеете? Нарисуйте и выкладывайте.

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

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

Разумеется, на каждый вывод нужен резистор. Думаю, что не 390 ом. Но это Вы сами можете помеярть и определиться.

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

Давайте для начала нарисуем принципиальную схему подключения. Умеете? Нарисуйте и выкладывайте.

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

там в библиотеке пример есть сразу 

p.s да, общий анод. в какой программе рисовать схему? я подумал сначало попробуем на макетке одну цифру сделать с одним регистром а потом дальше буду делать

protone77
Offline
Зарегистрирован: 02.10.2016
#include <Wire.h>             // Подключаем бибилиотеку для работы с I2C устройствами
#include <DS3231.h>           // Подключаем библиотеку для работы с RTC DS3231

DS3231 clock;                 // Связываем объект clock с библиотекой DS3231
RTCDateTime DateTime;         // Определяем сущность структуры RTCDateTime (описанной в библиотеке DS3231) для хранения считанных с часов даты и времени
RTCAlarmTime Alarm1;          // Определяем сущность структуры RTCAlarmTime (описанной в библиотеке DS3231) для хранения считанных с первого будильника настроек даты и времени

boolean isAlarm = false;      // Логическая переменная для обработки сигнала о срабатывании будильника 
boolean alarmState = false;   // Логическая переменная для обработки индикации при срабатывании будильника
int alarmLED = 4;             // Пин, к которому подключаем индикатор срабатывания будильника (светодиод)

void alarmFunction()                                  // Функция, вызываемая при срабатывании будильника
{
  isAlarm = true;                                     // Присваиваем значение "истина" переменной для обработки срабатывания будильника
}

void setup()
{
  Serial.begin(9600);               // Инициализируем вывод данных на монитор серийного порта, со скоростью 9600 бод
  clock.begin();                    // Инициализируем работу с объектом библиотеки DS3231
  clock.enableOutput(false);        // Определяем назначение вывода SQW (INT) для генерации прерываний при сработке будильников

  clock.setDateTime(__DATE__, __TIME__);                  // Устанавливаем время на часах, основываясь на времени компиляции скетча
//  clock.setDateTime(2016, 12, 8, 11,52,0 );              // Установка времени вручную (Год, Месяц, День, Час, Минута, Секунда)
//  setAlarm1(Дата или день, Час, Минута, Секунда, Режим)
//  clock.setAlarm1(0, 0, 0, 10, DS3231_MATCH_S);           // Устанавливаем первый будильник на срабатывание в 10 сек. каждой минуты. Режим DS3231_MATCH_S сообщает о том, что ориентироваться надо на секунды.
 // pinMode(alarmLED, OUTPUT);                              // Определяем пин подключения питания светодиода, как исходящий
 // attachInterrupt(0, alarmFunction, FALLING);             // Задаем функцию для обработки прерывания 0 (на пине 2)
}

void loop()
{
  DateTime = clock.getDateTime();                                                 // Считываем c часов текущие значения даты и времени в сущность DateTime
  Alarm1 = clock.getAlarm1();                                                     // Считываем c первого будильника текущие настройки даты и времени в сущность Alarm1
  Serial.println(clock.dateFormat("H:i    ", DateTime));               // Определяем формат вывода даты и выводим на монитор серийного порта
 // Serial.println("Temperature: " + String(clock.readTemperature()));              // Выводим значения температуры
 // Serial.println("Alarm: " + String(clock.dateFormat("__ __:__:s", Alarm1)));     // Выводим настройки будильника                                
 // Serial.println();                                                               // Перевод строки
  //if (isAlarm)                                                                    // Если поступил сигнал о сработке будильника
 // {
 //   digitalWrite(alarmLED, alarmState);                                           // Отправляем логическое значение выводу питания светодиода при каждом срабатывании будильника
 //   alarmState = !alarmState;                                                     // Меняем это значение на противоположное
//    isAlarm = false;                                                              // Отключаем сигнал о сработке будильника (меняем состояние события обработки индикатора на "ложь")
  //  clock.clearAlarm1();                                                          // Очищаем состояние сработки будильника
 // } 
  delay(1000);                                                                    // Задержка в 1 секунду
}

вот уже подредактированный пример

protone77
Offline
Зарегистрирован: 02.10.2016

везде пишут, что подходят резисторы 220 ом 0.25вт. Но если измерять самому, как и что мерять? 

protone77
Offline
Зарегистрирован: 02.10.2016

Этими резисторами я так понимаю ограничивают ток, который идет на сегменты? у моего сегмента написано в датшите ток 20мили ампер

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

protone77 пишет:

везде пишут, что подходят резисторы 220 ом 0.25вт. Но если измерять самому, как и что мерять? 

Давайте я расскажу Вам. как они рассчитываются.

Открывам даташит на сдвиговый регистр и читаем, что суммарная нагрузка на корпус - 70мА

Значит, если включить сразу все сегменты (7 сегментов + точка), то максимальный ток одного сегмента получается 70/8 = 8.75мА (если Вы не собираетесь использовать точку, то 70/7 = 10мА).

Так, теперь, нужен даташит Вашего индикатора (Вы, вроде давали, но дайте ещё раз) там нужно посмотритеь падение напряжения на сегменте. Посмотрите. Должно быть. У Вас в сегменте один светодиод или два? Красные? Я пока предположу, что один красный. Тогда падение напряжения должно быть где-то 1,8В, но Вы обязательно посмотрите.

Итак, если падение на сегменте 1,8В то остальные 5-1,8=3,2В должны упасть на резисторе. При токе 8,75мА имеем резистор R=3.2 / 0.00875 = 366 Ом. Такого резистора не бывает. По номинальному ряду смотрим ближайший в большую сторону - 390 Ом.

Для случая неиспользования точки (ток 10мА) считаем также. Резистор R = 3.2 / 0.010 = 320 Ом Такого тоже не бывает. Ближайший - 330 Ом.

Наконец, если у Вас два крсных светодиода (падение напряжения - 1,8*2=3,6В) и ток считаем 8.75мА. Точно также. На резисторе должно упасть 5 - 3,6 = 1,4 В Тогда резистор R = 1.4/0.00875 = 160 Ом. Такой резистор бывает, его и берём.

Принцип Вам понятен? Узнаёте из даташита падение напряжения на сегменте. Вычитаете его из 5В и то, что получилось делите на макисмальный ток. Затем беоёте либо точный, либо ближайший больший резистор.

Делайте.

Сам я обычно после такого расчёта ещё и беру реальный сегмент и замеряю ток мультиметром. Иногда (по разным причинам) оно отличается от расчётного (или просто нет даташита на светодиод) и я просто подбираю резистор так, чтобы ток был как можно большим, но не превышал максимальный.

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

protone77 пишет:

Этими резисторами я так понимаю ограничивают ток, который идет на сегменты? у моего сегмента написано в датшите ток 20мили ампер

В сегменте - да. А вот в сдвиговом регистре - 70 мА на всю микросхему :( Отсюда и заморочка.

Но не переживайте, они уже при токе в 5-6мА отлично светятся, а разницу между 8 и 20 Вы на глаз и не заметите. Тем более, что у Вас статическая индикация.

bizzon
Offline
Зарегистрирован: 29.03.2016

Мои часики со статической индикацией. Регистры TPIC6C59с открытым выходом по 300 ма. Дороговаты вот.. Зато и яркость шимом легко регулировать, и индикаторы лобого размера( с общим анодом).

А в Москве - по 22 рубля: http://www.electronshik.ru/item/tpic6c596d-169089

 

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

protone77 пишет:

везде пишут, что подходят резисторы 220 ом 0.25вт. Но если измерять самому, как и что мерять? 

Давайте я расскажу Вам. как они рассчитываются.

Открывам даташит на сдвиговый регистр и читаем, что суммарная нагрузка на корпус - 70мА

Значит, если включить сразу все сегменты (7 сегментов + точка), то максимальный ток одного сегмента получается 70/8 = 8.75мА (если Вы не собираетесь использовать точку, то 70/7 = 10мА).

Так, теперь, нужен даташит Вашего индикатора (Вы, вроде давали, но дайте ещё раз) там нужно посмотритеь падение напряжения на сегменте. Посмотрите. Должно быть. У Вас в сегменте один светодиод или два? Красные? Я пока предположу, что один красный. Тогда падение напряжения должно быть где-то 1,8В, но Вы обязательно посмотрите.

Итак, если падение на сегменте 1,8В то остальные 5-1,8=3,2В должны упасть на резисторе. При токе 8,75мА имеем резистор R=3.2 / 0.00875 = 366 Ом. Такого резистора не бывает. По номинальному ряду смотрим ближайший в большую сторону - 390 Ом.

Для случая неиспользования точки (ток 10мА) считаем также. Резистор R = 3.2 / 0.010 = 320 Ом Такого тоже не бывает. Ближайший - 330 Ом.

Наконец, если у Вас два крсных светодиода (падение напряжения - 1,8*2=3,6В) и ток считаем 8.75мА. Точно также. На резисторе должно упасть 5 - 3,6 = 1,4 В Тогда резистор R = 1.4/0.00875 = 160 Ом. Такой резистор бывает, его и берём.

Принцип Вам понятен? Узнаёте из даташита падение напряжения на сегменте. Вычитаете его из 5В и то, что получилось делите на макисмальный ток. Затем беоёте либо точный, либо ближайший больший резистор.

Делайте.

Сам я обычно после такого расчёта ещё и беру реальный сегмент и замеряю ток мультиметром. Иногда (по разным причинам) оно отличается от расчётного (или просто нет даташита на светодиод) и я просто подбираю резистор так, чтобы ток был как можно большим, но не превышал максимальный.

file:///D:/sitedocs-svetodiody-sv_indikatory-GNS-30011.pdf вот датшит

я посчитал и будет выходить 320 ом, тоесть резистор 330 ом, как вы и говорили. Я вот не знаю как буду делать двоеточие можно же просто перевернуть один сегмент и и они с соседним грубо говоря образуют двоеточие, но у меня не точка а запятая на сегменте и не знаю, как это будет выглядеть. Вот сам сегмент http://belchip.by/product/?selected_product=01496

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

protone77 пишет:

Вот сам сегмент http://belchip.by/product/?selected_product=01496

Путает людей ваш батька, цену увидел, чуть слюной не захлебнулся. Такую бы, да в Российских.(((((

protone77
Offline
Зарегистрирован: 02.10.2016

сейчас заметил ,что ссылка на датшит битая http://belchip.by/sitedocs/svetodiody/sv_indikatory/GNS-30011.pdf вот

protone77
Offline
Зарегистрирован: 02.10.2016

Ещё хотел спросить по поводу выводов сегментов их всего 10( 8 сегментов, вывод общего анода и что ещё?) и по поводу питания вы скидывали блок питания, как и куда его подсоединять и можно ли без него? у меня сейчас arduino uno, а не nano как раньше, может там по-другому. 

И по поводу резисторов вот есть такие http://belchip.by/product/?selected_product=13295

и такие http://belchip.by/product/?selected_product=13296 это не принципиально и можно брать дешевые и сколько штук надо? 28 если не подключать точку и 32 если все точки подключать?

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

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

protone77 пишет:

file:///D:/sitedocs-svetodiody-sv_indikatory-GNS-30011.pdf вот датшит

я посчитал и будет выходить 320 ом, тоесть резистор 330 ом, как вы и говорили. Я вот не знаю как буду делать двоеточие можно же просто перевернуть один сегмент и и они с соседним грубо говоря образуют двоеточие, но у меня не точка а запятая на сегменте и не знаю, как это будет выглядеть. Вот сам сегмент http://belchip.by/product/?selected_product=01496

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

Знаете, что меня смущает. У Вас судя по всему GNS-30011BS. В даташите на схеме нарисовано аж 6(!!!) светодиодов на сегмент, но при этом в таблице написано, что падение напряжения 1,8 В при тоек 20 мА. Это странно. 1,8 В - это падение на одном красном светодиоде, но не на шести же!

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

Задачу я уже озвучил - подобрать резистор так, чтобы ток был максимальным, но не превышал 10мА (договроимся, что запятые мы не используем).

По поводу двоеточия.

Вы собираетесь им, например, мигать? Если нет, то надо сказать. что оно горит всегда! Просто всегда, так ведь? Тогда проблем вообще нет никаких - просверлите под него две дырки в корпусе и вставьте туда два самых обыкновенных светодиода. Вставьте последовательно. О один на двоих резистор. И подключите их просто к 5В питанию. Пусть всегда горят. когда питание есть. Резистор должен быть ... опять же напряжение делим на ток. Напряжение: 5В - 1,8*2 = 1,4 В, делим 1,4 / 0.020 = 70 ом. Но это минимальный резистор. На практике тут надо всё включить чтобы светились цифры и двоеточие и посмотреть. Если двоеточие окажется ярче цифр (а так и будет), увеличивать резистор до тех пор, пока яркость не сравняется или даже цифры не станут чуть ярче двоеточия - это хорошо смотрится.

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

Если же Вы собираетесь им мигать, будем думать дальше.

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

protone77 пишет:

Ещё хотел спросить по поводу выводов сегментов их всего 10( 8 сегментов, вывод общего анода и что ещё?)

Смотрите схему в даташите. Там у Вас пины 7, 6, 5, 2, 11, 10 и 9 - это катоды сегментов с А по G соответсвенно. Пин 4 - точка и пин 3 - хвостик запятой. Пин 8 - общий анод.

Т.е. для часов на пины 4 и 3 можете забить.

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

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

protone77 пишет:

file:///D:/sitedocs-svetodiody-sv_indikatory-GNS-30011.pdf вот датшит

я посчитал и будет выходить 320 ом, тоесть резистор 330 ом, как вы и говорили. Я вот не знаю как буду делать двоеточие можно же просто перевернуть один сегмент и и они с соседним грубо говоря образуют двоеточие, но у меня не точка а запятая на сегменте и не знаю, как это будет выглядеть. Вот сам сегмент http://belchip.by/product/?selected_product=01496

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

Знаете, что меня смущает. У Вас судя по всему GNS-30011BS. В даташите на схеме нарисовано аж 6(!!!) светодиодов на сегмент, но при этом в таблице написано, что падение напряжения 1,8 В при тоек 20 мА. Это странно. 1,8 В - это падение на одном красном светодиоде, но не на шести же!

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

Задачу я уже озвучил - подобрать резистор так, чтобы ток был максимальным, но не превышал 10мА (договроимся, что запятые мы не используем).

По поводу двоеточия.

Вы собираетесь им, например, мигать? Если нет, то надо сказать. что оно горит всегда! Просто всегда, так ведь? Тогда проблем вообще нет никаких - просверлите под него две дырки в корпусе и вставьте туда два самых обыкновенных светодиода. Вставьте последовательно. О один на двоих резистор. И подключите их просто к 5В питанию. Пусть всегда горят. когда питание есть. Резистор должен быть ... опять же напряжение делим на ток. Напряжение: 5В - 1,8*2 = 1,4 В, делим 1,4 / 0.020 = 70 ом. Но это минимальный резистор. На практике тут надо всё включить чтобы светились цифры и двоеточие и посмотреть. Если двоеточие окажется ярче цифр (а так и будет), увеличивать резистор до тех пор, пока яркость не сравняется или даже цифры не станут чуть ярче двоеточия - это хорошо смотрится.

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

Если же Вы собираетесь им мигать, будем думать дальше.

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

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

protone77 пишет:

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

На том блоке питания всего 4 вывода. На двух нарисованы вонистые линии "~" - сюда Вы подключаете 220 из розетки. На двух других подписано "+" и "-". Их подключаете к +5В и Gnd.

Без БП при отладке можно, если питать ардуино через USB. Тогда общие аноды индиакторов заводите на +5В Ардуино, только именно на +5, а не на Vin.

Если же Ардуино питать не через USB, а через внешний блок питания, то лучше и общие аноды прямо на него заводить (на + блока питания), потому если Вы при таком подключении заведёте аноды на +5, то их ток свалится на ардуиновский преобразователь и он начнёт греться.

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

protone77 пишет:

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

Купите хоть по одному разных, чтобы подбирать, как я писал. А как подберёте, тогда купите сколько надо тех, что подобрали.

Про измерение тока. Амперметр (в отличие от вольтметра) включается последовательно с нагрузкой. Т.е. выставляете мультиметр на измерение тока (там предел выберите, чтобы 20мА хорошо показывалось), и соединяете так (для одного сегмента).

плюс питания -> [общий анод ::: с пина сегмента] -> резистор -> [плюсовый провод мультиметра ::: минусовый провод мультиметра] -> минус питания.

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

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

protone77 пишет:

И по поводу резисторов вот есть такие http://belchip.by/product/?selected_product=13295

и такие http://belchip.by/product/?selected_product=13296 это не принципиально и можно брать дешевые и сколько штук надо? 28 если не подключать точку и 32 если все точки подключать?

Учитесь решать такие задачи сами. Эти резисторы одинаковые во всём, кроме мощности. У того. что дешевле - 0.125W, а у того, что дороже - 1W. Давайте считать, сколько Вам нужно.

Мощность тока равна произведению силы тока на напряжение. Напряжение на резисторе у нас 3,2В, ток 10мА. Итого мощность 3,2*0,02 = 0,064W. Обычно добавляют процентов 10-20 в запас. Прибавим 20%: 0,064W*1,2 = 0,0768W. 

Т.е. мощности 0,125W Вам хватает за глаза. Ну, а тогда зачем платить больше?

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

Посмотрел пример.

Примерно чего-то такого я и ожидал.

Это хорошо для примера, но это плохо для часов. Вот смотрите (я убрал из дщщз всё лишнее)

void loop() {
	DateTime = clock.getDateTime();                                                 // Считываем c часов текущие значения даты и времени в сущность DateTime
	Alarm1 = clock.getAlarm1();                                                     // Считываем c первого будильника текущие настройки даты и времени в сущность Alarm1
	Serial.println(clock.dateFormat("H:i    ", DateTime));               // Определяем формат вывода даты и выводим на монитор серийного порта
	delay(1000);                                                                    // Задержка в 1 секунду
}

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

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

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

Если сделать так и этот "дёрг" посадить на ардуиновское прерывание, то Ваши часы будут переключать минуту точно тогда, когда новая минута начинается в микросхеме часов, а не +/- полсекунды, как сделано в этом примере.

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

protone77 пишет:

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

Купите хоть по одному разных, чтобы подбирать, как я писал. А как подберёте, тогда купите сколько надо тех, что подобрали.

Про измерение тока. Амперметр (в отличие от вольтметра) включается последовательно с нагрузкой. Т.е. выставляете мультиметр на измерение тока (там предел выберите, чтобы 20мА хорошо показывалось), и соединяете так (для одного сегмента).

плюс питания -> [общий анод ::: с пина сегмента] -> резистор -> [плюсовый провод мультиметра ::: минусовый провод мультиметра] -> минус питания.

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

я так понимаю, если это делать без резистора, то светодиод сгорит просто? и как искать из 10 пинов общий анод, наугад ?

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

protone77 пишет:

я так понимаю, если это делать без резистора, то светодиод сгорит просто? 

Да. Может быть прямо сразу, а может через некоторое время, но сгорит точно.

protone77 пишет:

как искать из 10 пинов общий анод, наугад ?

Так же как и все сегменты. В даташите на левом верхнем рисунке показано где находится пин 1. Нашли?

Номера пинов идут подряд от 1 до 5. Дальше перскакиваете на второй ряд - это будет 6-ой, он напротив пятого и идёте по второму ряду назад ... 7, 8, 9, 10. 10-ый находится напротив первого.

Общий анод - 8-ой. Сегменты я Вам расписал. Они все, кстати, подписаны на нижнем из правых рисунков. Смотрите, там просто написаны буквы сегментов и стоят номера пинов.

Возьимте какой-нибудь резистор (хоть килоом) и попробуйте подать +5 (если килоом, то можно и +12 :)) на общий анод, а землю через резистор на пин сегмента. Увидите, как сегмент засветится.

 

 

protone77
Offline
Зарегистрирован: 02.10.2016

не знаю, возможно я что-то не правильно сделал, но ничего не загорелось) ладно, завтра соберу всё на макетке с регистром и проверю

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

Нет, уж добейтесь без регистра, чтобы сегмент загорелся. Регистр даёт дополнительную сложность. Сначала убедитесь, что Вы один светодиод зажечь можете. А то не заработает с регисторм, а у Вас проверенного "тыла" нет.

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

Наверняка при переворачивании индикатора не учли, что пины зеркально перевернулись. Ведь первый пин Вам подписан при виде свеху, а не со стороны пинов.

А вообще, если источник 5В, а резистор 200-1000 Ом, то Вы можете пробовать тыкать в любые пины - Вы там НИЧЕГО не испротите и не сожжёте. Потыкайте. Что-нибудь загорится. Разбирайтесь.

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

Наверняка при переворачивании индикатора не учли, что пины зеркально перевернулись. Ведь первый пин Вам подписан при виде свеху, а не со стороны пинов.

А вообще, если источник 5В, а резистор 200-1000 Ом, то Вы можете пробовать тыкать в любые пины - Вы там НИЧЕГО не испротите и не сожжёте. Потыкайте. Что-нибудь загорится. Разбирайтесь.

я от мультиметра пытался он где-то 2-3в

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

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

Но вообще-то здесь беда. Помните мой пост №119. Я там сказал. что меня смущает то, что в даташите написано падение 1,8, а нарисовано 6 светодиодов! Это очень странно, т.к. 1,8 - нормально для одного красного светодиода, а для 6 последовательно (как нарисовано) должно быть 1,8х6 = 10,8 В!!!!

Проверить бы. У Вас есть 12 вольтовый источник? Хоть компьютерный БП. Попробуйте его подключить через резистор 510 - 1000 Ом. При таком резисторе от 12В Вы ничего не сожжёте независимо от того один там светодиод или шесть. Зато, если от 12В светится. а от 5 - нет, придётся признать, что в даташите лажа и реально там 10,8 вольт нужно. 

Сумеете проверить?

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

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

Но вообще-то здесь беда. Помните мой пост №119. Я там сказал. что меня смущает то, что в даташите написано падение 1,8, а нарисовано 6 светодиодов! Это очень странно, т.к. 1,8 - нормально для одного красного светодиода, а для 6 последовательно (как нарисовано) должно быть 1,8х6 = 10,8 В!!!!

Проверить бы. У Вас есть 12 вольтовый источник? Хоть компьютерный БП. Попробуйте его подключить через резистор 510 - 1000 Ом. При таком резисторе от 12В Вы ничего не сожжёте независимо от того один там светодиод или шесть. Зато, если от 12В светится. а от 5 - нет, придётся признать, что в даташите лажа и реально там 10,8 вольт нужно. 

Сумеете проверить?

есть режим проверки, но всреанво ничего не светится(( бп возможности подсоеденить нету, но мне кажется,что 6 диодов еле влезут и стоить это будет дорого

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

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

Ну, блин, придётся Вам найти БП. Неважно - хоть батарейки возьмите, но чтоб 12В было (можно несколько батареек последовательно) и резистор от 510 Ом до килоома. Попробуйте потыкаться с этим. Если там 6 светодиодов, как нарисовано в даташите, то у нас проблема, нуно будет думать, чем это хозяйство питать. Впрочем, будет проблема, будем думать. А пока добейстесь, чтобы сегменты светились. Пока не засветятся с регистром даже не суйтесь. Он тоже не заработает, только лишнюю сложность добавит.

protone77
Offline
Зарегистрирован: 02.10.2016

все откопал я свой бп выставил 10.8 все зажглось ярким светом))

перерыл пол балкона, аж интересно было

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

Опаньки!

 

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

Классный у нас даташит.

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

bizzon
Offline
Зарегистрирован: 29.03.2016

Без резистора больше не эксперементируйте. Может, совсем индикатор и не спалите, а вот яркость его (или сегмента) запросто может стать меньше других.

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

1. Соедините всё как надо: БП, резистор, сегмент. и замерьте напряжение на концах резистора. Т.е. щупы мультиметра на концы резистора. Скажите мне какой у Вас резистор, какое получилось напряжение и каково напряжение источника питания.

2. Соедините всё также, но разорвите цепь и в разрыв вставьте мультметр в режиме измерения тока. (как я писал раньше) и скажите мне напряжение источника питания и ток, который Вы измерили.

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

bizzon пишет:

Без резистора больше не эксперементируйте. Может, совсем индикатор и не спалите, а вот яркость его (или сегмента) запросто может стать меньше других.

А что, разве он без резистора? Я ж, блин, пальцы отбил писать "от 510 Ом до килоома"!

Что, правда без резистора? Вы это завязывайте!

bizzon
Offline
Зарегистрирован: 29.03.2016

Я думаю, что-таки да.

bizzon
Offline
Зарегистрирован: 29.03.2016

Ничего,что я подглядываю? :)) Я тут у своих часов программку модернизирую в меру сил.

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

1. Соедините всё как надо: БП, резистор, сегмент. и замерьте напряжение на концах резистора. Т.е. щупы мультиметра на концы резистора. Скажите мне какой у Вас резистор, какое получилось напряжение и каково напряжение источника питания.

2. Соедините всё также, но разорвите цепь и в разрыв вставьте мультметр в режиме измерения тока. (как я писал раньше) и скажите мне напряжение источника питания и ток, который Вы измерили.

 

2. напряжение источника я выставил 10.5 вольт а ток просто не показывает ни на источнике, ни на мультиметре. На мультиметре менял значения всеравно по 0

bizzon
Offline
Зарегистрирован: 29.03.2016
[code]
#include <DS1302.h>
#include "DHT.h"
#define DATA_PIN    13 // пин данных (англ. data)
#define LATCH_PIN   7 // пин такта (англ. clock)
#define CLOCK_PIN   8 // пин строба (англ. latch)
#define DHTPIN A0     // вход датчика температуры и влажности
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define BUTTON_PIN  10

byte segments[14] = {
  0b11101011, 0b10000001, 0b01110011, 0b11010011, 0b10011001,
  0b11011010, 0b11111010, 0b10000011, 0b11111011, 0b11011011, 0b00011011, 0b01101010, 0b11110000, 0b00000000
};

int ss, mm, hh, d, DD, MM, YY, mode, ES, DS, DM, EM, DH, EH, s, m, c, te, hu;
int led1 = 9;
DS1302 rtc(2, 3, 4); // Init the DS1302
Time t; // Init a Time-data structure
DHT dht(DHTPIN, DHTTYPE);
const int ledPin =  5;      // номер выхода, подключенного к светодиоду
// Variables will change:
int ledState = LOW;             // этой переменной устанавливаем состояние светодиода
long previousMillis = 0;        // храним время последнего переключения светодиода
long interval = 1000;

void setup()
{
  pinMode(DATA_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  pinMode(LATCH_PIN, OUTPUT);
  // задаем режим выхода для порта, подключенного к светодиоду
  pinMode(ledPin, OUTPUT);
  //pinMode(BUTTON_PIN, INPUT_PULLUP);
  analogWrite(led1, 0);
  // Set the clock to run-mode, and disable the write protection
  rtc.halt(false);
  rtc.writeProtect(false);

  //Устанавливаем время и дату
  //rtc.setDOW(FRIDAY);        // Set Day-of-Week to FRIDAY
  //rtc.setTime(18, 40, 30);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(29, 9, 2016);   // Set the date to August 6th, 2010
  dht.begin();

}

void loop()

{ // Get data from the DS1302
  t = rtc.getTime();
  ss = (t.sec);
  mm = (t.min);
  hh = (t.hour);
  byte DS = ss / 10;
  byte ES = ss % 10;
  byte DM = mm / 10;
  byte EM = mm % 10;
  byte EH = hh % 10;
  byte DH = hh / 10;
  if (ss == 50) pwm5();

  // Мигаем точкой ( пока без шима)
  unsigned long currentMillis = millis();

  //проверяем не прошел ли нужный интервал, если прошел то
  if (currentMillis - previousMillis > interval) {
    // сохраняем время последнего переключения
    previousMillis = currentMillis;

    // если светодиод не горит, то зажигаем, и наоборот
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // устанавливаем состояния выхода, чтобы включить или выключить светодиод
    digitalWrite(ledPin, ledState);
  }
}
// Выводим последовательно температуру, влажность(по 5 секунд) , время (с убыванием и нарастанием яркости).
void pwm5()
{ digitalWrite(ledPin, LOW);
  for (int i = 0; i <= 255; i++)
  { analogWrite (led1, i);
    delay(8);
  }
  byte te = dht.readTemperature();
  byte dt = te / 10; //десятки
  byte et = te % 10; //единицы
  digitalWrite(LATCH_PIN, LOW);
  if (dt == 0)shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[13]);//гасим незначащий 0
  else shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[dt]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[dt]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[et]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[10]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[11]);
  digitalWrite(LATCH_PIN, HIGH);

  for (int i = 255; i >= 0; i--)
  { analogWrite (led1, i);
    delay(8);
  }
    for (int i = 0; i <= 255; i++)
  { analogWrite (led1, i);
    delay(8);
  }
  byte hu = dht.readHumidity();
  byte ehu = hu % 10;
  byte dhu = hu / 10;
  digitalWrite(LATCH_PIN, LOW);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[dhu]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[ehu]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[10]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[12]);
  digitalWrite(LATCH_PIN, HIGH);

  for (int i = 255; i >= 0; i--)
  { analogWrite (led1, i);
    delay(8);
  }
   for (int i = 0; i <= 255; i++)
  { analogWrite (led1, i);
    delay(8);
  }
  byte DM = mm / 10;
  byte EM = mm % 10;
  byte EH = hh % 10;
  byte DH = hh / 10;
  delay (200);
  digitalWrite(LATCH_PIN, LOW);
  if (DH == 0)shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[13]);//гасим незначащий 0
  else shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[DH]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[EH]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[DM]);
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[EM]);
  digitalWrite(LATCH_PIN, HIGH);
  for (int i = 255; i >= 0; i--)
  { analogWrite (led1, i);
    delay(8);
  }
}


[/code]

led1- яркость

ledPin -мигающая точка

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

Ну, пределы другие поставьте. Вы поди поставили предел в ампер. Поставьте поменьше.

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

Сделайте хотя бы это, хотя ток бы и не помешал.

bizzon
Offline
Зарегистрирован: 29.03.2016

Свой код выложил. Те же 4 регистра, DHT22, DS1302. Индикаторы Kingbright сантиметров 7-8 высотой. Кривоват и сыроват,но работает уже с месяц.

protone77
Offline
Зарегистрирован: 02.10.2016

ЕвгенийП пишет:

Ну, пределы другие поставьте. Вы поди поставили предел в ампер. Поставьте поменьше.

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

Сделайте хотя бы это, хотя ток бы и не помешал.

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

Резистора у меня нету сейчас, поэтому падение напряжение измерить не могу. Индикатор начинает зажигаться от напряжения 10.5в

protone77
Offline
Зарегистрирован: 02.10.2016

я изначально всё делал с мультиметром и через резистор 510 ом( нашелся где-то) но ничего не загоралось и в процессе поиска блока питания резистор куда-то закатился. и когда я на блоке питания выставил 1.8вольта ничего не загорелось я решил, что там по 6 диодов и стал по немногу увеличивать и на 10.5 вольт всё нормально загорелось

bizzon
Offline
Зарегистрирован: 29.03.2016

Всё равно без резистора нельзя. Спалится на раз.

protone77
Offline
Зарегистрирован: 02.10.2016

bizzon пишет:

Всё равно без резистора нельзя. Спалится на раз.

у меня их 5 штук (когда покупал в магазине всё для этих часов и индикаторы,дали мне один в подарок к этим 4) но я не много не понимаю из-за чего они сгорят если резисторы там для ограничения напряжения( или нет?) а я выставлял напряжение немного ниже их рабочего