Forum: Mikrocontroller und Digitale Elektronik Atmega 64 Interrupt Reaktionszeit?


von Kuki (Gast)


Lesenswert?

Hallo,
kann mir vieleicht einer sagen, wie lange die Reaktion auf einen 
Interrupt ist? ich hab´s im Datenblatt nicht gefunden.
(Atmega 64 @ 16MHz)
ich hab mim Oszi mal gemessen, des waren so um die 500ns des erscheint 
mir etwas viel kann das sein?

Danke im Vorraus

von Kuki (Gast)


Lesenswert?

habs soeben gefunden es sind 437,5ns(+evtl. zeit in der ein multi-cycle 
instruktion zuende ausgeführt wir).
oder 4clk für bis in die Interruptroutine, 3 clk für den sprung, und der 
zuvorausgeführte befehl wird zuende ausgeführt.

von Roadrunner (Gast)


Lesenswert?

Moin!
Mir fällt da nur zum ATM8 bzw. 16 (dürfte beim 64 auch so sein) ein, 
dass es 4 Taktzyklen dauert, bis der erste Befehl der Interruptroutine 
ausgeführt wird. In dieser Zeit muss die MCU den PC mit der richtigen 
Sprungadresse des betreffenden Interrupts laden.
Soweit ich mich erinnern kann, stand das im Kapitel zum 
Interrupthandling (liegt ja auch irgendwie auf der Hand).

Gruß Roadrunner

von Benedikt K. (benedikt)


Lesenswert?

Interrupt Response Time The interrupt execution response for all the 
enabled AVR interrupts is four clock cycles
minimum. After four clock cycles the program vector address for the 
actual interrupt
handling routine is executed. During this four clock cycle period, the 
Program Counter is
pushed onto the Stack. The vector is normally a jump to the interrupt 
routine, and this
jump takes three clock cycles. If an interrupt occurs during execution 
of a multi-cycle
instruction, this instruction is completed before the interrupt is 
served. If an interrupt
occurs when the MCU is in sleep mode, the interrupt execution response 
time is
increased by four clock cycles. This increase comes in addition to the 
start-up time from
the selected sleep mode.
A return from an interrupt handling routine takes four clock cycles. 
During these four
clock cycles, the Program Counter (two bytes) is popped back from the 
Stack, the Stack
Pointer is incremented by two, and the I-bit in SREG is set.

Die Reaktionszeit liegt also bei 250ns + Sprung zur Routine, was nochmal 
187ns dauert. Die 500ns kommen also hin.

Der Text steht übrigends etwas versteckt unter AVR CPU Core und nicht 
unter  Interrupts.

von Rolf Magnus (Gast)


Lesenswert?

Zu diesen Reaktionszeiten dazu kommen natürlich noch so Sachen wie 
Register retten. Vor allem das Sichern des SREG braucht schon mindestens 
5 Taktzyklen (push r16, in r16, SREG, push r16). Der Unsicherheitsfaktor 
mit dem Multicycle-Befehl, der noch zuende ausgeführt wird, liegt wohl 
je nach Prozessor bei 3 oder 4 Taktzyklen (die längsten Befehle, wie 
z.B. call brauchen 4 oder 5, wenn also nach dem ersten Takt davon der 
Interrupt kommt, wird noch 3 bzw. 4 gewartet).
Falls der Prozessor beim Auftreten des Interrupt im Idle- oder 
Sleepmodus war, kommt noch die Aufwachzeit und eine zusätzliche 
Verlängerung der Antwortzeit dazu. Ich weiß grad nicht auswendig, 
wieviel das ist.

von Kuki (Gast)


Lesenswert?

danke nochmals
kann mir einer von euch einen controller empfehlen den ich statt dem 
Atmega 64 nehmen könnte? wäre schön wenn die software nicht groß 
umgeändert werden müsste...
und ich sag mal so von der Verarbeitunggeschwindigkeit wäre faktor 10 x 
so schnell wünschenswert.

hab den SX52BD von Parallax im Netz gesehen, habt ihr erfahrungen mit 
diesen?

von Michael (Gast)


Lesenswert?

Google mal nach Atmega64-HS. Der soll angeblich mit 200MHz laufen. Ist 
pin- und funktionskompatibel.

von Hansi (Gast)


Lesenswert?

Muahahahaha....

von Kuki (Gast)


Lesenswert?

von einem Atmega 64 mit 200 MIPS...

von Kuki (Gast)


Lesenswert?

...träum ich auch :-)

von Rolf Magnus (Gast)


Lesenswert?

Interrupt-Antwortzeiten sind immer recht lang. Darf man fragen, warum 
die Reaktionszeit so kurz sein muss?

von Kuki (Gast)


Lesenswert?

wollte auf mit den Interrupts den I2C-Bus mit 400 kHz tracen... da aber 
bei steigender Flanke der CLK innerhalb von 600ns auslesen muß sind die 
500ns an Interrupt-Antwortzeit ziemlich lang...

ich habe mir mal wie oben beschrieben den SX52BD-100 angeschaut, der 
hätte nur 30ns Interruptreaktionszeit... leider habe ich die Hardware 
scho fertig...
werde wohl aber bald auf was schnelleres wie den Atmega64 umsteigen 
müssen, den der ist "etwas" überfordert...

von Der T. (Gast)


Lesenswert?

Alternative Polling?

von Benedikt K. (benedikt)


Lesenswert?

Oder das Hadware I2C Interface verwenden ?

von Kuki (Gast)


Lesenswert?

ja mit polling habs auch scho probiert und hab eine Max. Abtastrate von 
800 kHz aber laut spec ist die "high" zustand vom Clk für min 600 ns 
d.h. ich müßte mit 1600 MHz abtasten... ist glaub ich nicht möglich 
nochmal soviel ausm controller rauszuholen... man bedenke d.h. alle 10 
Clk bei 16MHz den Bus abtasten... in dieser zeit sollten die daten ja 
auch weggeschickt werden...

Nochmals zu Interrupts... wenn ein interrupt ausgelöst wird push der MCT 
den Program Counter... geschieht des im Hintergrund oder ist da der MCT 
dann für meine Befehle blockiert?

von Kuki (Gast)


Lesenswert?

Hardware I2C interface... funktioniert auch nicht, da ich das Interface 
nur als Slave verwenden könnte. Weil der Trace möglichst passiv ablaufen 
sollte!

und der Slave reagiert dann nur auf die Eingespeicherte Adresse...

oder gibt es ein möglichkeit auf das Bus Interface Unit zuzugreifen?

von Benedikt K. (benedikt)


Lesenswert?

Stimmt, das I2C Interface ist zu gut. Bei einfachen AVRs wie dem 
tiny2313 mit USI funktioniert das aber wunderbar. Damit habe ich einen 
einfachen I2C Sniffer realisiert der mir alle Aktivitäten auf dem Bus am 
PC anzeigt.

von Michael (Gast)


Lesenswert?

<<Nochmals zu Interrupts... wenn ein interrupt ausgelöst wird push der 
MCT
den Program Counter... geschieht des im Hintergrund oder ist da der MCT
dann für meine Befehle blockiert?>>

Wie vermutet, war Deine Forderung nach einem schnellem µP nur der 
Ausdruck dafür, daß Du keine Ahnung hast. Wenn Du obige Frage nicht 
selbst beantworten kannst, bringe erst einmal eine LED zum Blinken.

von Kuki (Gast)


Lesenswert?

Das ich nicht so viel Ahnung habe, wie andere hier stimmt !!!
aber seit 2 Jahren verschiedene Controller in ASM zu programieren nenne 
ich nicht unbedingt "keine Ahnung"
das problem ist das jeder MCT anders ist... habe bisher vorallem mit 
welchen mit nem C166 Core zu tun gehabt...
und da ich versuche so wenig wie möglich anzunehmen, wenn nix im 
Datenblatt steht, oder ich es nicht finde, frage ich lieber nach...
so wie ich des sehe, blockiert der Interrupt den MCT für min 435ns das 
ist ziehmlcih lang, aber es könnte auch sein, das des Pushen im 
Hintergrund abläuft..

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.