www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mein Drehencoder und ich (verstehen uns ned so richtig)


Autor: Santiago (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe inzwischen eine kleine Testschaltung aufgebaut, in der ich u.a. 
einen Drehencoder (STEC12E06 vom großen R) betreibe. Ich habe ihn 
"falsch herum" eingebaut, d.h. er hat pulldown-Widerstände bekommen.

Zur Auswertung nehme ich die Graustufenbestimmung von Peter Dannegger 
(aus der Codesammlung) in Verbindung mit einem Timer-Interrupt.

Laut Datenblatt sollen die Prellungen unter 3 ms liegen - ich betreibe 
also die Tina mit Original 1 MHz intern und den Timer mit Vorteiler 8 => 
alle 2 ms einen Timer Überlauf. Um über die 3 ms Samplezeit zu kommen, 
prüfe ich den Drehencoder nur alle paar Überläufe (habe jetzt von 2-8 
ausprobiert).

Im Moment sieht es so aus, als ob 4 Pulse pro Rasterung kommen.
Das ziemlich stabil vor und zurück. Ich gebe den Zähler auf einer 
Segmentanzeige aus und wenn ich den Encoder ganz langsam von einer Raste 
zur nächsten drehe, sehe ich, dass ich kein Problem mit der Anzeige 
habe. Es werden alle einzelen Werte angezeigt. In Normaltempo gedreht 
tanzt er Diskofox.

Alternativ habe ich auch mal probiert, den Timer mit Vorteiler 64 zu 
fahren, dann verliere ich allerdings Takte, d.h. ich muss unkontrolliert 
drehen um einen Schritt weiter zu kommen.

Wie kann ich denn hier wieder zu verlässlichen Einzelschritten kommen?

Muss ich dem Encoder noch irgendwelche analogen Bauteile spendieren, 
oder habe ich schlicht einen falschen Encoder gekauft?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Santiago wrote:

> Im Moment sieht es so aus, als ob 4 Pulse pro Rasterung kommen.
> Das ziemlich stabil vor und zurück.

Dann funktioniert er doch richtig.
Der Code liefert die Differenz zur letzten Lesung.
Um größere Wertebereiche zu erzielen, muß man dieses Delta z.B. zu nem 
16Bit Wert signed addieren.
So, nun hast Du die 4-fache Pulszahl, also den 16Bit Wert zur Ausgabe 
durch 4 teilen und gut is.

Wenns beim schneller Drehen falsch zählt, dann die Timerinterruptzeit 
verringern, 3ms ist schon ziemlich viel.
Das Entprellen macht nicht das Timerintervall, sondern der Algorithmus.
Dazu muß er aber alle 4 Phasen zuverlässig einlesen können.


Peter

Autor: Santiago (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

danke für Deine Unterstützung.

> So, nun hast Du die 4-fache Pulszahl, also den 16Bit Wert zur Ausgabe
> durch 4 teilen und gut is.

Ich habe eine Anwendung, in der ziemlich viele (kleine) Werte geändert 
werden sollen, deshalb hatte ich bislang die Zähler in einem Bitfeld 
angeordnet.
Manche Werte sind 6bittig, andere nur 1bittig ...
... letztere sind nicht gerade prädestiniert, mittels Encoder 
eingestellt zu werden, wenn man dadurch aber alle Taster spart ...

Jetzt alle Zähler um das 4fache erhöhen verbraucht doch ziemlich viel 
Speicher (der nichtmal sinnvoll verwendet wird). Das ist schon eher 
ärgerlich ;)

Gibt es (empfehlenswerte und erhältliche) Encoder, die nur einen Puls 
per Raste erzeugen?

> Wenns beim schneller Drehen falsch zählt, dann die Timerinterruptzeit
> verringern, 3ms ist schon ziemlich viel.

OK, danke für die Hausnummer. Ohne Erfahrung ist es nicht leicht, die 
richtige Richtung zu finden.

> Das Entprellen macht nicht das Timerintervall, sondern der Algorithmus.
> Dazu muß er aber alle 4 Phasen zuverlässig einlesen können.

Das hatte ich schon so verstanden.
Werde trotzdem mal eine schnellere Abtastung ausprobieren.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Santiago wrote:

> Ich habe eine Anwendung, in der ziemlich viele (kleine) Werte geändert
> werden sollen, deshalb hatte ich bislang die Zähler in einem Bitfeld
> angeordnet.
> Manche Werte sind 6bittig, andere nur 1bittig ...
> ... letztere sind nicht gerade prädestiniert, mittels Encoder
> eingestellt zu werden, wenn man dadurch aber alle Taster spart ...

Dann schau Dir mal das Assemblerlisting an, welche Codemonster Dir 
daraus der Compiler basteln muß.

Es ist unsinnig, um ein Bit SRAM zu feilschen und dafür 100 Byte mehr 
Code zu haben, die AVRs haben massig SRAM.

Nimm für 1..6 Bit ein Byte, für 7..14 Bit 2 Byte als Zählvariable und 
gut is. Dann zur Ausgabe 2*rechts schieben, damit der Wert /4 geteilt 
wird.


Peter

Autor: Santiago (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

> Dann schau Dir mal das Assemblerlisting an, welche Codemonster Dir
> daraus der Compiler basteln muß.

Äh - meinst Du jetzt aus den Bitfeldern?

> Es ist unsinnig, um ein Bit SRAM zu feilschen und dafür 100 Byte mehr
> Code zu haben, die AVRs haben massig SRAM.

Hm - ich feilsche gerade mit einem tiny2313 herum - so üppig ist das mit 
dem Speicher imho nicht. Aber bis ich Assembler nicht nur lesen, sondern 
auch schreiben/denken kann, fließt noch viel Wasser den Bach runter.

> Nimm für 1..6 Bit ein Byte, für 7..14 Bit 2 Byte als Zählvariable und
> gut is. Dann zur Ausgabe 2*rechts schieben, damit der Wert /4 geteilt
> wird.

Ok, werde mir das mit den Bitfeldern mal genauer anschauen.
Das mit dem Schieben hatte ich sowieso schon drin, weil meines Wissens 
die Tina sich mit dem Multiplizieren schwer tut.


Bleibt noch die Frage, ob mir nicht jemand einen Encoder empfehlen kann, 
der nur einen Puls pro Rasterung liefert?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.