Gast
#3984116
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Was genau wird in den Zählregister reingeschrieben? Negative Werte ergeben doch kein Sinn, wenn der Register an sich von 0 bis 255 hochzählt.
|
Anzeige
|
Frage zu PD Entprellung
Gast
#3984116
Was genau wird in den Zählregister reingeschrieben? Negative Werte ergeben doch kein Sinn, wenn der Register an sich von 0 bis 255 hochzählt. Paul schrieb: > Negative Werte ergeben doch kein Sinn, wenn der Register an sich von 0 > bis 255 hochzählt. Der Zählerüberlauf kommt beim 256. Takt, also beim Überlauf 255->0. > Was genau wird in den Zählregister reingeschrieben? Für 100 Zählschritte muss also eigentlich ein Wert von 256-100=156 eingetragen werden, wenn 100 Takte gezählt werden soll. Weil aber bei 8 Bit 256=0 ist, kann statt 256-100 auch 0-100 eingetragen werden. Oder eben gleich -100. Nimm mal ein Blatt Papier und zeichne dir das auf. Es ist wichtig... ;-)
Gast
#3984146
Klingt sinnvoll, allerdings benutzt er den Timer0 also mit 8Bit und einen Vorteiler von 1024. Sprich ((2^8)*1024)/10MHz ergibt bei mir 0.0262144 Sekunden. Sprich alle 26.2 ms wird der Zähler um TCNT0 um eins erhöht....
Gast
#3984160
Sprich nach 100 Takten wären dann schon 2.6sekunden um ? Paul schrieb: > Klingt sinnvoll, allerdings benutzt er den Timer0 also mit 8Bit und > einen Vorteiler von 1024. > Sprich ((2^8)*1024)/10MHz ergibt bei mir 0.0262144 Sekunden. > Sprich alle 26.2 ms wird der Zähler um TCNT0 um eins erhöht.... Nö. Dieser Timer mit 10Mhz und einem Vorteiler von 1024 würde in 26.2 einmal von 0 bis 255 zählen. Um 1 erhöht wird er alle 0.0001024 Sekunden.
Gast
#3984174
Karl Heinz schrieb: > Nö. Dieser Timer mit 10Mhz und einem Vorteiler von 1024 würde in 26.2 > einmal von 0 bis 255 zählen. Ah da ist der Denkfehler. Danke :).
Gast
#3984185
Dann versteh ich allerdings nicht warum PD nicht TCNT0 nur 98 Takte für ein Interrupt laufen lässt. Denn dann käme 10.0352 ms exakt raus anstatt bei 100 Takten 10.24 ms. (Abgesehen von der Toleranz des Quarzes.) Paul schrieb: > Dann versteh ich allerdings nicht warum PD nicht TCNT0 nur 98 Takte für > ein Interrupt laufen lässt. Denn dann käme 10.0352 ms exakt raus anstatt > bei 100 Takten 10.24 ms. (Abgesehen von der Toleranz des Quarzes.) weil die Genauigkeit der 10ms keinen wirklich interessiert. Die Zeit ist nicht kritisch. Alles zwischen ca. 5ms und ca 30ms würde funktionieren. Es geht hier um die ungefähre Größenordnung und nicht um den einzelnen Taktzyklus. Da gibt es einen riesigen Toleranzbereich. (ich schmeiss meistens das Nachladen des Timers komplett raus)
Gast
#3984209
Wenn der Mikrocontroller die Befehle aus der ISR abarbeitet, wird während dessen der Zähler intern weiter hochgezählt? Und wie sähe das aus wenn ich zwei unterschiedliche Timer0 und Timer1 nutzen würde. Wird der Zähler zb. von Timer1 weiter erhöht während die Befehle beim Interrupt des Timer0 abgearbeitet werden? Ich muss ein MRT Signal immitieren und dies auf paar ms genau. Während dessen werden ADC ausgelesen und ggf. über USB Signale übertragen. Daher die Frage in wieweit ich das MRT während ich ADC einlese zuverlässig mit einem Mikrocontroller immitieren kann. Paul schrieb: > Wenn der Mikrocontroller die Befehle aus der ISR abarbeitet, wird > während dessen der Zähler intern weiter hochgezählt? Ja natürlich. FAQ: Timer > Und wie sähe das aus wenn ich zwei unterschiedliche Timer0 und Timer1 > nutzen würde. Wird der Zähler zb. von Timer1 weiter erhöht während die > Befehle beim Interrupt des Timer0 abgearbeitet werden? Die Timer laufen unabhängig von der CPU weiter. Sie sind unabhängige Hardware. Solange sie einen Takt am Eingang haben, laufen sie. > Ich muss ein MRT Signal immitieren und dies auf paar ms genau. Dann such dir einen Timer aus, der einen CTC Modus hat. Dieses Timer-Nachladen ist sowieso ein Graus. Im Entprellungsartikel nur deswegen genutzt, damit dort der Timer 0 benutzt werden kann, der auf einigen AVRs keinen CTC Modus unterstützt und weil es bei der Entprellung völlig unkritisch ist, ob die ISR mal ein paar Takte zu spät kommt oder nicht. Da kann man den Timer nehmen, der am wenigsten 'weh tut', wenn man ihn auf eine ISR-Aufruffrequenz einpegelt, die man sonst nirgends im System brauchen kann. FAQ: Timer
Gast
#3984216
Dazu folgen Tasteingaben, die entprellt werden und zusätzlich Ausgaben an LCD Displays... usw. Daher relativ komplex viele Aufgaben, allerdings muss nur das MRT Signal exakt immitiert werden können und der rest ist zweirangig. Paul schrieb: > Dazu folgen Tasteingaben, die entprellt werden kann ruhig mit in den MRT Timer INterrupt mit hinein. Das ist ja das bestechende an der PeDa Entprellung: die paar Taktzyklen, die für die Entprellung draufgehen, kann man problemlos in jeder anderen ISR unterbringen, sofern nur die Aufrufhäufigkeit ungefähr passt. > und zusätzlich Ausgaben > an LCD Displays... die haben in der ISR sowieso nichts verloren und gehören da auch nicht hin Karl Heinz schrieb: > Paul schrieb: >> Dazu folgen Tasteingaben, die entprellt werden > > kann ruhig mit in den MRT Timer INterrupt mit hinein. Das ist ja das > bestechende an der PeDa Entprellung: die paar Taktzyklen, die für die > Entprellung draufgehen, kann man problemlos in jeder anderen ISR > unterbringen, sofern nur die Aufrufhäufigkeit ungefähr passt. Um es noch mal klar anzusprechen: Du richtest dich NICHT nach der Entprellung! Du hast einen Timer Interrupt (aus anderen Gründen), der eine ISR Aufrufzeit im Bereich von 5ms bis 30ms hat (d.h. die Zeit ist natürlich fix, sollte sich aber in diesem Bereich bewegen), dann passt das perfekt: Der Entprellcode da mit rein (ohne Timer nachladen) und gut ists. Der Entprellcode richtet sich nach den restlichen Anforderungen und nicht umgekehrt. Ob der Entprellcode alle 10ms augerufen wird oder alle 12 oder alle 7 oder ... spielt keine Rolle. Wenn dein MRT Code alle 5ms aufgerufen werden muss, dann wird eben die Entprellung auch alle 5ms mitgemacht. Das ist der Entprellung sowas von egal. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|