Hi! Ich habe vor kurzem begonnen einen ATMega16 in C zu programmieren. Jetzt habe ich im Handbuch gelesen, dass es auch einen Timer gibt, doch leider weiß ich überhaupt nicht wie ich diesen programmieren kann. Im Grunde zählt das "Ding" ja bis zur einer Obergrenze und löst dann einen Interrupt aus (im normal mode). Aber wie kann ich jetzt z.B. sagen, dass er 40 us warten soll bis er die nächste Anweisung ausführt ?? mfg, Gerald
:
Gesperrt durch Moderator
Der Timer hat nen (upmode)ctc und nen interrupt der bei einem overflow ausgelöst wird. Alles was man wissen muss steht im datasheet unter operating ... cu Flo
Im Prinzip musst du dir einfach nen Taschenrechner nehmen und anfangen mit rechnen. Wichtige Größen sind deine Taktfrequenz, der nötige Prescaler und die Zählgrenze (TOP), an der der Timer wieder auf Null gesetzt werden soll. Bsp.: ftakt = 8 MHz Prescaler = 8 --> jeder Zählschritt dauert etwa 1/1MHz = 1us d.h. wenn der Zähler bei 40 angekommen ist, sind 40us vergangen. Es muss lediglich noch der richtige Interrupt freigegeben werden und Interrupts global erlaubt sein. Hoffe, ich konnte helfen. Alex
Danke für die schnellen und hilfreichen Antworten. Jetzt wird mir schon einiges klarer... Eine Frage nr noch zum Prescaler: Mit dem kann man die Taktfrequenz sozusagen "skalieren", ist das richtig? mfg, Gerald
Wie sieht hierzu jetzt der Code aus für den interrupt und den Prescaler und wie kann ich diesen Timer dann aufrufen
mc-project.de Programme -> Timer ist für den ATMega8 geschrieben, eine Adaption auf andere ATMega's sollte kein Problem sein. Prinzipiell hilft aber auch das Datenblatt, dort ist alles haarklein erklärt!
Hallo. Dazu habe ich auch noch eine Frage. Ich habe das gleiche mit einem C8051F060 probiert. Oszillator auf 24.5MHz, Prescaler=1, Interrupt freigegeben, Code läuft. Jetzt möchte ich eine Rechteckschwingung (PIN Toggle) haben, welche mit 100Hz läuft, d.h. mit 200Hz toggelt. Beim SiLabs gibt es einen schönen Hardware Wizard dazu, welcher mir das alles ausrechnet. Um das zu erreichen muss der Timer SYSCLK/2 als Timebase haben und dann mit dem Wert 0x10BE beladen werden damit er das macht was er soll. Leider kommt danach am Oszilloskop eine 90Hz Schwingung heraus! Ich werd noch Wahnsinnig. Die Dateien im Anhang helfen beim Verständnis. Wenn ich die SYSCLK ändere, verändert sich auch die Rechteckschwingung, obwohl ich immer den richtigen Preloader Wert in die RCAP2H und RCAP2L eingetragen habe...
Paul schrieb:
> Dazu habe ich auch noch eine Frage.
Dann mach einen neuen Thread auf, statt einen 5 (sic!) Jahre alten, der
noch dazu mit deinem Thema nur den Namen gemein hat (völlig anderer
Controller, damit völlig andere Peripherie), wieder aufzuwärmen.