Hallo zusammen, kennt jemand eine clevere Methode ein Servosignal eines Modellbauservos auszumessen ohne 16Bit Timer und InputCapture? Zumindest eine cleverere als von mir unten beschriebene... Hintergrund ist, ich würde für ein einfaches Vorhaben gerne einen AtTiny13 benutzten, weil es den im 8 Pin DIP Gehäuse gibt und er das klassische ISP Interface hat. Dafür hat er keinen 16Bit Timer mit ICP. Ich habe natürlich schon selbst etwas versucht. 1.) Einmal einfach den Timer "schnelle" Interrupts zu erzeugen und den Signalpin einfach abfragen => geringe Auflösung + "ein gewisses Jittern" 2.) Einen externen Interrupt getriggert durch das Servosignal. Bei Signalbegin Timer und Variable "TIMER" nullen und bei Signalende TIMER = TCNT2, Im Overflow eine Variable A inkrementieren. Gesamtzeit ergibt sich dann zu TIME = A * 256 + TIMER => Zueinander asynchrone Ereignisse dadurch Jitter Grützi
Die Frage ist was die Tiny noch machen soll. Man könnte auch einfach in einer schleife hochzählen, so lange der eingang 1 ist.
waaaaassss da los 0.o naklar hat der nen 16bittigen Timer mit ICP-Eingang sie Datenblatt auf Seite2 PD6=ICP
Skinner schrieb: > kennt jemand eine clevere Methode ein Servosignal eines Modellbauservos > auszumessen ohne 16Bit Timer und InputCapture? Zumindest eine cleverere > als von mir unten beschriebene... Wird nicht so das Problem sein. Eher die Messung mit dem zu kombinieren, daß der Tiny sonst noch machen soll. Was soll denn noch außer der Messung laufen?
wasssssss da los 0.o ich revidiere habe 2313 gelesen als atiny13 tschuldige
ext Int konfigurieren auf steigende Flanke (steigende Flanke) Int löst aus -> Flanke auf fallend setzen -> Timer starten (Fallende Flanke) Int löst aus -> Flanke auf steigend setzen -> Timer stoppen und den Rest ausserhalb der ISR vorkonfigurieren wie löschen der Variablen usw usf
Skinner schrieb: > clevere Methode? PIC12F1840, hat einen 16bit Timer mit Input Capture, auch im DIP-8 und in circuit programmierbar.
Skinner schrieb: > Dafür hat er keinen 16Bit Timer mit ICP. Der hat auch vieles andere für die Aufgabe nützliche nicht, insbesondere keine Taktbasis mit hinreichender Genauigkeit für die Meßaufgabe... Also einfach dem Tiny13 adé sagen und eine Nummer größer nehmen, also Tiny25. Ebenfalls in DIL8 erhältlich, aber kann einen Quarz als Taktbasis betreiben. Er hat zwar ebenfalls nur einen 8Bit-Timer, aber dafür zusätzlich ein USI, was man wahlweise als "Hilfstimer" oder als "CaptureDevice" verwenden kann. Übrigens: Wie willst du eigentlich deine Meßergebnisse aus dem Tiny wieder rausbekommen? Weil: ansonsten sind sie nutzlos, selbst wenn sie noch so gut sind...
Normal wäre eine Zeitmessung mit z.B. INT0, weil die Art des Interrupts bzw. der Flanke eingestellt werden kann. Aber mit einem 8-bit timer und PCINT funktioniert das genauso gut. Ob für die Zeitmessung ein 16-bit timer oder ein 8-bit-timer zur Verfügung steht ist unerheblich. Bei längeren Zeitmessungen benötigt man auch beim 16-bit timer einen overflow. Zu beachten mit PCINT ist, dass wirklich nur die Zeit zwischen steigender und fallender Flanke gemessen wird.
Skinner schrieb: > Im Overflow eine Variable A inkrementieren. > Gesamtzeit ergibt sich dann zu TIME = A * 256 + TIMER > => Zueinander asynchrone Ereignisse dadurch Jitter Ohne Jitter: Beitrag "AVR Timer mit 32 Bit"
Hallo und danke für die Antworten. Ich denke der Tip mit dem Tiny25 wird´s bringen. Der hat ja sogar 2 (!) 8Bit Timer, auf beiden OC'n' Ausgänge und wie gesagt wurde, lässt sich mit dem USI ein 12Bit Timer bauen. Firma dankt!!
Skinner schrieb: > Hintergrund ist, ich würde für ein einfaches Vorhaben gerne einen > AtTiny13 benutzten, weil es den im 8 Pin DIP Gehäuse gibt und er das > klassische ISP Interface hat. Dafür hat er keinen 16Bit Timer mit ICP. Auf den Tiny85 trifft das auch alles zu und der ist nicht Asbach Uralt, hat mehr Timer, ist besser, schneller, schöner, höher, weiter usw.
Chefkoch schrieb: > lässt sich > mit dem USI ein 12Bit Timer bauen. Da Du die 12Bit aber nicht atomar lesen kannst, ist es das gleiche Problem, wie bei Erweiterung mit dem Overflow-Interrupt. Du mußt daher auch eine ähnliche Lösung verwenden.
:
Bearbeitet durch User
Stimmt, ich kann die 12 Bit micht atomar lesen - ABER (wer hätts gedacht^^) Der Timer 0 würde dann ohnehin mit nem Prescaler von 8 laufen, wodruch sicher der absolute Jitter reduziert. Vorallem aber brauche ich nur noch den Interrupt on PinChange und nicht mehr zusätzlich den Overflowinetrrupt. Wenn die sich überlagern entsteht ja der Jitter, da es sich um zueinander asynchrone Ereignisse handelt. Da ich bei den EINEM Interrupt eine ziemlich konstante Einstiegszeit haben werde, habe ich einen Offset in der Messung und keinen dynamischen Jitter. Steigende Flanke => Timer0 nullen / USI => warten => warten => noch mehr warten => Fallende Flanke => Timer0 lesen/USI lesen => Ergebnis = USI*256+Timer0
Chefkoch schrieb: > Vorallem aber brauche ich nur noch den Interrupt on PinChange und nicht > mehr zusätzlich den Overflowinetrrupt. Wenn die sich überlagern entsteht > ja der Jitter, da es sich um zueinander asynchrone Ereignisse handelt. Was mir nicht eingeht: Ja, natürlich hast du da einen Jitter. Aber in Relation zu der Länge eines Servopulses ist der so minimal, dass ich mir nicht vorstellen kann, das sich der bemerkbar macht. So genau können doch Servos als mechanisches System gar nicht positionieren.
Karl Heinz schrieb: > Jitter. Aber in Relation zu der Länge > eines Servopulses ist der so minimal Genau das. Ebenso sind die 16bit Auflösung total überzogen. Vor vielen Jahren entwickelte ich mal einen Servosteller mit 9bit, also 8bit Timer + 1bit in Software. Das war vollkommen ausreichend und fand für viele Jahre etliche zufriedene Käufer. Ganz grob überschlagen machen 9bit ca. 0,2° Auflösung am Servo, da kommt die Mechanik nicht mit. Nachtrag: Wow. Ich sehe gerade das Teil wird noch immer verkauft, das ist ja schon nicht mehr wahr...
:
Bearbeitet durch User
Micha H. schrieb: > Genau das. Ebenso sind die 16bit Auflösung total überzogen. > Vor vielen Jahren entwickelte ich mal einen Servosteller mit 9bit, also > 8bit Timer + 1bit in Software. Das war vollkommen ausreichend und fand > für viele Jahre etliche zufriedene Käufer. Ganz grob überschlagen machen > 9bit ca. 0,2° Auflösung am Servo, da kommt die Mechanik nicht mit. Ich finde, daß da noch irgendwie eine Zeiteinhit zum Bit gehört. So, wie das da steht, eröffnet es mehr Fragen als Antworten. :(
kürtler schrieb: > Ich finde, daß da noch irgendwie eine Zeiteinhit zum Bit gehört. Da hast Du recht. Ich maß nur den High-Puls, also das was sich zwischen 1 und 2ms abspielt, oder wenn man großzügig ist 0,8-2,5ms. Die Low-Zeit ist ja eh unkritisch, bzw. ist durch das Eingangssignal vorgegeben. Also nochmal großzügig gerundet 3ms / 500 = 6µs pro Bit.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.