Forum: Mikrocontroller und Digitale Elektronik ATMega8: Pinabfrage nach ext. Interrupt


von Thomas_v2.1 (Gast)


Lesenswert?

Hallo,
ich mache gerade mein erstes Projekt mit einem ATMega8 und habe da grad
ein Problem:
Ich habe einen Schalter an GND mit Pull-Up Widerstand 10k an + an den
INT1-Pin des Controllers angeschlossen. Den Interrupt habe ich auf
fallende Flanke konfiguriert. In dieser Interrupt-Routine macht der µC
etwas anderes, bis der Schalter wieder geöffnet ist.
Bei Betätigung des Schalters komme ich auch in meinen Interrupt, nur
leider nicht wieder heraus. Komischerweise funktioniert das im
AVR-Simulator korrekt.
Hier mal die Auszüge aus meinem Programm:

  ldi temp, 0xf0    ; PD0-PD3 als Eingänge
  out DDRD, temp

; Interrupt-Routine
isr_ext1:
  cli  ; Interrupts ausschalten
loop:
  sbic PORTD, 3  ; wenn Schalter geöffnet, Routine verlassen
  rjmp ende_isr
 ...was anderes machen...
  rjmp loop
ende_isr:
  reti

Der Schalter müsste natürlich noch entprellt werden, aber selbst so
komme ich aus dem Interrupt nicht mehr raus. Hab ich was übersehen?

Danke,
Thomas

von Wolle (Gast)


Lesenswert?

ersetze mal sbic PORTD, 3
durch sbi*s* PORTD ,3

Du fragst auf gelöschtes Bit - also "0"(Taste gedrückt) - ab, willst
aber bei "1"(Taste losgelassen) zum RETI.

von Wolle (Gast)


Lesenswert?

Quatsch !! (ist schon früh)

Weiß jetzt auch nicht mehr...............

von dave (Gast)


Lesenswert?

kannste noch etwas mehr quelltext von dir geben? inits und irq-vectors
und soviel du geben willst ;)

das cli kannste weglassen.. bei einer isr wird das i-flag immer
gelöscht...

dave

von dave (Gast)


Lesenswert?

LOL....

==> noch nen fehler: das register ist PINd und nicht PORTd... PORTd
==> PORTd ist eigentlich da immer 0... kannste lange probieren

bei aktivierten eingängen kannste ne 1 in das port-register schreiben
und dann werden die pullups aktiviert... also... mach als init:

  ldi temp, 0xf0    ; PD0-PD3 als Eingänge
  out DDRD, temp
  ldi temp, 0x0f    ; pullups für eingänge aktiviern
  out PORTD, temp

und:
  sbic PIND, 3  ; wenn Schalter geöffnet, Routine verlassen
  rjmp ende_isr

von Thomas_v2.1 (Gast)


Lesenswert?

Aua danke, da hatte ich aber was auf den Augen...
Auf jedenfall funktioniert es mit dem PIND bei den Eingängen jetzt.
Bin halt etwas 8051 verwöhnt denn da gibt es diese Unterscheidung
zwischen Ein- und Ausgabe ja nicht. Aber so hat halt jeder Controller
seine Vor und Nachteile.

Thomas

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.