Sari la conținut
ELFORUM - Forumul electronistilor

PROBLEME FIRMWARE/ Digital Real Time Clock si calendar actualizat cu Arduino Uno.


bobo123

Postări Recomandate

Va salut . Ieri am construit un ceas digital in timp real si calendar actualizat  cu DS1307 RTC , afisaj din 4 matrice led si sensor temperature si umiditate DHT11 , placa folosita  Arduino Uno.  Ceasul are si 3 butoane de reglaj data, ora si luminozitate matrice led. La uplodat firmware (code.ino ) pe placa Arduino Uno totul a fost ok , nu am intampinat erori de compilare. Pe afisaj imi apare ora : 00:00:00 / data 01 ianuarie 2000 / ziua Sunday / temperatura 23 grade C / RH 40%.

Deci totul pare ok, problema este ca SECUNDELE nu pot fi setate desi cele 3 butoane de reglaj functioneaza ok. Secundele raman zero zero (00 ).Am reglat fara probleme data/ annul/ ziua / ora / minutele si luminozitate afisaj led. Ma repet secundele (cronometrul nu merge ).

Am incercat 3 firmware (cu doua din ele ceasul s-a comportat idem ) iar cu cel de-al treilea nu afisaza scrisul (textul ) in clar …apar alte simboluri si caractere in loc de litere .La toate cele 3 firmware nu se regleaza secundele .

Am instalat bibliotecile necesare in Arduino IDE :  RTClib by Adafruit /  Font_Data.h   /  MD_Parola   /    MAX7219_RTC_dht11  /  MD_DS1307 / MD_MAX72XX / SimpleDHT / thingspeak-arduino  .

Inca de la inceput am instalat biblioteca  RTClib  si am incercat exemplul (codul )  DS1307  pt setarea orei.

In firmware am schimbat PsetZone (0,4,1 ) in PsetZone (0,0,0 ). Fara niciun rezultat .

Am comentat / decomentat ” P.setFont(1, numeric 7seg ) ” eroare , nu a fost declarant in acest scop . Am simplificat linia de cod in ” numeric 7seg ”

Am apasat in mod repetat  dupa compilare cod, butonul reset al placi arduino uno , nici-un rezultat.

Mai jos voi atasa firmware in speranta ca voi primi o sugestie de la cineva care intelege mai bine decat mine limbajul de programare C++ .

Am uplodat codul sursa  cu  Arduino versiunea 1.8.13  de pe doua laptopuri cu system de operare diferit ( windows 10 Pro / respective windows 10 Home ). Oare sa descarc alta versiune de Arduino si sa instalez windows 7 sau 8 pe laptop ???

MENTIUNI . Când încarc firmware  pentru prima data pe arduino uno secundele ruleaza . Apoi când deconectez  si alimentez placa  din nou (prin cablul usb din laptop ) secundele stau pe loc .

Code.ino_clock_3_butoane.ino

Link spre comentariu
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • bobo123

    4

  • djvas

    1

  • daniels

    1

  • cimitavita

    1

Top autori în acest subiect

Care parte din cod ar trebui sa seteze secundele ?

eu inteleg asha :

Partea asta incrementeaza minutele  :

  else if (Mode == 3 ) {
    buttonA = false;
    RTC.m++;
    if (RTC.m >= 60 ) {
    RTC.m = 0;
  }
    RTC.writeTime();
 

iar la secunde ai :

 


  }
  else if (Mode == 4 ) {
    buttonA = false;
      RTC.s = 0;
    RTC.writeTime();

dupa cum vezi RTC.s = 0 

La 13.02.2025 la 23:06, bobo123 a spus:

 

MENTIUNI . Când încarc firmware  pentru prima data pe arduino uno secundele ruleaza . Apoi când deconectez  si alimentez placa  din nou (prin cablul usb din laptop ) secundele stau pe loc .

Code.ino_clock_3_butoane.ino 12.64 kB · 3 descărc

Doar secundele stau pe loc sau tot ceasul ? DS1307 are baterie de back-up ?

Ce rost au liniile astea de cod executate la fiecare punere sub tensiune a lui arduino ? Nu ar trebui verificat cumva daca este necesar sau nu sa setezi DS1307 ? 

 RTC.control(DS1307_CLOCK_HALT, DS1307_OFF);
  RTC.control(DS1307_12H, DS1307_OFF);

 

Eu aicea as verifica ce scrie Arduinu in registrii lui DS1307. 

Link spre comentariu

Va salut. Ora , minute, secunde  stau pe loc (probabil lipseste functia auto start dupa scriere firmware ).Singurele care se ” misca ” sunt cele doua puncte dintre ora si minute. Cele doua puncte clipesc intermitent ca la un ceas digital functional .  La scriere firmware ceasul Isi ia ora si data din laptop .Cu unul dintre butoane pot aduce si secundele la zero dar timpul sta pe loc ( la propriu si la figurat ). Modulul RTC are accumulator cr2032 de 3,6 volti (de backup ) . Pe langa asta intreg montajul electronic se alimenteaza dintro sursa de tensiune de 5 volti stabilizata .Sursa de 5 v este echipata cu modul ridicator de tensiune de tip MT3608 ,modul incarcare accumulator pe litiu model TP4056 si bineinteles accumulatorul pe litiu de 3,7v/ 2200mA.

 

Acum va voi spune cu am procedat la upload firmware pe Arduino uno: VA ROG SA-MI SPUNETI DACA AM PROCEDAT CORECT . 

                                                           Din exemplul DS1307 :

Am comentat linia //if    si   //}  .

 

//if (! rtc.isrunning()) {

    Serial.println("RTC is NOT running, let's set the time!");

    // When time needs to be set on a new device, or after a power loss, the

    // following line sets the RTC to the date & time this sketch was compiled

    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    // This line sets the RTC with an explicit date & time, for example to set

    // January 21, 2014 at 3am you would call:

    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

  //}

 

Apoi am decomentat  if   si   }

 

if (! rtc.isrunning()) {

    Serial.println("RTC is NOT running, let's set the time!");

    // When time needs to be set on a new device, or after a power loss, the

    // following line sets the RTC to the date & time this sketch was compiled

    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

    // This line sets the RTC with an explicit date & time, for example to set

    // January 21, 2014 at 3am you would call:

    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

  }

Apoi am uplodat si firmware Code.ino . Acum pe afisaj apare ora din laptop 17:45.49 ( si-a luat ora si data  din laptop insa timpul sta pe loc . Pot reseta secundele la zero cu ajutorul unui buton din cele trei ) .

La fel se intampla si cu acumulatorul cr2032 scos din modulul RTC.

Daca incerc sa comentez :

//RTC.control(DS1307_CLOCK_HALT, DS1307_OFF);

//RTC.control(DS1307_12H, DS1307_OFF);

Pe afisaj imi apar in locul orei doua simboluri , minutele si secundele se vad clar pe afisaj. Bineinteles timpul sta pe loc .

 

Daca incerc sa comentez RTC_DS1307 rtc;

//RTC_DS1307 rtc;

 

DateTime now = rtc.now();

                    ^~~

C:\Users\Bobo\AppData\Local\Temp\.arduinoIDE-unsaved2025116-9492-16uyvjb.lkr\ds1307\ds1307.ino:40:20: note: suggested alternative: 'getc'

     DateTime now = rtc.now();

                    ^~~

                    getc

 

exit status 1

 

Compilation error: 'rtc' was not declared in this scope

 

Observatie : azi am verificat in bios daca ora si data este setata corect .  Si in bios si in control panel ora si data sunt setate corect ...deci modulul rtc nu ar trebui sa simta vreo desincronizare de timp.

Tot azi am descarcat si cea mai noua versiune de Arduino IDE 2.3.4 pt WINDOWS 10 /64Biti. Ceasul se comporta idem la upload firmware. Ia ora si data din laptop dar timpul sta pe loc.

exemplu DS1307 si schema electrica ceas.docx

Link spre comentariu

Incearca sa initializezi DS1307

 

 

// part code for flashing LED
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
// Wire.write(0x00); // turns the SQW pin off
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave at 1Hz
// Wire.write(0x13); // sends 0x13 (hex) 00010011 (binary) 32kHz

Wire.endTransmission();

Link spre comentariu

Buna ziua, azi am facut cateva incercari la ceasul RTC. Din libraria RTClib / exemple DS1307 am vizionat  ce scrie ARDUINO in registrii lui DS1307 . Presupun ca nu am comentat sau decomentat liniile de cod care trebuiau inainte de upload. Asta ar fi prima pista pe care as merge acum. 

Urmatoarea pista ar fi sa initializez (adica sa invat ) DS1307 , dar nu stiu cum sa procedez. De pe youtube nu am inteles mare lucru. Nu am mai facut asta .

Am atasat 3 documente :

primul document ”Cum am procedat ”  la fixare data si ora din libraria ds1307. (adica ce linii de cod am comentat/ decomentat inainte de scriere firmware Code.ino pe Arduino ). Contine si poza cu ceasul in carcasa .

Al doilea document contine firmware Code.ino

Al treilea document contine exemplul din biblioteca RTClib / DS1307 cu ajutorul caruia setez ora si data pe modulul RTC.VA ROG MULT DE TOT sa va uitati aici si sa-mi ziceti daca am comentat/ decomentat liniile de cod corect inainte de upload Code.ino . 

Firmware Dot_Matrix_Clock.docx RTClib -exemplu DS1307.docx cum am setat ora partea 1.docx

Link spre comentariu

Nu prea ai ce inițializare să faci la DS1307 înafară de setarea orei și datei și a bitului CH. Dacă nu setezi astea, RTC pornește de la 0 dacă CH este 1. Dacă nu, pauză.

 

Singurul bit important din DS1307 este bitul CH (bitul 7 din locația 00h). Dacă acesta este 0, contoarele RTC sunt blocate pentru a face economie de energie (atunci când RTC este folosit doar pentru memoria lui). Dacă vrei ca RTC să meargă, înscrii 1 în CH. Acest bit trebuie pus 1 de fiecare dată când modifici secundele (când scrii în locația 00h).

 

Nu folosești ieșirea SQR pentru a sincroniza uC cu DS1307, așa că la locația 07h din DS1307 nu prea conteaza ce e. Pentru a sincroniza DS1307 cu uC trebuie ca în locația 07h să fie înscris 10h dar ieșirea SQW/OUT trebuie legată la uC pentru a genera o întrerupere externă la fiecare modificare a stării acestei ieșiri. Această ieșire face și ca ledul pentru secunde să clipească. În felul ăsta nu mai este nevoie să citești tot timpul RTC pentru a afla secundele.

 

Iar progrămașul care l-ai pus, nu permite modificarea secundelor ci doar resetarea lor. Asemănător ceasurilor de mână apărute prin anii 80. Puneai ora dinainte, iar când auzeai ultimul beep la radio, apăsai SET.

Trebuie să verifici dacă RTClib  folosită de tine în momentul în care înscrie 00 la secunde pune și bitul 7 pe 1. Dacă nu face asta, imediat după ce au fost înscrise secundele, trebuie să pui ”manual” bitul 7 pe 1 imediat după resetarea secundelor. Sau ai putea încerca ca la secunde, în loc de 00 zecimal să pună 80h, ceasul pornind contorizarea în momentul în care setezi ora fără să mai fie nevoie de nici o inițializare.

 

Toate astea sunt explicate în datasheetul lui DS1307 și înainte de a folosi circuitul, trebuia să citești mai întâi datasheetul.

 

Editat de cimitavita
Link spre comentariu

Buna seara , azi am rezolvat cu ceasul . Am montat un DS3231 (mi a sosit azi ) si a mers din prima .

Aveam si varianta de rezerva prin initierea rtc-ului. Am gasit pe youtube acest tutorial : ” Easy real time clock interrupt / how to use the DS3231 SQW 1Hz Output ”. 

Va multumesc inca o data pt suport, sugestii si pt timpul alocat aici pe forum.

Toate cele bune .

 

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări