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
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."
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!
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
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
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.
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!
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..
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.
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.
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...
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...
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".
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.