mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik INT0 "dauernutzung"


Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,
ich programmiere gerade nen atmega8-16 und habe mich mit dem thema 
interrupt näher befasst. leider konnte ich nicht herausfinden, ob eine 
dauernutzung möglich ist. ich wollte es so einstellen, dass bei 
low-pegel ausgelöst wird. dann beginnt das unterprogramm und schaltet 
einen port auf eins, wärend der interrupt abgearbeitet wird kann ja nich 
nochmal ausgelöst werden. wichtig wäre, das nach dem reti-befehl also 
dem ende des unterprogramms immer wieder das interrupt ausgelöst wird so 
lange INT0 den low-pegel hat.

kann man die interrupts überhaupt auf diese weise nutzen? und würde dann 
auch immer wieder ausgelöst wenn INT0 auf low ist?

mfg hannes

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ebendies nennt sich "pegelgetriggerter Interrupt" (level triggered). Im 
Unterschied zum flankengetriggerten Interrupt (edge triggered).

Autor: LuXXuS 909 (aichn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst doch nach dem Aufruf in ner Schleife verbleiben, die den Pin 
pollt und das IFG erst löschen, wenn der Pin high ist.

Gedacht ist der Interrupt dafür nicht, aber kannste doch machen, klar, 
wieso nicht.

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ist es kein problem das so zu machen? ^^

Autor: Markus J. (markusj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt schrieb:
>When the external interrupt is enabled and is configured as level triggered,
>the interrupt will trigger as long as the pin is held low.

Ist doch eindeutig, oder? Der Interrupt wird solange aufgerufen, wie der 
Pegel Low ist.

mfG
Markus

Autor: LuXXuS 909 (aichn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Exht? Sowas gibts bei meinen MSP430ern nicht, glaub ich...zumindest noch 
nicht gesehen im Datenblatt.

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die sache ist das der controller die ganze zeit mit auswerten 
beschäftigt ist und das unterprogramm ohne umweg und so lange INT0 low 
ist ausgeführt werden soll. halt etwas zeitkritisch ^^

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah ok, danke markus ^^
ich glaube deine antwort trifft genau auf mein problem zu

Autor: LuXXuS 909 (aichn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, wenn der uC am Ende kurz nachguckt, ob der Pin immernohc low 
ist...damit verliert der nicht viel Zeit. Aber wenn es den 
pegelgetriggerten Interrupt gibt, ist der zweifelsfrei die bessere Wahl, 
klar!

Autor: Markus J. (markusj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dennis E. schrieb:
> Exht? Sowas gibts bei meinen MSP430ern nicht, glaub ich...zumindest noch
> nicht gesehen im Datenblatt.

Daher gehts ja hier auch um nen ATMega8 ...

@Hannes: Vermutlich bekommst du eine höhere Bearbeitungsfrequenz, wenn 
du innerhalb der ISR eine Schleife baust, die den Pin manuell auswertet. 
Eine ISR bringt einen u.U. beachtlichen Overhead mit sich und verbrät 
locker acht oder mehr Zyklen ohne eine Zeile "echten" Code ausgeführt zu 
haben.
Ein einfacher Test auf ein gesetztes Bit sollte da deutlich 
effektiver/schneller sein.

mfG
Markus

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also wäre so schneller:

INT0_handler:

loop:    sbic PIND, 2

         rjmp ende

         sbi PORTB, 0

         rjmp loop

ende:    cbi PORTB, 0

         reti

danke nochmal ^^

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes schrieb:
> also wäre so schneller:

Was weißt du?
Du weißt, dass bei Betreten der ISR die Leitung auf Low ist. Das muss so 
sein, sonst wäre die ISR nie betreten worden

D.h. du kannst auf jeden Fall deine Kontrolleitung ebenfalls auf low 
ziehen.

und dann warten bis der Eingang wieder auf High geht

Autor: Markus J. (markusj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde die Reihenfolge etwas ändern, aber prinzipiell: Ja.

Eine Fußschleife macht imho mehr Sinn als die Prüfung auf das gesetzte 
Bit beim Interrupt-Eintritt.
(Hochsprachen-Äquivalent: statt while {foo} ein do {foo} while)

mfG
Markus

Autor: LuXXuS 909 (aichn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus J. schrieb:
> Daher gehts ja hier auch um nen ATMega8 ...

Man darf hier auch nichts mal so einwerfen, kann das sein?!

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stimmt so is einfacher, danke ^^

INT0_handler:

loop:    sbi PORTB, 0

         sbic PIND, 2

         rjmp loop

         cbi PORTB, 0

         reti

Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah, muss dann natürlich "sbis PIND, 2" heißen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes schrieb:
> stimmt so is einfacher, danke ^^
>
> INT0_handler:
>
> loop:    sbi PORTB, 0
>
>          sbic PIND, 2
>
>          rjmp loop
>
>          cbi PORTB, 0
>
>          reti

Es reicht völlig, wenn du den Pin nur einmal auf 1 stellst

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.