Problem mit Timer1 ATmega32

OP #1489775
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.