-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Probleme mit SAA1064 und Bascom

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2008
    Beiträge
    24

    Probleme mit SAA1064 und Bascom

    Anzeige

    Hallo Alle zusammen, ich habe die LED - Anzeige mit dem SAA1064 aufgebaut. Läuft auch, allerdings ein Effekt den ich mir nicht erklären kann.
    Der Multiplexbetrieb ist derart langsam, dass man das umschalten sehen kann. Also so im 1/2 Sekunden Takt. Ich weiß nicht ob es an der I2C - Communikation liegt. Habe leider auch kein Oszi um den Datenverkehr anzuschauen. Ich benutze den 89S8252 und habe in Bascom52 programmiert.
    Als test habe ich einfach ein kleines Programm geschrieben welches nur inkrementiert.
    Weiß Jemand wo ich ansetzen könnte.
    In diesem Sinne, vielen Dank erstmal.
    Gruß Harald

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Tscha, ich fürchte, du wirst deinen Code rausrücken müssen. Vergiss aber die Code-Tags nicht, sieht hübscher aus
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2008
    Beiträge
    24
    Also ich versuchs nochmal. Der ist, glaub ich, sogar aus dem Forum.
    Gruß,Harald
    Code:
    $regfile = "89s8252.dat"
    
    
    
    
    
    
    Declare Sub Wandeln_lcd
    
    Dim A As Byte
    Dim F As Byte
    Dim C As Byte
    Dim D As Byte
    Dim E As Byte
    Dim Wert As Byte
    
    
    Anfang:
       For E = 0 To 9
       For D = 0 To 9
       For C = 0 To 9
       For F = 0 To 9
       I2cstart
       I2cwbyte &H70
       I2cwbyte &H00
       I2cwbyte &H17
    
    
       A = E
       Call Wandeln_lcd
       I2cwbyte Wert
       'Wait 1
    
       A = D
       Call Wandeln_lcd
       Wert = Wert + 128
       I2cwbyte Wert
       'Wait 1
    
       A = C
       Call Wandeln_lcd
       I2cwbyte Wert
       'Wait 1
    
       A = F
       Call Wandeln_lcd
       I2cwbyte Wert
       'Wait 1
    
       I2cstop
       Wait 1
    
       Next F
       Next C
       Next D
       Next E
    Goto Anfang
    
    
    
    Sub Wandeln_lcd
       If A = 0 Then Wert = &H3F
       If A = 1 Then Wert = &H06
       If A = 2 Then Wert = &H5B
       If A = 3 Then Wert = &H4F
       If A = 4 Then Wert = &H66
       If A = 5 Then Wert = &H6D
       If A = 6 Then Wert = &H7D
       If A = 7 Then Wert = &H07
       If A = 8 Then Wert = &H7F
       If A = 9 Then Wert = &H6F
       If A = 10 Then Wert = &H77
       If A = 11 Then Wert = &H7C
       If A = 12 Then Wert = &H39
       If A = 13 Then Wert = &H5E
       If A = 14 Then Wert = &H79
       If A = 15 Then Wert = &H71
    End Sub
    
    End

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2008
    Beiträge
    24
    Sorry, gleich noch ne Frage hinterher. =D>
    Die Hex - Werte in der Sub Wandeln.
    Wie kommt der Ersteller zu diesen Werten. Muß man sich für jedes Zeichen den Hex-Wert zusammenbasteln oder gibt es dafür Tabellen.
    Gruß, Harald

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Denke mal, die Segmente a-g entsprechen den Bits in der Tabelle.
    Vermutlich
    &H01 -> a
    &H02 -> b
    ...
    &H40 -> g
    Diese Tabellen sind meist im Datenblatt. Aber 7 Segment von 0-F bringst du auch so zusammen.

    Ein Tip, statt der "if"-Orgie
    Code:
    Sub Wandeln_lcd 
        Wert = lookup(A, Tabelle)
    End Sub 
    
    Tabelle:
        DATA   &H3F , &H06 , &H5B , ......., &H71

    Ich muss mir erst das Datasheet vom SAA anschauen, von wegen Protokoll.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2008
    Beiträge
    24
    Hallo, sieht aus wie Bascom AVR oder?
    In Bascom51 müsste das anders aussehen so viel ich weiß. Bin noch Anfänger.
    Also im Datasheet vom SAA1064 kann ich nichts finden von den darszutellenden Zeichen. Gut, das ist wohl reine Fleißarbeit sich das zusammen zu basteln.
    Ich dachte das I2C - Prtokoll ist im Bascom Compiler integriert, da dürfte es doch eigentlich keine Probleme geben oder.
    Vorab mal danke für Deine Interesse.
    Gruß, Harald

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    1) Ein Beispiel für diese Tabelle findest du
    www.alldatasheet.com find-> DM9368

    Nun, habe mir den saa1064 angesehen. Ich sollte jetzt wirklich wissen, wie (schaltplan?) du das ganze aufgebaut hast. Nach den application notes im Datasheet ? welches ?

    btw I Das Multiplexen hat mit I2C mit hoher Wahrscheinlichkeit NIX zu tun.
    Die geschwindkeit hängt von dem Kondensator an CEXT ab.

    btw II Zumindest der Bascom51 hat das "lookup" im repertoire
    (BAscom52 hab ich nicht gefunden)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2008
    Beiträge
    24
    Hallo PickNick,
    alles klar es funzt.
    Hattest volkommen recht. Ich hatte statt einen 2n7 einen u270 eingelötet.
    Also vielen Dank für Deine Hilfe.

    Die Ansteuerung ist eigentlich doch relativ simpel. Wichtig ist nur, dass quasi vier Bytes mit I2Cwryte geschrieben werden bevor das I2cstop Kommando kommt. Die Hex Werte kann man sich auch sehr einfach erarbeiten.
    Dabei ist nur zu beachten, dass das element a das niederwertigste bit ist und im MSB das höchstwertige bit dem Dezimalpunkt entspricht.
    Gruß, Harald

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2008
    Beiträge
    24
    Hallo Alle zusammen,
    ich bins nochmal.
    Also die Ansteuerung des SAA1064 über I2C habe ich kapiert. Es funktioniert auch alles zufriedenstellend. Nun habe ich aber ein anderes Problem und komme nicht weiter. Ich möchte nun einen analogen Wert z.B. 1250 was einem Spannungswert von 1.250 Volt entspricht anzeigen lassen. Das mit dem Dezimalpunkt ist kein Problem. Aber wie bekomme ich den Wert angezeigt. Fakt ist doch, daß vier bytes (natürlich gewandelt ) mit I2Cwbyte ins SAA geschoben werden bevor dem SAA mit I2Cstop mitgeteilt wird daß alle bytes übertragen wurden. Den Spannungswert habe ich aber als word variable vorliegen. Word = zwei bytes ! muß ich nun in BCD wandeln. Im Simulator bekomme ich aber unsinnige Werte angezeit. Ich machs bestimmt wieder viel zu kompliziert

    Habt Ihr eine Idee
    Gruß, Harald

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Das Word in einen String läßt du am besten Bascom erledigen
    Code:
    DIM dezi as string * 4
        dezi = str(word-variable)
    dann hast du einen string "1250"

    die einzelnen Zeichen am besten mit "overlay"

    Code:
    DIM z(4) as byte at dezi OVERLAY
       z(1)     "1" 
       z(2)     "2" 
       z(3)     "5" 
       z(4)     "0"
    der Ascii-code z.B. "1" ist 49
    für deinen "Lookup" also am besten
    Code:
      tmp = asc(Z(1))  -  48 
      segpattern = lookup (tmp, table)
    Die Sache mit Dezimalpunkt ist da aber noch offen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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