Часы DS1307 + MAX7219 7-сегментный индикатор

Vitali-71
Offline
Зарегистрирован: 25.04.2017

так Женя и пишу что выдает ОШИБКУ!!!!

exit status 1
invalid operands of types 'float' and 'int' to binary 'operator%'
Vitali-71
Offline
Зарегистрирован: 25.04.2017

так Женя и пишу что выдает ОШИБКУ!!!!

exit status 1
invalid operands of types 'float' and 'int' to binary 'operator%'
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

На что Выдаёт? На код из 25-го поста? Или из 33-го. Я же говорю, поменяйте как в 33-ем.

Значит так, полный актуальный код вместе с актуальным текстом ошибки в студию!

Vitali-71
Offline
Зарегистрирован: 25.04.2017
//We always have to include the library
#include "LedControl.h"
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>

#include <DHT_U.h>
#define DHTPIN            3         // Pin which is connected to the DHT sensor.
#define DHTTYPE           DHT22     // DHT 22 (AM2302)

/* pin 13 is connected to the DIN
   pin 12 is connected to the CLK 
   pin 11 is connected to CS
   We have only a single MAX72XX.*/
LedControl lc=LedControl(13,12,11,1);

byte a[1]={B10000000};
byte b[1]={B00000000};
byte c[1]={B01100011};

DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;

//int event;


void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("DS1307RTC Read Test");

  /* MAX72XX находится в режиме энергосбережения при запуске,
     мы должны сделать пробуждение*/
  lc.shutdown(0,false);
  /* Установите яркость на средние значения */
  lc.setIntensity(0,8);
  /* и очистить дисплей */
  lc.clearDisplay(0);
  
  //lc.setRow(0,6,a[0]);
  dht.begin();
  Serial.println("DHTxx Unified Sensor Example");
  // Print temperature sensor details.
  sensor_t sensor;
  dht.temperature().getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.println("Temperature");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" *C");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" *C");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" *C");  
  Serial.println("------------------------------------");
  // Print humidity sensor details.
  dht.humidity().getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.println("Humidity");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println("%");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println("%");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println("%");  
  Serial.println("------------------------------------");
  // Set delay between sensor readings based on sensor details.
  delayMS = sensor.min_delay / 1000;

}

void loop() {
  tmElements_t tm;
  
  if (RTC.read(tm)) {
      
    Serial.print("Ok, Time = "); //Надпись перед часами
    print2digits(tm.Hour);       //время - часы
    Serial.write(':');
    print2digits(tm.Minute);     //время - минуты
    Serial.write(':');
    print2digits(tm.Second);     //время - секунды
    Serial.write(';');
    Serial.println();            //печать с новой строки
    
    lc.setDigit(0,7, tm.Hour / 10,false);
    lc.setDigit(0,6, tm.Hour % 10,false); //печать точки как секунда
    lc.setDigit(0,5, tm.Minute / 10,false);
    lc.setDigit(0,4, tm.Minute % 10,false);
    delay(300);
    lc.setDigit(0,6, tm.Hour % 10,true);
    delay(300);
    } else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
    delay(9000);
  }
  //delay(500);

  
// Delay between measurements.
  delay(delayMS);
  // Get temperature event and print its value.
  sensors_event_t event;  
  dht.temperature().getEvent(&event);
  if (isnan(event.temperature)) {
    Serial.println("Error reading temperature!");
    } else {
    Serial.print("Temperature: ");
    Serial.print(event.temperature);
    Serial.println(" *C");
    
    lc.setDigit(0,2, event.temperature / 10,false);
    lc.setDigit(0,1, event.temperature % 10,false);
    lc.setRow(0,0,c[0]);  
        
  }
  // Get humidity event and print its value.
  dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) {
    Serial.println("Error reading humidity!");
  } else {
    Serial.print("Humidity: ");
    Serial.print(event.relative_humidity);
    Serial.println("%");
  } 
  delay(500);
}

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

ошибка - 

 
exit status 1
invalid operands of types 'float' and 'int' to binary 'operator%'
Vitali-71
Offline
Зарегистрирован: 25.04.2017

Ребята все!!! до ТугоДумался ! все работает!!!

Есть пара вопросов!

переключение экрана с помощью millis делается?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

По всякому делается. И при millis тоже.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

а как еще можно?

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Можно - по кнопке.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

По обновлению информации с датчика. Какой датчик обновился, такой экран и вылазит. Все зависит от вашей компитентности. Но компитентность ее нельзя купить или "спросить на форуме" , ее надо наработать.

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

qwone пишет:

компитентность ее нельзя купить или "спросить на форуме"

«Компитентность» - это да. «Граматность» - тоже.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ворота, если вам нужна «Граматность» , то "покупайте" или "спрашивайте на соответсвующем форуме".

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

Да, она тебе нужна, а не мне. Ты же тут учить "некомпитентых" людей на путь истинный наставляешь, а не я.

bbv
Offline
Зарегистрирован: 11.02.2020

Всем привет!!! Имеются семисегментные индикаторы в количестве 4 шт. - 18011AB, синие, подключаем их к ардуине через MAX7219 , по стандарной схеме, это часы, они работают, но индикаторы светят очень тускло, резистор на максе 10кОм, прогаммно пробывали по максимуму интенсивность включать, ничего не меняется, все также тускло...пробывали после 7219 по сегментам подключать Udn2981a, ярче начинает гореть, но засвечиваются те сегменты которые не должны гореть в данный момент и именно в четвертом разряде (крайний справа)...напряжение питтания индикаторов около 6в-7в через Udn2981a. Может кто подскажет как увеличить яркость без засвечивания сегментов которые не должны гореть??

Гриша
Offline
Зарегистрирован: 27.04.2014

bbv пишет:

Всем привет!!! Имеются семисегментные индикаторы в количестве 4 шт. - 18011AB, синие,

а что говорится в ДШ на "Синие" какое напряжение требуется? Вернее какой ток?

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

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

bbv пишет:
напряжение питтания индикаторов около 6в-7в 
А не пробовали сделать как написано в документации? Подать 10,5В на сегмент и 3,5 на точку? 

bbv
Offline
Зарегистрирован: 11.02.2020

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

bbv
Offline
Зарегистрирован: 11.02.2020

7в (если точнее 6,88в это более менее комфортно горит), 5,95в - еле заметно...

bbv
Offline
Зарегистрирован: 11.02.2020

bbv пишет:
7в (если точнее 6,88в это более менее комфортно горит), 5,95в - еле заметно...

bbv
Offline
Зарегистрирован: 11.02.2020

bbv пишет:
7в (если точнее 6,88в это более менее комфортно горит), 5,95в - еле заметно...

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

Поставьте на линии сегментов (или цифр) транзисторы для усиления напряжения. Можно транзисторную сборку. А токозадающий резистор на 7219 посчитайте с учётом коэффициента усиления транзистора. Я бы сначала посчитал грубо, а потом бы экспериментально подобрал поточнее.

Уверен, что это не лучший вариант, думаю Вам тут подскажут получше

bbv
Offline
Зарегистрирован: 11.02.2020

Так еще раз.....Поскольку "мой" индикатор с  общим катодом, я писал, что в линию сегментов ставил UDN2981A, это 8 канальный светодиодный драйвер, максимальный ток каждого канала 500ма, напряжения питания +7в подавал на сборку с бустера МТ3608 (12в подается по ниже приведенной схеме, но не стал рисковать, так как там применялись индикаторы большего размера  с большим числом светодиодов в каждой цепочке сегмента)...резистор интенсивности на максе подобрал чуть больше минимального по ДШ = 10кОм (по ДШ 9,53 кОм),  хотя и ставил и 40кОм и 30кОм, 20кОм, мало что изменялось...Так вот, сегменты стали светиться ярче, но и засветы "ненужных" сегментов в данный момент начали появляться тоже. Вопрос ...как избавиться от засветов "ненужных" сегментов??? 

 

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

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

При таком включении Вы теряете управление током, которое Вам обеспечивает  MAX7219, потому Вам обязательно нужны резисторы для ограничения тока (см. рисунок в правом нижнем углу стр. 6 даташита).

Рассчитайте резисторы и поставьте. Если засветка сохранится, ищите сопли в соединении. Не должно там быть никакой засветки.

bbv
Offline
Зарегистрирован: 11.02.2020

Согласен, в классической схеме (со сдвиговыми регистрами 74HC595) должны быть токоограничивающие резисторы в цепи каждого сегмента, как изображено в ДШ, но они упущены по причинам использования другого метода ограничения тока — МАХ7219 умеет изменять скважность управляющих импульсов, что в сумме с возможность регулировки напряжения питания индикаторов даст необходимый результат...

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

Ааа, Вы поспорить сюда пришли? Ну, если так, то без меня.

МАХ7219  регулирует ток. А Вы после него всунули усилитель с практически бесконечным коэффициентом усиления. Я же Вам сказал, при такой схеме о регулировке тока МАХ7219  забудьте - Вы её потеряли!

bbv
Offline
Зарегистрирован: 11.02.2020

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

bbv
Offline
Зарегистрирован: 11.02.2020

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

Ааа, Вы поспорить сюда пришли? Ну, если так, то без меня.

 

 

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

Гриша
Offline
Зарегистрирован: 27.04.2014

bbv пишет:

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

без всякого "наверное", просто прав.

bbv пишет:

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

Готовьтесь к варианту, что избавиться не получится - Китай он такой...

 и рассмотрите вариант с альтернативой с  MBI5026 - юзал, для таких задач супер. У нее вагон аналогов, управляется  shiftOut()

ну или как я "делал" :)

bbv
Offline
Зарегистрирован: 11.02.2020

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

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

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

Вы это сделали? Какие у Вас резисторы?

bbv
Offline
Зарегистрирован: 11.02.2020

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

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

bbv пишет:

посчитал 175 Ом резисторы нужны,

На какой это, интересно, ток? Если питание 12В, а светодиодам нужно 10.5В, то при токе 20мА

(12-10,5) / 0,02 = 75

Откуда 175?

bbv
Offline
Зарегистрирован: 11.02.2020

на ток 30мА при напряжении 6,75 в (моим индикаторам этого напряжения достаточно, чтобы они светились комфортно для глаз) --- (12-6,75)/0,03=175  

bbv
Offline
Зарегистрирован: 11.02.2020

Читал если есть внешние токоограничительные устройства, то токозадающий резистор на 7219 не работает никак и действительно подтвердилось практически...

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

bbv пишет:

на ток 30мА 

Простите, Вы здоровы? Я же Вам давал документацию. Да и Вы сами приводили в #69. Вы читали что там написано? 30mA - это АБСОЛЮТНЫЙ МАКСИМУМ! А Вы хотите с таким током его на постоянку эксплуатировать? Нормальный ток светодиода - 20!

bbv пишет:

при напряжении 6,75 в (моим индикаторам этого напряжения достаточно)

У Вас что было в школе по физике? Падение напряжения на диоде - величина постоянная! Если у Вас источник 12В, то светодиод сожрёт свои 10,5 по-любому, просто ток будет меньше.

bbv пишет:

Читал если есть внешние токоограничительные устройства, то токозадающий резистор на 7219 не работает никак и действительно подтвердилось практически...

Да, а чего ж Вы вчера утверждали обратное? Да и кроме того, с чего Вы взяли, что "не работает никак". Нормально работает и хреначит весь свой ток на входы Вашего "массива дарлингтонов". А он (этот ток) там нахрен не нужен. Так что ставьте резистор, такой, чтобы ток был типа 1-2мА, больше там не надо.

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

SLKH
Offline
Зарегистрирован: 17.08.2015

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

Да, а чего ж Вы вчера утверждали обратное? Да и кроме того, с чего Вы взяли, что "не работает никак". Нормально работает и хреначит весь свой ток на входы Вашего "массива дарлингтонов". А он (этот ток) там нахрен не нужен. Так что ставьте резистор, такой, чтобы ток был типа 1-2мА, больше там не надо.

совсем не нужен там внешний токозадающий резистор. у UDN2981 макс. допустимое входное напряжение 15 вольт, какой-то резистор на входе нарисован (Dwg. No. A-10,242B), и на картинке No. A-11,115B (стр. 6) его наличие явно просматривается.

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

SLKH, Вы совсем не о том резисторе, о котором я.

Plasteroid
Plasteroid аватар
Offline
Зарегистрирован: 15.07.2020

bbv пишет:

Читал если есть внешние токоограничительные устройства, то токозадающий резистор на 7219 не работает никак и действительно подтвердилось практически...

Года  4-ре назад собрал на подобных индикаторах(высоковольтных,от 5в очень тускло светились) часики на EEP-12 и MAX7219 .Номиналы токоограничительных резисторов не помню. После их подбора регулируется яркость и программно через MAX7219 (яркость днем и ночью разная).На схеме справа выходы на 4-ре семисегментника.

U1-UDN2981A ,U2-MAX7219, Q2-ULN2003A ,U5-7404, J1 и J2 -выходы на семисегментники.Питание  12В

 

 

SLKH
Offline
Зарегистрирован: 17.08.2015

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

SLKH, Вы совсем не о том резисторе, о котором я.

ла.

SLKH
Offline
Зарегистрирован: 17.08.2015

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

bbv пишет:

посчитал 175 Ом резисторы нужны,

На какой это, интересно, ток? Если питание 12В, а светодиодам нужно 10.5В, то при токе 20мА

(12-10,5) / 0,02 = 75

Откуда 175?

не будет там 12 вольт. дарлингтон, да ещё и с нагрузкой в эмиттере съест от полутора до двух вольт даже на малых токах.

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

 

bbv
Offline
Зарегистрирован: 11.02.2020

Plasteroid пишет:

bbv пишет:

Читал если есть внешние токоограничительные устройства, то токозадающий резистор на 7219 не работает никак и действительно подтвердилось практически...

Года  4-ре назад собрал на подобных индикаторах(высоковольтных,от 5в очень тускло светились) часики на EEP-12 и MAX7219 .Номиналы токоограничительных резисторов не помню. После их подбора регулируется яркость и программно через MAX7219 (яркость днем и ночью разная).На схеме справа выходы на 4-ре семисегментника.

U1-UDN2981A ,U2-MAX7219, Q2-ULN2003A ,U5-7404, J1 и J2 -выходы на семисегментники.Питание  12В

 

 

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

Plasteroid
Plasteroid аватар
Offline
Зарегистрирован: 15.07.2020

У меня это построено на ESP-12.  Там нет DS1307-время  берется с сервера времени.Где-то есть и печатка.

Печатку не нашел . Только скриншот  с DIPTRACE остался.

bbv
Offline
Зарегистрирован: 11.02.2020

Доделал схему с учетом всех имеющихся замечаний, яркость индикаторов могу регулировать тем же питанием от 6-12 вольт, до этого также мог, но...фантомы никуда не исчезли......Прошу помощи у гуру , что не так? Схема на данный момент такая... 

Гриша
Offline
Зарегистрирован: 27.04.2014

вариант 1 - на MAX7219 и на все микросхемы после  нее необходимо повесить конденсаторы по питанию, не полярные, блокировочные.  самым коротким способом, в самом прямом смысле, буквально положить конденсатор на микросхему сверху, а ее ноги дотянуть до ног МС и припаять.

варианта 2 пока не придумал.

bbv
Offline
Зарегистрирован: 11.02.2020

Какой номинал конденсаторов?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

керамика 0.1uF

Гриша
Offline
Зарегистрирован: 27.04.2014

bbv пишет:

Какой номинал конденсаторов?


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

еще тут почитайте, для комплекта

bbv
Offline
Зарегистрирован: 11.02.2020

Увы, это не помогло(((

Гриша
Offline
Зарегистрирован: 27.04.2014

bbv пишет:

Увы, это не помогло(((

припаяли или просто подоткнули? нужно паять, контакт должен быть качественный

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

На фото у второй единицы вроде бы все в порядке и у двойки один сегмент. Так же и «в жизни»? 

bbv
Offline
Зарегистрирован: 11.02.2020

у единицы да все в порядке, но как только там 2 появляется или другая цифра сразу призраки появляются, да припаивал, да не не помогает это, уже все микрухи поменял, тоже самое...((( какая то хрень..пробывал по одному зажигать индикаторы, никаких призраков нет, как вместе так сразу призраки появляются((