www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Ura z DS1307 si ne zapomni po izklopu napajanja
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 477
Aktiv.: 3.12
Kraj: Radovljica

PrispevekObjavljeno: Pet Apr 30, 2021 11:03 pm    Naslov sporočila:   Odgovori s citatom

Spremenjivki __DATE__ in __TIME__, ti nastavi prevajalnik, in dejansko namesto spremenjivk vstavi trenutni čas. Se pravi, ti čas nastavi na čas ko si progam prevajal. ..
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Sob Maj 01, 2021 12:09 am    Naslov sporočila:   Odgovori s citatom

Tvoj program je še najbolj podoben temu:
https://github.com/jarzebski/Arduino-DS1307/blob/master/DS1307_simple/DS1307_simple.ino


Knjižnic za ds1307 je pa nešteto in vsaka ima svoje ukaze.
Posledično primeri kode od ene knjižnice ne delujejo z drugo knjižnico.

Pripni povezavo do vira, kje si dobil tvojo.

Našel pa sem tole:
clock. setDateTime(__DATE__, __TIME__); resets the clock to compile date & time. Set it once then load a modified program that doesn't include that line

V komentarju torej piše: Ta vrstica resetira DS1307 na čas prevajanja (compile time). Prvič naložiš program, ki vsebuje gornjo vrstico.
Nato pa to vrstico zakomentiraš in ponovno naložiš program. V bistvu pri drugem nalaganju zakomentiraj kar celoten if stavek znotraj setup() funkcije.

Nato lahko normalno nalagaš gor razne poskusne programe, ki ne vsebujejo tega if stavka in se bo čas ohranil, dokler ne boš odstranil baterije.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 17.11

PrispevekObjavljeno: Sob Maj 01, 2021 4:31 pm    Naslov sporočila:   Odgovori s citatom

Nastavljanje datuma in časa s pošiljanjem znakov na Arduinota:
Koda:

#include <DS1307.h>
DS1307 clock;   //(0x68)
RTCDateTime dt;

byte incomingByte = 0; // for incoming serial data (sprejeti byte)
byte StareSek = 0; // Stare Sekunde, da časa ne izpisuje prepogosto, temveč vsako sekundo

void setup()
{
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}


void loop()
{
  dt = clock.getDateTime(); // loop() lepo bere datum in čas

  BereSerP(); // Bere Serijski Port

  if(dt.second != StareSek)
  { // Izpiše samo, kadar so nove sekunde različne od starih
    Serial.print("Datum in ura: ");
    Serial.print(dt.year);   Serial.print("-");
    Serial.print(dt.month);   Serial.print("-");
    Serial.print(dt.day);    Serial.print(" ");
    Serial.print(dt.hour);   Serial.print(":"); 
    Serial.print(dt.minute);   Serial.print(":");
    Serial.print(dt.second);   Serial.println("");
    StareSek = dt.second;
  }

} // void loop()

void BereSerP() // Bere Serijski Port
{
  if (Serial.available() > 0) // je kaj sprejeto?
  { // read the incoming byte:
    incomingByte = Serial.read(); // je
  }
  else return; // nič ni sprejetega, lahko leti ven

  switch(incomingByte) // preveri sprejeto in
  { // spremeni ustrezno dt vrednost
    case  0:  break; // ničla 0x00 (brez narekovajev): ne stori ničesar
    case  'Y':  dt.year++;  break; // črka Y
    case  'y':  dt.year--;  break; // črka mali y
    case  'M':  dt.month++;  break;
    case  'm':  dt.month--;  break;
    case  'D':  dt.day++;  break;
    case  'd':  dt.day--;  break;
    case  'H':  dt.hour++;  break;
    case  'h':  dt.hour--;  break;
    case  'N': dt.minute++;  break; // miNute
    case  'n':  dt.minute--;  break;  // miNute
    case  'S':  dt.second++;  break;
    case  's':  dt.second--;  break;
    default:  incomingByte = 0; // če je znak neveljaven, ga izbriše
  }
  if(incomingByte > 0) // bil je veljaven
  {
    clock.setDateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second); // Vpiše spremembo nazaj v DS1307
    incomingByte = 0; // v vsakem primeru izbriše sprejet znak
    StareSek = 255; // da takoj izpiše spremembo
  }
}  // void BereSerP()


Branje DS in serijskega porta se dogaja ves čas, izpis pa samo vsako sekundo ali, če je kakšna sprememba.

Spremenljivke se povečajo ++ ali zmanjšajo -- brez preverjanja veljavnosti. Če "nastaviš" npr sekunde ali minute na 61 ali 255 (ali ostale spremenljivke izven dovoljenih vrednosti), se lahko zgodi "marsikaj". Za hec preveri in poročaj. Po potrebi v case dodaj if stavke za omejitev posameznih spremenljivk navzgor in navzdol.

case "s": // zmanjša sekunde
if(dt.second == 0) dt.second = 59; // dol okrog iz 0 na 59
else dt.second--;
break;

case "S": // poveča sekunde
if(dt.second >= 59) dt.second = 0; // gor okrog iz 59 na 0
else dt.second++;
break;

... in tako še za ostale.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group