Forum: Mikrocontroller und Digitale Elektronik ATMega8 Reset bei SIGNAL()


von Sebastian (Gast)


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

von Thorsten (Gast)


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

von Sebastian (Gast)


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

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.