DANKE!!!! :)))))wie machst du das bloß? :))))))))
kann man das aber so noch einstellen, dass er nur von 0 bis 9 geht und dann wieder auf 0 springt?
Also ich habe hier einen Geber, der Gray-Code ausgibt.
Druckbare Version
DANKE!!!! :)))))wie machst du das bloß? :))))))))
kann man das aber so noch einstellen, dass er nur von 0 bis 9 geht und dann wieder auf 0 springt?
Also ich habe hier einen Geber, der Gray-Code ausgibt.
also mein Code sieht jetzt so aus:
$regfile = "m16def.dat"
$crystal = 8000000
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
Initlcd
Dim Zahl As Byte
Dim Zahl1 As Byte
Dim Zahl2 As Byte
Cls
Cursor Off
Do
Cls
Zahl = Pina
Zahl = Zahl AND &B00001111
Zahl = Gray2bin(zahl)
Zahl1 = Pind
Zahl1 = Zahl1 And &B00001111
Zahl1 = Gray2bin(zahl1)
Zahl2 = Pinc
Zahl2 = Zahl2 And &B00001111
Zahl2 = Gray2bin(zahl2)
Locate 1 , 3
Lcd Zahl
Locate 1 , 2
Lcd Zahl1
Locate 1 , 1
Lcd Zahl2
Waitms 70
Loop
End
es sollen nur 3 Stellen angezeigt werden.
also hunderter, zehner und einer stellen.
zur Zeit ist es so, wenn ich den Geber drehe, zeigt das LCD von 0 bis 15 an. und zwar so: 0015.
wenn ich weiter drehe, zeigt das Lcd das an: 0114, 0113.... 015, 011, 020... 021, 0214, 0215, 030...
verstehst du den zusammenhang?
ich brauche es nur 3 stellig. 999.
ICH?? 8-[ (*lach)Zitat:
wie machst du das bloß?
Mit dem "locate"-Befehl kann es passieren, dass es Überschreibungen gibt, wenn die Zahl der Stellen nicht immer konstant ist. Um das zu vermeiden, kannst Du stattdessen auch alle Zahlen in einem LCD-Befehl ausgeben lassen:
LCD Zahl2; Zahl1; Zahl
Dann stehen sie immer schön nebeneinander - egal, ob sie 1- oder 2-stellig sind. Vielleicht ist das System dahinter dann einfacher zu durchschauen - denn ehrlich gesagt, ist mir dies auf die Schnelle nicht gelungen.
Mit 16-stufigen Schaltern nur 10 Ziffern zu erzeugen - das führt zwangsläufig dazu, dass 6 Schalterpositionen ohne Funktion sind, d.h. keine Änderung, wenn Du diesen Bereich überfährst. Wenn Du mit diesem Schönheitsfehler leben kannst, würde ich das einfach so machen:
(und das natürlich für alle 3 Stellen).Code:Zahl = Pina
Zahl = Zahl AND &B00001111
Zahl = Gray2bin(zahl)
If Zahl > 9 then
Zahl = 9
End if
Hoffe, es hilft...
oder es könnte man auch so machen:
ich muss einen 12bit Gray code auswerten.
der Port von Mega16 hat nur 8 bit. (8 pins)
kann man den noch erweitern?
also noch 4 pins von dem anderen Port nehmen, so dass ich 12bit habe?
geht das softwaremässig?
Danke sehr!
Puh - Du hast ja Probleme :shock:
Ich hab´ das gerade mal am Simulator durchgespielt - und so kann auch das klappen:
(Für dieses Beispiel :Alle 8 Bits von Port A sowie Bit 0-3 von Port B als Eingänge)
Sowas kann man übrigens PEFEKT im Simulator durchspielen. Da kannst Du alle Variablen im Dezimal-und Binärfomat sehen. Erste Gehversuche lohnen sich!!Code:Dim Gray as Word '(Endvariable mit 16 Bit Breite)
Dim LoByte as Word '(Untere 8 Bit)
Dim HiByte as Word '(obere 4 Bit)
LoByte = PinA
HiByte = PinB
HiByte = HiByte AND &B0000000000001111 '(Das kennen wir ja schon...)
Rotate HiByte, left, 8 '(Verschiebt die Bits von PortB um 8 Stellen nach links!)
Gray = LoByte + HiByte '(zusammenzählen...)
Gray = Gray2Min(Gray) '(...und in Binärformat umwandeln!!)
Gruß,
Daniel
P.S.: Vielleicht geht´s auch eleganter - keine Ahnung. Bin auch noch nicht soooo der Bascom-Checker =P~
Danke!
Super, es funktioniert!!!!!!
wie soll ich dir danken?
...super, dass es klappt!
Das ist das gute an diesem Forum: Hier werden Sie geholfen! =D>