Hier ist mein code, aber der funzt nicht, ich krieg immer nur 255 zurück
Code:$regfile "m16def.dat" ' use the byte lib since we do not need longs $crystal = 20000000 $baud = 19200 'declare used subs Declare Sub Settime Declare Sub Gettime() Declare Sub Schreibe Declare Sub Lese 'Declare variables Dim Tm(5) As Byte At &H60 Dim I As Byte , Temp As Byte 'These are pointers to tm() for simple handling. Dim S As Byte At &H60 Overlay Dim M As Byte At &H61 Overlay Dim H1 As Byte At &H62 Overlay Dim D As Byte At &H63 Overlay Dim Month As Byte At &H64 Overlay Dim Uhr(5) As Byte Dim Adrcount As Word Const Ff = &H0C Const Lf = &H0A Const Pu = &H2E Const Dp = &H3A Const Le = &H20 Const Ko = &H2C Const Adr = &HA0 'Time Setup Dim A As Byte Dim Tag As Byte Dim Monat As Byte Dim Stunde As Byte Dim Minute As Byte Dim X As Byte 'configure the used port pin for I2C Config I2cdelay = 5 ' default slow mode Config Sda = Portc.1 Config Scl = Portc.0 'Display Setup Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.5 , Db6 = Porta.4 , Db7 = Porta.3 , E = Porta.7 , Rs = Porta.2 ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus) Config Lcd = 20 * 4 Cls Lcd "test" ' not needed since the pins are in the right state 'I2cinit Print Chr(27) ; "[2J"; 'clear screen Print "PCF8583 Clock Sample" Do Call Gettime 'since the values are stored in BCD format we can use Hex() to display them Print Chr(27) ; "[2;2f"; ' VT100 emulation set pos to 2,2 Print Hex(h1) ; ":" ; Hex(m) ; ":" ; Hex(s) ; " Err:" ; Err Wait 1 If Pind.2 = 1 Then Print "Schreibe" Call Schreibe Print "Schreiben beendet ERR" ; Err End If If Pind.4 = 1 Then Print "Lese" Call Lese Lcd Str(x) Print "Lesen beendet ERR" ; Err End If Loop Sub Gettime() 'there are 2 ways to get the time. With low level I2C calls or with a high level call 'first the high level call Tm(1) = 2 ' point to second register I2creceive &HA0 , Tm(1) , 1 , 5 ' write the second address and get 5 bytes back End Sub Sub Settime ' 'values are stored as BCD values so convert the values first Inputbin Uhr(1) , 5 Tm(1) = Makebcd(s) 'seconds Tm(2) = Makebcd(m) 'minutes Tm(3) = Makebcd(h1) 'hours Tm(4) = Makebcd(d) 'days Tm(5) = Makebcd(month) 'months I2cinit I2cstart 'generate start I2cwbyte &HA0 'write address I2cwbyte &H00 'select control register I2cwbyte &H08 'set year and day bit for masking I2cstart 'repeated start I2cwbyte &HA0 'write mode I2cwbyte 2 'select seconds Register For I = 1 To 5 I2cwbyte Tm(i) Next 'write seconds I2cstop End Sub Sub Schreibe(byval Adressh As Byte , Adressl As Byte) Call Gettime Tag = Makebcd(tm(4)) Monat = Makebcd(tm(5)) Minute = Makebcd(tm(2)) Stunde = Makebcd(tm(3)) I2cinit I2cstart I2cwbyte &HA2 I2cwbyte &HA3 'Speicherstelle im EEPROM I2cwbyte &HA2 I2cwbyte D 'Tag I2cwbyte Pu I2cwbyte Month 'Monat I2cwbyte Le I2cwbyte H1 'Stunde I2cwbyte Dp I2cwbyte M 'Minute I2cwbyte Dp 'WStatus (2.Paketbyte) I2cwbyte Ff 'Cursor zurück auf Anfang I2cwbyte Lf 'und Zeilenvorschub I2cstop End Sub Sub Lese I2cinit I2cwbyte &HA2 I2cwbyte &HA3 'Speicherstelle im EEPROM I2cwbyte &HA2 I2cstart I2cwbyte &HA3 I2crbyte X , Nack I2cstop End Sub End







Zitieren
Lesezeichen