- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: INT0 Interrupt funktioniert nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2013
    Beiträge
    19

    INT0 Interrupt funktioniert nicht

    Anzeige

    Praxistest und DIY Projekte
    Hallo leute,
    habe gestern versucht eine Interrupt Routine zu Programmieren, doch sie Funktioniert weder im Simulator noch mit dem richtigen Chip. Ich weiß einfach nicht an was es liegt.
    Hier mein Code:

    Code:
    .include "m32def.inc"
    
    .def temp1 = r16
    
    .org 0x000
    		rjmp main
    .org 0x002
    	rjmp int0_handler	;IRQ0 Handle
    
    int0_handler:
    			ldi temp1, 0b00010000	;PortC5 HIGH, rest LOW
    			out PortC, temp1
    			reti
    
    main: 
    	ldi temp1, 0xFF	;Port D auf Ausgang
    	out DDRD, temp1
    	ldi temp1, 0x00		;Port D auf LOW
    	out PORTD, temp1
    
    	ldi temp1, 0xFF		; PortC auf Ausgang
    	out DDRC, temp1
    	ldi temp1, 0b00000000	;PortC LOW
    	out PortC, temp1
    	
    	in temp1, GICR
    	ori temp1, 0b01000000	;INT0 = 1
    	andi temp1, 0b11111101	;IVSEL = 0
    	out GICR, temp1
    	in temp1, MCUCR		;INT0 Aktivieren
    	ori temp1, 0b00000011 ; rising Edge
    	out MCUCR, temp1
    	sei
    
    ende:	rjmp ende
    Die GICR Maske ist gesetzt, die MCUCR Bits sind aktiviert und das I Flag ist aktiv, dass müsste doch dann eigentlich Funktionieren wenn der Port D2 (Int0) dann von Low auf high gesetzt wird oder? In meinem Datenblatt vom AtMega32 steht, dass der Interrupt auch funktioniert wenn der Port auf output steht, also hab ich ihn auf low gestellt.

    Wäre nett wenn ihr mir helfen könntet.

    LG

    Jason07

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Jason07 Beitrag anzeigen
    dass müsste doch dann eigentlich Funktionieren wenn der Port D2 (Int0) dann von Low auf high gesetzt wird oder?
    Wo oder wie wird den PD2 high? Im Programm kann ich das nicht finden? und wenn es extern gemacht wird gibt es Kurzschluß, da ja PD2 als Ausgang praktisch niederohmig auf GND liegt.

    Gruß
    Searcher
    Geändert von Searcher (21.03.2013 um 10:06 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2013
    Beiträge
    19
    Es geschieht extern, ich entneme dem Board die 5V Versorgungspannung, habe dann eine Spannungsteiler mit 2 Widerständen 470 Ohm und 1kOhm und geh dann wieder an den Ground vom Board. Parallel zu dem 1k Widerstand liegt ein Taster, der dann mit dem Port D2 Verbunden ist. Aber wenn ich gerade so überlge bleibt die Spannung ja dann trotzdem auf low am Port D2 oder? Durch das schließen des Tasters dürfte doch die Gesamte Spannung am 470 Ohm Widerstandbfallen ?! Lieg ich da richtig?

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Also ich verstehe, daß ein 1k Widerstand von VCC (+5V) nach PD2 geschaltet ist. Von PD2 ein 470 Ohm dann nach GND.
    Parallel zum 1k liegt der Taster. Wenn der Taster geschlossen wird, wird VCC auf den PD2 geschaltet.
    Das ist nicht gut!!! Dann fließt ein hoher Strom von VCC über den Taster nach PD2 und innerhalb vom µC nach GND (PD2 ist Ausgang und low). Der 470 Ohm Widerstand macht nichts, da über den PD2 nach GND überbrückt/kurzgeschlossen.
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2013
    Beiträge
    19
    Zwischen Vcc und PD 2 ist ja der 470 Ohm Widerstand, es dürften also ca. 10 mA fließen. Es kommt erst der 470 Ohm Widerstand, dann parallel der Taster und der 1k Widerstand. Der Taster ende am PD2 und der 1k Widerstand am Gnd. Somit fließt ein Strom über PD 2 der nicht bedenklich ist, da der Controller an dem Pin 20 mA verträgt. Jedoch erhöht sich wie ich in meine letzen Beitrag die Spannung nicht oder? Sie fällt durch das schliessen des Tasters dann Komplett am 470 Ohm Widerstand ab und der Pin ist immer noch auf Low und somit dann auch kein Interrupt oder? Also müsste ich den pin auf eingang schalten mit Pullup auf Gnd oder? Aber wie funktionier dann ein Interrupt wenn der Port auf Ausgang steht? Er hat ja immer einen Wert, High oder Low.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Ich blick immer noch nicht durch die Beschaltung durch. Mach besser eine Skizze.

    Also wenn Du PD2 nie direkt nach VCC mit dem Taster schaltest, sondern immer mindestens den 470 Ohm Widerstand zwischen VCC und PD2 hast, geht schon mal nichts kaputt.

    Du wirst aber den PD2 nicht auf high ziehen können, da der ja praktisch mit GND verbunden ist (weil ja Ausgang und auf low geschaltet)

    Die Funktion mit Auslösen des INT, wenn der Pin auf Ausgang geschaltet ist, ist wohl eher für andere Zwecke gedacht:
    zB könnte ich mir vorstellen, daß über den Ausgang eine Zeitmeßhardware eingeschaltet wird. Intern wird durch die Pegeländerung am Pin der Interrupt ausgelöst. In der ISR wird die Zeitmessung im µC SW-mäßig gestartet ... oder so etwas.

    Für Deine Anwendung sollte der PD2 als Input geschaltet sein.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2013
    Beiträge
    19
    Also irgendwas stimmt da garnicht, mir fällt gerade auf der Taster bewirkt garnichts weil ja von dem 470 Ohm Widerstand direkt ein Kabel geht, also fließt einfach immer ein Strom über den Port. Jedoch habe ich grade gemessen und es besteht zwischen PD2 und VCC keine Spannung das kann ja nicht sein wenn der Port als ausgang auf Low geschaltet ist. Ampermeter zeigt auch 0 A. Ich muss nachher nochmal die Schaltung überabreiten is is was völlig verquer, aber warum funktioniert es im AVR Studio im Simulator nicht? Wenn ich dort das Bit von High auf Low schalte müsster er ja eigentlich in die Interrupt Routine springen oder?

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Jason07 Beitrag anzeigen
    Also irgendwas stimmt da garnicht, mir fällt gerade auf der Taster bewirkt garnichts weil ja von dem 470 Ohm Widerstand direkt ein Kabel geht, ...
    Mach 'ne Skizze!

    ... aber warum funktioniert es im AVR Studio im Simulator nicht? Wenn ich dort das Bit von High auf Low schalte müsster er ja eigentlich in die Interrupt Routine springen oder?
    Nein, Du hast doch auf "rising edge" konfiguriert. (ich kenn mich mit dem AVR Simulator aber nicht aus)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2013
    Beiträge
    19
    Ähm ich meine ja von Low auf High sry verschrieben ^^. Aber der Code ist deiner Ansicht nach richtig? Ich hab nen Schaltplan nur auf nem anderen Pc muss aber jetzt erst mal weg ich lad ihn nachher hoch und werd danach nochmal was umbauen.

    Danke schonmal für deine Hilfe

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Gerne. Hast Du meinen Post von hier https://www.roboternetz.de/community...l=1#post574353 schon gelesen

    Dein Code sieht für mich nicht falsch aus. Kann ich aber nicht nachtesten
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Code: Globale Boolvariable mit INT0 Interrupt auf Tiny13 set
    Von ExXeQtor im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 30.10.2010, 23:10
  2. RC5 Abfrage funktioniert per Polling, aber nicht per INT0
    Von luvat im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 17.03.2008, 05:10
  3. Externer Interrupt mit INT0
    Von Mr Bean im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 12.01.2008, 17:09
  4. URXC1 Interrupt beim Atmega 128 funktioniert nicht
    Von tobuc0 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 24.06.2007, 10:23
  5. Externer Interrupt funktioniert nicht
    Von Jens81 im Forum C - Programmierung (GCC u.a.)
    Antworten: 18
    Letzter Beitrag: 16.10.2006, 19:48

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test