mikrocontroller.net

Forum: Compiler & IDEs Timer Interrupt(gcctest2.c)


Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tach :)

Ich sitze nun seit etwa zwei Stunden an meinem Interrupt Problem...
Auf Suche hab ich mich auch schon begeben, hier im Forum, google und
altavista. Rausgekommen ist nur, das in gcctest2.c anscheinend
eine led mithilfe des timerinterupts zum blinken gebracht wird.
Nun wäre diese Datei warscheinlich eine riesige Hilfe, da mein
Programm
ziemlich ähnlich funktionieren soll. Ich hab mir mittlereweilen schon
zwei alte WinAvr installationen gesaugt und nirgends ist die Datei
enthalten-hat die vielleicht noch jemand?

Falls das nicht der Fall ist, hier mal ein ausschnitt aus meinem
Programm..

#include <sig-avr.h>

SIGNAL(SIG_OVERFLOW1)
{
  PRINT("N");
  outp(0, TCNT1H);// Reset Timer
  outp(0, TCNT1L);
}
//..
main()
{
//------------------------
// Timer 1 init
//-----------------------

  outp(0, TCCR1A);
  outp(4, TCCR1B);// Prescaler /256
  outp(0, TCNT1H);
  outp(0, TCNT1L);

  sbi(TIMSK, TOIE1);//enable timer
  //.......
}

Das ist eigentlich alles, was mit dem Timer zu tun hat, und ich sollte
doch eigentlich immer mal wieder ein N über den uart bekommen-es tut
sich aber rein gar nichts. An der Funktion PRINT liegts nicht, die
läuft einwandfrei...Im Moment ist mir auch noch egal wieviele Male
ich den Interrupt bekomme, es soll sich einfach mal etwas tun...

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

und wo ist das sei(); ?

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das gibts in meiner alten gcc version leider noch nicht,
darum aktiviere ich den interrupt mit

sbi(TIMSK, T0IE1);

Autor: DaSakra (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das gibts in meiner alten gcc version leider noch nicht
Wirklich?!
Dann informier dich mal was sei() macht! Es gibt nämlich noch sowas wie
ein "Global Interrupt Enable" Flag.

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich weiss, das würde alle interupts einschalten, aber sollte doch
auch so funktionieren wie ichs gemacht habe...weil sei(); gibt mir nen
fehler beim gcc ;)

Autor: DaSakra (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

schreib statt
#include <sig-avr.h>
erst mal
#include <avr/signal.h>
#include <avr/interrupt.h>

und probiers noch mal.

Bei sei() gibts deshalb eine Fehlermeldung weil sei() in interrupt.h
definiert ist.

Und:
Um mit Interrupts arbeiten zu können muss immer das Globale Interrupt
Flag gesetzt sein.

Gruß
Christian

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Viele Fragen würden sich nach Lesen des Tutorials erledigen ...

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, hab nun die interrupt.h auch noch eingebunden, hab die wohl
übersehen :S

Mein gcc ist aber wirklich ein antikes Stück, avr/interrupt.h
gibts noch gar nicht. Welche Version es ist kann ich nicht wirklich
sagen, ich hab den sicher vor nem Jahr gedownloaded, dann ein Programm
angefangen und nun fertig geschrieben, desshalb verwende ich auch
keine
neuere Version. Nicht mal beim compilieren gibt der gcc seine version
bekannt :(

Wie auch immer das Problem mit dem Interrupt besteht immer noch,
obwohl
ich nun auch sei(); verwende...

>Viele Fragen würden sich nach Lesen des Tutorials erledigen ...

Kenne ich sehr wohl nur habe ich da anscheinend nicht alles gelesen,
sondern nur ab den verschiedenen Registern, um die Timer zu setzen,
dass da oben noch #include <avr/interrupt.h> stand sah ich leider nicht
...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nicht mal beim compilieren gibt der gcc seine version
>bekannt :(

 $ avr-gcc --version

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahaaa ;-) danke :P 3.0.2 hab ich...also ziemlich alt, ich würde sogar
sagen das war noch nicht als package mit pn2 und so damals, also noch
nicht als "winavr"...

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AAAAAARRGG ich vollidiot lol :D

Ich hab sei(); erst nach meinem üblichen ata init eingefügt.
Naja und zu meinen Tests hab ich die hdd eben nicht immer
angeschlossen,
folglich auch kein erfolgreicher init damit auch kein sei();
Naja jedefall gehts jetzt suppi, muchas gracias ;)

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.