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


von Rudi D. (rulixa)


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?

von Falk B. (falk)


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

von rulixa (Gast)


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.

von rulixa (Gast)


Lesenswert?

http://www.myplace.nu/avr/minidds/index.htm

= Jespers's pages der Vollständigkeit halber.

LG Rudi

von Karl H. (kbuchegg)


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?

von rulixa (Gast)


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

von Peter D. (peda)


Lesenswert?


von Falk B. (falk)


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

von rulixa (Gast)


Lesenswert?

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

Stimmt, mein Fehler.

von rulixa (Gast)


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.

von rulixa (Gast)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.