Tscha, ich fürchte, du wirst deinen Code rausrücken müssen. Vergiss aber die Code-Tags nicht, sieht hübscher aus
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
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.
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
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
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.
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
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.
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
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
Das Word in einen String läßt du am besten Bascom erledigen
dann hast du einen string "1250"Code:DIM dezi as string * 4 dezi = str(word-variable)
die einzelnen Zeichen am besten mit "overlay"
der Ascii-code z.B. "1" ist 49Code:DIM z(4) as byte at dezi OVERLAY z(1) "1" z(2) "2" z(3) "5" z(4) "0"
für deinen "Lookup" also am besten
Die Sache mit Dezimalpunkt ist da aber noch offenCode:tmp = asc(Z(1)) - 48 segpattern = lookup (tmp, table)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen