Ez a fordításkori PC idő.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?
Beállítás, óra DS1307
Re: Beállítás, óra DS1307
Tippek:
Re: Beállítás, óra DS1307
nahát!
ezt nem tudtam!
mindig tanul a zember!
köszönöm!
ezt nem tudtam!
mindig tanul a zember!
köszönöm!
Re: Beállítás, óra DS1307
Ilyen paraméter még:
__file__ : melyik állományt fordítom,
__line__: program hányadik sora
__ASSEMBLER__: ASM van e a kódban
__OBJC__: objective-c fordító közreműködött e a kódfordításban
__STDC_VERSION__: melyik kiadású C standard került értelmezésre a fordításkor
__STDC__: standard C került e alkalmazásra a teljes kódértelmezés során
Forrás: https://gcc.gnu.org/onlinedocs/gcc-4.1. ... acros.html
__file__ : melyik állományt fordítom,
__line__: program hányadik sora
__ASSEMBLER__: ASM van e a kódban
__OBJC__: objective-c fordító közreműködött e a kódfordításban
__STDC_VERSION__: melyik kiadású C standard került értelmezésre a fordításkor
__STDC__: standard C került e alkalmazásra a teljes kódértelmezés során
Forrás: https://gcc.gnu.org/onlinedocs/gcc-4.1. ... acros.html
Re: Beállítás, óra DS1307
1. 3 as lábon van a 13 az el van írva
2. át volt rakva a 3. pontban lévőhöz csak ott maradt .
3. csak akkor állítsa be az időt ha rá van dugva a gépre mert előtte akár hányszor bekapcsoltam újra beállított valamit
4. az lcd n kiírja milyen módban lesz a bekapcsolás időzítve ha a másodperc nagyobb mint 5 kikapcsol azaz 07:00:05 kor kikapcsol
5. az egy változó akart lenni ami a kód elejéről sajnos lemarat nem jól másoltam be, de 5 az értéke annak is az az 07:00:00kor bekapcsol.
Nézegettem a linket ,de nem értem mi mit csinál a leírást is csak ha németül lenne akkor érteném meg.
2. át volt rakva a 3. pontban lévőhöz csak ott maradt .
3. csak akkor állítsa be az időt ha rá van dugva a gépre mert előtte akár hányszor bekapcsoltam újra beállított valamit
4. az lcd n kiírja milyen módban lesz a bekapcsolás időzítve ha a másodperc nagyobb mint 5 kikapcsol azaz 07:00:05 kor kikapcsol
5. az egy változó akart lenni ami a kód elejéről sajnos lemarat nem jól másoltam be, de 5 az értéke annak is az az 07:00:00kor bekapcsol.
Nézegettem a linket ,de nem értem mi mit csinál a leírást is csak ha németül lenne akkor érteném meg.
Re: Beállítás, óra DS1307
Sikerült előre haladni ,működik amit szerettem volna csinálni,de valaki le ellenőrizné,hogy helyesen van e meg írva nincs e benne nagyobb hiba. Amit tud beállítom az időt a program indulásakor ha 4 lábon lévő gombot megnyomom a perchez hozzá ad 1 et ha a5 ös lábon lévőt nyomom meg el vesz 1 et.
Kód: Egész kijelölése
;
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
void setup(){
pinMode(4,INPUT);
pinMode(5,INPUT);
Wire.begin();
Serial.begin(9600);
setDateTime();
}
void loop(){
if(digitalRead(4)==LOW){
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
byte second = bcdToDec(Wire.read());
byte minute = bcdToDec(Wire.read()+1);
if(minute>59){minute=0;}
byte hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
byte weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
byte monthDay = bcdToDec(Wire.read());
byte month = bcdToDec(Wire.read());
byte year = bcdToDec(Wire.read());
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekDay));
Wire.write(decToBcd(monthDay));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(zero); //start
Wire.endTransmission();}
if(digitalRead(5)==LOW){
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
byte second = bcdToDec(Wire.read());
byte minute = bcdToDec(Wire.read()-1);
if(minute>=60){minute=59;}
byte hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
byte weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
byte monthDay = bcdToDec(Wire.read());
byte month = bcdToDec(Wire.read());
byte year = bcdToDec(Wire.read());
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekDay));
Wire.write(decToBcd(monthDay));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(zero); //start
Wire.endTransmission();
}
printDate();
delay(1000);
}
void setDateTime(){
byte second = 45; //0-59
byte minute = 58; //0-59
byte hour = 0; //0-23
byte weekDay = 2; //1-7
byte monthDay = 1; //1-31
byte month = 3; //1-12
byte year = 17; //0-99
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekDay));
Wire.write(decToBcd(monthDay));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(zero); //start
Wire.endTransmission();
}
byte decToBcd(byte val){
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val) {
return ( (val/16*10) + (val%16) );
}
void printDate(){
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());
Serial.print(month);
Serial.print("/");
Serial.print(monthDay);
Serial.print("/");
Serial.print(year);
Serial.print(" ");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
}
Re: Beállítás, óra DS1307
A nyomógomb prellegés nincs lekezelve.
Igaz külső felhúzóellenállás ott van a gombokon?
Igaz külső felhúzóellenállás ott van a gombokon?
Re: Beállítás, óra DS1307
Igen, az ott van. Azon kívül más hiba van ,vagy tűrhető ?
Re: Beállítás, óra DS1307
Egy olyan kérdésem lenne még ,hogy a void loopból meg hívaja printDate()-t arra mi szükség van,ha simán a loopba teszem az úgy nem jó ?
Re: Beállítás, óra DS1307
Inkább a setup-ból tedd megjegyzésbe a : //setDateTime(); sort!
Mert az feleslegesen minden bekapcsoláskór újra állítja az RTC-t!
Ezt csak egyszer kel megtenni amig az ellem birja a modulban!
Mert az feleslegesen minden bekapcsoláskór újra állítja az RTC-t!
Ezt csak egyszer kel megtenni amig az ellem birja a modulban!
Re: Beállítás, óra DS1307
a ctrl+c ctrl+v átka:
a függvények használatáról:
a programozó egy lusta állatfajta; utál többszörösen,dolgozni.
jelen esetben azt, hogy az ismétlődő programrészletet kirakja külön függvénybe (getData() és setData() ), és azt hívogatja több helyről.
egyszer írja meg, egy helyen kell módosítani, olvashatóbb a program
jelen kérdésed annyiban jogos, hogy a printDate() ebben a programban csak egy helyről hívódik meg, nem feltétlenül indokolt kirakni
amiért mégis jó, ha külön van, az a loop() olvashatósága, a moduláris felépítés szerkezete.
meg amikor megírod a printLcd() lcd kezelő függvényt, tudod, hogy ennek a helyére/ez mellé kell berakni a loop() ba
Kód: Egész kijelölése
byte minute = bcdToDec(Wire.read()-1);
if(minute>=60){minute=59;}
a programozó egy lusta állatfajta; utál többszörösen,dolgozni.
- nézd meg a programodat, hány helyen olvasod a rtc chipet?
3 helyen, háromszor leprogramozva (perc plusz, perc mínusz, idő kiíratás)
ha módosítani kéne, hogy a hét napjának nevét is mutassa, hány helyen kéne módosítani? igen, három helyen.
és ugyanez van a chipbe kiíratásnál is(perc plusz, perc minusz, setDateTime)
jelen esetben azt, hogy az ismétlődő programrészletet kirakja külön függvénybe (getData() és setData() ), és azt hívogatja több helyről.
egyszer írja meg, egy helyen kell módosítani, olvashatóbb a program
Kód: Egész kijelölése
if(digitalRead(5)==LOW){ //perc csökkentő
getDate(); // beolvassa a dátum-idő adatokat
minute=minute-1;
if(minute<0){minute=59;}
setDate(); // kiírja a dátum-idő adatokat
}
amiért mégis jó, ha külön van, az a loop() olvashatósága, a moduláris felépítés szerkezete.
meg amikor megírod a printLcd() lcd kezelő függvényt, tudod, hogy ennek a helyére/ez mellé kell berakni a loop() ba
Re: Beállítás, óra DS1307
Értem,köszönöm a válaszokat!
Re: Beállítás, óra DS1307
Sziasztok , ds1307 el készítettem egy órát még régebben akkor félreraktam idő hiány miatt most viszont szeretném folytatni, a kérdéseim az lennének,hogy: amikor állítom év,hónap ,nap stb. a hét napjai az hogy van pontosan mert láttam olyat ahol 1 volt a vasárnap 7 a hétfő ,de olyat is ahol 0-6 ig volt hétfő-vasárnap pontosan melyik akar melyik lenni? A másik kérdésem az volna,hogy ha van egy 1 Hz es jelem akkor azt melyik lábára kell rakni ha nem a saját órajelét akarom használni( legjobb tudomásom szerint lehet ilyet csinálni) .
A válaszokat előre is köszönöm.
A válaszokat előre is köszönöm.
Re: Beállítás, óra DS1307
ds1307 datasheet
nézd meg!
8.oldal alja. Table 2. Timekeeper Registers
ott van benne, hogy a hét napja (03H day) értékkészlete (range) 1-7
ugyanitt a 9.oldalon tárgyalják, hogy a SQW láb az kimenet, amit be lehet állítani, hogy milyen frekvencián dolgozzon, ha engedélyezve van.
tehát ezt az áramkört nem hajthatod meg 1 Hz-es órajellel, hanem tőle kaphatsz ilyen jelet.
nézd meg!
8.oldal alja. Table 2. Timekeeper Registers
ott van benne, hogy a hét napja (03H day) értékkészlete (range) 1-7
ugyanitt a 9.oldalon tárgyalják, hogy a SQW láb az kimenet, amit be lehet állítani, hogy milyen frekvencián dolgozzon, ha engedélyezve van.
tehát ezt az áramkört nem hajthatod meg 1 Hz-es órajellel, hanem tőle kaphatsz ilyen jelet.
(a SCL az az i2c busz órajele, nem a rtc bemenete.)7 SQW/OUT
Square Wave/Output Driver. When enabled, the SQWE bit set to 1, the SQW/OUT pin
outputs one of four square-wave frequencies (1Hz, 4kHz, 8kHz, 32kHz). The SQW/OUT
pin is open drain and requires an external pullup resistor. SQW/OUT operates with either
VCC or VBAT applied. The pullup voltage can be up to 5.5V regardless of the voltage on
VCC. If not used, this pin can be left floating.