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.