Forum: Mikrocontroller und Digitale Elektronik [STM8S] Drehgeber direkt anschließen


von STM8-C-Anfänger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche, einen auf einer Miniplatine befindlichen Drehgeber (Rotary 
encoder) aus Chinaproduktion direkt an den Timer 1 des STM8S105 gemäß 
Reference Manual 17.5.10 anzuschließen. Pullup-Widerstände sind auf der 
Platine. Hardwareanschluss ist korrekt. Grundsätzlich funktioniert das 
Ding auch, es prellt aber heftig. Kondensatoren 22pf zur Masse brachten 
nichts.

Das Autoloadregister wurde auf 1000 gestellt, CC1S und CC2S auf 01, CC1P 
und CC2P auf 1 passend eingestellt, SMS in TIM1_SMCR auf 011 gestellt 
und der timer gestartet, also so wie im RefMan beispielhaft dargestellt. 
Angeblich soll das Prellen kompensiert werden, klappt aber nicht, der 
Zähler springt bzw. hängt. Die Software ist noch sehr provisorisch, mir 
ging es um die grundsätzliche Funktion.

Auszug aus der Main:
1
    int dreh1, dreh2, dreh;
2
3
...
4
5
    dreh1 = (TIM1_CNTRH << 8);
6
    dreh2 = TIM1_CNTRL;
7
    dreh = dreh1 + dreh2;
8
    ItoA(dreh, Temp_Text);
9
    oled_gotoxy(0,5);
10
    oled_puts(Temp_Text);

Gibt es noch einen Tipp für mich?

(Wenn noch Infos fehlen, bitte fragen)

von STM8-C-Anfänger (Gast)


Lesenswert?

Ok, habs gesehen, die Bitoperationen beim Setzen der Register stimmen 
nicht, ich melde mich morgen noch mal wieder, nachdem ich diese richtig 
gesetzt und getestet habe.

von STM8-C-Anfänger (Gast)


Angehängte Dateien:

Lesenswert?

Ok, ich weiß nicht, was ich da gestern abend so verbrochen hatte, (Der 
Enkel war da ;) jetzt sind alle Bits so gesetzt, wie die Doku es will. 
Es funktioniert aber noch immer nicht perfekt. Es gibt immer wieder 
Sprünge bzw. zählt der Counter ein, zwei Schritte in die falsche 
Richtung, wenn man langsam dreht. Einzelschritte sind nur mit Pausen von 
ca. 2 Sekunden möglich. Schnelle Drehungen funktionieren gut. Die beiden 
Drehgeberausgänge liegen versuchsweise mit 22 pF auf Masse, das ändert 
aber gar nichts am Verhalten. Es scheint nicht am Prellen zu liegen.

Kann jemand, der das schon gemacht hat, was dazu schreiben?

Es geht mir ausdrücklich um den Encodermode des STM8S-Timers, wie man 
das nach Peter Dannegger löst, weiß ich.

von Wolfgang (Gast)


Lesenswert?

STM8-C-Anfänger schrieb:
> ich versuche, einen auf einer Miniplatine befindlichen Drehgeber (Rotary
> encoder)

Gibt der Signale im kHz- oder im MHz-Bereich von sich?

von STM8-C-Anfänger (Gast)


Lesenswert?

Ah, sorry, es handelt sich um sowas:

https://www.psi-online.de/getpic.php?id=5504

Also kHz-Bereich ...

von STM8-C-Anfänger (Gast)


Lesenswert?

Wolfgang schrieb:
> STM8-C-Anfänger schrieb:
>> ich versuche, einen auf einer Miniplatine befindlichen Drehgeber (Rotary
>> encoder)
>
> Gibt der Signale im kHz- oder im MHz-Bereich von sich?

Kapiert, die Kondensatoren 22pF sind zu klein ... das muss eher im 
nF-Bereich liegen. Ich denke drüber nach und teste es.

von Drehgeberverwender (Gast)


Angehängte Dateien:

Lesenswert?

Aus dem Datenblatt eines Drehgebers ....

von STM8-C-Anfänger (Gast)


Angehängte Dateien:

Lesenswert?

Ich bin weitergekommen, wenn auch nur insofern, dass der counter jetzt 
absolut zuverlässig bei Einzelschritten clockwise immer eins vor und 
beim nächsten Drehschritt in dieselbe Richtung eins zurück zählt, 
counterclockwise dann genau umgekehrt. Schnellere Drehungen clockwise 
über mehrere Rastpunkte funktionieren, counterclockwise nicht. Oszi und 
Logikanalysator zeigen nichts auffälliges, alles so, wie es sein soll. 
Das Problem liegt im µC, also der Konfiguration bzw. Software, der 
Fehler also beim user.

Tja, ich weiß nicht, was ich jetzt noch probieren soll ...

von STM8-C-Anfänger (Gast)


Angehängte Dateien:

Lesenswert?

Falls mal jemand hierüber stolpert, noch die Assemblerliste dazu ...

Ich gebe an diesem Punkt auf und löse es klassisch, siehe Tutorial hier:
https://www.mikrocontroller.net/articles/Drehgeber

von m.n. (Gast)


Lesenswert?

STM8-C-Anfänger schrieb:
> Schnellere Drehungen clockwise
> über mehrere Rastpunkte funktionieren, counterclockwise nicht.

Hast Du den Drehgeber auch richtig angeschlossen?

> Oszi und
> Logikanalysator zeigen nichts auffälliges, alles so, wie es sein soll.

Foto?

von STM8-C-Anfänger (Gast)



Lesenswert?

m.n. schrieb:
> Hast Du den Drehgeber auch richtig angeschlossen?

m.n. schrieb:
> Foto?

beides siehe Anhang (leider bin ich mit dem DSO-Bedienung-erlernen noch 
nicht so weit, um screenshots machen zu können)

von m.n. (Gast)


Lesenswert?

STM8-C-Anfänger schrieb:
> also so wie im RefMan beispielhaft dargestellt.

Mach doch mal nur das, was im RM steht und nicht mehr: Eingänge 
zuordnen, Polarität anwählen (ist zunächst egal), Modus wählen SMS = 0x3 
und Timer starten; keine Bitschieberei, sondern direkt das entsprechende 
Byte schreiben.
Die Signale des Drehgebers sind knapp und mangels Zeitbasisangabe nicht 
zu bewerten, aber die Hardware des STM8 kommt damit sicher klar.

von STM8-C-Anfänger (Gast)


Lesenswert?

Kaum macht man es richtig, schon funktioniert es. ;)

Auf dem Foto "Anschluss Prozessor" sieht man den Fehler. (Kabel sind um 
ein Pin versetzt angeschlossen.) Also doch die Hardware und das von 
Anfang an. Warum es zwischenzeitlich irgendwie ging, kann ich nicht 
nachvollziehen, aber egal.

Moral von der Geschicht: Leute, prüft Eure Schaltungen gründlichst.

von m.n. (Gast)


Lesenswert?

STM8-C-Anfänger schrieb:
> Auf dem Foto "Anschluss Prozessor" sieht man den Fehler.

'Man' kann es nicht sehen, sondern nur Du, wenn Du weißt, was Du gemacht 
hast.

von STM8-C-Anfänger (Gast)


Lesenswert?

Vielen Dank für Deine Hilfe.

m.n. schrieb:
> STM8-C-Anfänger schrieb:
>> Auf dem Foto "Anschluss Prozessor" sieht man den Fehler.
>
> 'Man' kann es nicht sehen, sondern nur Du, wenn Du weißt, was Du gemacht
> hast

Und doch, wenn man die Pinbelegung des verwendeten STM8S105 kennt, dann 
sieht auch "man" es.

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.