Hallo, ich kenne mich mit dem 8 Bit Timer des ATmega aus, leider nicht mit dem 16 Bit Timer - denn diesen bekomme ich nicht wunschgemäss zum "Laufen". Ich möchte 200 mal in der Sekunde einen Interrupt auslösen, mein ATmega ist mit 8 MHz getaktet. Meine Berechnung ist wie folgt: 8.000.000 Hz (Quarz) / 8 (Presacler) sind 1.000.000 Takte für den Timer. ALso muss der Timer bei dem Wert 5000 (deshalb auch der 16 Timer) einen Interrupt auslösen. Mit den vielen Konfigurationsmöglichkeiten des 16 Bit Timer schaff ich es nicht. Vielleicht kann mir jemand behilflich sein. - Vielen Dank schon einmal. Sven
Hallo, ich würde den freien (Evaluation/eingeschränkt) C Compiler CodeVison herunterladen, der unter http://www.hpinfotech.ro/html/download.htm erhältlich ist. Die Installation geht wirklich sehr einfach, ohne dass man ein Manual lesen muss und der Compiler hat eine Wizzard. Damit kann man den Timer durch ausfüllen einer Bildschirmseite konfigurieren und im erzeugten Code die Timereinstellungen nachlesen. Für knifflige Fälle wird man zwar das Datenblatt lesen müssen, aber dieser Weg ist m.E. der relativ einfachste. Gruß Fritz
Fritz123 wrote: > Damit kann man den Timer > durch ausfüllen einer Bildschirmseite konfigurieren und im erzeugten > Code die Timereinstellungen nachlesen. Und da der Wizard freundlicherweise alle Werte als Hexadezimalzahlen schreibt, muss man spätestens wenn man was ändern will, doch im Datenblatt nachsehen (abgesehen davon, dass man ohne Datenblatt-Lektüre überhaupt nicht mehr nachvollziehen kann, wie der Timer überhaupt konfiguriert ist). Außerdem hat der OP nix von einer bestimmten Programmiersprache erzählt. Mit Assembler z.B. wird er mit CodeVision nicht viel anfangen können. > Für knifflige Fälle wird man zwar das Datenblatt lesen müssen, aber > dieser Weg ist m.E. der relativ einfachste. Klar, einfach, aber man hat nix davon. Erzähle keinem, man könne einen µC sinnvoll programmieren, ohne das Datenblatt zu konsultieren... Wenn schon in C programmiert werden soll: Schau lieber ins AVR-GCC-Tutorial. Da steht alles, was man wissen muss, auf deutsch. Und sinnvollerweise gewöhnt man sich auch gleich am Anfang die Syntax mit Bitschiebe-Operatoren an. Dann kann man das Programm später auch lesen und v.a. ändern, ohne jedes einzelne Bit aus dem Datenblatt rauszuklamüsern.
Hallo, AVR-GCC ist auch meine 1. Wahl. leider löst folgender code keinen Interrupt aus: TCCR1A |= (1<<CS11)|(1<<WGM12); // Prescaler 8 / CTC OCR1AH=1; // timer laden OCR1AL=1; TIMSK |= (1<<OCIE1A); // Interrupt Die Sache mit dem A und B Channel verwirrt mich ein wenig.
ich kann dir auch nur zu Codevision raten, aber da gehen die Meinungen auseinander... das A und B sind nur zwei unterschiedliche Compare Match Interrups. Den einen setzt du mit OCR1A, den anderen mit OCR1B. Das H und das L sind nur High und Low Byte. brauchst du aber nicht benutzen (zumindest bei Codevision). Was du in deinem Code gamacht hast ist, dass du den Compare A Match auf 0x0101 gesetzt hast, was umgerechnet 257 sind. Zum Rest kann ich wenig sagen, weil ich mit den >> Befehlen nicht umgehen kann...
> AVR-GCC ist auch meine 1. Wahl. leider löst folgender code keinen > Interrupt aus: > TCCR1A |= (1<<CS11)|(1<<WGM12); // Prescaler 8 / CTC > OCR1AH=1; // timer laden > OCR1AL=1; > TIMSK |= (1<<OCIE1A); // Interrupt > > Die Sache mit dem A und B Channel verwirrt mich ein wenig. Für welchen Atmega ist denn das gedacht? Die CSxx Bits sind doch meistens in TCCR1B, nicht ~A (Die TCCRxx register gehören NICHT zu den Channels). Die Bezeichnung 'Channel' steht nur für PWM-kanal (kann z.B. ein PWM-Signal auf bestimmten Pins ausgeben). Es gibt im Datenblatt eine schöne Tabelle mit allen (15?) Modi, die der Timer beherrscht. hth. Jörg ps.: Poste (bitte) kompilierbare Beispiele
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.