Forum: Mikrocontroller und Digitale Elektronik Minimale Dauer für ext. AVR Interrupt


von Dennis (Gast)


Lesenswert?

Hallo zusammen,

ich habe eine (vermutlich) recht simple Frage, zu der ich im Datenblatt 
des ATMEGA16 nichts gefunden habe:

Wie lange muss ein high Signal vorhanden sein, damit ein externer 
Interrupt ausgelöst wird, wenn dieser auf 'rising edge' konfiguriert 
ist?

lg
Dennis

von Dietrich L. (dietrichl)


Lesenswert?

Dennis schrieb:
> Wie lange muss ein high Signal vorhanden sein, damit ein externer
> Interrupt ausgelöst wird, wenn dieser auf 'rising edge' konfiguriert
> ist?

"Note that recognition of falling or rising edge interrupts on INT0 and 
INT1 requires the presence of an I/O clock, described in “Clock Systems 
and their Distribution” on page 24."

von Dennis (Gast)


Lesenswert?

Soll heißen, das externe Signal muss eine (oder eine halbe?) 
clock-Periode anliegen?

von Carl D. (jcw2)


Lesenswert?

Kann leider auch nichts finden, aber eventuell kann man die PCINTn 
Diagramme aus neueren AVR's als Richtwert nehmen: 3 Clocks oder 375ns 
bei 8 MHz. Oder eben: messen!

von Georg G. (df2au)


Lesenswert?

Datenblatt, externe Interrupts

Table 36. Asynchronous External Interrupt Characteristics
Symbol Parameter Condition Min Typ Max Units
tINT
Minimum pulse width for
asynchronous external interrupt
50 ns

von Carl D. (jcw2)


Lesenswert?

Aber nur INT2: async, also ohne Clock im "Tiefstsachlaf", 50ns minimal

von Dietrich L. (dietrichl)


Lesenswert?

Dietrich L. schrieb:
> "Note that recognition of falling or rising edge interrupts on INT0 and
> INT1 requires the presence of an I/O clock, described in “Clock Systems
> and their Distribution” on page 24."

Ergänzung:
Quelle:
http://www.atmel.com/images/atmel-8154-8-bit-avr-atmega16a_datasheet.pdf
Kapitel 13. (Seite 66)

Dennis schrieb:
> Soll heißen, das externe Signal muss eine (oder eine halbe?)
> clock-Periode anliegen?

Ich interpretiere den Text als eine Clock-Periode.

Gruß Dietrich

von Rolf M. (rmagnus)


Lesenswert?

Dietrich L. schrieb:
> Ergänzung:
> Quelle:
> http://www.atmel.com/images/atmel-8154-8-bit-avr-atmega16a_datasheet.pdf
> Kapitel 13. (Seite 66)
>
> Dennis schrieb:
>> Soll heißen, das externe Signal muss eine (oder eine halbe?)
>> clock-Periode anliegen?
>
> Ich interpretiere den Text als eine Clock-Periode.

Ich interpretiere ihn so, dass ein Takt anliegen muss, damit die 
Flankenerkennung überhaupt funktioniert. Wie lang ein Impuls sein muss, 
damit er noch erkannt wird, steht da erstmal nicht.

von c-hater (Gast)


Lesenswert?

Rolf M. schrieb:

> Ich interpretiere ihn so, dass ein Takt anliegen muss, damit die
> Flankenerkennung überhaupt funktioniert.

Und das ist auch korrekt für INT0 und INT1 eines ATmega16. Es ist aber 
nicht korrekt für INT2. Der funktioniert asynchron.

> Wie lang ein Impuls sein muss,
> damit er noch erkannt wird, steht da erstmal nicht.

Das geben wichtige Grundgesetze der Informatik zumindest als Grenzwert 
vor. Abtastheorem. D.h.: die Untergrenze für eine zuverlässige Erkennung 
einer Flanke ist natürlich (etwas über) eine Periode der Abtastfrequenz. 
Und genau so steht es (vermutlich nicht ganz zufällig) auch im DB, 
identisches Originalzitat von Seite 68 (INT1) und 69 (INT0):

> If edge or toggle interrupt is selected, pulses that last longer than
> one clock period will generate an interrupt.

Für level-triggered hingegen:

> ...the level must be held until the completion of the currently
> executing instruction to generate an interrupt.

Oder anders ausgedrückt: Da die längsten Instruktionen eines Mega16 
(ret/reti) vier Takte lang sind: mindestens vier Takte.

Aber, wie oben schon gesagt: für INT2 läuft der Hase völlig anders. Der 
ist in seinem Verhalten eher mit den PCINT moderner AVRs zu vergleichen. 
Aber wie der Zufall so will, hat sich auch hier Atmel zu einer konkreten 
Aussage hinreißen lassen, nämlich in Tabelle 36 auf Seite 69 des DB:

     Typ Units
tINT 50  ns

@Dennis: Mein Gott, wo zum Teufel ist das Problem, einfach mal die zwei 
relevanten Seiten des DB SELBER zu lesen? Da steht doch ganz 
offensichtlich alles sehr eindeutig drin. Die Ausrede "nicht gefunden" 
lasse ich nicht gelten. Das ganze Kapitel zu den externen Interrupts ist 
beim Mega16 nur ganze drei Seiten lang. Du warst einfach zu faul, den 
Kram zu lesen. So sieht's aus!

von Vollkommen Entspannter (Gast)


Lesenswert?

c-hater schrieb:
> @Dennis: Mein Gott, wo zum Teufel ist das Problem, einfach mal die zwei
> relevanten Seiten des DB SELBER zu lesen? Da steht doch ganz
> offensichtlich alles sehr eindeutig drin. Die Ausrede "nicht gefunden"
> lasse ich nicht gelten. Das ganze Kapitel zu den externen Interrupts ist
> beim Mega16 nur ganze drei Seiten lang. Du warst einfach zu faul, den
> Kram zu lesen. So sieht's aus!

Diesen Absatz hättest nicht schreiben müssen, weil er:
-Niemandem hilft
-Du damit offenbar (wie so oft) Stunk provozieren willst
-Herauskehren möchtest, daß Du eben doch der Größte bist

Das aber ist Dir in unzähligen Beiträgen bis heute nicht gelungen. Laß 
es gut sein..

von felt (Gast)


Lesenswert?

Vollkommen Entspannter schrieb:
> c-hater schrieb:
>> @Dennis: Mein Gott, wo zum Teufel ist das Problem, einfach mal die zwei
>> ...
>
> Diesen Absatz hättest nicht schreiben müssen, weil er:
> -Niemandem hilft
> -Du damit offenbar (wie so oft) Stunk provozieren willst
> -Herauskehren möchtest, daß Du eben doch der Größte bist
>
> Das aber ist Dir in unzähligen Beiträgen bis heute nicht gelungen. Laß
> es gut sein..

@Vollkommen Entspannter:
Das alles hat jetzt niemandem geholfen
Hast dich wohl provozieren lassen
Um im Datenblatt zu lesen muß man nicht groß sein.

von Sebastian S. (amateur)


Lesenswert?

Im IC gibt es keinen versteckten, höheren Takt.

Also muss auch die Erkennung diesem "Rhythmus" folgen.

Da das Ganze auch noch Asynchron (klar: von außen) erfolgen soll, sollte 
der Zeitpunkt für die, im Manual auftauchenden, 50 ns auch nicht egal 
sein.

Meine Rechnung geht daher in Richtung: 1 Programmzyklus plus die 50 
nanu. Und mehr.

Ich bin mir aber nicht sicher, dass die Nanosekundenzählerei soll, wenn 
danach eine (relativ) langatmige Auswertung erfolgen muss. Es sei denn 
die Erkennung ist Selbstzweck.

von c-hater (Gast)


Lesenswert?

Vollkommen Entspannter schrieb:

> Diesen Absatz hättest nicht schreiben müssen, weil er:
> -Niemandem hilft

Ich hoffe doch...

> -Herauskehren möchtest, daß Du eben doch der Größte bist

Weil ich ein Datenblatt lesen kann? Das ist doch vollkommen lächerlich. 
Ich bin ganz sicher, dass es hier noch sehr, sehr viele andere Leute 
gibt, die das ebenfalls können (und die es eben auch tun!).

Und all diese Leute haben absolut kein Verständnis für Faule, die es 
nicht tun, obwohl es ihnen problemlos möglich wäre...

von c-hater (Gast)


Lesenswert?

Sebastian S. schrieb:

> Im IC gibt es keinen versteckten, höheren Takt.

Falsch. Das gilt nur für alle synchronen Baugruppen. Beim Mega16 ist 
INT2 ist aber gerade dies nicht. Hier wird der externe Signalwechsel zum 
"Takt".

Das gilt ganz generell für alle asynchrone Baugruppen. Beim Mega16 z.B. 
auch für den Timer2 mit externer Taktquelle. Bei anderen AVRs gibt es 
teilweise noch mehr solcher asynchronen Baugruppen. Prominentestes 
Beispiel sind natürlich die externen PCINT-Interrupts.

Mir scheint, du hast den wirklichen Bedeutungsgehalt von "asynchron" 
nicht verstanden...

> Da das Ganze auch noch Asynchron (klar: von außen) erfolgen soll, sollte
> der Zeitpunkt für die, im Manual auftauchenden, 50 ns auch nicht egal
> sein.

Ist er aber. Die 50ns sind hier nur dafür verantwortlich, die 
Zeitkonstanten von Gatterlaufzeiten zu überwinden. Sie haben aber rein 
garnix mit dem Takt der synchronen Taktdomäne zu schaffen. Was man im 
Übrigen schon mit minimalen Fähigkeiten zur logischen Deduktion allein 
daraus entnehmen kann, das sie eben (deutlich abweichend) NICHT in 
irgendeiner Form relativ zu diesem Takt angegeben werden...

von Cyblord -. (cyblord)


Lesenswert?

c-hater schrieb:

> Mir scheint, du hast den wirklichen Bedeutungsgehalt von "asynchron"
> nicht verstanden...

Das sieht man leider an seinem Post sehr deutlich. Nach dem Motto: "Ich 
lese zwar asyncron, allein mir fehlt der Glaube".

Doch wahrlich ich sage dir: "Fürchte dich nicht, glaube nur".

von Axel S. (a-za-z0-9)


Lesenswert?

Rolf M. schrieb:
>
> Ich interpretiere ihn so, dass ein Takt anliegen muss, damit die
> Flankenerkennung überhaupt funktioniert. Wie lang ein Impuls sein muss,
> damit er noch erkannt wird, steht da erstmal nicht.

Natürlich steht das da. Auf Seite 66 kurz vor Tabelle 31:

"The value on the INT1 pin is sampled before detecting edges. If edge or 
toggle interrupt is selected, pulses that last longer than one clock 
period will generate an interrupt. Shorter pulses are not guaranteed to 
generate an interrupt"

Für die Interruptauslösung bei steigender Flanke muß der Pin also für 
mindestens eine Periode des IO-Clocks auf H liegen damit garantiert ein 
Interrupt ausgelöst wird. Kürzere Impulse können einen Interrupt 
auslösen, es wird aber nicht garantiert.

Schaltungstechnisch wird das einfach so aussehen, daß da zwei in Serie 
geschaltete D-FF an dem Pin hängen, die mit clk_IO getaktet sind. Wenn 
zum Zeitpunkt N das erste FF ein H enthält und das zweite ein L, dann 
erkennt die Logik eine steigende Flanke. An verschiedenen anderen 
Stellen (z.B. bei Input-Capture) gibt es sogar ein diesbezügliches 
Prinzipschaltbild.

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.