Gast
#3505794
Hallo, ein vermeintlich einfaches Basic Programm liest eine i2c RTC vom Typ RV-3029 aus. Der Chip ist OK, auch die Beschaltung. In einer anderen Umgebung läuft die Hardware einwandfrei (PIC). Die Uhr muss nicht gesetzt werden, zeigt nach Reset in der anderen Umgebung "Time is 0:0:1 Date is 0/0/2000". Ich habe schon Tage gekämpft und finde einfach keinen Anhaltspunkt. TWI Rate geändert, und vieles vieles mehr.. Anbei der recht übersichtliche Basiccode und ein Screenshot von dem Output des Programms. Es wäre eine große Hilfe wenn Ihr mir zeigen könntet wo ich etwas falsch mache. Danke im Voraus. CODE: $regfile = "m1284pdef.dat" ' 32 $crystal = 16000000 ' 8 MHz $hwstack = 40 $swstack = 16 $framesize = 32 Baud = 9600 $lib "I2C_TWI.LBX" Enable Interrupts Dim Weekday As Byte Dim Tmp As Byte Dim I As Byte Dim Var_rv3029_seconds As Byte Dim Var_rv3029_minutes As Byte Dim Var_rv3029_hours As Byte Dim Var_rv3029_days As Byte Dim Var_rv3029_weekdays As Byte Dim Var_rv3029_months As Byte Dim Var_rv3029_years As Byte Dim Alle_register(50) As Byte Weekday = 2 Sda_port Alias Portc.1 Scl_port Alias Portc.0 Config Twi = 400000 Const Rv3029_write = &B10101100 'Adresse des DS1307 = &HD0 (schreiben) Const Rv3029_read = &B10101101 'Adresse des DS1307 = &HD1 (lesen) I2cinit Gosub Rv3029_clear_pon Do Gosub Read_clock_page Print Makedec(var_rv3029_hours) ; ":"; Print Makedec(var_rv3029_minutes) ; ":"; Print Makedec(var_rv3029_seconds) Print Makedec(var_rv3029_days) ; "."; 'Print Makedec(var_rv3029_weekdays) ; " "; Print Makedec(var_rv3029_months) ; "."; Print Makedec(var_rv3029_years) Print "" Waitms 900 I2cinit Loop Read_clock_page: I2cstart I2cwbyte Rv3029_write I2cwbyte &H08 I2cstop I2cstart I2cwbyte Rv3029_read I2crbyte Var_rv3029_seconds , Ack I2crbyte Var_rv3029_minutes , Ack I2crbyte Var_rv3029_hours , Ack I2crbyte Var_rv3029_days , Ack I2crbyte Var_rv3029_weekdays , Ack I2crbyte Var_rv3029_months , Ack I2crbyte Var_rv3029_years , Nack I2cstop Return end
