Beállítás, óra DS1307

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Dvix95
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. június 15. hétfő, 20:56

Beállítás, óra DS1307

Hozzászólás Szerző: Dvix95 »

Sziasztok.
Szeretnék csinálni egy órát ds1207 el működik is szépen csak egy problémám van ,szeretném ha az időt manuálisan is gombok segítségével tudnám változtatni percet és az órát 2-2 gombal 1 hozzá ad 1 elvesz egyet , a segítséget előre is köszönöm .

Áthelyeztem a témát a helyére (admin).
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: LCD óra DS1307-el

Hozzászólás Szerző: Robert »

Hol akadtálk el? Mit vársz váalsznak?

viewtopic.php?f=1&t=827
"Ha programozási kérdés merül fel, akkor programkód nélkül nagyon nagy a kihívás. Bár ötletbörzét is lehet tartani."
Dvix95
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. június 15. hétfő, 20:56

Re: LCD óra DS1307-el

Hozzászólás Szerző: Dvix95 »

Igaz,bocsi konkrétan nem akadtam el sehol mert nem tudom hogyan kéne ezt megoldani egy neten talált kódot töltöttem fel és az megy csak annyi hogy az magától állítja be az időt de nekem még + kéne ,hogy tudjam menetközbe kézzel is állítani. Ezt a kódot másoltam be :

Kód: Egész kijelölése

 #include <Wire.h>
#include "RTClib.h"//a könyvtárunk inicializálása

RTC_DS1307 RTC;

void setup () {
Serial.begin(57600);//soros monitor bitsebessége
Wire.begin();
RTC.begin();


if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");// ha nem érzékeli az RTC futását hibaüzenet jelenik meg
// először beállítjuk a kezdő dátumot és ídőt az RTC-n
RTC.adjust(DateTime(__DATE__, __TIME__));
}

}

void loop () {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);// év lekérdezése és kiíratás
Serial.print('/');
Serial.print(now.month(), DEC);//hónap lekérdezése
Serial.print('/');
Serial.print(now.day(), DEC);//stb....
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

Serial.print(" since 1970 = ");
Serial.print(now.unixtime());// másodpercben kiirt dátum és idő
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");

//
DateTime future (now.unixtime() + 7 * 86400L + 30);//7nap ms-ben +30ms jövőidő

Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);//jövőidő kiszámitás
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();

Serial.println();
delay(3000);//3s várakozás az új ciklusig
}
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Beállítás, óra DS1307

Hozzászólás Szerző: Robert »

Khm....
Ez a standard RTC mintakód. Gyakorlatiag _semmit_ nem tettél hozzá...
Nyomógombkezelés hol van?
Sültgalamb
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Beállítás, óra DS1307

Hozzászólás Szerző: Robert »

Dvix95
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. június 15. hétfő, 20:56

Re: Beállítás, óra DS1307

Hozzászólás Szerző: Dvix95 »

Ezt írtam ,hogy azt se tudom hogy kezdjek hozzá azért csak a minta kód van meg annyi módosítással,hogy LCD re van kiíratva.
Dvix95
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. június 15. hétfő, 20:56

Re: Beállítás, óra DS1307

Hozzászólás Szerző: Dvix95 »

Megnéztem a linket ,köszi.
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Beállítás, óra DS1307

Hozzászólás Szerző: csegebiga »

ha a mintaprogram működik, esetleg gondold meg, hogy átírod a beállítását a kvarcórák kétgombos set/step vezérlésére!

ez úgy működik, hogy a Set gomb (rövid) lenyomásával választhatsz a kijelezni kívánt adatok közül (óra-dátum-ébresztés-estébé),
a SET gomb hosszú (2-3sec) megnyomásával bemész az aktuális adat beállításába, (pl. ébresztés)
az adat villogni kezd (pl az ébresztés órája),
a STEP gomb röviden nyomva +1 et hozzáad,
a STEP gomb folyamatosan nyomva +5öt hozzáad,(óra beállításakor 23 után átfordul amíg nyomják a gombot)
a SET gomb röviden nyomva a következő adatra lép
az adat villogni kezd (pl ébresztés perc)
beállítása a STEP gombbal, mint fent,
a SET gomb hosszan nyomva kilép a beállításból,
ha dátum vagy idő beállítása történt,és elmenti az rtc-be az új értékeket.
ha ébresztés állítása történt, elmenti nem felejtő memóriába (ha jól emléxem, ez is van az rtc chipben 56 byte)

mint látod, ez is két gombos vezérlés, csak kicsit többet tudsz vele tenni, mint az óra-perc beállítással a példaprogramban.
(c)

ui:én azért az lcd háttérvilágításával is csinálnék valamit,
egyszer, mert éjjel bevilágítaná a szobát,
és másodszor, mert nagyon kérdéses a kínai modulok háttérvilágításának élettartama (túl vannak hajtva)
Dvix95
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. június 15. hétfő, 20:56

Re: Beállítás, óra DS1307

Hozzászólás Szerző: Dvix95 »

Igen ,egy ehhez hasonlót szeretnék csinálni ,hogy az időt át tudjam állítani amit a mintaprogram szerint készítettem el csak hát kezdő vagyok úgyhogy nem tudom pontosan hogyan is kezdjek bele, az lcd háttér világításához csináltam egy fényerő szabályzót amit egy fotó ellenállás vezérel ha sötét van halvány ha világos erősebb a fénye.
Dvix95
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. június 15. hétfő, 20:56

Re: Beállítás, óra DS1307

Hozzászólás Szerző: Dvix95 »

valahogy ebbe a példa programba nem lehetne bele tenni pluszba,hogy ne keljen az egészet át írni ,erre is csak azért volna szükség ,hogy a pontatlanság miatti eltérést tudjam állítani nem szeretnék tényleg semmi extrát.
Dvix95
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. június 15. hétfő, 20:56

Re: Beállítás, óra DS1307

Hozzászólás Szerző: Dvix95 »

Újabb probléma adódott feltöltöttem azt a kódot ami volt a linkben ,megnéztem stb.,utána vissza töltöttem azt ami előtte volt de most már az időt nem állítja be csak találomra valami időpontot.
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Beállítás, óra DS1307

Hozzászólás Szerző: csegebiga »

akkor kezdjünk neki!
először is:mit akarsz csinálni?
szedd össze a gondolataid, írd le, mit szeretnél megvalósítani?
- óra az rtc chippel,
- lcd kiítással
- két gombos vezérléssel
- ébresztés kell-e?

ezek után szétszeded a feladatot részekre, és külön megcsinálod őket.

lcd kezelése
lcd definiálása,
lcd kinézetének megtervezése, kiírása pozícióba
lcd adatok frissítése, kerülve az lcd.clear() használatát

rtc kezelés:
busz kezelés,
rtc olvasása
rtc írása

ezzel megy egy egyszerű órád

gombok vezérlésének megtervezése, (mint atz előző hszemben részleteztem, ott is lépésenként okosíható a program)
gombok definiálása,
leprogramozása,
pergésmentesítés,
okosítások(auto ismétlés stb )

ezek után kész az óra akalmazásod
még megírhatsz egy ébresztést, ha kell, és tényleg készen is vagy!
ébresztési idő beállítása (gombkezelés)
ébresztési adatok eltárolása (rtc írás)
ébresztési adatok olvasás (rtc olvasás)
idő komparátor, szundi funkció lekezelése

látod?
így nem egyben kellett megírni egy órát, hanem kisebb, emészthető lépésekkel haladhatsz a megoldásod felé
(c)
Dvix95
DrótVégénSzéndarab
Hozzászólások: 23
Csatlakozott: 2015. június 15. hétfő, 20:56

Re: Beállítás, óra DS1307

Hozzászólás Szerző: Dvix95 »

Így már sokkal világosabb , LCD kezelése az megy ébresztő nem kell amit beletennék,hogy beállított időnként kapcsoljon ez is ment , de maga az rtc kezelés,busz kezelés,
rtc olvasása, rtc írása nem világos számomra nem tudom milyen parancsokat kell használnom ,ahhoz,hogy ez kivitelezhető legyen amire sikerült haladni az is csak a példa program átalakítása volt ez működik 7:00 kor 5mp re bekapcsol a led ,de tovább nem tudtam haladni ,ami annyiból állna ,hogy a 2,5 ös lábon lévő nyomógombbal tudok a perchez hozzáadni vagy kivonni.

Kód: Egész kijelölése

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#include <Wire.h>
#include "RTClib.h"//a könyvtárunk inicializálása
RTC_DS1307 RTC;

void setup () {
 lcd.begin(16,2);
 pinMode(3,OUTPUT);
 pinMode(2,INPUT);
 pinMode(5,INPUT);
 digitalWrite(13,LOW);
Wire.begin();
RTC.begin();


if (! RTC.isrunning()) {
lcd.println("RTC hiba!");// ha nem érzékeli az RTC futását hibaüzenet jelenik meg
RTC.adjust(DateTime(__DATE__, __TIME__));// először beállítjuk a kezdő dátumot és ídőt az RTC-n
}
if(Serial.available()){
RTC.adjust(DateTime(__DATE__, __TIME__));
}}

void loop () {
  delay(1000);
lcd.clear();

//---------------------------------------------------idő beállítás------------------------
DateTime now = RTC.now();
lcd.print(now.year(), DEC);// év lekérdezése és kiíratás
lcd.print('/');
if(now.month()<10)
{lcd.print("0");}
lcd.print(now.month(), DEC);//hónap lekérdezése
lcd.print('/');
if(now.day()<10)
{lcd.print("0");}
lcd.print(now.day(), DEC);//stb....
lcd.setCursor(0,1);
if(now.hour()<10)
{lcd.print("0");}
lcd.print(now.hour(), DEC);
lcd.print(':');
if(now.minute()<10)
{lcd.print("0");}
lcd.print(now.minute(), DEC);
lcd.print(':');
if(now.second()<10)
{lcd.print("0");}
lcd.print(now.second(), DEC);
lcd.setCursor(9,1);
lcd.print("mode:");
lcd.print(i);
//kikapcsolás
if(now.second()>5)
{digitalWrite(3,LOW);}
if(now.hour()==7&&now.minute()==0 && now.second()<o)
{digitalWrite(3,HIGH);}}
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Beállítás, óra DS1307

Hozzászólás Szerző: Robert »

Én az eddigi levelezés alapján koncepcionális hibát látok.
Mintha a programozási alapelvek, logikák (blokkdiagramm, HW háttértudás) hiányozna...

Az RTC nem holmi utasítások kiolvasgatását jelenti. Van mögötte egy függvénykönyvtár, ami működik. Egy HW bekötve.

Javasolt az alapok fele a 60 nap alatt Arduino átolvasása, megtanulása. Az Arduino Notebook lapozása, Illetve Harsányi Réka emlegetett E-Bookja...
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Beállítás, óra DS1307

Hozzászólás Szerző: csegebiga »

alapelv: ne bonyolítsad, amit nem kell bonyolítani!
a bemásolt programodban több olyan kérdésem van, amely megkérdőjelei az üzemszerű működést:
1. melyik lábon is van a led?

Kód: Egész kijelölése

  pinMode(3,OUTPUT);
  digitalWrite(13,LOW);
2.ez mit is csinál? ha nem fut az rtc, hibát ír ki, ÉS beállítja a nemlétező rtc-t? mintha hiányozna innen egy ELSE ág.

Kód: Egész kijelölése

if (! RTC.isrunning()) {
  lcd.println("RTC hiba!");// ha nem érzékeli az RTC futását hibaüzenet jelenik meg
  RTC.adjust(DateTime(__DATE__, __TIME__));// először beállítjuk a kezdő dátumot és ídőt az RTC-n
}
a __DATE__, __TimE__ változó? ha igen, hol adtál neki értéket? mire állítanád az rtc-t?
ide nem egy konkrét dátumot és egy időt kellett volna írni?

3.ez mit is csinál? és miért?

Kód: Egész kijelölése

if(Serial.available()){
RTC.adjust(DateTime(__DATE__, __TIME__));
4. ennek mit kéne csinálnia?

Kód: Egész kijelölése

lcd.setCursor(9,1);
lcd.print("mode:");
lcd.print(i);
//kikapcsolás
if(now.second()>5)
{digitalWrite(3,LOW);}
honnan veszi az "i" változót? hol van deklarálva? hol adsz neki értéket? mit vezérel?
minden perc 5. másodpercében kikapcsolsz valamit (hol is van a leded? 3as? 13as?)

5. amit 07:00 kor bekapcsolsz??? vagy nem

Kód: Egész kijelölése

if(now.hour()==7&&now.minute()==0 && now.second()<o)
{digitalWrite(3,HIGH);}}
now.second()<o az o micsoda?
változó? deklarációja? étéke?
elírt 0? NEGATiV másodperc, mint feltétel?!?

ez a program ebben a formában nem hiszem, hogy lefodul értelmes kóddá.

szerintem hagyd ezt a fenébe, és a Robert által linkelt példaprogit nézegesd át.
ott van benne a gombkezelés, az rtc írás, olvasás
nincs benne rtc függvénykönyvtár, ellenben nagyon jól kommentezett, látszik, hogy olvassa-írja az rtc chip regisztereit
én linkeltem anno a csip memória térképét, abból kinézheted, melyik címen milyen adat van

ne veszítsd el csüggedésed, próbálkozz lelkesen!
Válasz küldése