Hallo, sicher kennt so mancher die modernen Frequenzzähler. Die nicht nur mit einer festen Torzeit arbeiten sondern schlau sind und mit kurzen Messzeiten viele Stellen rausholen können. Bei ELV gibt es so ein Teil mit roter LED-Anzeige als Bausatz. Für etwa 50 EUR. Und einen Zähler mit LCD, der genauso schlau arbeitet gibt es auch. Alle mit maskenprogrammierten 80xx-uC's. Leider gibt es den Quellcode nicht dazu. Was also tun, wenn man so eine nette Funktion in seinem AVR benutzen möchte? Selber schreiben? Vielleicht hat das ja schon mal jemand gemacht? Warum das Rad neu erfinden. Vielleicht weiß von Euch jemand, ob es hierzu etwas Brauchbares gibt . . . wäre schön was zu hören. Gruss Matthias
Ich hab sowas mal mit nem AT89C2051 gemacht (0,5Hz ... 125MHz). Ist in C, sollte man also auf nen ATMega8 umstricken können. Anbei Schaltplan und Source. Peter
Und wenn Du etwas für den AVR suchst, vielleicht hift Dir dies: www.mino-elektronik.de/fmeter/fm_software.htm. Leiterplatten dazu gibt es auch noch.
@michael: besten Dank für den tollen Link! Sogar ein Schaltbild ist mit dabei. Sieht fast genauso aus wie das ELV-Teil. @peter: Danke für Deine zip-Datei. Mit den Dateien kann ich etwas anfangen. Vielleicht kannst Du noch ein paar Takte zur Hardware sagen, die Du verwendest . . . ist es auch so ähnlich gelöst wie bei der Schaltung auf www.mino-elektronik.de/fmeter/fm_software.htm ? Matthias
@Michael, Der Schaltplan ist mit dabei (fmeter5.pdf). Es sind einige Unterschiede: Ich verwende eine LED-Anzeige und die Bereichswahl erfolgt automatisch. Auch erfolgen die Messungen ständig aufeinanderfolgend, d.h. bei 1Hz hast Du auch 1 Meßergebnis je Sekunde. Viele andere warten auf die 1. Flanke, starten die Messung und warten auf die nächste Flanke. Dadurch dauert die Messung bei 1Hz aber 2 Sekunden. Der einzige etwas knifflige Programmteil ist das Auslesen der Timer: Die Timer werden ja per Interrupt auf 24Bit kaskadiert. Deshalb muß man beim Auslesen der 3 Bytes immer beachten, daß ein Interrupt genau dazwischen kommen kann. Das wird dann erkannt und das Ergebnis nötigenfalls korrigiert, damit man auch 3 zusammengehörende Bytes hat, d.h. nicht plötzlich 256 oder 65536 Counts fehlen. Peter
@peter: Hast recht. Das pdf hatte ich übersehen. Danke für den Hinweis mit den Timern! Matthias PS: Mit dem Wissen könnte man ja leicht einen tollen Funktionsgenerator selberbauen . . . Wenn man schaut, was solche Sachen heute teilweise so kosten . . .
Hallo, Ich habe ein Problem mit Timer0 ! Timer1 habe ich für Zeitbasis (1 Sek.) benutzt. Über T0 wird Frequenz gezählt (Vorteiler 8 Bit mit 74F393). Die Routine sieht so aus: timer0: adiw r24,1 reti timer1: .... Timer0 stop .... Ausgabe an 8 Digits LCD über SPI .... Clear Timer0 .... Timer0 wieder starten reti Das Ergebnis in Timer0 schwankt bei 10MHz um 1 und bei 100MHz Eingang-frequenz um 4. Ich weiss nicht, woran das liegen könnte. Kann vieleicht jemand mir helfen ? Ich benutze AT90S4433. Mit ATMega8 habe ich probiert, hat aber nicht geholfen. Danke ! Thanh
Die max. Eingangsfrequenz habe ich per Vorteiler / 256 auf 35MHz erhöht. Bei Interesse: http://www.mino-elektronik.de/progs/avr/fm.c
Auch wenn der Thread alt ist; aber ich möchte deswegen keinen Neuen machen: http://www.elv-downloads.de/service/manuals/FC7008/FC7008_KM_G_030409.pdf Allerdings bin ich mir nicht im Klaren, wozu IC11B/IC12D dient bzw. wie die Ansteuerung funktionieren soll. Imo kann man das Gleiche auch mit nur einem DFF erreichen, dem IC11A. IC11A synchronisiert ja auf steigender Flanke die Torzeit, Tor ist IC12A, IC12C. Am Ende der Torzeit wird IC11A zurückgesetzt. IC13C dient wohl um Laufzeiten ausgleichen. Noch unklarer ist mir ist mir die Kunstschaltung mit R67, R68, D33. Wer kann mir die Idee dahinter erläutern? Und noch eine allg. Frage dazu. Die Ref.impulse kommen in der großen Version von einem Quarzofen. Die Torzeit muss doch aber auch genau sein, wieso wird die so einfach von uC Takt im uC abgeleitet? Ergeben sich dadurch nicht weitere Fehler in der Messung? Viele Grüße Olaf
ok, den letzten Teil kann ich nach einigen Grübeln beantworten: Die Torzeit geht nicht in das Ergebnis ein. Viele Grüße Olaf
>Noch unklarer ist mir ist mir die Kunstschaltung mit R67, R68, D33. Wer kann mir die Idee dahinter erläutern? Das ist eine Pegelanpassung. IC12 liefert TTL-Pegel, der muß auf den etwas größeren HC-MOS-Pegel von IC7 angepasst werden. >Die Torzeit muss doch aber auch genau sein,.... Bei reziproken Zählern werden ganzzahlige Messfrequenzimpulse mit der Referenzfrequenz verrechnet. Die Torzeit spielt dabei keine Rolle, allenfalls die Auflösung der Messergebnisses. Je kleiner die Torzeit desto weniger Anzeigestellen hat das Messergebniss. Ich habe diesen Zähler als Bausatz nachgebaut. Wenn der Referenzoszillator(Ofen) nicht so billig und primitiv aufgebaut wäre, könnte man den Zähler auch zu Vergleichsmessungen verwenden. Aber so ist das nur Bastlerqualität. Marillion
IC11B ist nur für die Pulsdauermesseung, ein FF macht die steigende Flanke, der andere die fallende bzw. umgekehrt. R67 usw. soll die Impulse etwas glätten, falls da Mist über den Eingang reinkommt. Wie die aber darauf kommen, daß der 74HC393 80MHz abkann, ist mir schleierhaft, laut Datenblatt ist bei etwa 30MHz Schluß. Da sollte wohl besser ein 74F393 oder 74AC393 rein. Die genaue Torzeit ist egal, es sind ja 2 Zähler, einer mißt Fx und der andere die 16 bzw. 25MHz. Wenn man also 10ms einstellt sind es nur ungefähr 10ms + die Zeit bis zur nächsten Flanke des Eingangssignals. Immerhin ist da ja ein MC drin und für denn ist eine Multiplikation und eine Division pro Messung ein Klacks: Fx = Fref * n / m Peter
Der 74HC393 ist von Philips, dessen fclkmax ist 99 MHz. http://www.semiconductors.philips.com/acrobat_download/datasheets/74HC_HCT393_3.pdf Marillion
Ist ja interessant, es darf als nur der von Philips sein und auch nicht der HCT-Typ. Ich hatte bei Motorola nachgesehen: http://www.onsemi.com/pub/Collateral/MC74HC393-D.PDF Peter
Philips-Standard-Logik-ICs sind z.T. wesentlich schneller als die ICs vom Wettbewerb. Das kann von Vorteil sein, wie oben beschrieben, oder auch von Nachteil, z.B. bei EMV-sensitiven Anwendungen. Marillion
> IC11B ist nur für die Pulsdauermesseung, ein FF macht die steigende > Flanke, der andere die fallende bzw. umgekehrt. Könntest Du das genauer erkläeren? - FF1 => '0', FF2=> '0' zu Beginn, daher Q1 => '0' und wegen clr ist Q2\ => '1', d.h. das und verknüpfte "count enable" (IC12D) ist '0'. - FF1 => '1', damit Q1 => '1' mit steigender Flanke von input, da FF2 noch immer '0', clear inaktiv, wird Q2\ => '1', somit "count enable" 1, d.h. die Zähler zählen. - das Zählen kann ich durch RES-FF\ = '0' beenden, oder durch: - FF2 => '1', mit steigender input Flanke wird Q2\ => '0', damit "count enable" '0' das wars. Jetzt kann man nur noch über IC13A das input signal invertieren, womit das obere DFF auf steigenden, das untere auf fallende input flanke triggert. Am Prinzip ändert das jedoch nichts, das Zähl-Ergebniss könnte sich um T/2 ändern imo. Wozu stop{1,2} gut sind, erschliesst sich mir momentan auch nicht, da die Toreiten ja im uC bekannt sind; evtl. hat es Sinn, wenn ewig keine Flanke kommt, dieses zu erkennen und als Fehler auszugeben - dann ist der Signalname aber sehr verwirrend. Momentan versuche ich diesen Teil in vhdl umzusetzten, als Entspannung bzw. zur Abstandsgewinnung vom LA ;-) Die bisherige Version zählt eine Periode zu wenig. Viele Grüße Olaf
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.