Forum: Mikrocontroller und Digitale Elektronik intelligenter Zähler a la ELV


von Matthias (Gast)


Lesenswert?

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

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

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

von Michael (Gast)


Lesenswert?

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.

von Matthias (Gast)


Lesenswert?

@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

von Peter D. (peda)


Lesenswert?

@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

von Matthias (Gast)


Lesenswert?

@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 . . .

von Thany (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

Die max. Eingangsfrequenz habe ich per Vorteiler / 256 auf 35MHz erhöht.
Bei Interesse: http://www.mino-elektronik.de/progs/avr/fm.c

von ope (Gast)


Lesenswert?

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

von ope (Gast)


Lesenswert?

ok, den letzten Teil kann ich nach einigen Grübeln beantworten: Die
Torzeit geht nicht in das Ergebnis ein.

Viele Grüße
Olaf

von Marillion (Gast)


Lesenswert?

>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

von Peter Dannegger (Gast)


Lesenswert?

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

von Marillion (Gast)


Lesenswert?

Der 74HC393 ist von Philips, dessen fclkmax ist 99 MHz.

http://www.semiconductors.philips.com/acrobat_download/datasheets/74HC_HCT393_3.pdf


Marillion

von Peter Dannegger (Gast)


Lesenswert?

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

von Marillion (Gast)


Lesenswert?

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

von ope (Gast)


Lesenswert?

> 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

von ope (Gast)


Lesenswert?

keiner eine Idee, wie das konkret nun funktioniert?

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.