Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > So, ich wollte nach meiner endlosen Code-saugerei > auch mal was beisteuern, weil ich das hier im Forum noch > nicht gefunden habe. Man bekommt bei ebay für ein paar euronen > diese kleinen rtc-uhren. habe ein paar zeilen geschrieben, wie man > diese ausliest. ist ja wie immer, wenn man rausgefunden hat, ist das > ja immer ganz einfach. ich hoffe, das ist nicht zu trivial und kann > jemanden helfen. > > bis dann > > achim > > > > > > > > > ' democode für > ' I2C RTC DS1307 AT24C32 Real Time Clock Modul für Arduino > ' von achim dietz > ' 08.2013 > > ' bei ebay gibts mehrere. ich kaufte das mit der blauen platine. > ' hersteller steht nicht drauf. shop ist von schibe elektronik. > ' ich will nicht unnötig werbung machen, aber es soll ja im ersten > ' anlauf klappen, ohne weitere probleme. > ' da steht "tiny rtc I2C modules" drauf und kostet ca. 4,60€. > ' aber bestimmt klappts auch mit den anderen. ich habe die schmale > ' pfostenreihe "2" beschaltet. > > > 'bytes > Dim DS1307_B_1, DS1307_B_2, DS1307_B_3, DS1307_B_4, DS1307_B_5, DS1307_B_6, DS1307_B_7 As Word > 'ergebnisse > Dim DS1307_sec, DS1307_min, DS1307_hour, DS1307_wod, DS1307_day, DS1307_mon, DS1307_year As Integer > > Sub main() > I2C_Init(I2C_100kHz) ' I2C Bit Rate: 100 kHz > > > 'dieser teil dient zum stellen der uhr. erst probieren, wenn man das unten versteht. > 'als bespiel wird die uhrzeit gestellt. also auf register 00 springen mit write. > 'ich mache das zu besseren verständlichkeit binär. > 'als beispiel 19:12:00 > 'I2C_Start() > 'I2C_Write(0B11010000) ' adresse schreiben > 'I2C_Write(0x00) ' startregister setzen > 'I2C_Write(0B00000000) ' Sekunden auf null > 'I2C_Write(0B00010010) ' Minuten auf 12, also 1 links, 2 rechts 0001 0010 > 'I2C_Write(0B00011001) ' Stunden auf 19, also 1 links, 9 rechts 0001 1001 > 'I2C_Stop() > 'AbsDelay(10) > > > '----------------------------------------------------------------------------- > 'start rtc lesen > 'adresse schreiben, das Startregister setzen, von wo man aus lesen will. > 'dann einfach die verbliebenen register lesen. max 7. > > I2C_Start() > I2C_Write(0B11010000) ' I2C adresse auf schreiben setzen > I2C_Write(0x00) ' startregister setzen > > AbsDelay(10) ' aus reiner gewohnheit > > I2C_Start() ' i2c neu starten > I2C_Write(0B11010001) ' I2C adresse auf lesen setzen > ' jetzt 7 Bytes lesen > > DS1307_B_1=(I2C_Read_ACK()) 'sec reg 00 1-59 > DS1307_B_2=(I2C_Read_ACK()) 'min reg 01 1-59 > DS1307_B_3=(I2C_Read_ACK()) 'h reg 02 1-24 > DS1307_B_4=(I2C_Read_ACK()) 'wod reg 03 Wochentag 1-7 > DS1307_B_5=(I2C_Read_ACK()) 'day reg 04 1-31 > DS1307_B_6=(I2C_Read_ACK()) 'mon reg 05 1-12 > DS1307_B_7=(I2C_Read_NACK()) 'year reg 06 1-xx > > I2C_Stop() > > 'um die bytes umrechnen zu können, muss man ins datenblatt schauen, denn > 'die meisten bytes sind halbiert. in den vier bits rechts stehen die "einer" > 'und in den vier links die zehner. wenn man das byte komplett auswertet, kommen > 'da nur hausnummern raus. deshalb muss man das byte maskiert auswerten. > 'eigentlich ganz einfach. mal bei wikipedia unter "bitmaske" schauen. > 'die linke information maskieren, 4 bits nach rechts und mit 10 multiplizieren > 'dann die rechten maskierten bits dazuaddieren. > > DS1307_sec = (((DS1307_B_1 And 0b01110000)>>4)*10) + (DS1307_B_1 And 0b00001111) > DS1307_min = (((DS1307_B_2 And 0b01110000)>>4)*10) + (DS1307_B_2 And 0b00001111) > DS1307_hour = (((DS1307_B_3 And 0b00110000)>>4)*10) + (DS1307_B_3 And 0b00001111) > > DS1307_wod = DS1307_B_4 And 0b00000111 > > DS1307_day = (((DS1307_B_5 And 0b00110000)>>4)*10) + (DS1307_B_5 And 0b00001111) > DS1307_mon = (((DS1307_B_6 And 0b00010000)>>4)*10) + (DS1307_B_6 And 0b00001111) > DS1307_year = (((DS1307_B_7 And 0b11110000)>>4)*10) + (DS1307_B_7 And 0b00001111) > > Msg_WriteWord(DS1307_hour) > Msg_WriteText(":") > Msg_WriteWord(DS1307_min) > Msg_WriteText(":") > Msg_WriteWord(DS1307_sec) > Msg_WriteText(" ") > Msg_WriteWord(DS1307_wod) > Msg_WriteText(" wod ") > Msg_WriteWord(DS1307_day) > Msg_WriteText(" day ") > Msg_WriteWord(DS1307_mon) > Msg_WriteText(" mon ") > Msg_WriteWord(DS1307_year) > Msg_WriteText(" y ") > End Sub > >