www.mikrocontroller.net

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


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interrupt ohne Handler - jedenfalls sehe ich im Code keinen.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lutz (Gast)
Datum:

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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Daniel (Gast)
Datum:

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

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Daniel (Gast)
Datum:

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

Autor: A. K. (prx)
Datum:

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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich lege den Pin auf Masse und resette den Controller.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann gibt es überhaupt keine Flanke, folglich sollte kein Interrupt 
auftreten.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liegt voll auf Masse

Autor: A. K. (prx)
Datum:

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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist wohl wahr.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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)???

Autor: Daniel (Gast)
Datum:

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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

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.