<?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=Bullar</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=Bullar"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Bullar"/>
	<updated>2026-04-15T21:28:42Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84373</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84373"/>
		<updated>2014-08-05T20:09:32Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Mehrere Tage Dauerbetrieb und mehrere Monate Stand-by mit einer Akkuladung&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
&lt;br /&gt;
====Nachtrag====&lt;br /&gt;
Konstruktionsbedingt kann es zur Tiefenentladung und damit zur Zerstörung des LiPos kommen. Der AVR stellt zwar die Unterspannung fest und startet nicht aber der LiPo wird durch den Ruhestrom weiter entladen. Abhilfe schafft da nur ein zusätzliches Batteriemanagementsystem (PCB Schutzschaltung), die es beim LiPo Lieferanten für kleines Geld gibt (z.B. PCB 2,5 A 1 Zelle Lipo Li-ION -259). Durch die kleine Bauform (15.0 x 4,0 x 2.5 mm) passt das PCB noch nachträglich ins Gehäuse. Damit kann dann dem LiPo nun nichts mehr passieren.&lt;br /&gt;
&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber sicher immer verbessern. Übrigens der Strombedarf im Arbeitsbetrieb ohne Tonausgabe beträgt ungefähr 13mA, mit Tonausgabe 23 mA. Der Stand-by haut mit 215uA rein. Ein halbes Jahr kann man also ohne Nachladen auskommen. Im Dauer-Betrieb kommt man wohl so auf 2-3 Tage. Der heimische Praxistest wird das hoffentlich bestätigen.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter_v11.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:TonOhmMeter_HEX.zip|HEX Dateien zum schnellen Programmieren]]&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TonOhmMeter_BOTTOM.pdf|Bestückungsplan Rückseite]]&lt;br /&gt;
*[[Media:TonOhmMeter_TOP.pdf| Bestückungsplan Vorderseite]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://shop.lipopower.de/PCB-2-A-1-Zelle-Lipo-LiFePO-137 Das LiPO Schutz-PCB&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84372</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84372"/>
		<updated>2014-08-05T20:08:54Z</updated>

		<summary type="html">&lt;p&gt;Bullar: PCB Type angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Mehrere Tage Dauerbetrieb und mehrere Monate Stand-by mit einer Akkuladung&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
&lt;br /&gt;
====Nachtrag====&lt;br /&gt;
Konstruktionsbedingt kann es zur Tiefenentladung und damit zur Zerstörung des LiPos kommen. Der AVR stellt zwar die Unterspannung fest und startet nicht aber der LiPo wird durch den Ruhestrom weiter entladen. Abhilfe schafft da nur ein zusätzliches Batteriemanagementsystem (PCB Schutzschaltung), die es beim LiPo Lieferanten für kleines Geld gibt (z.B. PCB 2,5 A 1 Zelle Lipo Li-ION -259). Durch die kleine Bauform (28,8 x 4,0 x 1,9 mm) passt das PCB noch nachträglich ins Gehäuse. Damit kann dann dem LiPo nun nichts mehr passieren.&lt;br /&gt;
&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber sicher immer verbessern. Übrigens der Strombedarf im Arbeitsbetrieb ohne Tonausgabe beträgt ungefähr 13mA, mit Tonausgabe 23 mA. Der Stand-by haut mit 215uA rein. Ein halbes Jahr kann man also ohne Nachladen auskommen. Im Dauer-Betrieb kommt man wohl so auf 2-3 Tage. Der heimische Praxistest wird das hoffentlich bestätigen.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter_v11.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:TonOhmMeter_HEX.zip|HEX Dateien zum schnellen Programmieren]]&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TonOhmMeter_BOTTOM.pdf|Bestückungsplan Rückseite]]&lt;br /&gt;
*[[Media:TonOhmMeter_TOP.pdf| Bestückungsplan Vorderseite]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://shop.lipopower.de/PCB-2-A-1-Zelle-Lipo-LiFePO-137 Das LiPO Schutz-PCB&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Bullar&amp;diff=84343</id>
		<title>Benutzer:Bullar</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Bullar&amp;diff=84343"/>
		<updated>2014-08-03T19:57:05Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AVR Neuling. &lt;br /&gt;
&lt;br /&gt;
Im richtigen Leben angestellt bei einem Japanischen Halbleiterhersteller&lt;br /&gt;
&lt;br /&gt;
Beiträge:&lt;br /&gt;
* TonOhmMeter&lt;br /&gt;
* SensorLogger&lt;br /&gt;
&lt;br /&gt;
Kontakt: Rolf.Bulla@gmail.com&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84342</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84342"/>
		<updated>2014-08-03T19:55:52Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Mehrere Tage Dauerbetrieb und mehrere Monate Stand-by mit einer Akkuladung&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
&lt;br /&gt;
====Nachtrag====&lt;br /&gt;
Konstruktionsbedingt kann es zur Tiefenentladung und damit zur Zerstörung des LiPos kommen. Der AVR stellt zwar die Unterspannung fest und startet nicht aber der LiPo wird durch den Ruhestrom weiter entladen. Abhilfe schafft da nur ein zusätzliches Batteriemanagementsystem (PCB Schutzschaltung), die es beim LiPo Lieferanten für kleines Geld gibt (z.B. PCB 2 A 1 Zelle Lipo Li-ION -137). Durch die kleine Bauform (28,8 x 4,0 x 1,9 mm) passt das PCB noch nachträglich ins Gehäuse. Damit kann dann dem LiPo nun nichts mehr passieren.&lt;br /&gt;
&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber sicher immer verbessern. Übrigens der Strombedarf im Arbeitsbetrieb ohne Tonausgabe beträgt ungefähr 13mA, mit Tonausgabe 23 mA. Der Stand-by haut mit 215uA rein. Ein halbes Jahr kann man also ohne Nachladen auskommen. Im Dauer-Betrieb kommt man wohl so auf 2-3 Tage. Der heimische Praxistest wird das hoffentlich bestätigen.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter_v11.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:TonOhmMeter_HEX.zip|HEX Dateien zum schnellen Programmieren]]&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TonOhmMeter_BOTTOM.pdf|Bestückungsplan Rückseite]]&lt;br /&gt;
*[[Media:TonOhmMeter_TOP.pdf| Bestückungsplan Vorderseite]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://shop.lipopower.de/PCB-2-A-1-Zelle-Lipo-LiFePO-137 Das LiPO Schutz-PCB&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84341</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84341"/>
		<updated>2014-08-03T19:54:21Z</updated>

		<summary type="html">&lt;p&gt;Bullar: BMS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Mehrere Tage Dauerbetrieb und mehrere Monate Stand-by mit einer Akkuladung&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
&lt;br /&gt;
====Nachtrag====&lt;br /&gt;
Konstruktionsbedingt kann es zur Tiefenentladung und damit zur Zerstörung des LiPos kommen. Der AVR stellt zwar die Unterspannung fest und startet nicht aber der LiPo wird durch den Ruhestrom weiter entladen. Abhilfe schafft da nur ein zusätzliches Batteriemanagementsystem (PCB Schutzschaltung), die es beim LiPo Lieferanten für kleines Geld gibt (z.B. PCB 2 A 1 Zelle Lipo Li-ION -137). Durch die kleine Bauform (28,8 x 4,0 x 1,9 mm) passt das PCB noch nachträglich ins Gehäuse. Damit kann dann dem LiPo nun nichts mehr passieren.&lt;br /&gt;
&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber sicher immer verbessern. Übrigens der Strombedarf im Arbeitsbetrieb ohne Tonausgabe beträgt ungefähr 13mA, mit Tonausgabe 23 mA. Der Stand-by haut mit 215uA rein. Ein halbes Jahr kann man also ohne Nachladen auskommen. Im Dauer-Betrieb kommt man wohl so auf 2-3 Tage. Der heimische Praxistest wird das hoffentlich bestätigen.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter_v11.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:TonOhmMeter_HEX.zip|HEX Dateien zum schnellen Programmieren]]&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TonOhmMeter_BOTTOM.pdf|Bestückungsplan Rückseite]]&lt;br /&gt;
*[[Media:TonOhmMeter_TOP.pdf| Bestückungsplan Vorderseite]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84340</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84340"/>
		<updated>2014-08-03T19:34:51Z</updated>

		<summary type="html">&lt;p&gt;Bullar: Neue Bestückungspläne&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Mehrere Tage Dauerbetrieb und mehrere Monate Stand-by mit einer Akkuladung&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber sicher immer verbessern. Übrigens der Strombedarf im Arbeitsbetrieb ohne Tonausgabe beträgt ungefähr 13mA, mit Tonausgabe 23 mA. Der Stand-by haut mit 215uA rein. Ein halbes Jahr kann man also ohne Nachladen auskommen. Im Dauer-Betrieb kommt man wohl so auf 2-3 Tage. Der heimische Praxistest wird das hoffentlich bestätigen.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter_v11.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:TonOhmMeter_HEX.zip|HEX Dateien zum schnellen Programmieren]]&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TonOhmMeter_BOTTOM.pdf|Bestückungsplan Rückseite]]&lt;br /&gt;
*[[Media:TonOhmMeter_TOP.pdf| Bestückungsplan Vorderseite]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:TonOhmMeter_BOTTOM.pdf&amp;diff=84339</id>
		<title>Datei:TonOhmMeter BOTTOM.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:TonOhmMeter_BOTTOM.pdf&amp;diff=84339"/>
		<updated>2014-08-03T19:31:46Z</updated>

		<summary type="html">&lt;p&gt;Bullar: Bestückungsplan Bottom&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bestückungsplan Bottom&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:TonOhmMeter_TOP.pdf&amp;diff=84338</id>
		<title>Datei:TonOhmMeter TOP.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:TonOhmMeter_TOP.pdf&amp;diff=84338"/>
		<updated>2014-08-03T19:31:05Z</updated>

		<summary type="html">&lt;p&gt;Bullar: Bestückungsplan TOP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bestückungsplan TOP&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84337</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=84337"/>
		<updated>2014-08-03T19:10:23Z</updated>

		<summary type="html">&lt;p&gt;Bullar: HEX Files added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Mehrere Tage Dauerbetrieb und mehrere Monate Stand-by mit einer Akkuladung&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber sicher immer verbessern. Übrigens der Strombedarf im Arbeitsbetrieb ohne Tonausgabe beträgt ungefähr 13mA, mit Tonausgabe 23 mA. Der Stand-by haut mit 215uA rein. Ein halbes Jahr kann man also ohne Nachladen auskommen. Im Dauer-Betrieb kommt man wohl so auf 2-3 Tage. Der heimische Praxistest wird das hoffentlich bestätigen.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter_v11.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:TonOhmMeter_HEX.zip|HEX Dateien zum schnellen Programmieren]]&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:TonOhmMeter_HEX.zip&amp;diff=84336</id>
		<title>Datei:TonOhmMeter HEX.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:TonOhmMeter_HEX.zip&amp;diff=84336"/>
		<updated>2014-08-03T19:08:02Z</updated>

		<summary type="html">&lt;p&gt;Bullar: HEX Files zum schnellen Programmieren.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HEX Files zum schnellen Programmieren.&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=73297</id>
		<title>SensorLogger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=73297"/>
		<updated>2013-03-01T20:19:18Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Empfangsmodul */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von Rolf Bulla&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Sensorlogger_top.jpg|thumb|200px|Der fertige Sensorlogger]]&lt;br /&gt;
[[Bild: Sensorlogger_bottom.jpg|thumb|100px|und hier die Rückseite mit microSD Karte]]&lt;br /&gt;
Die Idee zu der folgenden Schaltung ist eigentlich aus der Überlegung entstanden, dass es neben der Verbrauchsaufzeichnung der heimischen Heizung (hier Gas) ganz interessant wäre, auch die Außen und Innentemperatur mit aufzuzeichnen. Schließlich gilt ja, je kälter desto mehr heizen. Eine Temperaturmessung hat man vielleicht ja schon zu Hause im Einsatz in Form einer Wetterstation. Warum also nicht die drahtlose Übertragung der Sensoren zur Wetterstation &#039;anzapfen&#039;...&lt;br /&gt;
&lt;br /&gt;
Übrigens wird die oben erwähnte Energieerfassung (inkl. Strom und Wasser) über den freien Smart Meter Ansatz von http://www.volkszaehler.org erledigt. Aber dazu nachher noch mehr.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Das Gerät soll also das IT+ Sensorprotokoll empfangen und verstehen und die so erfassten Messwerte an das Smart Meter über Ethernet ins Intra- oder Internet liefern. Um auch Netzwerkunabhängig aufzeichnen zu können wäre ein MicroSD Interface zur Datenspeicherung eine nette Spielerei. Noch mal zusammengefasst:&lt;br /&gt;
* Empfang und Dekodierung der IT+ Protokolldaten&lt;br /&gt;
* Speichern der Daten auf MicroSD-Karte&lt;br /&gt;
* Senden der Messdaten über Ethernet&lt;br /&gt;
* kleines Standardgehäuse&lt;br /&gt;
* externes Standardnetzteil &lt;br /&gt;
* und wie immer Standardbauteile und preiswert&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Wenn sich an das IT+ Protokoll wagt, so findet man einige Quellen (siehe Links). Vom Sensor werden so alle 4.5 Sekunden&lt;br /&gt;
immer 5 Bytes gesendet. Die Frequenz ist af 868MHz festgelegt. Falls der Sensor auch die Luftfeuchtigkeit messen kann, so kommt der Wert mit, wenn nicht dann gibt es einen Fantasiewert (=106). Jeder Sensor verfügt über eine Adresskodierung. &amp;lt;u&amp;gt;Vorsicht es gibt Sensoren, die nach dem Batteriewechsel eine neue Adresse verwenden.&amp;lt;/u&amp;gt;. Über die Adresse lassen sich auch mehrere Sensoren parallel auswerten.&lt;br /&gt;
Zu Beachten ist auch, das keine negativen Werte übertragen werden, da die Temperatur vor der Übertragung immer einen Offset von 40 erhält.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// ##### IT+ Frame #####&lt;br /&gt;
// Frame example (5 byte):&lt;br /&gt;
// 92h 03h 94h 59h 3Ch  --&amp;gt; Addr:32, Temp:-0.6, Hygro:89.0&lt;br /&gt;
// 92h 86h 24h 28h DEh  --&amp;gt; Addr:40, Temp:22.4, Hygro:40.0&lt;br /&gt;
// | || |  ||  ||  ||&lt;br /&gt;
// 9 28  624   28  DE&lt;br /&gt;
// | |    |    |   +--&amp;gt; CRC-8 (x8 + x5 + x4 +1)&lt;br /&gt;
// | |    |    +------&amp;gt; Hygro in % &lt;br /&gt;
// | |    |				  bit6..0 = hygro value (0..127, 106 = no hygro)&lt;br /&gt;
// | |    |				  bit7 = weak battery indicator (0=okay, 1=weak)&lt;br /&gt;
// | |    |				  example: 28 --&amp;gt; hygro 40%, battery okay&lt;br /&gt;
// | |    +-----------&amp;gt; Temp (T+40)*10 in °C&lt;br /&gt;
// | |					  nibble 1 = T10&lt;br /&gt;
// | |					  nibble 2 = T1&lt;br /&gt;
// | |					  nibble 3 = T0.1&lt;br /&gt;
// | |					  example1: 624 --&amp;gt; 62.4 - 40 = 22.4°C&lt;br /&gt;
// | |                    example2: 394 --&amp;gt; 39.4 - 40 = -0.6°C&lt;br /&gt;
// | +----------------&amp;gt; SensorID &lt;br /&gt;
// |					  bit7..2 SensorID (0..63)&lt;br /&gt;
// |					  bit1 = Restart flag (0=no restart, 1=restart--&amp;gt;new batt)&lt;br /&gt;
// |					  bit0 = unused (always 0)&lt;br /&gt;
// +------------------&amp;gt; Message length (number of nibbles that follow)&lt;br /&gt;
//                        example: 9 --&amp;gt; 9 nibbles follow&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: schematic_1.png|thumb|200px|Schaltplan Seite 1]]&lt;br /&gt;
[[Bild: schematic_2.png|thumb|200px|Schaltplan Seite 2]]&lt;br /&gt;
Als Hardware kommen folgende Komponenten zum Einsatz:&lt;br /&gt;
* 868MHz Empfangsmodul mit PCB Antenne&lt;br /&gt;
* ATMEL ATmega1284P + ENC28J60 für 100base-T&lt;br /&gt;
* microSD Adapter&lt;br /&gt;
&lt;br /&gt;
===Empfangsmodul===&lt;br /&gt;
Für dem Empfang (und wenn mal will auch für das Senden) gibt es ein preiswertes 868MHz Modul RFM12.&lt;br /&gt;
Es ist ein &#039;&#039;Universal ISM Band FSK Transceiver&#039;&#039; und an anderer Stelle schon ausgiebig beschrieben [[RFM12]].&lt;br /&gt;
Die Kommunikation erfolgt über eine gewöhnliche SPI Schnittstelle im 16-bit Transfer. Die Einstellmöglichkeiten sind so vielseitig, sodass man am Anfang schier verzweifelt, bis der Empfang dann endlich gelingen will. Daher hier mal die bei mir erfolgreiche Init-Sequenz:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
 	// Bit	15	14	13	12	11	10	9	8	7	6	5	4	3	2	1	0&lt;br /&gt;
	//  ←	1	0	0	0	0	0	0	0	el	ef	b1	b0	x3	x2	x1	x0	0x8008&lt;br /&gt;
	//		1	0	0	0	0	0	0	0	1	1	1	0	0	1	1	1	0x80E7&lt;br /&gt;
	rf12_trans(0x80E7);			// ena TX latch, ena RX FIFO, 868MHz, 12.0pF&lt;br /&gt;
 &lt;br /&gt;
	//		1	0	0	0	0	0	1	0	er	ebb	et	es	ex	eb	ew	dc	0x8208&lt;br /&gt;
	//		1	0	0	0	0	0	1	0	-------- do on the fly ---------&lt;br /&gt;
&lt;br /&gt;
	// ←	1	1	0	0	1	1	0	0	0	ob1	ob0	lpx	dly	dit	bw1	bw0	0xCC77&lt;br /&gt;
	//		1	1	0	0	1	1	0	0	0	1	1	1	0	1	1	1	0xCC77&lt;br /&gt;
	rf12_trans(0xCC77);			// drv 5/10MHz, low-power OSC, no dith., band width 256kB&lt;br /&gt;
 &lt;br /&gt;
	// ←	1	1	0	0	0	0	0	0	d2	d1	d0	v4	v3	v2	v1	v0	0xC000&lt;br /&gt;
	//		1	1	0	0	0	0	0	0	0	1	0	0	1	0	0	1	0xC049&lt;br /&gt;
	rf12_trans(0xC049);			// 1.66MHz, 3.1V&lt;br /&gt;
 &lt;br /&gt;
	// ←	1	0	1	0	f11	f10	f9	f8	f7	f6	f5	f4	f3	f2	f1	f0	0xA680&lt;br /&gt;
	//		1	0	1	0	0	1	1	0	0	1	1	1	1	1	0	0	0xA67C&lt;br /&gt;
	rf12_trans(0xA67C);			// FREQUENCY 868.300MHz&lt;br /&gt;
 &lt;br /&gt;
	//	 ←	1	1	0	0	0	1	1	0	cs	r6	r5	r4	r3	r2	r1	r0	0xC623&lt;br /&gt;
	//		1	1	0	0	0	1	1	0	0	0	0	1	0	0	1	1	0xC613&lt;br /&gt;
	rf12_trans(0xC613);			// DATA RATE 17.241 kbps&lt;br /&gt;
 &lt;br /&gt;
	//	 ←	1	0	0	1	0	pi	d1	d0	i2	i1	i0	g1	g0	r2	r1	r0	0x9080&lt;br /&gt;
	//		1 	0	0	1	0	1	0	0	1	0	1	0	0	0	0	0	0x94A0&lt;br /&gt;
	rf12_trans(0x94A0);			// VDI, fast, 134khz, LNA 0dB, DRRSI -103 dB&lt;br /&gt;
 &lt;br /&gt;
	//	 ←	1	1	0	0	1	1	1	0	b7	b6	b5	b4	b3	b2	b1	b0	0xCED4&lt;br /&gt;
	//		1 	1	0	0	1	1	1	0	1	1	0	1	0	1	0	0	0xCED4&lt;br /&gt;
	rf12_trans(0xCED4);			// SYNC=2DD4&lt;br /&gt;
 &lt;br /&gt;
	// ←	1	1	0	0	0	0	1	0	al	ml	1	s	1	q2	q1	q0	0xC22C&lt;br /&gt;
	//		1	1	0	0	0	0	1	0	1	0	1	0	1	1	0	0	0xC2AC&lt;br /&gt;
	rf12_trans(0xC2AC);			// autolock, dig. filter, mid level&lt;br /&gt;
 &lt;br /&gt;
	// ←	1	1	0	0	1	0	1	0	f3	f2	f1	f0	sp	al	ff	dr	0xCA80&lt;br /&gt;
	//		1	1	0	0	1	0	1	0	1	0	0	0	0	0	1	1	0xCA83&lt;br /&gt;
	rf12_trans(0xCA83);			// FIFO level =  8, 2-SYNC, sync fill, FIFO ena, reset off&lt;br /&gt;
 &lt;br /&gt;
	// ←	1	1	0	0	0	1	0	0	a1	a0	rl1	rl0	st	fi	oe	en	0xC4F7&lt;br /&gt;
	//		1	1	0	0	0	1	0	0 	1	0	0	0	0	0	1	1	0xC483&lt;br /&gt;
	rf12_trans(0xC483);			// AFC if VDI=0, unlimited range, AFC OE+EN&lt;br /&gt;
 &lt;br /&gt;
	// ←	1	0	0	1	1	0	0	mp	m3	m2	m1	m0	0	p2	p1	p0	0x9800&lt;br /&gt;
	//		1	0	0	1	1	0	0	0	0	1	0	1	0	0	0	0	0x9850&lt;br /&gt;
	rf12_trans(0x9850);			//  no inv, deviation 90kHz, MAX OUT&lt;br /&gt;
 &lt;br /&gt;
	// ←	1	1	1	r4	r3	r2	r1	r0	m7	m6	m5	m4	m3	m2	m1	m0	0xE196&lt;br /&gt;
	//		1	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0xE000&lt;br /&gt;
	rf12_trans(0xE000);			// NOT USE&lt;br /&gt;
 &lt;br /&gt;
	// ←	1	1	0	0	1	0	0	0	d6	d5	d4	d3	d2	d1	d0	en	0xC80E&lt;br /&gt;
	//		1	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0xC800&lt;br /&gt;
	rf12_trans(0xC800);			// NOT USE&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Sensorlogger_board.png|thumb|200px|Platine mit PCB Antenne]]&lt;br /&gt;
Das PCB wurde auf das Gehäuse SP 2000 SW von STRAPUBOX abgestimmt. Damit alles einfach reinpasst in SMD wo sinnvoll.&lt;br /&gt;
Bei Buchsen (Power/Ethernet) bin ich aber immer noch ein Fan von Thru-Hole - wegen der Stabilität. Das Löten fand wieder in der Pizzapfanne statt wie in der c&#039;t Hacks beschrieben.&lt;br /&gt;
&lt;br /&gt;
===Antenne===&lt;br /&gt;
[[Bild: S11_initial.jpg|thumb|150px|S11 Messung am Original]]&lt;br /&gt;
[[Bild: S11_final.jpg|thumb|150px|S11 Messung nach der Verkürzung]]&lt;br /&gt;
An das RFM12-Modul muss noch eine Antenne angeschlossen werden. Üblicherweise 1/4 Lamba also ca. 8,3cm . Da aber noch Patz auf dem PCB war, habe ich mich mal an eine PCB Variante in meanderförmigem Aufbau gewagt. Dazu gibt es eine hübsche Design Note von Texas Instruments (DN024). Das Ergebnis lag aber etwas daneben, da u.a. das &amp;lt;math&amp;gt;\epsilon_r&amp;lt;/math&amp;gt; meines Lieblings-PCB-Machers wohl doch in Wirklichkeit etwas anders ausfiel. Der maximale Gain lag bei ca. 790MHz und ließ sich dann durch Verkürzung nach 868MHz schieben bei endgültigen -6dB gain. Damit ist auch ein Empfang durch Betondecken oder -wände machbar.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Die Software ist mit AVR STudio 6 erstellt und als Debugger steht AVR-Dragon auf bem Basteltisch. Zur Unterstützung ist ein UART I/F mit an Board, das dann über einen Pegelwandler und den RS232/USB Adapter selbst auf meinem MAC die printf-Anweisungen klaglos ausgibt. Ein Command I/F erlaubt auch die direkte Steuerung über die gleiche Schnittstelle. Für den Normalbetrieb ist allerdings auch ein kleiner Web-Server integriert. Das gesamte Paket inkl. Ethernet und SD Unterstützung benötigt ca. 85K FLASH und 12.5K RAM Speicher.&lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
[[Bild: temp_example.png|thumb|200px|Aussentemperaturverlauf einer Woche]]&lt;br /&gt;
Wer mal die Aufzeichnung live auf meinem WebServer ausprobieren will: http://vz.rbulla.de. Die UUID für die Außentemperatur (in Langenfeld-Rheinland) lautet: e62976c0-7109-11e1-a585-8762f86249c1.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://hackaday.com/2011/06/13/reverse-engineering-wireless-weather-stations/ IT+ Protokoll Beschreibung&lt;br /&gt;
* http://fredboboss.free.fr/tx29/  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://gcrnet.net/node/32  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://www.ti.com/lit/an/swra227e/swra227e.pdf  Antenna Design Note DN024 &lt;br /&gt;
* [[RFM12]]  Empfangsmodul Beschreibung&lt;br /&gt;
* http://www.volkszaehler.org  Smart Meter Anwendung&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72866</id>
		<title>SensorLogger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72866"/>
		<updated>2013-02-24T21:42:22Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Antenne */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von Rolf Bulla&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Sensorlogger_top.jpg|thumb|200px|Der fertige Sensorlogger]]&lt;br /&gt;
[[Bild: Sensorlogger_bottom.jpg|thumb|100px|und hier die Rückseite mit microSD Karte]]&lt;br /&gt;
Die Idee zu der folgenden Schaltung ist eigentlich aus der Überlegung entstanden, dass es neben der Verbrauchsaufzeichnung der heimischen Heizung (hier Gas) ganz interessant wäre, auch die Außen und Innentemperatur mit aufzuzeichnen. Schließlich gilt ja, je kälter desto mehr heizen. Eine Temperaturmessung hat man vielleicht ja schon zu Hause im Einsatz in Form einer Wetterstation. Warum also nicht die drahtlose Übertragung der Sensoren zur Wetterstation &#039;anzapfen&#039;...&lt;br /&gt;
&lt;br /&gt;
Übrigens wird die oben erwähnte Energieerfassung (inkl. Strom und Wasser) über den freien Smart Meter Ansatz von http://www.volkszaehler.org erledigt. Aber dazu nachher noch mehr.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Das Gerät soll also das IT+ Sensorprotokoll empfangen und verstehen und die so erfassten Messwerte an das Smart Meter über Ethernet ins Intra- oder Internet liefern. Um auch Netzwerkunabhängig aufzeichnen zu können wäre ein MicroSD Interface zur Datenspeicherung eine nette Spielerei. Noch mal zusammengefasst:&lt;br /&gt;
* Empfang und Dekodierung der IT+ Protokolldaten&lt;br /&gt;
* Speichern der Daten auf MicroSD-Karte&lt;br /&gt;
* Senden der Messdaten über Ethernet&lt;br /&gt;
* kleines Standardgehäuse&lt;br /&gt;
* externes Standardnetzteil &lt;br /&gt;
* und wie immer Standardbauteile und preiswert&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Wenn sich an das IT+ Protokoll wagt, so findet man einige Quellen (siehe Links). Vom Sensor werden so alle 4.5 Sekunden&lt;br /&gt;
immer 5 Bytes gesendet. Die Frequenz ist af 868MHz festgelegt. Falls der Sensor auch die Luftfeuchtigkeit messen kann, so kommt der Wert mit, wenn nicht dann gibt es einen Fantasiewert (=106). Jeder Sensor verfügt über eine Adresskodierung. &amp;lt;u&amp;gt;Vorsicht es gibt Sensoren, die nach dem Batteriewechsel eine neue Adresse verwenden.&amp;lt;/u&amp;gt;. Über die Adresse lassen sich auch mehrere Sensoren parallel auswerten.&lt;br /&gt;
Zu Beachten ist auch, das keine negativen Werte übertragen werden, da die Temperatur vor der Übertragung immer einen Offset von 40 erhält.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// ##### IT+ Frame #####&lt;br /&gt;
// Frame example (5 byte):&lt;br /&gt;
// 92h 03h 94h 59h 3Ch  --&amp;gt; Addr:32, Temp:-0.6, Hygro:89.0&lt;br /&gt;
// 92h 86h 24h 28h DEh  --&amp;gt; Addr:40, Temp:22.4, Hygro:40.0&lt;br /&gt;
// | || |  ||  ||  ||&lt;br /&gt;
// 9 28  624   28  DE&lt;br /&gt;
// | |    |    |   +--&amp;gt; CRC-8 (x8 + x5 + x4 +1)&lt;br /&gt;
// | |    |    +------&amp;gt; Hygro in % &lt;br /&gt;
// | |    |				  bit6..0 = hygro value (0..127, 106 = no hygro)&lt;br /&gt;
// | |    |				  bit7 = weak battery indicator (0=okay, 1=weak)&lt;br /&gt;
// | |    |				  example: 28 --&amp;gt; hygro 40%, battery okay&lt;br /&gt;
// | |    +-----------&amp;gt; Temp (T+40)*10 in °C&lt;br /&gt;
// | |					  nibble 1 = T10&lt;br /&gt;
// | |					  nibble 2 = T1&lt;br /&gt;
// | |					  nibble 3 = T0.1&lt;br /&gt;
// | |					  example1: 624 --&amp;gt; 62.4 - 40 = 22.4°C&lt;br /&gt;
// | |                    example2: 394 --&amp;gt; 39.4 - 40 = -0.6°C&lt;br /&gt;
// | +----------------&amp;gt; SensorID &lt;br /&gt;
// |					  bit7..2 SensorID (0..63)&lt;br /&gt;
// |					  bit1 = Restart flag (0=no restart, 1=restart--&amp;gt;new batt)&lt;br /&gt;
// |					  bit0 = unused (always 0)&lt;br /&gt;
// +------------------&amp;gt; Message length (number of nibbles that follow)&lt;br /&gt;
//                        example: 9 --&amp;gt; 9 nibbles follow&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: schematic_1.png|thumb|200px|Schaltplan Seite 1]]&lt;br /&gt;
[[Bild: schematic_2.png|thumb|200px|Schaltplan Seite 2]]&lt;br /&gt;
Als Hardware kommen folgende Komponenten zum Einsatz:&lt;br /&gt;
* 868MHz Empfangsmodul mit PCB Antenne&lt;br /&gt;
* ATMEL ATmega1284P + ENC28J60 für 100base-T&lt;br /&gt;
* microSD Adapter&lt;br /&gt;
&lt;br /&gt;
===Empfangsmodul===&lt;br /&gt;
Für dem Empfang (und wenn mal will auch für das Senden) gibt es ein preiswertes 868MHz Modul RFM12.&lt;br /&gt;
Es ist ein &#039;&#039;Universal ISM Band FSK Transceiver&#039;&#039; und an anderer Stelle schon ausgiebig beschrieben [[RFM12]].&lt;br /&gt;
Die Kommunikation erfolgt über eine gewöhnliche SPI Schnittstelle im 16-bit Transfer. Die Einstellmöglichkeiten sind so vielseitig, sodass man am Anfang schier verzweifelt, bis der Empfang dann endlich gelingen will. Daher hier mal die bei mir erfolgreiche Init-Sequenz:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    rf12_trans(0x80E7);			// EL (ena TX), EF (ena RX FIFO), 12.0pF &lt;br /&gt;
    rf12_trans(0xA67C);			// FREQUENCY 868.300MHz &lt;br /&gt;
    rf12_trans(0xC613);			// DATA RATE 17.241 kbps&lt;br /&gt;
    rf12_trans(0x94A0);			// RECEIVER CONTROL VDI Medium 134khz LNA max DRRSI 103 dbm&lt;br /&gt;
    rf12_trans(0xC2AC);			// AL,!ml,DIG,DQD4 &lt;br /&gt;
    rf12_trans(0xCA83);			// FIFO8,2-SYNC,!ff,DR&lt;br /&gt;
    rf12_trans(0xCED4);			// SYNC=2DD4&lt;br /&gt;
    rf12_trans(0xC483);			// @PWR,NO RSTRIC,!st,!fi,OE,EN &lt;br /&gt;
    rf12_trans(0x9850);			// !mp,90kHz,MAX OUT &lt;br /&gt;
    rf12_trans(0xCC77);			// OB1, OB0, LPX, ddy, DDIT, BW0 &lt;br /&gt;
    rf12_trans(0xE000);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC800);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC049);			// 1.66MHz,3.1V &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Sensorlogger_board.png|thumb|200px|Platine mit PCB Antenne]]&lt;br /&gt;
Das PCB wurde auf das Gehäuse SP 2000 SW von STRAPUBOX abgestimmt. Damit alles einfach reinpasst in SMD wo sinnvoll.&lt;br /&gt;
Bei Buchsen (Power/Ethernet) bin ich aber immer noch ein Fan von Thru-Hole - wegen der Stabilität. Das Löten fand wieder in der Pizzapfanne statt wie in der c&#039;t Hacks beschrieben.&lt;br /&gt;
&lt;br /&gt;
===Antenne===&lt;br /&gt;
[[Bild: S11_initial.jpg|thumb|150px|S11 Messung am Original]]&lt;br /&gt;
[[Bild: S11_final.jpg|thumb|150px|S11 Messung nach der Verkürzung]]&lt;br /&gt;
An das RFM12-Modul muss noch eine Antenne angeschlossen werden. Üblicherweise 1/4 Lamba also ca. 8,3cm . Da aber noch Patz auf dem PCB war, habe ich mich mal an eine PCB Variante in meanderförmigem Aufbau gewagt. Dazu gibt es eine hübsche Design Note von Texas Instruments (DN024). Das Ergebnis lag aber etwas daneben, da u.a. das &amp;lt;math&amp;gt;\epsilon_r&amp;lt;/math&amp;gt; meines Lieblings-PCB-Machers wohl doch in Wirklichkeit etwas anders ausfiel. Der maximale Gain lag bei ca. 790MHz und ließ sich dann durch Verkürzung nach 868MHz schieben bei endgültigen -6dB gain. Damit ist auch ein Empfang durch Betondecken oder -wände machbar.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Die Software ist mit AVR STudio 6 erstellt und als Debugger steht AVR-Dragon auf bem Basteltisch. Zur Unterstützung ist ein UART I/F mit an Board, das dann über einen Pegelwandler und den RS232/USB Adapter selbst auf meinem MAC die printf-Anweisungen klaglos ausgibt. Ein Command I/F erlaubt auch die direkte Steuerung über die gleiche Schnittstelle. Für den Normalbetrieb ist allerdings auch ein kleiner Web-Server integriert. Das gesamte Paket inkl. Ethernet und SD Unterstützung benötigt ca. 85K FLASH und 12.5K RAM Speicher.&lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
[[Bild: temp_example.png|thumb|200px|Aussentemperaturverlauf einer Woche]]&lt;br /&gt;
Wer mal die Aufzeichnung live auf meinem WebServer ausprobieren will: http://vz.rbulla.de. Die UUID für die Außentemperatur (in Langenfeld-Rheinland) lautet: e62976c0-7109-11e1-a585-8762f86249c1.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://hackaday.com/2011/06/13/reverse-engineering-wireless-weather-stations/ IT+ Protokoll Beschreibung&lt;br /&gt;
* http://fredboboss.free.fr/tx29/  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://gcrnet.net/node/32  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://www.ti.com/lit/an/swra227e/swra227e.pdf  Antenna Design Note DN024 &lt;br /&gt;
* [[RFM12]]  Empfangsmodul Beschreibung&lt;br /&gt;
* http://www.volkszaehler.org  Smart Meter Anwendung&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72865</id>
		<title>SensorLogger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72865"/>
		<updated>2013-02-24T21:41:51Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Platine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von Rolf Bulla&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Sensorlogger_top.jpg|thumb|200px|Der fertige Sensorlogger]]&lt;br /&gt;
[[Bild: Sensorlogger_bottom.jpg|thumb|100px|und hier die Rückseite mit microSD Karte]]&lt;br /&gt;
Die Idee zu der folgenden Schaltung ist eigentlich aus der Überlegung entstanden, dass es neben der Verbrauchsaufzeichnung der heimischen Heizung (hier Gas) ganz interessant wäre, auch die Außen und Innentemperatur mit aufzuzeichnen. Schließlich gilt ja, je kälter desto mehr heizen. Eine Temperaturmessung hat man vielleicht ja schon zu Hause im Einsatz in Form einer Wetterstation. Warum also nicht die drahtlose Übertragung der Sensoren zur Wetterstation &#039;anzapfen&#039;...&lt;br /&gt;
&lt;br /&gt;
Übrigens wird die oben erwähnte Energieerfassung (inkl. Strom und Wasser) über den freien Smart Meter Ansatz von http://www.volkszaehler.org erledigt. Aber dazu nachher noch mehr.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Das Gerät soll also das IT+ Sensorprotokoll empfangen und verstehen und die so erfassten Messwerte an das Smart Meter über Ethernet ins Intra- oder Internet liefern. Um auch Netzwerkunabhängig aufzeichnen zu können wäre ein MicroSD Interface zur Datenspeicherung eine nette Spielerei. Noch mal zusammengefasst:&lt;br /&gt;
* Empfang und Dekodierung der IT+ Protokolldaten&lt;br /&gt;
* Speichern der Daten auf MicroSD-Karte&lt;br /&gt;
* Senden der Messdaten über Ethernet&lt;br /&gt;
* kleines Standardgehäuse&lt;br /&gt;
* externes Standardnetzteil &lt;br /&gt;
* und wie immer Standardbauteile und preiswert&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Wenn sich an das IT+ Protokoll wagt, so findet man einige Quellen (siehe Links). Vom Sensor werden so alle 4.5 Sekunden&lt;br /&gt;
immer 5 Bytes gesendet. Die Frequenz ist af 868MHz festgelegt. Falls der Sensor auch die Luftfeuchtigkeit messen kann, so kommt der Wert mit, wenn nicht dann gibt es einen Fantasiewert (=106). Jeder Sensor verfügt über eine Adresskodierung. &amp;lt;u&amp;gt;Vorsicht es gibt Sensoren, die nach dem Batteriewechsel eine neue Adresse verwenden.&amp;lt;/u&amp;gt;. Über die Adresse lassen sich auch mehrere Sensoren parallel auswerten.&lt;br /&gt;
Zu Beachten ist auch, das keine negativen Werte übertragen werden, da die Temperatur vor der Übertragung immer einen Offset von 40 erhält.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// ##### IT+ Frame #####&lt;br /&gt;
// Frame example (5 byte):&lt;br /&gt;
// 92h 03h 94h 59h 3Ch  --&amp;gt; Addr:32, Temp:-0.6, Hygro:89.0&lt;br /&gt;
// 92h 86h 24h 28h DEh  --&amp;gt; Addr:40, Temp:22.4, Hygro:40.0&lt;br /&gt;
// | || |  ||  ||  ||&lt;br /&gt;
// 9 28  624   28  DE&lt;br /&gt;
// | |    |    |   +--&amp;gt; CRC-8 (x8 + x5 + x4 +1)&lt;br /&gt;
// | |    |    +------&amp;gt; Hygro in % &lt;br /&gt;
// | |    |				  bit6..0 = hygro value (0..127, 106 = no hygro)&lt;br /&gt;
// | |    |				  bit7 = weak battery indicator (0=okay, 1=weak)&lt;br /&gt;
// | |    |				  example: 28 --&amp;gt; hygro 40%, battery okay&lt;br /&gt;
// | |    +-----------&amp;gt; Temp (T+40)*10 in °C&lt;br /&gt;
// | |					  nibble 1 = T10&lt;br /&gt;
// | |					  nibble 2 = T1&lt;br /&gt;
// | |					  nibble 3 = T0.1&lt;br /&gt;
// | |					  example1: 624 --&amp;gt; 62.4 - 40 = 22.4°C&lt;br /&gt;
// | |                    example2: 394 --&amp;gt; 39.4 - 40 = -0.6°C&lt;br /&gt;
// | +----------------&amp;gt; SensorID &lt;br /&gt;
// |					  bit7..2 SensorID (0..63)&lt;br /&gt;
// |					  bit1 = Restart flag (0=no restart, 1=restart--&amp;gt;new batt)&lt;br /&gt;
// |					  bit0 = unused (always 0)&lt;br /&gt;
// +------------------&amp;gt; Message length (number of nibbles that follow)&lt;br /&gt;
//                        example: 9 --&amp;gt; 9 nibbles follow&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: schematic_1.png|thumb|200px|Schaltplan Seite 1]]&lt;br /&gt;
[[Bild: schematic_2.png|thumb|200px|Schaltplan Seite 2]]&lt;br /&gt;
Als Hardware kommen folgende Komponenten zum Einsatz:&lt;br /&gt;
* 868MHz Empfangsmodul mit PCB Antenne&lt;br /&gt;
* ATMEL ATmega1284P + ENC28J60 für 100base-T&lt;br /&gt;
* microSD Adapter&lt;br /&gt;
&lt;br /&gt;
===Empfangsmodul===&lt;br /&gt;
Für dem Empfang (und wenn mal will auch für das Senden) gibt es ein preiswertes 868MHz Modul RFM12.&lt;br /&gt;
Es ist ein &#039;&#039;Universal ISM Band FSK Transceiver&#039;&#039; und an anderer Stelle schon ausgiebig beschrieben [[RFM12]].&lt;br /&gt;
Die Kommunikation erfolgt über eine gewöhnliche SPI Schnittstelle im 16-bit Transfer. Die Einstellmöglichkeiten sind so vielseitig, sodass man am Anfang schier verzweifelt, bis der Empfang dann endlich gelingen will. Daher hier mal die bei mir erfolgreiche Init-Sequenz:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    rf12_trans(0x80E7);			// EL (ena TX), EF (ena RX FIFO), 12.0pF &lt;br /&gt;
    rf12_trans(0xA67C);			// FREQUENCY 868.300MHz &lt;br /&gt;
    rf12_trans(0xC613);			// DATA RATE 17.241 kbps&lt;br /&gt;
    rf12_trans(0x94A0);			// RECEIVER CONTROL VDI Medium 134khz LNA max DRRSI 103 dbm&lt;br /&gt;
    rf12_trans(0xC2AC);			// AL,!ml,DIG,DQD4 &lt;br /&gt;
    rf12_trans(0xCA83);			// FIFO8,2-SYNC,!ff,DR&lt;br /&gt;
    rf12_trans(0xCED4);			// SYNC=2DD4&lt;br /&gt;
    rf12_trans(0xC483);			// @PWR,NO RSTRIC,!st,!fi,OE,EN &lt;br /&gt;
    rf12_trans(0x9850);			// !mp,90kHz,MAX OUT &lt;br /&gt;
    rf12_trans(0xCC77);			// OB1, OB0, LPX, ddy, DDIT, BW0 &lt;br /&gt;
    rf12_trans(0xE000);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC800);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC049);			// 1.66MHz,3.1V &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Sensorlogger_board.png|thumb|200px|Platine mit PCB Antenne]]&lt;br /&gt;
Das PCB wurde auf das Gehäuse SP 2000 SW von STRAPUBOX abgestimmt. Damit alles einfach reinpasst in SMD wo sinnvoll.&lt;br /&gt;
Bei Buchsen (Power/Ethernet) bin ich aber immer noch ein Fan von Thru-Hole - wegen der Stabilität. Das Löten fand wieder in der Pizzapfanne statt wie in der c&#039;t Hacks beschrieben.&lt;br /&gt;
&lt;br /&gt;
===Antenne===&lt;br /&gt;
[[Bild: S11_initial.jpg|thumb|150px|S11 Messung am Original]]&lt;br /&gt;
[[Bild: S11_final.jpg|thumb|150px|S11 Messung am Original]]&lt;br /&gt;
An das RFM12-Modul muss noch eine Antenne angeschlossen werden. Üblicherweise 1/4 Lamba also ca. 8,3cm . Da aber noch Patz auf dem PCB war, habe ich mich mal an eine PCB Variante in meanderförmigem Aufbau gewagt. Dazu gibt es eine hübsche Design Note von Texas Instruments (DN024). Das Ergebnis lag aber etwas daneben, da u.a. das &amp;lt;math&amp;gt;\epsilon_r&amp;lt;/math&amp;gt; meines Lieblings-PCB-Machers wohl doch in Wirklichkeit etwas anders ausfiel. Der maximale Gain lag bei ca. 790MHz und ließ sich dann durch Verkürzung nach 868MHz schieben bei endgültigen -6dB gain. Damit ist auch ein Empfang durch Betondecken oder -wände machbar.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Die Software ist mit AVR STudio 6 erstellt und als Debugger steht AVR-Dragon auf bem Basteltisch. Zur Unterstützung ist ein UART I/F mit an Board, das dann über einen Pegelwandler und den RS232/USB Adapter selbst auf meinem MAC die printf-Anweisungen klaglos ausgibt. Ein Command I/F erlaubt auch die direkte Steuerung über die gleiche Schnittstelle. Für den Normalbetrieb ist allerdings auch ein kleiner Web-Server integriert. Das gesamte Paket inkl. Ethernet und SD Unterstützung benötigt ca. 85K FLASH und 12.5K RAM Speicher.&lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
[[Bild: temp_example.png|thumb|200px|Aussentemperaturverlauf einer Woche]]&lt;br /&gt;
Wer mal die Aufzeichnung live auf meinem WebServer ausprobieren will: http://vz.rbulla.de. Die UUID für die Außentemperatur (in Langenfeld-Rheinland) lautet: e62976c0-7109-11e1-a585-8762f86249c1.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://hackaday.com/2011/06/13/reverse-engineering-wireless-weather-stations/ IT+ Protokoll Beschreibung&lt;br /&gt;
* http://fredboboss.free.fr/tx29/  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://gcrnet.net/node/32  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://www.ti.com/lit/an/swra227e/swra227e.pdf  Antenna Design Note DN024 &lt;br /&gt;
* [[RFM12]]  Empfangsmodul Beschreibung&lt;br /&gt;
* http://www.volkszaehler.org  Smart Meter Anwendung&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72864</id>
		<title>SensorLogger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72864"/>
		<updated>2013-02-24T21:38:55Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Antenne */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von Rolf Bulla&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Sensorlogger_top.jpg|thumb|200px|Der fertige Sensorlogger]]&lt;br /&gt;
[[Bild: Sensorlogger_bottom.jpg|thumb|100px|und hier die Rückseite mit microSD Karte]]&lt;br /&gt;
Die Idee zu der folgenden Schaltung ist eigentlich aus der Überlegung entstanden, dass es neben der Verbrauchsaufzeichnung der heimischen Heizung (hier Gas) ganz interessant wäre, auch die Außen und Innentemperatur mit aufzuzeichnen. Schließlich gilt ja, je kälter desto mehr heizen. Eine Temperaturmessung hat man vielleicht ja schon zu Hause im Einsatz in Form einer Wetterstation. Warum also nicht die drahtlose Übertragung der Sensoren zur Wetterstation &#039;anzapfen&#039;...&lt;br /&gt;
&lt;br /&gt;
Übrigens wird die oben erwähnte Energieerfassung (inkl. Strom und Wasser) über den freien Smart Meter Ansatz von http://www.volkszaehler.org erledigt. Aber dazu nachher noch mehr.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Das Gerät soll also das IT+ Sensorprotokoll empfangen und verstehen und die so erfassten Messwerte an das Smart Meter über Ethernet ins Intra- oder Internet liefern. Um auch Netzwerkunabhängig aufzeichnen zu können wäre ein MicroSD Interface zur Datenspeicherung eine nette Spielerei. Noch mal zusammengefasst:&lt;br /&gt;
* Empfang und Dekodierung der IT+ Protokolldaten&lt;br /&gt;
* Speichern der Daten auf MicroSD-Karte&lt;br /&gt;
* Senden der Messdaten über Ethernet&lt;br /&gt;
* kleines Standardgehäuse&lt;br /&gt;
* externes Standardnetzteil &lt;br /&gt;
* und wie immer Standardbauteile und preiswert&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Wenn sich an das IT+ Protokoll wagt, so findet man einige Quellen (siehe Links). Vom Sensor werden so alle 4.5 Sekunden&lt;br /&gt;
immer 5 Bytes gesendet. Die Frequenz ist af 868MHz festgelegt. Falls der Sensor auch die Luftfeuchtigkeit messen kann, so kommt der Wert mit, wenn nicht dann gibt es einen Fantasiewert (=106). Jeder Sensor verfügt über eine Adresskodierung. &amp;lt;u&amp;gt;Vorsicht es gibt Sensoren, die nach dem Batteriewechsel eine neue Adresse verwenden.&amp;lt;/u&amp;gt;. Über die Adresse lassen sich auch mehrere Sensoren parallel auswerten.&lt;br /&gt;
Zu Beachten ist auch, das keine negativen Werte übertragen werden, da die Temperatur vor der Übertragung immer einen Offset von 40 erhält.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// ##### IT+ Frame #####&lt;br /&gt;
// Frame example (5 byte):&lt;br /&gt;
// 92h 03h 94h 59h 3Ch  --&amp;gt; Addr:32, Temp:-0.6, Hygro:89.0&lt;br /&gt;
// 92h 86h 24h 28h DEh  --&amp;gt; Addr:40, Temp:22.4, Hygro:40.0&lt;br /&gt;
// | || |  ||  ||  ||&lt;br /&gt;
// 9 28  624   28  DE&lt;br /&gt;
// | |    |    |   +--&amp;gt; CRC-8 (x8 + x5 + x4 +1)&lt;br /&gt;
// | |    |    +------&amp;gt; Hygro in % &lt;br /&gt;
// | |    |				  bit6..0 = hygro value (0..127, 106 = no hygro)&lt;br /&gt;
// | |    |				  bit7 = weak battery indicator (0=okay, 1=weak)&lt;br /&gt;
// | |    |				  example: 28 --&amp;gt; hygro 40%, battery okay&lt;br /&gt;
// | |    +-----------&amp;gt; Temp (T+40)*10 in °C&lt;br /&gt;
// | |					  nibble 1 = T10&lt;br /&gt;
// | |					  nibble 2 = T1&lt;br /&gt;
// | |					  nibble 3 = T0.1&lt;br /&gt;
// | |					  example1: 624 --&amp;gt; 62.4 - 40 = 22.4°C&lt;br /&gt;
// | |                    example2: 394 --&amp;gt; 39.4 - 40 = -0.6°C&lt;br /&gt;
// | +----------------&amp;gt; SensorID &lt;br /&gt;
// |					  bit7..2 SensorID (0..63)&lt;br /&gt;
// |					  bit1 = Restart flag (0=no restart, 1=restart--&amp;gt;new batt)&lt;br /&gt;
// |					  bit0 = unused (always 0)&lt;br /&gt;
// +------------------&amp;gt; Message length (number of nibbles that follow)&lt;br /&gt;
//                        example: 9 --&amp;gt; 9 nibbles follow&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: schematic_1.png|thumb|200px|Schaltplan Seite 1]]&lt;br /&gt;
[[Bild: schematic_2.png|thumb|200px|Schaltplan Seite 2]]&lt;br /&gt;
Als Hardware kommen folgende Komponenten zum Einsatz:&lt;br /&gt;
* 868MHz Empfangsmodul mit PCB Antenne&lt;br /&gt;
* ATMEL ATmega1284P + ENC28J60 für 100base-T&lt;br /&gt;
* microSD Adapter&lt;br /&gt;
&lt;br /&gt;
===Empfangsmodul===&lt;br /&gt;
Für dem Empfang (und wenn mal will auch für das Senden) gibt es ein preiswertes 868MHz Modul RFM12.&lt;br /&gt;
Es ist ein &#039;&#039;Universal ISM Band FSK Transceiver&#039;&#039; und an anderer Stelle schon ausgiebig beschrieben [[RFM12]].&lt;br /&gt;
Die Kommunikation erfolgt über eine gewöhnliche SPI Schnittstelle im 16-bit Transfer. Die Einstellmöglichkeiten sind so vielseitig, sodass man am Anfang schier verzweifelt, bis der Empfang dann endlich gelingen will. Daher hier mal die bei mir erfolgreiche Init-Sequenz:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    rf12_trans(0x80E7);			// EL (ena TX), EF (ena RX FIFO), 12.0pF &lt;br /&gt;
    rf12_trans(0xA67C);			// FREQUENCY 868.300MHz &lt;br /&gt;
    rf12_trans(0xC613);			// DATA RATE 17.241 kbps&lt;br /&gt;
    rf12_trans(0x94A0);			// RECEIVER CONTROL VDI Medium 134khz LNA max DRRSI 103 dbm&lt;br /&gt;
    rf12_trans(0xC2AC);			// AL,!ml,DIG,DQD4 &lt;br /&gt;
    rf12_trans(0xCA83);			// FIFO8,2-SYNC,!ff,DR&lt;br /&gt;
    rf12_trans(0xCED4);			// SYNC=2DD4&lt;br /&gt;
    rf12_trans(0xC483);			// @PWR,NO RSTRIC,!st,!fi,OE,EN &lt;br /&gt;
    rf12_trans(0x9850);			// !mp,90kHz,MAX OUT &lt;br /&gt;
    rf12_trans(0xCC77);			// OB1, OB0, LPX, ddy, DDIT, BW0 &lt;br /&gt;
    rf12_trans(0xE000);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC800);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC049);			// 1.66MHz,3.1V &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Sensorlogger_board.png|thumb|200px|Platine mit PCB Antenne]]&lt;br /&gt;
Das PCB wurde auf das Gehäuse SP 2000 SW von STRAPUBOX abgestimmt. Damit alles einfach reinpasst in SMD wo sinnvoll.&lt;br /&gt;
Bei Buchsen (Power/Ethernet) bin ich aber immer noch ein Fan von Thru-Hole - wegen der Stabilität. Das Löten fand wieder in der Pizzafanne statt wie in der c&#039;t Hacks beschrieben. &lt;br /&gt;
&lt;br /&gt;
===Antenne===&lt;br /&gt;
[[Bild: S11_initial.jpg|thumb|150px|S11 Messung am Original]]&lt;br /&gt;
[[Bild: S11_final.jpg|thumb|150px|S11 Messung am Original]]&lt;br /&gt;
An das RFM12-Modul muss noch eine Antenne angeschlossen werden. Üblicherweise 1/4 Lamba also ca. 8,3cm . Da aber noch Patz auf dem PCB war, habe ich mich mal an eine PCB Variante in meanderförmigem Aufbau gewagt. Dazu gibt es eine hübsche Design Note von Texas Instruments (DN024). Das Ergebnis lag aber etwas daneben, da u.a. das &amp;lt;math&amp;gt;\epsilon_r&amp;lt;/math&amp;gt; meines Lieblings-PCB-Machers wohl doch in Wirklichkeit etwas anders ausfiel. Der maximale Gain lag bei ca. 790MHz und ließ sich dann durch Verkürzung nach 868MHz schieben bei endgültigen -6dB gain. Damit ist auch ein Empfang durch Betondecken oder -wände machbar.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Die Software ist mit AVR STudio 6 erstellt und als Debugger steht AVR-Dragon auf bem Basteltisch. Zur Unterstützung ist ein UART I/F mit an Board, das dann über einen Pegelwandler und den RS232/USB Adapter selbst auf meinem MAC die printf-Anweisungen klaglos ausgibt. Ein Command I/F erlaubt auch die direkte Steuerung über die gleiche Schnittstelle. Für den Normalbetrieb ist allerdings auch ein kleiner Web-Server integriert. Das gesamte Paket inkl. Ethernet und SD Unterstützung benötigt ca. 85K FLASH und 12.5K RAM Speicher.&lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
[[Bild: temp_example.png|thumb|200px|Aussentemperaturverlauf einer Woche]]&lt;br /&gt;
Wer mal die Aufzeichnung live auf meinem WebServer ausprobieren will: http://vz.rbulla.de. Die UUID für die Außentemperatur (in Langenfeld-Rheinland) lautet: e62976c0-7109-11e1-a585-8762f86249c1.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://hackaday.com/2011/06/13/reverse-engineering-wireless-weather-stations/ IT+ Protokoll Beschreibung&lt;br /&gt;
* http://fredboboss.free.fr/tx29/  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://gcrnet.net/node/32  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://www.ti.com/lit/an/swra227e/swra227e.pdf  Antenna Design Note DN024 &lt;br /&gt;
* [[RFM12]]  Empfangsmodul Beschreibung&lt;br /&gt;
* http://www.volkszaehler.org  Smart Meter Anwendung&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72863</id>
		<title>SensorLogger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72863"/>
		<updated>2013-02-24T21:38:26Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von Rolf Bulla&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Sensorlogger_top.jpg|thumb|200px|Der fertige Sensorlogger]]&lt;br /&gt;
[[Bild: Sensorlogger_bottom.jpg|thumb|100px|und hier die Rückseite mit microSD Karte]]&lt;br /&gt;
Die Idee zu der folgenden Schaltung ist eigentlich aus der Überlegung entstanden, dass es neben der Verbrauchsaufzeichnung der heimischen Heizung (hier Gas) ganz interessant wäre, auch die Außen und Innentemperatur mit aufzuzeichnen. Schließlich gilt ja, je kälter desto mehr heizen. Eine Temperaturmessung hat man vielleicht ja schon zu Hause im Einsatz in Form einer Wetterstation. Warum also nicht die drahtlose Übertragung der Sensoren zur Wetterstation &#039;anzapfen&#039;...&lt;br /&gt;
&lt;br /&gt;
Übrigens wird die oben erwähnte Energieerfassung (inkl. Strom und Wasser) über den freien Smart Meter Ansatz von http://www.volkszaehler.org erledigt. Aber dazu nachher noch mehr.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Das Gerät soll also das IT+ Sensorprotokoll empfangen und verstehen und die so erfassten Messwerte an das Smart Meter über Ethernet ins Intra- oder Internet liefern. Um auch Netzwerkunabhängig aufzeichnen zu können wäre ein MicroSD Interface zur Datenspeicherung eine nette Spielerei. Noch mal zusammengefasst:&lt;br /&gt;
* Empfang und Dekodierung der IT+ Protokolldaten&lt;br /&gt;
* Speichern der Daten auf MicroSD-Karte&lt;br /&gt;
* Senden der Messdaten über Ethernet&lt;br /&gt;
* kleines Standardgehäuse&lt;br /&gt;
* externes Standardnetzteil &lt;br /&gt;
* und wie immer Standardbauteile und preiswert&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Wenn sich an das IT+ Protokoll wagt, so findet man einige Quellen (siehe Links). Vom Sensor werden so alle 4.5 Sekunden&lt;br /&gt;
immer 5 Bytes gesendet. Die Frequenz ist af 868MHz festgelegt. Falls der Sensor auch die Luftfeuchtigkeit messen kann, so kommt der Wert mit, wenn nicht dann gibt es einen Fantasiewert (=106). Jeder Sensor verfügt über eine Adresskodierung. &amp;lt;u&amp;gt;Vorsicht es gibt Sensoren, die nach dem Batteriewechsel eine neue Adresse verwenden.&amp;lt;/u&amp;gt;. Über die Adresse lassen sich auch mehrere Sensoren parallel auswerten.&lt;br /&gt;
Zu Beachten ist auch, das keine negativen Werte übertragen werden, da die Temperatur vor der Übertragung immer einen Offset von 40 erhält.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// ##### IT+ Frame #####&lt;br /&gt;
// Frame example (5 byte):&lt;br /&gt;
// 92h 03h 94h 59h 3Ch  --&amp;gt; Addr:32, Temp:-0.6, Hygro:89.0&lt;br /&gt;
// 92h 86h 24h 28h DEh  --&amp;gt; Addr:40, Temp:22.4, Hygro:40.0&lt;br /&gt;
// | || |  ||  ||  ||&lt;br /&gt;
// 9 28  624   28  DE&lt;br /&gt;
// | |    |    |   +--&amp;gt; CRC-8 (x8 + x5 + x4 +1)&lt;br /&gt;
// | |    |    +------&amp;gt; Hygro in % &lt;br /&gt;
// | |    |				  bit6..0 = hygro value (0..127, 106 = no hygro)&lt;br /&gt;
// | |    |				  bit7 = weak battery indicator (0=okay, 1=weak)&lt;br /&gt;
// | |    |				  example: 28 --&amp;gt; hygro 40%, battery okay&lt;br /&gt;
// | |    +-----------&amp;gt; Temp (T+40)*10 in °C&lt;br /&gt;
// | |					  nibble 1 = T10&lt;br /&gt;
// | |					  nibble 2 = T1&lt;br /&gt;
// | |					  nibble 3 = T0.1&lt;br /&gt;
// | |					  example1: 624 --&amp;gt; 62.4 - 40 = 22.4°C&lt;br /&gt;
// | |                    example2: 394 --&amp;gt; 39.4 - 40 = -0.6°C&lt;br /&gt;
// | +----------------&amp;gt; SensorID &lt;br /&gt;
// |					  bit7..2 SensorID (0..63)&lt;br /&gt;
// |					  bit1 = Restart flag (0=no restart, 1=restart--&amp;gt;new batt)&lt;br /&gt;
// |					  bit0 = unused (always 0)&lt;br /&gt;
// +------------------&amp;gt; Message length (number of nibbles that follow)&lt;br /&gt;
//                        example: 9 --&amp;gt; 9 nibbles follow&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: schematic_1.png|thumb|200px|Schaltplan Seite 1]]&lt;br /&gt;
[[Bild: schematic_2.png|thumb|200px|Schaltplan Seite 2]]&lt;br /&gt;
Als Hardware kommen folgende Komponenten zum Einsatz:&lt;br /&gt;
* 868MHz Empfangsmodul mit PCB Antenne&lt;br /&gt;
* ATMEL ATmega1284P + ENC28J60 für 100base-T&lt;br /&gt;
* microSD Adapter&lt;br /&gt;
&lt;br /&gt;
===Empfangsmodul===&lt;br /&gt;
Für dem Empfang (und wenn mal will auch für das Senden) gibt es ein preiswertes 868MHz Modul RFM12.&lt;br /&gt;
Es ist ein &#039;&#039;Universal ISM Band FSK Transceiver&#039;&#039; und an anderer Stelle schon ausgiebig beschrieben [[RFM12]].&lt;br /&gt;
Die Kommunikation erfolgt über eine gewöhnliche SPI Schnittstelle im 16-bit Transfer. Die Einstellmöglichkeiten sind so vielseitig, sodass man am Anfang schier verzweifelt, bis der Empfang dann endlich gelingen will. Daher hier mal die bei mir erfolgreiche Init-Sequenz:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    rf12_trans(0x80E7);			// EL (ena TX), EF (ena RX FIFO), 12.0pF &lt;br /&gt;
    rf12_trans(0xA67C);			// FREQUENCY 868.300MHz &lt;br /&gt;
    rf12_trans(0xC613);			// DATA RATE 17.241 kbps&lt;br /&gt;
    rf12_trans(0x94A0);			// RECEIVER CONTROL VDI Medium 134khz LNA max DRRSI 103 dbm&lt;br /&gt;
    rf12_trans(0xC2AC);			// AL,!ml,DIG,DQD4 &lt;br /&gt;
    rf12_trans(0xCA83);			// FIFO8,2-SYNC,!ff,DR&lt;br /&gt;
    rf12_trans(0xCED4);			// SYNC=2DD4&lt;br /&gt;
    rf12_trans(0xC483);			// @PWR,NO RSTRIC,!st,!fi,OE,EN &lt;br /&gt;
    rf12_trans(0x9850);			// !mp,90kHz,MAX OUT &lt;br /&gt;
    rf12_trans(0xCC77);			// OB1, OB0, LPX, ddy, DDIT, BW0 &lt;br /&gt;
    rf12_trans(0xE000);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC800);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC049);			// 1.66MHz,3.1V &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Sensorlogger_board.png|thumb|200px|Platine mit PCB Antenne]]&lt;br /&gt;
Das PCB wurde auf das Gehäuse SP 2000 SW von STRAPUBOX abgestimmt. Damit alles einfach reinpasst in SMD wo sinnvoll.&lt;br /&gt;
Bei Buchsen (Power/Ethernet) bin ich aber immer noch ein Fan von Thru-Hole - wegen der Stabilität. Das Löten fand wieder in der Pizzafanne statt wie in der c&#039;t Hacks beschrieben. &lt;br /&gt;
&lt;br /&gt;
===Antenne===&lt;br /&gt;
[[Bild: S11_initial.jpg|thumb|200px|S11 Messung am Original]]&lt;br /&gt;
[[Bild: S11_final.jpg|thumb|200px|S11 Messung am Original]]&lt;br /&gt;
An das RFM12-Modul muss noch eine Antenne angeschlossen werden. Üblicherweise 1/4 Lamba also ca. 8,3cm . Da aber noch Patz auf dem PCB war, habe ich mich mal an eine PCB Variante in meanderförmigem Aufbau gewagt. Dazu gibt es eine hübsche Design Note von Texas Instruments (DN024). Das Ergebnis lag aber etwas daneben, da u.a. das &amp;lt;math&amp;gt;\epsilon_r&amp;lt;/math&amp;gt; meines Lieblings-PCB-Machers wohl doch in Wirklichkeit etwas anders ausfiel. Der maximale Gain lag bei ca. 790MHz und ließ sich dann durch Verkürzung nach 868MHz schieben bei endgültigen -6dB gain. Damit ist auch ein Empfang durch Betondecken oder -wände machbar.  &lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Die Software ist mit AVR STudio 6 erstellt und als Debugger steht AVR-Dragon auf bem Basteltisch. Zur Unterstützung ist ein UART I/F mit an Board, das dann über einen Pegelwandler und den RS232/USB Adapter selbst auf meinem MAC die printf-Anweisungen klaglos ausgibt. Ein Command I/F erlaubt auch die direkte Steuerung über die gleiche Schnittstelle. Für den Normalbetrieb ist allerdings auch ein kleiner Web-Server integriert. Das gesamte Paket inkl. Ethernet und SD Unterstützung benötigt ca. 85K FLASH und 12.5K RAM Speicher.&lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
[[Bild: temp_example.png|thumb|200px|Aussentemperaturverlauf einer Woche]]&lt;br /&gt;
Wer mal die Aufzeichnung live auf meinem WebServer ausprobieren will: http://vz.rbulla.de. Die UUID für die Außentemperatur (in Langenfeld-Rheinland) lautet: e62976c0-7109-11e1-a585-8762f86249c1.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://hackaday.com/2011/06/13/reverse-engineering-wireless-weather-stations/ IT+ Protokoll Beschreibung&lt;br /&gt;
* http://fredboboss.free.fr/tx29/  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://gcrnet.net/node/32  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://www.ti.com/lit/an/swra227e/swra227e.pdf  Antenna Design Note DN024 &lt;br /&gt;
* [[RFM12]]  Empfangsmodul Beschreibung&lt;br /&gt;
* http://www.volkszaehler.org  Smart Meter Anwendung&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Sensorlogger_bottom.jpg&amp;diff=72862</id>
		<title>Datei:Sensorlogger bottom.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Sensorlogger_bottom.jpg&amp;diff=72862"/>
		<updated>2013-02-24T21:37:08Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Sensorlogger_top.jpg&amp;diff=72861</id>
		<title>Datei:Sensorlogger top.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Sensorlogger_top.jpg&amp;diff=72861"/>
		<updated>2013-02-24T21:36:36Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:S11_final.jpg&amp;diff=72860</id>
		<title>Datei:S11 final.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:S11_final.jpg&amp;diff=72860"/>
		<updated>2013-02-24T21:33:05Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:S11_initial.jpg&amp;diff=72859</id>
		<title>Datei:S11 initial.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:S11_initial.jpg&amp;diff=72859"/>
		<updated>2013-02-24T21:32:41Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Sensorlogger_board.png&amp;diff=72858</id>
		<title>Datei:Sensorlogger board.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Sensorlogger_board.png&amp;diff=72858"/>
		<updated>2013-02-24T21:32:04Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Temp_example.png&amp;diff=72857</id>
		<title>Datei:Temp example.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Temp_example.png&amp;diff=72857"/>
		<updated>2013-02-24T21:31:23Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Schematic_2.png&amp;diff=72856</id>
		<title>Datei:Schematic 2.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Schematic_2.png&amp;diff=72856"/>
		<updated>2013-02-24T21:30:57Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Schematic_1.png&amp;diff=72855</id>
		<title>Datei:Schematic 1.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Schematic_1.png&amp;diff=72855"/>
		<updated>2013-02-24T21:30:22Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72854</id>
		<title>SensorLogger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72854"/>
		<updated>2013-02-24T21:28:17Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;von Rolf Bulla&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Sensorlogger_top.jpg|thumb|200px|Der fertige Sensorlogger]]&lt;br /&gt;
[[Bild: Sensorlogger_bottom.jpg|thumb|200px|und hier die Rückseite mit microSD Karte]]&lt;br /&gt;
Die Idee zu der folgenden Schaltung ist eigentlich aus der Überlegung entstanden, dass es neben der Verbrauchsaufzeichnung der heimischen Heizung (hier Gas) ganz interessant wäre, auch die Außen und Innentemperatur mit aufzuzeichnen. Schließlich gilt ja, je kälter desto mehr heizen. Eine Temperaturmessung hat man vielleicht ja schon zu Hause im Einsatz in Form einer Wetterstation. Warum also nicht die drahtlose Übertragung der Sensoren zur Wetterstation &#039;anzapfen&#039;...&lt;br /&gt;
&lt;br /&gt;
Übrigens wird die oben erwähnte Energieerfassung (inkl. Strom und Wasser) über den freien Smart Meter Ansatz von http://www.volkszaehler.org erledigt. Aber dazu nachher noch mehr.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Das Gerät soll also das IT+ Sensorprotokoll empfangen und verstehen und die so erfassten Messwerte an das Smart Meter über Ethernet ins Intra- oder Internet liefern. Um auch Netzwerkunabhängig aufzeichnen zu können wäre ein MicroSD Interface zur Datenspeicherung eine nette Spielerei. Noch mal zusammengefasst:&lt;br /&gt;
* Empfang und Dekodierung der IT+ Protokolldaten&lt;br /&gt;
* Speichern der Daten auf MicroSD-Karte&lt;br /&gt;
* Senden der Messdaten über Ethernet&lt;br /&gt;
* kleines Standardgehäuse&lt;br /&gt;
* externes Standardnetzteil &lt;br /&gt;
* und wie immer Standardbauteile und preiswert&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Wenn sich an das IT+ Protokoll wagt, so findet man einige Quellen (siehe Links). Vom Sensor werden so alle 4.5 Sekunden&lt;br /&gt;
immer 5 Bytes gesendet. Die Frequenz ist af 868MHz festgelegt. Falls der Sensor auch die Luftfeuchtigkeit messen kann, so kommt der Wert mit, wenn nicht dann gibt es einen Fantasiewert (=106). Jeder Sensor verfügt über eine Adresskodierung. &amp;lt;u&amp;gt;Vorsicht es gibt Sensoren, die nach dem Batteriewechsel eine neue Adresse verwenden.&amp;lt;/u&amp;gt;. Über die Adresse lassen sich auch mehrere Sensoren parallel auswerten.&lt;br /&gt;
Zu Beachten ist auch, das keine negativen Werte übertragen werden, da die Temperatur vor der Übertragung immer einen Offset von 40 erhält.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// ##### IT+ Frame #####&lt;br /&gt;
// Frame example (5 byte):&lt;br /&gt;
// 92h 03h 94h 59h 3Ch  --&amp;gt; Addr:32, Temp:-0.6, Hygro:89.0&lt;br /&gt;
// 92h 86h 24h 28h DEh  --&amp;gt; Addr:40, Temp:22.4, Hygro:40.0&lt;br /&gt;
// | || |  ||  ||  ||&lt;br /&gt;
// 9 28  624   28  DE&lt;br /&gt;
// | |    |    |   +--&amp;gt; CRC-8 (x8 + x5 + x4 +1)&lt;br /&gt;
// | |    |    +------&amp;gt; Hygro in % &lt;br /&gt;
// | |    |				  bit6..0 = hygro value (0..127, 106 = no hygro)&lt;br /&gt;
// | |    |				  bit7 = weak battery indicator (0=okay, 1=weak)&lt;br /&gt;
// | |    |				  example: 28 --&amp;gt; hygro 40%, battery okay&lt;br /&gt;
// | |    +-----------&amp;gt; Temp (T+40)*10 in °C&lt;br /&gt;
// | |					  nibble 1 = T10&lt;br /&gt;
// | |					  nibble 2 = T1&lt;br /&gt;
// | |					  nibble 3 = T0.1&lt;br /&gt;
// | |					  example1: 624 --&amp;gt; 62.4 - 40 = 22.4°C&lt;br /&gt;
// | |                    example2: 394 --&amp;gt; 39.4 - 40 = -0.6°C&lt;br /&gt;
// | +----------------&amp;gt; SensorID &lt;br /&gt;
// |					  bit7..2 SensorID (0..63)&lt;br /&gt;
// |					  bit1 = Restart flag (0=no restart, 1=restart--&amp;gt;new batt)&lt;br /&gt;
// |					  bit0 = unused (always 0)&lt;br /&gt;
// +------------------&amp;gt; Message length (number of nibbles that follow)&lt;br /&gt;
//                        example: 9 --&amp;gt; 9 nibbles follow&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: schematic_1.png|thumb|200px|Schaltplan Seite 1]]&lt;br /&gt;
[[Bild: schematic_2.png|thumb|200px|Schaltplan Seite 2]]&lt;br /&gt;
Als Hardware kommen folgende Komponenten zum Einsatz:&lt;br /&gt;
* 868MHz Empfangsmodul mit PCB Antenne&lt;br /&gt;
* ATMEL ATmega1284P + ENC28J60 für 100base-T&lt;br /&gt;
* microSD Adapter&lt;br /&gt;
&lt;br /&gt;
===Empfangsmodul===&lt;br /&gt;
Für dem Empfang (und wenn mal will auch für das Senden) gibt es ein preiswertes 868MHz Modul RFM12.&lt;br /&gt;
Es ist ein &#039;&#039;Universal ISM Band FSK Transceiver&#039;&#039; und an anderer Stelle schon ausgiebig beschrieben [[RFM12]].&lt;br /&gt;
Die Kommunikation erfolgt über eine gewöhnliche SPI Schnittstelle im 16-bit Transfer. Die Einstellmöglichkeiten sind so vielseitig, sodass man am Anfang schier verzweifelt, bis der Empfang dann endlich gelingen will. Daher hier mal die bei mir erfolgreiche Init-Sequenz:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    rf12_trans(0x80E7);			// EL (ena TX), EF (ena RX FIFO), 12.0pF &lt;br /&gt;
    rf12_trans(0xA67C);			// FREQUENCY 868.300MHz &lt;br /&gt;
    rf12_trans(0xC613);			// DATA RATE 17.241 kbps&lt;br /&gt;
    rf12_trans(0x94A0);			// RECEIVER CONTROL VDI Medium 134khz LNA max DRRSI 103 dbm&lt;br /&gt;
    rf12_trans(0xC2AC);			// AL,!ml,DIG,DQD4 &lt;br /&gt;
    rf12_trans(0xCA83);			// FIFO8,2-SYNC,!ff,DR&lt;br /&gt;
    rf12_trans(0xCED4);			// SYNC=2DD4&lt;br /&gt;
    rf12_trans(0xC483);			// @PWR,NO RSTRIC,!st,!fi,OE,EN &lt;br /&gt;
    rf12_trans(0x9850);			// !mp,90kHz,MAX OUT &lt;br /&gt;
    rf12_trans(0xCC77);			// OB1, OB0, LPX, ddy, DDIT, BW0 &lt;br /&gt;
    rf12_trans(0xE000);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC800);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC049);			// 1.66MHz,3.1V &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Sensorlogger_board.png|thumb|200px|Platine mit PCB Antenne]]&lt;br /&gt;
Das PCB wurde auf das Gehäuse SP 2000 SW von STRAPUBOX abgestimmt. Damit alles einfach reinpasst in SMD wo sinnvoll.&lt;br /&gt;
Bei Buchsen (Power/Ethernet) bin ich aber immer noch ein Fan von Thru-Hole - wegen der Stabilität. Das Löten fand wieder in der Pizzafanne statt wie in der c&#039;t Hacks beschrieben. &lt;br /&gt;
&lt;br /&gt;
===Antenne===&lt;br /&gt;
[[Bild: S11_initial.jpg|thumb|200px|S11 Messung am Original]]&lt;br /&gt;
[[Bild: S11_final.jpg|thumb|200px|S11 Messung am Original]]&lt;br /&gt;
An das RFM12-Modul muss noch eine Antenne angeschlossen werden. Üblicherweise 1/4 Lamba also ca. 8,3cm . Da aber noch Patz auf dem PCB war, habe ich mich mal an eine PCB Variante in meanderförmigem Aufbau gewagt. Dazu gibt es eine hübsche Design Note von Texas Instruments (DN024). Das Ergebnis lag aber etwas daneben, da u.a. das &amp;lt;math&amp;gt;\epsilon_r&amp;lt;/math&amp;gt; meines Lieblings-PCB-Machers wohl doch in Wirklichkeit etwas anders ausfiel. Der maximale Gain lag bei ca. 790MHz und ließ sich dann durch Verkürzung nach 868MHz schieben bei endgültigen -6dB gain. Damit ist auch ein Empfang durch Betondecken oder -wände machbar.  &lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Die Software ist mit AVR STudio 6 erstellt und als Debugger steht AVR-Dragon auf bem Basteltisch. Zur Unterstützung ist ein UART I/F mit an Board, das dann über einen Pegelwandler und den RS232/USB Adapter selbst auf meinem MAC die printf-Anweisungen klaglos ausgibt. Ein Command I/F erlaubt auch die direkte Steuerung über die gleiche Schnittstelle. Für den Normalbetrieb ist allerdings auch ein kleiner Web-Server integriert. Das gesamte Paket inkl. Ethernet und SD Unterstützung benötigt ca. 85K FLASH und 12.5K RAM Speicher.&lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
[[Bild: temp_example.png|thumb|200px|Aussentemperaturverlauf einer Woche]]&lt;br /&gt;
Wer mal die Aufzeichnung live auf meinem WebServer ausprobieren will: http://vz.rbulla.de. Die UUID für die Außentemperatur (in Langenfeld-Rheinland) lautet: e62976c0-7109-11e1-a585-8762f86249c1.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://hackaday.com/2011/06/13/reverse-engineering-wireless-weather-stations/ IT+ Protokoll Beschreibung&lt;br /&gt;
* http://fredboboss.free.fr/tx29/  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://gcrnet.net/node/32  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://www.ti.com/lit/an/swra227e/swra227e.pdf  Antenna Design Note DN024 &lt;br /&gt;
* [[RFM12]]  Empfangsmodul Beschreibung&lt;br /&gt;
* http://www.volkszaehler.org  Smart Meter Anwendung&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72853</id>
		<title>SensorLogger</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=SensorLogger&amp;diff=72853"/>
		<updated>2013-02-24T21:27:46Z</updated>

		<summary type="html">&lt;p&gt;Bullar: SensorLogger page created!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
[[Bild: Sensorlogger_top.jpg|thumb|200px|Der fertige Sensorlogger]]&lt;br /&gt;
[[Bild: Sensorlogger_bottom.jpg|thumb|200px|und hier die Rückseite mit microSD Karte]]&lt;br /&gt;
Die Idee zu der folgenden Schaltung ist eigentlich aus der Überlegung entstanden, dass es neben der Verbrauchsaufzeichnung der heimischen Heizung (hier Gas) ganz interessant wäre, auch die Außen und Innentemperatur mit aufzuzeichnen. Schließlich gilt ja, je kälter desto mehr heizen. Eine Temperaturmessung hat man vielleicht ja schon zu Hause im Einsatz in Form einer Wetterstation. Warum also nicht die drahtlose Übertragung der Sensoren zur Wetterstation &#039;anzapfen&#039;...&lt;br /&gt;
&lt;br /&gt;
Übrigens wird die oben erwähnte Energieerfassung (inkl. Strom und Wasser) über den freien Smart Meter Ansatz von http://www.volkszaehler.org erledigt. Aber dazu nachher noch mehr.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Das Gerät soll also das IT+ Sensorprotokoll empfangen und verstehen und die so erfassten Messwerte an das Smart Meter über Ethernet ins Intra- oder Internet liefern. Um auch Netzwerkunabhängig aufzeichnen zu können wäre ein MicroSD Interface zur Datenspeicherung eine nette Spielerei. Noch mal zusammengefasst:&lt;br /&gt;
* Empfang und Dekodierung der IT+ Protokolldaten&lt;br /&gt;
* Speichern der Daten auf MicroSD-Karte&lt;br /&gt;
* Senden der Messdaten über Ethernet&lt;br /&gt;
* kleines Standardgehäuse&lt;br /&gt;
* externes Standardnetzteil &lt;br /&gt;
* und wie immer Standardbauteile und preiswert&lt;br /&gt;
&lt;br /&gt;
==Protokoll==&lt;br /&gt;
Wenn sich an das IT+ Protokoll wagt, so findet man einige Quellen (siehe Links). Vom Sensor werden so alle 4.5 Sekunden&lt;br /&gt;
immer 5 Bytes gesendet. Die Frequenz ist af 868MHz festgelegt. Falls der Sensor auch die Luftfeuchtigkeit messen kann, so kommt der Wert mit, wenn nicht dann gibt es einen Fantasiewert (=106). Jeder Sensor verfügt über eine Adresskodierung. &amp;lt;u&amp;gt;Vorsicht es gibt Sensoren, die nach dem Batteriewechsel eine neue Adresse verwenden.&amp;lt;/u&amp;gt;. Über die Adresse lassen sich auch mehrere Sensoren parallel auswerten.&lt;br /&gt;
Zu Beachten ist auch, das keine negativen Werte übertragen werden, da die Temperatur vor der Übertragung immer einen Offset von 40 erhält.&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// ##### IT+ Frame #####&lt;br /&gt;
// Frame example (5 byte):&lt;br /&gt;
// 92h 03h 94h 59h 3Ch  --&amp;gt; Addr:32, Temp:-0.6, Hygro:89.0&lt;br /&gt;
// 92h 86h 24h 28h DEh  --&amp;gt; Addr:40, Temp:22.4, Hygro:40.0&lt;br /&gt;
// | || |  ||  ||  ||&lt;br /&gt;
// 9 28  624   28  DE&lt;br /&gt;
// | |    |    |   +--&amp;gt; CRC-8 (x8 + x5 + x4 +1)&lt;br /&gt;
// | |    |    +------&amp;gt; Hygro in % &lt;br /&gt;
// | |    |				  bit6..0 = hygro value (0..127, 106 = no hygro)&lt;br /&gt;
// | |    |				  bit7 = weak battery indicator (0=okay, 1=weak)&lt;br /&gt;
// | |    |				  example: 28 --&amp;gt; hygro 40%, battery okay&lt;br /&gt;
// | |    +-----------&amp;gt; Temp (T+40)*10 in °C&lt;br /&gt;
// | |					  nibble 1 = T10&lt;br /&gt;
// | |					  nibble 2 = T1&lt;br /&gt;
// | |					  nibble 3 = T0.1&lt;br /&gt;
// | |					  example1: 624 --&amp;gt; 62.4 - 40 = 22.4°C&lt;br /&gt;
// | |                    example2: 394 --&amp;gt; 39.4 - 40 = -0.6°C&lt;br /&gt;
// | +----------------&amp;gt; SensorID &lt;br /&gt;
// |					  bit7..2 SensorID (0..63)&lt;br /&gt;
// |					  bit1 = Restart flag (0=no restart, 1=restart--&amp;gt;new batt)&lt;br /&gt;
// |					  bit0 = unused (always 0)&lt;br /&gt;
// +------------------&amp;gt; Message length (number of nibbles that follow)&lt;br /&gt;
//                        example: 9 --&amp;gt; 9 nibbles follow&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: schematic_1.png|thumb|200px|Schaltplan Seite 1]]&lt;br /&gt;
[[Bild: schematic_2.png|thumb|200px|Schaltplan Seite 2]]&lt;br /&gt;
Als Hardware kommen folgende Komponenten zum Einsatz:&lt;br /&gt;
* 868MHz Empfangsmodul mit PCB Antenne&lt;br /&gt;
* ATMEL ATmega1284P + ENC28J60 für 100base-T&lt;br /&gt;
* microSD Adapter&lt;br /&gt;
&lt;br /&gt;
===Empfangsmodul===&lt;br /&gt;
Für dem Empfang (und wenn mal will auch für das Senden) gibt es ein preiswertes 868MHz Modul RFM12.&lt;br /&gt;
Es ist ein &#039;&#039;Universal ISM Band FSK Transceiver&#039;&#039; und an anderer Stelle schon ausgiebig beschrieben [[RFM12]].&lt;br /&gt;
Die Kommunikation erfolgt über eine gewöhnliche SPI Schnittstelle im 16-bit Transfer. Die Einstellmöglichkeiten sind so vielseitig, sodass man am Anfang schier verzweifelt, bis der Empfang dann endlich gelingen will. Daher hier mal die bei mir erfolgreiche Init-Sequenz:&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
    rf12_trans(0x80E7);			// EL (ena TX), EF (ena RX FIFO), 12.0pF &lt;br /&gt;
    rf12_trans(0xA67C);			// FREQUENCY 868.300MHz &lt;br /&gt;
    rf12_trans(0xC613);			// DATA RATE 17.241 kbps&lt;br /&gt;
    rf12_trans(0x94A0);			// RECEIVER CONTROL VDI Medium 134khz LNA max DRRSI 103 dbm&lt;br /&gt;
    rf12_trans(0xC2AC);			// AL,!ml,DIG,DQD4 &lt;br /&gt;
    rf12_trans(0xCA83);			// FIFO8,2-SYNC,!ff,DR&lt;br /&gt;
    rf12_trans(0xCED4);			// SYNC=2DD4&lt;br /&gt;
    rf12_trans(0xC483);			// @PWR,NO RSTRIC,!st,!fi,OE,EN &lt;br /&gt;
    rf12_trans(0x9850);			// !mp,90kHz,MAX OUT &lt;br /&gt;
    rf12_trans(0xCC77);			// OB1, OB0, LPX, ddy, DDIT, BW0 &lt;br /&gt;
    rf12_trans(0xE000);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC800);			// NOT USE&lt;br /&gt;
    rf12_trans(0xC049);			// 1.66MHz,3.1V &lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Sensorlogger_board.png|thumb|200px|Platine mit PCB Antenne]]&lt;br /&gt;
Das PCB wurde auf das Gehäuse SP 2000 SW von STRAPUBOX abgestimmt. Damit alles einfach reinpasst in SMD wo sinnvoll.&lt;br /&gt;
Bei Buchsen (Power/Ethernet) bin ich aber immer noch ein Fan von Thru-Hole - wegen der Stabilität. Das Löten fand wieder in der Pizzafanne statt wie in der c&#039;t Hacks beschrieben. &lt;br /&gt;
&lt;br /&gt;
===Antenne===&lt;br /&gt;
[[Bild: S11_initial.jpg|thumb|200px|S11 Messung am Original]]&lt;br /&gt;
[[Bild: S11_final.jpg|thumb|200px|S11 Messung am Original]]&lt;br /&gt;
An das RFM12-Modul muss noch eine Antenne angeschlossen werden. Üblicherweise 1/4 Lamba also ca. 8,3cm . Da aber noch Patz auf dem PCB war, habe ich mich mal an eine PCB Variante in meanderförmigem Aufbau gewagt. Dazu gibt es eine hübsche Design Note von Texas Instruments (DN024). Das Ergebnis lag aber etwas daneben, da u.a. das &amp;lt;math&amp;gt;\epsilon_r&amp;lt;/math&amp;gt; meines Lieblings-PCB-Machers wohl doch in Wirklichkeit etwas anders ausfiel. Der maximale Gain lag bei ca. 790MHz und ließ sich dann durch Verkürzung nach 868MHz schieben bei endgültigen -6dB gain. Damit ist auch ein Empfang durch Betondecken oder -wände machbar.  &lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Die Software ist mit AVR STudio 6 erstellt und als Debugger steht AVR-Dragon auf bem Basteltisch. Zur Unterstützung ist ein UART I/F mit an Board, das dann über einen Pegelwandler und den RS232/USB Adapter selbst auf meinem MAC die printf-Anweisungen klaglos ausgibt. Ein Command I/F erlaubt auch die direkte Steuerung über die gleiche Schnittstelle. Für den Normalbetrieb ist allerdings auch ein kleiner Web-Server integriert. Das gesamte Paket inkl. Ethernet und SD Unterstützung benötigt ca. 85K FLASH und 12.5K RAM Speicher.&lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
[[Bild: temp_example.png|thumb|200px|Aussentemperaturverlauf einer Woche]]&lt;br /&gt;
Wer mal die Aufzeichnung live auf meinem WebServer ausprobieren will: http://vz.rbulla.de. Die UUID für die Außentemperatur (in Langenfeld-Rheinland) lautet: e62976c0-7109-11e1-a585-8762f86249c1.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://hackaday.com/2011/06/13/reverse-engineering-wireless-weather-stations/ IT+ Protokoll Beschreibung&lt;br /&gt;
* http://fredboboss.free.fr/tx29/  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://gcrnet.net/node/32  IT+ Protokoll Beschreibung&lt;br /&gt;
* http://www.ti.com/lit/an/swra227e/swra227e.pdf  Antenna Design Note DN024 &lt;br /&gt;
* [[RFM12]]  Empfangsmodul Beschreibung&lt;br /&gt;
* http://www.volkszaehler.org  Smart Meter Anwendung&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68734</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68734"/>
		<updated>2012-10-14T16:20:01Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Ausblick */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Mehrere Tage Dauerbetrieb und mehrere Monate Stand-by mit einer Akkuladung&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber sicher immer verbessern. Übrigens der Strombedarf im Arbeitsbetrieb ohne Tonausgabe beträgt ungefähr 13mA, mit Tonausgabe 23 mA. Der Stand-by haut mit 215uA rein. Ein halbes Jahr kann man also ohne Nachladen auskommen. Im Dauer-Betrieb kommt man wohl so auf 2-3 Tage. Der heimische Praxistest wird das hoffentlich bestätigen.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter_v11.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68733</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68733"/>
		<updated>2012-10-14T16:14:23Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Mehrere Tage Dauerbetrieb und mehrere Monate Stand-by mit einer Akkuladung&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber immer verbessern. Abgezogene Messstrippen führen zu einem heulen und ab und zu kommt die Schaltung standig blinkend aus der Ruhe. Abhilfe nur über einen Kaltstart. Grund bisher unbekannt. Mal schauen was einem dazu noch einfällt.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter_v11.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter_v11.c&amp;diff=68732</id>
		<title>Datei:Tonohmmeter v11.c</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter_v11.c&amp;diff=68732"/>
		<updated>2012-10-14T16:12:56Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68731</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68731"/>
		<updated>2012-10-14T16:12:13Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Ruhestrom unter 100uA&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber immer verbessern. Abgezogene Messstrippen führen zu einem heulen und ab und zu kommt die Schaltung standig blinkend aus der Ruhe. Abhilfe nur über einen Kaltstart. Grund bisher unbekannt. Mal schauen was einem dazu noch einfällt.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter_v11.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Benutzer:Bullar&amp;diff=68726</id>
		<title>Benutzer:Bullar</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Benutzer:Bullar&amp;diff=68726"/>
		<updated>2012-10-13T19:58:49Z</updated>

		<summary type="html">&lt;p&gt;Bullar: Die Seite wurde neu angelegt: „AVR Neuling.   Im richtigen Leben angestellt bei einem Japanischen Halbleiterhersteller  Beiträge: * TonOhmMeter  Kontakt: Rolf.Bulla@gmail.com“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AVR Neuling. &lt;br /&gt;
&lt;br /&gt;
Im richtigen Leben angestellt bei einem Japanischen Halbleiterhersteller&lt;br /&gt;
&lt;br /&gt;
Beiträge:&lt;br /&gt;
* TonOhmMeter&lt;br /&gt;
&lt;br /&gt;
Kontakt: Rolf.Bulla@gmail.com&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68723</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68723"/>
		<updated>2012-10-13T19:39:21Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;by [[User:bullar|Rolf Bulla]]&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Ruhestrom unter 100uA&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber immer verbessern. Abgezogene Messstrippen führen zu einem heulen und ab und zu kommt die Schaltung standig blinkend aus der Ruhe. Abhilfe nur über einen Kaltstart. Grund bisher unbekannt. Mal schauen was einem dazu noch einfällt.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte| ]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68722</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68722"/>
		<updated>2012-10-13T19:34:48Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann ein Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Ruhestrom unter 100uA&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber immer verbessern. Abgezogene Messstrippen führen zu einem heulen und ab und zu kommt die Schaltung standig blinkend aus der Ruhe. Abhilfe nur über einen Kaltstart. Grund bisher unbekannt. Mal schauen was einem dazu noch einfällt.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte| ]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68720</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68720"/>
		<updated>2012-10-13T19:29:40Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Motivation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann eine Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Ruhestrom unter 100uA&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber immer verbessern. Abgezogene Messstrippen führen zu einem heulen und ab und zu kommt die Schaltung standig blinkend aus der Ruhe. Abhilfe nur über einen Kaltstart. Grund bisher unbekannt. Mal schauen was einem dazu noch einfällt.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte| ]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68719</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68719"/>
		<updated>2012-10-13T19:29:32Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann eine Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Ruhestrom unter 100uA&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber immer verbessern. Abgezogene Messstrippen führen zu einem heulen und ab und zu kommt die Schaltung standig blinkend aus der Ruhe. Abhilfe nur über einen Kaltstart. Grund bisher unbekannt. Mal schauen was einem dazu noch einfällt.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte| ]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68718</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68718"/>
		<updated>2012-10-13T19:26:31Z</updated>

		<summary type="html">&lt;p&gt;Bullar: /* Platine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann eine Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Ruhestrom unter 100uA&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|100px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber immer verbessern. Abgezogene Messstrippen führen zu einem heulen und ab und zu kommt die Schaltung standig blinkend aus der Ruhe. Abhilfe nur über einen Kaltstart. Grund bisher unbekannt. Mal schauen was einem dazu noch einfällt.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte| ]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:TOM_bottom.png&amp;diff=68717</id>
		<title>Datei:TOM bottom.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:TOM_bottom.png&amp;diff=68717"/>
		<updated>2012-10-13T19:25:19Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:TOM_top.png&amp;diff=68716</id>
		<title>Datei:TOM top.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:TOM_top.png&amp;diff=68716"/>
		<updated>2012-10-13T19:25:03Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter_bom.pdf&amp;diff=68715</id>
		<title>Datei:Tonohmmeter bom.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter_bom.pdf&amp;diff=68715"/>
		<updated>2012-10-13T19:24:44Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter.pdf&amp;diff=68714</id>
		<title>Datei:Tonohmmeter.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter.pdf&amp;diff=68714"/>
		<updated>2012-10-13T19:24:24Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter.c&amp;diff=68713</id>
		<title>Datei:Tonohmmeter.c</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter.c&amp;diff=68713"/>
		<updated>2012-10-13T19:24:00Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter_pcb.png&amp;diff=68712</id>
		<title>Datei:Tonohmmeter pcb.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter_pcb.png&amp;diff=68712"/>
		<updated>2012-10-13T19:23:33Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter_offen.jpg&amp;diff=68711</id>
		<title>Datei:Tonohmmeter offen.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter_offen.jpg&amp;diff=68711"/>
		<updated>2012-10-13T19:23:06Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Schaltplan_Tonohmmeter.png&amp;diff=68710</id>
		<title>Datei:Schaltplan Tonohmmeter.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Schaltplan_Tonohmmeter.png&amp;diff=68710"/>
		<updated>2012-10-13T19:22:14Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Hantek69_1.jpg&amp;diff=68709</id>
		<title>Datei:Hantek69 1.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Hantek69_1.jpg&amp;diff=68709"/>
		<updated>2012-10-13T19:21:43Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter.jpg&amp;diff=68708</id>
		<title>Datei:Tonohmmeter.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Tonohmmeter.jpg&amp;diff=68708"/>
		<updated>2012-10-13T19:21:05Z</updated>

		<summary type="html">&lt;p&gt;Bullar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68707</id>
		<title>TonOhmMeter</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=TonOhmMeter&amp;diff=68707"/>
		<updated>2012-10-13T19:20:24Z</updated>

		<summary type="html">&lt;p&gt;Bullar: Initial version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
Jeder kennt das Problem, dass Schaltungen oder Verdrahtungen schon mal aufgrund von Kurzschlüssen oder Unterbrechungen nicht funktionieren. Dafür bietet das heimische Multimeter einen Durchgangsprüfer, der akustisch eine niederohmige Verbindung entlarvt. Schwierig wird es nur, wenn sich die Stelle des Kurzschlusses nicht gleich offenbart. Für solche Fälle kann man dann eine Tonohmmeter heranziehen. Damit wird der gemessene Widerstand in der zugehörigen Tonhöhe abgebildet. Je kleiner der Widerstand je höher der Ton. Ist der Messbereich empfindlich genug, kann man sich so dem Verursacher nähern.&lt;br /&gt;
&lt;br /&gt;
Das Gerät aus der Studienzeit hat leider den heiligen Siliziumhimmel erreicht und weilt nicht mehr bei mir. Warum also nicht ein neues mikroprozessorgesteuertes Gerät auf Basis eines AVR bauen.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
[[Bild: Tonohmmeter.jpg|thumb|200px|Das fertige Tonohmeters]]&lt;br /&gt;
Die folgenden Ansprüche hat das Gerät zu erfüllen:&lt;br /&gt;
* Akkubetrieb (LiPo) mit Ladezustandsanzeige&lt;br /&gt;
* Aufladung durch Mini-USB Buchse&lt;br /&gt;
* drei Messbereiche (0.1, 1 und 10Ohm)&lt;br /&gt;
* Ruhestrom unter 100uA&lt;br /&gt;
* kleines, handliches Gehäuse &lt;br /&gt;
* gängige Bauteile&lt;br /&gt;
&lt;br /&gt;
==Messprinzip==&lt;br /&gt;
[[Bild: hantek69_1.jpg|thumb|200px|Messsignal]]&lt;br /&gt;
Der Widerstand wird über den Spannungsabfall gemessen. Um auch Messungen innerhalb von Schaltungen durchführen zu können wird ein Rechtecksignal mit ca. 340mV  (da machen die üblichen ESD Strukturen der ICs nicht auf) auf den unbekannten Widerstand losgelassen. Der resultieren Spannungsabfall wird dann über OpAmps verstärkt und gleichgerichtet. Der AVR übernimmt die AD-Wandlung und Tonausgabe.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
[[Bild: Schaltplan_Tonohmmeter.png|thumb|200px|Schaltplan des TonOhmMeter]]&lt;br /&gt;
[[Bild: Tonohmmeter_offen.jpg|thumb|200px|Die Hardware des Tonohmeters]]&lt;br /&gt;
===Spannungsversorgung===&lt;br /&gt;
Zentrum der Spannungsversorgung ist ein LiPo mit nominal 3.7V. Geladen wird er mit maximal 4.2V und 500mA. Die gesamte Ladekontrolle übernimmt eine MAX1811 (IC5). Der AVR wird über einen Regler (IC1) stabil mit 3.0V versorgt. Für die OpAms benötigte negative Spannung (-2V) kommt auch der Charge Pump C6/D1. Der analoge Teil kann im Ruhezustand über Q1 abgeschaltet werden. Der Ladestand wird durch den Spannungswert am LiPo abgeschätzt (R25/R26).&lt;br /&gt;
===Messschaltung===&lt;br /&gt;
Das Rechteckgrundsignal von ca. 1KHz erzeugt der AVR an PA6. Die Pegelwandlung vollzieht IC3A und die Schottkydioden (D2) begrenzen den Spannungshub. Da wir ja an Milliohm heran wollen, muss die Messleitung kompensiert werden. Daher erfolgt der Anschluss der Messklemmen jeweils über 2.5mm Klinkenbuchsen an denen das zweipolige Messkabel erst verbunden wird. Danach folgt eine zweistufige Verstärkungsschaltung mit Tiefpass. Die zweite Stufe ist über einen programmierbaren Widerstand (IC4) in ihrer Verstärkung steuerbar. Der AVR kann über eine bidirektionale SPI den Widerstandswert und damit die Verstärkung bestimmen. Das so verstärkte Signal wird am Ende von IC3D gleichgerichtet und dem AVR zwecks AD Wandlung zugeführt. &lt;br /&gt;
===Bedienung===&lt;br /&gt;
Das Gerät wird nur über eine Taste (U1) bedient. Die Hardware-Entprellung (C8/R3/R4) vermeidet die sonst nötige Software. Die Messbereichsanzeige erfolgt über drei LEDs (LED2-4) und die Tonausgabe übernimmt ein kleiner Lautsprecher der kapazitiv an den Digitalport angeschlossen ist. Das reicht für einfache Töne aus. Schließlich wollen wir ja kein MP3 ausgeben.&lt;br /&gt;
===Platine===&lt;br /&gt;
[[Bild: Tonohmmeter_pcb.png|thumb|200px|Die Platine des Tonohmeters]]&lt;br /&gt;
Da es mir das Handheld-Gehäuse von HAMMOND angetan hatte, war es schwierig einen von den Dimensionen her passenden LiPo zu finden. Leider fand ich nur einen für die Vorderseite, so dass die Platine etwas eng wurde und beidseitig bestückt wird. Am einen Ende sind die beiden Klinkenbuchsen für die Messstrippen und an der Unterseite die Ladebuchse mit Ladeanzeige. Die unbenutzte Routingfläche ist als Massefläche ausgelegt. Links ist der AVD-ISP Anschluss zuerkennen, der uns das On-Board-Programming ermöglicht.&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Das Programm benötigt unter 2K weshalb ein ATTINY24 ausreichen würde. Wegen dem - man weiss ja nie - hab ich trotzdem den ATTINY44 genommen. Die Programmentwicklung wie üblich in C auf AVR Studio6 und debugged mit AVR-DRAGON.&lt;br /&gt;
&lt;br /&gt;
Ein wenig Arbeit hat die SPI Schnittstelle zum programmierbaren Widerstand (POT) gemacht. Zum einen erfordert der POT einen bidirektionalen Datenpin (SDI und SDO zusammen) und zum anderen konnte ich die USI nicht missbrauchen, da sie auf ungünstigen Ports lag. &lt;br /&gt;
Die S/W Emulation sieht dann so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
// SPI write emulation (with SDI/SDO multiplexing)	&lt;br /&gt;
void SPI_write(uint8_t addr, uint16_t data)  {&lt;br /&gt;
	TIMSK0 &amp;amp;= ~(1&amp;lt;&amp;lt;OCIE0B); 		// Stop 1KHz (PA6)&lt;br /&gt;
	TCCR1B = 0;					// stop timer (no tone signal)&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK=SDIO HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA6) | (1&amp;lt;&amp;lt;PA4);	// SCK+SDIO to output&lt;br /&gt;
&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA2);			// CS low&lt;br /&gt;
	&lt;br /&gt;
	// Address AD0..3 (bit15...12)&lt;br /&gt;
	for (i=3;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((addr &amp;amp; (1&amp;lt;&amp;lt;i)) == 0)&lt;br /&gt;
		PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		else&lt;br /&gt;
		PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Command C1,C0 (bit11,10)&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);			// Data = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = LOW&lt;br /&gt;
	_delay_us(5);&lt;br /&gt;
	PORTA ^= (1&amp;lt;&amp;lt;PA6);			// SCK = HIGH&lt;br /&gt;
	&lt;br /&gt;
	// Data D9..0 (bit9..0)&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// set SDIO to output&lt;br /&gt;
	for (i=9;i&amp;gt;=0;i--) {&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = LOW&lt;br /&gt;
		if ((data &amp;amp; (1&amp;lt;&amp;lt;i)) != 0) {&lt;br /&gt;
			PORTA |= (1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		} else {&lt;br /&gt;
			PORTA &amp;amp;= ~(1&amp;lt;&amp;lt;PA4);&lt;br /&gt;
		}&lt;br /&gt;
		PORTA ^= (1&amp;lt;&amp;lt;PA6);		// SCK = HIGH&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PORTA |= (1&amp;lt;&amp;lt;PA2);			// CS to HIGH&lt;br /&gt;
	DDRA |= (1&amp;lt;&amp;lt;PA4);				// SDIO to output&lt;br /&gt;
	&lt;br /&gt;
	TIMSK0 |= (1&amp;lt;&amp;lt;OCIE0B);			// Restart 1KHz (PA6)&lt;br /&gt;
	TCCR1B |= (1&amp;lt;&amp;lt;WGM12) | (1&amp;lt;&amp;lt;CS11);	// Restart TIMER with CLK/8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das vollständige Programm liegt im Downloadbereich weiter unter.&lt;br /&gt;
&lt;br /&gt;
==Bedienung==&lt;br /&gt;
Durch einen Druck des Tasters wird das Gerät eingeschaltet. Die ersten zwei Sekunden zeigt sich der Ladezustand des Akkus an den drei gelben LEDs (3 LEDs an &amp;gt;75%, 2 LEDs &amp;gt;50% und eine über 25%). Ist die Akkukapazität unter 25% muss erst nachgeladen werden. Die Schaltung bleibt im Ruhemodus. Nach erfolgreichen Start erfolgt für 2 Sekunden ein Quittungston und das Gerät ist einsatzbereit. Der gemessene Widerstandswert wird gewandelt in eine passende Frequenz von 500Hz bis 2 KHz - sofern er sich im Messbereich befindet - ausgegeben. Durch weitere Tastendrücke wird der Messbereich gewechselt. Hält man die Taste mehr als 2 Sekunden gedrückt wechselt das Gerät in den Ruhemodus und schaltet ab.&lt;br /&gt;
&lt;br /&gt;
==Herstellung==&lt;br /&gt;
Obwohl wegen dem Platzmangel hauptsächlich SMD Bauteile verwendet werden, lässt sich die Platine einfach löten. Die Rückseite mit den SMD Bauteilen habe ich über die Pizzapfannenmethode der c&#039;t Hacks gelötet. Die Vorderseite mit den Bedienelementen dann halt von Hand. Um ins Gehäuse zu passen muss der 2x3 Pfostenstecker von Hand gekürzt werden. &lt;br /&gt;
Für das Gehäuse ist einwenig Bohren und Feilen angesagt. Als Hilfe liegt eine Bohrschablone im Downloadbereich. &lt;br /&gt;
&lt;br /&gt;
==Ausblick==&lt;br /&gt;
Getreu dem Motto: eine fertige Software ist eine veraltete, hat die aktuelle S/W Version zwar die beschriebenen Grundfunktionen lässt sich aber immer verbessern. Abgezogene Messstrippen führen zu einem heulen und ab und zu kommt die Schaltung standig blinkend aus der Ruhe. Abhilfe nur über einen Kaltstart. Grund bisher unbekannt. Mal schauen was einem dazu noch einfällt.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
*[[Media:Tonohmmeter.c|Firmware Source Code]] in C&lt;br /&gt;
*[[Media:Tonohmmeter.pdf|Bohrschablone Frontseite]]&lt;br /&gt;
*[[Media:Tonohmmeter_bom.pdf|Bestückungsliste (BOM)]]&lt;br /&gt;
*[[Media:TOM_top.png|Rückseite]] des PCBs&lt;br /&gt;
*[[Media:TOM_bottom.png|Vorderseite]] des PCBs&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://www.heise.de/hardware-hacks/artikel/SMD-Loeten-in-der-Pizzapfanne-1276166.html SMD Löten mit einfachen Mittel&lt;br /&gt;
* http://www.reichelt.de Dort gibt es fast alle Bauteile&lt;br /&gt;
* http://shop.lipopower.de/1050-mAh-Einzelzelle-1C-30mm Der LiPo meiner Wahl&lt;br /&gt;
* http://www.schnepp-neudenau.de/img/katalog.pdf Die lötbare Messspitze&lt;br /&gt;
* http://www.fischer-leiterplatten.de Der PCB Macher&lt;br /&gt;
&lt;br /&gt;
Die Platine kann zum Selbstkostenpreis von 7,- EUR bei mir bezogen werden (so lange der Mustervorrat reicht).&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:AVR-Projekte| ]]&lt;br /&gt;
[[Category:Projekte| ]]&lt;/div&gt;</summary>
		<author><name>Bullar</name></author>
	</entry>
</feed>