-
        
RSS-Feed anzeigen

Searcher

TT - ATtiny861A + Quadratursignal in CLOCK und UP/DOWN Signal

Bewertung: 2 Stimmen mit einer durchschnittlichen Bewertung von 5,00.
Um den TT zum Laufen zu bekommen, hatte ich auf die Schnelle viel vom Programm des Quadenc übernommen und selbst den gleichen µC (ATtiny44A) verwendet. Jetzt bin ich mittendrin im Umsteigen auf auf den ATtiny861A, den ich hiermit zum ersten Mal benutze. Der ist ein bißchen zickig bei den Pinchange Interrupts. Irgendwie verhalten die sich nicht so, wie im Datenblatt angegeben. Hab ich erstmal umgangen und die INT0/1 Interrupts zum Testen benutzt.

BASCOM-DEMO 2.0.7.5 scheint mir auch nicht ausreichend den 10-Bit Timer1 und den 16-Bit Timer0 zu unterstützen. Grundfunktionen der Timer sind per Bascomfunktionen ansprechbar aber sonst mußte ich über die direkte Registerkonfiguration gehen. Der Timer1 läuft defaultmäßig im 8-Bit Mode und hat drei Compareregister, die alle einen Interrupt auslösen können und auch einen HW-PWM Ausgang mit Komplementärausgang und Deadtimer haben. Hinzu kommt das OCR1C-Register, dessen Inhalt als TOP Wert auch noch einen vierten Interrupt auslösen kann (TOV1) aber keinen HW-PWM Ausgang besitzt.

Für meine spezielle H-Brücke (Im Foto auf dem großen Steckbrett noch mit LEDs ersatzbestückt) nutze ich zwei HW-PWM Ausgänge (OC1A und OC1B) für die Vorwärtsrichtung der beiden Motore und eine SW-PWM für die Rückwärtsrichtung. Die Pulse der SW-PWM werden über COMPARE1A und COMPARE1B Interrupts ausgeschaltet und über die COMPARE1D (OCR1D ist auch auf den TOP Wert eingestellt) und TOV1 Interrupts eingeschaltet - sozusagen nicht invertierte SW Fast PWM. Bißchen umständlich aber exclusiv Vielleicht fällt mir außer einer HW-Lösung noch eine andere SW-Lösung ein.



Dafür versuche ich das Quadratursignal der Encoder über HW aufzubereiten. Klappt gut. Innerhalb der gelben Linie im Foto gibt es einen 74HC14 Inverter IC mit Schmitttriggereingängen und einen 74HC86 XOR IC. Für zwei Encoder ausreichend aber zur Zeit nur einer vom TT herüber verdrahtet. Verschaltet wie im Kommentar zum vorletzten Blogeintrag angedeutet und hier nochmal verlinkten Thread.

Der 74HC14 macht mit einem 12kOhm und 22nF RC-Glied eine gemessene Verzögerung von 200 bis 250µs. Das bedeutet, daß nach Auftreten des Clock-Interrupts das UP-DOWN Signal spätestens nach 200µs ausgewertert sein muß. Mal sehen, ob ich das restliche Programm entsprechend hingedeichselt bekomme. Vom Encoder können gegenwärtig aufgrund der Getriebeübersetzung, Batteriespannung und Motortyps maximal 60 Flanken pro 20ms auftreten (entspricht 60 Clock Interrupts pro Encoder in 20ms). Zusammen werden die Encoderauswerteinterruptserviceroutinen also mit maximal 6kHz aufgerufen. Eine benötigt aber nur noch 2,5µs da in ASM geschrieben und Zeit durch "manuelle" Registersicherung auf Stack gemacht wird (Parameter nosave). Die SW-PWM läuft beim Rückwärtsgang mit 4kHz (pro Seite) und braucht pro Schaltinterrupt für eine PWM-Flanke 1,125µs. Von daher sollte ich keine Timingprobleme bekommen und genügend Zeit für andere Funktionen zur Verfügung haben.

"TT - ATtiny861A + Quadratursignal in CLOCK und UP/DOWN Signal" bei Twitter speichern "TT - ATtiny861A + Quadratursignal in CLOCK und UP/DOWN Signal" bei Facebook speichern "TT - ATtiny861A + Quadratursignal in CLOCK und UP/DOWN Signal" bei Mister Wong speichern "TT - ATtiny861A + Quadratursignal in CLOCK und UP/DOWN Signal" bei YiGG.de speichern "TT - ATtiny861A + Quadratursignal in CLOCK und UP/DOWN Signal" bei Google speichern "TT - ATtiny861A + Quadratursignal in CLOCK und UP/DOWN Signal" bei del.icio.us speichern "TT - ATtiny861A + Quadratursignal in CLOCK und UP/DOWN Signal" bei Webnews speichern "TT - ATtiny861A + Quadratursignal in CLOCK und UP/DOWN Signal" bei My Yahoo speichern

Aktualisiert: 23.05.2016 um 18:40 von Searcher

Stichworte: - Stichworte bearbeiten
Kategorien
Kategorielos

Kommentare

  1. Avatar von Searcher
    Der (ATtiny861A) ist ein bißchen zickig bei den Pinchange Interrupts. Irgendwie verhalten die sich nicht so, wie im Datenblatt angegeben. Hab ich erstmal umgangen und die INT0/1 Interrupts zum Testen benutzt.
    Mittlerweile habe ich erkannt, daß der ATtiny861A (461,261) nur ein Interruptflag für alle seine PCINT Pins hat. Ist anders als beim ATtiny44 (ATtiny24,84). Der hat für seinen PORTA ein Interruptflag und für PORTB ein zweites. Beim 861 kann man aber trotzdem zwei Portpingruppen getrennt enablen (mit PCIE0, PCIE1). Die beiden Gruppen sind aber nicht nach Portregistern getrennt. Man kann also nicht sagen PCIE0 ist nur für PORTA zuständig. Der 861 hat dafür aber zwei externe Interrupts (INT0 und INT1). Im Vergleich hat der Tiny44 nur einen, den INT0. Zusammen mit verwechselbaren Interruptnamen in BASCOM hat das bei mir zur Konfusion geführt. Bis jetzt habe ich nur die INT0/1 Interrupts für mich gut getestet.

    Meine Encoderauswertung basiert auf einem Interrupt bei steigender oder fallender Flanke. Bei zwei Encodern wären zwei unabhängig auslösbare Interrupts vorteilhaft um nicht noch in SW nach der Auslösequelle suchen zu müssen. Da wären wegen der freien Pinauswahl die PCINTs wie im ATtiny44 optimal. Hier werde ich wohl bei den INT0/INT1 im ATTiny861A bleiben.