mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik D-Flipflop mit tiny13 als Drehgebererkennung


Autor: Rudi D. (rulixa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Finde im Forum nichts rechtes.
Möchte eine Drehrichtungserkennung z.B. mit Drehgeber realisieren.
Ist nur ein einziger billiger Bauteil.

Ich plane also mit tiny 13:
Ein Port verbunden mit Schalter A mit Interrupt von 1 auf 0,
oder umgekehrt, ist ja egal.

Der 2. Schalter wird an einem anderen Port abgefragt.
0 oder 1 gibt schon die Drehrichtung an.

In der Int. Routine 2. Abfrage nach einiger Zeit
"ob es ernst gemeint war". Habe die Erfahrung gemacht, dass manche 
Drehgeber am Haltepunkt hin und her wechseln. Nicht wie prellen aber 
unstabile Zustände.

Oder hat jemand schon was besseres realisiert?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Rudi D. (rulixa)

>Finde im Forum nichts rechtes.
>Möchte eine Drehrichtungserkennung z.B. mit Drehgeber realisieren.

Dann hast du sehr schlecht gesucht.

>Oder hat jemand schon was besseres realisiert?

Ja. Siehe Artikel Drehgeber.

MfG
Falk

Autor: rulixa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Dann hast du sehr schlecht gesucht.
>
>>Oder hat jemand schon was besseres realisiert?
>
> Ja. Siehe Artikel Drehgeber.

Den habe ich natürlich gelesen.
Aber den Punkt bei wackeligen Stellungen, habe ich nicht so genau 
beachtet.
Das werde ich berücksichtigen, (Anschlüsse ev. vertauschen).
Aber mir geht es um den Aufwand und mit tiny13 brauche ich wirklich nur 
SW.
Die HW Lösung ist ja viel aufwendiger.

Ich will einen DDS bauen, der über den tiny13 die up-down Info bekommt, 
ohne dass der DDS Phasenaccumulator extra viel Zeit verbraucht und die 
Signalstörungen so kurz wie möglich sind. Siehe auch jesper's pages.
Bei 24 bit Accu und 16 Mhz ATmega komme ich auf ~0,1 Hz Auflösung und 
max 8 Mhz out.

Autor: rulixa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.myplace.nu/avr/minidds/index.htm

= Jespers's pages der Vollständigkeit halber.

LG Rudi

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rulixa schrieb:
> Falk Brunner schrieb:
>> Dann hast du sehr schlecht gesucht.
>>
>>>Oder hat jemand schon was besseres realisiert?
>>
>> Ja. Siehe Artikel Drehgeber.
>
> Den habe ich natürlich gelesen.

Und welchen Teil des Artikels, der da lautet ...

"Anhängen eines Drehgeberausgangs an einen Interrupt und mit dem anderen 
Pin im Interrupt die Richtung erkennen ist Scheisse"

... hast du nicht verstanden?

Autor: rulixa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
>> Den habe ich natürlich gelesen.
>
> Und welchen Teil des Artikels, der da lautet ...
>
> "Anhängen eines Drehgeberausgangs an einen Interrupt und mit dem anderen
> Pin im Interrupt die Richtung erkennen ist Scheisse"
>
> ... hast du nicht verstanden?

Das Fäkalwort kommt in  Artikel Drehgeber nicht vor.

Also kann ich es nicht verstanden haben.
Aber wir entfernen uns vom Thema.
Warum soll die Abfrage mittels Interrupt + check "ob's so gemeint war"
schlecht sein?

LG Rudi

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  rulixa (Gast)

>Bei 24 bit Accu und 16 Mhz ATmega komme ich auf ~0,1 Hz Auflösung und
>max 8 Mhz out.

Keine Sekunde. Die Ausgabeschleife braucht 9 Takte, macht bei 16 MHz 
max. 1.77 MHz Ausgabetakt. Durch macht maximale Ausgangsfrequenz von 888 
kHz. Nicht schlecht für Software, aber weit weg von 8 MHz.

MFG
Falk

Autor: rulixa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Nicht schlecht für Software, aber weit weg von 8 MHz.

Stimmt, mein Fehler.

Autor: rulixa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> http://www.mikrocontroller.net/articles/Drehgeber#...

Mit C habe ich wenig zu tun, liebe Assembler, aber der Code ist ja nur 
kurz.
Werde mich einlesen.

Autor: rulixa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rulixa schrieb:
> Peter Dannegger schrieb:
>> http://www.mikrocontroller.net/articles/Drehgeber#...
>
> Mit C habe ich wenig zu tun, liebe Assembler, aber der Code ist ja nur
> kurz.
> Werde mich einlesen.

Da sitze ich noch länger, also habe ich mir was ausgedacht:

1. Abfrage Phase A via Int wie vorher, aber in der Int-Routine wird ein 
Flag gesetzt das den Zustand der anderen Phase B speichert. Kann ja 0 
oder 1 sein als Drehrichtung interpretiert.

2. In der Mainloop, die ja das Flag lesen kann wird dieses nur gelöscht, 
wenn sich der Zustand der Phase B geändert hat = gedreht wurde.
Vorteil: es funktioniert völlig statisch, keinerlei Zeitprobleme.

3. Ein neuerlicher INt wird nur zugelassen, wenn das Flag gelöscht 
wurde.
Wenn sich die Phase B nicht geändert hat, zappelt ergo dessen die Phase 
A an der Raststelle.

Also die unstabile Raststelle wird erkannt und nicht ausgewertet.
Funktioniert prächtig!

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.