60 nap alatt Arduino #33 - I2C órachipek
- Robert
- Elektronbűvölő
- Hozzászólások: 9934
- Csatlakozott: 2005. december 9. péntek, 7:00
- Tartózkodási hely: Budapest
- Kapcsolat:
60 nap alatt Arduino #33 - I2C órachipek
A fórum ezen része az órachipekkel foglalkozik. Nem a komplett projektekkel -> az a másik fórumban van.
Itt a PCF8563T / DS1307 / R5S372A és egyéb I2C buszos órák rejtelmei jönnek elő...
Itt a PCF8563T / DS1307 / R5S372A és egyéb I2C buszos órák rejtelmei jönnek elő...
- macsek
- Bitmanipulátor
- Hozzászólások: 121
- Csatlakozott: 2008. december 4. csütörtök, 7:00
- Tartózkodási hely: Bp
öröknaptár
Robert a 60 nap alatt Arduino #33 - I2C busz és az óra levélben írta:A hét napja és a dátum külön életet él; nincs a naptárchipben öröknaptár, hogy kiszámolja milyen nap van!
Meglepő. Tudom, h számunkra mindegy, ha egyszer ezt tudja az IC akkor ezzel kell együtt élnünk, csak nem értem miért.
A téli/nyári időszámítást nem tudja, ezt értem, ez gazdaságpolitikai kérdés, és ráadásul területenként és törvénymódosításonként változhat. De az "öröknaptár" funkciót mi az az ok, ami miatt nem teszik bele?
- macsek
- Bitmanipulátor
- Hozzászólások: 121
- Csatlakozott: 2008. december 4. csütörtök, 7:00
- Tartózkodási hely: Bp
Lehet, h ez a megfejtés. Köszi.
Amúgy az óraIC jelenlegi definíció szerint nem is tudja, h melyik évszázadban vagyunk. Csak azt mondja meg, h x évszázadban, vagy x+1 században. És x lehet 20 v 21, de akár 19 is valami régebbi cuccban, persze csak kifacsart logika szerint. Így pedig tényleg nem lehet megmondani, h adott dátum a hét milyen napjára esik.
Amúgy az óraIC jelenlegi definíció szerint nem is tudja, h melyik évszázadban vagyunk. Csak azt mondja meg, h x évszázadban, vagy x+1 században. És x lehet 20 v 21, de akár 19 is valami régebbi cuccban, persze csak kifacsart logika szerint. Így pedig tényleg nem lehet megmondani, h adott dátum a hét milyen napjára esik.
- macsek
- Bitmanipulátor
- Hozzászólások: 121
- Csatlakozott: 2008. december 4. csütörtök, 7:00
- Tartózkodási hely: Bp
Robert írta:Az órachippel próbáld ki: 2099. 12. 31-e van, 23:59:59.
Hova lép tovább?:)
Nincs olyan, h 2099-es év. Olyan van, h 99-es év és vagy C=1 vagy C=0.
A leírás szerint ekkor váltja C értékét, azaz ha 0 volt 1 lesz, ha 1 volt, 0 lesz.
De ha hozzájutok a vackocskáimhoz otthon akkor kipróbálom, jó?
(C a hetes regiszter 7-es bitje a PCF8563 óraICben)
Robert írta:Az öröknaptár számolásigényes. Ez tranzisztor-chipfelület. Osztás van benne, és az sokat számít. TE add meg, hogy milyen nap van és utána ezt léptetem 0..6 sorban...
Igaz nem teljes, csak1901-től jó a számítás, de nem is nagyon sok számolást tartalmaz és így nem kell megadni kezdő napot.
Azért annyi csalás van benne, hogy 1901 január 1. meghatározott nap, ebből indul.
void milyen_nap (int ev_m,int ho_m,int nap_m) //mai nap datuma eeee hh nn formatumban
{
kezdo_nap=((((ev_m-1901)/4)*5)+((ev_m-1901)%4)+2)%7; //a keresett ev januar 1 milyen nap
szokoev = (((!(ev_m%4) && (ev_m%100))||!(ev_m%400))&&(ho_m>2)) ? 1 : 0; //az adott ev szokoev
nap_szam=(kezdo_nap+elteres[ho_m-1]+szokoev+nap_m-1)%7; //a keresett nap 0..6 Vas ..Szo, ahol az elteres adjameg,
//hogy a honap elseje hanyadik nap az evben, igaz csak 1901-tol jo, de ez is eleg
- glezmen
- Bitmanipulátor
- Hozzászólások: 139
- Csatlakozott: 2012. augusztus 9. csütörtök, 6:00
- Tartózkodási hely: Noszlop
- Kapcsolat:
most jutottam el oda, hogy ki tudjam probalni a peldakodot, de nem fordul:
gondolom megvaltozott az osztaly az uj Arduino verzioban, mindjart utanaguglizok, de nem artana aktualizalni a lecket
MOD: send helyett write, receive helyett read, plusz egy kis eroszakos (uint8_t) castolas, es kesz
Kód: Egész kijelölése
RTC_test.cpp: In function ‘void setup()’:
RTC_test.cpp:80:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:82:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:84:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:86:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:88:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:90:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:92:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:94:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:96:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:98:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:100:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:102:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:104:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:106:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:108:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:110:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:112:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp: In function ‘void loop()’:
RTC_test.cpp:129:8: error: ‘class TwoWire’ has no member named ‘send’
RTC_test.cpp:140:17: error: ‘class TwoWire’ has no member named ‘receive’
RTC_test.cpp:152:30: error: ‘class TwoWire’ has no member named ‘receive’
RTC_test.cpp:161:32: error: ‘class TwoWire’ has no member named ‘receive’
RTC_test.cpp:171:35: error: ‘class TwoWire’ has no member named ‘receive’
RTC_test.cpp:172:39: error: ‘class TwoWire’ has no member named ‘receive’
RTC_test.cpp:173:28: error: ‘class TwoWire’ has no member named ‘receive’
RTC_test.cpp:177:36: error: ‘class TwoWire’ has no member named ‘receive’
gondolom megvaltozott az osztaly az uj Arduino verzioban, mindjart utanaguglizok, de nem artana aktualizalni a lecket

MOD: send helyett write, receive helyett read, plusz egy kis eroszakos (uint8_t) castolas, es kesz

A hozzászólást 1 alkalommal szerkesztették, utoljára glezmen 2012. október 31. szerda, 16:57-kor.
- Robert
- Elektronbűvölő
- Hozzászólások: 9934
- Csatlakozott: 2005. december 9. péntek, 7:00
- Tartózkodási hely: Budapest
- Kapcsolat:
Fuj, csunya, lusta diak!
Nem olvas és a tanárra fogja! Olvasd el az I2C első leckéjét.
Arduino-00xx és Arduino-1.x részt.
A wire.send/receive helyett wire.read/write az utasítás.
29. lecke, közepe:
"Arduino-00xx sorozatban a Wire.receive() utasítás volt érvényben, ez változott meg Wire.read()-ra az Arduino-1.0-ban."
"Arduino-00xx sorozatban a Wire.send() utasítás volt érvényben, ez változott meg Wire.write()-ra az Arduino-1.0-ban."
Direkt nincs aktualizálva, ugyanis az Arduino1.x sok esetben _még mindig_ nem használható! A külső eljárás- és függvénykönyvtárak ~40 %-a NEM működik az Arduino 1.x alatt!

Nem olvas és a tanárra fogja! Olvasd el az I2C első leckéjét.
Arduino-00xx és Arduino-1.x részt.
A wire.send/receive helyett wire.read/write az utasítás.
29. lecke, közepe:
"Arduino-00xx sorozatban a Wire.receive() utasítás volt érvényben, ez változott meg Wire.read()-ra az Arduino-1.0-ban."
"Arduino-00xx sorozatban a Wire.send() utasítás volt érvényben, ez változott meg Wire.write()-ra az Arduino-1.0-ban."
Direkt nincs aktualizálva, ugyanis az Arduino1.x sok esetben _még mindig_ nem használható! A külső eljárás- és függvénykönyvtárak ~40 %-a NEM működik az Arduino 1.x alatt!
A hozzászólást 1 alkalommal szerkesztették, utoljára Robert 2012. október 31. szerda, 16:58-kor.
- glezmen
- Bitmanipulátor
- Hozzászólások: 139
- Csatlakozott: 2012. augusztus 9. csütörtök, 6:00
- Tartózkodási hely: Noszlop
- Kapcsolat:
Robert írta:Fuj, csunya, lusta diak!![]()
Nem olvas és a tanárra fogja! Olvasd el az I2C első leckéjét.
Arduino-00xx és Arduino-1.x részt.
A wire.send/receive helyett wire.read/write az utasítás.
29. lecke, közepe:
"Arduino-00xx sorozatban a Wire.receive() utasítás volt érvényben, ez változott meg Wire.read()-ra az Arduino-1.0-ban."
"Arduino-00xx sorozatban a Wire.send() utasítás volt érvényben, ez változott meg Wire.write()-ra az Arduino-1.0-ban."
jovanna, kozben rajottem, ld. fent

amugy meg olvasni olvastam, de ki a franc emlekszik mar arra igy 3 honap utan?

egyebkent a castolas szerintem nem volt a leckeben (most csakazertse' keresem meg!

- glezmen
- Bitmanipulátor
- Hozzászólások: 139
- Csatlakozott: 2012. augusztus 9. csütörtök, 6:00
- Tartózkodási hely: Noszlop
- Kapcsolat:
Robert írta:3 hónap??? A tanfolyamot sorban kell olvasni:). És kipróbálni...
De az ilyen buktákból lehet a legtöbbet tanulni....
nem volt itthon RTC chip, anelkul nehez kiprobalni
amugy meg ma jottem haza kufoldrol

amugy nem neveznem 'buktanak', kb. 1 perc volt megtalalni a megoldast es kijavitani a kodot

Üdv!
A tanfolyami példa programot szerettem volna továbbfejleszteni, és szeretném, ha nem állítana be valamit, ha már korábban beállítottam, és az órachip meg úgy is megjegyezte. Ehhez írtam az alábbi függvényt, amit a setup() -ból hívok meg, de nem igazán akar működni. Valamiért az év, a nap, az óra és a perc rendben, de a többi eléggé ötletszerű értékeket ad.
Az eredeti példaprogram amúgy rendesen működik.
Mi lehet a gond?
void ido_kerdez()
{
Wire.beginTransmission(I2C_RTC);
Wire.write(0x02);
result = Wire.endTransmission();
if (result) SetError(ERROR_RTC_GET);
Wire.requestFrom(I2C_RTC, 7);
second_old = Wire.read();
if (second & 0x80) SetError(ERROR_CLOCK_INTEGRITY);
second_old = BcdToDec(second & 0b01111111);
second = second_old;
minute_old = BcdToDec(Wire.read());
minute = minute_old;
hour_old = BcdToDec(Wire.read());
hour = hour_old;
day = BcdToDec(Wire.read());
weekday = BcdToDec(Wire.read());
month = Wire.read();
century = (month & 0x80);
month = BcdToDec(month & 0b01111111);
year = BcdToDec(Wire.read());
}
A tanfolyami példa programot szerettem volna továbbfejleszteni, és szeretném, ha nem állítana be valamit, ha már korábban beállítottam, és az órachip meg úgy is megjegyezte. Ehhez írtam az alábbi függvényt, amit a setup() -ból hívok meg, de nem igazán akar működni. Valamiért az év, a nap, az óra és a perc rendben, de a többi eléggé ötletszerű értékeket ad.
Az eredeti példaprogram amúgy rendesen működik.
Mi lehet a gond?
void ido_kerdez()
{
Wire.beginTransmission(I2C_RTC);
Wire.write(0x02);
result = Wire.endTransmission();
if (result) SetError(ERROR_RTC_GET);
Wire.requestFrom(I2C_RTC, 7);
second_old = Wire.read();
if (second & 0x80) SetError(ERROR_CLOCK_INTEGRITY);
second_old = BcdToDec(second & 0b01111111);
second = second_old;
minute_old = BcdToDec(Wire.read());
minute = minute_old;
hour_old = BcdToDec(Wire.read());
hour = hour_old;
day = BcdToDec(Wire.read());
weekday = BcdToDec(Wire.read());
month = Wire.read();
century = (month & 0x80);
month = BcdToDec(month & 0b01111111);
year = BcdToDec(Wire.read());
}
Vissza: “60 nap alatt Arduino - Házi feladatok”
Ki van itt
Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég