- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 5 von 5

Thema: Dezimal in Hexadizimal umrechnen für I2C UHR DS1307

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2007
    Beiträge
    6

    Dezimal in Hexadizimal umrechnen für I2C UHR DS1307

    Anzeige

    E-Bike
    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.

    Code:
    $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

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    60
    Beiträge
    1.305
    Blog-Einträge
    1
    Soooooo einfach ? :

    Code:
    Dim X As Byte
    X = &B10101010
    
    Print "Dezimal     : ";
    Print X
    Print "Hexadezimal : ";
    Print Hex(x)
    Print "Binaer      : ";
    Print Bin(x)
    end
    • Dezimal : 170
      Hexadezimal : AA
      Binaer : 10101010


    Natürlich gehen auch andere Variablen (int, long usw)

    Klar daß Bin und Hex als String zu behandeln sind.
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    also du möchtest die dezimalzahlen als hexzahlen auf das
    Display schreiben? dann nimm doch einfach die Funktion
    hex(). Das geht dann so:

    String=hex(dezimalzahl)
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2007
    Beiträge
    6
    Wow, vielen dank für die flotten antworten.
    Das es so extrem einfach zu machen ist hätte ich jetzt nicht gedacht.
    Dafür ist mir mal wieder aufgefallen das ich noch viel zu lernen habe
    Danke!

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    60
    Beiträge
    1.305
    Blog-Einträge
    1
    Ja es gibt auch viel in der Hilfe und in den Beispiel-CodeSamples.
    Außerdem hat MCSELEC auch noch ein gutes Forum (leider nur engl.)

    Da findet man auch viel, wenn man richtig sucht.
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen