Hallo Forum,
ich schreibe gerade den Quellcode für meine Uhr. Und ich habe einen Denkfehler aber ich finde ihn nicht.
Ich habe einen Mega32 der mit 8MHz getaktet ist. Am I²C hängt ne DS1307 RTC wo die Uhrzeit ausgelesen wird. Die Kommunikation funktioniert auch und das auslesen funktioniert auch zu 99%. An den Ports A und D hängen 4 71414 die die Uhrzeit auf meinen Röhren anzeigen. Ich hab es aber eben z.B. gehabt das bis 20:10 die Uhrzeit richtig als 20:10 angezeigt wurde aber sobald es 20:10 war, war auf den Röhren 20:16 zu lesen. Und die Uhr läuft dann auch mit der Zeit weiter. Es wird also nicht 20:15 angezeigt sondern 20:21.
Ich finde den Fehler einfach nicht >.<
Mein bisheriger Code sieht so aus:
Anbei noch der Schaltplan meines Aufbaus.Code:'Mikrocontroller $regfile = "m32def.dat" $crystal = 8000000 'Stackgröße festlegen $hwstack = 200 $swstack = 200 'TWI konfigurieren Config Sda = Portc.1 Config Scl = Portc.0 Config Twi = 100000 'TWI Frequenz 'Unterprogramme Declare Sub Uhrzeit Declare Sub Read_dcf Declare Sub Rtc_einstellen Declare Sub Enable_sqw 'Ports konfigurieren Config Porta = Output 'Port für die Stunden Config Portd = Output 'Port für die Minuten Config Pinb.2 = Input 'Input für die SQW der RTC Porta = 0 Portd = 0 Pinb.2 = 1 'Pull-Up aktivieren 'Variablen Dim _sec As Byte Dim _min As Byte Dim _hour As Byte Dim _weekday As Byte Dim _day As Byte Dim _month As Byte Dim _year As Integer Dim Ds1307w As Byte Dim Ds1307r As Byte Dim Stunde As Byte Dim Minute As Byte Dim Ds1307_config As Byte 'Controllregister der RTC 'Uhrzeit voreinstellen _sec = 00 _min = 04 _hour = 20 'Adresse der DS1307 Ds1307w = &HD0 'Schreibadresse der RTC Ds1307r = &HD1 'Leseadresse der RTC 'Interrupts einstellen Config Int2 = Falling Enable Int2 On Int2 Ds1307_int 'Interrups aktivieren Enable Interrupts 'Call Rtc_einstellen Do Call Uhrzeit Porta = Stunde Portd = Minute Wait 1 Loop End '------------------------------------------------------------------------------ 'RTC auslesen Sub Uhrzeit I2cstart 'TWI Start I2cwbyte Ds1307w 'Übergabe der Slaveadresse I2cwbyte 0 'Registerzähler wird auf Null gesetzt I2cstart 'Zweite Startkondition I2cwbyte Ds1307r 'Übergabe der Leseadresse I2crbyte _sec , Ack 'Auslesen des Sekundenregisters I2crbyte _min , Ack 'Auslesen des Minutenregisters I2crbyte _hour , Nack 'Auslesen des Jahresregisters I2crbyte _weekday , Ack I2crbyte _day , Ack 'Auslesen des Tagesregisters I2crbyte _month , Ack 'Auslesen des Monatsregisters I2crbyte _year , Nack 'Auslesen des Jahresregisters I2cstop 'TWI Stoppkondition Minute = Makebcd(_min) 'Umwandeln in BCD Code Stunde = Makebcd(_hour) End Sub '------------------------------------------------------------------------------ Sub Read_dcf Return End Sub '------------------------------------------------------------------------------ 'Einstellen Der Zeit Sub Rtc_einstellen I2cstart I2cwbyte Ds1307w I2cwbyte 0 I2cwbyte _sec I2cwbyte _min I2cwbyte _hour I2cstop End Sub '------------------------------------------------------------------------------ Sub Enable_sqw I2cstart I2cwbyte Ds1307w I2cwbyte 7 I2cwbyte Ds1307_config I2cstop Return End Sub '------------------------------------------------------------------------------ Ds1307_int: Return '------------------------------------------------------------------------------
Kann mir jemand auf die Sprünge helfen und mir sagen wo der Fehler ist?
Danke für die Hilfe!
Edit: Und statt 20:20 steht da 20:32.







Zitieren

Lesezeichen