Habe ich das richtig verstanden, das du jede Ziffer in einer Schleife einzeln durchgehst? (Also nicht alles auf einmal darstellst, sondern jede Ziffer hinter einander)
Kommt es da nicht zu einem sichtabaren Flimmern?![]()
Habe ich das richtig verstanden, das du jede Ziffer in einer Schleife einzeln durchgehst? (Also nicht alles auf einmal darstellst, sondern jede Ziffer hinter einander)
Kommt es da nicht zu einem sichtabaren Flimmern?![]()
Das ist die Technik vom Multiplexen, das geht nicht anders und ist auch so im Sinne des Erfinders.
Und Flimmern, mehr oder weniger, kommt auf die Frequenz sowie Ti/Tp an.
Fernsehr, Kino, Anzeigen von DVD oder Vidreorecorder, ja sogar die Ledrücklichter der neueren PKW's arbeiten so.
Jetz bist du Baff was?
Erkennen kann man das eigentlich nur mit einem Trick (verrat ich nich).
Gruss
Darwin (meine Projekte sind auf meiner Pinnwand zu finden)
ja sogar die Ledrücklichter der neueren PKW's arbeiten so.
Das kann man aber gut sehen, das erste mal, wo ich so ein Auto vor der Nase hatte, dachte ich, daß ich zum Augenarzt muß, man sollte es verbieten!
Gruß Sebastian
Also das hat mir jetzt keine Ruhe gelassen
Hier der Source:
Dann noch der Schaltplan für Dein ICCode:' 4-Digit Multipexed Display an Port C ' PortC.4 = 1er ' PortC.5 = 10er ' PortC.6 = 100er ' PortC.7 = 1000er ' Portc.0 bis Portc.3 = BCD Code der Zahl &H00 bis &HFF ' Hierzu einen 7-Segmentdecoder (74LS48) zwischen PortC(0..3) und den Segmenten schalten ' Nicht vergessen die Treibersegmentausgänge mit 470R PullUp zu schalten. ' Der Baustein 74LS48 kann nur Zahlen (0-9) darstellen heine Hex Codes (ABCDEF) ' Falsche Werte (>9) (>&H09) (>&B00001001) führen zu Anzeigefehlern. $regfile = "m32def.dat" ' AT Mega 32 $crystal = 16000000 ' 16 MHz $baud = 19200 ' Serielle Schittstelle einrichten Anzeigeport Alias Portc ' Hier einstellen an welchem Port ' das Display angeshclossen wird Config Anzeigeport = Output ' Direction einstellen Declare Function Anzeige(byval B_speed As Byte) As Integer Dim X As Integer ' Variable für For Scheife Dim Y As Integer ' Variable für For Scheife Dim B_ar_zahl(4) As Byte Portc = 0 ' Port C initialisieren ' Die Anzeige soll "4321" darstellen B_ar_zahl(1) = 1 ' Hier die 1er Zahlen der Anzeige B_ar_zahl(2) = 2 ' Hier die 10er Zahlen der Anzeige B_ar_zahl(3) = 3 ' Hier die 100er Zahlen der Anzeige B_ar_zahl(4) = 4 ' Hier die 1000er Zahlen der Anzeige Do For Y = 0 To 9 X = Anzeige(5) Next Y Loop End 'end program ' ****************************************************************************** Function Anzeige(byval B_speed As Byte) As Integer Dim B_x As Byte ' Schleifen Variable Dim B_decade As Byte ' Aktivierung der Decade Dim B_select As Byte For B_x = 4 To 7 ' Schleife für Decaden ' Bit 4 bis 7 sind Decaden B_decade = 2 ^ B_x ' Bitmuster für Decade berechnen B_select = B_x - 3 ' Feld des Array's bestimmen Anzeigeport = B_decade ' Nur Decade aktivieren Anzeigeport = Anzeigeport Or B_ar_zahl(b_select) ' Decade + Anzeigewert aktivieren ' Hiermit wird auch das Anzeigetiming ' realisiert Waitms B_speed ' Anzeigedauer der einzelnen Decade Next B_x Anzeige = 0 ' Rükgabewert 0 = ok End Function ' ****************************************************************************** End 'end program
und der Beweis dass es geht....
Gruss
Darwin (meine Projekte sind auf meiner Pinnwand zu finden)
So, durch den ersten Tipp von PicNick bin ich zumindest bei der Segmentansteuerung sehr kompakt fertig.
Nun hängt es noch bei der Dezimalstellenauswahl. Ich möchte eine vierstellige Variabel stellenweise aufsplitten, versuche dafür den "Mid"-Befehl - aber (mal wieder) komme ich mit den Variablenarten nicht richtig klar.
Vereinfacht (und völlig erfolglos) versuche ich gerade :
Code:x=3465 (anzuzeigende zahl) do y=mid(x,3,1) (rechte Ziffer, einer/5, soll selektiert werden) pin1=1 kathode einer ein zeige segmente y=mid(x,2,1) (zehner/6 soll selektiert werden) pin2=1 kathode zehner ein zeige segmente y=mid(x,1,1) (hunderter/4) pin3=1 zeige segmente y=mid(x,0,1) (tausender/3, linke linke Ziffer) pin4=1 zeige segmente loop
Vom Wald sieht' man nix, überall stehen Bäume rum !
Also, sagen wir mal: (ich weiß nicht, ob das jetzt mit deinen Pins so stimmt)
Code:1. MID is nicht so gut, weil da ja wieder ein string rauskommt. Besser is: dim Instring as string * 4 dim onechar(4) as byte at Instring overlay 2. Isses so ? PORTD --> Segmente PORTB.0 --> Einer ' ? PORTB.1 --> zehner PORTB.2 --> hundert PORTB.3 --> tausend 3. Geht aber besser mit Maske als über Pin-Nummer dim charmsk as byte 4. Arbeiten geht besser von tausend-->einer (dadurch kannst du später mal auch führende Nullen unterdrücken) dim charidx as byte ' von 1 - 4 5. Hilfsbyte dim E as byte ' das aktuelle Zeichen Auf geht's: '----------------------------------------------------------------- Instring = "3465" charmsk = 8 '(= pin.3) for charidx = 1 to 4 PORTD = charmsk ' kathode aufdrehen E = onechar(charidx) ' ~ mid(instring, chardx, 1) E = E AND &H0F ' Reduzieren auf 0-9 on e gosub 0,1,2,....... ' kennst du schon shift charmsk, right, 1 ' nächste Kathode next
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen