Gast
#62639
Hallo Mikrocontroller Freunde Ich habe mal wieder eine Frage: Ich initialisiere gerade meinen DS1302. Ich habe es jetzt endlich so weit das ich Daten an den DS1302 senden kann und Daten aus dem DS1302 lesen kann. Jetzt mein Problem ich habe das Gefühl das der DS1302 nicht anfängt zu arbeiten. Wenn ich ihm 1 Sekunde in sein Register schreibe kann ich auch nur 1 Sekunde auslesen. Müsste das dann nicht automatisch wenn ich noch mal einlese nach z.B 4s auch eine 4 zeigen. Frage: Startet der DS1302 automatisch oder muss ich ihm das sagen. Vieleicht hat ja auch jemend eine Idee zu meinem Quellcode oder findet womöglich auch meinen Fehler. Ich würde mich freuen wenn Ihr euch mal die Funktion INI_DS1302() anschauen könntet. Mit freundlichen Grüßen Christian Hölscher Auszug aus meinem Quellcode: void INI_DS1302() // initialisierung des Timerbausteins DS1302 { WB_reset(); WB_schreibe_byte(0x8E); // control register WB_schreibe_byte(0x00); // disable write protect WB_reset(); WB_schreibe_byte(0x90); // trickle charger register WB_schreibe_byte(0x00); // enable, 2 diodes, 8K resistor 0xAB WB_reset(); WB_schreibe_byte(0xBE); // clock burst write (eight registers) WB_schreibe_byte(0x01); // Sekunde auf 0 stellen WB_schreibe_byte(0x02); // Minute auf 0 stellen WB_schreibe_byte(0x12); // Stunde auf 12 stellen WB_schreibe_byte(0x10); // Wochentag auf 10 stellen WB_schreibe_byte(0x03); // Monat auf März stellen WB_schreibe_byte(0x03); // Tag einstellen WB_schreibe_byte(0x04); // Jahr einstellen WB_schreibe_byte(0x00); // must write control register in burst mode WB_reset(); } //------------------------------------------------------------------- //Beschreibung: Funktionen: 3-Wire-Bus Ansteuerung //------------------------------------------------------------------- void INI_WB() // Funktion zur initialisierung des 3-Wire-Bus { SCLK = 0; // SCLK Serial Clock = LOW RSTB = 0; // RSTB Reset Eingang = LOW IO = 0; // IO Serial Imput Output = LOW } //------------------------------------------------------------------- void WB_reset() // Funktion zum reseten des 3-Wire-Bus { SCLK = 0; // SCLK Serial Clock = LOW RSTB = 0; // RSTB Reset Eingang = LOW RSTB = 1; // RSTB Reset Eingang = HIGH } //------------------------------------------------------------------- void WB_schreibe_byte(unsigned char W_Byte) // Funnktion schreiben { unsigned char i; for(i = 0; i < 8; ++i) { IO = 0; if(W_Byte & 0x01) { IO = 1; // set port pin high to read data } SCLK = 0; SCLK = 1; W_Byte = (W_Byte >>1); } } //------------------------------------------------------------------- unsigned char WB_lese_byte() // Funnktion zu lesen { unsigned char i; unsigned char R_Byte; unsigned char TmpByte; R_Byte = 0x00; IO = 1; for(i=0; i<8; ++i) { SCLK = 1; SCLK = 0; TmpByte = (unsigned char)IO; TmpByte <<= 7; R_Byte >>= 1; R_Byte |= TmpByte; } return R_Byte; }