mikrocontroller.net

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


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 . . .

Autor: Thany (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

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

Autor: ope (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn der Thread alt ist; aber ich möchte deswegen keinen Neuen
machen:
http://www.elv-downloads.de/service/manuals/FC7008...

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

Autor: ope (Gast)
Datum:

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

Viele Grüße
Olaf

Autor: Marillion (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marillion (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der 74HC393 ist von Philips, dessen fclkmax ist 99 MHz.

http://www.semiconductors.philips.com/acrobat_down...


Marillion

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marillion (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ope (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ope (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner eine Idee, wie das konkret nun funktioniert?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.