Forum: Mikrocontroller und Digitale Elektronik Pin Change Interrupt, wie schnell ist dieser


von Ganui K. (Firma: BOSCH) (zmx2000)


Lesenswert?

Hallo

ich nutze einen Pin Change Interrupt um Hall Signale eines Motors zu 
lesen.
Allerdings weiss ich nicht wie schnell so ein Pin Change Interrupt 
arbeitet. Kann er jede Frequenz der Signale erfassen oder hat auch er 
ein Limit?

Mal angenommen ich nutze einen Atmel Controller der einen 10MHz 
Oszillator hat.
Dann ist doch mein Limit 1/10MHz richtig? Oder muss man da anders 
rechnen?

Gruss
Peter

von Der Andere (Gast)


Lesenswert?

Ein Interrupt kann nur ausgeführt werden, wenn die Interrupts 
freigegeben sind. Deine Interruptlatenzzeit kann so groß sein, wie die 
längste Abarbeitungszeit eines (anderen) Codefragments das die 
Interrupts blockiert (Wie z.B. andere Interruptroutinen).
Zusätzlich kommt dann noch die Zeit dazu die der Prozessor brauchst um 
den eigentlichen Interruptcode auszuführen.
Es hängt also von dir, bzw deinem Programm ab wie groß die maximale 
Latenz ist.
Diese Rechnung ist auf jeden Fall unsinnig:

Ganui K. schrieb:
> Mal angenommen ich nutze einen Atmel Controller der einen 10MHz
> Oszillator hat.
> Dann ist doch mein Limit 1/10MHz richtig?

von Georg G. (df2au)


Lesenswert?

Wie in vielen anderen Fällen auch, hilft hier das Datenblatt. Im Kapitel 
über externe Interupts wird das Problem mit den Stromspar Modi erklärt 
(warum muss der Interrupt länger anstehen, wenn der Chip tief schläft). 
Unter Electrical Characteristics findet man weitere Einschränkungen.

Eine allgemein gültige Formel gibt es nicht.

von Hannes L. (hannes)


Lesenswert?

Ganui K. schrieb:
> Oder muss man da anders
> rechnen?

Ja. Der Aufruf eines Interrupts dauert je nach Situation etwa 7 Takte. 
Es wird die angefangene Instruction des Hauptprogramms fertig genacht 
(das ist der variable Teil der Verzögerung), dann wird die 
Rücksprungadresse auf Stack gelegt und die Adresse mit dem Vektor 
aufgerufen. Der Rücksprung dauert dann weitere 3 Takte. Im Datenblatt 
müsstest Du unter dem Stichwort interrupt Response time die Einzelheiten 
dazu finden.

Weitere Verzögerung kommt dazu, wenn die Hochsprache beim Aufruf noch 
Register sichert und wiederherstellt, das sind dann 4 Takte pro Register 
(2 Takte push, 2 Takte pop). Auch spielt es eine Rolle, ob man in ASM 
mit Exklusiv-Registern arbeitet (keine Sicherung nötig) und auch die im 
Int benötigten Variablen in Registern hält (kein LDS/STS nötig), oder ob 
man alles aus dem RAM holen und zurückschaufeln muss (in Hochsprachen 
der Normalfall).

Es gibt also recht viele Dinge zu berücksichtigen, um festzustellen, wie 
schnell ein Interrupt ist.

...

von Oberon (Gast)


Lesenswert?

> Oder muss man da anders rechnen?

Schon einmal ins Datenblatt geschaut?

von Peter D. (peda)


Lesenswert?

Die Eingänge werden mit dem CPU-Takt gelatcht.
Um eine Flanke zu erkennen, muß >1CLK low und >1CLK high anliegen bzw. 
umgekehrt.
Die maximale Eingangsfrequenz ist also <5MHz bei 50% Tastverhältnis und 
CLK_CPU=10MHz.

Siehe auch Figure 9-1. Timing of pin change interrupts.

von m.n. (Gast)


Lesenswert?

Ganui K. schrieb:
> ich nutze einen Pin Change Interrupt um Hall Signale eines Motors zu
> lesen.
> Allerdings weiss ich nicht wie schnell so ein Pin Change Interrupt
> arbeitet.

Dann sag doch einfach, wie schnell Du es brauchst. Ein Hallgeber mit 
einigen 10 kHz sollte kein Problem sein.

von aSma>> (Gast)


Lesenswert?

Servus,
du brauchst ein µC der Encoder Signal auswerten kann ohne dabei die CPU 
zu belasten. Alles andere ist unsinnig oder du lässt den µC Pollen und 
dann aber hat er nur diese Aufgabe...

Bei der Auswertung bzw. schon vorher, ist es wichtig wie das Signal 
aussieht. Ohne ein Skope wirds schwer.

mfg

von Der Andere (Gast)


Lesenswert?

Ganui K. schrieb:
> ich nutze einen Pin Change Interrupt um Hall Signale eines Motors zu
> lesen.

Wobei ich mir jetzt schon überlege was das für ein Motor ist der 100000 
U/s macht. Das wären ja 6.000.000 U/min!

Bei "normalen" Drehzahlen dürfte der Interrupt gerade mal 100 - 1000 mal 
pro Sekunde auftreten. Bei 1000 wären das schon 60000 U/min.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Ganui K. schrieb:
> Mal angenommen ich nutze einen Atmel Controller (...)

Anscheinend noch nicht geklärt, ob es ein AVR, ein ARM oder ein 8051 
ist...?

von Pandur S. (jetztnicht)


Lesenswert?

Erst waere mal interessant was denn gemessen werden soll. Wenn die 
Zustandsaenderung gesucht ist .. Der Pin wechselt und dann steht der 
Interrupt intern an. Dh falls der Interrupt enabled ist. Dann wird die 
gradige Instruktion beendet und die Interrupt funktion angesprungen. 
Dort wird je nachdem erst der Status gesichert. Falls bereits ein 
Interrupt in Verarbeitung ist wird der ohne Hast erst beendet. Dh die 
Interruptantwortzeit hkann sich von vielleicht 3 Clockzycken bis zur 
laengesten Interruptzeit einen anderen Interrupts, plus ein paar cycles 
erstecken.

Falls man an der Frequenz interessiert ist, verwendet man besser den 
Input Capture Interrupt. Bei dem wird auf die Signalflanke hin ein Timer 
gestartet/gestoppt bevor der Interrupt aufgerufen wird, dh das Ereignis 
wird festgehalten, egal wie lange der Controller noch beschaeftigt ist.

von m.n. (Gast)


Lesenswert?

Markus W. schrieb:
> Anscheinend noch nicht geklärt, ob es ein AVR, ein ARM oder ein 8051
> ist...?

Welcher von denen hat denn einen PinChange-Interrupt?

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.