Entstanden um ein "Experimentierbrett" für Schüler und Auszubildende in
der Funktion zu erweitern.
Das Projekt wird noch auf eine 80x80 PCB geroutet werden um es auch auf
dem Brett in Betrieb nehmen zu können.
Vorrangig soll es dazu dienen, die Frequenz die ein Frequenzgenerator
(mit XR2206) bei Versuchen mit aktiven und passiven Filtern erzeugt,
anzuzeigen.
Weiters wird es versuche mit Wheatstonscher Meßbrücke und mit
Operationsverstärker realisierten Reglern geben.
Das hier vorliegende Panelmeter ist sehr einfach gehalten und kann daher
nur relativ wenig:
- Frequenzzähler 0 bis 200 kHz
- Voltmeter 0 bis 15 V
Ist JP2 bei Spannungsanlegen oder nach einem Reset in Stellung 1-2 wird
das Modul als Voltmeter verwendet, ist Stellung 2-3 gewählt, wird das
Modul als Frequenzzähler verwendet.
Das im Archiv enthaltene Makefile erzeugt eine Hexdatei für einen
ATtiny44, nach Abändern des Makefile, ist das Programm (aufgrund der
kleinen Codegröße) auch in einem ATtiny24 (oder in dem "großen"
ATtiny84) lauffähig.
Ursprünglich hatte ich einen (wirklich sehr dummen Fehler von mir) in
der Initialisierung des ADC's, der behoben ist.
Aufgrund fehlender Bedienelemente und des kleinen Codespeichers ist die
"Kalibrierung" des Voltmeters etwas "frickelig":
In Zeile:
Guest schrieb:> Impedanzwandlung um den ADC anständig zu treiben wird überbewertet?
Ja. Bei den ATmegas / ATtinys regelmäßig.
Da der S/H Kondensator sich aus dem 10n Kondensator bedienen kann, ist
das so völlig in Ordnung, wenn man mäßig schnell messen will. Gibt auch
eine alte AppNote von Atmel dazu.
Der 10n Kondensator am ADC ist allerdings wichtig, ohne diesen gehts
schief.
Hallo,
Ralph S. schrieb:> Das hier vorliegende Panelmeter ist sehr einfach gehalten und kann daher> nur relativ wenig:>> - Frequenzzähler 0 bis 200 kHz> - Voltmeter 0 bis 15 V
auch wenn es schon antik ist mehr als Hinweis zur Unterhaltung:
Beitrag "Multimeter"
Ist das schon lange her und wird immernoch bei mir genutzt...
Gruß aus Berlin
Michael
Guest schrieb:> Impedanzwandlung um den ADC anständig zu treiben wird überbewertet?
Das geschieht auf einer anderen PCB (wie auch die Impulsformung für den
Zählereingang) und ist u.a. Bestandteil der Experimente auf dem Brett.
Gruß, JJ
Michael U. schrieb:> auch wenn es schon antik ist mehr als Hinweis zur Unterhaltung:> Beitrag "Multimeter"
Wieviele Multimeter hättest du denn gerne?
Einsatzzwecke für Panelmeter gibt es viele, immer da, wo ein analoger
Wert in einem Gerät genau eine Größe anzeigen soll. Ich habe noch nie
gesehen, dass in einem Gerät ein Multimeter verbaut ist (aber Panelmeter
schon).
Ich finde es schade, daß die Frequenzmessung nicht den Stand der Technik
widerspiegelt. Gerade im Frequenzbereich <= 200 kHz wäre ein reziproker
Zähler angesagt. Selbst der ATtiny44 hat dafür einen ICP-Eingang.
Und auch der extra Displaytreiber wäre überflüssig, wenn der µC die
Anzeige gleich mit ansteuern würde. Ein Atmeg88 hat genug Pins für alle
Aufgaben.
Aber gut, vielleicht gibt es ja noch eine Version 2 ;-)
Hm, der Zähler hier (die Spannungsmessung war das Demonstrationsbonbon
für den Auszubildenden) gibt es vom Zählen her (einfache Torzeit von 1
Sekunde und zählen der Impulse) hier schon für einen ATmegaxx8 OHNE den
Displaytreiber mit 7-Segmentanzeige.
Hier ging es darum, das auf einem kleineren Chip umzusetzen. Abgesehen
davon war die Anzeige im Multiplexbetrieb an einem ATmega OHNE
Treibertransistoren nicht in der Helligkeit wie gewünscht, es wurden
also zusätzliche 6 Transistoren benötigt. Von daher war der
Displaytreiber schon nicht so verkehrt(abgesehen davon, dass die
Kombination Tiny44 und TM1637 preiswerter ist und auf dem PCB wie
erwartet einfacher zu routen ist).
Zudem bedarf es, da das multiplexen im ATmega entfällt auch keinen
Eingriff in einen Timerinterrupt was die ganze Sache sehr vereinfacht.
Von daher versteht den Code auch so ziemlich jeder der ihn ansieht und
versteht, wie DIESER Zähler funktioniert.
Einen reziproken Zähler habe ich einmal mit einem STM32F103 gemacht und
vom Ansatz her ist das vllt. reizvoll zu versuchen das auf einem Tiny44
umzusetzen.
Weiß ich nicht ob ich dazu komme, aber wenn, wird das dann vllt. doch
eine Version 2 geben.
Für die vorliegende Anwendung (die Frequenz eines
XR2206-Frequenzgenerators mit Ausgangsfrequenz max. 100 kHz) reicht die
Lösung völlig.
Aber wie gesagt, reziproke würde mich reizen, weil wie ich glaube, auch
die Torzeit dann unter 1 Sekunde liegen kann (im Bereich ab 2 Hz) und
bspw. das Einstellen eines Frequenzgenerators komfortabler ist.
In diesem Thread werde ich jedoch sicherlich nicht eine Schaltung mit
gemultiplexter Anzeige in einem anderen Chip posten (da würde ich dann
eher einen neuen Thread aufmachen).
Jetzt habe ich etwas "herumgespielt" und sagt mir, ob ich mit meinen
Überlegungen falsch liege, ganz sicher bin ich mir nicht (aber eben doch
gut sicher, eine Frequenzzählung reziproke bis 60000 Hz hat gleich
funktioniert):
Um eine Frequzenzzählung redziproke komplett machen zu können (und somit
einfach) habe ich den Input-Capture-Interrupt.
- Wenn ich jetzt eine Auflösung von 1 Hz haben möchte, dann habe ich das
Problem, dass der TCNT1 ein 16 Bit Register ist und dieses
logischerweise nur bis 65535 zählen kann. Eine Auflösung von 1 Hz wäre
mit der Lösung ICP und TCNT1 somit nur bis 65535 Hz möglich.
- Oberhalb von 65535 Hz muß ich somit die Taktfrequenz des
Timer/Counter1 herabsetzen, damit er mir bei Frequenzen größer 65535
nicht überläuft. Eine Takthablbierung würde somit eine Frequenzzählung
bis 13170 Hz bei Auflösung von 2 Hz ergeben.
- Bei höheren Freqenzen wird die Auflösung somit stetig kleiner.
- Ich muß eine Erfassung machen in welchem Frequenzbereich ich mich
gerade befinde um die Taktfrequenz des Timer/Counter 1 einzustellen.
--------------------------------------------------
Jetzt kreist es im Kopf, wie ich einen reziproken Zähler mit dem
gegebenen Controller ohne zusätzliche Hardware mit einer Auflösung von
1Hz realisieren kann. Erst dachte ich, das ist nicht gaaaanz so
schwierig, aber ein paar Konzepte im Kopf haben sich als Irrtum
herausgestellt. Wenn da jemand einen Weg für mich hat, höre ich mir das
gerne an (im Moment bin ich glaube ich angetriggert).
Mit den Überlegungen werde ich jetzt dann mal an der Matraze horchen
gehen!
Ralph S. schrieb:> Erst dachte ich, das ist nicht gaaaanz so> schwierig, aber ein paar Konzepte im Kopf haben sich als Irrtum> herausgestellt.
Du denkst zu kompliziert ;-)
Auch wenn Timer1 nur 16 Bit breit ist, er meldet seine Überläufe, sodaß
man ihn einfach auf 32 Bit "aufpusten" kann. Da er die Auflösung für die
Messung liefert, sollte er auch immer mit höchster Taktfrequenz laufen.
Für eine reziproke Messung braucht man zwei Zähler. Der eine zählt die
Eingangsimpulse in einem Meßintervall und der andere die exakte Zeit des
Intervalls. Das ganze gibt es schon in Kurzform zum Nachlesen:
http://mino-elektronik.de/fmeter/fmeter.htm#funk
Für eine 6-stellige Auflösung mit max. 200 kHz Anzeige bei 16 MHz
Taktfrequenz braucht man eine minimale Messdauer von 1/16000000 s *
200000 = 0,0125 s. Oder anders ausgedrückt: max. 80 Messungen sind bei
dieser Auflösung erreichbar. Beschränkt man sich auf 5 - 10 Messungen/s,
ist damit volle Auflösung bei jeder Messung und Meßfrequenz gegeben.
Während die Zeitmessung per Hardware-Timer läuft, müssen die
Eingangsimpulse per ISR in Software gezählt werden. Wie schnell die ISR
zählen kann, hängt vom verwendeten Compiler ab. Als Richtwert für C-Code
kann man 10 kHz Zählfrequenz pro 1 MHz CPU Frequenz bei einem AVR
ansetzen. In Assembler programmiert etwa Faktor 5 mehr.
Mit 16 MHz Takt wird die obere Grenzfrequenz bei ca. 160 kHz liegen.
Wenn Das zu knapp ist, könnte man entweder die Taktfrequenz auf 20 MHz
erhöhen, oder einen kleinen Vorteiler /2 bzw. /4 einfügen, was die
Auflösung nicht verschlechtert. Lediglich muß /2 oder /4 skaliert werden
und Messungen im unteren Hz-Bereich laufen entsprechend langsamer.
Bei einfachen Quarzen mit +/- 50 ppm ist eine Fein-Skalierung oder ein
Ziehkondensator für einen genauen Abgleich sehr sinnvoll!
Ein Beispiel für eine reziproke Frequenzmessung mit einem ATtiny44
findest Du hier: http://mino-elektronik.de/fmeter/fm_software.htm#bsp11
Die Variable count in ISR(TIM1_CAPT_vect) könnte auf uint16_t verkürzt
werden, da selbst bei 200 kHz und 5 Messungen/s nur 40000 als
Zählerstand erreicht werden. Das beschleunigt die ISR.
Was noch fehlt, ist die Ausgabe auf's Display. Hier reicht eine Anzeige
in Hz, die durch einen "wandernden" Dezimalpunkt von 0.12345 - 200000
den ganzen Meßbereich abdeckt.
Im Grunde mußt Du Deine vorhandene Schaltung nicht verändern. Lediglich
die Umschaltung von Spannungs- und Frequenzmessung muß auf einen anderen
IO-Pin (PA0 oder PA4 - PA6) verschoben und Fin an PA7 gelegt werden.
Die Ausgaberoutine kannst Du vielleicht hier entnehmen:
http://mino-elektronik.de/progs/avr/Drehzahl_4_45_float/Drehzahl_4_45_float.c
Das Programm läuft auf einem ATtiny45 und zeigt 4-stell. Ergebnisse auf
LCD mit wanderndem Punkt an. Es sollte kein Problem sein, die Wandlung
auf 6-stellig anzupassen.
Vielleicht spielst Du ein wenig herum. Gerade beim Abgleich oder
Einstellen von NF-Oszillatoren ist eine schnelle Meßwertausgabe von
Vorteil. Man erkennt dabei auch, wie stabil das Signal ist.
Ich denke, das reziproke Verfahren wird Dir gefallen.
m.n. schrieb:> Ich denke, das reziproke Verfahren wird Dir gefallen.
Ich weiß, dass mir das gefallen wird, weil ich das mit einem STM32 schon
einmal gemacht habe...
m.n. schrieb:> Für eine reziproke Messung braucht man zwei Zähler. Der eine zählt die> Eingangsimpulse in einem Meßintervall und der andere die exakte Zeit des> Intervalls.
Das wußte ich auch
m.n. schrieb:> Auch wenn Timer1 nur 16 Bit breit ist, er meldet seine Überläufe, sodaß> man ihn einfach auf 32 Bit "aufpusten" kann. Da er die Auflösung für die> Messung liefert, sollte er auch immer mit höchster Taktfrequenz laufen.
Da hängt jetzt meine Crux und das werde ich noch mal überdenken.
m.n. schrieb:> Während die Zeitmessung per Hardware-Timer läuft, müssen die> Eingangsimpulse per ISR in Software gezählt werden.
Das ist sehr klar.
m.n. schrieb:> Ein Beispiel für eine reziproke Frequenzmessung mit einem ATtiny44> findest Du hier: http://mino-elektronik.de/fmeter/fm_software.htm#bsp11
Das schaue ich mir garantiert an.
Danke für deine Infos
Bei Bedarf könnte ich Dir die Timer1-ISR noch beschleunigen, damit der
benötigte Eingangsfrequenzbereich ohne jeden Vorteiler abgedeckt wird.
Aus Gründen der Transparenz habe ich meist darauf verzichtet.