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
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.
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.
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.
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.
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.
Einige PIC Mikrocontroller haben Zähler, die unabhängig vom Prozessortakt zählen. Ich denke nach sowas solltest du suchen.
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
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.
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. :-)
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. :-)
>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.
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.
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 :-)
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?
knut schrieb: > die Zeit spielt > hier keine größere Rolle, kann ruhig bis 1s/messung dauern, oder länger.
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"
M. N. schrieb: > Ein Atmega schafft das nicht. Siehe Datenblatt: "External Clock Source" Auch wenn die Frequenz unter 20MHz bleibt?
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
knut schrieb: > grad gefunden also darf die zu Messende Frequenz >10MHz werden da fehlt ein nicht sry. die Frequenz darf nicht >10MHz werden.
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.
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.