Forum: Mikrocontroller und Digitale Elektronik Controller für mehrere Interrupts


von knut (Gast)


Lesenswert?

Hallo an alle,
ich bräuchte einen µC der aus einer Interrupt routine auch rausspringt 
je nach Priorität.
Kennt jemand einen der dafür geeignet ist.


Grüße Knut

von Teo D. (teoderix)


Lesenswert?

Bau ne Feder in den Sockel, dann Springt er vielleicht raus :)

Etwas mehr Mühe bei Deiner Problemdarstellung solltest Du Dir schon 
geben. Es ist schließlich in Deinem Interesse das man versteht was Du 
willst!

Ich kann zwar vermuten was Du willst aber auf Rätselraten hab ich 
keinen Bock.

von knut (Gast)


Lesenswert?

Okay Sry ich versuche es noch mal.

Ich möchte mit einem µC einmal eine Zeit über den Timer festlegen und 
während der von dem Timer bestimmten Zeit Impulse einer Frequenzs 
messen.

Problematisch ist in meiner Überlegung gewessen. Das ich für den Timer 
nach dem Überlauf eine Var hochzähle, diese Vergleiche und mindestens 
einen Sprung.
Somit habe ich 3 Befehle und Mindestens 3 Taktzyklen bis diese Routine 
abgearbeitet ist.
Es kann ja aber passieren das währenddessen durch die Frequenz eine 
Interrupt ausgelöst wird, ist ja auch erstmal kein Problem wird dann ja 
abgearbeitet wenn die Timerroutine fertig ist. Das problem ist hier dann 
wenn während dem abarbeitetn der Frequenz routine (1 Taktzyklus)noch 
einmal der selbe Interrupt ausgelöst wird dieser geht dann ja verloren. 
Nun ist meine Frage gibt es µC die hier den Interrupt auch noch 
abarbeiten können also irgend wie zwischen Speichern oder gibts sowas 
nicht.
Die Frequenz der zumessenden Frequenz soll max. bei 20MHz liegen.

von (prx) A. K. (prx)


Lesenswert?

Ich habe zwar immer noch Schwierigkeiten, deinen Text zu verstehen, aber 
vielleicht hilft dies: Timer der STM32 Familie lassen sich intern so 
koppeln, dass der Ablauf eines Timers einen anderen Timer starten bzw. 
stoppen lässt. Damit sollte sich über einen Timer ein exaktes Fenster 
bilden lassen, in dem ein anderer Timer externe Impulse zählt.

von M. N. (Gast)


Lesenswert?

Das wird so nichts!

Was ich verstehe: Du möchtest eine Frequenz messen, die max. 20MHz 
betragen kann.
Wie genau soll gemessen werden und wie schnell?
Wo sollen die Meßergebnisse abgelegt/angezeigt werden?

Wenn Du diese Fragen für Dich beantworten kannst, suche hier im Forum 
nach Frequenzmessung und nicht nach xyz-Controllern.
Da solltest Du fündig werden.

von knut (Gast)


Lesenswert?

Da bin ich auch schon fündig geworden! Ist aber nicht das was ich gerne 
machen würde.  Die Genauigkeit soll 0,001% betragen
das Ergebnis soll über USART an einem PC weitergegeben werden der damit 
weiterarbeitet, betrachtet ob die Frequenz in einem +/-1% genauen 
Bereich um den Vorgabewert liegt.
Ich würde gerne auf die externen Bauelemente wie Zähler, Frequenzteiler 
versichtetn und das ganze nur über einen µC realisieren.
Ich hatte gedacht vielleich gibt es einen µC der das kann obwohl er mit 
einer Frequenz von 20MHz getaktet ist.

Aber trotzdem danke und ich bitte um Entschuldigung für meine 
undeutliche Formulierung.

von ... (Gast)


Lesenswert?

Einige PIC Mikrocontroller haben Zähler, die unabhängig vom 
Prozessortakt zählen. Ich denke nach sowas solltest du suchen.

von ... (Gast)


Lesenswert?

Der PIC24FJ64GA004 hat zum Beispiel einen asynchronen counter.

von Spess53 (Gast)


Lesenswert?

Hi

>Die Genauigkeit soll 0,001% betragen

>Ich hatte gedacht vielleich gibt es einen µC der das kann obwohl er mit
>einer Frequenz von 20MHz getaktet ist.

Denk weiter.

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Der ganze Ansatz klingt falsch.

> ..... einen asynchronen counter.

Das ist der richtige Ansatz.

0.001% von 20 Mhz sind 200 Schwingungen. Mit einem asychronen Counter 
überhaupt kein Problem.

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


Lesenswert?

knut schrieb:
> Die Frequenz der zumessenden Frequenz soll max. bei 20MHz liegen.

Und minimal? Kann ja auch wichtig sein, weil man zusätzlich dann den 
Abstand zwischen den Nulldurchgängen messen muss, wenn die Frequenz sehr 
niedrig ist.

> das Ergebnis soll über USART an einem PC weitergegeben werden der damit
> weiterarbeitet, betrachtet ob die Frequenz in einem +/-1% genauen
> Bereich um den Vorgabewert liegt.

Warum nicht den Mikrocontroller gleich selber bestimmen lassen, ob der 
Frequenzbereich eingehalten wird? Aber ok, über den PC geht das sicher 
auch. Ich würde die Daten nicht über USART, sondern über USB senden, 
aber das ist auch wieder Geschmackssache. :-)

von Bernhard S. (b_spitzer)


Lesenswert?

Vorteiler:100 davorschalten, wahlweise mit Multiplexer direkt auf den 
Zähler, wenn die Frequenz zu gering wird.
Interruptpriorität kennen alle ollen 8051-Derivate (4 Prio-Level) oder 
auch die C167 (imho 16 Prio-Level). Ein Controller, der nicht mindestens 
2 Prio-Level kennt, ist nur für Kaffeemaschinen und Toaster tauglich. 
:-)

von ah. (Gast)


Lesenswert?

>Die Genauigkeit soll 0,001% betragen.

Dh erstens : mindestens 100'000 Scwingungen zaehlen, eher das zehnfache. 
Dh das wird eine langsame sache.
Zweitens : Der Quarz, mit dem verglichen wird sollte aber auch ein 
Stueck besser als 10ppm sein, also einfach ein Controller Quarz ist 
nicht.

von knut (Gast)


Lesenswert?

Hallo
den Pic schau ich mir gleich mal an.
Als Quarz wollte ich ein TXCO verwenden dessen Genauigkeit ist dafür 
geeignet.

Markus Weber schrieb:
> Warum nicht den Mikrocontroller gleich selber bestimmen lassen, ob der
> Frequenzbereich eingehalten wird? Aber ok, über den PC geht das sicher
> auch. Ich würde die Daten nicht über USART, sondern über USB senden,
> aber das ist auch wieder Geschmackssache. :-)

Das sollte auch so gemacht werden ist der Frequenzbereich eingehalten 
übergibt er die Daten an den PC für ein Protokol.
Die USART geht auf einen USB Treiber hatte ich vergessen.

Danke für das viele Feedback.

von M. N. (Gast)


Lesenswert?

Wenn ich Deine Zahlen umrechne, brauchst Du 5-stellige Ergebnisse. Wie 
schnell schreibst Du zwar nicht, es gibt aber eine Grenze, die mit 
einfachen Mitteln nicht überschritten werden kann.

Wie A.K. oben schrieb, eignen sich STM32 Prozessoren, die schnelle 
interne Timer bieten.
Eine Möglichkeit wäre, ein Discovery-Board STM32F407 zu nehmen. Wie man 
damit einen reziproken Frequenzzähler aufbauen kann, hatte ich hier 
gezeigt: Beitrag "reziproker Frequenzzähler mit STM32F4Discovery"
An Stelle des TFTs kann auch ein 2x16 LC-Display verwendet werden, oder 
man läßt die Anzeige einfach ganz weg.
Mit Optimierung kommt man auf ca. 1600 Messungen/s bei der gewünschten 
Auflösung. Die ser. Datenausgabe wäre noch zu ergänzen (RS232 oder USB).

Wenn Du eine schnelle, einfache Lösung sucht, die zwar 'nur' 200 
Messungen/s schafft, schlage ich Dir eine Schaltung mit ATtiny2313/4313 
vor. Dieser braucht noch einen einfachen 8-Bit-Vorteiler 
(74HC393/74HC4040) und einen MAX232 (o.ä.) zur ser. Ausgabe. Das 
Programm dazu findest Du im Netz: 
http://www.mino-elektronik.de/download/fmeter20.zip
Die Schaltung und die Beschreibung dazu gibt es auch: 
http://www.mino-elektronik.de/fmeter/fmeter.htm
Und wenn Du auf Luxus stehst, gibt es bessere Programme und Schaltungen 
für ATmega: http://www.mino-elektronik.de/fmeter/neue_versionen.htm

Ich hoffe, Du findest etwas Passendes.
Und falls Du eine Schaltung mit 6-stell. LED-Anzeige suchst, die ist in 
Arbeit :-)

von knut (Gast)


Lesenswert?

Mein Ziel ist es ja auf externe Komponeten zuversichten die Zeit spielt 
hier keine größere Rolle, kann ruhig bis 1s/messung dauern, da nach der 
Messung erst eine Umprogrammierung durchgeführt wird.
Könnte ich nicht über den Analogkomparator des Atmega168 den 
Timer/Counter1 hochzählen?
Dann würde meine Genauigkeit zwar auf 0,0017259% (mit Tempdrift des TXCO 
und Alterung nach einem Jahr) sinken, dass wäre aber auch genau genug.
Voraussetzung ist dafür natürlich das ich den Timmer voll ausnutzen 
würde.
Geht das?

von knut (Gast)


Lesenswert?

knut schrieb:
> die Zeit spielt
> hier keine größere Rolle, kann ruhig bis 1s/messung dauern,

oder länger.

von M. N. (Gast)


Lesenswert?

knut schrieb:
> Mein Ziel ist es ja auf externe Komponeten zuversichten

Dann mußt Du einen speziellen PIC-xyz oder einen STM32-xyz nehmen.
Ein Atmega schafft das nicht. Siehe Datenblatt: "External Clock Source"

von knut (Gast)


Lesenswert?

M. N. schrieb:
> Ein Atmega schafft das nicht. Siehe Datenblatt: "External Clock Source"

Auch wenn die Frequenz unter 20MHz bleibt?

von knut (Gast)


Lesenswert?

Each half period of the external clock applied must be longer than one 
system clock cycle to ensure correct sampling.

grad gefunden also darf die zu Messende Frequenz >10MHz werden

von knut (Gast)


Lesenswert?

knut schrieb:
> grad gefunden also darf die zu Messende Frequenz >10MHz werden

da fehlt ein nicht sry. die Frequenz darf nicht >10MHz werden.

von Peter D. (peda)


Lesenswert?

knut schrieb:
> grad gefunden also darf die zu Messende Frequenz >10MHz werden

Ist kein großes Problem, nimm einfach einen Vorteiler.
Z.B. mit dem SN74LV393 kannst Du bis 150MHz messen.


Bernhard Spitzer schrieb:
> Ein Controller, der nicht mindestens
> 2 Prio-Level kennt, ist nur für Kaffeemaschinen und Toaster tauglich.
> :-)

Wer erzählt denn solche Gruselmärchen?
Den Vorteiler auf den ICP-Eingang und Du kannst zyklengenau messen, 
unabhängig von der Interruptlatenz.
Ich geb allerdings zu, Prioritäten machen manche Aufgaben deutlich 
einfacher.

Wichtig für die geforderte Genauigkeit ist auch, daß Du mindestens auch 
diese Auflösung des Zählwertes hast.
Also bei 20MHz CPU-Takt und 10ppm eine Meßzeit >= 5ms.

von knut (Gast)


Lesenswert?

Durch das herrunter setzen verliere ich doch aber Impulse!
Das verfälscht dann mein Messergebnis oder sehe ich das Falsch. Gut, bei 
einer Teilung von 2:1 ist das nicht sehr ausschlaggebend aber es ist 
dennoch der Fall.

von M. N. (Gast)


Lesenswert?

knut schrieb:
> Das verfälscht dann mein Messergebnis oder sehe ich das Falsch.

Das siehst Du falsch. Lektüre hatte ich Dir oben genannt, und will es 
daher auch nicht weiter erläutern.

von knut (Gast)


Lesenswert?

Okay Falsch ausgedrückt sry die Genauigkeit leidet drunter, muss halt 
die Messdauer angepasst werden.
2:1=2Hz anstat 1Hz
4:1=4Hz
8:1=8Hz
usw.

Ich werde dann in der Software nach dem Überlauf des Timers eine Var 
hochzählen und somit komme ich ja auch, trotz 16Bit oder 8Bit Timer, auf 
die Genauigkeit. Das hilf mir schon sehr weiter danke an alle

von knut (Gast)


Lesenswert?

knut schrieb:
> Ich werde dann in der Software nach dem Überlauf des Timers eine Var
> hochzählen und somit komme ich ja auch, trotz 16Bit oder 8Bit Timer, auf
> die Genauigkeit. Das hilf mir schon sehr weiter danke an alle

Will mit mehr gezählten Impulsen den +/-1 Fehler so gering wie möglich 
halten.

von Peter D. (peda)


Lesenswert?

knut schrieb:
> Das verfälscht dann mein Messergebnis oder sehe ich das Falsch.

Ja, das siehst Du falsch.
Der Faktor n beeinflußt die Auflösung nicht, da durch das Input Capture 
ja exakt ganzzahlige Perioden erfaßt werden.
Der Vorteiler teilt quasi exakt durch 256,0000000000000000.
Das ergibt somit keinen zusätzlichen Fehler.

Wichtig ist allein, daß die Zeitmessung für n Perioden die nötige 
Auflösung hat.

Und natürlich muß die nachfolgende Berechnung auch die nötige 
Stellenzahl haben. Bei Compilern, die kein double unterstützen, muß man 
daher in uint64_t rechnen.

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.