Es gibt dafür eine neue Funktion im BASCOM-AVR. Diese und einige anderen werden im meinem
Buch BASCOM-AVR Sprachbefehle beschrieben.
Beispeil für dein Preblem habe ich nachfollgend aufgeführt.
ENCODER (>=1.11.7.7)
Beschreibung:
Liest den Pulse von einem Drehencoder aus.
Syntax:
Var = ENCODER(pin1, pin2, LeftLabel, RightLabel, wait)
Bemerkungen:
Var Die Zielvariable, die mit dem Ergebnis zugeordntet wird
Pin1 und Pin2 Das sind die Namen der PINs des Drehencoders deren Ausgänge verbunden werden.Beide Pins müssen an dem Selben PIN Register verbunden sein. Z.B. Pinb.0 und Pinb.7 ist korrekt, wogegen Pinb.0 und Pina.0 falsch ist.
LeftLabel Der Name des Bezeichners, das aufgerufen wird, wenn eine Drehung nach links ausgeführt wird.
RightLabel Der Name des Bezeichners, das aufgerufen wird, wenn eine Drehung nach rechts ausgeführt wird.
wait Der Wert 0 wird nur für Drehung/Puls überprüft. Der Wert 1 hält das Programm an bis der Benutzer an den Drehencoder wieder dreht.
· Der Bezeichner wird durch den Encoder aufgerufen und muss mit einer RETURN Anweisung abgeschlossen werden.
· Der Pin muss in Eingabe Modus definiert sein. Wird der Pin nicht explizit gesetzt arbeiten alle Pins in Eingabe Modus.
· Die Pull Up Wiederstände müssen durch das schreiben einer logischen 1 an den Portregistern, wie in dem Beispiel gezeigt, aktiviert werden.
Die Drehencoder werden in vielen Schaltungen eingesetzt. Einige Drehendoder werden auch als Schalter benützt. Ein Beispiel eines Drehencoders:
Seitdem die Mikroprozessoren interne Pull up wiederstände besitzen, werden keine Externe Pull up Wiederstände bei den meisten Encoders mehr gebraucht.
Beispiel:
Code:
'Ein Encoden hat 2 Ausgangspins und ein Massepin.
'Es werden die Ausgangspins mit Pinb.0 und Pinb.1 verbunden.
'Es können verschiedene Pins gewählt werden, solange sie an demselben 'Port sind.
'Die Pins müssen als Eingangspins konfiguriert sein.
'Diese Funktion arbeitet mit allen Pinregistern (Ports)
$regfile = "m128def.dat"
$baud = 19200
$crystal = 4000000
Print "Encoder Test"
Dim B As Byte
'wir haben ein Byte gedimmt, weil wir den Zustand des encoder aufrechterhalten möchten.
Portb = &B11 ' Aktivierung des Pull up Registers
Do
B = Encoder(pinb.0 , Pinb.1 , Links , Rechts , 1)
' ^--- 1 warte auf eine
Drehung
' ^--------^--------- Bezeichner die
aufgerufen werden
' ^-------^--------------------------- Port PINs
Print B
Waitms 10
Loop
End
'so, während Sie PINB0 und PINB7 wählen können, müssen beide Pins demselben Port angehören. Diese Funktion arbeitet mit allen Ports der PIN Registern.
Links:
Print "Drehung nach links"
Return
Rechts:
Print " Drehung nach rechts"
Return
End
Ansonsten viel Spass mit der Programmierung.
Gruß
Meissner
Lesezeichen