RTC PCF8583 - Quarz geht nicht

Gast #61094
Lesenswert?

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
Gast #61097
Lesenswert?

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
Gast #61098
Lesenswert?

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
Gast #61099
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren