Hallo hat zufällig jemand ein kleines Beispiel für den CTC Modus um einfach Impulse zu erzeugen? bin gerade bei diesem Thema und versuch emich einzuarbeiten, aber ohne konkrete beispiele ( C-Code) fällt es mir schwer zu verstehen. Gruss C.
Der CTC-Modus hat ja erst einmal nicht viel mit der Impulsgenerierung zu tun. CTC bedeutet nur, dass man den Timer per Hardware beim Erreichen eines bestimmten Zählerstandes zurück setzt und damit die Zählweite verkürzt. Den Begriff CTC kenne ich nur vom AVR (in dieser Bedeutung -- beim Z80 war es der "counter timer circuit"), insofern solltest du wohl mal genauer sagen, welchen AVR du benutzen willst und was für eine Impulsfolge du haben möchtest. Ob du das in C oder Assembler programmieren willst, ist dabei praktisch wurscht: die Programmierung beschränkt sich im Wesentlich auf das Setzen diverser IO-Register.
hi, ich glaube es ist nicht möglich hier ein beispiel zu zeigen das genau das zeigt was du möchtest. wenn du einen timer konfigurieren möchtest, dann geh in das datenblatt undschau die entsprechenden Register an. dann gehe alle register durch, und schau bei jedem bit die beschreibung an und überlege ob du das brauchst. dass du trotzdem ein beispiel hast, dies ist ein ctc timer der mit einem extra quarz 256 interrupts die sekunde auslöst: ASSR |= _BV(AS2); TCNT2 = 0; loop_until_bit_is_clear(ASSR, TCN2UB); OCR2A = TIMER_DIVIDER; loop_until_bit_is_clear(ASSR, OCR2AUB); TCCR2A = _BV(WGM21); loop_until_bit_is_clear(ASSR, TCR2AUB); // prescaler /8 TCCR2B = _BV(CS21); loop_until_bit_is_clear(ASSR, TCR2BUB); TIMSK2 |= _BV(OCIE2A) ; ISR(TIMER2_COMPA_vect) { }
Hallo ich verwende einen Atmega8L und möchte Impulse in der Grössenordnung 5 ms erzeugen. habe versucht das datenblatt zu verstehen aber, das wird man wohl erst verstehen, wenn man es fertig hat ;) zumindest ist es bei mir so....erst im nachhinein macht es oft Klick. Wie würdet ihr s machen wenn ihr 5ms (also 2,5 ms High Potential und 2,5 ms Low Poetential) erzeugen wolttet mt de ctc modus?
Hi >Wie würdet ihr s machen wenn ihr 5ms (also 2,5 ms High Potential und 2,5 >ms Low Poetential) erzeugen wolttet mt de ctc modus? Wie wäre es mit mit ein paar Angaben: Controller,Timer,Taktfrequenz... MfG Spess
ohh sorry :P Atmega8L Interner RC: 1000.000 Hz Timer2 (oder Timer0) Hoffe das reicht. Grüsse aus NRW
2,5 ms lassen sich nicht exakt mit einem 8-bit-Timer bei 1 MHz erzeugen, zumindest nicht auf einfache Weise.
1 | #include <avr/io.h> |
2 | |
3 | #define F_CPU 1000000ul
|
4 | |
5 | static void |
6 | timerinit(void) |
7 | {
|
8 | OCR2 = (F_CPU / 32 / 400) - 1; |
9 | TCCR2 = _BV(WGM21) /* CTC */ | |
10 | _BV(COM20) /* toggle OC2 on compare match */ | |
11 | _BV(CS21) | _BV(CS20) /* f_cpu / 32 */; |
12 | DDRB = _BV(PB3); /* OC2 as output */ |
13 | }
|
ctc wrote: > Timer2 (oder Timer0) Timer 0 kann beim ATMega8 kein CTC. Ansonsten solltest Du Dir im AVR-GCC-Tutorial das Kapitel Timer mal ansehen. Da steht, wie's geht.
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.