ATMega8 Reset bei SIGNAL()

Gast #123634
Lesenswert?

Hallo,

ich will einen Dimmer bauen. Dafür teste ich gerade meine
Nulldurchgangskennung. Die Hardware scheint soweit zu funktionieren,
aber ich habe ein Problem bei der Auswertung im AVR.

Ich habe folgenden Code:

...
static volatile uint_8t k;

SIGNAL(SIG_INTERRUPT0)
{
  k++;
  if (k==100)
    {k=0;}
  if (k<50)
    {sbi(PORTC,PC5);}
  else
    {cbi(PORTC,PC5);}

}

...

und in main():

...
sbi(DDRC,PC5);
sbi(DDRC,PC4);
sbi(MCUCR,ISC01);
cbi(MCUCR,ISC00);
enable_external_int (1<<INT0);
asm volatile ("sei");
...

Mit anderen Worten: es soll auf die fallende Flanke getriggert werden,
eine LED an PORTC5 soll sichtbar blinken.

Nun, das tut sie nicht. Sie leuchtet. Jetzt habe ich durch verschiedene
Versuche herausbekommen, dass der AVR sich resetet, wenn ich die
SIGNAL() Funktion durchlaufen lasse. Also, wenn ich das "sei" oder
das enable_external_int herausnehme, tut der AVR was er soll. Eine
SIGNAL(__vector_default) Funktion ist ebenfalls vorhanden.

Was hab ich noch alles beachtet? Abblockkondensatoren sind da, ich habe
alle GND und Vcc / AVcc beschaltet, das sollte es also nicht sein.

Was hab ich noch übersehen?

Danke,
s
Gast #123635
Lesenswert?

Bis 100 zu zählen, dürfte nicht reichen. Die On-Time bei angenommenen
1MHz Takt beträgt nur ca. 700µs. Deine LED blinkt, nur eben so schnell
das du es nicht wahrnehmen kannst. Hast du ein Scope um das zu testen
?

Thorsten
Gast #123636
Lesenswert?

Hallo Thorsten,

an Int0 liegt ein Rechtecksignal mit 50 Hz. (Habe zwar kein Scope, um
es mir anzusehen, aber das stimmt schon.) Ist Netzfrequenz über
Optokoppler und Schmitt-Trigger.
Also, an der 100 wird es nicht liegen.

Gleichzeitig mache ich folgendes: Nach dem Einschalten der Spannung
lasse ich eine LED an PORTC4 im Hauptprogramm für ein paar Sekunden
leuchten. Dann geht sie aus.

Nein, dann soll sie ausgehen. Sie tut es nur, wenn ich "sei"
rausnehme. Lasse ich das sei drin, leuchtet sie immer weiter.
Allerdings nicht ganz hell. Daher stammt meine Vermutung, dass der AVR
sich resetet.

Gruß,
s

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren