Hallo Leute! Und schon komme ich wieder mit dem nächsten Prob angenervt g Ich habe gerade die Software für den I2C RTC - Chip gebastelt. Doch irgendwie scheint die Uhr zu stehen. Hab einen 3,2768 MHz Quarz zw. OSCI und OSCO gehängt und von OSCI nach 5V+ einen Trimm-Elko. Leider bleiben die Register im IC immer gleich. Wenn ich eine Uhrzeit rein schriebe, dann kann ich diese anschliesen wieder lesen. Wenn ich OSCI u. OSCO kurz miteinander verbinde, dann zähl er ein paar 1/100 weiter. Muss ich evtl. an den Quarz noch Masse anlegen (an's Gehäuse?) ? Kann ich mit einem einfachen Multimeter (Strom, Spannung, Wiederstand) bestimmen, ob der Quarz funktioniert? ...puh Also wie immer hoffe ich, dass ihr mir helfen könnt. MfG Sascha
Versuchs doch mal mit nem Uhrenquarz 32768 Herz (2 hoch 15) nicht 3,... Mega Herz Gruß Bernhard
haste du das startbit gesetzt ? -im controllreg. soviel ich mich noch erinnern kann, welchen uhrenbaustein hast du ?
mist... man(n) darf halt nicht mit ausgeschaltetem Hirn Teile aus dem Katalog suchen... 3,2768MHz sind nun mal nicht 32,768kHz g naja... hab eine alte Armbanduhr geplündert, jeztz geht's... Danke für den Tipp! MfG Sascha
Hallo Sascha, ich bin neu in dem AVR Geschäft, kannst du mal Deinen Code oder Teile davon posten. Wie spricht man den PCF8583 an? Hast Du einen Atmega mit TWI interface oder die I2C Sodtwarelösung? Ich habe bisher weder mit I2C noch mit AVR was gemacht. Grüße Achim
Hallo Achim! Also ich habe diese TWI-Lib (für das HW-TWI des Mega32) genommen: http://www.mikrocontroller.net/forum/read-4-50052.html Im Datenblatt ist eigentlich alles recht schön beschrieben. Hier meine aktuelle Code (AVR-GCC): unsigned char tmp,sec,std,min,t,m,w; unsigned int j; unsigned char str[21]; unsigned char wota[7][3] = { "Mo","Di","Mi","Do","Fr","Sa","So" }; // dummy-write um RAM-Addi zu setzen if (start_i2c(0xA0)==0) GR_ON; else {RT_ON; GR_OFF;} write_i2c(0x02); // zum lesen wechseln if (rep_start_i2c(0xA1)==0) OR_ON; else { RT_ON; OR_OFF;} // Sek. lesen, und in einen Char umwandel (High-Nibbel=10sek, Low-Nibbel=sek) tmp = read_i2c_ack(); sec = ((tmp>>4)*10) + (tmp&0x0F); // wie bei den sek. tmp = read_i2c_ack(); min = ((tmp>>4)*10) + (tmp&0x0F); // siehe Datenblatt tmp = read_i2c_ack(); std = ( ((tmp>>4)&0x03)*10) + (tmp&0x0F); // siehe Datenbaltt tmp = read_i2c_ack(); j = (tmp>>6)+2004; t = ( ((tmp>>4)&0x03)*10) + (tmp&0x0F); tmp = read_i2c_nack(); w = (tmp>>5); m = ( ((tmp>>4)&0x01)*10) + (tmp&0x0F); stop_i2c(); delay_ms(100); sprintf(str, "%s, %02u.%02u.%04u",wota[w],t,m,j); lcd_gotoxy(0,0); lcd_puts(str); suart_puts(str); suart_puts_P("\r\n"); sprintf(str, "%02u:%02u:%02u",std,min,sec); lcd_gotoxy(0,1); lcd_puts(str); suart_puts(str); suart_puts_P("\r\n"); Falls du noch Fragen hast, dann sag bescheid. MfG Sascha
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.