www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt Routine schreiben (Timer 1 , 16 bit)


Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen... Ich hoffe, dass ihr mir helfen könnt.

Und zwar möchte ich mit dem Atmega8 in C eine Interrupt Routine 
schreiben. Ich nutze dazu WINAVR.

Frage:

1) Wie kann ich meinem C Code mitteilen, dass der Überlauf stattgefunden 
hat ? Ich glaube ja mit ner Interrupt Routine, aber wie wird sie 
aufgerufen ?

2) Wie muss mein Programm aussehen, welche Header Dateien brauche ich ?

3)Muss ich noch einen Prototypen definieren ?


void main (void)

{

...


TIMSK |= _BV(TOIE1); //aktivieren des Überlaufinterrupts von Timer1

TCCR1B = _BV(CS12) | _BV(CS10); //Prescaler definieren(aus Datenblatt: 
101 cs12,cs11,cs10) = 1024 Prescaler

TCNT1 = 55771; //Zählregister vorladen für 10sek.

sei (); //Interrupts global zulassen.

}

// so hier soll jetzt eine Interrupt Routine stehen, diese Lösung habe 
ich hier aus dem Forum...
heißt das jetzt, wenn meine 10 sek. abgelaufen sind, wird dieses 
Programm aufgerufen ???????
was sollte ich an meinem Code ändern ?
danke für die Hilfe

interrupt [TIM0_OVF] void timer0_int(void) //
    {
    // hier dein Code
    }


Autor: MCP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok...habs mal versucht...sagt mir bitte ob das so richtig ist...

1) sind die header Dateien vollständig dafür ?
2) Ist das define richtig ? mit dem vector 9 ?
3) würde das programm so laufen ?

//-------------------------------------------------------------

#define TIMER1_OVF_vect                 _VECTOR(9) //siehe Datenblatt 
S.44
#define SIG_OVERFLOW1                   _VECTOR(9)

// Timer Interrupt Routine (ISR) , wird ausgeführt, wenn der Timer 
überläuft !!?????

ISR(TIMER1_OVF_vect) /* veraltet: SIGNAL(SIG_OVERFLOW0) */
{
    /* Interrupt Code */
}

#include <stdlib.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/iom8.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 1000000UL     /* Quarz mit 1 Mhz  */
#endif
#include <util/delay.h>

int main (void)
{
...
TIMSK |= _BV(TOIE1);
TCCR1B = _BV(CS12) | _BV(CS10);
TCNT1 = 55771; //Zählregister vorladen für 10sek.
sei (); //Interrupts global zulassen

}

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define TIMER1_OVF_vect                 _VECTOR(9) //siehe Datenblatt
S.44
#define SIG_OVERFLOW1                   _VECTOR(9)
brauchst du nicht. Darum kümmert sich die iom8.h.

Und die iom8-h musst du auch nicht manuell includen. Darum kümmert sich 
die io.h.

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der AVRTyp im Makefile angegeben wird brauchst Du nur die io.h 
einbinden. Dadurch, das du die interrupt.h einbindest brauchst du den 
vector nicht selber setzten. sollte eigentlich auch ne warnung geben, 
oder?

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok..danke für eure antworten...

ja tatsächlich gabe es eine warnung....

habe die define´s gelöscht....

kann ich den code denn so verwenden ?
ist er so richtig ?

vielen dank

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

Bewertung
0 lesenswert
nicht lesenswert
1) Lade den Code ins AVR Studio und simuliere ihn.
   Tip: Prescaler auf kleinere Werte als 1024 setzen.
   Sonst wartest du dir einen Ast ab.

2) Lade den Code in den Prozessor und probiere ihn aus.

Da du Neuling bist empfehle ich dir, dich mit
Variante 1) auseinander zu setzen. Du Simulation im
AVR-Studio ist dein Freund und du wirst noch viele
Stunden mit dem Debugger im AVR-Studio verbringen. Also
fang besser gleich damit an, dich mit ihm zu beschäftigen.

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.