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


von Nik Bamert (Gast)


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...

von Dirk (Gast)


Lesenswert?

Hi,

und wo ist das sei(); ?

von Nik Bamert (Gast)


Lesenswert?

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

sbi(TIMSK, T0IE1);

von DaSakra (Gast)


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.

von Nik Bamert (Gast)


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 ;)

von DaSakra (Gast)


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

von Alex (Gast)


Lesenswert?

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

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts

von Nik Bamert (Gast)


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
...

von OldBug (Gast)


Lesenswert?

>Nicht mal beim compilieren gibt der gcc seine version
>bekannt :(

 $ avr-gcc --version

von Nik Bamert (Gast)


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"...

von Nik Bamert (Gast)


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 ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.