Controller für mehrere Interrupts

#3079462
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.
Gast #3079560
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.
#3079595
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.
Gast #3079599
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.
Gast #3080330
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.
(Firma: guloshop.de) #3080547
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. :-)
#3080568
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. 
:-)
Gast #3080662
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.
Gast #3080739
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.
Gast #3080818
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 :-)
Gast #3080885
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?
#3080983
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.
Gast #3081116
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.
Gast #3081248
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
Gast #3081254
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.
#3081340
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren