Gast
#2053151
Hallo Jungs, ich bräuchte mal einige Gedankenanstösse.
Ich habe folgendes vor. ( bereits einiges durchgelesen und umgesetzt )
Ich möchte mit einem Encoder ( Pollin mit Taster ) 3 verschiedene Werte
einstellen.
Wert A
Wert B
Wert C
Die aktuelle Daten vom Drehgeber ( Auswertung vom Peter ) möchte die
Werte A.B,C zuweisen, wenn der Taster gedrück wird...
Also Wert A encoder drehen, Tastdrücken, Wert B einstellen Taster..
Ich habe bereits folgendes an Auswertung gebastellt:
$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 32
$framesize = 100
Config Lcdpin = Pin , Db7 = Portb.0 , Db6 = Portb.1 , Db5 = Portb.2 , _
Db4 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Cls
Cursor Off
'System-Timer für periodische Encoder-Abfrage
Config Timer0 = Timer , Prescale = 256
On Timer0 Isr_timer0
Enable Timer0
Const Timer0_reload = 224 'Wert für
1ms
Dim Rotary0 As Byte 'Phasenzustand des Drehencoders
Dim Rotary1 As Byte 'Zähler der Phasenwechsel
Dim Rotary2 As Byte 'Hilfsvariable
Dim Rotary As Byte 'Encoder-Wert
Dim Rotary_last As Byte 'Letzter Encoder-Wert (nur für Demo)
Declare Sub Encoder2() 'Routine zur Anpassung des
ENCODER-Befehls
Enable Interrupts
Do
Call Encoder2()
If Rotary_last <> Rotary Then
Rotary_last = Rotary
Print Rotary
End If
Locate 1 , 1
Lcd Rotary
Locate 2 , 1
Lcd Rotary1
Loop
End
Isr_timer0:
Timer0 = Timer0_reload
Rotary0 = Encoder(pinc.0 , Pinc.1 , Links , Rechts , 0)
Return
Rechts: 'Bei Rechtsdrehung
Rotary1 = Rotary1 + 1 'Zählvariable Phasenwechsel
erhöhen
Return
Links: 'Bei Linksdrehung
Rotary1 = Rotary1 - 1 'Zählvariable Phasenwechsel
vermindern
Return
*** Routine zur Anpassung des ENCODER-Befehls an POLLIN Drehencoder
Sub Encoder2()
Disable Interrupts
Rotary2 = Rotary1 'Zählvariable Phasenwechsel kopieren
Rotary1 = Rotary1 And 1 'Ggf.Phasenwechsel zwischen Rastungen
stehenlassen
push r0 'BASCOM kann kein arithmetisches
Rechtsschieben
lds r0,{rotary2} 'Aber der AVR kanns!
asr r0 'ASR= Rechtsschieben mit Berücksichtigen
sts {rotary2},r0 'des Vorzeichens, also teilen durch 2
pop r0 'eines signed byte
Rotary = Rotary + Rotary2 'Encoder-Wert um Anzahl Rastungen
erhöhen/vermindern
Enable Interrupts
End Sub
Return