Forum: Mikrocontroller und Digitale Elektronik Externer interrupt INT1 -> ständiger interrupt?


von Daniel (Gast)


Lesenswert?

Ich habe ein Problem mit meinen Mega32.
Sobald ich den Externen Interrupt1 initialisiere hakt das Programmablauf 
komplett auch wenn ich den Anschluss auf Masse lege.
Wie kann das sein?

void Tsic_init(void)
  {

        DDRA |= (1 << DDA1); //PINA1 als Ausgang
    GICR |=(1<<INT1);  //INT1 freischalten
    MCUCR |=(1<<ISC11); //Tnterrupt bei fallender Flanke
        }

Das ist meine Initialisierungsfunktion.
sei() wird später wo anders ausgeführt.

Danke schon einmal!

von (prx) A. K. (prx)


Lesenswert?

Interrupt ohne Handler - jedenfalls sehe ich im Code keinen.

von Daniel (Gast)


Lesenswert?

ja sorry, der sieht so aus

ISR (INT1_vect)
{
  lcd_set_cursor(10,LINE2+10);
  lcd_puts(Book,"interrupt!!!");
  //get_data();
  //get_strobe();

return;
}

Ist ein wenig umfangreicher das ganze.
Aber sobald ich den Teil initialisiere funzt nix mehr.
Ich habe alles heraus genommen, nur eine Ausgabe aufs Display sobald ein 
Interrupt kommt ist noch drin.

von (prx) A. K. (prx)


Lesenswert?

Sind das die einzigen LCD Ausgaben im ganzen Programm? Lies: Was 
passiert wohl, wenn mitten in einer LCD-Ausgabe der Interrupt kommt? 
Ausserdem ist diese Ausgabe recht langsam, folglich der Interrupt recht 
lang beschäftigt.

Womit auf GND gehängt? Taster oder freifliegendes Kabel wäre keine gute 
Idee, weil prellt und folglich mehrfach ausgelöst wird.

M.a.W: Nimm das LCD aus dem Interrupt raus und hänge eine oder mehrere 
LEDs als Indikator dran.

von Lutz (Gast)


Lesenswert?

Das return in der ISR kann schon mal wegbleiben.
Und beim Mega32 gibt Port A nicht ...
Laut meine Datenblatt liegt INT1 auf PD3

von (prx) A. K. (prx)


Lesenswert?

Lutz schrieb:

> Und beim Mega32 gibt Port A nicht ...

Sag das nicht zu laut, sonst glaubt der das noch und es fliegen gleich 8 
Pins weg.

von Daniel (Gast)


Lesenswert?

Nein das sind nicht die einzigen.
Ich habe das Massekabel fest angeschlossen von meiner Masse klemme auf 
die Anschlussklemme des Temperatursensor. Die Datenleitung des Sensors 
ist natürlich runter.

von (prx) A. K. (prx)


Lesenswert?

Daniel schrieb:

> Ich habe das Massekabel fest angeschlossen von meiner Masse klemme auf
> die Anschlussklemme des Temperatursensor. Die Datenleitung des Sensors
> ist natürlich runter.

Und was hat das mit dem Interrupt zu tun?

Kannst du dir vorstellen, dass dieses inkrementelle 
Infos-aus-der-Nase-ziehen etwas nervt?

von Daniel (Gast)


Lesenswert?

Achso...Wieso sollte es PORTA nicht geben?
Dadurch wird der Tsic sensor mit Stromversort.

von Lutz (Gast)


Lesenswert?

Sorry, ich tippe heute zu schnell, da ich los muß; das war eine Mischung 
aus zweitem und dritten Satz.
Kurzum: Es gibt dort auf PA1 kein INT1.
Andererseits kann das hier aber auch evtl. egal sein, wenn mit der 
Initialisierung gar nicht INT1 gemeint sein soll.

von Daniel (Gast)


Lesenswert?

Meiner Meinung nach kann dadurch, dass ich den PD3 auf Masse lege kein 
Interrupt mehr ausgelöst werden. Jedenfalls keiner der dem externen 
Interrupt 1 zu tun hat.

von (prx) A. K. (prx)


Lesenswert?

Daniel schrieb:

Meiner Meinung nach kann dadurch, dass ich den PD3 auf Masse lege kein
> Interrupt mehr ausgelöst werden. Jedenfalls keiner der dem externen
> Interrupt 1 zu tun hat.

Und was hängt an PD3?

von Daniel (Gast)


Lesenswert?

Eigentlich der TSIC 306, das Programm funzt einzelnd auch ganz gut.

Auch das andere Programm funktioniert ganz gut, jedoch nicht mehr sobald 
der Externe interrupt 1 initialisiert ist.
Meiner meinung nach kann es nicht an der Beschaltung liegen, da ich den 
PD3 ja auf Masse gezogen habe (zu Testzwecken).
Ich habe noch eine Funkuhrroutine und eine PWM am laufen.

von (prx) A. K. (prx)


Lesenswert?

Daniel schrieb:

> Meiner meinung nach kann es nicht an der Beschaltung liegen, da ich den
> PD3 ja auf Masse gezogen habe (zu Testzwecken).

Und wie hast du den auf Masse gezogen (Wdh)?

von Daniel (Gast)


Lesenswert?

Wie mit einer Leitung von meiner Masseklemme zur der Klemme wo die 
Sensorleitung normalerweise drauf geht.

von (prx) A. K. (prx)


Lesenswert?

Und damit legst du den Pin auf Masse, während das Programm läuft? Was 
ist vorher mit dem Pin?

von Daniel (Gast)


Lesenswert?

Ich lege den Pin auf Masse und resette den Controller.

von (prx) A. K. (prx)


Lesenswert?

Dann gibt es überhaupt keine Flanke, folglich sollte kein Interrupt 
auftreten.

von Daniel (Gast)


Lesenswert?

Genau, das ist ja auch mein Ziel.
Demnach dürfte ich das restliche Programm damit nicht beeinflussen.

Wenn ich alles aus der ISR-Routine auskommentiere und auch die obige 
initialisierung durchführe funzt auch alles wunderbar.

Eigentlich müsste es doch völlig egal sein, wenn der Pin auf Masse 
liegt.

von (prx) A. K. (prx)


Lesenswert?

Dann liegt der Pin nicht auf Masse. Vielleicht offen. Direkt am 
Controller nachmessen - sowohl gegen GND als auch gegen VCC messen, denn 
gegen GND messen zeigt offene Pins als low an, gegen VCC als high.

von holger (Gast)


Lesenswert?

>Eigentlich müsste es doch völlig egal sein, wenn der Pin auf Masse
>liegt.

Das stimmt. Ist der Pin dann auch unbeschaltet?
Also nur ein Eingang und sonst nix mehr dran?
Nicht das du da deinen Sensor kurzschliesst.

Vieleicht legst du deinen Pin ja auch gar nicht an Masse.
Also Osci dran!

von Daniel (Gast)


Lesenswert?

Liegt voll auf Masse

von (prx) A. K. (prx)


Lesenswert?

Dann ist entweder dein Controller defekt (unwahrscheinlich) oder eine 
deiner Aussagen oder Annahmen ist falsch.

von Daniel (Gast)


Lesenswert?

Das ist wohl wahr.

von (prx) A. K. (prx)


Lesenswert?

Schmeiss mal den LCD-Kram aus der ISR raus und häng nur eine Zeile rein, 
die einen bisher unbenutzten Output-Pin komplementiert. Dann Oszi oder 
Messgerät da dran. Wenn der munter wackelt (Oszi) oder irgendwo mitten 
zwischen GND und VCC liegt (Messgerät), dann hast du eine muntere 
Interrupt-Quelle am Laufen.

Du hast schon für Mega32 übersetzt, und nicht zufällig für irgendwen 
anders?

von holger (Gast)


Lesenswert?

>Dann ist entweder dein Controller defekt (unwahrscheinlich) oder eine
>deiner Aussagen oder Annahmen ist falsch.

Das würde ich jetzt auch sagen. Auch wenn oben im Code was anderes
steht könnte es das sein:

ISC11=0, ISC10=0
The low level of INT1 generates an interrupt request.

Das würde die Sache jedenfalls erklären.

von Daniel (Gast)


Lesenswert?

ISR (INT1_vect)
{


  PORTB ^= (1<<PB0);
  PORTB |= (1<<PB1);
}

Hab mal eine LED an PB0 gehängt. Diese wird getoggelt.
Die andere an PB1 ist dauerhaft an.
Wenn ich den controller resette, sind beide an...die getoggelte ein 
bischen dunkler.
Dann muss da ja irgendwas in Sachen Interrupt laufen.

von Daniel (Gast)


Lesenswert?

Habe den PD3 nun mal auf High gelegt...Programm hakt nicht mehr.
Keine der LEDs ist an.
Das heisst ja irgendwo wird mein MCUCR ungewollt manipuliert.
Ich suche mal.

von (prx) A. K. (prx)


Lesenswert?

Daniel schrieb:

> Wenn ich den controller resette, sind beide an...die getoggelte ein
> bischen dunkler.

Die leuchten beide während gedrücktem Reset (egal wie hell)???

von Daniel (Gast)


Lesenswert?

Ich habe mich falsch ausgedrückt.
Nach erneutem Reset und laufendem (hakendem)Programm, leuten die LEDs in 
besagter Weise.

von Daniel (Gast)


Lesenswert?

Oh man es geht...
Es war tatsachlich so, dass der Interrupt auf LOW stand.
Die Funkuhrroutine, welche ich nutze hatte über all mein MCUCR so 
ungefähr
MCUCR=0b00000001; überschrieben.
Hatte damit nicht gerechnet, da sonst alles vom feinsten mit define und 
allem pipapo sauber geschrieben war.
Danke nochmal an alle!

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.