mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Timer1 ATmega32


Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Höttinger (hansl_)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.