Drehencoder

Fragen oder Tipps & Tricks über Software

Moderatoren: Tim Sasdrich, Sebi

Drehencoder

Beitragvon Max346 » 24.04.2011, 17:46

Hallo Leute!

Erstmal frohe Ostern euch allen!

Bin grad wieder mal am experimentiren mit dem Mega8 und nem Drehencoder.
Funzt aber leider ned so ganz wie ich will (wie könnte es auch mal anders sein). :)

Wie bekomm ich das Prellen vom Encoder weg?

Hab testweise mal das Zählprogramm vom Chef (7-Segment-Anzeigen - Eine Ziffer bitte) verwendet.
Dieses zählt eben nicht selbst sondern ich mit dem Encoder. Links für runter, rechts für rauf.

Spoiler: show
$regfile "m8def.dat"
$crystal = 8000000

'Portconfigs
Config Portd = Output
Config Portb.3 = Output
Config Portc.5 = Input
Config Portc.4 = Input

'Variablendefinition
Dim E As Byte
Dim Dis(10) As Byte
Dim Cnt As Byte

'Bitmuster der Zahlen
Dis(1) = &B11111001
Dis(2) = &B10100100
Dis(3) = &B10110000
Dis(4) = &B10011001
Dis(5) = &B10010010
Dis(6) = &B10000010
Dis(7) = &B11111000
Dis(8) = &B10000000
Dis(9) = &B10010000
Dis(10) = &B11000000

Cnt = 1

'Pull up´s ein
Portc.5 = 1
Portc.4 = 1

Do

E = Encoder(pinc.5 , Pinc.4 , Links , Rechts , 0)

Gosub Anzeige

Loop

Links:
Cnt = Cnt - 1
If Cnt < 1 Then Cnt = 0
Return

Rechts:
Cnt = Cnt + 1
If Cnt > 9 Then Cnt = 9
Return

Anzeige:
Portb.3 = 0
Portd = Dis(cnt)
Return


Zählen kann das ding schon, nur ned richtig.
Es überspringt immer eine zahl, egal in welcher dreh- (zähl-) richtung.
Der Softwareanschlag bei 9 funzt, der untere bei 0 nicht. Da wird drüber gezählt,
indem er von oben wieder runter zählt.
Der einzige vorteil dabei is, dass ich da dann auch mal die gerade zahlen sehen kann.

Lg Markus
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: Drehencoder

Beitragvon topas » 24.04.2011, 18:04

if Cnt < 1 then Cnt = 0 ' was soll es denn sonst sein?
nach 0 kommt 255.
topas
 
Beiträge: 3796
Registriert: 16.08.2010, 12:47

Re: Drehencoder

Beitragvon Max346 » 24.04.2011, 18:09

Sollte eigentlich der untere anschlag sein.
Will testweise im Bereich von 0 bis 9 zählen.
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: Drehencoder

Beitragvon M.A.R.K 13 » 24.04.2011, 23:01

kleiner als 1 kann nur 0 sein.
Wenn du von dem dann 1 abziehst hast du nicht -1 sondern 255 !
IF CNT >9 then CNT=0
M.A.R.K 13
 

Re: Drehencoder

Beitragvon Max346 » 25.04.2011, 19:50

Ok, ok.
Mir gings bei dem Problem weniger um die Begrenzung.
(Die is meiner Meinung nach das geringste Problem.)
Eher darum, warum der Mega8 den Encoder nicht
richtig (?) ausliest!
Beim drehen am encoder überspringt das Programm immer eine zahl.
Sehe immer nur jede zweite Zahl. Sollte das der Befehl nicht automatisch
unterdrücken (das prellen)?

Wie kann ich das abstellen bzw wie sag ich das dem µC?
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: Drehencoder

Beitragvon Sebi » 25.04.2011, 20:02

Du musst den µC einfach nach dem Schleifendurchgang ein paar ms warten lassen.
Sebi
 
Beiträge: 842
Registriert: 10.08.2009, 17:57
Wohnort: Darmstadt

Re: Drehencoder

Beitragvon topas » 26.04.2011, 06:32

Ich habe keine Ahnung von Bascom - aber was ist mit der Variablen E? Muss die nicht mal abgefragt werden?
10ms sind eine gute Entprellzeit: waitms 10 vor der Anweisung loop.
topas
 
Beiträge: 3796
Registriert: 16.08.2010, 12:47

Re: Drehencoder

Beitragvon Max346 » 27.04.2011, 09:13

Das mit waitms hat nicht so ganz funktioniert. Es wurde zwar etwas besser aber
er hat immer noch eine Zahl übersprungen.

Werd das jetzt anders machen. Nämlich so wie bei meinen
andren schaltungen. Mit 4093er und 4013er.
Diese Lösung braucht auch nur zwei pins und liefert gleichzeitig
entprellte signale. Muss sie dann nur noch mit if anweisungen bearbeiten.
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: Drehencoder

Beitragvon topas » 27.04.2011, 10:17

Du meinst nicht, dass Du es softwaremässig hinbekommst? Das ist ja eigentlich der Sinn eines µC! Möglichst viel durch Software erledigen.
Bascom hat für jeden "Shit" eine Funktion oder Anweisung, deshalb macht es programmierfaul und programmierdumm. Du kannst Dir doch selbst eine Prozedur schreiben, die den Encoder abfragt. Dann weisst Du, wie es geht.
topas
 
Beiträge: 3796
Registriert: 16.08.2010, 12:47

Re: Drehencoder

Beitragvon topas » 27.04.2011, 14:49

PS: gib doch spasseshalber mal den Wert E auf der Anzeige aus. Ich habe mir die Hilfe von Bascom mal angeschaut und verstehe die encoder-function ganz anders als Du. Meiner Meinung nach zählt die Funktion selbst und liefert den Zählwert in der Return-Variablen (bei Dir E) zurück. Die Labels "links" und "rechts" kannst Du für weitere Aktionen verwenden, aber nicht zum zählen! Beim Programmstart sollte E auf null gesetzt weden. Wie gesagt, ich kenne Bascom nur vom weggucken...
topas
 
Beiträge: 3796
Registriert: 16.08.2010, 12:47


Zurück zu Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron