Problem mit Timer1 ATmega32

OP #1489775
Lesenswert?

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
#1489777
Lesenswert?

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.
OP #1489841
Lesenswert?

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
#1489869
Lesenswert?

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.
OP #1489913
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren