<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=A-za-z0-9</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=A-za-z0-9"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/A-za-z0-9"/>
	<updated>2026-04-14T06:20:18Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=LM3909&amp;diff=104880</id>
		<title>LM3909</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=LM3909&amp;diff=104880"/>
		<updated>2021-12-15T10:06:42Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: LED Blinker für niedrige Betriebsspannung. Ähnlich LM3909.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LED Flasher (Ersatz für LM3909) ==&lt;br /&gt;
&lt;br /&gt;
Hier die Schaltung eines LED-Blinkers, der sich aus nur einer Primärzelle betreiben läßt. Dabei darf die Betriebsspannung auch geringer sein, als die Flußspannung der LED.&lt;br /&gt;
&lt;br /&gt;
Die Schaltung ist funktional äquivalent zum LM3909 (der aber bereits seit Jahren abgekündigt ist). Die Schaltung stammt aus dem electronica-Heft Nr. 208 (Militärverlag der DDR, 1983). Ich habe nach einem Versuchsaufbau einige Bauteilwerte geringfügig geändert. Allerdings sind die meisten Werte ohnehin ziemlich unkritisch.&lt;br /&gt;
&lt;br /&gt;
=== Schaltbild: ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:LED-Flasher.png]]&lt;br /&gt;
&lt;br /&gt;
=== Dimensionierungshinweise: ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R1&#039;&#039;&#039;: Dies ist der Vorwiderstand der LED. Der Wert ist zwischen 4.7 Ohm und 10 Ohm ziemlich frei wählbar. Der Impulsspitzenstrom durch die LED V4 ist ca. (2.7V-U&amp;lt;sub&amp;gt;F&amp;lt;/sub&amp;gt;)/R1. Zu kleine Werte von R1 beeinflussen die subjektive Helligkeit der LED negativ. Für mich sind 10 Ohm optimal.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R6&#039;&#039;&#039;: Zusammen mit C1 legt dieser Widerstand die Pulsfrequenz fest. Diese ist außerdem noch abhängig von der Betriebsspannung und dem Widerstandsverhältnis R3:R7 und ergibt sich mit den angegebenen Werten zu etwa f=1/(R6*C1)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;R7&#039;&#039;&#039;: Mit diesem Widerstand kann man die Schaltung an die Betriebsspannung anpassen. An der Basis von V1 sollte eine Spannung von ca. 0.9-1V anliegen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;C1&#039;&#039;&#039;: Außer der Pulsfrequenz bestimmt C1 auch die Helligkeit der Licht-Blitze. Im Original ist C1 mit 100uF angegeben, allerdings war mir die LED dann nicht hell genug.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;V1, V2&#039;&#039;&#039;: Beide Transistoren sind unkritisch. Beliebige Siliziumtypen mit einer Stromverstärkung von mindestens 100 sind OK. Heutzutage könnte man BC547 (BC847) und BC557 (BC857) verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;V3&#039;&#039;&#039;: Dieser Transistor sollte eine große Stromverstärkung (ca. 300) haben und auch bei dem relativ großen Impulsstrom von ca. 100mA noch eine geringe Sättigungsspannung aufweisen. Im Original wird ein SF126 (BSY51, BFY33) mit Stromverstärkungsgruppe E vorgeschlagen. Aktueller Typvorschlag: BC337 (BC817).&lt;br /&gt;
&lt;br /&gt;
=== Funktionsbeschreibung ===&lt;br /&gt;
&lt;br /&gt;
Nach dem Einschalten ist C1 zunächst nicht geladen. Am Kollektor von V3 liegt die volle Betriebsspannung (da R2 viel kleiner ist als R6, oder R3+R7, fällt an ihm nahezu keine Spannung ab). Alle drei Transistoren sind gesperrt.&lt;br /&gt;
&lt;br /&gt;
Nun lädt sich C1 langsam über R6 auf. Da die Basis von V1 fest auf ca. 1V liegt, sperrt V1 solange, bis die Spannung über R6 auf ca. 0,3V gefallen ist (bei 1V-0,3V=0,7V öffnet die Basis-Emitter-Strecke von V1).&lt;br /&gt;
&lt;br /&gt;
Nun beginnt V1 zu leiten. Die beiden Transistoren V2 und V3 arbeiten beide in Emitterschaltung und verstärken diesen Strom sehr hoch (ca. um 10.000), so daß V3 nahezu sofort durchschaltet. Durch die Rückkopplung vom Kollektor von V3 über C1 auf den Emitter von V1 bleiben alle Transistoren auch weiterhin sicher geöffnet.&lt;br /&gt;
&lt;br /&gt;
Nun kann sich C1 über die LED V4 und den Widerstand R1 entladen. Dabei blitzt die LED deutlich sichtbar auf. Dabei steht die Summe aus der Betriebsspannung und der Spannung an C1 (ca. U[B]-0,3V) für die LED zur Verfügung, so daß die Betriebsspannung auch kleiner sein darf, als die Flußspannung der LED. Beim Betrieb an einer ausgemusterten R6-Zelle funktionierten rote, gelbe und sogar&lt;br /&gt;
grüne LED problemlos.&lt;br /&gt;
&lt;br /&gt;
Wenn die Spannung an C1 unter die Schwellspannung von V1 fällt, sperrt V1 wieder. Auch V2 und V3 wechseln wieder in den gesperrten Zustand und das Spiel beginnt von vorn.&lt;br /&gt;
&lt;br /&gt;
Die Stromaufnahme der Schaltung ist sehr gering. Zwar fließt in den Pulsen ziemlich viel Strom, allerdings immer nur sehr kurzzeitig. Der integrierte Dauerstrom liegt unter 0.5mA, so daß beim Betrieb an einer AA-Zelle ca. 3 Monate Dauerbetrieb möglich sind.&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:LED-Flasher.png&amp;diff=104879</id>
		<title>Datei:LED-Flasher.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:LED-Flasher.png&amp;diff=104879"/>
		<updated>2021-12-15T09:44:49Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: LED Flasher ähnlich LM3909&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Beschreibung ==&lt;br /&gt;
LED Flasher ähnlich LM3909&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98131</id>
		<title>Haustelefon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98131"/>
		<updated>2018-01-05T16:42:21Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Haustelefon ist eine minimalistische Telefonanlage, die zwei Analogtelefone miteinander verbindet. So kann man mit einfachen Mitteln eine Sprechverbindung zwischen z.B. zwei Kinderzimmern oder zwischen Wohnung und Dachboden/Keller herstellen.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
* Verwendung herkömmlicher Analogtelefone (POTS), sowohl historische mit elektromechanischem Wecker als auch moderne mit elektronischem Rufsignal funktionieren&lt;br /&gt;
* die Wählfunktion der Telefone wird nicht benötigt; sobald ein Telefon abgehoben wird, klingelt das andere&lt;br /&gt;
* die beiden Telefone und die Steuerung bilden elektrisch einen Ring; wahlweise kann eine Doppelader zu jedem Telefon gelegt werden oder man verwendet eine vorhandene Erde als Rückleiter&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzipschaltbild ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_bs.svg|left|mitte|Blockschaltbild]]&lt;br /&gt;
&lt;br /&gt;
Für den Sprechbetrieb liegen die beiden Telefone in Reihe an einer Gleichspannung von 18V. In Verbindung mit dem Innenwiderstand der Telefone (ca. 600R) fließt dabei ein Schleifenstrom von ca. 30mA.&lt;br /&gt;
&lt;br /&gt;
Ist ein Telefon aufgelegt, bildet ein Widerstand von 33K einen hochohmigen Nebenschluß. Durch das Einspeisen eines Teststroms kann erkannt werden, ob beide Telefone aufgelegt sind, ob eins aufgelegt und das andere abgenommen ist oder ob beide abgenommen sind.&lt;br /&gt;
&lt;br /&gt;
Der Ruftongenerator legt eine Wechselspannung von 90Vss an die Reihenschaltung eines aufgelegten und eines abgenommenen Telefons. Im aufgelegten Telefon läutet der Wecker, im abgenommenen Telefon sind die 25Hz Impulse als Klacken hörbar.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_s.svg|800px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan läßt sich grob in 4 Teile gliedern:&lt;br /&gt;
&lt;br /&gt;
; Rohspannungserzeugung: Brückengleichrichter BR1 und Siebkondensator C4 erzeugen eine Rohspannung von ca. 30V, die für die Sprechspannung und die Versorgung des µC verwendet wird. LD1 dient als Einschaltkontrolle. Die Dioden D1-D3 und Kondensatoren C1-C3 bilden eine unvollständige Villard-Kaskade und erzeugen eine Spannung von ca. 90V. Diese Spannung wird einerseits für das Rufsignal verwendet, andererseits wird über R6-R8 ein Teststrom von ca. 0.6mA in die Schleife injiziert, um den Zustand der Telefone detektieren zu können. ZD2 und C5 dienen der Stabilisierung bzw. Filterung des Teststroms.&lt;br /&gt;
&lt;br /&gt;
; Stabilisierung Sprechspannung: R1, ZD1 und LD1 erzeugen eine stabile Spannung von ca. 20V an der Basis von T1. T1 arbeitet als Emitterfolger und erzeugt so die Sprechspannung von ca. 18V nach der Entkopplungsdiode D6. Diese Spannung sollte möglichst stabil sein, insbesondere würde ein überlagertes Brummen in den Telefonen zu hören sein.&lt;br /&gt;
&lt;br /&gt;
; Rufsignalgenerator: Die Bauteile R5, T5, D5 sowie R4, T4, D4 und D7 bilden den Rufsignalgenerator. T2 und T3 realisieren die Umschaltung zwischen Sprechzustand (T2 sperrt, T3 leitet) und Rufzustand (T2 leitet, T3 sperrt). Im Rufzustand kann durch Ansteuern von T4 mit einem 25Hz Rechtecksignal die Spannung an den Telefonen zwischen 90V und 0V umgeschaltet werden, was den Wecker des aufgelegten Telefons läuten läßt. T4 zieht dazu einerseits über D4 die Spannung über den Telefonen auf GND, andererseits über D7 die Spannung an der Basis von T5. T4 und T5 leiten so abwechselnd.&lt;br /&gt;
&lt;br /&gt;
; Steuerung: Der ATTiny13 bildet in Verbindung mit den Transistoren T2 und T4 die Steuerung. Dazu wertet er die Spannung am Punkt &amp;quot;line&amp;quot; aus. Wenn beide Telefone aufgelegt sind, führt der Teststrom von 0.6mA in Verbindung mit den Widerständen R11 und R12 zu einer Spannung von ca. 40V. Wird eines der Telefone abgenommen, überbrückt es &amp;quot;seinen&amp;quot; Widerstand und die Spannung fällt auf ca. 31V. Wird auch das zweite Telefon abgenommen, fällt die Spannung auf 18V. Mit R9 und R10 wird die Spannung so weit verringert, daß sie der ADC des µC erfassen kann. Zwei Ausgänge des µC steuern über T2 die Umschaltung zwischen Sprech- und Rufzustand (Signal &amp;quot;talk&amp;quot;) und mittels T4 den Rufsignalgenerator (Signal &amp;quot;ring&amp;quot;). Im Sprechzustand steuert T3 durch und zieht die Spannung an der Basis von T5 auf GND. Dadurch bleiben beide Transistoren des Rufsignalgenerators gesperrt.&lt;br /&gt;
&lt;br /&gt;
Sonstiges: Spannungsregler U1 stellt die Versorgung von 5V für den µC bereit. LD2 hat reine Diagnosefunktion und kann bei Nichtbedarf auch weggelassen (durch eine Drahtbrücke ersetzt) werden. Im Ruhezustand glimmt LD2 schwach grün. Beim Rufen blinkt LD2 schnell rot/grün. Beim Sprechen leuchtet LD2 kräftig grün.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzip ===&lt;br /&gt;
&lt;br /&gt;
Die Software ist als [https://de.wikipedia.org/wiki/Endlicher_Automat endlicher Automat] (&#039;&#039;state machine&#039;&#039;) konzipiert. Der Einfachheit halber wurde der Rufzustand in zwei Teilzustände aufgeteilt: &#039;&#039;&#039;RING&#039;&#039;&#039; für aktives Rufen und &#039;&#039;&#039;WAIT&#039;&#039;&#039; für das Warten darauf, daß entweder der gerufene Teilnehmer abnimmt oder der rufende Teilnehmer auflegt. So haben wir insgesamt 4 Zustände:&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_sm.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
; IDLE: Beide Telefone sind aufgelegt. Von hier geht es weiter zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;, sobald die Spannung am Punkt &amp;quot;line&amp;quot; unter 33V fällt. Das geschieht, wenn ein Telefon abgenommen wird (oder beide).&lt;br /&gt;
&lt;br /&gt;
; WAIT: Das ist der passive Teil des Rufzustands. Hier wird geprüft ob auch das zweite Telefon abgenommen wurde (Spannung an &amp;quot;line&amp;quot; &amp;lt; 20V) oder ob das erste Telefon wieder aufgelegt wurde (Spannung an &amp;quot;line&amp;quot; &amp;gt; 37V). Es ist wichtig, daß zwischen den Übergängen &#039;&#039;&#039;IDLE&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;WAIT&#039;&#039;&#039; und &#039;&#039;&#039;WAIT&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;IDLE&#039;&#039;&#039; eine Hysterese liegt. Sonst könnte die Steuerung unkontrolliert zwischen beiden Zuständen springen. Zeitgesteuert geht es von hier zum aktiven Rufzustand.&lt;br /&gt;
&lt;br /&gt;
; RING: In diesem Zustand klingelt das aufgelegte Telefon. Eine Messung des Schleifenzustands ist hier nicht möglich. Der einzige Weg aus diesem Zustand ist über die Zeitsteuerung zurück zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;. Die Wartezeiten bestimmen dabei den Rhythmus (Ruf- und Pausenzeit) des Rufsignals. Die angegebenen 0.4s zu 1.6s funktionieren gut für elektromechanische Wecker. Für Telefone mit elektronisch erzeugtem Rufsignal sollte man die Rufzeit auf 1s erhöhen (und dann evtl. auch die Pause länger machen).&lt;br /&gt;
&lt;br /&gt;
; TALK: Der Sprechzustand wird erreicht, sobald beide Telefone abgenommen sind. Von hier geht es erst weiter, wenn beide Telefone aufgelegt sind. Das ist wichtig, weil sonst das Telefon, das als erstes aufgelegt wird, sofort wieder klingeln würde.&lt;br /&gt;
&lt;br /&gt;
Alle Zustandsübergänge finden auf einem festen 20ms Zeitraster statt - und immer maximal ein Übergang alle 20ms. Auch wenn beide Telefone gleichzeitig abgenommen werden, dauert es also bis zu 40ms, bis der Zustand &#039;&#039;&#039;TALK&#039;&#039;&#039; erreicht ist.&lt;br /&gt;
&lt;br /&gt;
=== Details ===&lt;br /&gt;
&lt;br /&gt;
Timer0 des µC arbeitet im CTC Modus und liefert einen Interrupt mit 50Hz (entsprechend dem 20ms Basis-Zeitraster). Aus diesem wird einerseits die Zeitsteuerung abgeleitet. Andererseits wird die Output-Compare Einheit dazu verwendet, an Pin PB0 = OC0A das 25Hz Rufsignal zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
Pin PB3 = ADC3 wird als Analogeingang verwendet. Der ADC läuft mit 150kHz Basistakt und unter Verwendung der internen 1.1V Referenz. Es werden immer 4 ADC-Messungen hintereinander gemacht und gemittelt. Die Schaltschwellen sind per #define am Programmanfang festgelegt und werden zur Compilezeit ausgerechnet.&lt;br /&gt;
&lt;br /&gt;
Ursprünglich hatte ich vor, ADC2 zur Kalibrierung zu verwenden, indem ich eine Spannung von ca. 1V (abgeleitet von den stabilisierten 5V) messe und daraus den exakten Wert der Referenzspannung bestimme. Das hat sich als unnötig erwiesen. Alle getesteten Exemplare des ATTiny13A lagen sehr nahe an den nominalen 1.1V. Außerdem ist bei den Schaltschwellen genügend &amp;quot;Luft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Um den Stromverbrauch zu senken, arbeitet der µC mit lediglich 600kHz Taktfrequenz (da geht sicher noch weniger) und verbringt die meiste Zeit im IDLE Schlafzustand. Der Watchdog ist aktiviert mit 1s Timeout - nur für den Fall der Fälle.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Verkabelung ==&lt;br /&gt;
&lt;br /&gt;
Die gesamte Schaltung paßt mühelos auf eine Platine 70x50mm&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;. Das Platinenlayout im unten verlinkten Archiv ist für das Gehäuse [http://www.donau-elektronik.de/shop/product_info.php?products_id=2177 KG28M von Donau electronic] gemacht (z.B. [https://www.pollin.de/p/kunststoff-kleingehaeuse-donau-elektronik-kg28m-schwarz-460291 bei Pollin]). Das Layout ist einseitig und ohne Drahtbrücken. Alle Widerstände bis auf R2 und R4 sind 0805 SMD Widerstände.&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_brd.png|mitte|300px]]&lt;br /&gt;
[[Datei:haustelefon_brd.jpg|mitte|350px]]&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}Die extra Löcher auf der Platine dienen der Zugentlastung der fest angeschlossenen Kabel mit Kabelbindern. Das Netzteil ist ein AC-Steckernetzteil mit ca. 16V (meins ist spezifiziert mit 15.7V/185mA). Mittlerweile scheinen solche Netzteile nicht mehr kaufbar zu sein. Dann kann man entweder selber einen Netztrafo in ein Steckergehäuse bauen. Oder den Trafo gleich mit auf der Platine unterbringen. Der kleinste handelsübliche Trafo (1.1VA) reicht.&lt;br /&gt;
&lt;br /&gt;
Für den Anschluß der Telefone habe ich eine LSA+ Klemmleiste (X2) vorgesehen. Die Telefone können wahlweise mit zwei Doppeladern angeschlossen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k1.svg|600px|Doppelader]]&lt;br /&gt;
&lt;br /&gt;
oder man verwendet eine vorhandene Erdverbindung (z.B. Wasserleitung):&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k2.svg|600px|Einzelader]]&lt;br /&gt;
&lt;br /&gt;
im letzteren Fall muß die Wechselspannung zur Speisung des Haustelefons natürlich potentialfrei sein.&lt;br /&gt;
&lt;br /&gt;
Die beiden 33K Widerstände (R11 und R12) sind zweckmäßigerweise bei den Telefonen unterzubringen - z.B. in der TAE-Dose. Dann kann man den Zustand der Verkabelung an der LED LD2 sehen. Wenn sie im Ruhezustand nicht schwach leuchtet, dann hat man eine Kabelunterbrechung.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/attachment/352054/haustelefon.zip Bauunterlagen: Sourcecode, Schaltplan, Platinenlayout] &lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/442189 zugehöriger Thread im Forum &amp;quot;Projekte und Code&amp;quot;]&lt;br /&gt;
* [[Analoger Telefonanschluss]]&lt;br /&gt;
* [http://www.norbertmoch.de/_elektronik/telefon/telefonanlage_fuer_2_teilnehmer_elektronisch/telefonanlage_fuer_2_teilnehmer_elektronisch.htm Norbert Moch inspirierte mich bezüglich der Hardware]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte ]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98130</id>
		<title>Haustelefon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98130"/>
		<updated>2018-01-05T15:20:31Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Aufbau und Verkabelung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Haustelefon ist eine minimalistische Telefonanlage, die zwei Analogtelefone miteinander verbindet. So kann man mit einfachen Mitteln eine Sprechverbindung zwischen z.B. zwei Kinderzimmern oder zwischen Wohnung und Dachboden/Keller herstellen.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
* Verwendung herkömmlicher Analogtelefone (POTS), sowohl historische mit elektromechanischem Wecker als auch moderne mit elektronischem Rufsignal funktionieren&lt;br /&gt;
* die Wählfunktion der Telefone wird nicht benötigt; sobald ein Telefon abgehoben wird, klingelt das andere&lt;br /&gt;
* die beiden Telefone und die Steuerung bilden elektrisch einen Ring; wahlweise kann eine Doppelader zu jedem Telefon gelegt werden oder man verwendet eine vorhandene Erde als Rückleiter&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzipschaltbild ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_bs.svg|left|mitte|Blockschaltbild]]&lt;br /&gt;
&lt;br /&gt;
Für den Sprechbetrieb liegen die beiden Telefone in Reihe an einer Gleichspannung von 18V. In Verbindung mit dem Innenwiderstand der Telefone (ca. 600R) fließt dabei ein Schleifenstrom von ca. 30mA.&lt;br /&gt;
&lt;br /&gt;
Ist ein Telefon aufgelegt, bildet ein Widerstand von 33K einen hochohmigen Nebenschluß. Durch das Einspeisen eines Teststroms kann erkannt werden, ob beide Telefone aufgelegt sind, ob eins aufgelegt und das andere abgenommen ist oder ob beide abgenommen sind.&lt;br /&gt;
&lt;br /&gt;
Der Ruftongenerator legt eine Wechselspannung von 90Vss an die Reihenschaltung eines aufgelegten und eines abgenommenen Telefons. Im aufgelegten Telefon läutet der Wecker, im abgenommenen Telefon sind die 25Hz Impulse als Klacken hörbar.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_s.svg|800px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan läßt sich grob in 4 Teile gliedern:&lt;br /&gt;
&lt;br /&gt;
; Rohspannungserzeugung: Brückengleichrichter BR1 und Siebkondensator C4 erzeugen eine Spannung von ca. 30V, die für die Sprechspannung und die Versorgung des µC verwendet wird. LD1 dient als Einschaltkontrolle. Die Dioden D1-D3 und Kondensatoren C1-C3 bilden eine unvollständige Villard-Kaskade und erzeugen eine Spannung von ca. 90V. Diese Spannung wird einerseits für das Rufsignal verwendet, andererseits wird über R6-R8 ein Teststrom von ca. 0.6mA in die Schleife injiziert, um den Zustand der Telefone detektieren zu können. ZD2 und C5 dienen der Stabilisierung bzw. Filterung des Teststroms.&lt;br /&gt;
&lt;br /&gt;
; Stabilisierung Sprechspannung: R1, ZD1 und LD1 erzeugen eine stabile Spannung von ca. 20V an der Basis von T1. T1 arbeitet als Emitterfolger und erzeugt so die Sprechspannung von ca. 18V nach der Entkopplungsdiode D6. Diese Spannung sollte möglichst stabil sein, insbesondere würde ein überlagertes Brummen in den Telefonen zu hören sein.&lt;br /&gt;
&lt;br /&gt;
; Rufsignalgenerator: Die Bauteile R5, T5, D5 sowie R4, T4, D4 und D7 bilden den Rufsignalgenerator. T2 und T3 realisieren die Umschaltung zwischen Sprechzustand (T2 sperrt, T3 leitet) und Rufzustand (T2 leitet, T3 sperrt). Im Rufzustand kann durch Ansteuern von T4 mit einem 25Hz Rechtecksignal die Spannung an den Telefonen zwischen 90V und 0V umgeschaltet werden, was den Wecker des aufgelegten Telefons läuten läßt. T4 zieht dazu einerseits über D4 die Spannung über den Telefonen auf GND, andererseits über D7 die Spannung an der Basis von T7. T4 und T5 leiten so abwechselnd.&lt;br /&gt;
&lt;br /&gt;
; Steuerung: Der ATTiny13 bildet in Verbindung mit den Transistoren T2 und T4 die Steuerung. Dazu wertet er die Spannung am Punkt &amp;quot;line&amp;quot; aus. Wenn beide Telefone aufgelegt sind, führt der Teststrom von 0.6mA in Verbindung mit den Widerständen R11 und R12 zu einer Spannung von ca. 40V. Wird eines der Telefone abgenommen, überbrückt es &amp;quot;seinen&amp;quot; Widerstand und die Spannung fällt auf ca. 31V. Wird auch das zweite Telefon abgenommen, fällt die Spannung auf 18V. Mit R9 und R10 wird die Spannung so weit verringert, daß sie der ADC des µC erfassen kann. Zwei Ausgänge des µC steuern über T2 die Umschaltung zwischen Sprech- und Rufzustand (Signal &amp;quot;talk&amp;quot;) und mittels T4 den Rufsignalgenerator (Signal &amp;quot;ring&amp;quot;). Im Sprechzustand steuert T3 durch und zieht die Spannung an der Basis von T5 auf GND. Dadurch bleiben beide Transistoren des Rufsignalgenerators gesperrt.&lt;br /&gt;
&lt;br /&gt;
Sonstiges: Spannungsregler U1 stellt die Versorgung von 5V für den µC bereit. LD2 hat reine Diagnosefunktion und kann bei Nichtbedarf auch weggelassen (durch eine Drahtbrücke ersetzt) werden. Im Ruhezustand glimmt LD2 schwach grün. Beim Rufen blinkt LD2 schnell rot/grün. Beim Sprechen leuchtet LD2 kräftig grün.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzip ===&lt;br /&gt;
&lt;br /&gt;
Die Software ist als [https://de.wikipedia.org/wiki/Endlicher_Automat endlicher Automat] (&#039;&#039;state machine&#039;&#039;) konzipiert. Der Einfachheit halber wurde der Rufzustand in zwei Teilzustände aufgeteilt: &#039;&#039;&#039;RING&#039;&#039;&#039; für aktives Rufen und &#039;&#039;&#039;WAIT&#039;&#039;&#039; für das Warten darauf, daß entweder der gerufene Teilnehmer abnimmt oder der rufende Teilnehmer auflegt. So haben wir insgesamt 4 Zustände:&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_sm.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
; IDLE: Beide Telefone sind aufgelegt. Von hier geht es weiter zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;, sobald die Spannung am Punkt &amp;quot;line&amp;quot; unter 33V fällt. Das geschieht, wenn ein Telefon abgenommen wird (oder beide).&lt;br /&gt;
&lt;br /&gt;
; WAIT: Das ist der passive Teil des Rufzustands. Hier wird geprüft ob auch das zweite Telefon abgenommen wurde (Spannung an &amp;quot;line&amp;quot; &amp;lt; 20V) oder ob das erste Telefon wieder aufgelegt wurde (Spannung an &amp;quot;line&amp;quot; &amp;gt; 37V). Es ist wichtig, daß zwischen den Übergängen &#039;&#039;&#039;IDLE&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;WAIT&#039;&#039;&#039; und &#039;&#039;&#039;WAIT&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;IDLE&#039;&#039;&#039; eine Hysterese liegt. Sonst könnte die Steuerung unkontrolliert zwischen beiden Zuständen springen. Zeitgesteuert geht es von hier zum aktiven Rufzustand.&lt;br /&gt;
&lt;br /&gt;
; RING: In diesem Zustand klingelt das aufgelegte Telefon. Eine Messung des Schleifenzustands ist hier nicht möglich. Der einzige Weg aus diesem Zustand ist über die Zeitsteuerung zurück zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;. Die Wartezeiten bestimmen dabei den Rhythmus (Ruf- und Pausenzeit) des Rufsignals. Die angegebenen 0.4s zu 1.6s funktionieren gut für elektromechanische Wecker. Für Telefone mit elektronisch erzeugtem Rufsignal sollte man die Rufzeit auf 1s erhöhen (und dann evtl. auch die Pause länger machen).&lt;br /&gt;
&lt;br /&gt;
; TALK: Der Sprechzustand wird erreicht, sobald beide Telefone abgenommen sind. Von hier geht es erst weiter, wenn beide Telefone aufgelegt sind. Das ist wichtig, weil sonst das Telefon, das als erstes aufgelegt wird, sofort wieder klingeln würde.&lt;br /&gt;
&lt;br /&gt;
Alle Zustandsübergänge finden auf einem festen 20ms Zeitraster statt - und immer maximal ein Übergang alle 20ms. Auch wenn beide Telefone gleichzeitig abgenommen werden, dauert es also bis zu 40ms, bis der Zustand &#039;&#039;&#039;TALK&#039;&#039;&#039; erreicht ist.&lt;br /&gt;
&lt;br /&gt;
=== Details ===&lt;br /&gt;
&lt;br /&gt;
Timer0 des µC arbeitet im CTC Modus und liefert einen Interrupt mit 50Hz (entsprechend dem 20ms Basis-Zeitraster). Aus diesem wird einerseits die Zeitsteuerung abgeleitet. Andererseits wird die Output-Compare Einheit dazu verwendet, an Pin PB0 = OC0A das 25Hz Rufsignal zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
Pin PB3 = ADC3 wird als Analogeingang verwendet. Der ADC läuft mit 150kHz Basistakt und unter Verwendung der internen 1.1V Referenz. Es werden immer 4 ADC-Messungen hintereinander gemacht und gemittelt. Die Schaltschwellen sind per #define am Programmanfang festgelegt und werden zur Compilezeit ausgerechnet.&lt;br /&gt;
&lt;br /&gt;
Ursprünglich hatte ich vor, ADC2 zur Kalibrierung zu verwenden, indem ich eine Spannung von ca. 1V (abgeleitet von den stabilisierten 5V) messe und daraus den exakten Wert der Referenzspannung bestimme. Das hat sich als unnötig erwiesen. Alle getesteten Exemplare des ATTiny13A lagen sehr nahe an den nominalen 1.1V. Außerdem ist bei den Schaltschwellen genügend &amp;quot;Luft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Um den Stromverbrauch zu senken, arbeitet der µC mit lediglich 600kHz Taktfrequenz (da geht sicher noch weniger) und verbringt die meiste Zeit im IDLE Schlafzustand. Der Watchdog ist aktiviert mit 1s Timeout - nur für den Fall der Fälle.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Verkabelung ==&lt;br /&gt;
&lt;br /&gt;
Die gesamte Schaltung paßt mühelos auf eine Platine 70x50mm&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;. Das Platinenlayout im unten verlinkten Archiv ist für das Gehäuse [http://www.donau-elektronik.de/shop/product_info.php?products_id=2177 KG28M von Donau electronic] gemacht (z.B. [https://www.pollin.de/p/kunststoff-kleingehaeuse-donau-elektronik-kg28m-schwarz-460291 bei Pollin]). Das Layout ist einseitig und ohne Drahtbrücken. Alle Widerstände bis auf R2 und R4 sind 0805 SMD Widerstände.&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_brd.png|mitte|300px]]&lt;br /&gt;
[[Datei:haustelefon_brd.jpg|mitte|350px]]&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}Die extra Löcher auf der Platine dienen der Zugentlastung der fest angeschlossenen Kabel mit Kabelbindern. Das Netzteil ist ein AC-Steckernetzteil mit ca. 16V (meins ist spezifiziert mit 15.7V/185mA). Mittlerweile scheinen solche Netzteile nicht mehr kaufbar zu sein. Dann kann man entweder selber einen Netztrafo in ein Steckergehäuse bauen. Oder den Trafo gleich mit auf der Platine unterbringen. Der kleinste handelsübliche Trafo (1.1VA) reicht.&lt;br /&gt;
&lt;br /&gt;
Für den Anschluß der Telefone habe ich eine LSA+ Klemmleiste (X2) vorgesehen. Die Telefone können wahlweise mit zwei Doppeladern angeschlossen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k1.svg|600px|Doppelader]]&lt;br /&gt;
&lt;br /&gt;
oder man verwendet eine vorhandene Erdverbindung (z.B. Wasserleitung):&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k2.svg|600px|Einzelader]]&lt;br /&gt;
&lt;br /&gt;
im letzteren Fall muß die Wechselspannung zur Speisung des Haustelefons natürlich potentialfrei sein.&lt;br /&gt;
&lt;br /&gt;
Die beiden 33K Widerstände (R11 und R12) sind zweckmäßigerweise bei den Telefonen unterzubringen - z.B. in der TAE-Dose. Dann kann man den Zustand der Verkabelung an der LED LD2 sehen. Wenn sie im Ruhezustand nicht schwach leuchtet, dann hat man eine Kabelunterbrechung.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/attachment/352054/haustelefon.zip Bauunterlagen: Sourcecode, Schaltplan, Platinenlayout] &lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/442189 zugehöriger Thread im Forum &amp;quot;Projekte und Code&amp;quot;]&lt;br /&gt;
* [[Analoger Telefonanschluss]]&lt;br /&gt;
* [http://www.norbertmoch.de/_elektronik/telefon/telefonanlage_fuer_2_teilnehmer_elektronisch/telefonanlage_fuer_2_teilnehmer_elektronisch.htm Norbert Moch inspirierte mich bezüglich der Hardware]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte ]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98129</id>
		<title>Haustelefon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98129"/>
		<updated>2018-01-05T15:08:59Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Aufbau und Verkabelung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Haustelefon ist eine minimalistische Telefonanlage, die zwei Analogtelefone miteinander verbindet. So kann man mit einfachen Mitteln eine Sprechverbindung zwischen z.B. zwei Kinderzimmern oder zwischen Wohnung und Dachboden/Keller herstellen.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
* Verwendung herkömmlicher Analogtelefone (POTS), sowohl historische mit elektromechanischem Wecker als auch moderne mit elektronischem Rufsignal funktionieren&lt;br /&gt;
* die Wählfunktion der Telefone wird nicht benötigt; sobald ein Telefon abgehoben wird, klingelt das andere&lt;br /&gt;
* die beiden Telefone und die Steuerung bilden elektrisch einen Ring; wahlweise kann eine Doppelader zu jedem Telefon gelegt werden oder man verwendet eine vorhandene Erde als Rückleiter&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzipschaltbild ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_bs.svg|left|mitte|Blockschaltbild]]&lt;br /&gt;
&lt;br /&gt;
Für den Sprechbetrieb liegen die beiden Telefone in Reihe an einer Gleichspannung von 18V. In Verbindung mit dem Innenwiderstand der Telefone (ca. 600R) fließt dabei ein Schleifenstrom von ca. 30mA.&lt;br /&gt;
&lt;br /&gt;
Ist ein Telefon aufgelegt, bildet ein Widerstand von 33K einen hochohmigen Nebenschluß. Durch das Einspeisen eines Teststroms kann erkannt werden, ob beide Telefone aufgelegt sind, ob eins aufgelegt und das andere abgenommen ist oder ob beide abgenommen sind.&lt;br /&gt;
&lt;br /&gt;
Der Ruftongenerator legt eine Wechselspannung von 90Vss an die Reihenschaltung eines aufgelegten und eines abgenommenen Telefons. Im aufgelegten Telefon läutet der Wecker, im abgenommenen Telefon sind die 25Hz Impulse als Klacken hörbar.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_s.svg|800px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan läßt sich grob in 4 Teile gliedern:&lt;br /&gt;
&lt;br /&gt;
; Rohspannungserzeugung: Brückengleichrichter BR1 und Siebkondensator C4 erzeugen eine Spannung von ca. 30V, die für die Sprechspannung und die Versorgung des µC verwendet wird. LD1 dient als Einschaltkontrolle. Die Dioden D1-D3 und Kondensatoren C1-C3 bilden eine unvollständige Villard-Kaskade und erzeugen eine Spannung von ca. 90V. Diese Spannung wird einerseits für das Rufsignal verwendet, andererseits wird über R6-R8 ein Teststrom von ca. 0.6mA in die Schleife injiziert, um den Zustand der Telefone detektieren zu können. ZD2 und C5 dienen der Stabilisierung bzw. Filterung des Teststroms.&lt;br /&gt;
&lt;br /&gt;
; Stabilisierung Sprechspannung: R1, ZD1 und LD1 erzeugen eine stabile Spannung von ca. 20V an der Basis von T1. T1 arbeitet als Emitterfolger und erzeugt so die Sprechspannung von ca. 18V nach der Entkopplungsdiode D6. Diese Spannung sollte möglichst stabil sein, insbesondere würde ein überlagertes Brummen in den Telefonen zu hören sein.&lt;br /&gt;
&lt;br /&gt;
; Rufsignalgenerator: Die Bauteile R5, T5, D5 sowie R4, T4, D4 und D7 bilden den Rufsignalgenerator. T2 und T3 realisieren die Umschaltung zwischen Sprechzustand (T2 sperrt, T3 leitet) und Rufzustand (T2 leitet, T3 sperrt). Im Rufzustand kann durch Ansteuern von T4 mit einem 25Hz Rechtecksignal die Spannung an den Telefonen zwischen 90V und 0V umgeschaltet werden, was den Wecker des aufgelegten Telefons läuten läßt. T4 zieht dazu einerseits über D4 die Spannung über den Telefonen auf GND, andererseits über D7 die Spannung an der Basis von T7. T4 und T5 leiten so abwechselnd.&lt;br /&gt;
&lt;br /&gt;
; Steuerung: Der ATTiny13 bildet in Verbindung mit den Transistoren T2 und T4 die Steuerung. Dazu wertet er die Spannung am Punkt &amp;quot;line&amp;quot; aus. Wenn beide Telefone aufgelegt sind, führt der Teststrom von 0.6mA in Verbindung mit den Widerständen R11 und R12 zu einer Spannung von ca. 40V. Wird eines der Telefone abgenommen, überbrückt es &amp;quot;seinen&amp;quot; Widerstand und die Spannung fällt auf ca. 31V. Wird auch das zweite Telefon abgenommen, fällt die Spannung auf 18V. Mit R9 und R10 wird die Spannung so weit verringert, daß sie der ADC des µC erfassen kann. Zwei Ausgänge des µC steuern über T2 die Umschaltung zwischen Sprech- und Rufzustand (Signal &amp;quot;talk&amp;quot;) und mittels T4 den Rufsignalgenerator (Signal &amp;quot;ring&amp;quot;). Im Sprechzustand steuert T3 durch und zieht die Spannung an der Basis von T5 auf GND. Dadurch bleiben beide Transistoren des Rufsignalgenerators gesperrt.&lt;br /&gt;
&lt;br /&gt;
Sonstiges: Spannungsregler U1 stellt die Versorgung von 5V für den µC bereit. LD2 hat reine Diagnosefunktion und kann bei Nichtbedarf auch weggelassen (durch eine Drahtbrücke ersetzt) werden. Im Ruhezustand glimmt LD2 schwach grün. Beim Rufen blinkt LD2 schnell rot/grün. Beim Sprechen leuchtet LD2 kräftig grün.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzip ===&lt;br /&gt;
&lt;br /&gt;
Die Software ist als [https://de.wikipedia.org/wiki/Endlicher_Automat endlicher Automat] (&#039;&#039;state machine&#039;&#039;) konzipiert. Der Einfachheit halber wurde der Rufzustand in zwei Teilzustände aufgeteilt: &#039;&#039;&#039;RING&#039;&#039;&#039; für aktives Rufen und &#039;&#039;&#039;WAIT&#039;&#039;&#039; für das Warten darauf, daß entweder der gerufene Teilnehmer abnimmt oder der rufende Teilnehmer auflegt. So haben wir insgesamt 4 Zustände:&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_sm.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
; IDLE: Beide Telefone sind aufgelegt. Von hier geht es weiter zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;, sobald die Spannung am Punkt &amp;quot;line&amp;quot; unter 33V fällt. Das geschieht, wenn ein Telefon abgenommen wird (oder beide).&lt;br /&gt;
&lt;br /&gt;
; WAIT: Das ist der passive Teil des Rufzustands. Hier wird geprüft ob auch das zweite Telefon abgenommen wurde (Spannung an &amp;quot;line&amp;quot; &amp;lt; 20V) oder ob das erste Telefon wieder aufgelegt wurde (Spannung an &amp;quot;line&amp;quot; &amp;gt; 37V). Es ist wichtig, daß zwischen den Übergängen &#039;&#039;&#039;IDLE&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;WAIT&#039;&#039;&#039; und &#039;&#039;&#039;WAIT&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;IDLE&#039;&#039;&#039; eine Hysterese liegt. Sonst könnte die Steuerung unkontrolliert zwischen beiden Zuständen springen. Zeitgesteuert geht es von hier zum aktiven Rufzustand.&lt;br /&gt;
&lt;br /&gt;
; RING: In diesem Zustand klingelt das aufgelegte Telefon. Eine Messung des Schleifenzustands ist hier nicht möglich. Der einzige Weg aus diesem Zustand ist über die Zeitsteuerung zurück zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;. Die Wartezeiten bestimmen dabei den Rhythmus (Ruf- und Pausenzeit) des Rufsignals. Die angegebenen 0.4s zu 1.6s funktionieren gut für elektromechanische Wecker. Für Telefone mit elektronisch erzeugtem Rufsignal sollte man die Rufzeit auf 1s erhöhen (und dann evtl. auch die Pause länger machen).&lt;br /&gt;
&lt;br /&gt;
; TALK: Der Sprechzustand wird erreicht, sobald beide Telefone abgenommen sind. Von hier geht es erst weiter, wenn beide Telefone aufgelegt sind. Das ist wichtig, weil sonst das Telefon, das als erstes aufgelegt wird, sofort wieder klingeln würde.&lt;br /&gt;
&lt;br /&gt;
Alle Zustandsübergänge finden auf einem festen 20ms Zeitraster statt - und immer maximal ein Übergang alle 20ms. Auch wenn beide Telefone gleichzeitig abgenommen werden, dauert es also bis zu 40ms, bis der Zustand &#039;&#039;&#039;TALK&#039;&#039;&#039; erreicht ist.&lt;br /&gt;
&lt;br /&gt;
=== Details ===&lt;br /&gt;
&lt;br /&gt;
Timer0 des µC arbeitet im CTC Modus und liefert einen Interrupt mit 50Hz (entsprechend dem 20ms Basis-Zeitraster). Aus diesem wird einerseits die Zeitsteuerung abgeleitet. Andererseits wird die Output-Compare Einheit dazu verwendet, an Pin PB0 = OC0A das 25Hz Rufsignal zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
Pin PB3 = ADC3 wird als Analogeingang verwendet. Der ADC läuft mit 150kHz Basistakt und unter Verwendung der internen 1.1V Referenz. Es werden immer 4 ADC-Messungen hintereinander gemacht und gemittelt. Die Schaltschwellen sind per #define am Programmanfang festgelegt und werden zur Compilezeit ausgerechnet.&lt;br /&gt;
&lt;br /&gt;
Ursprünglich hatte ich vor, ADC2 zur Kalibrierung zu verwenden, indem ich eine Spannung von ca. 1V (abgeleitet von den stabilisierten 5V) messe und daraus den exakten Wert der Referenzspannung bestimme. Das hat sich als unnötig erwiesen. Alle getesteten Exemplare des ATTiny13A lagen sehr nahe an den nominalen 1.1V. Außerdem ist bei den Schaltschwellen genügend &amp;quot;Luft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Um den Stromverbrauch zu senken, arbeitet der µC mit lediglich 600kHz Taktfrequenz (da geht sicher noch weniger) und verbringt die meiste Zeit im IDLE Schlafzustand. Der Watchdog ist aktiviert mit 1s Timeout - nur für den Fall der Fälle.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Verkabelung ==&lt;br /&gt;
&lt;br /&gt;
Die gesamte Schaltung paßt mühelos auf eine Platine 70x50mm&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;. Das Platinenlayout im unten verlinkten Archiv ist für das Gehäuse [http://www.donau-elektronik.de/shop/product_info.php?products_id=2177 KG28M von Donau electronic] gemacht (z.B. [https://www.pollin.de/p/kunststoff-kleingehaeuse-donau-elektronik-kg28m-schwarz-460291 bei Pollin]). Das Layout ist einseitig und ohne Drahtbrücken. Alle Widerstände bis auf R2 und R4 sind 0805 SMD Widerstände.&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_brd.png|mitte|300px]]&lt;br /&gt;
[[Datei:haustelefon_brd.jpg|mitte|350px]]&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}Die extra Löcher auf der Platine dienen der Zugentlastung der fest angeschlossenen Kabel mit Kabelbindern. Das Netzteil ist ein AC-Steckernetzteil mit ca. 16V (meins ist spezifiziert mit 15.7V/185mA). Mittlerweile scheinen solche Netzteile nicht mehr kaufbar zu sein. Dann kann man entweder selber einen Netztrafo in ein Steckergehäuse bauen. Oder den Trafo gleich mit auf der Platine unterbringen. Der kleinste handelsübliche Trafo (1.1VA) reicht.&lt;br /&gt;
&lt;br /&gt;
Für den Anschluß der Telefone habe ich eine LSA+ Klemmleiste (X2) vorgesehen. Die Telefone können wahlweise mit zwei Doppeladern angeschlossen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k1.svg|600px|Doppelader]]&lt;br /&gt;
&lt;br /&gt;
oder man verwendet eine vorhandene Erdverbindung (z.B. Wasserleitung):&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k2.svg|600px|Einzelader]]&lt;br /&gt;
&lt;br /&gt;
im letzteren Fall muß die Wechselspannung zur Speisung des Haustelefons natürlich potentialfrei sein.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/attachment/352054/haustelefon.zip Bauunterlagen: Sourcecode, Schaltplan, Platinenlayout] &lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/442189 zugehöriger Thread im Forum &amp;quot;Projekte und Code&amp;quot;]&lt;br /&gt;
* [[Analoger Telefonanschluss]]&lt;br /&gt;
* [http://www.norbertmoch.de/_elektronik/telefon/telefonanlage_fuer_2_teilnehmer_elektronisch/telefonanlage_fuer_2_teilnehmer_elektronisch.htm Norbert Moch inspirierte mich bezüglich der Hardware]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte ]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98128</id>
		<title>Haustelefon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98128"/>
		<updated>2018-01-05T15:02:48Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Schaltplan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Haustelefon ist eine minimalistische Telefonanlage, die zwei Analogtelefone miteinander verbindet. So kann man mit einfachen Mitteln eine Sprechverbindung zwischen z.B. zwei Kinderzimmern oder zwischen Wohnung und Dachboden/Keller herstellen.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
* Verwendung herkömmlicher Analogtelefone (POTS), sowohl historische mit elektromechanischem Wecker als auch moderne mit elektronischem Rufsignal funktionieren&lt;br /&gt;
* die Wählfunktion der Telefone wird nicht benötigt; sobald ein Telefon abgehoben wird, klingelt das andere&lt;br /&gt;
* die beiden Telefone und die Steuerung bilden elektrisch einen Ring; wahlweise kann eine Doppelader zu jedem Telefon gelegt werden oder man verwendet eine vorhandene Erde als Rückleiter&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzipschaltbild ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_bs.svg|left|mitte|Blockschaltbild]]&lt;br /&gt;
&lt;br /&gt;
Für den Sprechbetrieb liegen die beiden Telefone in Reihe an einer Gleichspannung von 18V. In Verbindung mit dem Innenwiderstand der Telefone (ca. 600R) fließt dabei ein Schleifenstrom von ca. 30mA.&lt;br /&gt;
&lt;br /&gt;
Ist ein Telefon aufgelegt, bildet ein Widerstand von 33K einen hochohmigen Nebenschluß. Durch das Einspeisen eines Teststroms kann erkannt werden, ob beide Telefone aufgelegt sind, ob eins aufgelegt und das andere abgenommen ist oder ob beide abgenommen sind.&lt;br /&gt;
&lt;br /&gt;
Der Ruftongenerator legt eine Wechselspannung von 90Vss an die Reihenschaltung eines aufgelegten und eines abgenommenen Telefons. Im aufgelegten Telefon läutet der Wecker, im abgenommenen Telefon sind die 25Hz Impulse als Klacken hörbar.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_s.svg|800px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan läßt sich grob in 4 Teile gliedern:&lt;br /&gt;
&lt;br /&gt;
; Rohspannungserzeugung: Brückengleichrichter BR1 und Siebkondensator C4 erzeugen eine Spannung von ca. 30V, die für die Sprechspannung und die Versorgung des µC verwendet wird. LD1 dient als Einschaltkontrolle. Die Dioden D1-D3 und Kondensatoren C1-C3 bilden eine unvollständige Villard-Kaskade und erzeugen eine Spannung von ca. 90V. Diese Spannung wird einerseits für das Rufsignal verwendet, andererseits wird über R6-R8 ein Teststrom von ca. 0.6mA in die Schleife injiziert, um den Zustand der Telefone detektieren zu können. ZD2 und C5 dienen der Stabilisierung bzw. Filterung des Teststroms.&lt;br /&gt;
&lt;br /&gt;
; Stabilisierung Sprechspannung: R1, ZD1 und LD1 erzeugen eine stabile Spannung von ca. 20V an der Basis von T1. T1 arbeitet als Emitterfolger und erzeugt so die Sprechspannung von ca. 18V nach der Entkopplungsdiode D6. Diese Spannung sollte möglichst stabil sein, insbesondere würde ein überlagertes Brummen in den Telefonen zu hören sein.&lt;br /&gt;
&lt;br /&gt;
; Rufsignalgenerator: Die Bauteile R5, T5, D5 sowie R4, T4, D4 und D7 bilden den Rufsignalgenerator. T2 und T3 realisieren die Umschaltung zwischen Sprechzustand (T2 sperrt, T3 leitet) und Rufzustand (T2 leitet, T3 sperrt). Im Rufzustand kann durch Ansteuern von T4 mit einem 25Hz Rechtecksignal die Spannung an den Telefonen zwischen 90V und 0V umgeschaltet werden, was den Wecker des aufgelegten Telefons läuten läßt. T4 zieht dazu einerseits über D4 die Spannung über den Telefonen auf GND, andererseits über D7 die Spannung an der Basis von T7. T4 und T5 leiten so abwechselnd.&lt;br /&gt;
&lt;br /&gt;
; Steuerung: Der ATTiny13 bildet in Verbindung mit den Transistoren T2 und T4 die Steuerung. Dazu wertet er die Spannung am Punkt &amp;quot;line&amp;quot; aus. Wenn beide Telefone aufgelegt sind, führt der Teststrom von 0.6mA in Verbindung mit den Widerständen R11 und R12 zu einer Spannung von ca. 40V. Wird eines der Telefone abgenommen, überbrückt es &amp;quot;seinen&amp;quot; Widerstand und die Spannung fällt auf ca. 31V. Wird auch das zweite Telefon abgenommen, fällt die Spannung auf 18V. Mit R9 und R10 wird die Spannung so weit verringert, daß sie der ADC des µC erfassen kann. Zwei Ausgänge des µC steuern über T2 die Umschaltung zwischen Sprech- und Rufzustand (Signal &amp;quot;talk&amp;quot;) und mittels T4 den Rufsignalgenerator (Signal &amp;quot;ring&amp;quot;). Im Sprechzustand steuert T3 durch und zieht die Spannung an der Basis von T5 auf GND. Dadurch bleiben beide Transistoren des Rufsignalgenerators gesperrt.&lt;br /&gt;
&lt;br /&gt;
Sonstiges: Spannungsregler U1 stellt die Versorgung von 5V für den µC bereit. LD2 hat reine Diagnosefunktion und kann bei Nichtbedarf auch weggelassen (durch eine Drahtbrücke ersetzt) werden. Im Ruhezustand glimmt LD2 schwach grün. Beim Rufen blinkt LD2 schnell rot/grün. Beim Sprechen leuchtet LD2 kräftig grün.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzip ===&lt;br /&gt;
&lt;br /&gt;
Die Software ist als [https://de.wikipedia.org/wiki/Endlicher_Automat endlicher Automat] (&#039;&#039;state machine&#039;&#039;) konzipiert. Der Einfachheit halber wurde der Rufzustand in zwei Teilzustände aufgeteilt: &#039;&#039;&#039;RING&#039;&#039;&#039; für aktives Rufen und &#039;&#039;&#039;WAIT&#039;&#039;&#039; für das Warten darauf, daß entweder der gerufene Teilnehmer abnimmt oder der rufende Teilnehmer auflegt. So haben wir insgesamt 4 Zustände:&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_sm.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
; IDLE: Beide Telefone sind aufgelegt. Von hier geht es weiter zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;, sobald die Spannung am Punkt &amp;quot;line&amp;quot; unter 33V fällt. Das geschieht, wenn ein Telefon abgenommen wird (oder beide).&lt;br /&gt;
&lt;br /&gt;
; WAIT: Das ist der passive Teil des Rufzustands. Hier wird geprüft ob auch das zweite Telefon abgenommen wurde (Spannung an &amp;quot;line&amp;quot; &amp;lt; 20V) oder ob das erste Telefon wieder aufgelegt wurde (Spannung an &amp;quot;line&amp;quot; &amp;gt; 37V). Es ist wichtig, daß zwischen den Übergängen &#039;&#039;&#039;IDLE&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;WAIT&#039;&#039;&#039; und &#039;&#039;&#039;WAIT&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;IDLE&#039;&#039;&#039; eine Hysterese liegt. Sonst könnte die Steuerung unkontrolliert zwischen beiden Zuständen springen. Zeitgesteuert geht es von hier zum aktiven Rufzustand.&lt;br /&gt;
&lt;br /&gt;
; RING: In diesem Zustand klingelt das aufgelegte Telefon. Eine Messung des Schleifenzustands ist hier nicht möglich. Der einzige Weg aus diesem Zustand ist über die Zeitsteuerung zurück zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;. Die Wartezeiten bestimmen dabei den Rhythmus (Ruf- und Pausenzeit) des Rufsignals. Die angegebenen 0.4s zu 1.6s funktionieren gut für elektromechanische Wecker. Für Telefone mit elektronisch erzeugtem Rufsignal sollte man die Rufzeit auf 1s erhöhen (und dann evtl. auch die Pause länger machen).&lt;br /&gt;
&lt;br /&gt;
; TALK: Der Sprechzustand wird erreicht, sobald beide Telefone abgenommen sind. Von hier geht es erst weiter, wenn beide Telefone aufgelegt sind. Das ist wichtig, weil sonst das Telefon, das als erstes aufgelegt wird, sofort wieder klingeln würde.&lt;br /&gt;
&lt;br /&gt;
Alle Zustandsübergänge finden auf einem festen 20ms Zeitraster statt - und immer maximal ein Übergang alle 20ms. Auch wenn beide Telefone gleichzeitig abgenommen werden, dauert es also bis zu 40ms, bis der Zustand &#039;&#039;&#039;TALK&#039;&#039;&#039; erreicht ist.&lt;br /&gt;
&lt;br /&gt;
=== Details ===&lt;br /&gt;
&lt;br /&gt;
Timer0 des µC arbeitet im CTC Modus und liefert einen Interrupt mit 50Hz (entsprechend dem 20ms Basis-Zeitraster). Aus diesem wird einerseits die Zeitsteuerung abgeleitet. Andererseits wird die Output-Compare Einheit dazu verwendet, an Pin PB0 = OC0A das 25Hz Rufsignal zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
Pin PB3 = ADC3 wird als Analogeingang verwendet. Der ADC läuft mit 150kHz Basistakt und unter Verwendung der internen 1.1V Referenz. Es werden immer 4 ADC-Messungen hintereinander gemacht und gemittelt. Die Schaltschwellen sind per #define am Programmanfang festgelegt und werden zur Compilezeit ausgerechnet.&lt;br /&gt;
&lt;br /&gt;
Ursprünglich hatte ich vor, ADC2 zur Kalibrierung zu verwenden, indem ich eine Spannung von ca. 1V (abgeleitet von den stabilisierten 5V) messe und daraus den exakten Wert der Referenzspannung bestimme. Das hat sich als unnötig erwiesen. Alle getesteten Exemplare des ATTiny13A lagen sehr nahe an den nominalen 1.1V. Außerdem ist bei den Schaltschwellen genügend &amp;quot;Luft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Um den Stromverbrauch zu senken, arbeitet der µC mit lediglich 600kHz Taktfrequenz (da geht sicher noch weniger) und verbringt die meiste Zeit im IDLE Schlafzustand. Der Watchdog ist aktiviert mit 1s Timeout - nur für den Fall der Fälle.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Verkabelung ==&lt;br /&gt;
&lt;br /&gt;
Die gesamte Schaltung paßt mühelos auf eine Platine 70x50mm&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;. Das Platinenlayout im unten verlinkten Archiv ist für das Gehäuse [http://www.donau-elektronik.de/shop/product_info.php?products_id=2177 KG28M von Donau electronic] gemacht (z.B. [https://www.pollin.de/p/kunststoff-kleingehaeuse-donau-elektronik-kg28m-schwarz-460291 bei Pollin]).&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_brd.png|mitte|300px]]&lt;br /&gt;
[[Datei:haustelefon_brd.jpg|mitte|350px]]&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}Die extra Löcher auf der Platine dienen der Zugentlastung der fest angeschlossenen Kabel mit Kabelbindern. Das Netzteil ist ein AC-Steckernetzteil mit ca. 16V (meins ist spezifiziert mit 15.7V/185mA). Mittlerweile scheinen solche Netzteile nicht mehr kaufbar zu sein. Dann kann man entweder selber einen Netztrafo in ein Steckergehäuse bauen. Oder den Trafo gleich mit auf der Platine unterbringen. Der kleinste handelsübliche Trafo (1.1VA) reicht.&lt;br /&gt;
&lt;br /&gt;
Für den Anschluß der Telefone habe ich eine LSA+ Klemmleiste (X2) vorgesehen. Die Telefone können wahlweise mit zwei Doppeladern angeschlossen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k1.svg|600px|Doppelader]]&lt;br /&gt;
&lt;br /&gt;
oder man verwendet eine vorhandene Erdverbindung (z.B. Wasserleitung):&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k2.svg|600px|Einzelader]]&lt;br /&gt;
&lt;br /&gt;
im letzteren Fall muß die Wechselspannung zur Speisung des Haustelefons natürlich potentialfrei sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/attachment/352054/haustelefon.zip Bauunterlagen: Sourcecode, Schaltplan, Platinenlayout] &lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/442189 zugehöriger Thread im Forum &amp;quot;Projekte und Code&amp;quot;]&lt;br /&gt;
* [[Analoger Telefonanschluss]]&lt;br /&gt;
* [http://www.norbertmoch.de/_elektronik/telefon/telefonanlage_fuer_2_teilnehmer_elektronisch/telefonanlage_fuer_2_teilnehmer_elektronisch.htm Norbert Moch inspirierte mich bezüglich der Hardware]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte ]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98127</id>
		<title>Haustelefon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98127"/>
		<updated>2018-01-05T15:01:29Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Schaltplan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Haustelefon ist eine minimalistische Telefonanlage, die zwei Analogtelefone miteinander verbindet. So kann man mit einfachen Mitteln eine Sprechverbindung zwischen z.B. zwei Kinderzimmern oder zwischen Wohnung und Dachboden/Keller herstellen.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
* Verwendung herkömmlicher Analogtelefone (POTS), sowohl historische mit elektromechanischem Wecker als auch moderne mit elektronischem Rufsignal funktionieren&lt;br /&gt;
* die Wählfunktion der Telefone wird nicht benötigt; sobald ein Telefon abgehoben wird, klingelt das andere&lt;br /&gt;
* die beiden Telefone und die Steuerung bilden elektrisch einen Ring; wahlweise kann eine Doppelader zu jedem Telefon gelegt werden oder man verwendet eine vorhandene Erde als Rückleiter&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzipschaltbild ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_bs.svg|left|mitte|Blockschaltbild]]&lt;br /&gt;
&lt;br /&gt;
Für den Sprechbetrieb liegen die beiden Telefone in Reihe an einer Gleichspannung von 18V. In Verbindung mit dem Innenwiderstand der Telefone (ca. 600R) fließt dabei ein Schleifenstrom von ca. 30mA.&lt;br /&gt;
&lt;br /&gt;
Ist ein Telefon aufgelegt, bildet ein Widerstand von 33K einen hochohmigen Nebenschluß. Durch das Einspeisen eines Teststroms kann erkannt werden, ob beide Telefone aufgelegt sind, ob eins aufgelegt und das andere abgenommen ist oder ob beide abgenommen sind.&lt;br /&gt;
&lt;br /&gt;
Der Ruftongenerator legt eine Wechselspannung von 90Vss an die Reihenschaltung eines aufgelegten und eines abgenommenen Telefons. Im aufgelegten Telefon läutet der Wecker, im abgenommenen Telefon sind die 25Hz Impulse als Klacken hörbar.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_s.svg|800px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan läßt sich grob in 4 Teile gliedern:&lt;br /&gt;
&lt;br /&gt;
; Rohspannungserzeugung: Brückengleichrichter BR1 und Siebkondensator C4 erzeugen eine Spannung von ca. 30V, die für die Sprechspannung und die Versorgung des µC verwendet wird. LD1 dient als Einschaltkontrolle. Die Dioden D1-D3 und Kondensatoren C1-C3 bilden eine unvollständige Villard-Kaskade und erzeugen eine Spannung von ca. 90V. Diese Spannung wird einerseits für das Rufsignal verwendet, andererseits wird über R6-R8 ein Teststrom von ca. 0.6mA in die Schleife injiziert, um den Zustand der Telefone detektieren zu können. ZD2 und C5 dienen der Stabilisierung bzw. Filterung des Teststroms.&lt;br /&gt;
&lt;br /&gt;
; Stabilisierung Sprechspannung: R1, ZD1 und LD1 erzeugen eine stabile Spannung von ca. 20V an der Basis von T1. T1 arbeitet als Emitterfolger und erzeugt so die Sprechspannung von ca. 18V nach der Entkopplungsdiode D6. Diese Spannung sollte möglichst stabil sein, insbesondere würde ein überlagertes Brummen in den Telefonen zu hören sein.&lt;br /&gt;
&lt;br /&gt;
; Rufsignalgenerator: Die Bauteile R5, T5, D5 sowie R4, T4, D4 und D7 bilden den Rufsignalgenerator. T2 und T3 realisieren die Umschaltung zwischen Sprechzustand (T2 sperrt, T3 leitet) und Rufzustand (T2 leitet, T3 sperrt). Im Rufzustand kann durch Ansteuern von T4 mit einem 25Hz Rechtecksignal die Spannung an den Telefonen zwischen 90V und 0V umgeschaltet werden, was den Wecker des aufgelegten Telefons läuten läßt. T4 zieht dazu einerseits über D4 die Spannung über den Telefonen auf GND, andererseits über D7 die Spannung an der Basis von T7. T4 und T5 leiten so abwechselnd.&lt;br /&gt;
&lt;br /&gt;
; Steuerung: Der ATTiny13 bildet in Verbindung mit den Transistoren T2 und T4 die Steuerung. Dazu wertet er die Spannung am Punkt &amp;quot;line&amp;quot; aus. Wenn beide Telefone aufgelegt sind, führt der Teststrom von 0.6mA in Verbindung mit den Widerständen R11 und R12 zu einer Spannung von ca. 40V. Wird eines der Telefone abgenommen, überbrückt es &amp;quot;seinen&amp;quot; Widerstand und die Spannung fällt auf ca. 31V. Wird auch das zweite Telefon abgenommen, fällt die Spannung auf 18V. Mit R9 und R10 wird die Spannung so weit verringert, daß sie der ADC des µC erfassen kann. Zwei Ausgänge des µC steuern über T2 die Umschaltung zwischen Sprech- und Rufzustand (Signal &amp;quot;talk&amp;quot;) und mittels T4 den Rufsignalgenerator (Signal &amp;quot;ring&amp;quot;). Im Sprechzustand steuert T3 durch und zieht die Spannung an der Basis von T5 auf GND. Dadurch bleiben beide Transistoren des Rufsignalgenerators gesperrt.&lt;br /&gt;
&lt;br /&gt;
Sonstiges: Spannungsregler U1 stellt die Versorgung von 5V für den µC bereit. Die LED LD2 hat reine Diagnosefunktion und kann bei Nichtbedarf auch weggelassen (durch eine Drahtbrücke ersetzt) werden. Im Ruhezustand glimmt LD2 schwach grün. Beim Rufen blinkt LD2 schnell rot/grün. Beim Sprechen leuchtet LD2 kräftig grün.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzip ===&lt;br /&gt;
&lt;br /&gt;
Die Software ist als [https://de.wikipedia.org/wiki/Endlicher_Automat endlicher Automat] (&#039;&#039;state machine&#039;&#039;) konzipiert. Der Einfachheit halber wurde der Rufzustand in zwei Teilzustände aufgeteilt: &#039;&#039;&#039;RING&#039;&#039;&#039; für aktives Rufen und &#039;&#039;&#039;WAIT&#039;&#039;&#039; für das Warten darauf, daß entweder der gerufene Teilnehmer abnimmt oder der rufende Teilnehmer auflegt. So haben wir insgesamt 4 Zustände:&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_sm.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
; IDLE: Beide Telefone sind aufgelegt. Von hier geht es weiter zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;, sobald die Spannung am Punkt &amp;quot;line&amp;quot; unter 33V fällt. Das geschieht, wenn ein Telefon abgenommen wird (oder beide).&lt;br /&gt;
&lt;br /&gt;
; WAIT: Das ist der passive Teil des Rufzustands. Hier wird geprüft ob auch das zweite Telefon abgenommen wurde (Spannung an &amp;quot;line&amp;quot; &amp;lt; 20V) oder ob das erste Telefon wieder aufgelegt wurde (Spannung an &amp;quot;line&amp;quot; &amp;gt; 37V). Es ist wichtig, daß zwischen den Übergängen &#039;&#039;&#039;IDLE&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;WAIT&#039;&#039;&#039; und &#039;&#039;&#039;WAIT&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;IDLE&#039;&#039;&#039; eine Hysterese liegt. Sonst könnte die Steuerung unkontrolliert zwischen beiden Zuständen springen. Zeitgesteuert geht es von hier zum aktiven Rufzustand.&lt;br /&gt;
&lt;br /&gt;
; RING: In diesem Zustand klingelt das aufgelegte Telefon. Eine Messung des Schleifenzustands ist hier nicht möglich. Der einzige Weg aus diesem Zustand ist über die Zeitsteuerung zurück zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;. Die Wartezeiten bestimmen dabei den Rhythmus (Ruf- und Pausenzeit) des Rufsignals. Die angegebenen 0.4s zu 1.6s funktionieren gut für elektromechanische Wecker. Für Telefone mit elektronisch erzeugtem Rufsignal sollte man die Rufzeit auf 1s erhöhen (und dann evtl. auch die Pause länger machen).&lt;br /&gt;
&lt;br /&gt;
; TALK: Der Sprechzustand wird erreicht, sobald beide Telefone abgenommen sind. Von hier geht es erst weiter, wenn beide Telefone aufgelegt sind. Das ist wichtig, weil sonst das Telefon, das als erstes aufgelegt wird, sofort wieder klingeln würde.&lt;br /&gt;
&lt;br /&gt;
Alle Zustandsübergänge finden auf einem festen 20ms Zeitraster statt - und immer maximal ein Übergang alle 20ms. Auch wenn beide Telefone gleichzeitig abgenommen werden, dauert es also bis zu 40ms, bis der Zustand &#039;&#039;&#039;TALK&#039;&#039;&#039; erreicht ist.&lt;br /&gt;
&lt;br /&gt;
=== Details ===&lt;br /&gt;
&lt;br /&gt;
Timer0 des µC arbeitet im CTC Modus und liefert einen Interrupt mit 50Hz (entsprechend dem 20ms Basis-Zeitraster). Aus diesem wird einerseits die Zeitsteuerung abgeleitet. Andererseits wird die Output-Compare Einheit dazu verwendet, an Pin PB0 = OC0A das 25Hz Rufsignal zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
Pin PB3 = ADC3 wird als Analogeingang verwendet. Der ADC läuft mit 150kHz Basistakt und unter Verwendung der internen 1.1V Referenz. Es werden immer 4 ADC-Messungen hintereinander gemacht und gemittelt. Die Schaltschwellen sind per #define am Programmanfang festgelegt und werden zur Compilezeit ausgerechnet.&lt;br /&gt;
&lt;br /&gt;
Ursprünglich hatte ich vor, ADC2 zur Kalibrierung zu verwenden, indem ich eine Spannung von ca. 1V (abgeleitet von den stabilisierten 5V) messe und daraus den exakten Wert der Referenzspannung bestimme. Das hat sich als unnötig erwiesen. Alle getesteten Exemplare des ATTiny13A lagen sehr nahe an den nominalen 1.1V. Außerdem ist bei den Schaltschwellen genügend &amp;quot;Luft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Um den Stromverbrauch zu senken, arbeitet der µC mit lediglich 600kHz Taktfrequenz (da geht sicher noch weniger) und verbringt die meiste Zeit im IDLE Schlafzustand. Der Watchdog ist aktiviert mit 1s Timeout - nur für den Fall der Fälle.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Verkabelung ==&lt;br /&gt;
&lt;br /&gt;
Die gesamte Schaltung paßt mühelos auf eine Platine 70x50mm&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;. Das Platinenlayout im unten verlinkten Archiv ist für das Gehäuse [http://www.donau-elektronik.de/shop/product_info.php?products_id=2177 KG28M von Donau electronic] gemacht (z.B. [https://www.pollin.de/p/kunststoff-kleingehaeuse-donau-elektronik-kg28m-schwarz-460291 bei Pollin]).&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_brd.png|mitte|300px]]&lt;br /&gt;
[[Datei:haustelefon_brd.jpg|mitte|350px]]&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}Die extra Löcher auf der Platine dienen der Zugentlastung der fest angeschlossenen Kabel mit Kabelbindern. Das Netzteil ist ein AC-Steckernetzteil mit ca. 16V (meins ist spezifiziert mit 15.7V/185mA). Mittlerweile scheinen solche Netzteile nicht mehr kaufbar zu sein. Dann kann man entweder selber einen Netztrafo in ein Steckergehäuse bauen. Oder den Trafo gleich mit auf der Platine unterbringen. Der kleinste handelsübliche Trafo (1.1VA) reicht.&lt;br /&gt;
&lt;br /&gt;
Für den Anschluß der Telefone habe ich eine LSA+ Klemmleiste (X2) vorgesehen. Die Telefone können wahlweise mit zwei Doppeladern angeschlossen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k1.svg|600px|Doppelader]]&lt;br /&gt;
&lt;br /&gt;
oder man verwendet eine vorhandene Erdverbindung (z.B. Wasserleitung):&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k2.svg|600px|Einzelader]]&lt;br /&gt;
&lt;br /&gt;
im letzteren Fall muß die Wechselspannung zur Speisung des Haustelefons natürlich potentialfrei sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/attachment/352054/haustelefon.zip Bauunterlagen: Sourcecode, Schaltplan, Platinenlayout] &lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/442189 zugehöriger Thread im Forum &amp;quot;Projekte und Code&amp;quot;]&lt;br /&gt;
* [[Analoger Telefonanschluss]]&lt;br /&gt;
* [http://www.norbertmoch.de/_elektronik/telefon/telefonanlage_fuer_2_teilnehmer_elektronisch/telefonanlage_fuer_2_teilnehmer_elektronisch.htm Norbert Moch inspirierte mich bezüglich der Hardware]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte ]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98126</id>
		<title>Haustelefon</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Haustelefon&amp;diff=98126"/>
		<updated>2018-01-05T14:59:38Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Die Seite wurde neu angelegt: „&amp;#039;&amp;#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&amp;#039;&amp;#039;  Das Haustelefon ist eine minimalistische Telefonanlage, die zwei Analogtelefon…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Haustelefon ist eine minimalistische Telefonanlage, die zwei Analogtelefone miteinander verbindet. So kann man mit einfachen Mitteln eine Sprechverbindung zwischen z.B. zwei Kinderzimmern oder zwischen Wohnung und Dachboden/Keller herstellen.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
* Verwendung herkömmlicher Analogtelefone (POTS), sowohl historische mit elektromechanischem Wecker als auch moderne mit elektronischem Rufsignal funktionieren&lt;br /&gt;
* die Wählfunktion der Telefone wird nicht benötigt; sobald ein Telefon abgehoben wird, klingelt das andere&lt;br /&gt;
* die beiden Telefone und die Steuerung bilden elektrisch einen Ring; wahlweise kann eine Doppelader zu jedem Telefon gelegt werden oder man verwendet eine vorhandene Erde als Rückleiter&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzipschaltbild ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_bs.svg|left|mitte|Blockschaltbild]]&lt;br /&gt;
&lt;br /&gt;
Für den Sprechbetrieb liegen die beiden Telefone in Reihe an einer Gleichspannung von 18V. In Verbindung mit dem Innenwiderstand der Telefone (ca. 600R) fließt dabei ein Schleifenstrom von ca. 30mA.&lt;br /&gt;
&lt;br /&gt;
Ist ein Telefon aufgelegt, bildet ein Widerstand von 33K einen hochohmigen Nebenschluß. Durch das Einspeisen eines Teststroms kann erkannt werden, ob beide Telefone aufgelegt sind, ob eins aufgelegt und das andere abgenommen ist oder ob beide abgenommen sind.&lt;br /&gt;
&lt;br /&gt;
Der Ruftongenerator legt eine Wechselspannung von 90Vss an die Reihenschaltung eines aufgelegten und eines abgenommenen Telefons. Im aufgelegten Telefon läutet der Wecker, im abgenommenen Telefon sind die 25Hz Impulse als Klacken hörbar.&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}&lt;br /&gt;
&lt;br /&gt;
=== Schaltplan ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_s.svg|750px|Schaltplan]]&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan läßt sich grob in 4 Teile gliedern:&lt;br /&gt;
&lt;br /&gt;
; Rohspannungserzeugung: Brückengleichrichter BR1 und Siebkondensator C4 erzeugen eine Spannung von ca. 30V, die für die Sprechspannung und die Versorgung des µC verwendet wird. LD1 dient als Einschaltkontrolle. Die Dioden D1-D3 und Kondensatoren C1-C3 bilden eine unvollständige Villard-Kaskade und erzeugen eine Spannung von ca. 90V. Diese Spannung wird einerseits für das Rufsignal verwendet, andererseits wird über R6-R8 ein Teststrom von ca. 0.6mA in die Schleife injiziert, um den Zustand der Telefone detektieren zu können. ZD2 und C5 dienen der Stabilisierung bzw. Filterung des Teststroms.&lt;br /&gt;
&lt;br /&gt;
; Stabilisierung Sprechspannung: R1, ZD1 und LD1 erzeugen eine stabile Spannung von ca. 20V an der Basis von T1. T1 arbeitet als Emitterfolger und erzeugt so die Sprechspannung von ca. 18V nach der Entkopplungsdiode D6. Diese Spannung sollte möglichst stabil sein, insbesondere würde ein überlagertes Brummen in den Telefonen zu hören sein.&lt;br /&gt;
&lt;br /&gt;
; Rufsignalgenerator: Die Bauteile R5, T5, D5 sowie R4, T4, D4 und D7 bilden den Rufsignalgenerator. T2 und T3 realisieren die Umschaltung zwischen Sprechzustand (T2 sperrt, T3 leitet) und Rufzustand (T2 leitet, T3 sperrt). Im Rufzustand kann durch Ansteuern von T4 mit einem 25Hz Rechtecksignal die Spannung an den Telefonen zwischen 90V und 0V umgeschaltet werden, was den Wecker des aufgelegten Telefons läuten läßt. T4 zieht dazu einerseits über D4 die Spannung über den Telefonen auf GND, andererseits über D7 die Spannung an der Basis von T7. T4 und T5 leiten so abwechselnd.&lt;br /&gt;
&lt;br /&gt;
; Steuerung: Der ATTiny13 bildet in Verbindung mit den Transistoren T2 und T4 die Steuerung. Dazu wertet er die Spannung am Punkt &amp;quot;line&amp;quot; aus. Wenn beide Telefone aufgelegt sind, führt der Teststrom von 0.6mA in Verbindung mit den Widerständen R11 und R12 zu einer Spannung von ca. 40V. Wird eines der Telefone abgenommen, überbrückt es &amp;quot;seinen&amp;quot; Widerstand und die Spannung fällt auf ca. 31V. Wird auch das zweite Telefon abgenommen, fällt die Spannung auf 18V. Mit R9 und R10 wird die Spannung so weit verringert, daß sie der ADC des µC erfassen kann. Zwei Ausgänge des µC steuern über T2 die Umschaltung zwischen Sprech- und Rufzustand (Signal &amp;quot;talk&amp;quot;) und mittels T4 den Rufsignalgenerator (Signal &amp;quot;ring&amp;quot;). Im Sprechzustand steuert T3 durch und zieht die Spannung an der Basis von T5 auf GND. Dadurch bleiben beide Transistoren des Rufsignalgenerators gesperrt.&lt;br /&gt;
&lt;br /&gt;
Sonstiges: Spannungsregler U1 stellt die Versorgung von 5V für den µC bereit. Die LED LD2 hat reine Diagnosefunktion und kann bei Nichtbedarf auch weggelassen (durch eine Drahtbrücke ersetzt) werden. Im Ruhezustand glimmt LD2 schwach grün. Beim Rufen blinkt LD2 schnell rot/grün. Beim Sprechen leuchtet LD2 kräftig grün.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Prinzip ===&lt;br /&gt;
&lt;br /&gt;
Die Software ist als [https://de.wikipedia.org/wiki/Endlicher_Automat endlicher Automat] (&#039;&#039;state machine&#039;&#039;) konzipiert. Der Einfachheit halber wurde der Rufzustand in zwei Teilzustände aufgeteilt: &#039;&#039;&#039;RING&#039;&#039;&#039; für aktives Rufen und &#039;&#039;&#039;WAIT&#039;&#039;&#039; für das Warten darauf, daß entweder der gerufene Teilnehmer abnimmt oder der rufende Teilnehmer auflegt. So haben wir insgesamt 4 Zustände:&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_sm.svg|600px]]&lt;br /&gt;
&lt;br /&gt;
; IDLE: Beide Telefone sind aufgelegt. Von hier geht es weiter zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;, sobald die Spannung am Punkt &amp;quot;line&amp;quot; unter 33V fällt. Das geschieht, wenn ein Telefon abgenommen wird (oder beide).&lt;br /&gt;
&lt;br /&gt;
; WAIT: Das ist der passive Teil des Rufzustands. Hier wird geprüft ob auch das zweite Telefon abgenommen wurde (Spannung an &amp;quot;line&amp;quot; &amp;lt; 20V) oder ob das erste Telefon wieder aufgelegt wurde (Spannung an &amp;quot;line&amp;quot; &amp;gt; 37V). Es ist wichtig, daß zwischen den Übergängen &#039;&#039;&#039;IDLE&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;WAIT&#039;&#039;&#039; und &#039;&#039;&#039;WAIT&#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039;IDLE&#039;&#039;&#039; eine Hysterese liegt. Sonst könnte die Steuerung unkontrolliert zwischen beiden Zuständen springen. Zeitgesteuert geht es von hier zum aktiven Rufzustand.&lt;br /&gt;
&lt;br /&gt;
; RING: In diesem Zustand klingelt das aufgelegte Telefon. Eine Messung des Schleifenzustands ist hier nicht möglich. Der einzige Weg aus diesem Zustand ist über die Zeitsteuerung zurück zu &#039;&#039;&#039;WAIT&#039;&#039;&#039;. Die Wartezeiten bestimmen dabei den Rhythmus (Ruf- und Pausenzeit) des Rufsignals. Die angegebenen 0.4s zu 1.6s funktionieren gut für elektromechanische Wecker. Für Telefone mit elektronisch erzeugtem Rufsignal sollte man die Rufzeit auf 1s erhöhen (und dann evtl. auch die Pause länger machen).&lt;br /&gt;
&lt;br /&gt;
; TALK: Der Sprechzustand wird erreicht, sobald beide Telefone abgenommen sind. Von hier geht es erst weiter, wenn beide Telefone aufgelegt sind. Das ist wichtig, weil sonst das Telefon, das als erstes aufgelegt wird, sofort wieder klingeln würde.&lt;br /&gt;
&lt;br /&gt;
Alle Zustandsübergänge finden auf einem festen 20ms Zeitraster statt - und immer maximal ein Übergang alle 20ms. Auch wenn beide Telefone gleichzeitig abgenommen werden, dauert es also bis zu 40ms, bis der Zustand &#039;&#039;&#039;TALK&#039;&#039;&#039; erreicht ist.&lt;br /&gt;
&lt;br /&gt;
=== Details ===&lt;br /&gt;
&lt;br /&gt;
Timer0 des µC arbeitet im CTC Modus und liefert einen Interrupt mit 50Hz (entsprechend dem 20ms Basis-Zeitraster). Aus diesem wird einerseits die Zeitsteuerung abgeleitet. Andererseits wird die Output-Compare Einheit dazu verwendet, an Pin PB0 = OC0A das 25Hz Rufsignal zu erzeugen.&lt;br /&gt;
&lt;br /&gt;
Pin PB3 = ADC3 wird als Analogeingang verwendet. Der ADC läuft mit 150kHz Basistakt und unter Verwendung der internen 1.1V Referenz. Es werden immer 4 ADC-Messungen hintereinander gemacht und gemittelt. Die Schaltschwellen sind per #define am Programmanfang festgelegt und werden zur Compilezeit ausgerechnet.&lt;br /&gt;
&lt;br /&gt;
Ursprünglich hatte ich vor, ADC2 zur Kalibrierung zu verwenden, indem ich eine Spannung von ca. 1V (abgeleitet von den stabilisierten 5V) messe und daraus den exakten Wert der Referenzspannung bestimme. Das hat sich als unnötig erwiesen. Alle getesteten Exemplare des ATTiny13A lagen sehr nahe an den nominalen 1.1V. Außerdem ist bei den Schaltschwellen genügend &amp;quot;Luft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Um den Stromverbrauch zu senken, arbeitet der µC mit lediglich 600kHz Taktfrequenz (da geht sicher noch weniger) und verbringt die meiste Zeit im IDLE Schlafzustand. Der Watchdog ist aktiviert mit 1s Timeout - nur für den Fall der Fälle.&lt;br /&gt;
&lt;br /&gt;
== Aufbau und Verkabelung ==&lt;br /&gt;
&lt;br /&gt;
Die gesamte Schaltung paßt mühelos auf eine Platine 70x50mm&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;. Das Platinenlayout im unten verlinkten Archiv ist für das Gehäuse [http://www.donau-elektronik.de/shop/product_info.php?products_id=2177 KG28M von Donau electronic] gemacht (z.B. [https://www.pollin.de/p/kunststoff-kleingehaeuse-donau-elektronik-kg28m-schwarz-460291 bei Pollin]).&lt;br /&gt;
&lt;br /&gt;
[[Datei:haustelefon_brd.png|mitte|300px]]&lt;br /&gt;
[[Datei:haustelefon_brd.jpg|mitte|350px]]&lt;br /&gt;
&lt;br /&gt;
{{Absatz}}Die extra Löcher auf der Platine dienen der Zugentlastung der fest angeschlossenen Kabel mit Kabelbindern. Das Netzteil ist ein AC-Steckernetzteil mit ca. 16V (meins ist spezifiziert mit 15.7V/185mA). Mittlerweile scheinen solche Netzteile nicht mehr kaufbar zu sein. Dann kann man entweder selber einen Netztrafo in ein Steckergehäuse bauen. Oder den Trafo gleich mit auf der Platine unterbringen. Der kleinste handelsübliche Trafo (1.1VA) reicht.&lt;br /&gt;
&lt;br /&gt;
Für den Anschluß der Telefone habe ich eine LSA+ Klemmleiste (X2) vorgesehen. Die Telefone können wahlweise mit zwei Doppeladern angeschlossen werden:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k1.svg|600px|Doppelader]]&lt;br /&gt;
&lt;br /&gt;
oder man verwendet eine vorhandene Erdverbindung (z.B. Wasserleitung):&lt;br /&gt;
&lt;br /&gt;
[[Datei:Haustelefon_k2.svg|600px|Einzelader]]&lt;br /&gt;
&lt;br /&gt;
im letzteren Fall muß die Wechselspannung zur Speisung des Haustelefons natürlich potentialfrei sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/attachment/352054/haustelefon.zip Bauunterlagen: Sourcecode, Schaltplan, Platinenlayout] &lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mikrocontroller.net/topic/442189 zugehöriger Thread im Forum &amp;quot;Projekte und Code&amp;quot;]&lt;br /&gt;
* [[Analoger Telefonanschluss]]&lt;br /&gt;
* [http://www.norbertmoch.de/_elektronik/telefon/telefonanlage_fuer_2_teilnehmer_elektronisch/telefonanlage_fuer_2_teilnehmer_elektronisch.htm Norbert Moch inspirierte mich bezüglich der Hardware]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte ]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_k2.svg&amp;diff=98124</id>
		<title>Datei:Haustelefon k2.svg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_k2.svg&amp;diff=98124"/>
		<updated>2018-01-05T14:21:27Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_k1.svg&amp;diff=98123</id>
		<title>Datei:Haustelefon k1.svg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_k1.svg&amp;diff=98123"/>
		<updated>2018-01-05T14:21:08Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_bs.svg&amp;diff=98122</id>
		<title>Datei:Haustelefon bs.svg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_bs.svg&amp;diff=98122"/>
		<updated>2018-01-05T14:10:54Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: A-za-z0-9 lud eine neue Version von Datei:Haustelefon bs.svg hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_bs.svg&amp;diff=98121</id>
		<title>Datei:Haustelefon bs.svg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_bs.svg&amp;diff=98121"/>
		<updated>2018-01-05T14:02:27Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_sm.svg&amp;diff=98120</id>
		<title>Datei:Haustelefon sm.svg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_sm.svg&amp;diff=98120"/>
		<updated>2018-01-05T13:48:24Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_brd.jpg&amp;diff=98117</id>
		<title>Datei:Haustelefon brd.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_brd.jpg&amp;diff=98117"/>
		<updated>2018-01-05T13:00:48Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_brd.png&amp;diff=98116</id>
		<title>Datei:Haustelefon brd.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_brd.png&amp;diff=98116"/>
		<updated>2018-01-05T12:58:32Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_s.svg&amp;diff=98115</id>
		<title>Datei:Haustelefon s.svg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Haustelefon_s.svg&amp;diff=98115"/>
		<updated>2018-01-05T10:35:02Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Schaltplan Haustelefon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schaltplan Haustelefon&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Kondensator&amp;diff=92029</id>
		<title>Kondensator</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Kondensator&amp;diff=92029"/>
		<updated>2016-02-25T12:01:12Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Spannungsfestigkeit zweistellig&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ein Kondensator ist ein passives Bauteil mit zwei Anschlüssen, welches elektrische Energie in einem elektrischen Feld speichert. Die charakteristische Größe, die den Kondesator beschreibt ist die Kapazität F.&lt;br /&gt;
Dieses Bauteil besteht aus zwei Flächen gut leitfähigem Materials, die jedoch voneinander isoliert sind. Das Isolationsmaterial ist ein Dielektrikum und verleiht dem Kondensator je nach Materialauswahl stark unterschiedliche Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
== Aufbau eines Kondensators ==&lt;br /&gt;
Wie oben beschrieben besteht ein Kondensator immer aus zwei leitfähigen - voneinander isolierten - Flächen. Je größer die Fläche, je geringer der Abstand der Flächen, und je höher das  relativer Permittivität \varepsilon_r - das Dielektrikum -  desto höher ist die Kapazität des Bauteiles. Der einfachste Kondensator besteht aus zwei voneinander isolierten Metallplatten, zwischen denen sich Luft als &amp;quot;Dielektrikum&amp;quot; befindet. Um die Fläche und damit die Kapazität zu vergrößern gibt es verschiedene Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
=== Wickelkondensator ===&lt;br /&gt;
Die einfachste Methode die Flächen zu vergrößern ist es, zwei leitfähige Folien mit einem Isolationsmaterial dazwischen aufzuwickeln. Diese Methode wird für so ziemlich alle Kondensatortypen verwendet. Manchmal wird der Wickel nach der Herstellung flachgepresst, um das Volumen zu optimieren.&lt;br /&gt;
&lt;br /&gt;
=== Schichtkondensator ===&lt;br /&gt;
Diese Aufbauart wird durch &amp;quot;stapeln&amp;quot; der unterschiedlichen Lagen erreicht. Verfahrenstechnisch ist dies oft wieder ein Wickel, jedoch meist auf bis zu 2 Meter durchmessenden Wickelrädern. Dieses ursprünglich von Siemens eingesetzte Verfahren wird auch aktuell noch verwendet, hauptsächlich für Folienkondensatoren bis in den mF-Bereich hinein. Nach dem Wickeln auf vieleckigen Räder wird der Folienstapel geschnitten und auf die gewünschte Größe = Kapazität getrennt.&lt;br /&gt;
&lt;br /&gt;
== Kondensatortypen ==&lt;br /&gt;
(Vakuum-, Glimmer- und Glaskondensatoren nicht berücksichtigt)&lt;br /&gt;
=== Keramik-Kondensator ===&lt;br /&gt;
Siehe auch den Artikel &#039;&#039;&#039;Keramikkondensator in [https://de.wikipedia.org/wiki/Keramikkondensator#Spannungsabh.C3.A4ngigkeit_der_Kapazit.C3.A4t Wikipedia]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Kerkos sind sogenannte &amp;quot;Vielschicht-Kondensatoren&amp;quot; die aus mehreren hundert Lagen einer isolierenden Keramik (Titandioxid+Bariumtitanat), und einer elektrisch leitfähigen Metallisierung bestehen (Aluminium &amp;amp; Magnesiumsilikate)bestehen.&lt;br /&gt;
Dieser Typ ist wie der Folienkondensator für höchste Frequenzen geeignet, hat eine sehr geringe Baugröße, eine gute Temperaturstabilität aber piezoelektrische Eigenschaften. Die Kapazität pro mm³ variiert je nach Dielektrikum Z5U, Y5V, X7R, C0 (in abnehmender Kapazitätsdichte) und ist sowohl abhängig von Temperatur als auch der angelegten Spannung.&lt;br /&gt;
&lt;br /&gt;
=== Folien-Kondensator ===&lt;br /&gt;
Siehe auch den Artikel &#039;&#039;&#039;Folienkondensator in [https://de.wikipedia.org/wiki/Kunststoff-Folienkondensator Wikipedia]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Unterschiedliche Folienarten verleihen dem Kondensator stark unterschiedliche Eigenschaften wie z.B. temperatur- und alterungsbeständigkeit, Verlustfaktor, Isolationswiderstand, und die obere Grenzfrequenz, um nur die wichtigsten zu nennen. Die Dicke der Metallisierung hingegen entscheidet über den maximal zulässigen Rippelstrom / Impulsstromfestigkeit und darüber, ob sich ein Kondensator &amp;quot;selbst heilen&amp;quot; kann, oder nicht. Das Verfahren der &amp;quot;Selbstheilung&amp;quot; funktioniert nur bei Metallisierungen, da es darauf beruht, daß die im C gespeicherte Energie den Metallbelag beim Durchschlag durch die Isolation verdampfen kann. Ist die Energie zu gering, wird nur wenig Metall um den Durchschlag verdampft, und der Kurzschluß bleibt bestehen. Ist die Energie zu hoch, wird der Kondensator thermisch zerstört. Hat der C den richigen Energiegehalt, verdampft direkt um die Durchschlagstelle herum bis zu einigen mm der Metallisierung, und die Fehlstelle ist wieder isoliert. Im Übrigen ist eine Parallelsschaltung aus vielen,als selbstheilenden C&#039;s nicht unbedingt mehr &amp;quot;selbstheilend&amp;quot; da der Energieeintrag dann aus dem Gesamtverbund kommt, und oft zu hoch ist um nur eine kleine Fläche verdampfen zu lassen.&lt;br /&gt;
Impulsstrom-feste Kondensatoren zeichnen sich durch hohe Schichtstärken der Metallisierung aus, oder verwenden statt der Metallbeschichtung direkt eine Metallfolie. Hier wäre normalerweise ein &amp;quot;selbstheilen&amp;quot; gleichbedeutend mit einem so hohen Energieeintrag, daß das Bauteil zerstört wird.&lt;br /&gt;
&lt;br /&gt;
Hier eine kleine Übersicht mit der Bitte um Vervollständigung.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Folien-Typ&#039;&#039;&#039;  || Polypropylen || Polystyren || Polycarbonat  ||Polyester|| Polystyrol  ||   Polyethylennaphthalat ||   Polytetrafluorethylen ||   Polyphenylensulfid    ||   Metallpapier   &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Markenname Folie&#039;&#039;&#039; || Hostalen || -   || Makrofol, Makroflex ||  Mylar, Hostaphan ||   Styroflex ||  Kaladex||  Teflon|| Tedur, Ryton|| Papier&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Abkürzung&#039;&#039;&#039; || PP || -  || PC||  PET ||  PS||  PEN||  PTFE|| PPS|| -  &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Typ&#039;&#039;&#039; || (F)KP, MKP || -   || KC, MKC ||  (F)KT, MKT  ||  -KS, MKS ||  (F)KN, MKN||  -|| (F)KI, MKI|| MP  &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Temperaturfestigkeit [°C]&#039;&#039;&#039; || ca 105 || -    || ca. 105 ||  125..150  ||  -  ||  150 ||  -|| 150 || 85  &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Toleranz ca. +/- [%]&#039;&#039;&#039; || 1 || 1   || -||  -  ||  -  ||  -||  -|| -|| 20  &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Grenzfrequenz ca. [kHz]&#039;&#039;&#039; || 100 || 400   || -||  -  ||  1000  ||  -||  -|| -|| -  &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Selbstheilend&#039;&#039;&#039; || ja || -  || -||  ja  ||  -  ||  -||  -|| -|| ja  &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Impulsbelastbarkeit&#039;&#039;&#039; || + || +   || ||  +  ||  -- ||  -||  -|| -|| +  &lt;br /&gt;
|}&lt;br /&gt;
(MK) = metallisierte Folie,  (F) = Metallbeläge z.B. Metallfolie (K) = Metallfolie+Kunststofffolie&lt;br /&gt;
 &lt;br /&gt;
=== Elektrolyt-Kondensator ===&lt;br /&gt;
Ein Elko unterscheidet sich hauptsächlich dadurch von anderen Kondensatoren, daß nur eine Elektrode aus einer Metallschicht besteht, die zweite aus einem festen, oder flüssigen Elektrolyten.&lt;br /&gt;
&lt;br /&gt;
Siehe auch den Artikel &#039;&#039;&#039;Elektrolytkondensator in [https://de.wikipedia.org/wiki/Elektrolytkondensator Wikipedia]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Fest-Elektrolyt ====&lt;br /&gt;
Diese Bauteile bestehen aus Polymeren, Metalloxiden, Braunstein, ... und sind wie die Elkos immer gepolt.&lt;br /&gt;
Als Metalloxide ist Tantal sehr, und Niob noch weniger verbreitet.&lt;br /&gt;
Takos sind &#039;&#039;&#039;SEHR&#039;&#039;&#039; empfindlich gegenüber schnellen Spannungsanstiegen bzw. Überspannung und sollten nie ohne Vorwiderstand direkt an einer niederohmigen Quelle (Batterie) geladen/betrieben werden. Takos verbrennen im Fehlerfall mit einer Stichflamme, daher empfiehlt es sich eine deutlich höhere Spannungsfestigkeit zu wählen und - bei direktem Anschluß an eine niederohmige Quelle - zusätzlich ein Lade-Vorwiderstand einzubauen. Treten zusätzlich hohe Temperaturen auf, ist die Spannungsfestigkeit mindestens zu verdoppeln.&lt;br /&gt;
Kondensatoren mit Niob statt Tantal sind weniger verbreitet, und noch sehr teuer. Ihr Vorteil ist z.B. die Unempfindlichkeit gegenüber schnellen Spannungsanstiegen, sie können direkt an jeder Quelle betrieben werden.&lt;br /&gt;
&lt;br /&gt;
==== Flüssig-Elektrolyt ====&lt;br /&gt;
Diese Bauteile bestehen aus zwei Lagen &#039;&#039;&#039;sehr stark angeätzter&#039;&#039;&#039; Aluminiumfolie - zur Vergrößerung der Oberfläche - und einem flüssigen (seltener &amp;quot;einem festen&amp;quot;) Elektrolyten. Die zweite Folie kontaktiert gleichzeitig den Elektrolyten. Der Elektrolyt ist häufig auf Alkoholen basierend, aus/mit Schwefelsäure oder Glykol.&lt;br /&gt;
Die Alufolie wird nach den ätzen anodisch oxidiert. Die Eloxal-Schicht ist mechanisch belastbar, und stellt die &#039;&#039;&#039;einzige&#039;&#039;&#039; Isolation zwischen den beiden Anschlüssen dar. Die Oxidation der Alufolie wird je nach Hersteller bei ca. 140..165% der Nennspannung durchgeführt. Die Oxidschicht baut sich durch den Elektrolyten bei langer Lagerung stark ab, daher sinkt die Spannungsfestigkeit eines Elkos mit seinem Alter. Alte Bauteile können - sofern noch Elektrolyt enthalten ist - durch spannungsrichtiges Anschließen an eine Spannungsquelle und langsamen erhöhen der Spannung bis über die Nennspannung hinaus wieder &amp;quot;formiert&amp;quot; werden. Achtung, hier besteht die Gefahr eines Kurzschlusses zwischen den Anschlüssen, daher hochohmigen Vorwiderstand verwenden!&lt;br /&gt;
Wird ein Elko verpolt betrieben, wird die Oxidschicht im Laufe der Zeit (Abhängig von Spannung und Temperatur) abgebaut, und der Kondensator schlägt durch.&lt;br /&gt;
&lt;br /&gt;
=== Doppelschicht-Kondensatoren ===&lt;br /&gt;
Siehe auch den Artikel &#039;&#039;&#039;Superkondensator in [https://de.wikipedia.org/wiki/Superkondensator Wikipedia]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Diese Bauteile werden unter Markennamen wie &amp;quot;Goldcap&amp;quot;, &amp;quot;Ultracap&amp;quot; oder &amp;quot;Supercap&amp;quot; vertrieben, besitzen meist ein flüssiges Elektrolyt haben aber nicht besonders viel mit den o.g. &amp;quot;Elektrolytkondensatoren&amp;quot; gemeinsam. Dieser Kondensator besitzt Eigenschaften eines Kondensators und einer Batterie. Der &amp;quot;Kondensator&amp;quot; ist hier aus (im Gegensatz zum Elko) zwei Lagen einer einseitig metallisierten Aktivkohle, einem Separator, und einem Elektrolyten. &lt;br /&gt;
Das verwendete Elektrolyt erfüllt unter definierten Betriebsbedingungen die Funktion eines zusätzlichen Dielektrikums, und trägt zusätzlich zur ohnehin schon sehr großen Fläche der Aktivkohle, durch seine extrem dünne Schichtdicke, zur sehr hohen Kapazität bei.&lt;br /&gt;
Im Gegensatz zu einer Batterie kann der Doppelschichtkondensator Energie sehr schnell aufnehmen und abgeben, und altert dabei nur im geringen Maße. 500000 Lade-/Entladezyklen sind erreichbar, wenn die Spannung pro Zelle nicht überschritten wird. Normal sind hier 2,3..2,5V.&lt;br /&gt;
&lt;br /&gt;
== Anwendungen ==&lt;br /&gt;
Hier wird für verschiedene Anwendungsfälle eine sinnvolle Lösung empfohlen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Anwendung&#039;&#039;&#039;  || &#039;&#039;&#039;Beispiel&#039;&#039;&#039; || &#039;&#039;&#039;Empfohlener Typ&#039;&#039;&#039;  ||&#039;&#039;&#039;Kommentar&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Stromversorgung || Netzteil|| Elko||&lt;br /&gt;
|- &lt;br /&gt;
| Stromversorgung || Zwischenkreis|| Elkos, Folienkondensatoren||&lt;br /&gt;
|-&lt;br /&gt;
| Datenerhalt || || Doppelschichtkondensator ||&lt;br /&gt;
|-&lt;br /&gt;
| Energiespeicher|| digitale Schaltungen|| Kerko || z.B. 47nF pro IC bzw. Vcc-Anschluß&lt;br /&gt;
|- &lt;br /&gt;
| Hohe Impulsenergie x00ms || Impulsschweißgerät, (capacitive discharge)|| Elko (Folie)||&lt;br /&gt;
|-&lt;br /&gt;
| Impulsfeste Kondensatoren || Coils shrinker, Coilgun, Railgun|| Folie||MKT10 oder noch besser FKT1&lt;br /&gt;
|-&lt;br /&gt;
| NF-Filter|| PWM als DAC || Tako/Elko/Kerko ||&lt;br /&gt;
|-&lt;br /&gt;
| HF-Filter|| Beispiel || Styroflex-Folie ||&lt;br /&gt;
|-&lt;br /&gt;
| Audio || Kopplung || Folie ||&lt;br /&gt;
|-&lt;br /&gt;
| Vorwiderstand || Motorkondensator || MP oder Folie ||&lt;br /&gt;
|-&lt;br /&gt;
| Vorwiderstand || Kondensatornetzteil|| Kerko/Folie || Achtung, nur X2-Typen!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mathematik zum Kondensator ==&lt;br /&gt;
&lt;br /&gt;
Die Größe eines Kondensators ist seine Kapazität (Formelzeichen &#039;&#039;C&#039;&#039;), die als Ladung (Formelzeichen &#039;&#039;Q&#039;&#039;) durch Spannung (Formelzeichen &#039;&#039;U&#039;&#039;) definiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C=\frac{Q}{U}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Einheit für die Kapazität ist Farad:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; [C]=F=\frac{As}{V}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reihenschaltung ===&lt;br /&gt;
&lt;br /&gt;
Für eine Reihenschaltung von &#039;&#039;n&#039;&#039; Kondensatoren gilt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{C_{ges}}=\frac{1}{C_1}+\frac{1}{C_2}+\dots+\frac{1}{C_n}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{ges}=U_1+U_2+\dots+U_n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{ges}=I_1=I_2=\dots=I_n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Parallelschaltung ===&lt;br /&gt;
&lt;br /&gt;
Für eine Parallelschaltung von &#039;&#039;n&#039;&#039; Kondensatoren gilt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_{ges}=C_1+C_2+\dots+C_n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;U_{ges}=U_1=U_2=\dots=U_n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{ges}=I_1+I_2+\dots+I_n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Gespeicherte Energie ===&lt;br /&gt;
&lt;br /&gt;
Die in einem Kondensator gespeicherte Energie lässt sich durch die Formel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W=\frac{C}{2} \cdot U^2 = \frac{1}{2 \cdot C} \cdot Q^2 = \frac{U}{2} \cdot Q &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
berechnen.&lt;br /&gt;
&lt;br /&gt;
== Praxis ==&lt;br /&gt;
&lt;br /&gt;
=== Polaritätszeichen ===&lt;br /&gt;
&lt;br /&gt;
Elektrolytkondensatoren (Elkos) sind (in der Regel) gepolt, d. h. Gleichspannungspegel müssen in einer vorgeschriebenen Polarität angelegt werden, damit das Dielektrikum nicht zerstört wird.  Bei Aluminium-Elkos wird dabei generell der Minuspol gekennzeichnet, bei kleinen Bauformen mit einem Strich, bei größeren Bauformen befinden sich u. U. auch noch Minuszeichen in diesem Strich eingebettet.  Bei Tantal-Kondensatoren hingegen wird immer der Pluspol gekennzeichnet (nicht nur bei den SMD-Bauformen, aber auch bei diesen).&lt;br /&gt;
&lt;br /&gt;
[[Bild:SMD-Elkos.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Die gezeigten Elkos haben folgende Werte:&lt;br /&gt;
&lt;br /&gt;
* 220 µF, Spannungsfestigkeit 6 V&lt;br /&gt;
* 100 µF (&amp;lt;math&amp;gt;10 \cdot 10^7&amp;lt;/math&amp;gt; pF), 16 V&lt;br /&gt;
* 22 µF, 10 V&lt;br /&gt;
* 1 µF, 35 V&lt;br /&gt;
* 2,2 µF (&amp;lt;math&amp;gt;22 \cdot 10^5&amp;lt;/math&amp;gt; pF), 10 V&lt;br /&gt;
&lt;br /&gt;
Die beim 100-µF-Kondensator zu findende Buchstabenschreibweise für die Spannungsfestigkeit ist wenig gebräuchlich, aber gelegentlich anzutreffen.  Die Zuordnung ist:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Buchstabe&#039;&#039;&#039;           ||  e  ||   G   ||   J   ||   A   ||   C   ||   D   ||   E   ||   V   ||   H   &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Spannungsfestigkeit&#039;&#039;&#039; || 2.5V || 4 V   || 6,3 V ||  10 V ||  16 V ||  20 V ||  25 V || 35 V || 50 V &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Spannungsfestigkeit kann auch durch eine zweistellige Kombination aus einer Ziffer und einem Buchstaben codiert sein:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Kombination&#039;&#039;&#039;         ||   0G  ||   0L  ||  0J   ||  1A   ||  1C   ||  1E &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Spannungsfestigkeit&#039;&#039;&#039; || 4,0 V || 5,5 V || 6,3 V ||  10 V ||  16 V ||  20 V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kombination&#039;&#039;&#039;         ||   1H  ||   1J  ||  1K   ||  2A   ||  2Q   ||  2B &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Spannungsfestigkeit&#039;&#039;&#039; ||  50 V ||  63 V ||  80 V || 100 V || 110 V || 125 V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kombination&#039;&#039;&#039;         ||   2C  ||   2Z  ||  2D   ||  2P   ||  2E   ||  2F&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Spannungsfestigkeit&#039;&#039;&#039; || 160 V || 180 V || 200 V || 220 V || 250 V || 315 V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kombination&#039;&#039;&#039;         ||   2V  ||   2G  ||  2W   ||  2H   ||  2J   ||  3A&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Spannungsfestigkeit&#039;&#039;&#039; || 350 V || 400 V || 450 V || 500 V || 630 V || 1000 V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Case Code&#039;&#039;&#039; (Bauform)      ||  A  ||  B  ||  C  ||  D   &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Länge&#039;&#039;&#039; (mm)               || 3,2 || 3,5 || 6,0 || 7,3 &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Breite&#039;&#039;&#039; (mm)              || 1,6 || 2,8 || 3,2 || 4,3 &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Höhe&#039;&#039;&#039; (mm)                || 1,6 || 1,9 || 2,5 || 2,8 &lt;br /&gt;
|-&lt;br /&gt;
|    Maßtoleranz (mm)            || 0,2 || 0,2 || 0,3 || 0,3  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Siebkondensator ===&lt;br /&gt;
&lt;br /&gt;
Der Siebkondensator sitzt hinter einem Gleichrichter und hat die Aufgabe, aus einer gleichgerichteten, pulsierenden Spannung, eine annähernd konstante Gleichspannung mit nur wenig Welligkeit (engl. Ripple) zu machen. Er wird periodisch geladen und muss während der Ladepausen, wenn die Eingangssspannung vor dem Gleichrichter kleiner als die Ausgangsspannung ist, den Ausgang mit Strom versorgen. Man findet ihn in allen klassischen Netzteilen mit 50Hz Trafo. Als Daumenregel kann man sich merken, dass man pro 1A Ausgangsstrom ca. 10mF braucht, um eine Welligkeit von ca. 1Vpp zu erreichen.&lt;br /&gt;
&lt;br /&gt;
Einen Siebkondensator findet man auch am Ausgang von Schaltnetzteilen, seine Aufgabe ist dort die gleiche. Allerdings sind die Schaltfrequenzen deutlich höher, typisch 50-500kHz. Darum muss dieser Kondensator einen besonders kleinen, effektiven Innenwiderstand besitzen (engl. ESR, Equivalent Series Resistance).&lt;br /&gt;
&lt;br /&gt;
=== Entkoppelkondensator ===&lt;br /&gt;
&lt;br /&gt;
Der Entkoppelkondensator hat die Aufgabe, die Versorgungsspannung nahe an einem IC für hochfrequente Ströme zu puffern (entkoppeln, engl. decoupling). Schnelle Digital- und Analogschaltungen benötigen vor allem beim Umschalten sehr schnell viel Strom, in der Größenordnung von Nanosekunden bis Mikrosekunden, je nach IC Milliampere bis Ampere. Diese müssen mit möglichst geringem Widerstand und Induktivität geliefert werden. Ein Stromversorgungsnetz auf einer Platine kann das meist nur unzureichend, dazu sind die Leitungen meist zu lang und damit die Induktivität zu hoch. Ein nah am IC platzierter Kondensator liefert diesen Strom für kurze Zeit, ohne dass die Spannung nennenswert einbricht. Die Entkopplung der Stromversorgung geschieht meist mehrstufig, d.h. es werden Kondensatoren verschiedener Arten und Kapazitäten eingesetzt, siehe [[Stromversorgung für FPGAs]].&lt;br /&gt;
&lt;br /&gt;
Praktische Anwendung&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Jeder&#039;&#039;&#039; Digitalschaltkreis benötigt einen 100nF Keramikkondensator nah (kleiner 20mm) an den Anschlüssen von VCC und GND. Je schneller der IC schalten kann, umso wichtiger ist er.&lt;br /&gt;
* Für &#039;&#039;&#039;jedes&#039;&#039;&#039; Anschlusspaar von VCC und GND eines ICs muss ein Kondensator verwendet werden. Sparen geht hier oft schief!&lt;br /&gt;
* Für die Verbindung der Enkoppelkondensatoren zur Masse- bzw. Versorgungsfläche sollte man möglichst je Kondesator ein VIA benutzen und nicht über ein VIA mehrere Kondensatoren verbinden. Dadurch wird die parasitäre Induktivität vermindert.&lt;br /&gt;
* Schnelle Analogschaltkreise wie Operationsverstärker, [[Treiber]] etc. brauchen auch individuelle Entkoppelkondensatoren.&lt;br /&gt;
* Pi mal Daumen gilt: Je größer der Kondensator, umso weiter kann er von dem Verbraucher weg sein, da er auf Grund seines Innenwiderstands weniger HF-tauglich ist. Es ist somit nicht sinnvoll, einen 1000µF Elektrolytkondensator 10mm neben einen Digital-IC setzen zu wollen. Dort gehört der 100nF Keramikkondensator hin. Aber für die Stromversorgung von Motoren, Treibern und [[H-Brücken Übersicht|H-Brücken]] sind derartige großen Kondensatoren wichtig und sollten nicht zu weit entfernt sein.&lt;br /&gt;
&lt;br /&gt;
=== Koppelkondensator ===&lt;br /&gt;
&lt;br /&gt;
Koppelkondensatoren verbinden Verstärkerstufen. Dabei wird jedoch nur der Wechselanteil übertragen, kein Gleichanteil. Diese Kondensatoren müssen möglichst verzerrungsarm sein, vor allem im Audiobereich. Das wird durch die richtige Wahl des Dielektrikums erreicht.&lt;br /&gt;
&lt;br /&gt;
=== Forumsbeiträge ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/43762 Abblockkondensator: Kerko (Keramik) oder Folie?]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/62576 Brennende Tantalkondensatoren]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/108865#963281 Kodierung (Umwandlung)]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/169958#1624840 Unterschied: Elektrolytkondensator vs. Tantalkondensator]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/195563#1915294 Unterschied: C0G vs. Glimmer]&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/264347#2748845 Kurze Beschreibung verschiedener Folienkondensatoren]&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/108865#1356075 PC Tool zum Identifizieren von Kondensatoren]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://my.execpc.com/~endlr/index.html CapSite 2009] - Introduction To Capacitors&lt;br /&gt;
* [http://www.cde.com/catalogs/AEappGUIDE.pdf Aluminum Electrolytic Capacitor Application Guide] von CDE Cornell Dubilier&lt;br /&gt;
* Anwendungen&lt;br /&gt;
** [http://www.radio-electronics.com/info/data/capacitor/capacitor_types.php Capacitor types and their uses] (engl.)&lt;br /&gt;
** [http://www.planetanalog.com/features/showArticle.jhtml;jsessionid=23?articleID=199905522 Choosing and Using Bypass Capacitors] (dreiteilige Artikelserie) bei [http://www.planetanalog.com www.planetanalog.com]&lt;br /&gt;
** [http://www.vagrearg.org/?p=decoupling Decoupling by Example]&lt;br /&gt;
* Video-Tutorials&lt;br /&gt;
** EEVblog #33 – Capacitor Tutorial [http://www.eevblog.com/2009/09/26/eevblog-33-1of2-capacitor-tutorial-electrolytic-tantalum-and-plastic-film/ Teil 1: Electrolytic, Tantalum, and Plastic Film] und [http://www.eevblog.com/2009/09/26/eevblog-33-2of2-capacitor-tutorial-ceramics-and-impedance/ Teil 2: Ceramics and impedance]&lt;br /&gt;
* [http://www.maximintegrated.com/app-notes/index.mvp/id/5527 Tutorial] von Maxim, &amp;quot;Temperature and Voltage Variation of Ceramic Capacitors, or Why Your 4.7µF Capacitor Becomes a 0.33µF Capacitor&amp;quot;, engl.&lt;br /&gt;
* [http://www.wima.de/DE/characteristics.htm Vergleichstabelle] der Eigenschaften von Folien- und Keramikkondensatoren, WIMA&lt;br /&gt;
* [http://portal.national.com/rap/Application/0,1570,28,00.html] Bob Pease: &amp;quot;Understand Capacitor Soakage to Optimize Analog Systems&amp;quot;&lt;br /&gt;
* [http://www.youtube.com/watch?v=AP_FSyWGpoE Youtube-Video zum Thema Abblockkondensatoren (Deutsch)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Bauteile]]&lt;br /&gt;
[[Category:Grundlagen]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=88297</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=88297"/>
		<updated>2015-04-14T06:50:53Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Formulierung verbessert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Die Firmware kann auch für 7 Stellen konfiguriert werden, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Messverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassisch ===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
In beiden Diagrammen sehen wir die gleiche Frequenz und die gleiche Torzeit. Trotzdem zählt der Zähler einmal 3 und einmal 4 Impulse, abhängig davon wie groß die Phasenverschiebung zwischen Meßsignal und Torzeit ist.&lt;br /&gt;
&lt;br /&gt;
Eine Abweichung von 1 ergibt bei einem Zählwert von N einen relativen Fehler von 1/N. Im Mittel über viele Messungen ist der relative Fehler noch halb so groß: 1/2N. Dieser Fehler ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, muß das Verhältnis der Frequenzen gleich sein zum Verhältnis der Zählerstände; wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Verhältnisgleichung ist es, die dem Verfahren seinen Namen gegeben hat. Die Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit lang genug wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
:(Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.)&lt;br /&gt;
&lt;br /&gt;
In diesem Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Startsignal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Startsignal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
== Implementierung ==&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit: 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz: 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz: wird von der Hardware bestimmt;&amp;lt;br/&amp;gt;40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
;Anmerkung zur Wahl der Torzeit: Mit 1*1000*1000 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulsen ist der maximale systematische Fehler 1 Digit (bei 6 Stellen). Mit 2*1000*1000 ist der Fehler maximal 0.5 Digit und wird so von der Rundung egalisiert. Da Jitter auf der Referenzfrequenz trotzdem noch zum Wackeln der letzten Stelle führen könnte, habe ich einen weiteren Sicherheitsfaktor eingeplant und verwende 4*1024*1024. Wenn die ca. 3 Messungen pro Sekunde nicht reichen sollten, kann man die Torzeit in config.h entsprechend verkürzen.&lt;br /&gt;
&lt;br /&gt;
;Zählerüberläufe: Die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Vorverst%C3%A4rker_/_Kopfh%C3%B6rerverst%C3%A4rker&amp;diff=83340</id>
		<title>Vorverstärker / Kopfhörerverstärker</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Vorverst%C3%A4rker_/_Kopfh%C3%B6rerverst%C3%A4rker&amp;diff=83340"/>
		<updated>2014-06-16T11:03:54Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: unpassendes Bild entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von: Ghostrider1911&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dies ist ein kleines Tutorial, in dem es um einen Vorverstärker geht, der mittels eines OP-Amps aufgebaut ist. Solche Vorverstärker kann man verwenden, um:&lt;br /&gt;
&lt;br /&gt;
* Einen MP3-Player an eine Stereoanlage anzuschließen (Falls das Ausganssignal des MP3 Players zu schwach ist)&lt;br /&gt;
* Einen größeren Kopfhörer (siehe Studiokopfhörer) an einen MP3-Player zu betreiben&lt;br /&gt;
* Einen hochohmigen Ausgang mit einen niederohmigen Eingang zu verbinden (z.B. Ein [[LFE]]-Ausgang an einen normalen Verstärker)&lt;br /&gt;
&lt;br /&gt;
Schaltplan: [http://yfrog.com/59vorverstrkerj]&lt;br /&gt;
&lt;br /&gt;
Spezifikationen:&lt;br /&gt;
* Verstärkung: 3,3-fach, jederzeit mittels R3 veränderbar gemäß R3 : R1 = Verstärkung&lt;br /&gt;
&lt;br /&gt;
Folgendes ist zu beachten:&lt;br /&gt;
&lt;br /&gt;
* Wenn man ein Stereo-Signal verstärken möchte, muss man den oberen Teil der Schaltung 2x aufbauen. (Lässt sich aber meistens mit einem OP-Amp machen)&lt;br /&gt;
* Man sollte den OP-Amp unbedingt auf eine passende IC-Fassung stecken und diese dann verlöten, so dass man den OP-Amp leicht austauschen kann und nicht immer löten muss.&lt;br /&gt;
* Möglichst Masse zu einem Punkt zusammenführen.&lt;br /&gt;
* Es kann ein kleiner Ringkerntrafo oder ein normaler Trafo mit 2 getrennten Spannungen verwendet werden.&lt;br /&gt;
* Die Kabel sollten verdrillt werden um Störeinflüsse zu minimieren.&lt;br /&gt;
* Es können auch andere Spannungsregler und andere OP-Amps verwendet werden, jedoch sollten diese beiden Komponenten aufeinander abgestimmt werden. Das heißt: Der Operationsverstärker sollte die Spannung vertragen, die die Spannungsregler liefern, und man sollte auch nicht ans Limit der Op-Amps gehen.  Das müsst ihr den Datenblättern entnehmen.&lt;br /&gt;
* C3,C5 und C4 müssen bipolare Elektrolytkondensatoren oder Folienkondensatoren sein. (Erfahrungsgemäß funktionieren generell auch normale, aber es ist besser, die oben genannten zu benutzen)&lt;br /&gt;
* C12, C13, C8, C10, C9 und C11 sollten Folienkondensatoren sein. Wenn man keine hat, lässt man sie besser weg, anstatt normale einzusetzen.&lt;br /&gt;
* Die Schaltung braucht recht wenig Strom, deswegen kann auch ein sehr kleiner Trafo und Gleichrichter verwendet werden.&lt;br /&gt;
* Die Spannungsregler brauchen keine Kühlkörper&lt;br /&gt;
* C8, C9, C10 und C11 sollten jeweils ziemlich nah beim Spannungsregler sein, um zu verhindern, dass der Regler schwingt.&lt;br /&gt;
* Als Operationsverstärker können Standardtypen verwendet werden, z.B. der NE5532 oder der LM358N und noch viele andere…&lt;br /&gt;
* Folgende Bauteile kann man zu Versuchszwecken auch weglassen: C5, C12, C13, C3, C4, C8, C10, C11, C9&lt;br /&gt;
* Folgende Bauteile kann man auch umdimensionieren: C1, C2, C6, C7&lt;br /&gt;
* Die stromführenden Leitungen im Gehäuse (falls die Schaltung in ein solches eingebaut wird) sollten so kurz wie möglich und verdrillt sein.&lt;br /&gt;
* Signalführende Leitungen im Gehäuse sollten nicht mit stromführenden Leitungen parallel verlaufen.&lt;br /&gt;
* Der Trafo sollte möglichst weit entfernt von der Schaltung sein.&lt;br /&gt;
&lt;br /&gt;
Ich hoffe, euch hat die Schaltung weitergeholfen; falls ja, könnt Ihr mir gerne einen Kommentar hinterlassen. Falls Ihr noch Fragen habt, einfach stellen, es gibt (fast) keine dummen Fragen!&lt;br /&gt;
&lt;br /&gt;
Wer einen Fehler findet, möge mir diesen mitteilen, ich freue mich auch über hilfreiche Kritik etc.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Audio]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=80001</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=80001"/>
		<updated>2013-12-13T12:19:05Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Implementierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Die Firmware kann auch für 7 Stellen konfiguriert werden, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Messverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassisch ===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, muß das Verhältnis der Frequenzen gleich sein zum Verhältnis der Zählerstände; wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Verhältnisgleichung ist es, die dem Verfahren seinen Namen gegeben hat. Die Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit lang genug wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
:(Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.)&lt;br /&gt;
&lt;br /&gt;
In diesem Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Startsignal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Startsignal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
== Implementierung ==&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit: 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz: 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz: wird von der Hardware bestimmt;&amp;lt;br/&amp;gt;40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
;Anmerkung zur Wahl der Torzeit: Mit 1*1000*1000 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulsen ist der maximale systematische Fehler 1 Digit (bei 6 Stellen). Mit 2*1000*1000 ist der Fehler maximal 0.5 Digit und wird so von der Rundung egalisiert. Da Jitter auf der Referenzfrequenz trotzdem noch zum Wackeln der letzten Stelle führen könnte, habe ich einen weiteren Sicherheitsfaktor eingeplant und verwende 4*1024*1024. Wenn die ca. 3 Messungen pro Sekunde nicht reichen sollten, kann man die Torzeit in config.h entsprechend verkürzen.&lt;br /&gt;
&lt;br /&gt;
;Zählerüberläufe: Die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=80000</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=80000"/>
		<updated>2013-12-13T12:13:04Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Reziprokzähler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Die Firmware kann auch für 7 Stellen konfiguriert werden, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Messverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassisch ===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, muß das Verhältnis der Frequenzen gleich sein zum Verhältnis der Zählerstände; wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Verhältnisgleichung ist es, die dem Verfahren seinen Namen gegeben hat. Die Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit lang genug wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
:(Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.)&lt;br /&gt;
&lt;br /&gt;
In diesem Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Startsignal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Startsignal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit: 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz: 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz: wird von der Hardware bestimmt;&amp;lt;br/&amp;gt;40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
;Anmerkung zur Wahl der Torzeit: Mit 1*1000*1000 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulsen ist der maximale systematische Fehler 1 Digit (bei 6 Stellen). Mit 2*1000*1000 ist der Fehler maximal 0.5 Digit und wird so von der Rundung egalisiert. Da Jitter auf der Referenzfrequenz trotzdem noch zum Wackeln der letzten Stelle führen könnte, habe ich einen weiteren Sicherheitsfaktor eingeplant und verwende 4*1024*1024. Wenn die ca. 3 Messungen pro Sekunde nicht reichen sollten, kann man die Torzeit in config.h entsprechend verkürzen.&lt;br /&gt;
&lt;br /&gt;
;Zählerüberläufe: Die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79999</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79999"/>
		<updated>2013-12-13T12:03:16Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Meßverfahren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Die Firmware kann auch für 7 Stellen konfiguriert werden, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Messverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassisch ===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, müssen die Zählerstände jeweils proportional zu den Frequenzen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß)&lt;br /&gt;
&lt;br /&gt;
diese Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit lang genug wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
:(Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.)&lt;br /&gt;
&lt;br /&gt;
In diesem Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Startsignal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Startsignal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit: 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz: 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz: wird von der Hardware bestimmt;&amp;lt;br/&amp;gt;40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
;Anmerkung zur Wahl der Torzeit: Mit 1*1000*1000 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulsen ist der maximale systematische Fehler 1 Digit (bei 6 Stellen). Mit 2*1000*1000 ist der Fehler maximal 0.5 Digit und wird so von der Rundung egalisiert. Da Jitter auf der Referenzfrequenz trotzdem noch zum Wackeln der letzten Stelle führen könnte, habe ich einen weiteren Sicherheitsfaktor eingeplant und verwende 4*1024*1024. Wenn die ca. 3 Messungen pro Sekunde nicht reichen sollten, kann man die Torzeit in config.h entsprechend verkürzen.&lt;br /&gt;
&lt;br /&gt;
;Zählerüberläufe: Die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79997</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79997"/>
		<updated>2013-12-13T11:36:00Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Implementierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Die Firmware kann auch für 7 Stellen konfiguriert werden, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassische Meßverfahren===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, müssen die Zählerstände jeweils proportional zu den Frequenzen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß)&lt;br /&gt;
&lt;br /&gt;
diese Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit lang genug wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
:(Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.)&lt;br /&gt;
&lt;br /&gt;
In diesem Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Startsignal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Startsignal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit: 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz: 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz: wird von der Hardware bestimmt;&amp;lt;br/&amp;gt;40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
;Anmerkung zur Wahl der Torzeit: Mit 1*1000*1000 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulsen ist der maximale systematische Fehler 1 Digit (bei 6 Stellen). Mit 2*1000*1000 ist der Fehler maximal 0.5 Digit und wird so von der Rundung egalisiert. Da Jitter auf der Referenzfrequenz trotzdem noch zum Wackeln der letzten Stelle führen könnte, habe ich einen weiteren Sicherheitsfaktor eingeplant und verwende 4*1024*1024. Wenn die ca. 3 Messungen pro Sekunde nicht reichen sollten, kann man die Torzeit in config.h entsprechend verkürzen.&lt;br /&gt;
&lt;br /&gt;
;Zählerüberläufe: Die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79996</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79996"/>
		<updated>2013-12-13T11:35:05Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Erklärung zur Wahl der Torzeit hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Die Firmware kann auch für 7 Stellen konfiguriert werden, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassische Meßverfahren===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, müssen die Zählerstände jeweils proportional zu den Frequenzen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß)&lt;br /&gt;
&lt;br /&gt;
diese Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit lang genug wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
:(Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.)&lt;br /&gt;
&lt;br /&gt;
In diesem Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Startsignal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Startsignal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit: 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz: 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz: wird von der Hardware bestimmt;&amp;lt;br/&amp;gt;40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
:Anmerkung zur Wahl der Torzeit: mit 1*1000*1000 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulsen ist der maximale systematische Fehler 1 Digit (bei 6 Stellen). Mit 2*1000*1000 ist der Fehler maximal 0.5 Digit und wird so von der Rundung egalisiert. Da Jitter auf der Referenzfrequenz trotzdem noch zum Wackeln der letzten Stelle führen könnte, habe ich einen weiteren Sicherheitsfaktor eingeplant und verwende 4*1024*1024. Wenn die ca. 3 Messungen pro Sekunde nicht reichen sollten, kann man die Torzeit in config.h entsprechend verkürzen.&lt;br /&gt;
&lt;br /&gt;
;Zählerüberläufe: die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic3.png&amp;diff=79994</id>
		<title>Datei:XL Classic3.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic3.png&amp;diff=79994"/>
		<updated>2013-12-13T11:15:47Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: A-za-z0-9 lud eine neue Version von „Datei:XL Classic3.png“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zeitdiagramm Tor/Signal&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic2.png&amp;diff=79993</id>
		<title>Datei:XL Classic2.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic2.png&amp;diff=79993"/>
		<updated>2013-12-13T11:15:17Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: A-za-z0-9 lud eine neue Version von „Datei:XL Classic2.png“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Blockschaltbild direkte Periodendauerzählung&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic1.png&amp;diff=79992</id>
		<title>Datei:XL Classic1.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic1.png&amp;diff=79992"/>
		<updated>2013-12-13T11:14:06Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: A-za-z0-9 lud eine neue Version von „Datei:XL Classic1.png“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Blockschaltbild direkte Frequenzzählung&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Reziprok1.png&amp;diff=79991</id>
		<title>Datei:XL Reziprok1.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Reziprok1.png&amp;diff=79991"/>
		<updated>2013-12-13T11:13:23Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: A-za-z0-9 lud eine neue Version von „Datei:XL Reziprok1.png“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Blockschaltbild Reziprokzähler&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Reziprok2.png&amp;diff=79990</id>
		<title>Datei:XL Reziprok2.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Reziprok2.png&amp;diff=79990"/>
		<updated>2013-12-13T11:12:10Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: A-za-z0-9 lud eine neue Version von „Datei:XL Reziprok2.png“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zeitdiagramm Reziprokzähler&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79988</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79988"/>
		<updated>2013-12-13T11:07:15Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Reziprokzähler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Die Firmware kann auch für 7 Stellen konfiguriert werden, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassische Meßverfahren===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, müssen die Zählerstände jeweils proportional zu den Frequenzen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß)&lt;br /&gt;
&lt;br /&gt;
diese Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit lang genug wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
:(Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.)&lt;br /&gt;
&lt;br /&gt;
In diesem Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Startsignal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Startsignal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
Zählerüberläufe: die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79986</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79986"/>
		<updated>2013-12-13T11:05:47Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Reziprokzähler */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Die Firmware kann auch für 7 Stellen konfiguriert werden, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassische Meßverfahren===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, müssen die Zählerstände jeweils proportional zu den Frequenzen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß)&lt;br /&gt;
&lt;br /&gt;
diese Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit lang genug wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
(Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.)&lt;br /&gt;
&lt;br /&gt;
In diesem Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Startsignal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Startsignal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
Zählerüberläufe: die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79985</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79985"/>
		<updated>2013-12-13T10:58:47Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Einleitung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Die Firmware kann auch für 7 Stellen konfiguriert werden, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassische Meßverfahren===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, müssen die Zählerstände jeweils proportional zu den Frequenzen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß)&lt;br /&gt;
&lt;br /&gt;
diese Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet also mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit so lang wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.&lt;br /&gt;
&lt;br /&gt;
Im obigen Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Start Signal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Start Signal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
Zählerüberläufe: die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79983</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79983"/>
		<updated>2013-12-13T10:56:44Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Formatierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassische Meßverfahren===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, müssen die Zählerstände jeweils proportional zu den Frequenzen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß)&lt;br /&gt;
&lt;br /&gt;
diese Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet also mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit so lang wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.&lt;br /&gt;
&lt;br /&gt;
Im obigen Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Start Signal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Start Signal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
Zählerüberläufe: die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;). Alternativ kann der Wert von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79982</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79982"/>
		<updated>2013-12-13T10:55:34Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Erweiterung des Abschnitts &amp;quot;Implementierung&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassische Meßverfahren===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, müssen die Zählerstände jeweils proportional zu den Frequenzen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß)&lt;br /&gt;
&lt;br /&gt;
diese Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet also mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit so lang wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.&lt;br /&gt;
&lt;br /&gt;
Im obigen Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Start Signal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Start Signal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Da der Atmega Controller einen Timer mit Capture-Funktion hat, kann der Referenzzähler vollständig im Mikrocontroller abgebildet werden. Dazu werden die steigende Flanke des Gatesignals zum Beginn von Phase 2 und die fallende Flanke des Gatesignals am Ende von Phase 3 mit der Capture-Einheit erfaßt. Die Differenz der Zählerstände zuzüglich der&lt;br /&gt;
zwischenzeitlich stattgefundenen Zählerüberläufe ergibt den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; des Referenzzählers. Der Systemtakt des Controllers fungiert dabei als Referenzfrequenz.&lt;br /&gt;
&lt;br /&gt;
Der &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler ist konventionell aufgebaut aus dem 74HC590 als erster Stufe (der die maximal erfaßbare Frequenz limitiert), gefolgt von der zweiten Hälfte des 74HC74 und schließlich einem weiteren Timer des Atmega Controllers.&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; bzw. &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; geöffnet. Mit &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind garantiert. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
Zählerüberläufe: die Warteschleife während Phase 2 überwacht die Zählerstände beider Zähler. Ein Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; Zählers ist so ausgeschlossen. Wenn jedoch die Eingangsfrequenz zu gering ist, oder das Signal während der Messung unterbrochen wird, dann kann es zum Überlauf des &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; Zählers kommen. In diesem Fall wird das Display eingefroren und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Signalisierung der drei Phasen, Unterlauf und das Vorliegen eines gültigen Ergebnisses werden je nach Display verschieden signalisiert. Siehe dazu die entsprechenden Makros in config.h.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79981</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79981"/>
		<updated>2013-12-13T10:46:31Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Erklärung des Reziprokzählerprinzips hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassische Meßverfahren===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
Der Reziprokzähler umgeht das Problem der Zählerunsicherheit auf elegante Art und liefert dadurch eine konstante Auflösung unabhängig von der Meßfrequenz. Hier erstmal das Blockschaltbild des Reziprokzählers:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok1.png]]&lt;br /&gt;
&lt;br /&gt;
Man sieht gleich, daß der Reziprokzähler irgendwie die direkte Frequenzzählung und die Periodendauermessung kombiniert. Beide Zähler werden durch das gleiche Torsignal geöffnet und wieder geschlossen.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir die folgende Situation: das Meßsignal habe die Frequenz &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;, die Referenzfrequenz den Wert &#039;&#039;f&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;. Das Tor sei für eine bestimmte Zeit (der genaue Wert interessiert uns erstmal nicht) geöffnet. Danach haben die Zähler die Zählerstände &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; und &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da die Torzeit für beide Zähler gleich ist, müssen die Zählerstände jeweils proportional zu den Frequenzen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;\frac{f_x}{f_{ref}} = \frac{N_x}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(wenn die eine Frequenz z.B. 10x so groß ist wie die andere, dann ist auch deren Zählerstand 10x so groß)&lt;br /&gt;
&lt;br /&gt;
diese Gleichung läßt sich einfach nach &#039;&#039;f&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; umstellen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;math&amp;gt;f_x = \frac{N_x \cdot f_{ref}}{N_{ref}}&amp;lt;/math&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aber wie umgeht der Reziprokzähler das +/-1 Problem? Durch eine geeignete Wahl des Torsignals. Zunächst wird das Torsignal mit dem Meßsignal synchronisiert. Das Tor öffnet also mit z.B. der steigenden Flanke des Meßsignals und schließt später ebenso mit einer&lt;br /&gt;
steigenden Flanke. Das eliminiert den Fehler für den Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039;. Oder anders ausgedrückt: die Messung dauert immer ein ganzzahliges Vielfaches der Periodendauer des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
Das Torsignal ist aber dennoch asynchron zur Referenzfrequenz, wodurch wir eine Unsicherheit von 1 beim Zählerstand &#039;&#039;N&amp;lt;sub&amp;gt;ref&amp;lt;/sub&amp;gt;&#039;&#039; erhalten. Wenn wir jetzt die Torzeit so lang wählen, daß wir mindestens N Impulse der Referenzfrequenz zählen, dann ist der Gesamtfehler höchstens 1/N. Mit einer Referenzfrequenz von 10MHz müssen wir z.B. nur 100ms lang zählen, um (fast) unabhängig von der Eingangsfrequenz eine konstante Auflösung von 6 Stellen zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Fast deswegen, weil bei sehr niedrigen Frequenzen das Tor erst verspätet schließt, weil es ja auf das Ende der Periode des Meßsignals warten muß. Die Auflösung wird dadurch zwar nicht schlechter, aber wir bekommen weniger Messungen pro Sekunde.&lt;br /&gt;
&lt;br /&gt;
Im obigen Zählermodul übernimmt die eine Hälfte des 74HC74 (im Schaltbild links) die Funktion des Tors. Hier das Impulsdiagramm:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Reziprok2.png]]&lt;br /&gt;
&lt;br /&gt;
Eine Messung ist unterteilt in 3 Phasen:&lt;br /&gt;
&lt;br /&gt;
;Phase 1: Das Start Signal geht auf H. Das Tor ist freigegeben, aber noch nicht geöffnet. Das Tor wartet auf die nächste steigende Flanke des Meßsignals.&lt;br /&gt;
&lt;br /&gt;
;Phase 2: startet mit der Öffnung des Tors durch eine steigende Meßsignalflanke. Ab jetzt zählen beide Zähler hoch.&lt;br /&gt;
&lt;br /&gt;
;Phase 3: wenn genug Impulse im Referenzzähler sind, wird das Start Signal zurück auf L gesetzt und Phase 3 beginnt. Das Tor bleibt weiter geöffnet bis zur nächsten steigenden Flanke des Meßsignals. Dann endet Phase 3 und damit auch die Messung.&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die fref/fx Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von fref geöffnet. Mit fref=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind realistisch. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 fref-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79980</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=79980"/>
		<updated>2013-12-13T10:27:29Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Erklärung klassische Verfahren hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Klassische Meßverfahren===&lt;br /&gt;
&lt;br /&gt;
Bevor ich auf das verwendete Reziprokzählerverfahren eingehe, möchte ich erst noch einmal die klassischen Meßverfahren rekapitulieren. Da wäre zunächst die direkte Frequenzzählung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic1.png]]&lt;br /&gt;
&lt;br /&gt;
Für jede Einzelmessung öffnet das Tor für eine bestimmte Zeit, z.B. 1s. Alle Impulse die in dieser Zeit eintreffen, werden gezählt und am Ende der Messung angezeigt. Bei einer Torzeit von einer Sekunde ist der Zählerstand direkt die Frequenz in Hertz.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je höher die zu messende Frequenz ist. Bei z.B. 1MHz und 1s Torzeit zählen wir 1 Million Impulse und bekommen 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Für kleine Frequenzen wie die 50Hz Netzfrequenz oder den 1Hz Takt für eine Quarzuhr müßte man die Torzeit extrem verlängern, um mit diesem Verfahren ein Ergebnis mit akzeptabler Auflösung zu bekommen.&lt;br /&gt;
&lt;br /&gt;
Statt dessen verwendet man für niedrige Frequenzen besser das zweite klassische Verfahren, die Periodendauermessung:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic2.png]]&lt;br /&gt;
&lt;br /&gt;
Jetzt bestimmt das Meßsignal die Torzeit. Eine Messung beginnt mit der z.B. steigenden Flanke des Eingangssignals und endet mit der nächsten steigenden Flanke. Der Zähler zählt in dieser Zeit Impulse der Referenzfrequenz und mißt so die Periodendauer des Meßsignals. Bei einer Referenzfrequenz von z.B. 1MHz ergibt der Zählerstand die Periodendauer in Mikrosekunden.&lt;br /&gt;
&lt;br /&gt;
Dieses Verfahren funktioniert um so besser, je geringer die zu messende Frequenz ist. Bei z.B. 1Hz Meßsignal und 1MHz Referenzfrequenz zählen wir auch wieder 1 Million Impulse entsprechend 6 Stellen Auflösung.&lt;br /&gt;
&lt;br /&gt;
Ein universeller klassischer Zähler müßte also beide Verfahren anbieten, um sowohl niedrige als auch hohe Frequenzen mit guter Auflösung zu messen. Und tatsächlich hat man Frequenzzähler einige Jahrzehnte lang genauso gebaut :)&lt;br /&gt;
&lt;br /&gt;
Trotzdem bekommt man gerade im Tonfrequenzbereich bei einigen kHz keine Auflösung von mehr als 3-4 Stellen. Der Grund dafür ist die Unsicherheit in der letzten Stelle des Zählerstandes. Wenn das Torsignal und das Meßsignal asynchron sind, dann &amp;quot;wackelt&amp;quot; der Zähler je nach Phasenlage der beiden Signale um einen Wert von 1:&lt;br /&gt;
&lt;br /&gt;
[[Datei:XL_Classic3.png]]&lt;br /&gt;
&lt;br /&gt;
Obwohl die Torzeit und Frequenz jeweils gleich sind, zählen wir einmal 3 und einmal 4 Impulse. Bei einem Zählerstand von N beträgt die Unsicherheit maximal 1/N und im Mittel 1/2N. Dies ist ein systematischer Meßfehler und nicht zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die fref/fx Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von fref geöffnet. Mit fref=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind realistisch. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 fref-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/goto_post/2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Reziprok2.png&amp;diff=79979</id>
		<title>Datei:XL Reziprok2.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Reziprok2.png&amp;diff=79979"/>
		<updated>2013-12-13T10:19:03Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Zeitdiagramm Reziprokzähler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zeitdiagramm Reziprokzähler&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Reziprok1.png&amp;diff=79978</id>
		<title>Datei:XL Reziprok1.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Reziprok1.png&amp;diff=79978"/>
		<updated>2013-12-13T10:18:28Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Blockschaltbild Reziprokzähler&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Blockschaltbild Reziprokzähler&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic3.png&amp;diff=79977</id>
		<title>Datei:XL Classic3.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic3.png&amp;diff=79977"/>
		<updated>2013-12-13T10:17:38Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Zeitdiagramm Tor/Signal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zeitdiagramm Tor/Signal&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic2.png&amp;diff=79976</id>
		<title>Datei:XL Classic2.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic2.png&amp;diff=79976"/>
		<updated>2013-12-13T10:16:39Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Blockschaltbild direkte Periodendauerzählung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Blockschaltbild direkte Periodendauerzählung&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic1.png&amp;diff=79975</id>
		<title>Datei:XL Classic1.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XL_Classic1.png&amp;diff=79975"/>
		<updated>2013-12-13T10:15:45Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: Blockschaltbild direkte Frequenzzählung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Blockschaltbild direkte Frequenzzählung&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=68895</id>
		<title>AVR Softwarepool</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=68895"/>
		<updated>2012-10-31T08:15:26Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* LEDs und LED-Anzeigen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die interessantesten Softwareprojekte aus der Codesammlung...&lt;br /&gt;
&lt;br /&gt;
(A)   ... Projekt ist in &#039;&#039;&#039;Assembler&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(C)   ... Projekt ist in &#039;&#039;&#039;C&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(C++) ... Projekt ist in &#039;&#039;&#039;C++&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(B)   ... Projekt ist in &#039;&#039;&#039;Bascom&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(PC)  ... Projekt ist nicht für einen µC, sondern für den PC&lt;br /&gt;
&lt;br /&gt;
==1-Wire==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14792  DS1820, DS18B20 in C]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6505 Mehrere DS1820/DS18B20 auslesen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Mehrere DS1820/DS18B20/DS18S20/DS1822 über einen Webserver auslesbar]&lt;br /&gt;
&lt;br /&gt;
==Akkulader==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72627#594587 Bleiakku-Lader 12/24V]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
&lt;br /&gt;
==Betriebssysteme und Scheduler==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/190388#1856376 Nano OS] von Tobias W. ([http://sourceforge.net/projects/nanoos/ Sourceforge])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12176#79672 Wartezeiten effektiv (Scheduler)] von Peter Dannegger&lt;br /&gt;
* (C++) [http://www.mikrocontroller.net/topic/96977#837989 Einfacher Scheduler und Timer in C++ für ATMega] von S. Seegel&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/74026#609246 GOS: einfacher preemptive multitasking scheduler] von Günter Greschenz&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/articles/Monitorprogramm_Bamo128 Bamo128] Monitorprogramm und Bootloader&lt;br /&gt;
&lt;br /&gt;
==Bootloader==&lt;br /&gt;
* (A,C,PC) [http://www.mikrocontroller.net/topic/12181#79866 AVR Bootloader]&lt;br /&gt;
* (A, PC) [http://www.mikrocontroller.net/topic/146638#1364260 AVR Bootloader für GCC-Toolchain]&lt;br /&gt;
* (A,PC) [http://www.mikrocontroller.net/topic/95839 AVR Bootloader mit Verschlüsselung]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72308#591159 ATtiny45 Bootloader]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader für ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/56818#439359 SD/MMC Card Bootloader (passt in 2kb bootsection)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/61170#480765 boofa - Bootloader für AVR über UART (AVR109)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53130#413058 Bootloader ATmega168]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/73196#600293 UART Bootloader ATtiny13 - ATmega644]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/150816#1414460 UART Bootloader AtMega644P @ 20MHz] (Eclipse Projekt)&lt;br /&gt;
* (C) [[AVR Bootloader in C - eine einfache Anleitung]]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/200645#1971295 LAN-Bootloader für ATmega1284p]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/articles/Monitorprogramm_Bamo128 Bamo128] Monitorprogramm und Bootloader&lt;br /&gt;
Siehe auch: [[Bootloader]]&lt;br /&gt;
&lt;br /&gt;
==DCC==&lt;br /&gt;
&lt;br /&gt;
(Digital Command Control, Standard zur digitalen Steuerung von Modelleisenbahnen)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31397#241300 DCC Decoder]&lt;br /&gt;
&lt;br /&gt;
==DCF77==&lt;br /&gt;
&lt;br /&gt;
(Zeitsignaldienst für funkgesteuerte Uhren auf der Langwellen-Frequenz 77,5 kHz)&lt;br /&gt;
 &lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/38914#287867 DCF77 AVR-Assemblerbaustein ]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6500#41738 DCF77-Uhr mit ATTINY12]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31385#241104 DCF Digital Empfangsmodul - Korrelation - (Assembler)ATmega8 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25071#186286 DCF 77 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14788#101528 DCF-Uhr mit DotMatrix-Anzeige für avr-gcc]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12154#79501 PC DCF Timer ( PC Zeitschaltuhr)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25116#187197 DCF 77 Uhr mit CodeVision ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/58769#456232 DCF77 Uhr in C mit ATtiny26]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48597#372164 DCF77 Uhr, zum X.ten Mal, jetzt mit SAF]&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 DCF77 mit beliebig gepoltem Eingangssignal innerhalb eines Webservers]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/121049 DCF-Uhr, Sonnenstand, TWI-Port, Alarmfunktion für Atmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/151260#1419218 DCF77 Uhr 7 Segment LED ATmega8 Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/168807#1614129 DCF-Uhr mit LCD in C]&lt;br /&gt;
&lt;br /&gt;
== DRAM ==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/25053#186085 2MB DRAM an AVR] und Anwendung als [http://www.mikrocontroller.net/topic/25053#186089 Audiorekorder]&lt;br /&gt;
&lt;br /&gt;
==Drehgeber==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6526#41978 Drehgeber auslesen]&lt;br /&gt;
&lt;br /&gt;
==DTMF==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/92444#792954 DTMF dekodieren]&lt;br /&gt;
&lt;br /&gt;
==DMX==&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/92350#new 20 Kanal Relaissteuerung per DMX]&lt;br /&gt;
&lt;br /&gt;
==Entwicklungssysteme==&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/74198#611404 AVR Code Wizard]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/30110#230503 Multitasking kernel für ATtinys in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/65156#521012 BASIC-Computer mit ATmega32]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/64129#511368 AVR TinyBASIC Anpassung für ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/59189#460273 Mini-Computer mit BASIC]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/55807 Forth System für ATmegas in Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/94193 Forth-Computer mit ATmega32 und Videoausgabe] von Christian Berger&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62500#493931 Fixpoint-Arithmetik in &amp;quot;C&amp;quot;]&lt;br /&gt;
* (C++) [http://www.mikrocontroller.net/topic/143537 Fixpoint-Arithmetik in &amp;quot;C++&amp;quot;]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/85256#717037 64 Bit float Emulator in C, IEEE754 kompatibel]&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/92979#797957 AVR ATmega8TestBoard]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/94468#812992 Gleitkomma-Bibliothek für AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/177481?page=1 AVR CP/M System]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/187390 EMACS Konfiguration]&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
&lt;br /&gt;
(Fast Fourier Transformation, &amp;quot;schnelle&amp;quot; Fouriertransformation)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25095#186536 FFT auf dem AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25062#186225 128point FFT in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/27001#203911 Schnelle FFT in Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131525#1191497 AVR-Lichtorgel per FFT MEGA8 32 644 ]&lt;br /&gt;
&lt;br /&gt;
==Funksteckdosen==&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 Ansteuerung von Funksteckdosen mit einem Webserver]&lt;br /&gt;
&lt;br /&gt;
==GPS==&lt;br /&gt;
&lt;br /&gt;
(Global Positioning System, satellitengestütztes System zur weltweiten Positions- und Zeitbestimmung)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48544#371717 GPS - MOUSE - MINI- NAVIGATOR (Assembler) ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/72507#593252 GPS an mega8,88 oder 168]&lt;br /&gt;
&lt;br /&gt;
==IR==&lt;br /&gt;
* siehe auch [[AVR Softwarepool#RC5|RC5]]&lt;br /&gt;
* (C) [[IRMP]] - Infrared Multi Protocol Decoder:&lt;br /&gt;
**[[IRMP| Wiki Seite]]&lt;br /&gt;
**[http://www.mikrocontroller.net/topic/162119#1545798 Thread im Forum]&lt;br /&gt;
&lt;br /&gt;
==Kryptographie==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/73468 Verschiedene kryptographische Funktionen] &lt;br /&gt;
&lt;br /&gt;
==LANC==&lt;br /&gt;
&lt;br /&gt;
(Steuerprotokoll für Video- und Digitalfotokameras, auch als Control-L bekannt)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/40463#302754 Sony LANC Auswertung mit AVR] (Atmega 128 @ 16 MHz)&lt;br /&gt;
&lt;br /&gt;
==LEDs und LED-Anzeigen==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76839#638278 Solarlicht Steuerung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/73776#606472 LED-Touch-Panel] (ARM)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/54561#421940 HSV RGB Led Dimmer, C Code &amp;amp; Video &amp;amp; Doku]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/67567#543492 Mini RGB Lichteffektgenerator mit Menü für Pic16F84]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48464#370871 Ansteuerung einer RGB LED (PWM)]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/87149#737282 3x7 Segment und 1 I/O-Pin (Assembler)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31370#240843 ADC mit Multiplexanzeige] (vier 7-Segmentanzeigen)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31388#241192 AVR-Lauflicht]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/94746#815809 HSB-&amp;gt;RGB Umrechnung rein in Assembler, auch für ATiny]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/110168 2x7-Segment an nur 3 Leitungen]&lt;br /&gt;
* (A) [[Ambilight in Hardware]]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/145156#1346531 µCke Microcontroller Mücke (Atmel Tiny13)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131525#1191497 AVR-Lichtorgel per FFT MEGA8 32 644 ]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/182305 TLC5940 16-Kanal 12bit LED Treiber ansteuern und HighPower LEDs über MosFETs treiben]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/185730 7Segment Coder]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/244768 RGB-Moodlight, ATMega8, Soft-PWM mit Gammakorrektur, IR-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/275426 serielles 4x7 Segment Display NSM4202]&lt;br /&gt;
&lt;br /&gt;
==LCD und VFD==&lt;br /&gt;
* (C) [http://bluematrixi.bl.funpic.de/index.php/elektronik-avr/lcd-display-nokia3310 Bibliothek für Nokia 3310 Lcd Ansteuerung in &amp;quot;C&amp;quot; - sehr gut]&lt;br /&gt;
*(C,A)[http://www.mikrocontroller.net/articles/Ansteuerung_Handy_Displays Ansteuerung_Handy_Displays]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/53137#413137 Programm zum Erstellen eigener Schriftarten (LCD)]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/54860#423255 LCD Schriftarten ( Fonts in veschiedenen Größen )]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31403  The Siemens S65 132x176, 65536 color display with AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48501#371218 LCD Ansteuerung im 4bit-Modus]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48456#370782 LCD Library T6963c]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76399#633680 &amp;quot;Bessere&amp;quot; T6963c Library]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25099#186569 LCD Controller für 640x480 LCD mit mega8515]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38923#287939 LCD Controller KS0073 Support im 4-Bit Mode]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/79609#664268 KS0066U oder Ähnliche --- LCD Treiber]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/81793#683135 Pollin E0855-2 SED1530-Treiber]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/90449#772843 LCD über nur einen IO-Pin ansteuern]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120475 VFD Library (Vacuum Fluorescent Display Library)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98321#851423 Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen] (jetzt auch mit 8 Graustufen)&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/140369 Menüsystem für beliebige schwarz-weiß LCDs bis 4096x4096 Pixeln und grafischem Editor]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/194149 Schnelle SED1520 Funktionsbibliothek mit Bildkonverter und Fontgenerator]&lt;br /&gt;
* (PC,C) [http://www.mikrocontroller.net/topic/234304 DOGXL Fontgenerator (SW+Graustufen)]&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/236862#2401250 Grafikfähiger LCD Controller für 320x240 LCD mit D-RAM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/190078 LCD SHARP M078CKA mit LH155]&lt;br /&gt;
&lt;br /&gt;
==I2C==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98923#857451 Ultraschall Entfernungsmesser mit I2C, Eigenbau]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/83871#new  I2C-Master realisiert in Software, ohne TWI für alle ATMEGAs]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/38919#new  RS232 &amp;lt;-&amp;gt; TWI / I2C Interface für ATMega8 (ASM) inkl. Windows Software]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67698#544930 USI TWI Master]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/235733#2388116 Hardware TWI-MASTER Interrupt basierend für Mega AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/272621#new I2C/TWI Master-Interrupt Xmega-Assemblerbaustein]&lt;br /&gt;
&lt;br /&gt;
==Messgeräte==&lt;br /&gt;
===Drehzahlmesser===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/1518#8469 Drehzahlmesser 4 mal 7-Segment mit 90S2313]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/Drehzahlmesser Drehzahlmesser mit 4 mal 7-Segment anzeigen mit Tiny2313, Wiki-Artikel]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/231283 einfache Drehzahlmessung mit ATmega88]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/232485 4-Kanal Drehzahlmessung mit ATmega88]&lt;br /&gt;
&lt;br /&gt;
===Klopfsensormessgerät===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/Klopfsensormessgeraet Messgerät für Klopfgeräusche an Verbrennungsmotoren auf Basis des TPIC8101]&lt;br /&gt;
&lt;br /&gt;
===Entfernungsmesser===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98923#857451 Ultraschall Entfernungsmesser mit I2C, Eigenbau]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/130834 3D Umgebungserfassung mit einem auf zwei Servors montiertem Sharp Distanzsensor, Eigenbau]&lt;br /&gt;
&lt;br /&gt;
===Frequenzmesser===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/62610#495030 Frequenzmesser bis 2Mhz -- mit AVR ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48582#372072 Frequenzmessung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62517#494146 Input Capture Pin (ICP) auslesen ( Frequenz messen)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25144#187587 Frequenzmessung und Impulszählung über den Parallelport-IR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31394#241251 einfacher 5 MHz Frequenzzähler (Assembler) ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/173665#new sehr genauer Frequenzmesser Atmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/186801#new  Reziproker Frequenzzähler+ Optimierte 64bit uint Routinen]&lt;br /&gt;
* (C+A) [http://www.mikrocontroller.net/topic/200279#new 6 Stellen von 1Hz bis 40MHz ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/241150#2458079 Reziproker Frequenzzähler, GPS-stabilisiert, ATmega162]&lt;br /&gt;
&lt;br /&gt;
===Frequenzgenerator===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/152966#1438488 Einstellbarer Frequenzgenerator für 0.12 Hz - 8 MHz mit Atmega 8 und Bascom ]&lt;br /&gt;
&lt;br /&gt;
===Kompass===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/100239#870281 KOMPASS KMZ10A KMZ10B ATmega8 Assembler]&lt;br /&gt;
&lt;br /&gt;
===Messgeräte für elektronische Bauteile===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60797#477026 LC-METER / LC-Messgerät ATmega8 Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60591#474873 Widerstandstester]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56770#438957 Ladungsmessgerät]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31386#241139 Transistortester]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131804#1194273 Transistortester]&lt;br /&gt;
&lt;br /&gt;
===Spannungsmesser===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31370#240843 ADC mit Multiplexanzeige] - Voltmeter&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
&lt;br /&gt;
===Thermometer===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53127#413006 Thermometer mit LED &amp;amp; LM35]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Viele DS18x20-Thermometer in einem Webserver]&lt;br /&gt;
&lt;br /&gt;
===Oszilloskop===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/53129#413011 Einfaches Oszilloskop - Bascom]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48586#372093 Oszi- &amp;amp; Logikanalyser mit LCD]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31376#240880 einfaches DIGITAL- Oszilloskop (800 Datenpunkte) Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56616#437772 Einfaches &amp;quot;Oszilloskop&amp;quot;]&lt;br /&gt;
* (C) [http://www.christoph-lauer.de/Homepage/Blog/Eintrage/2010/8/1_Embedded_C_based_Spectrumanalyzer.html ATXMega based Oscilloscope and Spectrumanalyzer]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/228997#2308320 Selbstbau Digital Storage Oszilloskop]&lt;br /&gt;
&lt;br /&gt;
===Beschleunigungssensor===&lt;br /&gt;
* (c++) [http://www.mikrocontroller.net/topic/268214 Einfache BMA020 Library, mit I2C]&lt;br /&gt;
&lt;br /&gt;
==MIDI==&lt;br /&gt;
&lt;br /&gt;
(Musical Instrument Digital Interface, Datenübertragungsstandard für Musikinstrumente)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/106512# Drum-Trigger mit MIDI-Ausgabe]&lt;br /&gt;
&lt;br /&gt;
==MMC==&lt;br /&gt;
&lt;br /&gt;
(Multimedia Card, digitales Flash-Speichermedium)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25056#186117 SourceCode MMC die Zweite]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48481#370950 MMC/SD-Karte mit FAT16 an AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader füt ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14800#102024 MMC/SD ansteuern mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/FAT32 MMC/SD - FAT16/32 Bibliothek für AVR  mit Wiki]&lt;br /&gt;
&lt;br /&gt;
==Netzgeräte==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/60786#476904 Labornetzgerät]&lt;br /&gt;
* [[RADLAB-PS1]] [http://www.mikrocontroller.net/topic/124858#1138781 Netzteil um LM317 mit Strombegrenzung und Anzeige!]&lt;br /&gt;
&lt;br /&gt;
==Netzwerk==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/87517#new Kleiner ENC28J60 µWebserver von SimonK]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/82127#new Ulrich Radigs ENC28J60 mit leicht lötbaren/beschaffbaren Bauteilen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131825 Dirk Broßwick Webserver auf ENC28j60 Basis mit einem ATmega2561, es gibt auch einen Port auf das AVR-NET IO]&lt;br /&gt;
&lt;br /&gt;
==Parser==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64763#517245 Zwei Parser für numerische Ausdrücke]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76842#638283 uShell - ein universeller Parser für uCs]&lt;br /&gt;
&lt;br /&gt;
==RFID==&lt;br /&gt;
&lt;br /&gt;
(Radio Frequency Identification, Verfahren zur funkbasierten Identifizierung und Lokalisierung von Gegenständen)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/228709 Soft-RFID ohne RFID-IC]&lt;br /&gt;
&lt;br /&gt;
==RC - Fernsteuerungen/Servos==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48529#371582 RC Summen Signal erzeugen ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/192453 RC Summen Signal dekodieren ]&lt;br /&gt;
&lt;br /&gt;
==RC5==&lt;br /&gt;
&lt;br /&gt;
(verbreitetes Datenübertragungsprotokoll für Infrarot-Fernbedienungen)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/14789#101536 RC5 Sender auf einem Attiny11L]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12216#80856 Fernbedien RC5 Empfänger]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/59235#460765 RC5 Sender selber bauen ???]&lt;br /&gt;
&lt;br /&gt;
==Ringpuffer==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/66789#536189 Ringpuffer AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101472#882716 AVR-GCC: UART mit FIFO]&lt;br /&gt;
&lt;br /&gt;
==SD==&lt;br /&gt;
&lt;br /&gt;
(Secure Digital Memory Card; digitales Flash-Speichermedium)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68257#550336 Datenrekorder auf SD-Karte mit mega88]&lt;br /&gt;
&lt;br /&gt;
==Sonstiges==&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/111783#994358 Sonnenstandberechnung mit Atmega 8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/UAC_Mikrocontroller_ASCII_Console uAC Mikrocontroller ASCII Console]&lt;br /&gt;
&lt;br /&gt;
==Spaßprojekte==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/119876#1083044 Miniprojekt: Lagerfeuer-LED (ATtiny25)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120289#1087905 Klingel mit 100 Melodien - last minute Weihnachtsgeschenk]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/145156#1346531 µCke Microcontroller Mücke (Atmel Tiny13)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/167528#1601077 Toastbrote zählen]&lt;br /&gt;
&lt;br /&gt;
==Spiele==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48505#371259 Tetris auf dem AtMega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/187253# Atmega8 Schachuhr mit Max7219 ]&lt;br /&gt;
&lt;br /&gt;
==Steuerungen==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/123551 Aquarium Controller]&lt;br /&gt;
&lt;br /&gt;
==Taster / Schalter==&lt;br /&gt;
===mechanisch===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6492#41625 Tasten entprellen - Bulletproof] (siehe auch: [[Entprellung]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48465#370877 Universelle Tastenabfrage]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6491#41624 Tasten-Matrix entprellen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64731#517001 Tastenmatrix auslesen über nur 2 Leitungen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64743#517105 Tasten Entprellen für N00bs]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
===kapazitiv===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38904  Sensor mit nur einer Kontaktfläche]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25045 Einfache Sensortaste]&lt;br /&gt;
&lt;br /&gt;
==Tonerzeugung==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/66945#537624 ATMEGA8 Soundgenerator/Synthesizer]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120289#1087905 Klingel mit 100 Melodien - last minute Weihnachtsgeschenk]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/134362 RTTTL Melodiegenerator mit ATTINY85]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/232702#new RTTTL Melodiegenerator mit ATMEGA8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25051 Melodie ausgeben mit AVR ATTiny12]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/145156#1346531 µCke Microcontroller Mücke (Atmel Tiny13)]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/137629#1259132 Melodieklingel BASCOM ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/191596 2Kanal Synthesizer ATtiny 2313, 85, ..]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/232845 17 Kanal Avr Synthesizer]&lt;br /&gt;
&lt;br /&gt;
==TWI==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/87597#742070 AVR TWI Master und Slave Funtionen in C]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31404#242081 TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8]&lt;br /&gt;
&lt;br /&gt;
==USB==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/75254#622120 USB Host Stack für Eingebettete Systeme (LGPL)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/92979#797957 AVR ATmega8TestBoard]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/90791#776280 Relaiskarte für den USB Port]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/130381#1179352 USB-Stick am Mikrocontroller VNC1L]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/155241 PDIUSBD12 Treiber und micro USB-Device stack]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/192453 HID-Joystick mit V-USB ]&lt;br /&gt;
&lt;br /&gt;
==UART==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101472#882716 AVR-GCC: UART mit FIFO]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38928#287985 Software UART]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/125651#1147436 Software UART mit FIFO]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/175946#1690682 uParse] - ein kompakter und vielseitiger Parser (Atmega32) für [[RS232]]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/159753#1517744 Einfacher Interpreter für Komandozeilen/Befehlszeilen] (Atmega32) für [[RS232]]&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53140#413249 AVR ASCII Video Terminal - 40 x 25 - BAS Signal]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53139#413225 TV VIDEO BILD BAS Frequenzzähler DVM Atmega8 Assembler]&lt;br /&gt;
* (A) [http://www.electronicspit.com/video/ Videosignal in Farbe aus dem ATMega32] (URL nicht mehr erreichbar)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25091#new VGA Testbildgenerator]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101429#882288 ATmega8 erzeugt Video in C!]&lt;br /&gt;
&lt;br /&gt;
==Zeitgeber und Uhren==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/12185#80055 Die genaue Sekunde / RTC]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74673#616226 LCD-Timer für Belichtungsgerät]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/119859#1082804 DS1307 Assembler-Code]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31374#240878 AVR Library für RTC 12C887 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25136#187534 RTC DS1302 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25087#186454 RTC + Scheduler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53131#413059 Jumbo-LED Uhr]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25069 Sekunden in Zeit/Datum umwandeln (mit Sommerzeit/Schaltjahren)]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/48560#371911 BASCOM Uhr mit Butterfly]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48450#370765 Countdown timer für UV Belichter]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98885 Countdown Timer mit ATtiny2313]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12176#79672 Wartezeiten effektiv (Scheduler)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Schaltuhr mit DCF77-Referenz in einem Webserver, Steuerung von Funksteckdosen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/100892#876549 Eieruhr mit ATtiny24V/ATtiny2313V]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/151236 Zeitauslöser für Casio EX F1 mit Attiny2313]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/151260#1419218 DCF77 Uhr 7 Segment LED ATmega8 Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/177688# NIXIE Uhr mit vielen Funktionen in C mit ATTiny2313]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/233699 Stoppuhr – Geschwindigkeit – Pulsweite mit Atmega88]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/275514 Timer bis 99:59 min - LED Display NSM4202, Drehgeber - At90S2313]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Codesammlung Übersicht]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR]]&lt;br /&gt;
[[Kategorie:Forum]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=68894</id>
		<title>AVR Softwarepool</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=AVR_Softwarepool&amp;diff=68894"/>
		<updated>2012-10-31T08:13:26Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Zeitgeber und Uhren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die interessantesten Softwareprojekte aus der Codesammlung...&lt;br /&gt;
&lt;br /&gt;
(A)   ... Projekt ist in &#039;&#039;&#039;Assembler&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(C)   ... Projekt ist in &#039;&#039;&#039;C&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(C++) ... Projekt ist in &#039;&#039;&#039;C++&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(B)   ... Projekt ist in &#039;&#039;&#039;Bascom&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
(PC)  ... Projekt ist nicht für einen µC, sondern für den PC&lt;br /&gt;
&lt;br /&gt;
==1-Wire==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14792  DS1820, DS18B20 in C]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6505 Mehrere DS1820/DS18B20 auslesen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Mehrere DS1820/DS18B20/DS18S20/DS1822 über einen Webserver auslesbar]&lt;br /&gt;
&lt;br /&gt;
==Akkulader==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72627#594587 Bleiakku-Lader 12/24V]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
&lt;br /&gt;
==Betriebssysteme und Scheduler==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/190388#1856376 Nano OS] von Tobias W. ([http://sourceforge.net/projects/nanoos/ Sourceforge])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12176#79672 Wartezeiten effektiv (Scheduler)] von Peter Dannegger&lt;br /&gt;
* (C++) [http://www.mikrocontroller.net/topic/96977#837989 Einfacher Scheduler und Timer in C++ für ATMega] von S. Seegel&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/74026#609246 GOS: einfacher preemptive multitasking scheduler] von Günter Greschenz&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/articles/Monitorprogramm_Bamo128 Bamo128] Monitorprogramm und Bootloader&lt;br /&gt;
&lt;br /&gt;
==Bootloader==&lt;br /&gt;
* (A,C,PC) [http://www.mikrocontroller.net/topic/12181#79866 AVR Bootloader]&lt;br /&gt;
* (A, PC) [http://www.mikrocontroller.net/topic/146638#1364260 AVR Bootloader für GCC-Toolchain]&lt;br /&gt;
* (A,PC) [http://www.mikrocontroller.net/topic/95839 AVR Bootloader mit Verschlüsselung]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/72308#591159 ATtiny45 Bootloader]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader für ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/56818#439359 SD/MMC Card Bootloader (passt in 2kb bootsection)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/61170#480765 boofa - Bootloader für AVR über UART (AVR109)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53130#413058 Bootloader ATmega168]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/73196#600293 UART Bootloader ATtiny13 - ATmega644]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/150816#1414460 UART Bootloader AtMega644P @ 20MHz] (Eclipse Projekt)&lt;br /&gt;
* (C) [[AVR Bootloader in C - eine einfache Anleitung]]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/200645#1971295 LAN-Bootloader für ATmega1284p]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/articles/Monitorprogramm_Bamo128 Bamo128] Monitorprogramm und Bootloader&lt;br /&gt;
Siehe auch: [[Bootloader]]&lt;br /&gt;
&lt;br /&gt;
==DCC==&lt;br /&gt;
&lt;br /&gt;
(Digital Command Control, Standard zur digitalen Steuerung von Modelleisenbahnen)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31397#241300 DCC Decoder]&lt;br /&gt;
&lt;br /&gt;
==DCF77==&lt;br /&gt;
&lt;br /&gt;
(Zeitsignaldienst für funkgesteuerte Uhren auf der Langwellen-Frequenz 77,5 kHz)&lt;br /&gt;
 &lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/38914#287867 DCF77 AVR-Assemblerbaustein ]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6500#41738 DCF77-Uhr mit ATTINY12]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31385#241104 DCF Digital Empfangsmodul - Korrelation - (Assembler)ATmega8 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25071#186286 DCF 77 ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14788#101528 DCF-Uhr mit DotMatrix-Anzeige für avr-gcc]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12154#79501 PC DCF Timer ( PC Zeitschaltuhr)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25116#187197 DCF 77 Uhr mit CodeVision ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/58769#456232 DCF77 Uhr in C mit ATtiny26]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48597#372164 DCF77 Uhr, zum X.ten Mal, jetzt mit SAF]&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 DCF77 mit beliebig gepoltem Eingangssignal innerhalb eines Webservers]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/121049 DCF-Uhr, Sonnenstand, TWI-Port, Alarmfunktion für Atmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/151260#1419218 DCF77 Uhr 7 Segment LED ATmega8 Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/168807#1614129 DCF-Uhr mit LCD in C]&lt;br /&gt;
&lt;br /&gt;
== DRAM ==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/25053#186085 2MB DRAM an AVR] und Anwendung als [http://www.mikrocontroller.net/topic/25053#186089 Audiorekorder]&lt;br /&gt;
&lt;br /&gt;
==Drehgeber==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6526#41978 Drehgeber auslesen]&lt;br /&gt;
&lt;br /&gt;
==DTMF==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/92444#792954 DTMF dekodieren]&lt;br /&gt;
&lt;br /&gt;
==DMX==&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/92350#new 20 Kanal Relaissteuerung per DMX]&lt;br /&gt;
&lt;br /&gt;
==Entwicklungssysteme==&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/74198#611404 AVR Code Wizard]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/30110#230503 Multitasking kernel für ATtinys in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/65156#521012 BASIC-Computer mit ATmega32]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/64129#511368 AVR TinyBASIC Anpassung für ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/59189#460273 Mini-Computer mit BASIC]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/55807 Forth System für ATmegas in Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/94193 Forth-Computer mit ATmega32 und Videoausgabe] von Christian Berger&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62500#493931 Fixpoint-Arithmetik in &amp;quot;C&amp;quot;]&lt;br /&gt;
* (C++) [http://www.mikrocontroller.net/topic/143537 Fixpoint-Arithmetik in &amp;quot;C++&amp;quot;]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/85256#717037 64 Bit float Emulator in C, IEEE754 kompatibel]&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/92979#797957 AVR ATmega8TestBoard]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/94468#812992 Gleitkomma-Bibliothek für AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/177481?page=1 AVR CP/M System]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/187390 EMACS Konfiguration]&lt;br /&gt;
&lt;br /&gt;
==FFT==&lt;br /&gt;
&lt;br /&gt;
(Fast Fourier Transformation, &amp;quot;schnelle&amp;quot; Fouriertransformation)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25095#186536 FFT auf dem AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25062#186225 128point FFT in ASM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/27001#203911 Schnelle FFT in Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131525#1191497 AVR-Lichtorgel per FFT MEGA8 32 644 ]&lt;br /&gt;
&lt;br /&gt;
==Funksteckdosen==&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/31408#536372 Ansteuerung von Funksteckdosen mit einem Webserver]&lt;br /&gt;
&lt;br /&gt;
==GPS==&lt;br /&gt;
&lt;br /&gt;
(Global Positioning System, satellitengestütztes System zur weltweiten Positions- und Zeitbestimmung)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48544#371717 GPS - MOUSE - MINI- NAVIGATOR (Assembler) ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/72507#593252 GPS an mega8,88 oder 168]&lt;br /&gt;
&lt;br /&gt;
==IR==&lt;br /&gt;
* siehe auch [[AVR Softwarepool#RC5|RC5]]&lt;br /&gt;
* (C) [[IRMP]] - Infrared Multi Protocol Decoder:&lt;br /&gt;
**[[IRMP| Wiki Seite]]&lt;br /&gt;
**[http://www.mikrocontroller.net/topic/162119#1545798 Thread im Forum]&lt;br /&gt;
&lt;br /&gt;
==Kryptographie==&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/73468 Verschiedene kryptographische Funktionen] &lt;br /&gt;
&lt;br /&gt;
==LANC==&lt;br /&gt;
&lt;br /&gt;
(Steuerprotokoll für Video- und Digitalfotokameras, auch als Control-L bekannt)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/40463#302754 Sony LANC Auswertung mit AVR] (Atmega 128 @ 16 MHz)&lt;br /&gt;
&lt;br /&gt;
==LEDs und LED-Anzeigen==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76839#638278 Solarlicht Steuerung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/73776#606472 LED-Touch-Panel] (ARM)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/54561#421940 HSV RGB Led Dimmer, C Code &amp;amp; Video &amp;amp; Doku]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/67567#543492 Mini RGB Lichteffektgenerator mit Menü für Pic16F84]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48464#370871 Ansteuerung einer RGB LED (PWM)]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/87149#737282 3x7 Segment und 1 I/O-Pin (Assembler)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31370#240843 ADC mit Multiplexanzeige] (vier 7-Segmentanzeigen)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31388#241192 AVR-Lauflicht]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/94746#815809 HSB-&amp;gt;RGB Umrechnung rein in Assembler, auch für ATiny]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/110168 2x7-Segment an nur 3 Leitungen]&lt;br /&gt;
* (A) [[Ambilight in Hardware]]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/145156#1346531 µCke Microcontroller Mücke (Atmel Tiny13)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131525#1191497 AVR-Lichtorgel per FFT MEGA8 32 644 ]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/182305 TLC5940 16-Kanal 12bit LED Treiber ansteuern und HighPower LEDs über MosFETs treiben]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/185730 7Segment Coder]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/244768 RGB-Moodlight, ATMega8, Soft-PWM mit Gammakorrektur, IR-Fernbedienung]&lt;br /&gt;
&lt;br /&gt;
==LCD und VFD==&lt;br /&gt;
* (C) [http://bluematrixi.bl.funpic.de/index.php/elektronik-avr/lcd-display-nokia3310 Bibliothek für Nokia 3310 Lcd Ansteuerung in &amp;quot;C&amp;quot; - sehr gut]&lt;br /&gt;
*(C,A)[http://www.mikrocontroller.net/articles/Ansteuerung_Handy_Displays Ansteuerung_Handy_Displays]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/53137#413137 Programm zum Erstellen eigener Schriftarten (LCD)]&lt;br /&gt;
* (PC) [http://www.mikrocontroller.net/topic/54860#423255 LCD Schriftarten ( Fonts in veschiedenen Größen )]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31403  The Siemens S65 132x176, 65536 color display with AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48501#371218 LCD Ansteuerung im 4bit-Modus]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48456#370782 LCD Library T6963c]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76399#633680 &amp;quot;Bessere&amp;quot; T6963c Library]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25099#186569 LCD Controller für 640x480 LCD mit mega8515]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38923#287939 LCD Controller KS0073 Support im 4-Bit Mode]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/79609#664268 KS0066U oder Ähnliche --- LCD Treiber]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/81793#683135 Pollin E0855-2 SED1530-Treiber]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/90449#772843 LCD über nur einen IO-Pin ansteuern]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120475 VFD Library (Vacuum Fluorescent Display Library)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98321#851423 Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen] (jetzt auch mit 8 Graustufen)&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/140369 Menüsystem für beliebige schwarz-weiß LCDs bis 4096x4096 Pixeln und grafischem Editor]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/194149 Schnelle SED1520 Funktionsbibliothek mit Bildkonverter und Fontgenerator]&lt;br /&gt;
* (PC,C) [http://www.mikrocontroller.net/topic/234304 DOGXL Fontgenerator (SW+Graustufen)]&lt;br /&gt;
* (C,A) [http://www.mikrocontroller.net/topic/236862#2401250 Grafikfähiger LCD Controller für 320x240 LCD mit D-RAM]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/190078 LCD SHARP M078CKA mit LH155]&lt;br /&gt;
&lt;br /&gt;
==I2C==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98923#857451 Ultraschall Entfernungsmesser mit I2C, Eigenbau]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/83871#new  I2C-Master realisiert in Software, ohne TWI für alle ATMEGAs]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/38919#new  RS232 &amp;lt;-&amp;gt; TWI / I2C Interface für ATMega8 (ASM) inkl. Windows Software]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67698#544930 USI TWI Master]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/235733#2388116 Hardware TWI-MASTER Interrupt basierend für Mega AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/272621#new I2C/TWI Master-Interrupt Xmega-Assemblerbaustein]&lt;br /&gt;
&lt;br /&gt;
==Messgeräte==&lt;br /&gt;
===Drehzahlmesser===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/1518#8469 Drehzahlmesser 4 mal 7-Segment mit 90S2313]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/Drehzahlmesser Drehzahlmesser mit 4 mal 7-Segment anzeigen mit Tiny2313, Wiki-Artikel]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/231283 einfache Drehzahlmessung mit ATmega88]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/232485 4-Kanal Drehzahlmessung mit ATmega88]&lt;br /&gt;
&lt;br /&gt;
===Klopfsensormessgerät===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/Klopfsensormessgeraet Messgerät für Klopfgeräusche an Verbrennungsmotoren auf Basis des TPIC8101]&lt;br /&gt;
&lt;br /&gt;
===Entfernungsmesser===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98923#857451 Ultraschall Entfernungsmesser mit I2C, Eigenbau]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/130834 3D Umgebungserfassung mit einem auf zwei Servors montiertem Sharp Distanzsensor, Eigenbau]&lt;br /&gt;
&lt;br /&gt;
===Frequenzmesser===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/62610#495030 Frequenzmesser bis 2Mhz -- mit AVR ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48582#372072 Frequenzmessung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/62517#494146 Input Capture Pin (ICP) auslesen ( Frequenz messen)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25144#187587 Frequenzmessung und Impulszählung über den Parallelport-IR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31394#241251 einfacher 5 MHz Frequenzzähler (Assembler) ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/173665#new sehr genauer Frequenzmesser Atmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/186801#new  Reziproker Frequenzzähler+ Optimierte 64bit uint Routinen]&lt;br /&gt;
* (C+A) [http://www.mikrocontroller.net/topic/200279#new 6 Stellen von 1Hz bis 40MHz ATmega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/241150#2458079 Reziproker Frequenzzähler, GPS-stabilisiert, ATmega162]&lt;br /&gt;
&lt;br /&gt;
===Frequenzgenerator===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/152966#1438488 Einstellbarer Frequenzgenerator für 0.12 Hz - 8 MHz mit Atmega 8 und Bascom ]&lt;br /&gt;
&lt;br /&gt;
===Kompass===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/100239#870281 KOMPASS KMZ10A KMZ10B ATmega8 Assembler]&lt;br /&gt;
&lt;br /&gt;
===Messgeräte für elektronische Bauteile===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60797#477026 LC-METER / LC-Messgerät ATmega8 Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/60591#474873 Widerstandstester]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56770#438957 Ladungsmessgerät]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31386#241139 Transistortester]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131804#1194273 Transistortester]&lt;br /&gt;
&lt;br /&gt;
===Spannungsmesser===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31370#240843 ADC mit Multiplexanzeige] - Voltmeter&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/69021#558098 Multimeter]&lt;br /&gt;
&lt;br /&gt;
===Thermometer===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53127#413006 Thermometer mit LED &amp;amp; LM35]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Viele DS18x20-Thermometer in einem Webserver]&lt;br /&gt;
&lt;br /&gt;
===Oszilloskop===&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/53129#413011 Einfaches Oszilloskop - Bascom]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/48586#372093 Oszi- &amp;amp; Logikanalyser mit LCD]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31376#240880 einfaches DIGITAL- Oszilloskop (800 Datenpunkte) Assembler]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/56616#437772 Einfaches &amp;quot;Oszilloskop&amp;quot;]&lt;br /&gt;
* (C) [http://www.christoph-lauer.de/Homepage/Blog/Eintrage/2010/8/1_Embedded_C_based_Spectrumanalyzer.html ATXMega based Oscilloscope and Spectrumanalyzer]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/228997#2308320 Selbstbau Digital Storage Oszilloskop]&lt;br /&gt;
&lt;br /&gt;
===Beschleunigungssensor===&lt;br /&gt;
* (c++) [http://www.mikrocontroller.net/topic/268214 Einfache BMA020 Library, mit I2C]&lt;br /&gt;
&lt;br /&gt;
==MIDI==&lt;br /&gt;
&lt;br /&gt;
(Musical Instrument Digital Interface, Datenübertragungsstandard für Musikinstrumente)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/106512# Drum-Trigger mit MIDI-Ausgabe]&lt;br /&gt;
&lt;br /&gt;
==MMC==&lt;br /&gt;
&lt;br /&gt;
(Multimedia Card, digitales Flash-Speichermedium)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25056#186117 SourceCode MMC die Zweite]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48481#370950 MMC/SD-Karte mit FAT16 an AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/67047#538510 MMC/SD Bootloader füt ATMega16]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/14800#102024 MMC/SD ansteuern mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/FAT32 MMC/SD - FAT16/32 Bibliothek für AVR  mit Wiki]&lt;br /&gt;
&lt;br /&gt;
==Netzgeräte==&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/60786#476904 Labornetzgerät]&lt;br /&gt;
* [[RADLAB-PS1]] [http://www.mikrocontroller.net/topic/124858#1138781 Netzteil um LM317 mit Strombegrenzung und Anzeige!]&lt;br /&gt;
&lt;br /&gt;
==Netzwerk==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/87517#new Kleiner ENC28J60 µWebserver von SimonK]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/82127#new Ulrich Radigs ENC28J60 mit leicht lötbaren/beschaffbaren Bauteilen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/131825 Dirk Broßwick Webserver auf ENC28j60 Basis mit einem ATmega2561, es gibt auch einen Port auf das AVR-NET IO]&lt;br /&gt;
&lt;br /&gt;
==Parser==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64763#517245 Zwei Parser für numerische Ausdrücke]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/76842#638283 uShell - ein universeller Parser für uCs]&lt;br /&gt;
&lt;br /&gt;
==RFID==&lt;br /&gt;
&lt;br /&gt;
(Radio Frequency Identification, Verfahren zur funkbasierten Identifizierung und Lokalisierung von Gegenständen)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/228709 Soft-RFID ohne RFID-IC]&lt;br /&gt;
&lt;br /&gt;
==RC - Fernsteuerungen/Servos==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48529#371582 RC Summen Signal erzeugen ]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/192453 RC Summen Signal dekodieren ]&lt;br /&gt;
&lt;br /&gt;
==RC5==&lt;br /&gt;
&lt;br /&gt;
(verbreitetes Datenübertragungsprotokoll für Infrarot-Fernbedienungen)&lt;br /&gt;
&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/14789#101536 RC5 Sender auf einem Attiny11L]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/74013#609097 RGB-Moodlight auf ATTiny2313 mit RC5-Fernbedienung]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12216#80856 Fernbedien RC5 Empfänger]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/59235#460765 RC5 Sender selber bauen ???]&lt;br /&gt;
&lt;br /&gt;
==Ringpuffer==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/66789#536189 Ringpuffer AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101472#882716 AVR-GCC: UART mit FIFO]&lt;br /&gt;
&lt;br /&gt;
==SD==&lt;br /&gt;
&lt;br /&gt;
(Secure Digital Memory Card; digitales Flash-Speichermedium)&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48542#371695 Mr.MidiPlayer - Spielt alle MIDI-Dateien von einer SD-Karte] (siehe auch: [[Midi_Rekorder_mit_MMC/SD-Karte]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25035#185861 MIDI-Rekorder mit SD/MMC und AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68257#550336 Datenrekorder auf SD-Karte mit mega88]&lt;br /&gt;
&lt;br /&gt;
==Sonstiges==&lt;br /&gt;
&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/111783#994358 Sonnenstandberechnung mit Atmega 8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/articles/UAC_Mikrocontroller_ASCII_Console uAC Mikrocontroller ASCII Console]&lt;br /&gt;
&lt;br /&gt;
==Spaßprojekte==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/99803#866081 Glühwürmchen in Rotkohlglas gefangen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/119876#1083044 Miniprojekt: Lagerfeuer-LED (ATtiny25)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120289#1087905 Klingel mit 100 Melodien - last minute Weihnachtsgeschenk]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/145156#1346531 µCke Microcontroller Mücke (Atmel Tiny13)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/167528#1601077 Toastbrote zählen]&lt;br /&gt;
&lt;br /&gt;
==Spiele==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48505#371259 Tetris auf dem AtMega8]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/187253# Atmega8 Schachuhr mit Max7219 ]&lt;br /&gt;
&lt;br /&gt;
==Steuerungen==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/123551 Aquarium Controller]&lt;br /&gt;
&lt;br /&gt;
==Taster / Schalter==&lt;br /&gt;
===mechanisch===&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/6492#41625 Tasten entprellen - Bulletproof] (siehe auch: [[Entprellung]])&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48465#370877 Universelle Tastenabfrage]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6491#41624 Tasten-Matrix entprellen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64731#517001 Tastenmatrix auslesen über nur 2 Leitungen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/64743#517105 Tasten Entprellen für N00bs]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/77863#648213 Taster + LED am selben Draht (4*)]&lt;br /&gt;
===kapazitiv===&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38904  Sensor mit nur einer Kontaktfläche]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25045 Einfache Sensortaste]&lt;br /&gt;
&lt;br /&gt;
==Tonerzeugung==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/66945#537624 ATMEGA8 Soundgenerator/Synthesizer]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/120289#1087905 Klingel mit 100 Melodien - last minute Weihnachtsgeschenk]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/134362 RTTTL Melodiegenerator mit ATTINY85]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/232702#new RTTTL Melodiegenerator mit ATMEGA8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25051 Melodie ausgeben mit AVR ATTiny12]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/145156#1346531 µCke Microcontroller Mücke (Atmel Tiny13)]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/137629#1259132 Melodieklingel BASCOM ATmega8]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/191596 2Kanal Synthesizer ATtiny 2313, 85, ..]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/232845 17 Kanal Avr Synthesizer]&lt;br /&gt;
&lt;br /&gt;
==TWI==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/87597#742070 AVR TWI Master und Slave Funtionen in C]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/31404#242081 TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8]&lt;br /&gt;
&lt;br /&gt;
==USB==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/75254#622120 USB Host Stack für Eingebettete Systeme (LGPL)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/68442#552128 USB RFID Tag Leser]&lt;br /&gt;
* (A,C) [http://www.mikrocontroller.net/topic/92979#797957 AVR ATmega8TestBoard]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/90791#776280 Relaiskarte für den USB Port]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/130381#1179352 USB-Stick am Mikrocontroller VNC1L]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/155241 PDIUSBD12 Treiber und micro USB-Device stack]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/192453 HID-Joystick mit V-USB ]&lt;br /&gt;
&lt;br /&gt;
==UART==&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101472#882716 AVR-GCC: UART mit FIFO]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/38928#287985 Software UART]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/125651#1147436 Software UART mit FIFO]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/175946#1690682 uParse] - ein kompakter und vielseitiger Parser (Atmega32) für [[RS232]]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/159753#1517744 Einfacher Interpreter für Komandozeilen/Befehlszeilen] (Atmega32) für [[RS232]]&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53140#413249 AVR ASCII Video Terminal - 40 x 25 - BAS Signal]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/53139#413225 TV VIDEO BILD BAS Frequenzzähler DVM Atmega8 Assembler]&lt;br /&gt;
* (A) [http://www.electronicspit.com/video/ Videosignal in Farbe aus dem ATMega32] (URL nicht mehr erreichbar)&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/25091#new VGA Testbildgenerator]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/101429#882288 ATmega8 erzeugt Video in C!]&lt;br /&gt;
&lt;br /&gt;
==Zeitgeber und Uhren==&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/12185#80055 Die genaue Sekunde / RTC]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/74673#616226 LCD-Timer für Belichtungsgerät]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/119859#1082804 DS1307 Assembler-Code]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31374#240878 AVR Library für RTC 12C887 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25136#187534 RTC DS1302 in C]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25087#186454 RTC + Scheduler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/53131#413059 Jumbo-LED Uhr]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/6516#41903 Zeit + Temperatur auf LCD mit AVR]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/25069 Sekunden in Zeit/Datum umwandeln (mit Sommerzeit/Schaltjahren)]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/48560#371911 BASCOM Uhr mit Butterfly]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/48450#370765 Countdown timer für UV Belichter]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/98885 Countdown Timer mit ATtiny2313]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/12176#79672 Wartezeiten effektiv (Scheduler)]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/31408#536372 Schaltuhr mit DCF77-Referenz in einem Webserver, Steuerung von Funksteckdosen]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/100892#876549 Eieruhr mit ATtiny24V/ATtiny2313V]&lt;br /&gt;
* (B) [http://www.mikrocontroller.net/topic/151236 Zeitauslöser für Casio EX F1 mit Attiny2313]&lt;br /&gt;
* (A) [http://www.mikrocontroller.net/topic/151260#1419218 DCF77 Uhr 7 Segment LED ATmega8 Assembler]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/177688# NIXIE Uhr mit vielen Funktionen in C mit ATTiny2313]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/233699 Stoppuhr – Geschwindigkeit – Pulsweite mit Atmega88]&lt;br /&gt;
* (C) [http://www.mikrocontroller.net/topic/275514 Timer bis 99:59 min - LED Display NSM4202, Drehgeber - At90S2313]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[AVR-Codesammlung Übersicht]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR]]&lt;br /&gt;
[[Kategorie:Forum]]&lt;br /&gt;
[[Kategorie:Listen]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68838</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68838"/>
		<updated>2012-10-25T08:23:08Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Siehe auch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
(Erklärung wird nachgereicht)&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die fref/fx Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von fref geöffnet. Mit fref=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind realistisch. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 fref-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/200279#2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279] (bitte nicht mehr benutzen!)&lt;br /&gt;
* neuer Thread im Forum &amp;quot;Codesammlung&amp;quot; [http://www.mikrocontroller.net/topic/274541]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68837</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68837"/>
		<updated>2012-10-25T08:18:43Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
(Erklärung wird nachgereicht)&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die fref/fx Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von fref geöffnet. Mit fref=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind realistisch. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 fref-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/200279#2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68801</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68801"/>
		<updated>2012-10-22T11:25:19Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
(Erklärung wird nachgereicht)&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die fref/fx Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von fref geöffnet. Mit fref=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind realistisch. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 fref-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x0000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/200279#2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68800</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68800"/>
		<updated>2012-10-22T11:24:12Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Implementierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
(Erklärung wird nachgereicht)&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.7 nutzt je 24 Bit für die fref/fx Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von fref geöffnet. Mit fref=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind realistisch. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware 1.7 kann wahlweise für 7 Stellen konfiguriert werden. Entsprechend sollte die Torzeit dann auf 10*1024*1024 fref-Impulse verlängert werden, was 732ms Torzeit bzw. 1.3 Messungen pro Sekunde ergibt.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/200279#2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68799</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68799"/>
		<updated>2012-10-22T11:05:42Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
(Erklärung wird nachgereicht)&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.6 nutzt je 24 Bit für die fref/fx Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von fref geöffnet. Mit fref=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind realistisch. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
Da der Thread ziemlich ubergelaufen ist und auch viel überholte Informationen enthielt, habe ich einen [http://www.mikrocontroller.net/topic/274541 neuen Thread] im Forum &amp;quot;Codesammlung&amp;quot; eröffnet.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/200279#2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68798</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68798"/>
		<updated>2012-10-22T11:03:55Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
(Erklärung wird nachgereicht)&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.6 nutzt je 24 Bit für die fref/fx Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von fref geöffnet. Mit fref=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind realistisch. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158084/AVR-Zaehler-LED-1.7.tar.gz LED Firmware 1.7] (Rundung), [http://www.mikrocontroller.net/topic/274541#2882811 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/200279#2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68797</id>
		<title>Frequenzzählermodul</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Frequenzz%C3%A4hlermodul&amp;diff=68797"/>
		<updated>2012-10-22T10:42:42Z</updated>

		<summary type="html">&lt;p&gt;A-za-z0-9: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von [http://www.mikrocontroller.net/user/show/a-za-z0-9 Axel (XL) Schwenke]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
&lt;br /&gt;
Dieses Projekt implementiert ein universelles Frequenzzählermodul. Es ist gedacht als Einbaumodul für Geräte wie Funktionsgeneratoren, Dipmeter, Empfänger u.ä. Ergänzt um Netzteil, Vorverstärker und evtl. Vorteiler kann das Modul auch als eigenständiger Frequenzzähler verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Eigenschaften:&lt;br /&gt;
&lt;br /&gt;
* verwendet das Reziprokzähler-Verfahren mit konstant 6 Stellen Auflösung von &amp;lt;1Hz bis ca. 40MHz&lt;br /&gt;
* Zeitbasis von 8MHz bis 16MHz beliebig wählbar&lt;br /&gt;
* kompaktes Modul auf einer Platine 80x35mm im Sandwich mit einem alphanumerischen LCD&lt;br /&gt;
* analoge Trimmung mit Spindelpoti und/oder digitale Trimmung (fref im EEPROM)&lt;br /&gt;
&lt;br /&gt;
Als Bauelemente kommen zum Einsatz: 1x ATmega8, 1x 74HC590, 1x 74HC74, alphanumerisches LCD (1x10, 1x16 oder 2x16). &lt;br /&gt;
&lt;br /&gt;
Alternativ existiert auch eine Variante mit einem 6-stelligen LED Display. Das LED Display wird an den gleichen 14 Kontakten angeschlossen wie das LCD.&lt;br /&gt;
&lt;br /&gt;
Die Default-Zeitbasis ist ein [http://blog.xl-im.net/index.php?/archives/15-14.31818-MHz.html 14.318182MHz] Quarz, wie er z.B. aus alten PC-Mainboards ausgelötet werden kann. Diese Lösung reicht für eine vernünftige Genauigkeit bei Zimmertemperatur. Die 6 Stellen Auflösung sind als Kompromiß anzusehen. Prinzipiell sind mit einer kleinen Firmware-Änderung auch 7 Stellen möglich, allerdings wird dann ein TCXO oder besser noch OCXO Pflicht.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
LCD- und LED-Version unterscheiden sich nur in der Ansteuerung der Anzeige. Der Rest ist identisch. Wenn man den 74HC138 und die Anodentreiber zusammen mit den LED-Displays auf eine extra Platine packt, kann man die gleiche Basis-Platine für LCD- und LED-Version verwenden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; Michael D. hat ein [http://www.mikrocontroller.net/attachment/130912/Freq-Counter-REV2.0.7z Layout ] für eine Display-Platine für die LED-Version gemacht. Diese Platine hat die gleichen Maße wie ein LC-Display und kann so &amp;quot;huckepack&amp;quot; mit der Grundplatine verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update:&#039;&#039;&#039; in [http://www.mikrocontroller.net/topic/200279#2873304 diesem Diskussionsbeitrag] ist ein weiteres Layout für eine Display-Platine. Auch diese kann direkt gegen ein LC-Display getauscht werden. Achtung: diese Platine nutzt eine andere Zuordnung von Segmenten zu Portleitungen!&lt;br /&gt;
&lt;br /&gt;
Neben der Standardbeschaltung des ATmega8 gibt es eine erste Zählstufe mit einem 74HC590 8-Bit-Binärzähler mit Gate und Tristate-Ausgängen. Eine Hälfte des 74HC74 dient als Tor-Flipflop, die zweite verlängert den Übertrags-Impuls des HC590 so daß er zum Triggern des Timer0 im AVR taugt.&lt;br /&gt;
&lt;br /&gt;
Der Referenzzähler ist mit der Capture-Einheit des AVR realisiert. Was den einzelenen Zählketten an Länge fehlt, wird durch die entsprechenden Überlauf-Interrupts in Software ergänzt.&lt;br /&gt;
&lt;br /&gt;
Die Spannung an Pin PC5 des AVR wird als Hardware-Trimmung verwendet. Wenn man den Pin auf GND legt (einige Versionen sehen einen Jumper dafür vor) dann ist diese Trimmung deaktiviert.&lt;br /&gt;
&lt;br /&gt;
8 Pins des AVR bilden einen Datenbus, der zur Anbindung des HC590 und des LCD verwendet wird. In der LED-Version treibt der AVR direkt die Kathoden des LED-Displays.&lt;br /&gt;
&lt;br /&gt;
=== LCD-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmlcdsch.png|center|555px]]&lt;br /&gt;
&lt;br /&gt;
Den Schaltplan gibts auch als [http://www.mikrocontroller.net/wikifiles/4/45/Avrzmlcd.pdf PDF] und [http://www.mikrocontroller.net/attachment/95202/smd.sch Eagle Schematic]&lt;br /&gt;
&lt;br /&gt;
=== LED-Version ===&lt;br /&gt;
&lt;br /&gt;
[[Bild:avrzmledsch.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
Schaltplan als [http://www.mikrocontroller.net/attachment/157437/schematic.pdf PDF]&lt;br /&gt;
&lt;br /&gt;
== Meßverfahren ==&lt;br /&gt;
&lt;br /&gt;
=== Reziprokzähler ===&lt;br /&gt;
&lt;br /&gt;
(Erklärung wird nachgereicht)&lt;br /&gt;
&lt;br /&gt;
=== Implementierung ===&lt;br /&gt;
&lt;br /&gt;
Die Implementierung in Firmware-Versionen bis 1.6 nutzt je 24 Bit für die fref/fx Zähler. Das Tor wird für mindestens 4*1024*1024 Impulse von fref geöffnet. Mit fref=14.31MHz resultieren daraus folgende Eckpunkte:&lt;br /&gt;
&lt;br /&gt;
* nominale Torzeit 293ms, aber immer eine ganze Anzahl von Perioden der Meßfrequenz&lt;br /&gt;
* minimale Meßfrequenz 0.854Hz&lt;br /&gt;
* maximale Meßfrequenz wird von der Hardware bestimmt; 40MHz sind realistisch. 64MHz wurden auch schon erreicht&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware zeigt den Meßwert im Klartext mit automatisch gewählter Einheit (mHz, Hz, kHz, MHz) an. Die LCD-Firmware ab 1.5 zeigt alternativ/zusätzlich die Periodendauer in ns, µs, ms oder s an.&lt;br /&gt;
&lt;br /&gt;
Die LED-Version verwendet drei Einzel-LED für Hz, kHz und MHz. Ab Version 1.6 zeigt die LED-Version wahlweise (Auswahl mit Jumper J1) auch die Periodendauer an und verwendet dann drei weitere LED für ns, µs und ms.&lt;br /&gt;
&lt;br /&gt;
Die LCD-Firmware hat 3 vordefinierte Anzeigelayouts für LCD Module mit 1x10, 1x16 oder 2x16 Zeichen. Die einzeiligen Displays zeigen entweder die Frequenz oder die Periodendauer an, umgeschaltet werden kann mit dem Jumper J1. Weitere Anzeige-Layouts können einfach nachgerüstet werden ([http://www.mikrocontroller.net/topic/200279#2291231 Beispiel]).&lt;br /&gt;
&lt;br /&gt;
Bei einem Überlauf des Referenz-Zählers (Signal fehlt oder Frequenz zu niedrig) wird der letzte Meßwert festgehalten und ein Unterlauf signalisiert.&lt;br /&gt;
&lt;br /&gt;
Die Kalibrierung kann mit einem Spindeltrimmer vorgenommen werden. Hier ist der Einstellbereich +/- 511Hz (bezogen auf fref). Alternativ kann der Wert von fref auch digital eingestellt werden. Er steht als 32-bit little-endian Integer im EEPROM ab Adresse 0x000. Details zur Kalibrierung finden sich in CALIBRATE.txt im Firmware-Archiv.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
Firmware-Archive. Diese enthalten die Quellen, Schaltplan und diverse Zusatzinformationen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/106905/AVR-Zaehler-LED.tar.gz LED Firmware 1.0]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/107718/AVR-Zaehler-V1.4.tar.gz LCD Firmware 1.4] (stabil)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/117882/AVR-Zaehler-LCD-V1.5.tar.gz LCD Firmware 1.5] (mit Periodendaueranzeige)&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/157436/AVR-Zaehler-LED-1.6.tar.gz LED Firmware 1.6] (Periodendauer, Rundung) siehe [http://www.mikrocontroller.net/topic/200279#2873286 Release Notes]&lt;br /&gt;
* [http://www.mikrocontroller.net/attachment/158072/AVR-Zaehler-LCD-1.7.tar.gz LCD Firmware 1.7] (Rundung, 6 oder 7 Stellen), [http://www.mikrocontroller.net/topic/274541#2882782 Release Notes]&lt;br /&gt;
&lt;br /&gt;
alternative Stromlaufpläne (Eagle) und Platinenlayouts finden sich [http://www.mikrocontroller.net/topic/200279 im Diskussions-Thread]. Ebenso Bilder von Aufbauten realer Module und Vorschläge für Eingangsverstärker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; das Firmware-Archiv enthält auch ein Makefile. Die Entwicklungsumgebung ist Linux mit avr-gcc 4.3.3 und avr-libc 1.6.6. Es gibt Feedback, daß avr-libc 1.6.7 nicht funktioniert. Ansonsten läßt sich die Firmware auch unter Windows bauen (z.B. mit WinAVR-20090313). AVR-Studio wird jedoch nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Eine Testversion mit 32-Bit Zählumfang und 64-Bit ist nun online:&lt;br /&gt;
* [http://www.mikrocontroller.net/topic/200279#2314623 32-Bit Zähler Testversion]&lt;br /&gt;
&lt;br /&gt;
== ToDo Liste ==&lt;br /&gt;
&lt;br /&gt;
* Erweiterung der Zählketten auf 32 Bit und Ausbau der Arithmetik auf 64 Bit; das erlaubt dann Meßfrequenzen von 3mHz bis (mit Vorteiler) mehrere GHz&lt;br /&gt;
* Berücksichtigung von bis zu 2 Vorteilern (über weitere Jumper)&lt;br /&gt;
* evtl. Berücksichtigung eines Offsets (z.B. ZF in einem Empfänger)&lt;br /&gt;
* Beheben der Probleme mit avr-libc 1.6.7&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* Diskussion zu diesem Projekt: [http://www.mikrocontroller.net/topic/200279]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>A-za-z0-9</name></author>
	</entry>
</feed>