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
intdreh1,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)
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.
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.
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?
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.
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 ...
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?
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)
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.
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.
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.
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.