Hallo, in den Datenblättern lese ich immer nur was von Prescaler, die den Takt durch 8, 64 oder 256 teilen. Ist es auch möglich, diesen durch 32 oder 128 zu teilen? Gruß Heinrich
Die Prescaler Hardware im AVR hat nur die angegebenen Werte. Vielleicht kann man helfen, wenn du beschreibst, wieso du Prescaler 32 oder 128 brauchst.
Üblicherweise kann man davon ausgehen, daß alles, was im Datenblatt steht, auch geht (mit ein paar wenigen Ausnahmen), und alles, was da nicht steht, auch nicht geht. Solltes du doch irgendwie einen Preoscaler von 32 oder 128 hinbekommen, dann informier bitte Atmel, damit die das ins Datenblatt aufnehmen ;) Oliver
Ich wollt von nem 20 Mhz Takt einen 1ms Takt erzeugen. Mit nem Prescaler von 8 gehts, mir wären halt 32 lieber gewesen. Beansprucht der Timer dann jeden 8. Takt für sich alleine oder läuft das parallel zu anderen Sachen?
Prescaler 8 ist dann vollkommen problemlos. Die Software merkt nicht, ob die Hardware mit Prescaler 8 oder mit den fiktiven 32 getaktet wird. Die Software merkt, wie oft deine ISR Rechenzeit braucht und das ist alle 1 ms.
Was möchtest du tun? Wenn "das" ein timer ist, dann läuft das parallel zu anderen Sachen. Wenn es ein interrupt ist, dann nicht. Vielleicht suchst du den "Clear Timer on Compare Match"-modus? Ein nützliches tool ist avrcalc.exe
ja, ich wollte es mit dem CTC Modus machen^^ Interrupt wird dabei natürlich jedes mal aufgerufen und erhöht mir meinen ms Zähler, die Zeit passt nur noch nicht ganz Ich hab das Bits WGM12 (CTC1) gesetzt, genauso wie COM1A1 und COM1A0
Heinrich schrieb: > ja, ich wollte es mit dem CTC Modus machen^^ Wenn du es damit und mit einem Vorteiler von 8 auf 1ms schaffst, dann ist doch alles gut (hab nicht nachgerechnet). Ganz im Gegenteil. Deine Granulierung ist doch mit einem kleineren Vorteiler viel besser, so dass du die 1ms mit einem kleinen Vorteiler viel genauer treffen kannst.
ich hab halt noch i2c interrupts und ähnliches^^, das stört doch dann, wenn man nur nen Teiler von 8 hat?
Heinrich schrieb: > ich hab halt noch i2c interrupts und ähnliches^^, das stört doch dann, > wenn man nur nen Teiler von 8 hat? Nein. 1000 Interrupts pro Sekunde sind 1000 Interrupts pro Sekunde. Über welche Hardware-Einstellungen diese zu Stande kommen, ist für die "Software-Last" irrelevant.
Heinrich schrieb: > ich hab halt noch i2c interrupts und ähnliches^^, das stört doch dann, > wenn man nur nen Teiler von 8 hat? Heinrich, das ist Hardware, keine Software. Auch wenn die "Programmierung" dieser Hardware (also das Erstellen der Hardwarebeschreibung) fast aussieht wie Software-Programmierung (erfolgt halt in Verilog oder VHDL, die C bzw. Ada recht ähnlich sind), der wesentliche Unterschied ist: in der Hardware kannst du (nahezu) beliebig viele Aktionen (die sich bei VHDL dann zur Verwirrung der Softwerker auch noch "process" nennen) parallel erledigen. Mit einem Tick des jeweiligen Taktes werden eben parallel die Flipflops deines Timers umgeschaltet auf den nächsten Wert (und dabei der "compare match" ggf. ermittelt), gleichzeitig schalten mit dem gleichen Tick die Flipflops der ALU, um das Ergebnis des aktuellen Befehls in das Zielregister zu übernehmen oder was auch immer gerade in der CPU dran ist. Wenn der compare match noch so konfiguriert ist, dass er einen Ausgang schalten soll, dann würde auch das völlig gleichzeitig erfolgen. Das ist ja gerade der nette Trick dabei: die Behandlung des Interrupts in der Software kann sich hernach Zeit nehmen (so lange, bis der nächste entsprechende Interrupt auflaufen würde), die Hardware dagegen schaltet sofort.
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.