Hallo Leute, ich häng seit zwei Tagen an folgendem Codefragment. Wie man sieht versuche ich den PIN-Change-Interrupt eines ATTiny15 zu benutzen. Wenn ich in folgendem Code den PIN 2 des IC (PortB 4) auf Masse lege, fürhr er trotzdem weiter munter seine Interrupts aus und verzweigt IMMER in meine Interrupt-Routine ... Warum ? Stimmt da was am Environment nicht ?! Wer kann mir helfen ? Besten Dank schon mal UBoot-Stocki .include "tn15def.inc" .org 0x000 ; Programm kommt an Anfang von PROM .def temp = r16 ; temporäres Register definieren .def led = r17 initint: rjmp init ; Reset handler reti ; IRQ0 handler rjmp pinchg ; Pin change handler reti ; Timer1 compare match reti ; Timer1 overflow handler reti ; Timer0 overflow handler reti ; EEPROM Ready handler reti ; Analog Comparator handler reti ; ADC Conversion Handler init: ldi temp, 0b11101111 out DDRB, temp ; Port PB3 als Ausgang, PB4 Eingang ldi led, 1 ; LED initialisieren ldi temp, 0b00100000 out GIMSK, temp ; Pin-Change Interrupt enable sei ; Interrupts freigeben rjmp main ; Programmstart pinchg: in temp, PORTB andi temp, 0b00010000 ; vergleicht ob BIT PB4 gesetzt ist brne pinend ... hier soll was passieren ... pinend: reti main: ; Hauptprogramm rjmp main
Böser Fehler: in temp, PORTB ;falsch !!! richtig: in temp, PINB hab ich vorher auch überlesen
Hi Mikki, vielen Dank für den TIP. Das war aber nur die halbe Miete ;-) Offensichtlich setzt der PIN-Change-Interrupt voraus, daß der Eingang nicht offen ist. Wenn man als die Pull-Ups des Ports setzt gehts sofort !!! Steht das irgendwo ? Habs nur durch Zufall entdeckt ... Gruß UBoot-Stocki
Offene Eingänge sind undefiniert, steht aber so auch in "fast" jedem Datenblatt!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.