Hallo Leute :) Ich versuche zurzeit meinen Timer des ATmega32 in Betrieb zu bekommen. Ich würde gerne an den Pin T1 einen externen Clock anhängen und bei jeder positiven Flanke soll zum Beispiel auf PORTA ein LED aufleuchten. Hier mein Source Code: #include <avr/io.h> #include <avr/interrupt.h> #ifndef F_CPU #define F_CPU 16000000UL #endif #include <util/delay.h> void long_delay(uint16_t ms) { for(; ms>0; ms--) _delay_ms(1); } int main(void) { TIMSK = (1<<TOIE1); TCCR1B = (1<<CS12) | (1<<CS11) | (1<<CS10); sei(); while(1) { } } ISR(TIMER1_CAPT_vect) { DDRA=0xFF; PORTA=0xFF; long_delay(250); } Was mache ich falsch? Bitte um Hilfe. mfg Hannes
Hannes Höttinger schrieb: > int main(void) > { > TIMSK = (1<<TOIE1); Aha. Overflow Interrupt Enabled > ISR(TIMER1_CAPT_vect) > { Wieso auf einmal Capture? Du hast den Overflow freigegeben! PS: Die gewählte Aufgabenstellung ist so nicht allgemeingültig machbar. Du kannst bei einem Timer nur auf bestimmte Ereignisse einen Interrupt legen. 'Timerwert hat sich verändert' gehört leider nicht dazu. Man kann natürlich mit einem Compare immer auf den nächsten Zählerwert triggern lassen und in der ISR den Comparewert um 1 erhöhen. Nur geht das natürlich nicht bis allzuhohen Frequenzen, weil ja die ISR auch Zeit braucht in der sich am Timereingang möglichst nichts tun sollte.
Ich möchte ja nicht einen Interrupt auf Timerwert hat sich verändert legen sondern einfach zum Beispiel wenn eine positive Flanke kommt den Timerwert um 1 erhöhen. Das wäre schon möglich oder? Würde das mit dem T1 Pin funktionieren oder benötige ich hier den ICP Pin? mfg Hannes
Hannes Höttinger schrieb: > Ich möchte ja nicht einen Interrupt auf Timerwert hat sich verändert > legen sondern einfach zum Beispiel wenn eine positive Flanke kommt den > Timerwert um 1 erhöhen. > Das wäre schon möglich oder? Das wäre möglich. Aber du hattest ja auch noch den Zusatz, dass du bei jeder positiven Flanke auch noch eine LED aufleuchten soll. Und da hilft dir der Timer nichts (oder nur sehr bedingt) :-) > Würde das mit dem T1 Pin funktionieren oder benötige ich hier den ICP > Pin? Was willst du eigentlich mit dem Capture? Stellt den Prescaler so ein, dass der externe Takt den Timer antreibt und gut ists.
Das heißt ich stell einfach das hier ein: TCCR1B = (1<<CS12) | (1<<CS11) | (1<<CS10); und leg mal einen Rechteck an T1 an? So sollte es klappen? Also das bei jeder positiven Flanke TCNT1 erhöht wird. Wie könnte die Lösung mit dem LED ausschaun? Schonmal danke für deine Hilfe :) mfg Hannes
Hannes Höttinger schrieb:
> Wie könnte die Lösung mit dem LED ausschaun?
Das Signal nicht nur an T1 legen sondern auch an einen Interrupt
Eingang. zb INT0
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.