Timing und Drehencoder abfragen?

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

Reply to
Bernd Maier
Loading thread data ...

Bernd Maier schrieb im Beitrag ...

Du uebersiehst das Prellen der Kontakte/Lichtschranke.

-- Manfred Winterhoff, mawin at gmx.net, remove NOSPAM if replying homepage:

formatting link
de.sci.electronics FAQ:
formatting link
Read 'Art of Electronics' Horowitz/Hill before you ask. Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.

Reply to
MaWin

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

Reply to
Bernd Maier

Bernd Maier schrieb im Beitrag ...

FAQ Beachten ? (Mann, wir sind doch nicht bloed...)

-- Manfred Winterhoff, mawin at gmx.net, remove NOSPAM if replying homepage:

formatting link
de.sci.electronics FAQ:
formatting link
Read 'Art of Electronics' Horowitz/Hill before you ask. Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.

Reply to
MaWin

Pause

*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

Reply to
Bernd Maier

Bernd Maier schrieb:

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

Reply to
Gerald Oppen

Bernd Maier schrieb im Beitrag ...

Nein, nicht entprellen, sondern Drehencoder. Den Artikel, den du geflissentlich ignorierst.

-- Manfred Winterhoff, mawin at gmx.net, remove NOSPAM if replying homepage:

formatting link
de.sci.electronics FAQ:
formatting link
Read 'Art of Electronics' Horowitz/Hill before you ask. Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.

Reply to
MaWin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.