Mistery386
08.02.2007, 21:34
Ich möchte in Bascom die daten der TWI UHR DS1307 von Dezimal in Hexadezimal umrechnen.
Es existiert auch bereits ein programm, nur das ist sicherlich auch einfacher zu lösen mit zb nem "sub" oder so.
Momentan werden alle daten einzeln umgewandelt.
Habe auch bereits mehrere versuche gemacht aber außer der aktuellen version läuft einfach nix.
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
Declare Sub I2cfach()
Dim Uhrsec As Byte
Dim Uhrmin As Byte
Dim Uhrstu As Byte
Dim Wotag As Byte
Dim Tag As Byte
Dim Monat As Byte
Dim Jahr As Byte
Dim Erg1 As Byte ' Stunden zuweißen
Dim Erg1a As Byte
Dim Erg2 As Byte
Dim Erg2a As Byte
Dim Rst1 As Byte
Dim Rst2 As Byte
Dim Erg3 As Byte ' Minuten zuweißen
Dim Erg3a As Byte
Dim Erg4 As Byte
Dim Erg4a As Byte
Dim Rst3 As Byte
Dim Rst4 As Byte
Dim Erg5 As Byte ' Secunden zuweißen
Dim Erg5a As Byte
Dim Erg6 As Byte
Dim Erg6a As Byte
Dim Rst5 As Byte
Dim Rst6 As Byte
Dim Erg7 As Byte ' Wochentag zuweißen
Dim Erg7a As Byte
Dim Erg8 As Byte
Dim Erg8a As Byte
Dim Rst7 As Byte
Dim Rst8 As Byte
Dim Erg9 As Byte ' Tag zuweißen
Dim Erg9a As Byte
Dim Erg10 As Byte
Dim Erg10a As Byte
Dim Rst9 As Byte
Dim Rst10 As Byte
Dim Erg11 As Byte ' Monat zuweißen
Dim Erg11a As Byte
Dim Erg12 As Byte
Dim Erg12a As Byte
Dim Rst11 As Byte
Dim Rst12 As Byte
Dim Erg13 As Byte ' Jahr zuweißen
Dim Erg13a As Byte
Dim Erg14 As Byte
Dim Erg14a As Byte
Dim Rst13 As Byte
Dim Rst14 As Byte
Config Sda = Portc.4
Config Scl = Portc.5
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Deflcdchar 0 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32
Cls
Cursor Off
I2cinit
Do
I2cfach
Locate 1 , 1
Lcd Rst2 ; Rst1 ; ":"
Locate 1 , 4
Lcd Rst4 ; Rst3 ; ":"
Locate 1 , 7
Lcd Rst6 ; Rst5 ; " "
Locate 2 , 1
If Rst7 = 1 Then
Lcd "Mo"
End If
If Rst7 = 2 Then
Lcd "Di"
End If
If Rst7 = 3 Then
Lcd "Mi"
End If
If Rst7 = 4 Then
Lcd "Do"
End If
If Rst7 = 5 Then
Lcd "Fr"
End If
If Rst7 = 6 Then
Lcd "Sa"
End If
If Rst7 = 7 Then
Lcd "So"
End If
Lcd " "
Locate 2 , 3
Lcd "," ; Rst10 ; Rst9 ; "."
Locate 2 , 7
Lcd Rst12 ; Rst11 ; "."
Locate 2 , 10
Lcd "20" ; Rst14 ; Rst13 ; " "
Waitms 150
Loop
Sub I2cfach()
I2cstart
I2cwbyte &B11010000 ' <-- Schreibe Adresse des DS1307 (UHR)
I2cwbyte &B00000000 ' <-- Ab Anfang lesen
I2cstart
I2cwbyte &B11010001 ' <-- Lese Adresse des DS1307 (UHR)
I2crbyte Uhrsec , Ack
I2crbyte Uhrmin , Ack
I2crbyte Uhrstu , Ack
I2crbyte Wotag , Ack
I2crbyte Tag , Ack
I2crbyte Monat , Ack
I2crbyte Jahr , Nack
I2cstop
Erg1 = Uhrstu / 16 ' Stunden umwnadeln
Erg1a = Erg1 * 16
Rst1 = Uhrstu - Erg1a
Erg2 = Erg1 / 16
Erg2a = Erg2 * 16
Rst2 = Erg1 - Erg2a
Erg3 = Uhrmin / 16 ' Minuten umwnadeln
Erg3a = Erg3 * 16
Rst3 = Uhrmin - Erg3a
Erg4 = Erg3 / 16
Erg4a = Erg4 * 16
Rst4 = Erg3 - Erg4a
Erg5 = Uhrsec / 16 ' Secunden umwnadeln
Erg5a = Erg5 * 16
Rst5 = Uhrsec - Erg5a
Erg6 = Erg5 / 16
Erg6a = Erg6 * 16
Rst6 = Erg5 - Erg6a
Erg7 = Wotag / 16 ' Wochentag umwnadeln
Erg7a = Erg7 * 16
Rst7 = Wotag - Erg7a
Erg8 = Erg7 / 16
Erg8a = Erg8 * 16
Rst8 = Erg7 - Erg8a
Erg9 = Tag / 16 ' Tag umwnadeln
Erg9a = Erg8 * 16
Rst9 = Tag - Erg9a
Erg10 = Erg8 / 16
Erg10a = Erg10 * 16
Rst10 = Erg9 - Erg10a
Erg11 = Monat / 16 ' Monat umwnadeln
Erg11a = Erg11 * 16
Rst11 = Monat - Erg11a
Erg12 = Erg11 / 16
Erg12a = Erg12 * 16
Rst12 = Erg11 - Erg12a
Erg13 = Jahr / 16 ' Jahr umwnadeln
Erg13a = Erg13 * 16
Rst13 = Jahr - Erg13a
Erg14 = Erg13 / 16
Erg14a = Erg14 * 16
Rst14 = Erg13 - Erg14a
End Sub
Schonmal danke im vorraus
Es existiert auch bereits ein programm, nur das ist sicherlich auch einfacher zu lösen mit zb nem "sub" oder so.
Momentan werden alle daten einzeln umgewandelt.
Habe auch bereits mehrere versuche gemacht aber außer der aktuellen version läuft einfach nix.
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
Declare Sub I2cfach()
Dim Uhrsec As Byte
Dim Uhrmin As Byte
Dim Uhrstu As Byte
Dim Wotag As Byte
Dim Tag As Byte
Dim Monat As Byte
Dim Jahr As Byte
Dim Erg1 As Byte ' Stunden zuweißen
Dim Erg1a As Byte
Dim Erg2 As Byte
Dim Erg2a As Byte
Dim Rst1 As Byte
Dim Rst2 As Byte
Dim Erg3 As Byte ' Minuten zuweißen
Dim Erg3a As Byte
Dim Erg4 As Byte
Dim Erg4a As Byte
Dim Rst3 As Byte
Dim Rst4 As Byte
Dim Erg5 As Byte ' Secunden zuweißen
Dim Erg5a As Byte
Dim Erg6 As Byte
Dim Erg6a As Byte
Dim Rst5 As Byte
Dim Rst6 As Byte
Dim Erg7 As Byte ' Wochentag zuweißen
Dim Erg7a As Byte
Dim Erg8 As Byte
Dim Erg8a As Byte
Dim Rst7 As Byte
Dim Rst8 As Byte
Dim Erg9 As Byte ' Tag zuweißen
Dim Erg9a As Byte
Dim Erg10 As Byte
Dim Erg10a As Byte
Dim Rst9 As Byte
Dim Rst10 As Byte
Dim Erg11 As Byte ' Monat zuweißen
Dim Erg11a As Byte
Dim Erg12 As Byte
Dim Erg12a As Byte
Dim Rst11 As Byte
Dim Rst12 As Byte
Dim Erg13 As Byte ' Jahr zuweißen
Dim Erg13a As Byte
Dim Erg14 As Byte
Dim Erg14a As Byte
Dim Rst13 As Byte
Dim Rst14 As Byte
Config Sda = Portc.4
Config Scl = Portc.5
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Deflcdchar 0 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32
Cls
Cursor Off
I2cinit
Do
I2cfach
Locate 1 , 1
Lcd Rst2 ; Rst1 ; ":"
Locate 1 , 4
Lcd Rst4 ; Rst3 ; ":"
Locate 1 , 7
Lcd Rst6 ; Rst5 ; " "
Locate 2 , 1
If Rst7 = 1 Then
Lcd "Mo"
End If
If Rst7 = 2 Then
Lcd "Di"
End If
If Rst7 = 3 Then
Lcd "Mi"
End If
If Rst7 = 4 Then
Lcd "Do"
End If
If Rst7 = 5 Then
Lcd "Fr"
End If
If Rst7 = 6 Then
Lcd "Sa"
End If
If Rst7 = 7 Then
Lcd "So"
End If
Lcd " "
Locate 2 , 3
Lcd "," ; Rst10 ; Rst9 ; "."
Locate 2 , 7
Lcd Rst12 ; Rst11 ; "."
Locate 2 , 10
Lcd "20" ; Rst14 ; Rst13 ; " "
Waitms 150
Loop
Sub I2cfach()
I2cstart
I2cwbyte &B11010000 ' <-- Schreibe Adresse des DS1307 (UHR)
I2cwbyte &B00000000 ' <-- Ab Anfang lesen
I2cstart
I2cwbyte &B11010001 ' <-- Lese Adresse des DS1307 (UHR)
I2crbyte Uhrsec , Ack
I2crbyte Uhrmin , Ack
I2crbyte Uhrstu , Ack
I2crbyte Wotag , Ack
I2crbyte Tag , Ack
I2crbyte Monat , Ack
I2crbyte Jahr , Nack
I2cstop
Erg1 = Uhrstu / 16 ' Stunden umwnadeln
Erg1a = Erg1 * 16
Rst1 = Uhrstu - Erg1a
Erg2 = Erg1 / 16
Erg2a = Erg2 * 16
Rst2 = Erg1 - Erg2a
Erg3 = Uhrmin / 16 ' Minuten umwnadeln
Erg3a = Erg3 * 16
Rst3 = Uhrmin - Erg3a
Erg4 = Erg3 / 16
Erg4a = Erg4 * 16
Rst4 = Erg3 - Erg4a
Erg5 = Uhrsec / 16 ' Secunden umwnadeln
Erg5a = Erg5 * 16
Rst5 = Uhrsec - Erg5a
Erg6 = Erg5 / 16
Erg6a = Erg6 * 16
Rst6 = Erg5 - Erg6a
Erg7 = Wotag / 16 ' Wochentag umwnadeln
Erg7a = Erg7 * 16
Rst7 = Wotag - Erg7a
Erg8 = Erg7 / 16
Erg8a = Erg8 * 16
Rst8 = Erg7 - Erg8a
Erg9 = Tag / 16 ' Tag umwnadeln
Erg9a = Erg8 * 16
Rst9 = Tag - Erg9a
Erg10 = Erg8 / 16
Erg10a = Erg10 * 16
Rst10 = Erg9 - Erg10a
Erg11 = Monat / 16 ' Monat umwnadeln
Erg11a = Erg11 * 16
Rst11 = Monat - Erg11a
Erg12 = Erg11 / 16
Erg12a = Erg12 * 16
Rst12 = Erg11 - Erg12a
Erg13 = Jahr / 16 ' Jahr umwnadeln
Erg13a = Erg13 * 16
Rst13 = Jahr - Erg13a
Erg14 = Erg13 / 16
Erg14a = Erg14 * 16
Rst14 = Erg13 - Erg14a
End Sub
Schonmal danke im vorraus