Timing und Drehencoder abfragen?

B

Bernd Maier

Guest
Hallo,

Drehencoder sind hier ja ein beliebtes Thema. FAQ habe ich gelesen, der
Ansatz mit den Automaten/state-machines ist mir bekannt.

Ich wollte das Ganze nun mal auf andere Art und Weise probieren:
Die Phase die sich zuerst ändert gibt ja schon die Drehrichtung an (oder
liegt hier schon mein Fehler?).
Also habe ich schnell und schmutzig einen C-Code für einen PIC
zusammengetippert. Der läuft auch, aber die Abfrage ist unzuverlässig, die
Drehrichtung wird nicht immer richtig erkannt.

Ich vermute, dass mein PIC zu langsam (mit RC-Oszillator, ca. 240 nops/ms)
bzw. mein Code zu gross (der CC5xfree macht aus den if-Anweisungen ca. 20
Instruktionen) ist. Dem LCD lasse für jedes print_zeichen 4ms (2ms pro 4-bit
Nibble) Zeit, ist das der Fehler?

Es besteht natürlich auch die Möglichkeit, dass ich hier grundsätzlich auf
dem Holzweg bin, deshalb bitte die uC-Meister hiermit um ihre Meinung.

Hier kommt jetzt ein Stück vom C-Source, die Idee dahinter ist das ständige
Abfragen der Pegel enc1 und enc2, zwischenspeichern und wieder vergleichen:

------------------------
..
..
..
enc1alt=enc1; // var vom Typ bit für alte werte
enc2alt=enc2; // der phasen initialisieren
encwert='A'; // encwert ist char
while (1) // Hauptschleife
{ // ab hier encoder demo
steuermodus(); // für das LCD
print_zeichen(0); // Cursor an Stelle 0=Anfang 1. Zeile,
// Verzögerung 4ms
if (enc1!=enc1alt) encwert++; // Bei Änderung den encwert
// erhöhen/erniedrigen
if (enc2!=enc2alt) encwert--; // Wenn zu schnell gedreht wird
// keine Änderung, da +1-1=0
schreibmodus(); // auch LCD
print_zeichen(encwert); // der Wert wird als ASCII aufs LCD
// gegeben, Verzögerung 4ms
enc1alt=enc1;
enc2alt=enc2;
}
--------------------------


mfg, Bernd
 
Bernd Maier <gagalus@directbox.com> schrieb im Beitrag <be7dqm$243q9$1@ID-68715.news.dfncis.de>...

Der läuft auch, aber die Abfrage ist unzuverlässig, die
Drehrichtung wird nicht immer richtig erkannt.

Du uebersiehst das Prellen der Kontakte/Lichtschranke.
--
Manfred Winterhoff, mawin at gmx.net, remove NOSPAM if replying
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 
Der läuft auch, aber die Abfrage ist unzuverlässig, die
Drehrichtung wird nicht immer richtig erkannt.

Du uebersiehst das Prellen der Kontakte/Lichtschranke.
Ja, ist mir heute Nacht auch eingefallen. Der Encoder ist mechanisch, prellt
also böse.

Wie löse ich die Prellerei softwaretechnisch am besten? Einfach kurze Pause
einlegen?

mfg, Bernd
 
Bernd Maier <gagalus@directbox.com> schrieb im Beitrag <be8tfr$2apap$1@ID-68715.news.dfncis.de>...
Ja, ist mir heute Nacht auch eingefallen. Der Encoder ist mechanisch, prellt
also böse.
Wie löse ich die Prellerei softwaretechnisch am besten? Einfach kurze Pause
einlegen?

FAQ Beachten ? (Mann, wir sind doch nicht bloed...)
--
Manfred Winterhoff, mawin at gmx.net, remove NOSPAM if replying
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 
Wie löse ich die Prellerei softwaretechnisch am besten? Einfach kurze
Pause
einlegen?

FAQ Beachten ? (Mann, wir sind doch nicht bloed...)
*Räusper*
FAQ sagt unter "F.29.1. Entprellen von Tastern" nur:

"Bei Microcontrollerschaltungen kann man per Software entprellen, braucht
also diese aufwändigen Schaltungen nicht, und auch nicht den teuren
MC14490."

Eine sehr präzise und eindeutige Beschreibung... ;(

mfg, Bernd
 
Bernd Maier schrieb:

Wie löse ich die Prellerei softwaretechnisch am besten? Einfach kurze Pause
einlegen?
Z.B. Kontakt in einem geeigneten festen Zeitraster regelmässigen
abfragen und nur dann einen Pegelwechsel weitermelden wenn mehrere
Abtastungen aufeinanderfolgend der gleiche (neue) Pegel festgestellt wurde.

Also etwa so wenn 4mal der Wert gleich sein muss(jedes Zeichen stellt
einen Abtastwert dar):

PegelKontaktabtastung: ______-_--__---_------------_--__-________
Entprellter Pegel: ____________________------------------____

Gerald
 
Bernd Maier <gagalus@directbox.com> schrieb im Beitrag <be9fcf$250lv$1@ID-68715.news.dfncis.de>...
FAQ sagt unter "F.29.1. Entprellen von Tastern" nur:

Nein, nicht entprellen, sondern Drehencoder. Den Artikel,
den du geflissentlich ignorierst.
--
Manfred Winterhoff, mawin at gmx.net, remove NOSPAM if replying
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 

Welcome to EDABoard.com

Sponsor

Back
Top