Timing und Drehencoder abfragen?

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
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


Re: Timing und Drehencoder abfragen?

Quoted text here. Click to load it
Du uebersiehst das Prellen der Kontakte/Lichtschranke.
--
Manfred Winterhoff, mawin at gmx.net, remove NOSPAM if replying
homepage: http://www.geocities.com/mwinterhoff /
We've slightly trimmed the long signature. Click to see the full one.
Re: Timing und Drehencoder abfragen?

Quoted text here. Click to load it

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


Re: Timing und Drehencoder abfragen?
Quoted text here. Click to load it
FAQ Beachten ? (Mann, wir sind doch nicht bloed...)
--
Manfred Winterhoff, mawin at gmx.net, remove NOSPAM if replying
homepage: http://www.geocities.com/mwinterhoff /
We've slightly trimmed the long signature. Click to see the full one.
Re: Timing und Drehencoder abfragen?


Quoted text here. Click to load it
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


Re: Timing und Drehencoder abfragen?
Quoted text here. Click to load it
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 /
We've slightly trimmed the long signature. Click to see the full one.
Re: Timing und Drehencoder abfragen?


Bernd Maier schrieb:

Quoted text here. Click to load it

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


Site Timeline