<?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=Jojocp</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=Jojocp"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/Jojocp"/>
	<updated>2026-04-15T10:08:11Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Reichelt-Wishlist&amp;diff=86427</id>
		<title>Reichelt-Wishlist</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Reichelt-Wishlist&amp;diff=86427"/>
		<updated>2015-01-02T10:53:55Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: /* Auswahl, Bestellung und Versand */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Reichelt Wunschliste =&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite können Wünsche zur Erweiterung des Reichelt-Lieferprogramms eingetragen werden. Es ist keine offizielle Wunschliste von Reichelt und es ist nicht bekannt, ob Reichelt-Mitarbeiter diese Seite regelmäßig sichten. Reichelt sollte sicherheitshalber regelmäßig angeschrieben werden, damit diese Liste nicht in Vergessenheit gerät.&lt;br /&gt;
&lt;br /&gt;
Damit sich die beliebtesten Artikel herauskristallisieren, macht jeder einfach &#039;&#039;&#039;einen&#039;&#039;&#039; virtuellen Strich dahinter: | (Windows: ALT-GR Taste und &amp;lt; Taste drücken, Mac OS X: Alt-Taste und 7 Taste drücken). Alle fünf Striche (|||||) bitte immer ein Leerzeichen einfügen. Blöcke von 50 Strichen werden regelmäßig gegen eingefärbte Kolonnen von Ausrufezeichen ausgetauscht, die den Reichelt-Mitarbeitern hoffentlich umso mehr auffallen ;)&lt;br /&gt;
&lt;br /&gt;
Neue Artikel einfügen darf und soll natürlich auch jeder - aber bitte die Liste vorher durchgehen (Tipp: Browser-Suchfunktion nutzen)! Einfach ganz viele Striche auf einmal hinter einem Artikel einzufügen ist zwecklos. Das erkennt man in der History und es gibt viele Leute, die diese Seite überwachen...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nicht sinnvoll&#039;&#039;&#039; ist etwas sehr exotisches, wie z.&amp;amp;nbsp;B. einen ganz bestimmten super schnellen AD-Wandler hier aufzulisten! Neue Artikel müssen sich für Reichelt ja auch rentieren und wirtschaftlich &amp;quot;an den Mann bringbar&amp;quot; sein. [Die Entscheidung, ob sich was rentiert und ob es exotisch ist, sollte man vielleicht Reichelt und den eventuellen späteren Strichle-Setzern überlassen, statt im Voraus die Schere im Kopf walten zu lassen.]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Wunschliste =&lt;br /&gt;
== Halbleiter ==&lt;br /&gt;
=== Controller, FPGA und CPLD ===&lt;br /&gt;
&lt;br /&gt;
* Ajile aj-100 (Java Real-Time Prozessor) ||||&lt;br /&gt;
* ALTERA CPLD EPM30xx - Familie |||&lt;br /&gt;
* ALTERA CPLD EPM70xx - Familie ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* ALTERA Cyclone2 - Familie ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* ALTERA Cyclone3 - Familie ||||| ||&lt;br /&gt;
* ALTERA Flex10K - Familie ||||&lt;br /&gt;
* ALTERA MAX-II (CPLDs) ||||| ||||| ||||| ||||&lt;br /&gt;
* ALTERA MAX-V CPLDs |&lt;br /&gt;
* ARM: Cortex M3 Nachfolger für die LPC2x&lt;br /&gt;
* Atmel AT89LP4052 PDIP ||||| ||||| ||||&lt;br /&gt;
* Atmel AT89S2051/4051 |||||&lt;br /&gt;
* Atmel AT90PWM3B (µC für Servosteuerungen und z.b. Motorsteuerungen) ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Atmel ATA6612/13 (LIN-Bus SoC) ||&lt;br /&gt;
* Atmel ATxmega192A3U-AUR |&lt;br /&gt;
* Atmel ATmega 16L und 32L in TQFP (wäre ATmega 16/32L8 TQ) ||||| ||&lt;br /&gt;
* Atmel ATmega16M1 in TQFP |||&lt;br /&gt;
* Atmel ATmega324P in TQFP und PDIP ||||| ||||| ||||| |&lt;br /&gt;
* Atmel ATmega324PV in TQFP und PDIP ||&lt;br /&gt;
* Atmel ATmega48P in TQFP und PDIP ||||&lt;br /&gt;
* Atmel ATmega644p(a) / ATmega1284p(a) in TQFP und PDIP ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Atmel ATtiny2313V in SO und PDIP ||||| |&lt;br /&gt;
* Atmel ATtiny1634 ||&lt;br /&gt;
* Atmel ATtiny261 (auch 461 und 861; bevorzugt DIP) ||||| ||||| ||||| ||| {{Gibt es bei reichelt bereits :) |FF0000}}&lt;br /&gt;
* Atmel ATtiny441 und ATtiny841 |&lt;br /&gt;
* Atmel AVR Controller mit Funkanbindung z.&amp;amp;nbsp;B. AT86RF230, AT86RF211, AT86RF401, dazu passende Quarze (evtl. SMD) 18,080 MHz (Crystek P/N 016758), Spulen 39nH. {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Atmel AVR mit USB: AT90USB82 und ATmega32u4 {{Reichelt50|FF0000}} ||||| ||&lt;br /&gt;
* Atmel AVR32 im TQFP ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Atmel Cortex M3 SAM3S im QFN/LQFP Gehäuse ||&lt;br /&gt;
* Atmel Dream Sound Synthesizer Chips, z.&amp;amp;nbsp;B. ATSAM3103 und ATSAM3308 ||||| ||||&lt;br /&gt;
* Axis Etrax 100LX Risc Processor (kostenloses Linux-System vorhanden) ||||| ||||&lt;br /&gt;
* Bessere Auswahl: statt MSP430F147, F148, F149 wenigstens einen mit DAC -&amp;gt; MSP430F16x&lt;br /&gt;
* CY7C68013A-56PVXC (Cypress EZ-USB FX2LP) ||||| |||&lt;br /&gt;
* Cypress PSoC Mikrocontroller ||||| ||||| ||||| ||&lt;br /&gt;
* Freescale DSP56F801 ||||&lt;br /&gt;
* Freescale HCS12 Controller ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Freescale MC9S08QD4 ||||&lt;br /&gt;
* Freescale MC9S08QEx |&lt;br /&gt;
* Freescale MC9S08QG8 (DIP 16) ||||| ||||| ||||| ||||&lt;br /&gt;
* Freescale Prozessoren (Coldfire) (16 + 32 Bit) ||||| ||&lt;br /&gt;
* Infineon XC866 ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Infineon xmc 2go |&lt;br /&gt;
* Infineon xmc 1100 in tssop gehäuse |&lt;br /&gt;
* Infineon Boot Kit XMC1100 |&lt;br /&gt;
* Lattice GAL 26V12 ||&lt;br /&gt;
* Lattice ispMACH 4032C / 4064C / 4128C |||||&lt;br /&gt;
* Luminarymicro Stellaris Serie (Cortex-M3) ||||| ||&lt;br /&gt;
* Maxim/Dallas DS89C450 |&lt;br /&gt;
* Mehr FPGAs (v.a aktuellere) von Xilinx, z.&amp;amp;nbsp;B. Spartan III , ALTERA CYCLONE II (v.a. auch größere Typen, die noch im TQFP-Gehäuse zu haben sind wie z.&amp;amp;nbsp;B. XC3S400 oder XC3S500E (PQFP208)) {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}{{Reichelt50|0000FF}}{{Reichelt50|00FFFF}}||||| ||||| | ||||| ||||| ||||| |&lt;br /&gt;
* Microchip dsPIC33FJ128GP802 |||||&lt;br /&gt;
* Microchip PIC12F1822 |&lt;br /&gt;
* Microchip PIC24HJ64GP202-I/SP |&lt;br /&gt;
* NXP LPC1114 (auch in DIP verfügbar!) ||||| ||||&lt;br /&gt;
* NXP LPC1313 |||||&lt;br /&gt;
* NXP LPC1343 ||&lt;br /&gt;
* NXP LPC1751 |||&lt;br /&gt;
* NXP LPC1754 ||||&lt;br /&gt;
* NXP LPC214x-Serie ARM7-Controller ||||| ||||| |||||&lt;br /&gt;
* NXP LPC23xx/24xx ||||| ||&lt;br /&gt;
* NXP SAA5281 Videotextinterface ||||| ||||&lt;br /&gt;
* Parallax Propeller CPU, 8 Cogs - DIP 40 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* PICAXE von Revolution Education Ltd ||&lt;br /&gt;
* Renesas M16C ||||| ||||&lt;br /&gt;
* Silabs C8051F320 USB Mikrocontroller ||&lt;br /&gt;
* Silabs C8051F340 USB Mikrocontroller ||&lt;br /&gt;
* Silabs Si4735 im SSOP-Gehäuse (AM/FM-Empfänger) ||||&lt;br /&gt;
* SSV DIL/NetPCs [http://www.dilnetpc.com]http://www.dilnetpc.com ||||| ||||| ||||&lt;br /&gt;
* ST ST7MC... (µC für Servosteuerungen, und vor allem Brushless-Motoren) |||||  ||||| |&lt;br /&gt;
* QFP Bausteine der STM32F4 Serie (Cortex-M4)&lt;br /&gt;
* ST STR7 Serie (ARM7TDMI) ||&lt;br /&gt;
* TI MSP430F167, TI MSP430F168 ||||&lt;br /&gt;
* TI MSP430F2001/2/3 etc. im RSA-Gehäuse (=QFN) ||||| ||&lt;br /&gt;
* TI MSP430F2618 |||&lt;br /&gt;
* TI MSP430FG4618 |&lt;br /&gt;
* TI MSP430G2553IN20 viele MSP430 Gs im DIP-Gehäuse für Launchpad-Besitzer ||&lt;br /&gt;
* TI TMS470 Arm7 ||||| ||||| ||||| ||||| |&lt;br /&gt;
* TI TUSB3210 ||||| ||&lt;br /&gt;
* Ubicom SX20 SX28 IP2022 ||&lt;br /&gt;
* Western Design Center 65c816 |||&lt;br /&gt;
* XC3S 400 TQ144 |||&lt;br /&gt;
* Zilog Z8 Encore-Microcontroller (bis 64k Flash, I²C, SPI, 2xUART, ADC, on-Chip Debugger ...) [http://www.zilog.com/products/family.asp?fam=225]www.zilog.com ||||| ||&lt;br /&gt;
* Zilog ZNEO-Microcontroller (Z16Fxxx, bis 128k Flash, 4k RAM, bis zu 76 I/Os, 3 Timer, 10-bit A/D, externer Daten-/Adressbus, on-Chip Debugger) [http://www.zilog.com/products/family.asp?fam=236] www.zilog.com |&lt;br /&gt;
* Upgrade der XMEGA auf die XMEGA U Serie (zb ATXMEGA 64A1 -&amp;gt; ATXMEGA 64A1U)&lt;br /&gt;
&lt;br /&gt;
=== Speicher ===&lt;br /&gt;
&lt;br /&gt;
* 24LC256 oder 24AA256 oder 24LC512 oder 24AA512 ||||| |||||&lt;br /&gt;
* 24AA02E48 (EEPROM mit einprogrammierter MAC-Adresse) ||&lt;br /&gt;
* 3.3V async SRAM ab 16KByte ||||| |||&lt;br /&gt;
* 3.3V DRAM ||||| ||&lt;br /&gt;
* EEPROM mit SPI Schnittstelle 25XX Serien ||||| ||||&lt;br /&gt;
* F-RAM mit SPI von RAMTRON ||||| |||||&lt;br /&gt;
* FM25L16 o. FM25L256 SPI-FRAM ||&lt;br /&gt;
* FPGA Konfigurations-EEPROMS AT17LV256, AT17C65/128/256.../XCF04S/... ||||| ||||| ||||| |||||&lt;br /&gt;
* NexFlash spiFlash NX25P16 (16MBit serial Flash im SO8-Gehäuse) ||||| ||||| ||||| |||&lt;br /&gt;
* RAMs (SRAM oder DRAM) mit ordentlicher Kapazität (z.&amp;amp;nbsp;B. HY57V641620HG oder besser) ||||| ||||| ||||| |||||&lt;br /&gt;
* Schnelles statisches RAM 128kB (10, 12, 15 oder 20ns, z.&amp;amp;nbsp;B. Samsung K6R1008C1D-UI10 oder CY7C1019D-10ZSXI) (5V/3,3V) {{Reichelt50|FF0000}}||||| ||||| |||||&lt;br /&gt;
* Serielle SRAMs (Microchip 23K256) ||&lt;br /&gt;
&lt;br /&gt;
=== Einzeltransistoren, Op-Amps, MOSFET-Treiber ===&lt;br /&gt;
&lt;br /&gt;
* OPA134, OPA2134, OPA4134 low noise audio OpAmps ||&lt;br /&gt;
* 2SC1971 Transistor mit hoher Frequenz und viel Leistung für Endstufen ||&lt;br /&gt;
* AD623 Single Supply,Rail-Rail, InstrOpamp ||||| |&lt;br /&gt;
* AD628 InstrOpAmp, high voltage inputs |&lt;br /&gt;
* AD8601 Rail to Rail Opamp |&lt;br /&gt;
* BF556 (SMD-Version vom BF256) |&lt;br /&gt;
* BSH205 P-Channel 1.5V(GS), 0.75A, 12V D-S |||&lt;br /&gt;
* BUF420AW Schaltnetzteil Transistor von STM |||||&lt;br /&gt;
* Digitaltransistoren (BCR*), auch als Pärchen NPN/PNP (BCR10, BCR08pn) ||||| ||||&lt;br /&gt;
* IPS5451S intelligenter Leistungsschalter 50 V, 35 A, 25 mΩ |&lt;br /&gt;
* IPW60R045CS Infineon MOSFET 600V 45mOhm Rdson 30ns tr+tf (niedrigster Rdson in der Klasse) |&lt;br /&gt;
* High Side Driver, 8-fach, z.B. AMIS−39101 (350 mA, 3Ω, SPI) |&lt;br /&gt;
* IR2011 MOSFET Treiber |||&lt;br /&gt;
* IR21844 DIL (High-Speed IGBT-Driver) |||&lt;br /&gt;
* IR3313 o.ä. Intelligenter Leistungsschalter 32V/90A, einstellbare Strombegrenzung |||&lt;br /&gt;
* IRF7503/IRF7506 Dual MOSFET SMD ||||| |||||&lt;br /&gt;
* IRFI4212H-117P Doppel-MOSFET (f. Klasse D-Verstärker) |&lt;br /&gt;
* Leistungs-OP LM675 von National ||&lt;br /&gt;
* LM397, LM321 o.ä. single op-amp in SOT23-5 5-30V supply {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* MAX4420 MOSFET Driver ||&lt;br /&gt;
* MAX4429 MOSFET Driver ||&lt;br /&gt;
* MC 34152 D-SMD SO8 Dual MOSFET Driver |&lt;br /&gt;
* Mehr FET-Treiber (TI UCC3372x, HIPxxx , die neueren Brückentreiber von Maxim ||||| |||&lt;br /&gt;
* mehr FETs und IGBTs (nicht nur IRF, sehr gut IXYS &amp;lt;- und sauteuer!) ||||| ||||&lt;br /&gt;
* MJD31C NPN Transistor SMD DPAK 3&lt;br /&gt;
* Philips PDTD113E/123E und PDTB113E/123E (PNP und NPN im sot23 mit internen Widerständen für Basis und PullUp/Down ||&lt;br /&gt;
* Schnellere und gleichzeitig günstige OpAmps; Beispiel AD8055 ||&lt;br /&gt;
* Si4562DY N- and P-Channel 2.5-V (G-S) MOSFET SMD ||||| ||||| ||&lt;br /&gt;
* SPP20N60C3 Infineon MOSFET 600V 190mOhm Rdson &amp;lt;10ns tr+tf (Schnellste Schaltzeit in der Klasse) ||||| |&lt;br /&gt;
* TLC2264 (Quad Rail-to-Rail Operational Amplifier) |||&lt;br /&gt;
* TLV2782 (1,8V Rail-to-Rail OP) &#039;&#039;&#039;unklar: War &amp;quot;TLV27(2&amp;quot;&#039;&#039;&#039; |||||&lt;br /&gt;
* TLC3702 Komparator ||&lt;br /&gt;
* TLV2382ID Rail-Rail-OP von TI ||&lt;br /&gt;
* Sehr schnelle Op-Amps wie LMH6733 o.a in single und trible ||&lt;br /&gt;
&lt;br /&gt;
=== Schaltregler (Buck, Boost, DC/DC,...) ===&lt;br /&gt;
&lt;br /&gt;
* 5,2V Lowdrop Längsregler LF52 im TO252AA von STM |||||&lt;br /&gt;
* Größere Auswahl an Step-up Reglern ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* L4941 Spannungsregler 5V/1A in SMD-Ausführung (DPAK) ||||| ||||| |&lt;br /&gt;
* L5970 o. L5972 1 bzw. 2A, 250kHz Schaltregler im SO8 |&lt;br /&gt;
* L5973D 2,5A, 250kHz, Schaltregler im SO8 (ca. 1€) |||||&lt;br /&gt;
* LF50ABDT Spannungsregler SMD DPAK 5.0V very low drop |&lt;br /&gt;
* LM1084-ADJ (low dropout voltage positive regulator) |&lt;br /&gt;
* LM1117 (low dropout voltage regulator) - 1,8V |||&lt;br /&gt;
* LM1117MPX-1.8 und LM1117MPX-3.3 (SMD-Spannungsregler SOT-223) ||||| ||||| ||||| |&lt;br /&gt;
* LM2734 Schaltregler |||||&lt;br /&gt;
* LM317EMP oder LM317AEMP SMD-Spannungsregler einstellbar (SMD TO-223 Gehäuse) ||||| ||||| ||||&lt;br /&gt;
* Maxim MAX629, MAX1795, MAX1703 (Aufwärtsregler / Step-Up-Konverter) ||||| ||||| |||||&lt;br /&gt;
* MAX859CSA |&lt;br /&gt;
* MAX 8865 Dual, Low-Dropout, 100mA Linear Regulator |&lt;br /&gt;
* MC78LCxx Serie - Ultra Low Drop Spannungsregler 3-5 Volt mit 1 Mikro-Ampere Ruhestrom ||||| ||&lt;br /&gt;
* MIC29300/29301 Spannungsregler 5,0V 3A im TO263(SMD) Gehäuse ||&lt;br /&gt;
* NCP3063: 1.5 A, BUCK _&amp;amp;_ BOOST Inverting Switching Regulator DIP8/SOIC8 (MC34063 upgrade) (0,32$) |&lt;br /&gt;
* R-523.3PA Schaltregler 4V - 18V Eingang, variabler Ausgang (Nominalspannung 3.3 V) mit nur 2-4 externen Bauteilen bei &amp;gt; 90% Effizienz &lt;br /&gt;
* R-723.3P Schaltregler 4V - 28V Eingang, variabler Ausgang (Nominalspannung 3.3 V) mit nur 2-4 externen Bauteilen bei &amp;gt; 90% Effizienz |&lt;br /&gt;
* R-783.3-0.5 Schaltregler 4,75V - ca. 18V Eingang; 3,3V Ausgang (Hersteller Recom) ||||| ||||&lt;br /&gt;
* R-785.0-0.5 Schaltregler 6,5V - 30V Eingang; 5,0V Ausgang (Hersteller Recom) ||||| |||&lt;br /&gt;
* R-785.0-1.0 Schaltregler, Ausgang 5,0V, 1A ||||&lt;br /&gt;
* ST1S10 günstiger &amp;quot;Monolithic synchronous step-down regulator&amp;quot; bis zu 3A Ausgang ||||| &lt;br /&gt;
* TI TPS61070 3.3V-75mA-aus-einer-NiMH-Zelle (+ passende SMD-Induktivität) |&lt;br /&gt;
* ViPER Schaltregler von ST ||&lt;br /&gt;
* ViPER 12A |&lt;br /&gt;
* LM3578 sehr universeller, weil in allen Konfigurationen einsetzbarer Schaltregler (DIP8) von NS mit 1.25V Vref |&lt;br /&gt;
* LTC4089 USB Power Manager with High Voltage Switching Charger |&lt;br /&gt;
* IS31LT3360 40V/1.2A LED DRIVER um 1€ |||&lt;br /&gt;
&lt;br /&gt;
=== Konstantstromquellen (LED, Akkus) ===&lt;br /&gt;
&lt;br /&gt;
* CCS-Akkulade-IC (z.&amp;amp;nbsp;B. CCS9620SL) (siehe [[http://bticcs.com/]]) ||||||&lt;br /&gt;
* HV9910 Schaltregler für die Hochleistungs-LEDs Ub=8-450V; I beliebig; Eff. besser 90% ||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* LM340x High Power LED-Treiber von National ||||&lt;br /&gt;
* LTC3490 (350mA-Konstantstromquelle) ||||| ||||| |&lt;br /&gt;
* Max1555 - LiPo Lade IC ||||| |&lt;br /&gt;
* MAX7313 16 LED-PWM-Dimmer (Im Gegensatz zu den Philips-ICs ist jede einzelne LED-Dimmbar, dafür nur in 16 Schritten) ||||| ||||| |&lt;br /&gt;
* PCA9685 16Kanal 12Bit PWM LED Controller ||||| ||||| |&lt;br /&gt;
* STP08CL596B1 DIP16 STM, LOW VOLTAGE 8-BIT CONSTANT CURRENT LED SINK DRIVER ||&lt;br /&gt;
* STP08CL596M SO16 STM, LOW VOLTAGE 8-BIT CONSTANT CURRENT LED SINK DRIVER ||||&lt;br /&gt;
* STP16CL596B1R DIP24 STM, LOW VOLTAGE 16-BIT CONSTANT CURRENT LED SINK DRIVER ||&lt;br /&gt;
* STP16CL596M SO24 STM, LOW VOLTAGE 8-BIT CONSTANT CURRENT LED SINK DRIVER |||&lt;br /&gt;
* TLC5940 16 Kanal PWM LED-Treiber ||||| ||||| ||||| &lt;br /&gt;
* UDN 2987 LW (Source Driver UDN298 SMD-Bauform) ||&lt;br /&gt;
* Holtek HT16K33 8*16-LED-Controller |&lt;br /&gt;
&lt;br /&gt;
=== Ethernet, I²C (2Wire), SPI und andere Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* AMIS−39101: Siehe [http://www.mikrocontroller.net/articles/Reichelt-Wishlist#Einzeltransistoren.2C_Op-Amps.2C_MOSFET-Treiber MOSFET-Treiber]&lt;br /&gt;
* CLC020 und CLC021 (National Semiconductor) Parallel Component nach SDI-Converter |||||&lt;br /&gt;
* CP2120 single-chip SPI to I2C bridge and GPIO port expander |&lt;br /&gt;
* CS8900A Ethernet-Controller ||||| |||&lt;br /&gt;
* CY7C67300 (Cypress) dual role USB controller mit OTG ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* DP83848C (Ethernet Physical Layer Transceiver/PHY, MII/RMII-Schnittstelle, passend zu AT91SAM7X) |||&lt;br /&gt;
* Ethernet Magnetics (Auch POE) ||||| |||||&lt;br /&gt;
* Fast Ethernet-Controller (DE9000A/B/E, AX88796B, ...) |&lt;br /&gt;
* FTDI High Speed Chips, z.&amp;amp;nbsp;B. FT2232H (USB - UART/FIFO IC)||||| |&lt;br /&gt;
* Generell mehr 1-Wire-ICs ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Generell mehr I²C-ICs {{Reichelt50|FF0000}}||||| ||||| ||||&lt;br /&gt;
* Generell mehr SPI IC ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* IP101 PHY von IC+ (Distri für DE [http://www.topas.de/tt/cfs/icp_cfs_mai05.htm Topas]) ||&lt;br /&gt;
* ISD 5116 (Sprachaufnahme bis 16min &amp;amp; I2C-Interface) ||||| ||||| ||||| |&lt;br /&gt;
* LTC1694-1 (I2C/SMBus Accelerator) ||||| |&lt;br /&gt;
* MAX6650 I²C-Lüftermonitor ||&lt;br /&gt;
* MAX6958 / MAX6959 (I²C 4-Digit, 9-Segment LED Display Drivers with Keyscan) ||||| ||||| ||&lt;br /&gt;
* MAX7311AWG 2Wire Interface von Maxim ||||||&lt;br /&gt;
* MCP23008 8Bit I2C I/O Expander |||&lt;br /&gt;
* MCP23S08 8BIT SPI I/O Expander |&lt;br /&gt;
* P82B86 (I2C Dual Bi-Directional Bus Buffer) ||&lt;br /&gt;
* Philips PCA82C252 oder TJA1054A oder vergleichbar (&amp;quot;Fault-Tolerant&amp;quot; CAN Transceiver, 11898-3) ||||| |||||&lt;br /&gt;
* Power over Ethernet Bausteine z.&amp;amp;nbsp;B. LM5070 |||&lt;br /&gt;
* RS485 isoliert: z.&amp;amp;nbsp;B. Burr-Brown ISO485 o.ä. ||||| |||&lt;br /&gt;
* sn65hvd230/231/232 (CAN-Transceiver) in SO8 |||&lt;br /&gt;
* TH3122 K-Line Interface von Melexis ||||| ||||&lt;br /&gt;
* TH8080 LIN Transceiver von Melexis (oder vergleichbare) ||&lt;br /&gt;
* TI ISO1050 (Isolierter CAN-Transceiver) ||||&lt;br /&gt;
* SC18IM700 o.ä. I2C to UART-Converter ||&lt;br /&gt;
* RS232 Pegelkonverter für 1,8V (gibt derzeit nichts unter 3,3V). z.B. LTC2803 oder MAX3218 |&lt;br /&gt;
&lt;br /&gt;
=== ADC, DAC und PWM ===&lt;br /&gt;
&lt;br /&gt;
* 16-bit A/D-Wandler (waren von Maxim schon im Programm, sind aber wieder herausgeflogen?) ||||| ||&lt;br /&gt;
* AD7524 8-Bit DAC in SMD ||||| ||||| ||||&lt;br /&gt;
* ADS8320  ADC 16 Bit seriell          ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* ADS8323Y ADC 16 Bit parallel 500kSPS |&lt;br /&gt;
* CS5641 von Cirrus...The CS5461 incl. two delta-sigma A/D converters.... ||&lt;br /&gt;
* D/A Wandler mit 4 oder mehr Ausgängen, z.&amp;amp;nbsp;B. TLC5620/TLV5629/AD5325 ||||| ||||| |||&lt;br /&gt;
* DAC7612 DAC 12 Bit seriell ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* DAC8830 IDT (16Bit-DAC,ser. Input) ||||| |&lt;br /&gt;
* Generell mehr DAC&#039;s (auch die teureren) von TI ||||| |&lt;br /&gt;
* Generell mehr I2C IC (ADC, DAC, DSP, u.a. Crystal, BurrBrown etc.) |||||&lt;br /&gt;
* Generell mehr PWM-SIC&#039;s |||||&lt;br /&gt;
* LTC 1655(L) N8 16 Bit DAC interne Ref 2.048/1.25V(L Type) SPI Interface ||&lt;br /&gt;
* LTC24xx (24-Bit Delta-Sigma ADC) ||||&lt;br /&gt;
* MAX127/128 8-Kanal 12bit ADC mit I2C-Interface |||&lt;br /&gt;
* MAX528 8-fach 8Bit DAC mit Output Buffer seriell |&lt;br /&gt;
* MCP4725A0 und MCP4725A1 D/A-Wandler 12 Bit I²C ||||&lt;br /&gt;
* Philips TDA1543 - 2x16-Bit DAC |&lt;br /&gt;
* TI PCM1804 Audio-ADC||||&lt;br /&gt;
* TI PCM2707 USB-Audio-DAC ||&lt;br /&gt;
* Video-AD-Wandler z.&amp;amp;nbsp;B. LTC2208 (16 Bit 130 MS/s) für FPGA und SDR |&lt;br /&gt;
* IR Class-D Amplifier IRS2092 (In D derzeit nirgends erhältlich!) |||&lt;br /&gt;
&lt;br /&gt;
=== Sensoren und Aktoren ===&lt;br /&gt;
&lt;br /&gt;
* 4Hz Supersense µblox LEA-4S GPS module (Importer pointis.de) + Passende Passives Patch antenna (zB. von inpaq.com) ||||| ||||&lt;br /&gt;
* Allegro Stromsensoren (z.&amp;amp;nbsp;B. ACS713, ACS756) ||||| ||||| ||||| ||&lt;br /&gt;
* Allgemein mehr Sensoren ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* AD8210YRZ Stromsensor |&lt;br /&gt;
* Anemometer ||||| ||&lt;br /&gt;
* BLDC-Motoren ||||&lt;br /&gt;
* Durchflussmesser (z.&amp;amp;nbsp;B. wie Conrad Nr.155374) ||||| ||||| ||||| |||&lt;br /&gt;
* Flexinol / Nitinol (Nickel-Titanium) / NanoMuscle Aktuatoren ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Freescale/Motorola Drucksensoren, besonders die gängigen aber noch fehlenden MPX4100AP, MPX4200AP, MPX4250AP mit der robusten Automotive Spezifikation und Stutzen für Schlauchanschluss = CASE 867B-04 ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* FSRs (Force Sensing Resistor) von Interlink Electronics ||||| ||||| ||||&lt;br /&gt;
* Getriebemotoren wie RB35 oder RB40 ||||| ||||| ||||| |&lt;br /&gt;
* günstige Temp. Sensoren TC77 ||||| ||||| ||||||&lt;br /&gt;
* Gyro Sensoren  MURATA,  ENC-03J A/B    ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Gyro, Drehwinkelgeber, Kreiselsensoren ähnl. Tokin CG-L43 {{Reichelt50|FF0000}} ||&lt;br /&gt;
* Hall-Sensor(analog) Allegro A1301, A1302 |&lt;br /&gt;
* Hall-Sensor UGN3503, KMZ51 ||||| ||||| ||||| |||&lt;br /&gt;
* Hall-Sensoren ähnlich TLE4905, aber mit Vcc 3,3V, z.&amp;amp;nbsp;B. CYD1102G (TLE 4905L Hallsensor, 3,8-24V ist lieferbar seit 20.12.11) ||   &lt;br /&gt;
* I²C-Bus Temperatursensor DS1631Z ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* iMEMs Acceleration Sensors ADXL Series von Analog Devices ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Induktions-Stromsensoren Coilcraft #J9199-A o.ä. ||||| |||&lt;br /&gt;
* IS471 Selbstmodulierende IR-Lichtschranke ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* kleine Feuchtigkeitssensoren zur &#039;on-board-Montage&#039; ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* LEM Stromsensoren (Transducer) der HAIS-Serie, speziell HAIS 50-P und 100-P ||||| ||||| ||||| ||||&lt;br /&gt;
* Luftdruck-/ Temperatur Sensor Intersema MS5534 (mit SPI- Interface) ||||| ||||&lt;br /&gt;
* Magnetfeld-Sensor (Kompass-Anwendung) KMZ52 ||||| ||||| |||&lt;br /&gt;
* Modellbau-Servos |||&lt;br /&gt;
* Piezo Minimotoren/Linearaktoren von Elliptec/Siemens einzeln und günstig ||||| |||||&lt;br /&gt;
* PIR Bewegungsmelder ||||&lt;br /&gt;
* QT160 6-fach Touch Sensor IC ||||| ||&lt;br /&gt;
* Sensirion SHT11/SHT71 (oder auch SHT15/SHT75) {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Summer mit 20mA@5V ähnlich Conrad Nr.751553 (TDB05 kann mit 30mA@5V nicht von allen Controllern direkt getrieben werden) ||||| ||||| |||||&lt;br /&gt;
* Temperatur IC TC1047 |||||&lt;br /&gt;
* Temperatursensor mit SPI-Interface LM74 ||||| |||&lt;br /&gt;
* Thermoelement Typ-K (MAX6675)/ Typ-J mit Steckverbinder und SPI ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Sensoren zur Umweltanalyse (Sauerstoffgehalt der Luft, pH-Wert, etc.) ||&lt;br /&gt;
&lt;br /&gt;
=== Funk und Signalsynthese ===&lt;br /&gt;
&lt;br /&gt;
* Clock generator IC&#039;s, z.&amp;amp;nbsp;B. PCK20?? von Philips |&lt;br /&gt;
* DDS-IC (Waveform-Generator) von Analog wie AD9833, AD9835 ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* EM4095 (RFID) |||||&lt;br /&gt;
* LMX2306/LMX2316/LMX2326 PLL Synthesizer von National ||||| ||&lt;br /&gt;
* LTC5540 (RF-Mixer) |&lt;br /&gt;
* PLL Schaltkreise für Frequenzerzeugung. z.&amp;amp;nbsp;B. MC / ML145170 (SOIC16) / TSA5060A ||||| ||||| ||||| |||||&lt;br /&gt;
* SI4735 Silicon Labs Radio ICs ||||| ||||| |&lt;br /&gt;
* TEA5757 FM-Tuner IC von Philips |||&lt;br /&gt;
* TEA5768HL FM-Tuner IC von Philips |||||&lt;br /&gt;
* TPS79318 1,8V 200mA LDO in (bestens für z.&amp;amp;nbsp;B. LPC210x µC) ||&lt;br /&gt;
&lt;br /&gt;
=== sonstige ===&lt;br /&gt;
* Schnelle Hochspannungsdioden (GP0240 GP02-40 4kv 0,25A 500ns) |&lt;br /&gt;
* 74ACTxxx |&lt;br /&gt;
* 74ASxxx |&lt;br /&gt;
* 74HCxxxx komplette Serie |||||&lt;br /&gt;
* 74HCT-Logik in SMD {{Reichelt50|FF0000}}||||| ||||| ||||| ||||&lt;br /&gt;
* 74VHC-Serie komplettieren (z.&amp;amp;nbsp;B. 74VHC125D) ||||| ||&lt;br /&gt;
* 74xx mehr Familien von Logik-ICs, z.&amp;amp;nbsp;B. AC, ACT, LVC (in SMD) ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* A3982 Motortreiber/Controller (1,5A, 2APeak, u.A. für RepRap&#039;s) ||&lt;br /&gt;
* Automotiv ICs z.&amp;amp;nbsp;B. LM1815, LM1915, LM1949, LM9011, LM9040, LM9044, LMD18400... ||||| |&lt;br /&gt;
* Bosch CJ125 (Lambdasonden-IC) ||||| |||||&lt;br /&gt;
* DS1616 von Dallas Datalogger-IC ||&lt;br /&gt;
* DTMF-Dekoder-Enkoder (8870, 8880) ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* High Side Current Sense ICs wie MAX4172,LT6105 ||||| ||&lt;br /&gt;
* IRS2092 Class-D Audio Driver IC |||&lt;br /&gt;
* ISD 2560 -&amp;gt; SOIC Gehäuse (Sprachaufnahme IC) ||||| |&lt;br /&gt;
* ITS4141N o. BTS4141N Smart High-Side Power Switch (z.&amp;amp;nbsp;B. bestens für 24V geeignet!) ||&lt;br /&gt;
* Kleinere SMD-Bauformen (bes. bei ICs) ||||| ||||| ||||| |||&lt;br /&gt;
* L6205 Motortreiber (2Kanal, 2,8A, DMOS)|||||&lt;br /&gt;
* L6206N Motortreiber (Wird für OpenDCC benötigt, und ist derzeit nur SEHR schlecht erhältlich) ||&lt;br /&gt;
* LMD18200 (H-Bridge) |&lt;br /&gt;
* LT3080 Linearregler 0V-36V 1.1A ||||&lt;br /&gt;
* LT3081 Linearregler 0V-36V 1.5A |&lt;br /&gt;
* LTC 4411 ideale Diode 2,6 bis 5,5V max. 2,6A im SOT-23 Gehäuse&lt;br /&gt;
* LTZ1000ACH#PBF Linear Technology Präzisions-Referenz (Ersatz für LM399H) |||||&lt;br /&gt;
* Maxim Switched Capacitor Tiefpass-Filter (z.&amp;amp;nbsp;B. MAX297, MAX7410) ||||| |&lt;br /&gt;
* mehr SMD Bauteile  {{Reichelt50|FF0000}} {{Reichelt50|00FF00}} ||||| ||&lt;br /&gt;
* MIC6315 von Micrel (3,3/5V Reset Baustein mit manual Reset) ||&lt;br /&gt;
* Motortreiber TLE 4205 ||||&lt;br /&gt;
* PGA2311 (Stereo Audio Volume Control) |&lt;br /&gt;
* PMEG2010AEB 20 V, 1 A ultra low VF Schottky Diode SOD523 |&lt;br /&gt;
* SDT06S60 Infineon SiC 600V 6A Silizium-Carbid Schottky-Diode (kein trr, daher keine Schaltverluste) ||||&lt;br /&gt;
* SMD Doppeldiode Schottky 12A 60V im TO252AA z.&amp;amp;nbsp;B. 12CWQ06FN von IOR ||||| ||||| ||||| ||&lt;br /&gt;
* SMD SM5817 Schottky |&lt;br /&gt;
* SMD MBRX120LF Schottky SOT-123 |&lt;br /&gt;
* Solenoid drivers TI DRV102T, DRV103U |&lt;br /&gt;
* TLV320AIC23B Audio-Codec ||&lt;br /&gt;
* TPIC6B595 (oder ähnliche 74xx595 high current (150 mA) shift register) |||||  ||||| |||&lt;br /&gt;
* uC supervisor chips + watchdog z.&amp;amp;nbsp;B.: MAX6864 ist z.Z. der beste (0.2uA!) ||||&lt;br /&gt;
* USB-Umschalter, z.B. FSUSB42MUX |&lt;br /&gt;
* VN808 Low Treshold Octal High Side Driver 0,7A ||&lt;br /&gt;
* VS1000 Ogg Decoder von VLSI |&lt;br /&gt;
* VS1053 MP3/AAC/WMA/Ogg Decoder von VLSI ||||| ||||| ||&lt;br /&gt;
* Zarlink MT8841 Calling Number Identification Circuit |&lt;br /&gt;
* ZHB6718 (H-Bridge für 1,5V - 20V Motoren) ||||| ||||&lt;br /&gt;
* ZRA250F005 Referenzspannungsquelle 2,5V 0.5% SOT23-Gehäuse ||||| ||||| ||&lt;br /&gt;
* TXB0108 8-Bit Bidirectional Voltage-Level Translator with Auto Direction Sensing |&lt;br /&gt;
* 579-MCP6S91-E/P (Sonderverstärker 1-Ch. 10 MHz SPI PGA) |&lt;br /&gt;
* 579-MCP6292-E/SN (Operationsverstärker Dual 10MHz ) |&lt;br /&gt;
* 926-LMH6642MAX/NOPB (Operationsverstärker Lo Pwr 130MHz 75mA RR Output Amp) |&lt;br /&gt;
&lt;br /&gt;
== Baugruppen ==&lt;br /&gt;
&lt;br /&gt;
* Atmel ATNGW100 von [http://www.atmel.com/dyn/corporate/view_detail.asp?FileName=AVR32NGKit_3_26.html Atmel] = billiges Linux Board ($69=51.69€) --&amp;gt; [http://www.avrfreaks.net/wiki/index.php/Documentation:NGW/NGW100_Hardware_reference Dokumentation] ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Atmel ATSTK1000 von [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3918 Atmel] ||||| ||||| ||||| ||||&lt;br /&gt;
* Axis Etrax 100LX MCM (Multi Chip Module) A full Linux computer on a single chip!  ||||| |||||&lt;br /&gt;
* Bluetooth Funkmodul {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}||||| ||&lt;br /&gt;
* Bluetooth Mini-Module (RS232-Bluetooth-&amp;quot;Wandler&amp;quot;-Platinchen) z.&amp;amp;nbsp;B. BTM222 ||||| |||||&lt;br /&gt;
* CentiPad/DevKit Embedded Linux Modul ([http://www.centipad.de www.centipad.com]) ||||| ||&lt;br /&gt;
* DS9490R USB zu 1-Wire Dongle (auch mit Linux Treiber) ||||| |||||&lt;br /&gt;
* Easy-Radio Module zur seriellen Datenübertragung (ER400 RS/TS/RTS) ||||| ||||| ||||| ||||&lt;br /&gt;
* Foxboard = Betriebsfertiges Micro Linux System mit Axis Etrax 100LX MCM 66mm x 72mm ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* FoxVHDL = FPGA Erweiterungskarte für das ACME Foxboard ||||&lt;br /&gt;
* FPGA, low-cost Experimentierplatinen ||||| ||||| ||||| ||||| |||| &lt;br /&gt;
* Hope RF Module 433 u. 868 MHz, http://www.hoperf.com/pdf/RF12.pdf ||||| ||||| ||&lt;br /&gt;
* Hope RF Module 2,4GHz, RFM70 ||||| |&lt;br /&gt;
* kostengünstige Funkempfänger/Funksender 433 &amp;amp; 868 Mhz ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* kostengünstige Funkschaltmodule (TLP/RLP) ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Lantronix XPort Direct |||&lt;br /&gt;
* Lantronix XPort Embedded Device Server ([http://www.lantronix.com www.lantronix.com]) ||||| ||||| ||&lt;br /&gt;
* Microchip PICkit 2 ||||| ||||&lt;br /&gt;
* Microchip PICkit 2 (PG164120) ohne Demoplatine ||&lt;br /&gt;
* Mini-WLAN Module (RS232 zu WLAN) ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* MT1390 FM Tuner-Modul von Microtune |||&lt;br /&gt;
* NetDCU8 von F &amp;amp; S Elektronik Systeme GmbH (http://www.fs-net.de) - Linux-Computerplatine mit 400MHz Samsung-ARM mit 32MB RAM, 16MB Flash und SD/Ethernet/CAN/USB/TFT/RS232 für ca. 100 Euro ||||| ||||| ||&lt;br /&gt;
* ODROID-Produkpalette (besserer Raspberry Pi -Clone aus Korea) -&amp;gt; http://www.hardkernel.com ). Bislang nur bei Pollin. |&lt;br /&gt;
* OM5610 FM Tuner-Matchbox von Philips |||&lt;br /&gt;
* ST Primer 2 (Experimentierboard fuer ARM Einsteiger) ||&lt;br /&gt;
* STM STM3210C-EVAL für &amp;lt;=214,79€ netto (wie bei Future Elektronik, Stand 18.3.2011) |&lt;br /&gt;
* TI - MSP430 Wireless Development Tool (AEC13895U) |&lt;br /&gt;
&lt;br /&gt;
== Passive Bauteile ==&lt;br /&gt;
&lt;br /&gt;
=== Spulen und Trafos ===&lt;br /&gt;
&lt;br /&gt;
* Die Micrometals Pulverkerne (-18 und -26) auch in größer ||||| ||&lt;br /&gt;
* Fastron 0805 AS Serie vervollständigen ||&lt;br /&gt;
* Funk-Entstördrosseln 16A, div. Werte ||||| ||||| ||||| |||&lt;br /&gt;
* Funk-Entstördrosseln 330µH / 3A |&lt;br /&gt;
* Funk-Entstördrosseln 47µH |||&lt;br /&gt;
* Magnetics CoolMu Ringkerne ||||| ||||| ||&lt;br /&gt;
* Magnetics MPP Ringkerne ||||| ||||| ||&lt;br /&gt;
* Ordentliche Trafospulen + Kerne, z.b. ETD-Serie, oder RM10 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Passende Ferrite dazu: N27,N41,N67,N87,N97 ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Ringkertrafos &amp;gt;500VA mit höherer Spannung als 30V (Verstärkerbau) ||||&lt;br /&gt;
* SEPIC-Speicherdrosseln von Würth WE-DD (Größe M u. L) ||||&lt;br /&gt;
* Übertrager für Schaltregler z.&amp;amp;nbsp;B. Epcos Typ  B78304 ||||| |||||&lt;br /&gt;
* Würth Induktivitäten ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Würth Sortimentskästen Induktivitäten ||||| |&lt;br /&gt;
&lt;br /&gt;
=== Kondensatoren ===&lt;br /&gt;
&lt;br /&gt;
* Axiale Kondensatoren als Blockkondensator unter DIP-Sockeln, z.B. &amp;quot;C410C104M5U5TA7200&amp;quot; ||&lt;br /&gt;
* Drehkondensatoren 20-500pf ||||| ||||| |||||&lt;br /&gt;
* Günstige hochkapazitive Doppelschichtkondensatoren (z.&amp;amp;nbsp;B. Maxfarad MES2245 220F 2,3V) ||||| |||&lt;br /&gt;
* Keramikkondensatoren SMD 0603/0805/1206: mehr Zwischenwerte (56p, 82p, 560p) ||||| ||||&lt;br /&gt;
* Kleine Niedervolt-Polyproplyenkondis mit mehr Kapazität ||||&lt;br /&gt;
* Low-ESR Elkos (definiertes Fabrikat/Typ, und nicht einfach irgendwelche! (Rubycon?)) {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Low-ESR Elkos RM 3,5mm 1.000µF 6,3V (Mainboardaustausch Elko) |||||     &lt;br /&gt;
* Low-ESR SMD Tantal-Elkos (definiertes Fabrikat/Typ, und nicht einfach irgendwelche! (AVX?, Epcos?)) ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Radiale Elkos für 400V |&lt;br /&gt;
* Radiale Elkos 63V/2200µF |&lt;br /&gt;
* Sanyo OS-Con bedrahtet und SMD |||&lt;br /&gt;
* Wima FKP02 ||&lt;br /&gt;
* Wima FKP2 ||&lt;br /&gt;
* Wima MKP3-X2 (~275V, klein und ideal für Kondensatornetzteile) |||&lt;br /&gt;
* Wima MKP4 ||||| |&lt;br /&gt;
* SMD-Keramik/HF in 0402 |&lt;br /&gt;
* Bipolare Elkos bis ca. 100µF ||&lt;br /&gt;
* Impulskondensatoren mit hoher Spannungsfestigkeit von mehr als 2000v |&lt;br /&gt;
&lt;br /&gt;
=== Widerstände und Potis ===&lt;br /&gt;
* Shunt ( ISABELLENHÜTTE ) PBV 5mOhm ||&lt;br /&gt;
* Shunt ( ISABELLENHÜTTE ) BVE 2mOhm ||&lt;br /&gt;
* 25/50/100W Hochlast-Widerstände (~20/50Ω auch weniger) ||||| ||||| ||||| ||||&lt;br /&gt;
* Digitalpoti AD5160 mit SPI in SOT23 ||&lt;br /&gt;
* Digital-Potentiometer (z.&amp;amp;nbsp;B. 2-Wire MAX546x, AD526x, X9C10x) ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Durchsteck-Widerstände in kleiner Bauform 0204. ||||| ||||| ||||&lt;br /&gt;
* Endlospotis als Motorgeber ||&lt;br /&gt;
* Erneut die 10k-Ohm SMD-Potis |||||&lt;br /&gt;
* Größere Auswahl an (Stereo-)Schiebepotis in log und lin, insbesondere jenseits 100K |||&lt;br /&gt;
* Hochlast NTC, z.&amp;amp;nbsp;B. 80-220Ω/1-4A (EPCOS, Ametherm) ||&lt;br /&gt;
* Hochspannungs-Widerstände (z.&amp;amp;nbsp;B. 330M/10kV) |||&lt;br /&gt;
* iPod-Wheel z.B. QT511-ISSG  ||||| ||||| |||||&lt;br /&gt;
* Kleine Ein-Gang-Trimmer unterhalb 250Ω |&lt;br /&gt;
* Leitplastikpotis im Servogehäuse |&lt;br /&gt;
* Linear- und 360° Soft-Pots (iPod-Wheel) wie von spectrasymbol ||||| |||&lt;br /&gt;
* Niederohm-Widerstände (Shunts ab 1mOhm im guten Gehäuse z.&amp;amp;nbsp;B. TO220) ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Null-Ohm Widerstände (Drahtbrücken) Baugröße wie 1/4W ||||| ||||| |||||&lt;br /&gt;
* Präzisions-Spannungsteilernetzwerke ||||| ||||| ||&lt;br /&gt;
* Präzisionsspannungsteiler 1:10, 1:100, 1:1000 (10MOhm Gesamtwiderstand) |||&lt;br /&gt;
* Präzisionswiderstände 0,05% und besser, ev. drahtgewickelt ||||| ||||| ||||| ||||&lt;br /&gt;
* R2R-Widerstandsnetzwerke (z. B. 10/20kOhm für DA-Wandler an Microcontrollern) ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* SMD-Präzisionswiderstände (0,1% TC10ppm/K =&amp;gt;0,1W indukt.arm) ||||| ||||| ||||| ||||&lt;br /&gt;
* SMD-Widerstände 0805 auch aus der E24-Reihe ||||| ||||| ||||| ||||| |&lt;br /&gt;
* SMD-Widerstände 0805 und 1206 auch unterhalb von 1Ω ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* SMD-Widerstände unterhalb 1Ω, andere Gehäuse als 0805/1206 (leichter erfüllbarer Wunsch) ||||| ||||| ||||| ||||&lt;br /&gt;
* statt Radiohm-Potis bitte Prehostat oder Alphastat 16 63256-026xx ||||| ||||| ||||| ||&lt;br /&gt;
* Widerstände &amp;gt; 10MOhm (möglichst bis 100GOhm) |||||&lt;br /&gt;
* Widerstandsnetzwerke 11-Pin (für 10er Bargraphanzeige) ||||&lt;br /&gt;
&lt;br /&gt;
=== Quarze, Quarzoszillatoren und Resonatoren ===&lt;br /&gt;
&lt;br /&gt;
* 13,5600 MHz Quarz (benötigt für RFID) (SMD+bedrahtet)  ||||| ||||| ||||| ||||&lt;br /&gt;
* 24,0000 MHz Standardquarz Grundton (&#039;&#039;&#039;kein 3. Oberton!!!&#039;&#039;&#039;), benötigt für USB-DMX-Interface (SMD-Grundtonquarz unter 24,0000-MA505 verfügbar) ||||| ||||| |&lt;br /&gt;
* 25,0000 MHz &#039;&#039;&#039;Grundton&#039;&#039;&#039;-Quarz, wird benötigt für Microchip TCP/IP Controller ENC28J60) {{Reichelt50|FF0000}}{{Reichelt50|00FF00}} ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||  (inzwischen als Keramik-SMD-Quarze 25,000000-MJ, 25,000000-MQ, 25,000000-MT, 25,000000-X22, also div. Groessen, verfügbar)&lt;br /&gt;
* Allgemein mehr Grundtonquarze bei höheren Frequenzen ||||| |&lt;br /&gt;
* Murata Keramik-Resonator CSTLS16M0X, CSTLS20M0X (obwohl 3. OW, direkt mit µC verwendbar) |&lt;br /&gt;
* Quarze 6,500000 MHz (HF-Anwendung) ||&lt;br /&gt;
* Quarze 32 MHz 10ppm Oscillatorfrequenz 0 bis +70°C |&lt;br /&gt;
* Quarz mit 3,200 MHz  ||&lt;br /&gt;
* Quarzoszillator 9,8304 MHz  |||&lt;br /&gt;
* SMD Quarze/ Oszillatoren in flachen, kleinen SMD Gehäusen (SMX-A/-B) |||||&lt;br /&gt;
* SMD-Quarze mit Standardgehäuse (z.&amp;amp;nbsp;B. HC49/US &amp;amp; HC49/UP) ||||| ||||&lt;br /&gt;
* 32,768 kHz Quarz mit 12,5 pF ||&lt;br /&gt;
* SMD Oszillator CFPS-72 16 MHz, für AVR-Anwendungen |&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges ===&lt;br /&gt;
&lt;br /&gt;
* Lötfähige (SMD-) Kühlkörper (Fischer) ||||| ||||| ||||| |||&lt;br /&gt;
* Metallbrückengleichrichter für 50A |||||&lt;br /&gt;
* Netzfilter FFP Reihe Schurter ||&lt;br /&gt;
* Suppressordioden mit Spannungsbereich zwischen 15V und 30V |||&lt;br /&gt;
* Übertrager FB2022 oder 20F-001N (passend zu RTL8019AS)||&lt;br /&gt;
* Übertrager passend zu ENC28J60 |&lt;br /&gt;
* Varistoren 14V auch als bedrahtetes Bauteil (für KFZ-Bordnetz)-&amp;gt; 1,5KE 18CA ||||| ||||| ||&lt;br /&gt;
* ESD Schutzdiodenarray für CAN, USB,... z.B. PESD2CAN ||&lt;br /&gt;
&lt;br /&gt;
== HF-Baumaterialien ==&lt;br /&gt;
&lt;br /&gt;
* HF Übertrager/Balun´s ala TC1-1-13m+ (möglichst Breitbandig) |&lt;br /&gt;
* Durchführungskondensatoren 1nF/160V (waren Ende &#039;06 noch im Programm) |||||&lt;br /&gt;
* Filter SFE10.7MA19 360khz SZP2026 |&lt;br /&gt;
* H155 (HF-Kabel) ||||| |&lt;br /&gt;
* HF-Litze(n) |&lt;br /&gt;
* Keramik / Teflon Leiterplatinen |&lt;br /&gt;
* Keramische Filter CFM455... ganzes Sortiment |||||&lt;br /&gt;
* MC68160FB&lt;br /&gt;
* MC68EN302PV20&lt;br /&gt;
* MICRF002/022, MICRF102/103 von Micrel  ||||| |&lt;br /&gt;
* MMICs und Ringmischer von Mini-Circuits |&lt;br /&gt;
* UPC1678 / SGA-3286 (UHF MMICs) | &lt;br /&gt;
* PLL ICs z.&amp;amp;nbsp;B. von NXP und National für HF-UHF ||&lt;br /&gt;
* S3C4510B&lt;br /&gt;
* Transistoren MRFG35010 |&lt;br /&gt;
* U.FL bzw. IPEX Steckbuchsen zum Selbstkonfektionieren von HF-Kabeln ||&lt;br /&gt;
* ZF-Quarzfilter für versch. Frequenzen (10, 20, 40 MHz) ||&lt;br /&gt;
* Zirkulatoren ALD4302SB statt LM239 &lt;br /&gt;
* µP Compatible CTCSS Encoder,Decoder FX 365&lt;br /&gt;
&lt;br /&gt;
== Optoelektronik und Leuchtmittel ==&lt;br /&gt;
&lt;br /&gt;
=== Einzel-LEDs ===&lt;br /&gt;
&lt;br /&gt;
* DycoLeds (SMD RGB Leds mit integriertem Controller) |&lt;br /&gt;
* Acriche 230V~ LEDs&lt;br /&gt;
* Edison Opto LEDs: pinkompatibel mit diversen abgekündigten LEDs von Luxeon und Co, aber deutlich günstiger im Preis und leuchtstärker da u.A. Cree LED DIEs verwendet werden&lt;br /&gt;
** Edison Opto ARC / Edixeon LEDs (da ja Luxeons abgekündigt sind) ||||&lt;br /&gt;
** Edison Opto Federal (Luxeon Rebel artig) ||||&lt;br /&gt;
** Edison Opto KLC8 (Luxeon Bauform mit Cree Die) ||||&lt;br /&gt;
** Edison S Serie -&amp;gt; Lumiled kompatibles Gehäuse aber viel leuchtstärker |||&lt;br /&gt;
** Edison Exixeon Serie -&amp;gt; Lumiled kompatibles Gehäuse aber viel leuchtstärker ||&lt;br /&gt;
** Edison Edixeon RGB |||&lt;br /&gt;
* Everlight SMD-RGB (fullcolor) 19-337/R6GHBHC-A01/2T |||||&lt;br /&gt;
* Generell: Z-Power LEDs von Seoul (günstiger und heller als Luxeon) ||||| ||&lt;br /&gt;
* IR-Diode mit viel Power ttp://www.lc-led.com/Catalog/department/36/category/49/1 ||&lt;br /&gt;
* Low Current SMD-LEDs (z.&amp;amp;nbsp;B. Osram LG T679 - Anm.: hier gleich die neuen Varianten Lx T67K bestellen, nicht die alten 9er) ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Luxeon Rebel weiß (180 lm) auf Star-, Mini- oder normaler Platine ||&lt;br /&gt;
* Nichia 3 und 5 mm LEDs&lt;br /&gt;
* OSRAM Hyper TOPLEDS gelb LY T676-S1T1-26 ||&lt;br /&gt;
* OSRAM Hyper TOPLEDS weiss LW T67C-T2U2-5K8L ||&lt;br /&gt;
* Reflektoren für 10mm LEDs ||&lt;br /&gt;
* Samsung SLS RGB W815 TS (PLCC6 RGB-LED)|&lt;br /&gt;
* Seoul Z-LED RGB auf Platine ||&lt;br /&gt;
* Seoul Zled P4 (100lm bei 350mA, 240lm bei 1A!) ||||| |||||&lt;br /&gt;
* SMD-IR-LEDs in 0603/0805/SOT23 + dazu passende IR-Fotodioden in gleicher Größe ||&lt;br /&gt;
* SMD-LED Bauform 0402 rot/gelb/grün/blau/weiss  ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Superflux RGB-LED ||||&lt;br /&gt;
&lt;br /&gt;
=== Anzeigen und Displays ===&lt;br /&gt;
&lt;br /&gt;
* 4-Stellige Dot-Matrix LED-Anzeigen Siemens SLG 2016 oder von HP oder ähnliches ||||| |&lt;br /&gt;
* 7-Segment-Anzeige 4 DIGIT mit und ohne Doppelpunkt ||||| ||&lt;br /&gt;
* 7-Segment-Anzeige, allgemein Low-Current bzw. High Efficiency Versionen anbieten ||||| ||||| ||&lt;br /&gt;
* 7-Segment-Anzeige, weiss, gem. Anode ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* 7-Segment-Anzeige, weiss, gem. Kathode ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Generell alle 7-Segment-Anzeigen auch in Blau und bis zu 100mm Höhe ||&lt;br /&gt;
* Kingbright PSC Serie (16 Segment LED-Display, insbesondere PSC08 und PSC12) |&lt;br /&gt;
* LED Punktmatrix Anzeigen 8x8 superrot 3mm (z.&amp;amp;nbsp;B. Everlight ELM-1883SRWA) ||&lt;br /&gt;
* LED Punktmatrix bicolor 1.9mm (z.b. Betlux BL-M 07A881SG-XX )&lt;br /&gt;
* LED Punktmatrix (Dot-Matrix) 8x8 RGB (z.B. Betlux BL-M 23B881RGB-11) |&lt;br /&gt;
* TFT/OLED Farb-Displays, wie die bereits abgekündigten OSRAM OLEDs |||||&lt;br /&gt;
* Vakuum-Fluoreszenz-Displays (Dot Matrix mit Standardcontroller, z.&amp;amp;nbsp;B. Futaba &amp;quot;LCD Emulators&amp;quot;)  ||||| ||||| ||||&lt;br /&gt;
&lt;br /&gt;
=== andere Leuchtmittel ===&lt;br /&gt;
&lt;br /&gt;
* OSRAM Halogen Decostar 51 12V 20W GU5,3 statt des billigen NoName Zeugs ||&lt;br /&gt;
&lt;br /&gt;
=== sonstige Optoelektronik ===&lt;br /&gt;
&lt;br /&gt;
* BPW 34 F / FS (aus dem Sortiment gefallen, PIN-Fotodiode) |&lt;br /&gt;
* IL207AT (SMD Optokoppler von Infineon) ||||| |||&lt;br /&gt;
* ILD256T (SMD AC-Optokoppler)  ||||| |||||&lt;br /&gt;
* ILD620 (DIP Optokoppler) ||||| ||||| ||||| |||||&lt;br /&gt;
* IrDA-Tranceiver TFDS4500 (oder TFDU4100) wieder anbieten - war im 07/2005er Katalog noch drin) ||||| ||||&lt;br /&gt;
* PC923 (Opto MOSFET Gate Treiber auch für High Side) |&lt;br /&gt;
* SFH6106, SFH6206 4 Pin Optokoppler SMD ||||| |&lt;br /&gt;
* TLP 3617 Photo-Triac&lt;br /&gt;
* TLP113 (SMD Optokoppler) |||||&lt;br /&gt;
* TLP250 (Opto MOSFET Gate Treiber auch für High Side)||||&lt;br /&gt;
* TORX 178 Fiberoptik-Receiver |&lt;br /&gt;
* TOTX177PL und TORX177PL (Fiberoptik-Transmitter) als Ersatz für TOTX173 und TORX173 (zwar anderes Footprint, aber dafür auch kleiner und günstiger)&lt;br /&gt;
* TSOP 1140 Infrarot-Receiver  (oder andere 40 kHz IR-Empfänger) |||&lt;br /&gt;
* TSOP 1730 Infrarot-Receiver [Achtung! TSOP17xx sind Auslaufmodelle bei Vishay] ||&lt;br /&gt;
* TSOP98200 (Breitband IR-Empfangsmodul 20-455 KHz) ||||&lt;br /&gt;
* TSOP98260 (Breitband IR-Empfangsmodul 20-60 kHz) |||||&lt;br /&gt;
* Vactrol Optokoppler (mit Fotowiderstand zur Analogsignalregelung) |||||&lt;br /&gt;
&lt;br /&gt;
== Mechanisches ==&lt;br /&gt;
&lt;br /&gt;
=== Schalter/Taster/Eingabegeräte, Relais ===&lt;br /&gt;
&lt;br /&gt;
* bistabile Relais mit 2 Wicklungen ||||| ||||| ||||| &lt;br /&gt;
* Drehimpulsgeber DDM Hopt+Schuler 427 SMD (evt auch normal, stehend &amp;amp; liegend) ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Drehschalter Serie DS in allen Versionen nur vom Hersteller C&amp;amp;K; auch brückende Versionen anbieten  ||||| |||||&lt;br /&gt;
* Drucktastenfeld Matrix 3x4 ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Grayhill Series 60A Joysticks mit USB-Adapter |&lt;br /&gt;
* Hohlwellen-Drehgeber (z.&amp;amp;nbsp;B. EC35B-Serie von Alps) ||&lt;br /&gt;
* kleiner Joystick wie beim Atmel Butterfly  ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* mehrpolige Fußschalter, FS 35 bitte bei Druckschalter einordnen ||||&lt;br /&gt;
* Miniaturkippschalter mit Verriegelung ||||&lt;br /&gt;
* möglichst kleine und flache Druckschalter rastend!  |||||&lt;br /&gt;
* passende Touchpanels für die coolen Blue-Line-Grafikdisplays ||||| ||||| ||&lt;br /&gt;
* Relais mit hohen Wirkungsgrad (daher nur geringer Spulenstrom nötig) ||&lt;br /&gt;
* SMD-Schiebeschalter |||||&lt;br /&gt;
* Taster Radiohm ST-1034 in rot, grün, gelb, blau, grau und schwarz |&lt;br /&gt;
* Taster und Kappen aus der Multimec-Reihe |||&lt;br /&gt;
* Taster, Schalter und LED-Fassungen aus der Mentor FEL-Reihe ||||&lt;br /&gt;
* Tastköpfe für Taster9308, wie zb Omron B32-2000 oder B32-2010 ||&lt;br /&gt;
* PhotoMOS Relay (z.&amp;amp;nbsp;B. AQV257 AQY221 AQY225 von Panasonic |||&lt;br /&gt;
&lt;br /&gt;
=== (Steck-) Verbindungen PC- und Audiotechnik ===&lt;br /&gt;
&lt;br /&gt;
* 2.5mm-Stereo-Klinkenbuchsen (3-polig) SMD ||||&lt;br /&gt;
* Adapter 3,5mm-Klinkenbuchse auf 3,5mm-Klinkenbuchse ||&lt;br /&gt;
* Cablesharing-Adapter 2x RJ45-Buchsen(1x Ethernet 1x ISDN)1xStecker |http://www.btr-netcom.com/Products/upload/ATCH-002661.pdf&lt;br /&gt;
* Floppy-Stromversorgungstecker 3,5&amp;quot; Printausführung ||||| ||&lt;br /&gt;
* Günstigere SD/MMC-Steckverbinder z.&amp;amp;nbsp;B.SDBMF-00915B0T2 von MULTICOMP(selbst bei Farnell für 1,80 Euro) ||||| |||&lt;br /&gt;
* Hochwertigere 1/4&amp;quot;-Klinkenbuchsen, z.&amp;amp;nbsp;B. von Rean oder Cliff |||||&lt;br /&gt;
* Höherwertige 3,5mm-Klinkenbuchsen / -stecker (statt &amp;quot;EBS35&amp;quot; oder &amp;quot;KK(S/M) ..&amp;quot;) ||||| ||||| ||||&lt;br /&gt;
&lt;br /&gt;
* Höherwertige Adapter für Klinke (die bisherigen 3,5 auf 6,3mm-Adapter sind nach ~2 mal Stecken völlig ausgeleiert) ||&lt;br /&gt;
&lt;br /&gt;
* microSD- / Transflash-Sockel mit Push-Push-Technik (ist nervig die immer für teuren versand aus amiland kommen zu lassen) ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* MiniSD Card-Connector mit Auswurffunktion für Oberflächenmontage  ||||| |&lt;br /&gt;
* Modulare Buchse RJ45 mit Übertrager und LEDs für Ethernet 10/100, z.&amp;amp;nbsp;B. SI-40138 MagJack von BEL-STEWART oder Taimag RJLBC-060TC1 {{Reichelt50|FF0000}}||||&lt;br /&gt;
* Modulare Buchse RJ45 ohne Übertrager mit LEDs (oder Lichtleiter für SMD-LEDs) ||||| |||&lt;br /&gt;
* RJ45-Stecker 90° nach unten oder zur Seite gewinkelt ||&lt;br /&gt;
* RJ11-Stecker (6-polig) mit seitlich versetzter Nase (im TK-Bereich häufig) |&lt;br /&gt;
* Molex Steckerreihe Minifit Jr 4,2mm Rastermaß (verwendet als Stromstecker in Computern, Mainboard, PCI-E, P4/EPS ...) |&lt;br /&gt;
* Ordentliche Lautsprecherbuchsen &amp;quot;Strich-Punkt&amp;quot; (Print oder Wand) (die Stecker sind OK) |&lt;br /&gt;
* SATA-Stromstecker/ -Buchsen für Kabel/ Printmontage ||||&lt;br /&gt;
* USB3-, e-SATA-, eSATAp (Power e-SATA)-Stecker in Printausführung (gerade und gewinkelt) [die gibts aber inzwischen, z.b. USB3 AEB] ||||&lt;br /&gt;
* Vernünftige Koax-Stecker und -Kupplungen z. Bsp. von Hirschmann ||&lt;br /&gt;
* WOL-Verbindungskabel / -Stecker / -Print-Connectoren: ||||| |&lt;br /&gt;
* Micro-USB-Buchse in Print oder SMD: |&lt;br /&gt;
&lt;br /&gt;
=== (Steck-) Verbindungen Platinen und ICs ===&lt;br /&gt;
* Buchsenleiste Fischer BL5  |&lt;br /&gt;
* Buchsenleisten zum Crimpen (allseitig anreihbar!, 1x1, 1x2, z.&amp;amp;nbsp;B. [http://www.newproduct.molex.com/datasheet.aspx?ProductID=92125 Molex 2081 ?] oder Harwin M20 )  ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Carrier-IC-Sockel&lt;br /&gt;
* Die PSK-Kontakte in anderen Packungen als 20/10k.100Stk. wäre z.B. gut.1k auch. ||||| ||||&lt;br /&gt;
* mehrpolige, hochwertige Miniatursteckverbinder (z.&amp;amp;nbsp;B. http://www.binder-connector.de/pdfs/serien/711.pdf) |||&lt;br /&gt;
* Molex C-Grid SL einreihig 2 bis &amp;gt;6 polig: Stecker, Buchsen, Buchsen-SMD, Crimp-Werkzeug ||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für 6-Pin SOT23 (SOT23-6) |||||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für DIL20 ||||| |||||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für DIL28 ||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für PLCC-44 ||||| ||||| |||||&lt;br /&gt;
* Nullkraftsockel (TEXTOOL, ARIES, Yamaichi,..) für andere SO- oder TQFP-Gehäuse ||||| ||||| ||||| |||&lt;br /&gt;
* Stapelleiste AMP 2–0827730–0, 20polig, A 24,2 mm |&lt;br /&gt;
* Stiftleisten im Rastermaß 1 mm (z.&amp;amp;nbsp;B.: Samtec FTMH-120-03-F-DV-ES) |&lt;br /&gt;
* Wannenstecker 2,54mm Raster auch als SMD ||||| ||||| ||&lt;br /&gt;
* Gehäuse Serie CG einreihig, RM 2,54 mm + Crimpkontakte female&lt;br /&gt;
* 1.27mm Wannenstecker oder Stiftleiste mit Codierung SMD z.B. MPE-Garry 361-3&lt;br /&gt;
* Sandwich Verbinder / Stapelbare Buchsenleisten (wie: http://www.watterott.com/de/Stapelbare-Buchsenleisten )   ||&lt;br /&gt;
&lt;br /&gt;
=== (Steck-) Verbindungen sonstige ===&lt;br /&gt;
* Wannenstecker 2,54mm Rastermaß in SMD (wie WSL 2x05SMD 2,00) |&lt;br /&gt;
* Adapterprogramm SMA auf SMB ausbauen ||&lt;br /&gt;
* BNC-Stecker (wie UG 88U, Lötmontage) aber für RG174-Kabel ||||| |&lt;br /&gt;
* Chipkartenkontaktiereinrichtung, die die Kontakte anhebt (keine Schleifkontakte) ||||| ||||| |&lt;br /&gt;
* E10-Schraubsockel, wie sie Glühbirnen haben, mit Lötstiften (Achtung es ist nicht die Fassung gemeint) |||||&lt;br /&gt;
* Euro-Einbausteckdose (230V~, gab&#039;s früher mal) ||||| |||&lt;br /&gt;
* Foliensteckverbinder (FFC) RM1,25 (z.&amp;amp;nbsp;B. 9pol, 11pol ...) |||||&lt;br /&gt;
* Für LC-Displays: Adapterplatine mit Anschlüssen im Raster 2,54mm (EA 9907-DIP) siehe http://www.lcd-module.de/ ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Hohlstecker für Laptops 1,7 x 4,75mm gelb |||&lt;br /&gt;
* Hohlstecker für Acer-Laptops 1,7 x 5,5mm |&lt;br /&gt;
* Hohlstecker-Buchsen, ganz kleine, passend zu Handy-Netzteilen z.B.von Nokia |&lt;br /&gt;
* JST HR-Steckverbinder |||&lt;br /&gt;
* Krokodilklemmen-Verbinder mit anständigem Kabelquerschnitt und haltbarer Ausführung. MK 612S ist nur als Strombegrenzer (1Ω) zu gebrauchen |&lt;br /&gt;
* Lüsterklemmen kleiner LÜK 2,5, also z.B. LÜK 1,5: ||||&lt;br /&gt;
* Mini-Schraubklemmen Phoenix Contact MPT-Reihe RM2,54, z.B. MPT0,5/12-2,54 f. 12polig |||&lt;br /&gt;
* OBD-Stecker. |||||&lt;br /&gt;
* Polklemmen Hirschmann PKNI 10B (max. 63A), zumindest Schwarz und Weiß ||&lt;br /&gt;
* preiswerte! Hochspannungssteckverbinder &amp;gt;2kV ||||&lt;br /&gt;
* Steckverbinder für PICTIVA OLED-Display-Folienkabel |||||&lt;br /&gt;
* Triaxstecker /-buchse (Coax mit 2. Schirm als 3. Kontakt) ||&lt;br /&gt;
* Deutsche Stecker für PKW, LKW, LoF ||&lt;br /&gt;
* Anderson PowerPoles oder ähnlich günstige, variable, simple Hochstrom-Steckverbinder&lt;br /&gt;
* JST-EH Steckverbinder aufnehmen |&lt;br /&gt;
* SMA Leiterplattenbuchse abgewinkelt |&lt;br /&gt;
* Miniatursteckverbinder Fa. Binder  z.B. Serie 711 |&lt;br /&gt;
&lt;br /&gt;
=== Kabel, Drähte etc. ===&lt;br /&gt;
&lt;br /&gt;
* angebotene Schaltlitze (H05VK, H07VK) um weitere Farben erweitern ||||| |||&lt;br /&gt;
* das qualitativ mangelhafte 4mm Laborsteckerprogramm rausnehmen und nur noch Hirschmann anbieten  ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* dickere Mantel(Feuchtraum)leitungen, z.&amp;amp;nbsp;B. NYM J5x10 ||&lt;br /&gt;
* Dünner Schaltdraht (&amp;lt; 1mm Durchmesser, isoliert mit Tefzel oder Kynar)  {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Stinknormaler dünner isolierter Schaltdraht 0,3mm, 0,5mm, 0,6mm, 0,75mm in verschiedenen Farben ||||| ||||| |||&lt;br /&gt;
* Flachbandkabel im 1,00mm-Raster, passend für Pfostenverbinder PL 2X25G 2,00 . Wird für Notebookplatten benötigt. Ohne das ist die gesamte 2,0mm-Wannensteckerproduktgruppe sinnlos. ||||| |||&lt;br /&gt;
* Flachbandkabel im 2,54mm-Raster und dazu passende Aufpressstecker und -buchsen ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Flexible Einzellitze, 0,5² in verschiedenen Farben ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Folienflachkabel (FFC) RM 0,8 (z.&amp;amp;nbsp;B. 30pol., Länge 125mm) für 8&amp;quot; TFT-Monitor |&lt;br /&gt;
* Folienflachkabel (FFC) RM1,25 (z.&amp;amp;nbsp;B. 9pol, 11pol ... /Länge 20cm) ||&lt;br /&gt;
* Heizdraht zB.: Kanthal A1  ||||| ||||&lt;br /&gt;
* Litze, LiY 0,25mm^2, diverse Farben (beispielsweise von Lapp Kabel) ||&lt;br /&gt;
* Low-Loss-Kabel (evtl. aus diesem Programm http://www.elspec.de/hf-kabel-technologie/download-hf-technik/hf-lowloss-kabel.html)&lt;br /&gt;
* LYIF-Litze (verschiedene Farben) ||||| |&lt;br /&gt;
* Patchkabel (PATCH-C6) zusätzliche Zwischengröße z.B. 35 oder 40cm, wenn 025 zu kurz und 050 zu lang ist... |&lt;br /&gt;
* RG214 |&lt;br /&gt;
* Schnepp &amp;quot;Laborkabel&amp;quot;-Messleitungen ||||| |&lt;br /&gt;
* versilberten Kupferdraht auch &amp;lt; 0,6mm und alle Stärken in grösserer VPE (z.&amp;amp;nbsp;B. 500g-Rolle) ||||| ||||| ||||| |||||&lt;br /&gt;
* Zwillingslitze 2x0.14mm, z.&amp;amp;nbsp;B.  Artikel: ZL214SWW-10M Kessler Elektronik ||||| ||||| |&lt;br /&gt;
* &amp;quot;Dicke&amp;quot; Kabel mit Querschnitt &amp;gt; 8² mm |&lt;br /&gt;
&lt;br /&gt;
=== Gehäuse und Gehäusetechnik ===&lt;br /&gt;
&lt;br /&gt;
* Batteriehalter für 18650er Lithiumzellen (ähnlich dealextreme sku 100996/100997/100999) ||||&lt;br /&gt;
* Batteriehalter für 3 Mignonzellen mit Lötfahne (statt Druckknopf)  |&lt;br /&gt;
* Batteriehalter für 4 Mignonzellen mit Lötfahne (statt Druckknopf)  |||&lt;br /&gt;
* Bopla ABP oder ABPH 800-100 (10cm) Aluprofil Gehäuse |||&lt;br /&gt;
* Distanzbolzen M2,5 (SW4) in verschiedenen Längen aus Messing |||&lt;br /&gt;
* Distanzhülsen/-bolzen M3 in verschiedenen Längen aus Kunststoff ||||&lt;br /&gt;
* Gewindebolzen zur Sub-D Frontplattenmontage, z.B. &amp;quot;160X10329X&amp;quot; |&lt;br /&gt;
* mehr und v.a. kleine (Hand-) Gehäuse  {{Reichelt50|FF0000}}||||| ||||| ||||| ||&lt;br /&gt;
* Muttern M2 |||||&lt;br /&gt;
* Preiswertere Alu Druckgussgehäuse, wie z.&amp;amp;nbsp;B. von Hammond Manufacturing ||||| ||||| ||||| |||||&lt;br /&gt;
* Stopmuttern M2 |&lt;br /&gt;
* Strangpreßprofilgehäuse von Fischer |&lt;br /&gt;
* USB-Leergehäuse (z.&amp;amp;nbsp;B. wie USB-Stick, WLAN-Dongle, o.ä.) ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Zylinderkopfschrauben M2,5 x 12mm ||||| |&lt;br /&gt;
* Zylinderkopfschrauben M2,5 x 20mm |||||&lt;br /&gt;
* Zylinderkopfschrauben M2,5 x 30mm |||||&lt;br /&gt;
* Zylinderkopfschrauben M3 x 25mm ||||| |&lt;br /&gt;
* Gewindewürfel M3 wie z.B. von Ettinger oder Bürklin |&lt;br /&gt;
* Selbstschneidende Schrauben für Kunststoffe |&lt;br /&gt;
* SD Kartenhalter/Einbauslot (micro SD sowie SD)!!!!! ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
&lt;br /&gt;
=== Kühlkörper ===&lt;br /&gt;
* SK574 100 SA |&lt;br /&gt;
&lt;br /&gt;
== Prototypenbau, Platinen und Chemie ==&lt;br /&gt;
&lt;br /&gt;
* Adapter QSOP (versch. Pinzahlen) auf DIL/QIL ||||| ||||| |||&lt;br /&gt;
* Adapter TQFP (versch. Pinzahlen) auf DIL/QIL ||||| ||||| ||||| ||||| ||||| | ||||| ||||| ||||| |&lt;br /&gt;
* Adapter RJ45 und RS232 auf Klemmen o.ä. (Breakoutboards, ähnlich Pollin 810 087) |&lt;br /&gt;
* Arbeitsschalen zum Entwickeln und Ätzen von Platinen(*)(ist im Starterkit enthalten) ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Ballistol Universalöl ||||| |||||&lt;br /&gt;
* Bungard Green Coat ||&lt;br /&gt;
* Bungard Sur-Tin |||&lt;br /&gt;
* Bungard-Fotoplatinen auch in 80x100mm (halbes Euroformat), nicht nur 75x100mm ||||| ||||| ||||| |||||&lt;br /&gt;
* Bungard-Fotoplatinen BLAU div. Formate ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Bungard-Fotoplatinen SCHWARZ div. Formate |&lt;br /&gt;
* Cadsoft Eagle ||||| ||||| ||&lt;br /&gt;
* chemisches Zinnbad ||||| ||||| ||||| ||||||&lt;br /&gt;
* Entwickler NaOH-Frei von Bungard (SENO 4007 Universalentwickler) |||&lt;br /&gt;
* Fotoplatinen aus Hartpapier von Markenhersteller ||&lt;br /&gt;
* Fotoplatinen, zweiseitig, Hartpapier(!) |||||&lt;br /&gt;
* Hohlkehlenlötspitzen (Ersa 0832HD) ||||| |&lt;br /&gt;
* Hohlkehlenlötspitzen f. Weller MLR21 ||||| ||||||&lt;br /&gt;
* Kapton-Baender, evtl auch mit Kupferbeschichtung (Flex-PCB) ||||||&lt;br /&gt;
* Lötstopplaminat ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* LPKF Durchkontaktierungspaste |||&lt;br /&gt;
* Messingblech/Kupferblech 0.1mm (wenn möglich Photobeschichtet) ||||| |&lt;br /&gt;
* Natriumpersulfat 2 kg Packung ||||| |||&lt;br /&gt;
* PCI-Express x1 Laborkarte (wie RE 430EP) ||&lt;br /&gt;
* PIC_BASIC_II || Programm mit HardwareKey [z.&amp;amp;nbsp;B. für Azubi&#039;s]&lt;br /&gt;
* SMD Testplatine (3x3 Felder) wie bei Conrad |||&lt;br /&gt;
* SOIC auf PDIP Gehäuse-Adapter zwecks Prototypen-Bau ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Spitzenhülsen WSP-/MPR 80 (Weller) ||&lt;br /&gt;
* Steckplatinen (Breadboards) ohne Grundplatte und ohne Versorgungsleiste (wie Conrad 526827; STECKBOARD 1K2V hat beidseitig Leisten und ist daher nicht anreihbar / ist anreihbar, aber danach sind die beiden Leisten jeweils übrig) |&lt;br /&gt;
* Steckplatinenen (STECKBOARDS) im 84 x 54 Format (gibts bei Conrad ist da aber viel zu teuer) |||&lt;br /&gt;
* [http://www.sugru.com/de Sugru] |&lt;br /&gt;
* Target 3001 V15 Autorouter verschiedene Lizenzen |&lt;br /&gt;
* Tonerverdichter (www.Huber-Troisdorf.com) ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* www.schmartboard.com hat super einfach zu lötende SMD-Adapter in allen Größen, nur leider keinen Vertriebspartner in Deutschland (doch: ELV (wo?)). Wie wäre es mit Reichelt? ||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* Blanko Katalogseiten &amp;quot;weiß&amp;quot; für die Toner direkt Methode (oder 2-3 Seiten im Katalog leer lassen) |||&lt;br /&gt;
* Leiterplattenmaterial/Platinen mit Stärke &amp;lt; 1,5mm (z.B. 0,8mm; 1mm) |&lt;br /&gt;
&lt;br /&gt;
== Werkzeug und Zubehör ==&lt;br /&gt;
&lt;br /&gt;
* einzelne Hartmetallbohrer in diversen Grössen (z.&amp;amp;nbsp;B. 0,8 1,0 1,3 1,5) {{Reichelt50|FF0000}}||||| ||||| |||||&lt;br /&gt;
* ESD-Erdungspunkte 4mm/10mm für Schuko, wie Vermason J6100 (alt) / 231125 (neu) ||||&lt;br /&gt;
* Gewindebohrer M2 und M2,5 ||||| ||||| ||&lt;br /&gt;
* hochwertige 9mm Abbrechklingen |||&lt;br /&gt;
* Konturenfräser/Gravurstichel, etc. zum Fräsen von Platinenprototypen (z.&amp;amp;nbsp;B. Bungard G60N/G30N) ||||| ||||| ||||&lt;br /&gt;
* M2 Gewindebohrer und Senker ||||&lt;br /&gt;
* robuste Allzweck- und Teppichmesser ||||| |||||&lt;br /&gt;
* Schneidmatten (schnittfeste, temperaturbeständige Unterlage, meist mit cm/mm-Raster) ||&lt;br /&gt;
* Sortimentskasten H1 und evtl. H2-Serie |||&lt;br /&gt;
* Tri-Wing Schraubendreher ||||&lt;br /&gt;
* Torx tamper resistant/tamper proof (die mit Loch) als Set und in Aufbewahrungsbox, z.B. Lindy 43015 |&lt;br /&gt;
* zöllische Gewindeschneider g1/4&amp;quot; und g 1/8&amp;quot; insbesondere interessant für Wasserkühlungen ||||| ||||&lt;br /&gt;
* Wiederlösbare Kabelbinder mit einfachem Verschluss (keine Knotenbänder oder Kabelbänder) ||&lt;br /&gt;
* Bindegarn zum Kabel binden |&lt;br /&gt;
* Really Useful Boxes (http://www.reallyusefulproducts.co.uk/germany/html/boxdetails.php) (schöne stabile Kunststoffboxen mit Deckel und in zig Größen) |&lt;br /&gt;
&lt;br /&gt;
== Messgeräte, Diagnose und Stromversorgung ==&lt;br /&gt;
&lt;br /&gt;
* FS300 Messgerät Antennenanalyzer Massenpreis 50000 Stück ||&lt;br /&gt;
* Günstigere Oszilloskope z.&amp;amp;nbsp;B. Multimetrix oder Grundig ||||| ||||| |&lt;br /&gt;
* LiPoly-Zellen (aufladbare Lithiumakkus, &amp;quot;Suppentüten&amp;quot; oder prismatische Zellen) ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Neuere, bessere NiMH-Akkus (z.b. GP1100 2/3A, GP2000 AF, GP2200 4/5SubC) ||||| ||||| ||&lt;br /&gt;
* OBD2 Kabel auf RJ45 Stecker ||||| |&lt;br /&gt;
* Smart Tweezer (SMD-Pinzette mit Komponentenmessung) siehe [http://www.trgcomponents.de/TrgDE/Internet/ProductShow.aspx?ItemID=680&amp;amp;CategoryID=2426] ||||&lt;br /&gt;
* Tektronix TDS Series Osziloskope |||&lt;br /&gt;
* Vorschaltgeräte mit G23 Fassung (zum Bau von UV-Belichtern geeigent)|||&lt;br /&gt;
&lt;br /&gt;
== Auswahl, Bestellung und Versand ==&lt;br /&gt;
&lt;br /&gt;
* bei über 10kg Gewicht nicht gleich die Versandkosten verdoppeln, sondern geringerer oder keinen Aufschlag ||||| |||&lt;br /&gt;
* Filialen in Österreich  und der Schweiz :-) {{Reichelt50|FF0000}}||||| | (man beachte das &amp;quot;:-)&amp;quot;, es gibt auch in D keine &amp;quot;Filialen&amp;quot; - mt)||&lt;br /&gt;
* Günstige Versandkonditionen für die EU ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* In Bereichen wie Multimedia etc. (z.&amp;amp;nbsp;B. Spielekonsolen) ein aktuelleres Angebot, und nicht wie z.&amp;amp;nbsp;B. bei der PS2 erst wenn schon fast das Nachfolgemodell draussen ist (Multimedia ist hier nur ein Beispiel, einfach mal an der Konkurrenz orientieren (Zum beispiel am grossen C) |&lt;br /&gt;
* Kein Mindestbestellwert (ich bezahle eh&#039; Porto) ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Kundenkarte so wie bei ELV (Grundgebühr für ein Jahr, keine Versandkosten, evtl kleiner Rabatt) {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* mehr Verpackungsmaterial z.&amp;amp;nbsp;B. kleine Schachteln oder die Plastik IC-&amp;quot;Schienen&amp;quot; einzeln (und unzerschnitten) verkaufen ||||| ||||| |||&lt;br /&gt;
* Möglichkeit für Selbstabholen eine Bestellung unter 10 Euro abzuliefern.  |&lt;br /&gt;
* Nicht so viele Tackerklammern/Gummibänder/Tesafilm/Beutel in die Verpackungstüten machen, das nervt beim Auspacken (die kaputten Tüten kann dann auch keiner mehr brauchen, die wenigen nicht kaputt getackerten hebe ich aber gerne auf! Aber bitte weiterhin alles getrennt verpacken... oder wenigstens nicht den Zip-Verschluss tackern) {{Reichelt50|FF0000}}||||| ||||| ||||| &lt;br /&gt;
* nicht wie die Konkurrenz jetzt schon im April den Juli-Katalog rausbringen ||||| ||||| ||||| ||||&lt;br /&gt;
* Parametrische Suche aller Elektronikartikel, speziell erstmal Halbleiter, so wie bei Maxim-ic.com ||||| |||&lt;br /&gt;
* Selbstabholer-Option bei der Bestellung. Vergisst man es unter &amp;quot;Bemerkung&amp;quot; kommt es per Post :(   |||||  (für Plz 26xxx kommt eine Option für Abholer, Tip: falsche Plz eintragen)&lt;br /&gt;
* Skalierbarer Warenkorb für mehrfachen Aufbau gleicher Platinen ||||| |&lt;br /&gt;
* Versand von Kleinteilen als Maxibrief, zwecks niedrigerem Versand {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Warenkorb immer in gleicher Reihenfolge sortiert, nicht bei jedem Aufruf anders ||||| ||||| ||||| ||||&lt;br /&gt;
* Vergleichen von Ergebnissen einer Suchanfrage möglich machen |&lt;br /&gt;
&lt;br /&gt;
== Unsortiert/Unspezifisch ==&lt;br /&gt;
&lt;br /&gt;
* mehr, aber als solche gekennzeichnete billig-Alternativprodukte, nicht nur High-End ||||| ||&lt;br /&gt;
* Modellbau und Zubehör (Wird immer mehr, man sieht, Reichelt hört dankenswerterweise auf diese Wishlist!!) ||||| ||||| ||||| ||| &lt;br /&gt;
* Toner für Laserdrucker Kyocera FS-1010 TK17 (ist ja eigentlich der gängigste Kyocera Toner) ||||| ||  &lt;br /&gt;
* Toner für Kyocera FS800-S |&lt;br /&gt;
* Speicherkarten-Adapter von SD auf CF (bzw. CFII) |||||&lt;br /&gt;
* ein Abendessen mit Angela :-) (hier dürfte wohl Angelika gemeint sein) ||| bzw. mit der Blondine von der Katalogseite mit den Servicenummern ||||&lt;br /&gt;
* Beamer Casio YC-400 |&lt;br /&gt;
* PCMCIA WLAN-Karten (Linux-kompatibel) mit externem Antennenanschluss |&lt;br /&gt;
* Reichelt T-Shirt ||||| ||||| |||&lt;br /&gt;
* Röhrensortiment mit den wichtigsten Typen wie z.B. EL34; KT88 einführen + Sockel ||||&lt;br /&gt;
* Produktmanager, die des Deutschen mächtig sind. Die Rechtschreibung / Grammatik der Produktbeschreibungen ist eine Katastrophe. ||||| |&lt;br /&gt;
* Schnittstellenkarte USB3.0 mit Stromversorgung über PCIe (keine mit Extrastecker, davon sind schon ein Dutzend im Programm), z.B. WDBFNJ0000NNC |&lt;br /&gt;
* GlobalTop PA6H, GPS Receiver(MediaTek MT3339)|&lt;br /&gt;
* GlobalTop GPA externe GPS Antenne (SMA, 2 m) FGPANE1RHA2 |&lt;br /&gt;
&lt;br /&gt;
= Bereits im Sortiment =&lt;br /&gt;
&lt;br /&gt;
* LM3886 (68W Audioverstärker) ||||| |&lt;br /&gt;
* Laser-Folien für die Druckformerstellung(Zweckform 3491) ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Atmel AT91SAM7S32 53x gewünscht  (=&amp;gt; Best.: AT 91SAM7S64-AU)&lt;br /&gt;
* Atmel AT91R40008 (32bit controller 256KB-RAM 100-lead TQFP) ||||| ||||| |  (=&amp;gt; Best.: AT 91R40008)&lt;br /&gt;
* LCD: auch ein- und dreizeilige Variante der DOG-Serie (EA DOGM081 &amp;amp; 163) |||||&lt;br /&gt;
* Platinen Basismaterial, einseitig Cu-beschichtet, 0,5..1 mm dick ||||| ||||| ||| --&amp;gt;0,8mm: BEL 160x100-1-8&lt;br /&gt;
* Atmel ATtiny45 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| =&amp;gt; ATTINY 45-20PU, ATTINY 45-20SU, ATTINY 45V-10PU, ATTINY 45V-10SU&lt;br /&gt;
* Atmel ATMEGA48 TQFP ||||| |||| =&amp;gt; ATMEGA 48-20 AU&lt;br /&gt;
* Atmel ATMEGA 88 || =&amp;gt; ATMEGA 88-20 AU, ATMEGA 88-20 PU, ATMEGA 88V-10 AU, ATMEGA 88V-10 PU&lt;br /&gt;
* Atmel ATMEGA644 ||||| ||||| ||||| ||||| =&amp;gt; ATMEGA 644-20 AU, ATMEGA 644-20 PU, ATMEGA 644V-10AU, ATMEGA 644V-10MU, ATMEGA 644V-10PU&lt;br /&gt;
* Atmel ATMEGA2560 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| || =&amp;gt; ATMEGA 2560-16AU, ATMEGA 2560V-8AU&lt;br /&gt;
* Atmel ATMEGA2561 ||||| | =&amp;gt; ATMEGA 2561-16AU, ATMEGA 2561V-8AU&lt;br /&gt;
* Atmel ATmega 1284P PDIP |||&lt;br /&gt;
* Atmel ATmega 168PA, 88PA, etc. ||||| ||||&lt;br /&gt;
* Atmel ATmega 16A und 32A in TQFP und PDIP ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||||&lt;br /&gt;
* Atmel ATmega328P in TQFP und PDIP {{Reichelt50|FF0000}} ||||| |||||&lt;br /&gt;
* Philips LPC2000-Serie ARM7-Controller (LPC214x, LPC213X, LPC21xx und LPC22xx) 57x gewünscht =&amp;gt; Bauelemente, aktiv / Controller, Speicher / Controller, Prozessoren / Philips-Controller 80C51 / 87LPC.. / 89C51&lt;br /&gt;
* TI MSP430F2xxx (Typen mit 16 MIPS) ||||| ||||| | =&amp;gt; Bauelemente, aktiv / Controller, Speicher / Controller, Prozessoren / Texas MSP430 Controller&lt;br /&gt;
* Breadboards/&amp;quot;Steckbretter&amp;quot; 115x gewünscht =&amp;gt; STECKBOARD 1K2V, STECKBOARD 2K1V, STECKBOARD 2K4V, STECKBOARD 3K5V, STECKBOARD 4K7V (zu finden unter &#039;Diverses/Spielwaren&#039; :)&lt;br /&gt;
* RS485 ESD fest: MAX3086E oder 75180 oder ISL83086E ||||| || =&amp;gt;MAX485ECPA &lt;br /&gt;
* Microchip PIC 18F2550  || =&amp;gt; PIC 18F2550-I/P&lt;br /&gt;
* Microchip PIC 16F88  ||||| | =&amp;gt; PIC 16F88-I/P&lt;br /&gt;
* Microchip dsPIC ||||| ||||| ||||| ||||| | =&amp;gt; PIC 30F2010-30 SP/SO&lt;br /&gt;
* Logicanalyzer | =&amp;gt; ME ANT 8 und ME ANT 16&lt;br /&gt;
* Atmel ATMEGA8 TQFP |||| =&amp;gt; ATMEGA 8-16 TQ&lt;br /&gt;
* 3,3V Laengsregler (LT1086-Serie z.&amp;amp;nbsp;B.)  ||||| =&amp;gt; vgl z.&amp;amp;nbsp;B. [http://reichelt.de/?ARTIKEL=LT%201086%20CM3%2C3 LT 1086 CM3,3] (SMD) oder [http://reichelt.de/?ARTIKEL=LT%201086%20CT3%2C3 LT 1086 CT3,3] (TO-220) bei Reichelt&lt;br /&gt;
* Flexible Messleitungen: Wie gesagt Reichelt bietet ja die ganze Palette an Bananen/Laborsteckern, Krokodilklemmen usw. an, nur die Leitungen dazu fehlen im Programm.  (Sind schon im Sortiment. Fertig konfektionierte z.&amp;amp;nbsp;B.: ML 100 SW, Meterware z.&amp;amp;nbsp;B.: MESSLEITUNG 10SW)&lt;br /&gt;
* FTDI USB Chips  ||||| ||||| ||||| ||||| ||||| ||| =&amp;gt; Best-Nr. FT232BL, FT232RL (sehr interessant), FT245BM und FT2232BM (2xUART auf USB)(noch nicht unter USB einsortiert)&lt;br /&gt;
* CAN-Bus Controller MCP2515  |||||&lt;br /&gt;
* VLSI MP3 Decoder  ||||| ||||| ||||| | z.Zt. unter CAN-Bus(!) einsortiert. Bitte auch die neuen Gehäuse (ROHS) und Typen mit ins Angebot nehmen.&lt;br /&gt;
* Atmel AT90CAN128 ||||| |&lt;br /&gt;
* MMC / SDC slot 50x gewünscht ==&amp;gt; Bestell-Nr.: CONNECTOR MMC 11, CONNECTOR MMC 12, CONNECTOR SD 21 und CONNECTOR SD 22&lt;br /&gt;
* lineare Potentiometer als Schiebepoti ||||| | - Bestell-Nr. PSM-LIN* (&amp;quot;mono&amp;quot;) PSS-LIN* (&amp;quot;stereo&amp;quot;)&lt;br /&gt;
* Echtzeituhr DALAS DS1307 (auch SMD) ||||| || - Bestell-Nr. DS1307/DS1307Z&lt;br /&gt;
* Konkret: Neuer PIC ... und PIC18F2550 ||||| ||| &lt;br /&gt;
* MSP430F1232 |&lt;br /&gt;
* Fädelstift, Draht und Kämme ||||| ||| - Bestell-Nr. Fädelstift/Fädeldraht/Fädelkamm (Warum sind diese Stifte ùnd der Draht nur so &amp;quot;erschreckend&amp;quot; teuer? =&amp;gt; immerhin billiger als bei C...) (vielleicht weil jeder die nur 1x kauft und dann mit Draht aus anderen Quellen selber neu bewickelt?? ;-)&lt;br /&gt;
* Mini-GPS-Module ||||| ||||| ||||| ||||| ||| - Bestell-Nr. GPS ET 102/GPS ET 202/GPS EM 401&lt;br /&gt;
* Atmel ATmega48, ATmega168, ATtiny13 ||||| ||||| ||||| | (im neuen katalog und online verfügbar!)&lt;br /&gt;
* CompactFlash Stecker ||||| ||||| ||||| || - Bestell-Nr. connector CF 01/ Connector CF 02 &lt;br /&gt;
* DCF77 Empfangsmodule 60x gewünscht (DCF77 Modul) (4.5.2005 ist jetzt verfügbar unter DCF77 MODUL, aber leider 50% teurer als bei der Konkurenz, störempfindlicher, grotesk schwache Ausgangstreiber)&lt;br /&gt;
* Microchip PIC 12F683 (8pin PIC mit PWM !) =&amp;gt; Bereits im Sortiment: Best. Nr PIC 12F683-I/P bzw. PIC 12F683-I/SN &lt;br /&gt;
* MSP430F135 ||||| ||||| ||||| |  (MSP430F135 im Programm Bestellnr.: MSP430F135 IPM)&lt;br /&gt;
* SMD 0Ω in Bauform 0805 |||| -&amp;gt; SMD-0805 0,00&lt;br /&gt;
* Shunt-Widerstände  ||||| ||||| ||||| ||||| |  (neu im Sortiment: Widerstandsdraht, Best.-Nr. &amp;quot;RD100/x,xx&amp;quot;, Leider nur in teuren 100g Spulen)&lt;br /&gt;
* dünner isolierter Draht, wie Klingeldraht nur dünner, vielleicht 0.2-0.3mm zum Fädeln von Platinen |||| =&amp;gt; Fädeldraht nun im Sortiment&lt;br /&gt;
* dünner Silberdraht zur Verdrahtung auf Lochrasterplatinen ||||| |   (mögl. bereits im Sortiment &amp;quot;SILBER 0,6MM&amp;quot; ???)Kupferlackdraht geht nicht?&lt;br /&gt;
* Hartmetallbohrer in mehr verschiedenen Größen (z.&amp;amp;nbsp;B. 0,6mm 0,8mm 1,1mm 1,2mm etc.) ||||| |||| =&amp;gt; Gibt es beides Bestellnummern: &amp;quot;Bohrerset&amp;quot; oder für einzelne Bohrer &amp;quot;Bohrer + Größe in mm&amp;quot; Bsp: &amp;quot;Bohrer 0,6&amp;quot; =&amp;gt; die kosten aber einiges, eine etwas preiswertere Alternative wäre auch nicht schlecht...&lt;br /&gt;
* 68HC908GP32 |&lt;br /&gt;
* überhaupt: Freescale 68HC908- und vor allem 68HCS08-Mikrocontroller fehlen total im Sortiment!&lt;br /&gt;
* RJ45-Buchse ||| - schon im Sortiment: MEBP 8-8&#039;&#039;x&#039;&#039; unter Modular-Stecker bei TK&lt;br /&gt;
* Elektromotoren ||||| |||| (Suche: Gleichstommotor)&lt;br /&gt;
* Microchip ICD2 || =&amp;gt; Bestell-Nr.: DV 164005 &amp;lt;= Fehlt im Papierkatalog&lt;br /&gt;
* 14,7456 MHz Quarze ||||| ||||| ||||| ||||| ||| (Bst: 14,7456-HC18)&lt;br /&gt;
* SMD Widerstande in Bauform 1206 (SMD 1/4W...)&lt;br /&gt;
* Atmel Atmega 128 in TQFP || (ATMEGA 128-16 TQ)&lt;br /&gt;
* Atmel Atmega 169 in TQFP || (ATMEGA 169-16 TQ)&lt;br /&gt;
* Atmel ATMEGA1280 ||||| ||||| ||||| |||| (ATMEGA 1280-16AU, ATMEGA 1280V-8AU)&lt;br /&gt;
* Atmel ATMEGA8515 | (ATMEGA 8515-*)&lt;br /&gt;
* Atmel ATtiny24/44 ||||| ||||| (ATTINY 24-*, ATTINY 44-*)&lt;br /&gt;
* Atmel ATtiny25/85 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| | (ATTINY-25-*, ATTINY-85-* gelistet aber erst verfuegbar ab II/07)&lt;br /&gt;
* Atmel AT91SAM7S64, AT91SAM7S256 ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||| (suche AT91*)&lt;br /&gt;
* Atmel AT91SAM7X64-256 ||||| ||| (suche AT91*)&lt;br /&gt;
* TI MSP430F1611 (10k RAM, 48k Flash) ||||| ||||| ||||| ||||| ||||| ||||| || (MSP430F1611 IPM)&lt;br /&gt;
* PCA9306  Dual Bi-Directional I2C-Bus and SMBus Voltage Level-Translator ||&lt;br /&gt;
* PCA9531D  8Bit I2C_BUS LED-Dimmer ||||| |||||&lt;br /&gt;
* PCA9551D  8Bit I2C-BUS LED-Blinker ||||| ||||&lt;br /&gt;
* PCA9530D  2Bit I2C_BUS LED-Dimmer ||||| |&lt;br /&gt;
* PCA9532D 16Bit I2C_BUS LED-Dimmer ||||| |||||&lt;br /&gt;
* PCA9533D  4Bit I2C_BUS LED-Dimmer ||||| ||||&lt;br /&gt;
* PCA9550D  2Bit I2C-BUS LED-Blinker ||||| |&lt;br /&gt;
* PCA9553D  4Bit I2C-BUS LED-Blinker ||||| ||&lt;br /&gt;
* PCA9552D 16Bit I2C-BUS LED-Blinker ||||| |||&lt;br /&gt;
* Microchip PIC 18F2550 (USB, 32 KBytes Flash) | (bereits im Sortiment)&lt;br /&gt;
* Microchip PIC 16F628A (weil: besser als 16F628) ||||&lt;br /&gt;
* Microchip PIC 16F648 (weil mehr Programmspeicher, als 16F628) |||||&lt;br /&gt;
* Microchip PIC 16F684 ||||| &lt;br /&gt;
* Microchip PIC 16F688 ||||| ||&lt;br /&gt;
* Microchip PIC 16F690 ||||| ||||| |||&lt;br /&gt;
* Atmel ATtiny84 ||||| ||||| |||| (gelistet aber erst verfuegbar ab II/07)&lt;br /&gt;
* TI MSP430F169 |&lt;br /&gt;
* FT245RL (alt bekannte FTDI Chips in neuer und besserer Version, FT232RL bereits vorhanden) ||||| ||&lt;br /&gt;
* 3,3V Längsregler SMD Ultra Low drop |||| (-&amp;gt; Zetex)&lt;br /&gt;
* Schiebepotis mit passenden Knöpfen | (Bestell-Nr. PSM-LIN* (&amp;quot;mono&amp;quot;) PSS-LIN* (&amp;quot;stereo&amp;quot;) nicht passed?) |&lt;br /&gt;
* OLED-Displays (zum Beispiel: [http://www.litearray.com/products-oled.php]) || (Reichelt hat jetzt Osram Pictiva Oleds im Programm. Nach &amp;quot;Pictiva&amp;quot; suchen)&lt;br /&gt;
* OSRAM &amp;quot;Golden Dragon&amp;quot; LEDs (http://www.osram-os.com/goldendragon) ||||&lt;br /&gt;
* Microcontroller mit USB-Anschluss (von Cypress oder Atmel in PDIP z.&amp;amp;nbsp;B. AT89C5131, AT43USB355, CY7C637xx) ||||| ||||| ||||| ||||| |||||  -&amp;gt;Bereits im Sortiment: Cypress EZ-USB TQFP-44 Best. Nr AN2131 SC, Atmel AT89C5131 SO-28/PLCC-52&lt;br /&gt;
* Renesas R8C &lt;br /&gt;
* zu Schaltreglern LM257x u.a. passende Speicherspulen mit hohem L , niedrigem R und großer Strombelastbarkeit (zB. Würth WE-PD4) (keine &amp;quot;Entstörspulen&amp;quot;) 96x gewünscht (suche L-PIS*)&lt;br /&gt;
* IL300 (linear Optokoppler z.&amp;amp;nbsp;B. von Vishay egal ob DIP oder SMD) ||||| ||||&lt;br /&gt;
* IL300H (linear Optokoppler von Siemens als DIP) - andere IL300 Varianten im Programm |||&lt;br /&gt;
* &amp;quot;optische&amp;quot; Drehgeber Fabrikat Grayhill sind lieferbar (Bst. ENC 62P22-*)&lt;br /&gt;
* mechanische Drehimpulsgeber von Alps im Programm (suche STEC*)&lt;br /&gt;
** Drehimpulsgeber (konkreter Vorschlag von O.R.: PEC16-4220F-S0024 von Bourns) 173x gewünscht&lt;br /&gt;
** Drehimpulsgeber- weiterer Vorschlag: ALPS Encoder ST EC 11B  64x gewünscht Im Programm (STEC11B01)&lt;br /&gt;
* PCA9633D16 4-bit I2C-bus LED driver ||&lt;br /&gt;
* I²C-Bus to 1-Wire DALLAS DS2482-100 bzw. DS2482-800  ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* Step-Down-Konverter in SMD Bauform (z.b. MC 34063): ||||| (-&amp;gt;Artikel-Nr: MC 34063 AD)&lt;br /&gt;
* Preiswerte Kontaktierungen für SD/MMC  ||| (Bereits im Programm: Bestell-Nummern:  CONNECTOR MMC 11 / CONNECTOR MMC 12 / CONNECTOR SD 21 / CONNECTOR SD 22) // ~9 EUR sind wohl kaum preiswert!&lt;br /&gt;
* Eisen(III)-Chlorid  115x gewünscht&lt;br /&gt;
* EA DOG-M128 128x64 Grafikdisplay aufbau ähnlich EA DOGM162 |||||&lt;br /&gt;
* 3,3V-Längsregler SMD zu vernünfitgen Preisen (Bsp: LF33 --&amp;gt; Best.Nr.: LF 33 CV, Preis: 0,76&amp;amp;#8364;)(der LT1086 kostet 4 Euro) ||||| ||||| ||||| ||||| |||||	||||| ||||| ||||| || -&amp;gt; LT1117 CST-3.3V für 1.55 €&lt;br /&gt;
* Spannungsregler in SMD-Version (7805 etc., nicht nur der 78L05) ||||| ||||| ||||| ||||| ||||| ||||| ||| -&amp;gt; LT1117-ADJ für 1.55€&lt;br /&gt;
* TSic Temperatursensoren von ZMD ||| -&amp;gt; TSIC&lt;br /&gt;
* Leiterplattenbuchse Hirschmann 4mm auch in *rot* (gab es schonmal als &amp;quot;PB 4 RT) || -&amp;gt; wieder als PB 4 RT erhältlich, letzte Woche 3 Stück geliefert bekommen; Stückpreis 1,25€&lt;br /&gt;
* MCP25050 CAN-Bus Input/Output Expander ||||| |||| (MCP 25050-I/*)&lt;br /&gt;
* Ethernet-Controller RTL8019AS 337x gewünscht (erhältlich: RTL 8019AS)&lt;br /&gt;
* SPI-Ethernet-Controller ENC28J60 (erhältlich: ENC 28J60-I/*)&lt;br /&gt;
* Microchip PIC 18F4550 (PIC mit USB) ||||| ||||| ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Microchip PIC 18F2585 ||||&lt;br /&gt;
* gleicher Mindestbestellwert in Österreich und in der Schweiz wie in Deutschland &#039;&#039;&#039; Seit 1.12.10 umgesetzt&#039;&#039;&#039; ||&lt;br /&gt;
* gleicher Mindestbestellwert in den Niederlanden wie in Deutschland | (mittlerweile überall 10€)&lt;br /&gt;
* Versand nach Österreich über GLS oder sonstigen Paketdienst &amp;amp; auf Rechnung, damit die Spesen halbwegs im Rahmen bleiben (bei der letzten Bestellung ca. EUR 40) ||||| ||||| ||||| ||||| ||||| ||||| ||| &#039;&#039;&#039;Anm.: Versand nach AT inzwischen ab 9,90&#039;&#039;&#039;&lt;br /&gt;
* Pakete nach Österreich in EINER Lieferung schicken, und nicht aus &amp;quot;logistischen Gründen&amp;quot; trennen. Würde zumindest die Hälfte der Verandkosten sparen (letztes mal fast 70€ pro Paket (!) ||&lt;br /&gt;
* Digitale Speicherosziloskope für PC ||||| ||||| || (Picoscope, PC-Oszilloskop)&lt;br /&gt;
* Hameg HM2008 Oziloscope || ( ist möglich über Service -&amp;gt; Produktservice -&amp;gt; neue Artikel anfragen)&lt;br /&gt;
* Microchip dsPIC30F ||||| ||||| |||&lt;br /&gt;
* Microchip PIC 16F883 und 16F886 |||&lt;br /&gt;
* Microchip PIC 18F4523 (12/2007: PIC mit 12-Bit A/D-Wandler) ||&lt;br /&gt;
* Microchip PIC 18F6585 |&lt;br /&gt;
* Microchip PIC 18F6720 |&lt;br /&gt;
* Microchip PIC 18F8720 |&lt;br /&gt;
* Microchip PIC 24FJ64GB002-I/SP (USB-OTG im DIP28 Gehäuse) |&lt;br /&gt;
* Atmel XMega-Typen, z.B. ATXMega64A4, ATXMega128A1 ||||| ||&lt;br /&gt;
* 7-Segment-Anzeige, blau, gem. Kathode ||||| ||||| ||||| ||||| ||||| ||||| || (SC 52-11 BL)&lt;br /&gt;
* 7-Segment-Anzeige, blau, gem. Anode ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| |||| (SA 52-11 BL, SA 56-11 BL)&lt;br /&gt;
* EA DOG-L128 128x64 Grafikdisplay zzgl Touch-Folie und Beleuchtung | --&amp;gt; ist ab Katalog 06/2009 drinn&lt;br /&gt;
* LTC 1661 N8 10 Bit Dual Dac mit SPI Interface | (LT C1661 CMS8)&lt;br /&gt;
* Microchip PIC 10F2xx (+ Programmiergerät) ||||| ||||| ||||| ||| (einige Varianten erhältlich, Programmiergerät nicht sicher)&lt;br /&gt;
* Microchip PIC 24 ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Microchip PIC32 (MIPS) ||||| ||||| ||||| |||&lt;br /&gt;
* Microchip dsPIC33 ||||| ||||| ||||&lt;br /&gt;
* WAGO 215-4mm-Stecker (Bananenstecker mit Käfigzugklemme) zur schnellen Montage bei Versuchsaufbauten ||||| ||||| ||||| ||||| ||| (dieser Wunsch wurde erhört, Hurraa! Best.-Nr. Wago 215-x11, Vielen Dank an Reichelt.)&lt;br /&gt;
* Philips PCA9555 (I2C IO, 16 Bit par. I/O, c&#039;t Project Soundcheck II) |||||&lt;br /&gt;
* ADuM 1201 o. ADuM1401, bzw. andere ADuMxxxx oder ISOxxxx - Digitale Übertrager mit galvanischer Trennung |||&lt;br /&gt;
* LM2675 SimpleSwitcher Step-Down-Konverter in SO-8 Bauform&lt;br /&gt;
* Sharp Entfernungssensoren (zb den GP2D120 oder den GP2D12) 51x gewünscht---- siehe Reichelt Artikel : GP2-0430 und GP2-1080&lt;br /&gt;
* TSOP31238 (Besserer Ersatz (2,5-5,5V) für den nicht mehr Lieferbaren TSOP1738) || --- Artikel-Nr. &amp;quot;TSOP 31238&amp;quot;&lt;br /&gt;
* ERSA Lötspitzen der Serie 842 (besonders die feinen) Reichelt führt bis jetzt nur 832, die feinen davon sind aber recht unbrauchbar |||| --- sind nach einer freundlichen Mail in den Katalog aufgenommen worden. Artikel-Nr. &amp;quot;SPITZE 842&amp;quot;&lt;br /&gt;
* Atmel ATSTK600 von [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4254 Atmel] |||| (AVR STK 600)&lt;br /&gt;
* Atmel AVR Dragon von [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3891 Atmel] ||||| ||||| ||||| ||||| ||| (AT AVR DRAGON)&lt;br /&gt;
* Option zum anklicken beim Versand, &amp;quot;nichtverfügbare Artikel automatisch streichen&amp;quot;, wenn man das ins Kommentarfeld schreibt wirds nicht beachtet, oder bis das jemand liest dauert es wieder mehrere tage. (In der Zwischenzeit realisiert!!) ||||| ||||| ||||| || (oder klare Anzeige wie viel noch vorhanden ist)&lt;br /&gt;
* AVR mit USB: AT90USB1287 (AT 90USB1287 TQ, TQFP64), dazu passendes Demoboard AT 90USB KEY; AT90USB162TQ (AT 90USB162 TQ, TQFP32), AT90USB646 (AT 90USB646 TQ, TQFP64), AT90USB1286QFN (AT 90USB1286 QFN, QFN64), ATmega32u2 (ATMEGA 32-U2 TQ, TQFP44)&lt;br /&gt;
* Buchsenleisten 2.54mm (z.&amp;amp;nbsp;B. BL 1X...G 2,54) TEILBAR, *zum Auseinanderbrechen* (laut Anfrage vom 26.10.2009 nicht im Sortiment) (SPL 64?) {{Reichelt50|FF0000}}||||| ||||| ||||| ||||| ||||| ||||| ||||| |&lt;br /&gt;
* TLE 4905L :: Hallsensor, 3,8-24V ist lieferbar (20.12.11)&lt;br /&gt;
* Atmel DataFlash, z.&amp;amp;nbsp;B. AT45DB081B (8 MBit Flash-Speicher an seriellen Bus im 8poligen Gehäuse) {{Reichelt50|FF0000}}{{Reichelt50|00FF00}}||||| |&lt;br /&gt;
* Kupferlackdraht auf Spulen statt lose (Artikelbild ist irreführend!) ||||| (zu haben unter CUL 100 und CUL 500 von 0,1 bis 2mm Durchmesser)&lt;br /&gt;
* IRC540 (HEXFET) | (kann ggf. durch bereits vorhandenen IRCZ 44 ersetzt werden)&lt;br /&gt;
* Niederohm-FETs in SO8, N und P ||||| ||||| ||&lt;br /&gt;
* generell Spannungsregler, LOW-DROP, SMD (DPAK, D2PAK) &lt;br /&gt;
* Spannungsregler SMD in DPAK ||||| ||||| ||||| ||||| |||| (u.a. MC 78M05 CDTG)&lt;br /&gt;
* MCP23016 16Bit I²C I/O Expander ||||| ||||| ||| (verfügbar)&lt;br /&gt;
* MCP23S17 16Bit SPI I/O Expander (aber ohne Schmidt-triggerd Eingänge wie der 23x16) ||&lt;br /&gt;
* LT-1117-CST-5 als Sot223 (adj und 3.3 gibts schon, 5 fehlt noch) |&lt;br /&gt;
* UM232 FTDI USB - RS232 Modul für DIL sockel |||||&lt;br /&gt;
* TI eZ430-Chronos ||&lt;br /&gt;
* Generell SMD-Kerkos im Wert &amp;gt; 100nF (unter 1206/1210 High-Cap zu finden) {{Reichelt50|FF0000}} {{Reichelt50|00FF00}} |&lt;br /&gt;
* Zum MAX232 so20 passende SMD-Kerkos im Wert 1µF (0805, 0603, 1206) ||||| ||||| ||||| ||||| |||&lt;br /&gt;
* Kühlerplatinen für Power-LEDs im Star-Format oder vergleichbar |&lt;br /&gt;
* warmweiße LED ||||| ||||| ||||| ||||&lt;br /&gt;
* weiße SMD-LED Bauform 0603 ||||| ||||| |||||&lt;br /&gt;
* Folientastaturen {{Reichelt50|FF0000}}||||| ||||| |||||&lt;br /&gt;
* Micro-USB 2.0-Buchsen (Printmontage und SMD-Montage) ||&lt;br /&gt;
* Micro-USB-Steckverbinder ||||| |||| &lt;br /&gt;
* Einpolige Steckerleiste 2.54 ||||| |||&lt;br /&gt;
* gängige Platinenverbinder einreihig RM 2mm mit 2-15 Kontakten (in vielen Geräten verwendet, z.&amp;amp;nbsp;B. [http://www.newproduct.molex.com/datasheet.aspx?ProductID=19945 Molex 51004, 53015]): ||||| Molex 71226 |||&lt;br /&gt;
* Platinensteckverbinder für Rastermass 2,00mm ||||&lt;br /&gt;
* Wannenstecker 6-Pol. gewinkelt, gibt nur gerade (WSL 6W, aber derzeit nicht lieferbar) ||||&lt;br /&gt;
* Wannenstecker (gerade) + Pfostensteckverbinder 6-Pol. (Pfostenbuchsen gibt es 6-Pol.) ( z.&amp;amp;nbsp;B. Harting SEK 18 Serie http://www.harting.com/en/en/de/sol/verbtech/prod/ios/description/03005/index.de.html) (Lieferbar: PFL 6 und WSL 6G) ||||| ||||| ||||| ||||| ||||| ||||| ||||&lt;br /&gt;
* RP-SMA-Buchse/-Stecker (gewinkelt/gerade) ||||&lt;br /&gt;
* Schuko-Einbausteckdose (Maschinensteckdose) (mit oder ohne Klappdeckel); Flanschmaß möglichst klein (50mmx50mm); div. Farben (sw,grau,...) ||||| ||||| |||&lt;br /&gt;
* Distanzbolzen mit 2 M2,5-Innengewinden versch. Längen ||&lt;br /&gt;
* Flachbandkabel im 1,27 mm-Raster, 6-polig ||||&lt;br /&gt;
* kurze (10cm, 30cm, 50cm)-Kabel zB.: USB A-&amp;gt;B, A-&amp;gt;Bmini, A-&amp;gt;Bmicro; Klinke/Cinchkabel ||||&lt;br /&gt;
* hochwertige MicroUSB-Kabel (AK 676-AB rupft einem fast die Buchse aus dem Handy) ||| &lt;br /&gt;
* PATCHKABEL xx WS: Cat5 Patchkabel SF/UTP auch in weiß (deutlich dünner, flexibler und auch günstiger als die Cat6 PiMF) |&lt;br /&gt;
* der Reichelt Katalog auf CD/DVD (durch pdf-download überflüssig:) |||||&lt;br /&gt;
* Reichelt Katalog als PDF zum Download (siehe [[Reichelt PDF Katalog]] ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||&lt;br /&gt;
* Reichelt-Gutscheine sollten bei Online-Bestellung einlösbar sein (wie bei z.&amp;amp;nbsp;B. Amazon) ||||| ||||| |||||&lt;br /&gt;
* Sortieren und Spezifizieren der Angebotsliste in Transistoren / FET (bessere Übersicht) ||||| ||||| ||||| ||||| || z.&amp;amp;nbsp;B. 400V/6A würde schonmal ganz grob helfen und senkt außerdem unnötigen Traffic, weil nicht extra jedes Datenblatt angeschaut wird&lt;br /&gt;
* Raspberry Pi ||||| |||&lt;br /&gt;
* J-FET BF545 A,B,C (entspricht BF245 in SMD ) |&lt;br /&gt;
&lt;br /&gt;
= Sonstiges =&lt;br /&gt;
&lt;br /&gt;
== zur Webseite ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Eine Möglichkeit das User Eagle-Libs zu den Bauteilen hochladen können.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
In &amp;quot;Neu in unserem Shop&amp;quot;/Neue Artikel werden unter Bauelemente u.a. Computerkabel und PC-Speicher angezeigt (Anlass Stand 5/2010, ist aber schon früher aufgefallen). Diese Teile würden zumindest etwas besser in PC-Technik passen. (...und die Freude des Elektronikbastlers über eine Anzahl neuer Bauelemente würde auch nach Auswahl der Details anhalten, wenn es nicht &amp;quot;nur&amp;quot; so etwas wie USB-Kabel sind.)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
myReichelt ermöglicht: &lt;br /&gt;
* Warenkorbspeicherung&lt;br /&gt;
* öffentlicher Warenkorb&lt;br /&gt;
* CSV-Import, -Export&lt;br /&gt;
&lt;br /&gt;
zu myReichelt siehe auch http://www.mikrocontroller.net/topic/62628&lt;br /&gt;
&lt;br /&gt;
Eine Webseite ohne Frames ist eigentlich heute Stand der Technik. Oder vielleicht ist es das auch nicht mehr - ich weiss es nicht aber nach meiner Auffassung sollte es Stand der Technik sein. Denn dann hat man für jedes Produkt auch einen eindeutigen Link und kann ggf. auch in Beiträgen, Mails und Anfragen darauf verlinken.&lt;br /&gt;
&lt;br /&gt;
Anmerkung dazu:&lt;br /&gt;
Verlinken auf Artikel geht schon, und zwar in der Form:&lt;br /&gt;
http://www.reichelt.de/?ARTIKEL=ATMEGA%208-16%20DIP&lt;br /&gt;
bzw.&lt;br /&gt;
http://www.reichelt.de/index.html?ARTIKEL=ATMEGA%208-16%20DIP&lt;br /&gt;
&lt;br /&gt;
Neu zu lesen unter &amp;quot;Info zum Shop&amp;quot;:&lt;br /&gt;
Zitat:&lt;br /&gt;
&amp;quot;Frames&lt;br /&gt;
In vielen Votings wurden wir auf die Verwendung von Frames hingewiesen und dass diese Technik nicht mehr -State Of The Art- sei. Dieser Meinung schliessen wir uns in vollem Umfang an. In unserem neuen Shop werden KEINE FRAMES verwendet.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Reichelt selbst macht das in seinen PDF-Prospekten auch so. Das Problem liegt nur darin, die URL jedesmal von Hand zusammenzubauen (und dabei auf die Ersetzung der Leerzeichen durch %20 zu achten) oder von einer kopierten URL alles überflüssige zu entfernen.&lt;br /&gt;
&lt;br /&gt;
Einfach mal einen &amp;quot;Permalink&amp;quot; button neben &amp;quot;Artikel empfehlen&amp;quot; ? Oder zurück mit der früheren Druckansicht.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Viele Browser ersetzen Leerzeichen im Adressfeld automatisch durch %20. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ferner sollte es möglich sein, Bestellungen, welche noch nicht bearbeitet werden zu verändern, also z.&amp;amp;nbsp;B. was hinzuzufügen oder zu entfernen. Bei einer Wartezeit von ca. 3 Tagen bis zum Versand fällt einem doch noch was ein :-)&lt;br /&gt;
&lt;br /&gt;
Das wird bereits gemacht! Einfach E-Mail an service@reichelt.de mit den Bauteilen, die man noch haben will. I-Net-Nummer nicht vergessen.&lt;br /&gt;
&lt;br /&gt;
Andere Möglichkeit ist anrufen, das mache ich eh immer, um eventuell nicht lieferbare Dinge zu streichen oder zu ersetzen. Geht immer, es sei denn Lieferung wird schon verpackt.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Shopprogramm: Wäre es nicht komfortabel, ein Programm auf dem heimischen Rechner zu haben, welches das aktuelle Sortiment mit den aktuellen Preisen führt, wo dann auch offline Bestellungen zusammengestellt und hochgeladen werden können? So ließen sich die Merklisten auch besser verwalten.&lt;br /&gt;
&lt;br /&gt;
Ja, das fände ich auch sehr toll, sollte man mal drüber nachdenken.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Passwortschutz: Die derzeitige Lösung der Anmeldung im Shop ist für den heutigen Stand der Dinge recht unsicher. Ein zur Kundennummer gehörendes Passwort sollte schon sein. Was soll schon passieren, die Versandadresse ist ja bekannt, und wenn jemand anderes auf meinen Namen bestellt. lässt er sich über die Versandadresse herrausfinden, außerdem weiß ja auch nicht jeder meine Kundennummer.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Eine Art Lagerbestand im Onlineshop wäre sinnvoll. Es ist mehr als ärgerlich, wenn bei einer Bestellung z.&amp;amp;nbsp;B. Kleinteile wie Kondensatoren oder Schalter fehlen, weil sie nicht auf Lager waren. Dabei gibt es gerade bei solchen Teilen genug Alternativen, sei es Farbe, Bauart oder Wert, auf die man umsteigen könnte, damit die Bestellung vollständig ist. Es würde ja vollkommen ausreichen den Bestand in Form einer Ampel, wie bei anderen Shops, mit grün, gelb und rot zu realisieren.&lt;br /&gt;
&lt;br /&gt;
Im Warenkorb werden Artikel, die nicht auf Lager sind, mittlerweile auch so gekennzeichnet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Früher würden neue Artikel mit einem gelben &amp;quot;NEU&amp;quot; gekennzeichnet, jetzt ist das nicht mehr so. Hätte gerne wieder einen Überblick, was neu hinzugekommen ist ohne jede Artikelgruppe aufrufen zu müssen. ||&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Artikelsuche: Bitte standardmäßig in der Liste alle Suchergebnisse anzeigen, nicht nur 16 Stück (oder wenigstens eine vernünftige Anzahl). Die Zeiten der 56k-Modems sind vorbei. |||&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Eine vernünftige Suchfunktion. Beispiel: Ich suche nach &amp;quot;Schnurschalter&amp;quot;. Dann will ich auch Schnurschalter sehen und nicht alle Produkte, in denen der Begriff &amp;quot;Schalter&amp;quot; vorkommt. Sowas ist doch wirklich vorsinflutlich. |&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Nummerierung der Bauteile: Warum wird der Warenkorb nicht nummeriert. Ich hasse es wenn ich manuell mit Hand zählen muss! Das ist auch nervig wenn man manuell per Hand vergleichen will!&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Virtuelle Bauteilekisten (vbox): Wer bei Reichelt bestellt, ordert oft viele viele Kleinteile. Wenn man nun ein Gerät zum wiederholten mal baut, muss man alle Teile erneut eingeben. Könnte ich nun neben dem Warenkorb auch noch virtuelle Bauteilekisten füllen, würde das neue Bestellungen sehr beschleunigen. Der Kunde als Wiederholungstäter sozusagen.&lt;br /&gt;
&lt;br /&gt;
Konkret:&lt;br /&gt;
Ich habe vier verschiedene Elektronikprojekte entwickelt.Für jedes dieser Projekte lege ich bei Reichelt.de eine virtuelle Bauteilekiste mit eigenem Namen an. Die Zusammenstellung der Artikel funktioniert wie beim normalen Warenkorb. Wenn ich nun ein Projekt erneut bauen möchte, kopiere ich einfach den Inhalt der virtuellen Bauteilekiste per Knopfdruck in meinen Warenkorb. Wenn ich Projekt2 also dreimal nachbauen möchte kopiere ich die virtuelle Bauteilebox &amp;quot;Projekt2&amp;quot; dreifach in den Warenkorb.&lt;br /&gt;
Schön wäre es auch die virtuellen Bauteilekisten mit Schaltplan und ev. Eagle  - Dateien veröffentlichen zu können.&lt;br /&gt;
&lt;br /&gt;
Und wieso ist der Login, den es früher mal gab weg? Da konnte man zumindest den aktuellen Warenkorb speichern soweit ich mich erinnern kann, aber seit der neuen Website gibt&#039;s den Login nicht mehr. Ausserdem muss ich jetzt jedesmal meine Kundennummer rauskramen um meine Bestellung abzusenden - Conrad löst das beispielsweise besser. (dafür haben die aber auch ne besch...eidene Suchfunktion und nen unübersichtlichen Shop)&lt;br /&gt;
&lt;br /&gt;
Nebenanregung:&lt;br /&gt;
Damit die &amp;quot;Bauteilekisten&amp;quot; nicht unmengen Platz beim Anbieter verschwenden könnte man diese auslagern.&lt;br /&gt;
Also Nach erstellen Download als einfaches File und bei Bedarf einfach bei Bestellung übertragen.&lt;br /&gt;
So könnte sie jeder in Ruhe offline vorbereiten und verwalten.&lt;br /&gt;
&lt;br /&gt;
IDEE: Offenlegung der Datenbank: Offenlegung der Datenbank oder zumindest Export für die User. Somit koennten die Datenbank in eine Art Datenbank gespeichert werden. Als Katalogprogramm koennte dann soetwas ähnliches wie das von Segor zum Einsatz kommen. Gibt es einen Standard dann koennten  Reichelt, Conrad, Segor, etc. mit einem Programm genutzt und verglichen werden:&lt;br /&gt;
siehe auch http://www.mikrocontroller.net/forum/read-7-363596.html&lt;br /&gt;
Programmierunterstuetzung findet sich bestimmt. Abgesehen davon haben die Distributoren den Vorteil die Katalogdaten übers Internet upzudaten.&lt;br /&gt;
&lt;br /&gt;
Zum offenlegen der Datenbank: Wie wäre es mit einem Webservice, mit dem man über SOAP auf die Datenbank zugreifen kann? Ähnlich wie bei Amazon oder auch Google.&lt;br /&gt;
&lt;br /&gt;
Lösung in HTML:&amp;lt;br/&amp;gt;&lt;br /&gt;
Ich hatte für das Projekt [http://www.mikrocontroller.net/topic/82127 &amp;quot;Webserver ATmega32/644DIP ENC28J60&amp;quot;] ein Bestellformular ([http://www.mikrocontroller.net/attachment/29451/reichelt.htm reichelt.htm] &amp;lt;span style=&amp;quot;font-size: 0.8em;&amp;quot;&amp;gt;[Version vom 22.12.2007]&amp;lt;/span&amp;gt;) gebastelt um schnell alle nötigen teile in den Reichelt – Warenkorb zulegen. Mit etwas HTML-Kenntnis dürfte eine Anpassung nicht das Problem darstellen.&amp;lt;br/&amp;gt;&lt;br /&gt;
In JavaScript, des &#039;&#039;&#039;reichelt.htm&#039;&#039;&#039; Bestellformulars, die Funktion &amp;lt;code&amp;gt;&#039;&#039;&#039;send()&#039;&#039;&#039; &#039;&#039;Zeile 42:&#039;&#039; var maxElements = 40;&amp;lt;/code&amp;gt; die &#039;&#039;&#039;40&#039;&#039;&#039; durch die Anzahl der unterschiedlichen Bauteile Anpassen.&lt;br /&gt;
&lt;br /&gt;
== zu Artikeln ==&lt;br /&gt;
&lt;br /&gt;
* Spitze fände ich eine verbesserte Suche für Gehäuse. Oft stehe ich vor dem Problem, meine Baugruppe ist so-und-so groß und ich brauche ein Gehäuse, in das diese Baugruppe hineinpasst. Zur Zeit muss ich mich manuell durch alle Gehäusegrößen &amp;quot;durchwühlen&amp;quot;, bis ich ein passendes gefunden habe. Die Suche stelle ich mir so vor: Ich gebe die Maße ein, die das Gehäuse mindestens haben &#039;&#039;muss&#039;&#039;, und bekomme alle Gehäuse angezeigt, die genau so groß oder etwas größer sind als meine Vorgaben.     --&amp;gt; schau mal bei den Gehäuse-Herstellern - bei [http://www.tekogehaeuse.de/ teko] gibts das und dann einfach mit der Bestellnummer in Reichelt suchen - die meisten gibts..&lt;br /&gt;
&lt;br /&gt;
== Abwicklung ==&lt;br /&gt;
&lt;br /&gt;
* Sammelbestellung: Wenn ich etwas bei Reichelt bestelle, bestelle ich für meine Kollegen auch immer etwas mit. Wenn dann das Päckchen kommt, heisst es sortieren. Wer hatte von was, wie viel? Danach kommt das rechnen dran. Ein besonderes Highlight, sind die Nettopreise. Und auch das Verteilen der Versandkosten ist nicht ohne. Währe es nicht möglich, im Bestellvorgang eine Zuordnung zu Personen oder Projekten zu realisieren, und die Zwischensummen der Personen oder Projekte auf der Rechnung oder per Mail anzugeben. Ein Schmankerl wäre die Angabe der Bruttopreise inklusive der anteiligen Versandkosten.&lt;br /&gt;
** Wahrscheinlich nicht möglich, siehe AGB-Klausel zu Massenbestellungen. &amp;quot;Garantieberechtigt&amp;quot; ist auch immer nur der ursprüngliche Besteller.&lt;br /&gt;
** Welche Klausel? Mir fällt nur 13.3 ins Auge...&lt;br /&gt;
&lt;br /&gt;
* Abpackgrößen bei SMD-Bauteilen auf 5- oder 10er-Schritte beschränken. Die meisten sind eh im Cent-Bereich und es dürfte logistisch einfacher/schneller sein, feste Stückzahlen vorzuhalten, was man preislich sicher an die Kunden weitergeben kann ;)&lt;br /&gt;
&lt;br /&gt;
* Private Bestellungen an den Arbeitsplatz: Da ich oft nicht zur Post gehen kann, wenn eine private Bestellung von DHL niedergelegt wird, will ich als Lieferanschrift den Firmennamen und in der zweiten Zeile meinen eigenen Namen angeben können. So kann ich die Lieferung an meinem Arbeitsplatz entgegennehmen.&lt;br /&gt;
In grossen Firmen ist aber eine Voraussetzung dafür, das die Anschrift in korrektem Format angegeben werden kann.&lt;br /&gt;
&lt;br /&gt;
Z.B.&lt;br /&gt;
&lt;br /&gt;
Firma Time Machines&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
z.Hd. Max Mustermann          /* oder auch &amp;quot;c/o Max Musterman&amp;quot; oder nur &amp;quot;Max &lt;br /&gt;
Mustermann&amp;quot; */&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Sowiesostr. 17&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
12345 Musterstädtchen&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehlt die Angabe des Namens, so wird der Wareneingang die Annahme entweder gleich verweigern, weil die Sendung nicht erwartet wird, herumfragen wer eine Sendung erwartet oder das Päckchen öffnen. In den beiden letztere Fällen hat man spätestens nach zweimaligen Auftreten einen Rüffel vom Chef zu erwarten, wegen des Aufwandes den man verursacht. Das meine private Post geöffnet wird, mag ich auch nicht (wenn hier der Wareneingang auch durchaus berechtigt ist, das zu tun).&lt;br /&gt;
&lt;br /&gt;
Problem 1: Das Bestellformular erlaubt es aber nicht die Lieferanschrift korrekt formatiert einzugeben. Die unter Vorname und Name/Firmenname angebotenen Felder werden in einer Zeile zusammengezogen. Das aber ist geeignet zu suggerieren, das der Name Teil des Firmennamens ist (mit allen rechtlichen Konsequenzen). Gibt man in die beiden unbenannten Zeilen unter Name/Firmenname etwas ein so wird diese Eingabe bei der Anzeige der Bestelldaten nicht angezeigt.&lt;br /&gt;
&lt;br /&gt;
Problem 2: Ich habe nun mindestens zwei Mal in die Bemerkungen bei der Bestellung die korrekt formatierte Anschrift (wie oben) eingegeben. Das Problem ist aber, das in der Bestellbestätigung in der Lieferanschrift die zweite Zeile fehlt.&lt;br /&gt;
&lt;br /&gt;
Problem 3: Auf meine telefonische Nachfrage wird mir erst erklärt, das ja auf dem Lieferschein die komplette Eingabe ausgedruckt ist. Auf meine Einwendung, das die Sendung ja dann nicht mir persönlich zuzuordnen ist und evtl. entweder gleich abgewiesen oder geöffnet wird, wurde erklärt, dass auch der Adressaufkleber diese Angabe enthält. Auf meine weitere Einwendung, das dies aber in der Bestellbestätigung nicht erkennbar ist, wurde erklärt, das zwischen dem Adressaufkleber und der Bestellbestätigung Unterschiede bestehen.&lt;br /&gt;
Auf meine vierte Einwendung, das man das doch bitte abstellen solle, um unnötige Nachfragen zu vermeiden, wurde das verweigert.&lt;br /&gt;
&lt;br /&gt;
Ich wünsche mir alle vier Probleme abgestellt. Vor allem da ich das nun schon mindestens vor einem Jahr mal bei Reichelt angezeigt habe. ||&lt;br /&gt;
&lt;br /&gt;
Nicht sehr kundenfreundlich und eigentlich Reichelt-untypisch&lt;br /&gt;
&lt;br /&gt;
== Rücksendungen / Reklamationen ==&lt;br /&gt;
&lt;br /&gt;
wurden nach unseren Erfahrungen früher (unter dere alten Chefin) viel kulanter gehandhabt. Seit ein paar Jahren wird bei Rücksendungen peinlich genau zwischen privat und Gewerbekunden unterschieden. Als Gewerbekunde mache wir 5 stellige Umsätze und kommen regelmässig in einen Rabatt für Warengruppe 1. Da passiert es natürlich schon mal, daß etwas versehentlich falsch bestellt wird und auch nicht gleich verarbeitet. Wegen dem Rücksendeporto ist das ok, aber obwohl originalverpackt, wurde jetzt bereits nach 8 Wochen eine Rücksendung verweigert so daß man das Zeugs jetzt wohl oder übel wegwerfen oder in Ebay vertickern muss. Entspricht natürlich den gesetzlichen Vorgaben bzw. übertrifft diese sogar weil bei Vollkaufleuten gar nix zurückgenommen werden muss. Solche Vorgänge sind bei Bürklin oder Schukat aber regelmäßig kein Problem.&lt;br /&gt;
&lt;br /&gt;
== zu dieser Wunschliste ==&lt;br /&gt;
&lt;br /&gt;
(gehört eigentlich in Diskussion)&lt;br /&gt;
&lt;br /&gt;
* Wäre es möglich ein Script zu bauen, welches man ab und zu über diesen Artikel jagt und das die Einträge nach Anzahl der Striche ordnet? =&amp;gt; Formatierung als Tabelle (1. Spalte: das Teil, 2. Spalte: die Striche) würde auch schon helfen.&lt;br /&gt;
** Das geht kaum, weil | ein SOnderzeichen in Vorlagen ist.&lt;br /&gt;
&lt;br /&gt;
* Dass hier jeder immer nur einen Strich macht, glaube ich nicht! Ein Script was pro IP nur einen Strich zulässt wäre gut. -&amp;gt; Naja, alle 24h spätestens gibt es eigendlich eine neue IP...   Antwort: Lässt sich sehr leicht überprüfen mit Artikel -&amp;gt; Versionen&lt;br /&gt;
&lt;br /&gt;
* Warum macht der 5te nicht anstelle |||| ein V :-) und anstelle vom nächsten V kommt dann ein X ....Daniel [[Benutzer:84.179.17.164|84.179.17.164]] 20:11, 4. Feb 2006 (CET)&lt;br /&gt;
::Sehr clever. Das würde es Reichelt bestimmt enorm erleichtern, stark nachgefragte Artikel schnell zu erkennen. *facepalm* ;-)&lt;br /&gt;
&lt;br /&gt;
* Wenn Reichelt was aus der Liste neu ins Programm aufnimmt wäre eine Benachrichtigung per Newsletter oder RSS nett. Oder zumindest eine Rubrik &amp;quot;Seit XX.XX.200X neu im Programm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Logbuch ==&lt;br /&gt;
&lt;br /&gt;
20.03.2012: Sensorik Aktorik: Merge und alphabetische Sortierung&lt;br /&gt;
&lt;br /&gt;
19.03.2012: Aufräumarbeiten (&amp;gt;50 eingefärbt, Blöcke &amp;gt;5 getrennt)&lt;br /&gt;
Dachte dafür gibts hier einen Bot, der dann auch am besten gleich nach Wunschhäufigkeit sortieren könnte...derweil habe ich den Bio-Bot gemacht...hoffe das geht OK, oder gibts da FESTE Zuständigkeiten?&lt;br /&gt;
&lt;br /&gt;
07.10.2011: Reichelt über Facebook drauf aufmerksam gemacht - man schaue sich die Liste regelmäßig durch :)&lt;br /&gt;
&lt;br /&gt;
01.10.2011: Umfangreiche Neuordnung der gesamten Wishlist: Neue Unterkategorien, alphabetische Sortierung, Zusammenführung gleicher Wünsche aus verschiedenen Kategorien, Fix diverse Falsch-Einsortierungen, Update inzwischen erhältlicher Teile, Ausbau einzelner Einträge für bessere Sortierung und mehr Info beim Lesen (nicht nur IC-Namen), etc. Vielleicht hat ja noch jemand nen Einfall für die Sichtbarmachung besonders nachgefragter Einträge, Fett- und Kursivdruck der &#039;&#039;&#039;&#039;&#039;|||||&#039;&#039;&#039;&#039;&#039;-Blöcke funktioniert ja leider nicht... &lt;br /&gt;
&lt;br /&gt;
...bei Ausrufezeichen funktionierts aber. Meinungen zur Farbe und der Auslagerung in eine Vorlage?--[[Benutzer:Bzzz|Bzzz]] 14:49, 1. Okt. 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
03.03.2011: E-Mail wurde an Reichelt-Verwaltung geschrieben.&lt;br /&gt;
&lt;br /&gt;
8.4.2010: Mail an Reichelt geschickt und an die Liste erinnert.&lt;br /&gt;
&lt;br /&gt;
2.10.2009: REVERT auf die Version vor dem 20.Jul.2009 12:47. Da der Artikel von 193.200.150.82 &amp;quot;verdoppelt&amp;quot; wurde. D.h. alles war doppelt vorhanden und die Einleitung gelöscht&lt;br /&gt;
&lt;br /&gt;
19.06.2009: Hab mal den Kram unter der Rubrik &amp;quot;Webseite&amp;quot; entfernt/zusammengefasst der schon realisiert wurde. -- Tobias&lt;br /&gt;
&lt;br /&gt;
12.03.2009: Da haben wir ja alle verpennt, Reichelt in 2008 mal wieder an die Liste zu erinnern. Ich hab das jetzt mal nachgeholt und eine Mail an Reichelt geschickt. -- [http://www.reintechnisch.de Winfried Mueller]&lt;br /&gt;
&lt;br /&gt;
03.08.2007: Das Feld für &amp;quot;neue Artikel&amp;quot; scheint aus dem Reichelt Shop entfernt worden zu sein, schade da man so schnell schauen konnte was neu im Programm ist, nun ist wieder Katalogblättern angesagt. - Nicht nachvollziehbar. siehe Startseite-&amp;gt;Service-&amp;gt;Neu in unserem Shop &lt;br /&gt;
&lt;br /&gt;
18.05.2007: Habe Reichelt an diese Liste erinnert. -- Robin Tönniges&lt;br /&gt;
&lt;br /&gt;
14.11.2006 Ich lese mir gerade euer Wishlist durch. Finde ich gut! Aber wie ihr &lt;br /&gt;
hier (Logbuch) über Reichelt kritisiert finde ich nicht fair! Die haben genug zu arbeiten! Bitte keine Vorurteile! Um das gehts mir hauptsächlich!&lt;br /&gt;
Macht weiter nur nicht so! &lt;br /&gt;
P.S. Schöne inforeiche Site&lt;br /&gt;
Steven&lt;br /&gt;
&lt;br /&gt;
6.8.2006 Habe eine umfassende Kritik zu Reichelts neuem Webshop geschrieben und dabei auf unsere Wünsche bzl. Webseite, insbesondere &amp;quot;Virtuelle Bauteilebox&amp;quot; und &amp;quot;Gehäusesuche&amp;quot; hingewiesen. Verlinkung auf diese Seite ist auch erwähnt worden.&lt;br /&gt;
&lt;br /&gt;
5.8.2006 Hurra, Reichelt bietet endlich den ATtiny13V an! Jetzt können wir  Batteriebetriebene Geräte (2,4-3V) bauen. By the way: Gibt es blaue LED&#039;s, die dazu passen?&lt;br /&gt;
&lt;br /&gt;
14.7.2006 Reichelt antwortete: (Zu lang, deshalb hier nur der Inhalt:) Wir haben                                                                                    ihre mail zur Kenntnis genommen (Forum wird angeblich ab und zu immer wieder kontrolliert). Entscheidender Satz (Original eines Mitarbeiters:)....Ich denke jedoch, dass die meisten und&lt;br /&gt;
wichtigsten Wünsche zum Herbstkatalog eingelistet werden.&lt;br /&gt;
&lt;br /&gt;
14.7.2006 Reichelt erneut auf diesen Beitrag aufmerksam gemacht, erwarte Antwort.&lt;br /&gt;
&lt;br /&gt;
3.7.2006: beitz-online.de eine verlinkung gemailt. Ich hoffe das ist erlaubt.&lt;br /&gt;
&lt;br /&gt;
5.3.2006: Verlinkung gemailt&lt;br /&gt;
&lt;br /&gt;
12.10.2005: Verlinkung gemailt und gebeten sich darum zu kümmern&lt;br /&gt;
&lt;br /&gt;
07.10.2005: Reichelt eine Verlinkung gemailt und speziell auf LOW ESR Elkos und 433 Mhz Funkmodule hingewiesen. Mal sehen was die Antworten.&lt;br /&gt;
&lt;br /&gt;
08.07.2005: Reichelt bescheid gegeben, man möge mal wieder hier rein schauen -- Thomas O.&lt;br /&gt;
&lt;br /&gt;
13.05.2005: Antwort von Reichelt: der Versand ins Ausland bleibt leider bei 150 Eur -- nurmi&lt;br /&gt;
&lt;br /&gt;
09.05.2005: Reichelt bescheid gegeben, man möge mal wieder hier rein schauen -- nurmi&lt;br /&gt;
&lt;br /&gt;
08.05.2005: Pflege der Liste hier: Wenn ihr was in der Liste seht, was bereits schon im Angebot ist, löscht es bitte! Sonst ist das hier bald ein unüberschaubares Chaos. -- [http://www.reintechnisch.de Winfried Mueller]&lt;br /&gt;
&lt;br /&gt;
08.02.2005: Positives Feedback von Reichelt. Freuen sich über diese Form der Anregung. In der 2. Märzhälfte sollen weitere Produkte in den neuen Katalog einfließen. -- [http://www.reintechnisch.de Winfried Mueller]&lt;br /&gt;
&lt;br /&gt;
07.02.2005: Reichelt bescheid gegeben, man möge mal wieder hier rein schauen -- [http://www.reintechnisch.de Winfried Mueller]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bauteile]]&lt;br /&gt;
[[Kategorie:Lieferanten]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Diskussion:EKG_mit_XMC_%C2%B5C&amp;diff=84743</id>
		<title>Diskussion:EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Diskussion:EKG_mit_XMC_%C2%B5C&amp;diff=84743"/>
		<updated>2014-09-02T22:31:30Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: Die Seite wurde neu angelegt: „Hallo Forengemeinde,  ich habe noch ein paar von den EKG Platinen übrig. Wenn jemand Interesse daran hat - sei es zum Nachbauen, zum Weiterentwickeln, als Exp…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hallo Forengemeinde,&lt;br /&gt;
&lt;br /&gt;
ich habe noch ein paar von den EKG Platinen übrig. Wenn jemand Interesse daran hat - sei es zum Nachbauen, zum Weiterentwickeln, als Experimentierplattform für den ADS1298 oder schlicht als Lötübung - kann er sich gerne bei mir melden.&lt;br /&gt;
&lt;br /&gt;
Achja:&lt;br /&gt;
Ich würde mich sehr über ein kleines generelles Feedback, Kritik oder Verbesserungsvorschläge zu meinem Artikel freuen.. Also lasst die Sau raus :) &lt;br /&gt;
&lt;br /&gt;
Grüße, Jost (jojocp)&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=84077</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=84077"/>
		<updated>2014-07-20T21:47:53Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: letzte kleine änderungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG-Geräte mit großzügigen Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern und automatische Diagnose-Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei Bedarf automatisch die richtige Menge Energie an den Patienten liefern. Intern werden hochmoderne DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein Eigenbau-EKG-Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 50 Samples/Sekunde&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
In erster Linie möchte ich hier auch auf die bei der Entwicklung aufgetretenen Schwierigkeiten hinweisen.&lt;br /&gt;
Falls ich etwas vergessen habe oder etwas unklar ist, kann man mich natürlich gerne fragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen, ggf. weiterzuentwickeln und zu verwenden handelt auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im Allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungen&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen - die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Ableitungen sind jedoch ein Sonderfall, da sie meist nicht wirklich über Elektroden gemessen werden, sondern in der Software aus den Messungen von Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Anforderung der Daten, die Konfiguration der Register und die Kommunikation zum PC zuständig ist, zum Anderen aus einer selbst entwickelten Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können. Z.B. das Setzen eines Markers bei auffälligen Ereignissen oder das Starten einer Samplereihe mit höheren Datenraten (bis jetzt noch nicht implementiert). Zwei LED&#039;s sollten eigentlich den Puls und den Lead-Off Status anzeigen.&amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das beim Layouten zumindest gedacht... Hätte ich das Datenblatt des XMC&#039;s vorher etwas genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen diese LED&#039;s hängen, nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO Board sollten auch erstmal reichen: Durch die LED an P1.1 wird die Prozessorauslastung in Form von Helligkeitsänderung(durch PWM) angezeigt. Die LED an P1.0 zeigt den aktuellen Betriebszustand in Form von Blinkmustern an: &lt;br /&gt;
* Kurz an - Lange aus: nicht Verbunden&lt;br /&gt;
* Dauerhaft an: Verbunden&lt;br /&gt;
* Langsames Blinken: Aufnahme gestartet&lt;br /&gt;
* Schnelles Blinken: Fehler&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH SMD Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Diese besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl. auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png&lt;br /&gt;
File:EKG Layout.bmp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich für eine professionell gefertigte Leiterplatte. Bis auf die Stiftleisten nutze ich ausschließlich SMD Komponenten. Die meisten passiven Komponenten haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 30mm x 70mm groß. Der SUB-D Stecker wird auf die Vorderkante der Platine gesteckt und von beiden Seiten verlötet.&lt;br /&gt;
Da die beiden SMD-Drosseln und das SMD-Poti ihre Pad&#039;s direkt unter dem Bauteil haben, musste ich diese per Reflow Verfahren löten. Den Rest habe ich per Hand verlötet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG Platine unbestückt2.jpeg&lt;br /&gt;
File:EKG Platine bestückt closeup.jpeg&lt;br /&gt;
File:EKG Platine bestückt.jpeg&lt;br /&gt;
File:EKG SubD Verbindung.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale des Herzens beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s mit einer Auflösung von 24 Bit. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. Hier die groben Features des ADS1298:&amp;lt;br /&amp;gt;&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
* Interner Clock Generaotr&lt;br /&gt;
&lt;br /&gt;
Eine große Beeinträchtigung der Qualität eines EKG&#039;s sind Störungen, die in Extremfällen eine Größe von bis zu 800mV erreichen können - die sogenannten Common Mode Störungen. Die Ursache dafür sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein noch präziseres Signal aufnehmen zu können, bietet der ADS1298 ein weiteres Feature um Störungen zu unterdrücken: Das &amp;quot;Right Leg Drive&amp;quot;. Dabei werden die Störungen eines Einganges oder der Durchschnitt der Störungen mehrerer Eingänge(Auswählbar per Multiplexer) durch ein internes Modul Invertiert, danach Verstärkt und über eine am rechten Bein angebrachte Elektrode in den Körper &amp;quot;zurückgespeist&amp;quot;. Durch die Invertierung heben sich die Störungen dann auf. &amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses invertierte Signal kann man auch noch weiter verwenden und weitere Störungen reduzieren, indem man damit den Schirm des EKG-Kabels aktiv treibt. Dazu habe ich auf meiner Platine noch einen Impedanzwandler eingebaut, da der Interne Verstärker des ADS1298 die Kapazität des Schirms sonst nicht treiben könnte.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Anforderungen an die Außenbeschaltung des ADS1298 sind sonst sehr gering. Er benötigt zusätzlich zu den Standard-Kondensatoren für die Versorgungsspannung noch einige zusätzliche Abblock- / Filterkondensatoren und eine Feedback Beschaltung für das Right-Leg-Drive, bestehend aus einem Widerstand und gegebenenfalls einem Kondensator. Da ich die interne Referenzspannung und den internen Clock nutze, brauchte ich diese nicht mehr extern zu liefern. Zusätzlich wird noch eine Referenzspannung für das Right-Leg-Drive-Modul benötigt, die ich über ein externes Poti bereitstelle. Jedoch würde der ADS1298 auch hierfür eine intern generierte Spannung anbieten, die man per Konfigurationsregister einschalten kann.&lt;br /&gt;
&lt;br /&gt;
Der ADS1298 unterscheidet zwischen Versorgungsspannung für den digitalen und den analogen Teil. Diese können in ihrer Größe gleich oder unterschiedlich sein und der Analoge Teil erlaubt sogar die Verwendung einer Bipolaren Spannung. Da ich nur die 3,3V vom XMC2GO Board zur Verfügung habe, nutze ich diese für Beide. Die Analoge Spannung wird zur Verringerung von Störungen jedoch vorher noch über zwei Drosseln von der Digitalen &amp;quot;entkoppelt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG SPI.bmp|200px|thumb|right|SPI Protokoll für ein Single Byte Befehl.]]&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie ich das Problem gelöst habe, habe ich in Firmware-&amp;gt;Software SPI beschrieben.&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich auch selber bauen, allerdings sollte man dabei auf eine ausreichende Schirmung achten. Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller bzw. Vertreiber des Kabels keine Angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau-Lösungen einfach kein guter und vor allem kein an allen Elektroden gleich guter Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg&lt;br /&gt;
File:Widerstand Elektroden.JPG&lt;br /&gt;
File:EKG Elektroden.jpeg&lt;br /&gt;
File:EKG ELektrodengel.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
&lt;br /&gt;
Die Anwendersoftware für den PC ist in C# geschrieben. Da ich diese Programmiersprache vorher nicht richtig beherrschte, musste ich mir erstmal einige Dinge aneignen. Dementsprechend sieht der Code für das geübte Programmierer-Auge wahrscheinlich auch aus, doch nach vielen kleinen Problemchen habe ich schließlich eine Funktionierende Software auf die Beine gestellt bekommen. Programmiert habe ich in der Open Source Umgebung Sharp-Develop.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da eine Erklärung des gesamten Codes den Rahmen sprengen würde, möchte ich mich hier nur auf eine Erklärung der einzelnen Elemente beschränken. Wer den gesamten Sourcecode einsehen möchte, findet in den Downloads die entsprechende Zip-Datei. Wer die Software einmal Antesten möchte, muss sich noch das .Net Framework installieren.&lt;br /&gt;
&lt;br /&gt;
Jedoch wird man beim Antesten ohne angeschlossener Hardware nicht allzu weit kommen, da die Software erkennt, ob die richtige Hardware angeschlossen ist oder nicht. Dazu wird beim aufbauen einer Verbindung das ID Register des ADS1298 eingelesen und auf Richtigkeit überprüft.&lt;br /&gt;
&lt;br /&gt;
Manche Elemente der Oberfläche sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln des Designs war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als alles soweit funktionierte, habe ich noch eine einfache Heartbeat-Detection eingebaut. Diese überprüft kontinuierlich, ob der Wert eines EKG-Signals einen voreingestellten Wert überschreitet hat und löst daraufhin einen Piepton und ein Blinken auf der GUI aus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Erste Aufzeichnung.png | Erste Version der Software mit den ersten eingelesenen &amp;quot;Daten&amp;quot;.&lt;br /&gt;
File:EKG Software V1 V6.png | Aktuellste Version der Software. Zu sehen sind die Ableitungen V1 bis V6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen und überprüft die Richtigkeit der Hardware&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| BaudRate || Liest die Baudrate || Setzt die Baudrate&lt;br /&gt;
|-&lt;br /&gt;
| PortName|| Liest den Port Namen || Setzt den Port Namen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewDataEvent&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Der Serielle Port oder &amp;quot;Der Flaschenhals&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Unheimlich viele Probleme hat die Verwendung der Seriellen Schnittstelle gemacht. Sie ist auch der Grund warum ich nur eine so niedrige Samplerate von 50Hz verwenden kann.&lt;br /&gt;
Ich habe verschiedene Lösungswege probiert, doch es scheint, als ob Windows nicht mit der Menge der eingehenden Daten klar kommt und zwischendurch immer mal wieder Bytes verliert. Rein von der Baudrate her müsste eine Übertragung von bis zu 500 Samples / Sekunde möglich sein. Das verlieren der Bytes führt dann zu Problemen, da ich kein Flow Control in der Datenübertragung der Samples nutze. &amp;lt;br /&amp;gt;&lt;br /&gt;
Letztenendes habe ich mich für eine etwas unelegante Lösung entschieden, bei der ich den Seriellen Buffer in einem neuen Thread per Polling auslese und in einem First-In-First-Out Speicher ablege. Wenn genügend Daten (27 Bytes = Länge eines Datenpakets) eingelesen wurden, triggert der Thread ein Event, woraufhin der Hauptthread mit der Verarbeitung der Daten beginnt.&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Digitale Gleichspannungs-Entkopplung===&lt;br /&gt;
[[Datei:EKG Filter Frequenzgang.png|thumb|200px|right|X: Frequenz(Hz) Y: Dämpfung(dB)]]&lt;br /&gt;
Da es durch verschiedene Effekte zu Gleichspannungs-Offsets in der Messung kommen kann, habe ich in der Software eine Gleichspannungs-Entkopplung implementiert. Dazu werden die Samples jedes einzelnen Kanals vor der Anzeige in einem FIR Hoch Pass Filter neu berechnet. Dabei werden extrem tiefe Frequenzen, und demnach auch der Gleichspannungsoffset, herausgefiltert. Wichtig ist nur, dass die eigentlichen EKG Signale, dessen geringste Frequenz bei ca. 1 Hz liegt, nicht weggefiltert werden. Die Steilheit eines Filters mit 12 Koeffizienten ist zwar noch relativ flach, reicht aber für meine Anwendung aus. Für ein professionelles Diagnose EKG sind steilflankigere Filter notwendig, die aber den Rechenaufwand enorm in die Höhe treiben. &lt;br /&gt;
Ein Tool von [http://iowahills.com/ Iowahills] hat mir bei der Berechnung der Koeffizienten geholfen. Daher stammt auch die Grafik des Frequenzganges(Bild rechts).&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Firmware war das Tool [http://www.der-hammer.info/terminal/ Hterm]. Damit konnte ich alle Kommandos, die sonst von der PC-Software gesendet werden, manuell eingeben und so die möglichen Fehlerquellen auf die Firmware begrenzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. Auf Dave3 werde ich aber auf jeden Fall nochmal zurück kommen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick-Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &amp;lt;br /&amp;gt;&lt;br /&gt;
Durch ändern eines Wertes in der Scheduler Routine kann man die Samplerate des EKG&#039;s einstellen. Ich habe mich bewusst gegen eine zur Laufzeit einstellbare Samplerate entschieden, da der voreingestellte Wert genau die maximal mögliche Auslesegeschwindigkeit meines Seriellen Ports am PC ausnutzt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein weiterer wesentlicher Teil der Firmware besteht aus einem Case Verteiler, der die eingehenden Kommandos vom PC den entsprechenden Funktionen zuordnet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den einzelnen Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man das Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste also eine Software SPI Funktion implementiert werden. Da noch genügend Rechenzeit zur Verfügung stand war das kein großes Problem und schnell gemacht.&lt;br /&gt;
&lt;br /&gt;
==Sonstige Bilder &amp;amp; Video==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG Grundrauschen.jpeg | Rauschen der Analog-Digital-Wandler. Sieht erstmal viel aus, sind aber in Wirklichkeit nur ca. 1,5µV peak to peak&lt;br /&gt;
File:EKG Aufnahme 2.bmp | Erste erkennbare Herzschläge&lt;br /&gt;
File:EKG 3.png | Lead 1 bis 3 ohne High Pass Filter und noch verkehrt herum dargestellt&lt;br /&gt;
File:EKG Alle Ableitungen.png | Alle Ableitungen des EKG&#039;s&lt;br /&gt;
File:XMC 2 GO Logo.jpeg | Infineon Logo auf dem XMC2GO&lt;br /&gt;
File:EKG Platine unbestückt.jpg | Unbestückte Platine&lt;br /&gt;
File:EKG XMC 2 GO Running.jpeg | Im Betrieb - Die dunklere LED zeigt die Prozessorauslastung an&lt;br /&gt;
File:EKG XMC und Platine.jpeg | Im Betrieb&lt;br /&gt;
File:EKG Video Bild.jpg| Video. Passwort zum betrachten: XMC |link=https://vimeo.com/101242495 &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fazit und Ausblick==&lt;br /&gt;
&lt;br /&gt;
Alles in allem war dieses Projekt super Interessant, da so viele verschiedene Bereiche unter einen Hut zu bringen waren: Digital- und Analogtechnik, Mikrocontrollertechnik, PC Anwendungsprogrammierung, Medizintechnik.&lt;br /&gt;
Über den Sinn oder Unsinn dieses Projekts kann man sich natürlich streiten. Mein persönlicher Sinn dieses Projekts liegt nicht unbedingt darin nun ein EKG Gerät zu besitzen, sondern es ist vielmehr die Tatsache unheimlich viel Neues dabei gelernt zu haben und es vor Allem sehr viel Spaß gemacht hat ein komplettes System zu entwickeln und es nachher funktionieren zu sehen. Es hat zwar nicht alles so geklappt wie ich es angedacht hatte(z.B. viel zu niedrige Samplerate), trotzdem bin ich mit dem Endprodukt sehr zufrieden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einige Dinge aufgeschrieben, die man in einer eventuellen Nachfolgerversion umsetzen könnte:&lt;br /&gt;
* Kommunikation nicht über Seriellen Port. Dieser hat mir viele Probleme bereitet und ist für höhere Datenraten nicht unbedingt geeignet.&lt;br /&gt;
* Eigenes Display zur Darstellung der Signale und evtl. kleines Betriebssystem.&lt;br /&gt;
* Höhere Abtastrate für bessere Auflösung und mehr Möglichkeiten bei der Filterung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/c/c9/Eagle_Files_XMC_EKG.zip Eagle Files der EKG Platine]&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/2/2b/EKG_Viewer.zip EKG-Viewer Software]&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/4/42/EKG_Firmware.zip Firmware für den µC]&lt;br /&gt;
&lt;br /&gt;
Für private Zwecke dürfen die von mir entwickelte Schaltung und die dazugehörige Software gerne genutzt werden. Eine Weiterentwicklung mit kommerziellen Interessen ist nur nach Rücksprache und ggf. Freigabe durch mich gestattet.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=84064</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=84064"/>
		<updated>2014-07-20T21:14:58Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige Menge Energie an den Patienten liefern. Intern werden hochmoderne DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
In erster Linie möchte ich hier auch auf die bei der Entwicklung aufgetretenen Schwierigkeiten hinweisen.&lt;br /&gt;
Falls ich etwas vergessen habe oder etwas unklar ist, kann man mich natürlich gerne fragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen, ggf. weiterzuentwickeln und zu verwenden handelt auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im Allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungen&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen - die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Ableitungen sind jedoch ein Sonderfall, da sie meist nicht wirklich über Elektroden gemessen werden, sondern in der Software aus den Messungen von Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist relativ simpel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Anforderung der Daten, die Konfiguration der Register und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können. Z.B. das Setzen eines Markers bei Auffälligen Ereignissen oder das Starten einer Samplereihe mit höherer Datenrate (bis jetzt noch nicht implementiert). Zwei LED&#039;s sollten eigentlich den Puls und den Lead-Off Status anzeigen.&amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das beim Layouten zumindest gedacht... Hätte ich das Datenblatt des XMC&#039;s vorher etwas genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen diese LED&#039;s hängen, nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO Board sollten auch erstmal reichen: Durch die LED an P1.1 wird die Prozessorauslastung in Form von Helligkeitsänderung(durch PWM) angezeigt. Die LED an P1.0 zeigt den aktuellen Betriebszustand in Form von Blinkmustern: &lt;br /&gt;
* Kurz an - Lange aus: nicht Verbunden&lt;br /&gt;
* Dauerhaft an: Verbunden&lt;br /&gt;
* Langsames Blinken: Aufnahme gestartet&lt;br /&gt;
* Schnelles Blinken: Fehler&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH SMD Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png&lt;br /&gt;
File:EKG Layout.bmp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Bis auf die Stiftleisten nutze ich ausschließlich SMD Komponenten. Die meisten passiven Komponenten haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 30mm x 70mm groß. Der SUB-D Stecker wird auf die Vorderkante der Platine gesteckt und von beiden Seiten verlötet.&lt;br /&gt;
Da die beiden SMD-Drosseln und das SMD-Poti ihre Pads direkt unter dem Bauteil haben, musste ich diese per Reflow löten. Den Rest habe ich per Hand verlötet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG Platine unbestückt2.jpeg&lt;br /&gt;
File:EKG Platine bestückt closeup.jpeg&lt;br /&gt;
File:EKG Platine bestückt.jpeg&lt;br /&gt;
File:EKG SubD Verbindung.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s mit einer Auflösung von 24 Bit. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. Hier die groben Features des ADS1298:&amp;lt;br /&amp;gt;&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
* Interner Clock Generaotr&lt;br /&gt;
&lt;br /&gt;
Eine große Beeinträchtigung der Qualität eines EKG&#039;s sind Störungen, die in Extremfällen eine Größe von bis zu 800mV erreichen können - die sogenannten Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein noch präziseres Signal aufnehmen zu können, bietet der ADS1298 ein weiteres Feature um Störungen zu unterdrücken: Das &amp;quot;Right Leg Drive&amp;quot;. Dabei werden die Störungen eines Einganges oder der Durchschnitt der Störungen mehrerer Eingänge(Auswählbar per Multiplexer) durch ein internes Modul Invertiert, danach Verstärkt und über eine am rechten Bein angebrachte Elektrode in den Körper &amp;quot;zurückgespeist&amp;quot;. Durch die Invertierung heben sich die Störungen dann auf. &amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses invertierte Signal kann man auch noch weiter verwenden und weitere Störungen reduzieren, indem man damit den Schirm des EKG-Kabels aktiv treibt. Dazu habe ich auf meiner Platine noch einen Impedanzwandler eingebaut, da der Interne Verstärker des ADS1298 die Kapazität des Schirms sonst nicht treiben könnte.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Anforderungen an die Außenbeschaltung des ADS1298 sind sonst sehr gering. Er benötigt zusätzlich zu den Standard Kondensatoren für die Versorgungsspannung noch einige weitere Abblock- / Filterkondensatoren und eine Feedback Beschaltung für das Right Leg Drive bestehend aus einem Widerstand und gegebenenfalls einem Kondensator. Da ich die Interne Referenzspannung und den internen Clock nutze, brauchte ich diese nicht mehr extern zu liefern. Zusätzlich wird noch eine Referenzspannung für das Right Leg Drive Modul benötigt, die ich über ein externes Poti bereitstelle. Jedoch würde der ADS1298 auch hierfür eine intern generierte Spannung anbieten, die man per Konfigurationsregister einschalten kann.&lt;br /&gt;
&lt;br /&gt;
Der ADS1298 unterscheidet zwischen Versorgungsspannung für den Digitalen und den Analogen Teil. Diese können in ihrer Größe gleich oder unterschiedlich sein und der Analoge Teil erlaubt sogar die Verwendung einer Bipolaren Spannung. Da ich nur die 3,3V vom XMC2GO Board zur Verfügung habe, nutze ich diese für beide. Die Analoge Spannung wird zur Verringerung von Störungen jedoch vorher noch über zwei Drosseln von der Digitalen &amp;quot;entkoppelt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG SPI.bmp|200px|thumb|right|SPI Protokoll für ein Single Byte Befehl.]]&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie ich das Problem gelöst habe, habe ich in Firmware-&amp;gt;Software SPI beschrieben.&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich auch selber bauen, allerdings sollte man dabei auf eine ausreichende Schirmung achten. Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein an allen Elektroden gleich guter Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg&lt;br /&gt;
File:Widerstand Elektroden.JPG&lt;br /&gt;
File:EKG Elektroden.jpeg&lt;br /&gt;
File:EKG ELektrodengel.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
&lt;br /&gt;
Die Anwendersoftware für den PC ist in C# geschrieben. Da ich diese Programmiersprache vorher nicht richtig beherrschte, musste ich mir erstmal einige Dinge aneignen. Dementsprechend sieht der Code für das geübte Programmierer-Auge wahrscheinlich auch aus, doch nach vielen kleinen Problemchen habe ich schließlich eine Funktionierende Software auf die Beine gestellt bekommen. Programmiert habe ich in der Open Source Umgebung Sharp-Develop.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da eine Erklärung des gesamten Codes den Rahmen sprengen würde, möchte ich mich hier nur auf eine Erklärung der einzelnen Elemente beschränken. Wer den gesamten Sourcecode einsehen möchte, findet in den Downloads die entsprechende Zip-Datei. Wer die Software einmal Antesten möchte, muss sich noch das .Net Framework installieren.&lt;br /&gt;
&lt;br /&gt;
Jedoch wird man beim Antesten ohne angeschlossener Hardware nicht allzu weit kommen, da die Software erkennt, ob die richtige Hardware angeschlossen ist oder nicht. Dazu wird beim aufbauen einer Verbindung das ID Register des ADS1298 eingelesen und auf Richtigkeit überprüft.&lt;br /&gt;
&lt;br /&gt;
Manche Elemente der Oberfläche sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln des Designs war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als alles soweit funktionierte, habe ich noch eine einfache Heartbeat-Detection eingebaut. Diese überprüft kontinuierlich, ob der Wert eines EKG-Signals einen voreingestellten Wert überschreitet hat und löst daraufhin einen Piepton und ein Blinken auf der GUI aus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Erste Aufzeichnung.png | Erste Version der Software mit den ersten eingelesenen &amp;quot;Daten&amp;quot;.&lt;br /&gt;
File:EKG Software V1 V6.png | Aktuellste Version der Software. Zu sehen sind die Ableitungen V1 bis V6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Der Serielle Port oder &amp;quot;Der Flaschenhals&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Unheimlich viele Probleme hat die Verwendung der Seriellen Schnittstelle gemacht. Sie ist auch der Grund warum ich nur eine so niedrige Samplerate von 50Hz verwenden kann.&lt;br /&gt;
Ich habe verschiedene Lösungswege probiert, doch es scheint, als ob Windows nicht mit der Menge der eingehenden Daten klar kommt und zwischendurch immer mal wieder Bytes verliert. Rein von der Baudrate her müsste eine Übertragung von bis zu 500 Samples / Sekunde möglich sein. Das verlieren der Bytes führt dann zu Problemen, da ich kein Flow Control in der Datenübertragung der Samples nutze. &amp;lt;br /&amp;gt;&lt;br /&gt;
Letztenendes habe ich mich für eine etwas unelegante Lösung entschieden, bei der ich den Seriellen Buffer in einem neuen Thread per Polling auslese und in einem First-In-First-Out Speicher ablege. Wenn genügend Daten (27 Bytes = Länge eines Datenpakets) eingelesen wurden, triggert der Thread ein Event, woraufhin der Hauptthread mit der Verarbeitung der Daten beginnt.&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
===Digitale Gleichspannungs-Entkopplung===&lt;br /&gt;
[[Datei:EKG Filter Frequenzgang.png|thumb|200px|right|X: Frequenz(Hz) Y: Dämpfung(dB)]]&lt;br /&gt;
Da es durch verschiedene Effekte zu Gleichspannungs-Offsets in der Messung kommen kann, habe ich in der Software eine Gleichspannungs-Entkopplung implementiert. Dazu werden die Samples jedes einzelnen Kanals vor der Anzeige in einem FIR Hoch Pass Filter neu berechnet. Dabei werden extrem tiefe Frequenzen, und demnach auch der Gleichspannungsoffset, herausgefiltert. Wichtig ist nur, dass die eigentlichen EKG Signale, dessen geringste Frequenz bei ca. 1 Hz liegt, nicht weggefiltert werden. Die Steilheit eines Filters mit 12 Koeffizienten ist zwar noch relativ flach, reicht aber für meine Anwendung aus. Für ein professionelles Diagnose EKG sind steilflankigere Filter notwendig, die aber den Rechenaufwand enorm in die Höhe treiben. &lt;br /&gt;
Ein Tool von [http://iowahills.com/ Iowahills] hat mir bei der Berechnung der Koeffizienten geholfen. Daher stammt auch die Grafik des Frequenzganges(Bild rechts).&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Firmware war das Tool [http://www.der-hammer.info/terminal/ Hterm]. Damit konnte ich alle Kommandos, die sonst von der PC-Software gesendet werden, manuell eingeben und so die möglichen Fehlerquellen auf die Firmware begrenzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &amp;lt;br /&amp;gt;&lt;br /&gt;
Durch ändern eines Wertes in der Scheduler Routine kann man die Samplerate des EKG&#039;s einstellen. Ich habe mich bewusst gegen eine zur Laufzeit einstellbare Samplerate entschieden, da der voreingestellte Wert genau die maximal mögliche Auslesegeschwindigkeit meines Seriellen Ports am PC ausnutzt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein weiterer wesentlicher Teil der Firmware besteht aus einem Case Verteiler, der die eingehenden Kommandos vom PC den entsprechenden Funktionen zuordnet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den einzelnen Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man das Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste also eine Software SPI Funktion implementiert werden. Da noch genügend Rechenzeit zur Verfügung stand war das kein großes Problem.&lt;br /&gt;
&lt;br /&gt;
==Sonstige Bilder &amp;amp; Video==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG Grundrauschen.jpeg | Rauschen der Analog-Wandler. Nicht täuschen lassen&lt;br /&gt;
File:EKG Aufnahme 2.bmp | Erste erkennbare Herzschläge&lt;br /&gt;
File:EKG 3.png | Lead 1 bis 3 ohne High Pass Filter und noch verkehrt herum dargestellt&lt;br /&gt;
File:EKG Alle Ableitungen.png | Alle Ableitungen des EKG&#039;s&lt;br /&gt;
File:XMC 2 GO Logo.jpeg | Infineon Logo auf dem XMC2GO&lt;br /&gt;
File:EKG Platine unbestückt.jpg | Unbestückte Platine&lt;br /&gt;
File:EKG XMC 2 GO Running.jpeg | Im Betrieb - Die dunklere LED zeigt die Prozessorauslastung an&lt;br /&gt;
File:EKG XMC und Platine.jpeg | Im Betrieb&lt;br /&gt;
File:EKG Video Bild.jpg| Video. Passwort zum betrachten: XMC |link=https://vimeo.com/101242495 &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fazit und Ausblick==&lt;br /&gt;
&lt;br /&gt;
Alles in allem war dieses Projekt super Interessant, da so viele verschiedene Bereiche unter einen Hut zu bringen waren: Digital- und Analogtechnik, Mikrocontrollertechnik, PC Anwendungsprogrammierung, Medizintechnik.&lt;br /&gt;
Über den Sinn oder Unsinn dieses Projekts kann man sich natürlich streiten. Mein persönlicher Sinn dieses Projekts liegt nicht unbedingt darin nun ein EKG Gerät zu besitzen, sondern es ist vielmehr die Tatsache unheimlich viel Neues dabei gelernt zu haben und es vor Allem sehr viel Spaß gemacht hat ein komplettes System zu entwickeln und es nachher funktionieren zu sehen. Es hat zwar nicht alles so geklappt wie ich es angedacht hatte(z.B. viel zu niedrige Samplerate), trotzdem bin ich mit dem Endprodukt sehr zufrieden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einige Dinge aufgeschrieben, die man in einer eventuellen Nachfolgerversion umsetzen könnte:&lt;br /&gt;
* Kommunikation nicht über Seriellen Port. Dieser hat mir viele Probleme bereitet und ist für höhere Datenraten nicht unbedingt geeignet.&lt;br /&gt;
* Eigenes Display zur Darstellung der Signale und evtl. kleines Betriebssystem.&lt;br /&gt;
* Höhere Abtastrate für bessere Auflösung und mehr Möglichkeiten bei der Filterung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/c/c9/Eagle_Files_XMC_EKG.zip Eagle Files der EKG Platine]&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/2/2b/EKG_Viewer.zip EKG-Viewer Software]&lt;br /&gt;
*[http://www.mikrocontroller.net/wikifiles/4/42/EKG_Firmware.zip Firmware für den µC]&lt;br /&gt;
&lt;br /&gt;
Für private Zwecke dürfen die von mir entwickelte Schaltung und die dazugehörige Software gerne genutzt werden. Eine Weiterentwicklung mit kommerziellen Interessen ist nur nach Rücksprache und ggf. Freigabe durch mich gestattet.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Video_Bild.jpg&amp;diff=84060</id>
		<title>Datei:EKG Video Bild.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Video_Bild.jpg&amp;diff=84060"/>
		<updated>2014-07-20T20:21:56Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_XMC_und_Platine.jpeg&amp;diff=84059</id>
		<title>Datei:EKG XMC und Platine.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_XMC_und_Platine.jpeg&amp;diff=84059"/>
		<updated>2014-07-20T20:03:31Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_SPI.bmp&amp;diff=84058</id>
		<title>Datei:EKG SPI.bmp</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_SPI.bmp&amp;diff=84058"/>
		<updated>2014-07-20T19:48:07Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_XMC_2_GO_Running.jpeg&amp;diff=84056</id>
		<title>Datei:EKG XMC 2 GO Running.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_XMC_2_GO_Running.jpeg&amp;diff=84056"/>
		<updated>2014-07-20T19:38:17Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:XMC_2_GO_Logo.jpeg&amp;diff=84054</id>
		<title>Datei:XMC 2 GO Logo.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:XMC_2_GO_Logo.jpeg&amp;diff=84054"/>
		<updated>2014-07-20T19:22:10Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Alle_Ableitungen.png&amp;diff=84053</id>
		<title>Datei:EKG Alle Ableitungen.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Alle_Ableitungen.png&amp;diff=84053"/>
		<updated>2014-07-20T19:19:39Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Grundrauschen.jpeg&amp;diff=84052</id>
		<title>Datei:EKG Grundrauschen.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Grundrauschen.jpeg&amp;diff=84052"/>
		<updated>2014-07-20T19:18:26Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Viewer.zip&amp;diff=84048</id>
		<title>Datei:EKG Viewer.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Viewer.zip&amp;diff=84048"/>
		<updated>2014-07-20T19:05:41Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Firmware.zip&amp;diff=84047</id>
		<title>Datei:EKG Firmware.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Firmware.zip&amp;diff=84047"/>
		<updated>2014-07-20T19:04:56Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=84045</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=84045"/>
		<updated>2014-07-20T18:52:11Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: /* Die SPI Tücke */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist Quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige Menge Energie an den Patienten liefern. Intern werden leistungsfähige DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* 200 Samples pro Sekunde&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
In erster Linie möchte ich hier auch auf bei der Entwicklung aufgetretene Schwierigkeiten hinweisen.&lt;br /&gt;
Falls ich etwas vergessen habe oder etwas unklar ist, kann man mich natürlich gerne Fragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Anforderung der Daten, die Konfiguration der Register und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können. Z.B. das Setzen eines Markers bei Auffälligen Ereignissen oder das Starten einer Samplereihe mit höherer Datenrate (bis jetzt noch nicht implementiert). Zwei LED&#039;s sollten eigentlich den Puls und den Lead-Off Status anzeigen.&amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das beim Layouten zumindest gedacht... Hätte ich das Datenblatt des XMC&#039;s vorher etwas genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen diese LED&#039;s hängen, nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO Board sollten auch erstmal reichen: Durch die LED an P1.1 wird die Prozessorauslastung in Form von Helligkeitsänderung(durch PWM) angezeigt. Die LED an P1.0 zeigt den aktuellen Betriebszustand in Form von Blinkmustern: &lt;br /&gt;
* Kurz an - Lange aus: nicht Verbunden&lt;br /&gt;
* Dauerhaft an: Verbunden&lt;br /&gt;
* Langsames Blinken: Aufnahme gestartet&lt;br /&gt;
* Schnelles Blinken: Fehler&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH SMD Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png&lt;br /&gt;
File:EKG Layout.bmp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Bis auf die Stiftleisten nutze ich ausschließlich SMD Komponenten. Die meisten passiven Komponenten haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 30mm x 70mm groß. Der SUB-D Stecker wird auf die Vorderkante der Platine gesteckt und von beiden Seiten verlötet.&lt;br /&gt;
Da die beiden SMD-Drosseln und das SMD-Poti ihre Pads direkt unter dem Bauteil haben, musste ich diese per Reflow löten. Den Rest habe ich per Hand verlötet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG Platine unbestückt2.jpeg&lt;br /&gt;
File:EKG Platine bestückt closeup.jpeg&lt;br /&gt;
File:EKG Platine bestückt.jpeg&lt;br /&gt;
File:EKG SubD Verbindung.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s mit einer Auflösung von 24 Bit. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. Hier die groben Features des ADS1298:&amp;lt;br /&amp;gt;&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
* Interner Clock Generaotr&lt;br /&gt;
&lt;br /&gt;
Eine große Beeinträchtigung der Qualität eines EKG&#039;s sind Störungen, die in Extremfällen eine Größe von bis zu 800mV erreichen können - die sogenannten Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein noch präziseres Signal aufnehmen zu können, bietet der ADS1298 ein weiteres Feature um Störungen zu unterdrücken: Das &amp;quot;Right Leg Drive&amp;quot;. Dabei werden die Störungen eines Einganges oder der Durchschnitt der Störungen mehrerer Eingänge(Auswählbar per Multiplexer) durch ein internes Modul Invertiert, danach Verstärkt und über eine am rechten Bein angebrachte Elektrode in den Körper &amp;quot;zurückgespeist&amp;quot;. Durch die Invertierung heben sich die Störungen dann auf. &amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses invertierte Signal kann man auch noch weiter verwenden und weitere Störungen reduzieren, indem man damit den Schirm des EKG-Kabels aktiv treibt. Dazu habe ich auf meiner Platine noch einen Impedanzwandler eingebaut, da der Interne Verstärker des ADS1298 die Kapazität des Schirms sonst nicht treiben könnte.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Anforderungen an die Außenbeschaltung des ADS1298 sind sonst sehr gering. Er benötigt zusätzlich zu den Standard Kondensatoren für die Versorgungsspannung noch einige weitere Abblock- / Filterkondensatoren und eine Feedback Beschaltung für das Right Leg Drive bestehend aus einem Widerstand und gegebenenfalls einem Kondensator. Da ich die Interne Referenzspannung und den internen Clock nutze, brauchte ich diese nicht mehr extern zu liefern. Zusätzlich wird noch eine Referenzspannung für das Right Leg Drive Modul benötigt, die ich über ein externes Poti bereitstelle. Jedoch würde der ADS1298 auch hierfür eine intern generierte Spannung anbieten, die man per Konfigurationsregister einschalten kann.&lt;br /&gt;
&lt;br /&gt;
Der ADS1298 unterscheidet zwischen Versorgungsspannung für den Digitalen und den Analogen Teil. Diese können in ihrer Größe gleich oder unterschiedlich sein und der Analoge Teil erlaubt sogar die Verwendung einer Bipolaren Spannung. Da ich nur die 3,3V vom XMC2GO Board zur Verfügung habe, nutze ich diese für beide. Die Analoge Spannung wird zur Verringerung von Störungen jedoch vorher noch über zwei Drosseln von der Digitalen &amp;quot;entkoppelt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie ich das Problem gelöst habe, habe ich in Firmware-&amp;gt;Software SPI beschrieben.&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich auch selber bauen, allerdings sollte man dabei auf eine ausreichende Schirmung achten. Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein an allen Elektroden gleich guter Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg&lt;br /&gt;
File:Widerstand Elektroden.JPG&lt;br /&gt;
File:EKG Elektroden.jpeg&lt;br /&gt;
File:EKG ELektrodengel.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
&lt;br /&gt;
Die Anwendersoftware für den PC ist in C# geschrieben. Da ich diese Programmiersprache vorher nicht richtig beherrschte, musste ich mir erstmal einige Dinge aneignen. Dementsprechend sieht der Code für das geübte Programmierer-Auge wahrscheinlich auch aus, doch nach vielen kleinen Problemchen habe ich schließlich eine Funktionierende Software auf die Beine gestellt bekommen. Programmiert habe ich in der Open Source Umgebung Sharp-Develop.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da eine Erklärung des gesamten Codes den Rahmen sprengen würde, möchte ich mich hier nur auf eine Erklärung der einzelnen Elemente beschränken. Wer den gesamten Sourcecode einsehen möchte, findet in den Downloads die entsprechende Zip-Datei. Wer die Software einmal Antesten möchte, muss sich noch das .Net Framework installieren.&lt;br /&gt;
&lt;br /&gt;
Jedoch wird man beim Antesten ohne angeschlossener Hardware nicht allzu weit kommen, da die Software erkennt, ob die richtige Hardware angeschlossen ist oder nicht. Dazu wird beim aufbauen einer Verbindung das ID Register des ADS1298 eingelesen und auf Richtigkeit überprüft.&lt;br /&gt;
&lt;br /&gt;
Manche Elemente der Oberfläche sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln des Designs war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als alles soweit funktionierte, habe ich noch eine einfache Heartbeat-Detection eingebaut. Diese überprüft kontinuierlich, ob der Wert eines EKG-Signals einen voreingestellten Wert überschreitet hat und löst daraufhin einen Piepton und ein Blinken auf der GUI aus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Erste Aufzeichnung.png | Erste Version der Software mit den ersten eingelesenen &amp;quot;Daten&amp;quot;.&lt;br /&gt;
File:EKG Software V1 V6.png | Aktuellste Version der Software. Zu sehen sind die Ableitungen V1 bis V6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Der Serielle Port oder &amp;quot;Der Flaschenhals&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Unheimlich viele Probleme hat die Verwendung der Seriellen Schnittstelle gemacht. Sie ist auch der Grund warum ich nur eine so niedrige Samplerate von 50Hz verwenden kann.&lt;br /&gt;
Ich habe verschiedene Lösungswege probiert, doch es scheint, als ob Windows nicht mit der Menge der eingehenden Daten klar kommt und zwischendurch immer mal wieder Bytes verliert. Rein von der Baudrate her müsste eine Übertragung von bis zu 500 Samples / Sekunde möglich sein. Das verlieren der Bytes führt dann zu Problemen, da ich kein Flow Control in der Datenübertragung der Samples nutze. &amp;lt;br /&amp;gt;&lt;br /&gt;
Letztenendes habe ich mich für eine etwas unelegante Lösung entschieden, bei der ich den Seriellen Buffer in einem neuen Thread per Polling auslese und in einem First-In-First-Out Speicher ablege. Wenn genügend Daten (27 Bytes = Länge eines Datenpakets) eingelesen wurden, triggert der Thread ein Event, woraufhin der Hauptthread mit der Verarbeitung der Daten beginnt.&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
===Digitale Gleichspannungs-Entkopplung===&lt;br /&gt;
[[Datei:EKG Filter Frequenzgang.png|thumb|200px|right|X: Frequenz(Hz) Y: Dämpfung(dB)]]&lt;br /&gt;
Da es durch verschiedene Effekte zu Gleichspannungs-Offsets in der Messung kommen kann, habe ich in der Software eine Gleichspannungs-Entkopplung implementiert. Dazu werden die Samples jedes einzelnen Kanals vor der Anzeige in einem FIR Hoch Pass Filter neu berechnet. Dabei werden extrem tiefe Frequenzen, und demnach auch der Gleichspannungsoffset, herausgefiltert. Wichtig ist nur, dass die eigentlichen EKG Signale, dessen geringste Frequenz bei ca. 1 Hz liegt, nicht weggefiltert werden. Die Steilheit eines Filters mit 12 Koeffizienten ist zwar noch relativ flach, reicht aber für meine Anwendung aus. Für ein professionelles Diagnose EKG sind steilflankigere Filter notwendig, die aber den Rechenaufwand enorm in die Höhe treiben. &lt;br /&gt;
Ein Tool von [http://iowahills.com/ Iowahills] hat mir bei der Berechnung der Koeffizienten geholfen. Daher stammt auch die Grafik des Frequenzganges(Bild rechts).&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Firmware war das Tool [http://www.der-hammer.info/terminal/ Hterm]. Damit konnte ich alle Kommandos, die sonst von der PC-Software gesendet werden, manuell eingeben und so die möglichen Fehlerquellen auf die Firmware begrenzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &amp;lt;br /&amp;gt;&lt;br /&gt;
Durch ändern eines Wertes in der Scheduler Routine kann man die Samplerate des EKG&#039;s einstellen. Ich habe mich bewusst gegen eine zur Laufzeit einstellbare Samplerate entschieden, da der voreingestellte Wert genau die maximal mögliche Auslesegeschwindigkeit meines Seriellen Ports am PC ausnutzt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein weiterer wesentlicher Teil der Firmware besteht aus einem Case Verteiler, der die eingehenden Kommandos vom PC den entsprechenden Funktionen zuordnet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den einzelnen Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man das Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste also eine Software SPI Funktion implementiert werden. Da noch genügend Rechenzeit zur Verfügung stand war das kein großes Problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fazit und Ausblick==&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einige Dinge aufgeschrieben, die man in einer eventuellen Nachfolgerversion umsetzen könnte:&lt;br /&gt;
* Kommunikation nicht über Seriellen Port. Dieser hat mir viele Probleme bereitet und ist für höhere Datenraten nicht unbedingt geeignet.&lt;br /&gt;
* Eigenes Display zur Darstellung der Signale und evtl. kleines Betriebssystem.&lt;br /&gt;
* Höhere Abtastrate für bessere Auflösung und mehr Möglichkeiten bei der Filterung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/c/c9/Eagle_Files_XMC_EKG.zip Eagle Files der EKG Platine]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=84044</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=84044"/>
		<updated>2014-07-20T18:49:12Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist Quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige Menge Energie an den Patienten liefern. Intern werden leistungsfähige DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* 200 Samples pro Sekunde&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
In erster Linie möchte ich hier auch auf bei der Entwicklung aufgetretene Schwierigkeiten hinweisen.&lt;br /&gt;
Falls ich etwas vergessen habe oder etwas unklar ist, kann man mich natürlich gerne Fragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Anforderung der Daten, die Konfiguration der Register und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können. Z.B. das Setzen eines Markers bei Auffälligen Ereignissen oder das Starten einer Samplereihe mit höherer Datenrate (bis jetzt noch nicht implementiert). Zwei LED&#039;s sollten eigentlich den Puls und den Lead-Off Status anzeigen.&amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das beim Layouten zumindest gedacht... Hätte ich das Datenblatt des XMC&#039;s vorher etwas genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen diese LED&#039;s hängen, nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO Board sollten auch erstmal reichen: Durch die LED an P1.1 wird die Prozessorauslastung in Form von Helligkeitsänderung(durch PWM) angezeigt. Die LED an P1.0 zeigt den aktuellen Betriebszustand in Form von Blinkmustern: &lt;br /&gt;
* Kurz an - Lange aus: nicht Verbunden&lt;br /&gt;
* Dauerhaft an: Verbunden&lt;br /&gt;
* Langsames Blinken: Aufnahme gestartet&lt;br /&gt;
* Schnelles Blinken: Fehler&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH SMD Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png&lt;br /&gt;
File:EKG Layout.bmp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Bis auf die Stiftleisten nutze ich ausschließlich SMD Komponenten. Die meisten passiven Komponenten haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 30mm x 70mm groß. Der SUB-D Stecker wird auf die Vorderkante der Platine gesteckt und von beiden Seiten verlötet.&lt;br /&gt;
Da die beiden SMD-Drosseln und das SMD-Poti ihre Pads direkt unter dem Bauteil haben, musste ich diese per Reflow löten. Den Rest habe ich per Hand verlötet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG Platine unbestückt2.jpeg&lt;br /&gt;
File:EKG Platine bestückt closeup.jpeg&lt;br /&gt;
File:EKG Platine bestückt.jpeg&lt;br /&gt;
File:EKG SubD Verbindung.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s mit einer Auflösung von 24 Bit. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. Hier die groben Features des ADS1298:&amp;lt;br /&amp;gt;&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
* Interner Clock Generaotr&lt;br /&gt;
&lt;br /&gt;
Eine große Beeinträchtigung der Qualität eines EKG&#039;s sind Störungen, die in Extremfällen eine Größe von bis zu 800mV erreichen können - die sogenannten Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein noch präziseres Signal aufnehmen zu können, bietet der ADS1298 ein weiteres Feature um Störungen zu unterdrücken: Das &amp;quot;Right Leg Drive&amp;quot;. Dabei werden die Störungen eines Einganges oder der Durchschnitt der Störungen mehrerer Eingänge(Auswählbar per Multiplexer) durch ein internes Modul Invertiert, danach Verstärkt und über eine am rechten Bein angebrachte Elektrode in den Körper &amp;quot;zurückgespeist&amp;quot;. Durch die Invertierung heben sich die Störungen dann auf. &amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses invertierte Signal kann man auch noch weiter verwenden und weitere Störungen reduzieren, indem man damit den Schirm des EKG-Kabels aktiv treibt. Dazu habe ich auf meiner Platine noch einen Impedanzwandler eingebaut, da der Interne Verstärker des ADS1298 die Kapazität des Schirms sonst nicht treiben könnte.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Anforderungen an die Außenbeschaltung des ADS1298 sind sonst sehr gering. Er benötigt zusätzlich zu den Standard Kondensatoren für die Versorgungsspannung noch einige weitere Abblock- / Filterkondensatoren und eine Feedback Beschaltung für das Right Leg Drive bestehend aus einem Widerstand und gegebenenfalls einem Kondensator. Da ich die Interne Referenzspannung und den internen Clock nutze, brauchte ich diese nicht mehr extern zu liefern. Zusätzlich wird noch eine Referenzspannung für das Right Leg Drive Modul benötigt, die ich über ein externes Poti bereitstelle. Jedoch würde der ADS1298 auch hierfür eine intern generierte Spannung anbieten, die man per Konfigurationsregister einschalten kann.&lt;br /&gt;
&lt;br /&gt;
Der ADS1298 unterscheidet zwischen Versorgungsspannung für den Digitalen und den Analogen Teil. Diese können in ihrer Größe gleich oder unterschiedlich sein und der Analoge Teil erlaubt sogar die Verwendung einer Bipolaren Spannung. Da ich nur die 3,3V vom XMC2GO Board zur Verfügung habe, nutze ich diese für beide. Die Analoge Spannung wird zur Verringerung von Störungen jedoch vorher noch über zwei Drosseln von der Digitalen &amp;quot;entkoppelt&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich auch selber bauen, allerdings sollte man dabei auf eine ausreichende Schirmung achten. Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein an allen Elektroden gleich guter Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg&lt;br /&gt;
File:Widerstand Elektroden.JPG&lt;br /&gt;
File:EKG Elektroden.jpeg&lt;br /&gt;
File:EKG ELektrodengel.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
&lt;br /&gt;
Die Anwendersoftware für den PC ist in C# geschrieben. Da ich diese Programmiersprache vorher nicht richtig beherrschte, musste ich mir erstmal einige Dinge aneignen. Dementsprechend sieht der Code für das geübte Programmierer-Auge wahrscheinlich auch aus, doch nach vielen kleinen Problemchen habe ich schließlich eine Funktionierende Software auf die Beine gestellt bekommen. Programmiert habe ich in der Open Source Umgebung Sharp-Develop.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da eine Erklärung des gesamten Codes den Rahmen sprengen würde, möchte ich mich hier nur auf eine Erklärung der einzelnen Elemente beschränken. Wer den gesamten Sourcecode einsehen möchte, findet in den Downloads die entsprechende Zip-Datei. Wer die Software einmal Antesten möchte, muss sich noch das .Net Framework installieren.&lt;br /&gt;
&lt;br /&gt;
Jedoch wird man beim Antesten ohne angeschlossener Hardware nicht allzu weit kommen, da die Software erkennt, ob die richtige Hardware angeschlossen ist oder nicht. Dazu wird beim aufbauen einer Verbindung das ID Register des ADS1298 eingelesen und auf Richtigkeit überprüft.&lt;br /&gt;
&lt;br /&gt;
Manche Elemente der Oberfläche sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln des Designs war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als alles soweit funktionierte, habe ich noch eine einfache Heartbeat-Detection eingebaut. Diese überprüft kontinuierlich, ob der Wert eines EKG-Signals einen voreingestellten Wert überschreitet hat und löst daraufhin einen Piepton und ein Blinken auf der GUI aus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Erste Aufzeichnung.png | Erste Version der Software mit den ersten eingelesenen &amp;quot;Daten&amp;quot;.&lt;br /&gt;
File:EKG Software V1 V6.png | Aktuellste Version der Software. Zu sehen sind die Ableitungen V1 bis V6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Der Serielle Port oder &amp;quot;Der Flaschenhals&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Unheimlich viele Probleme hat die Verwendung der Seriellen Schnittstelle gemacht. Sie ist auch der Grund warum ich nur eine so niedrige Samplerate von 50Hz verwenden kann.&lt;br /&gt;
Ich habe verschiedene Lösungswege probiert, doch es scheint, als ob Windows nicht mit der Menge der eingehenden Daten klar kommt und zwischendurch immer mal wieder Bytes verliert. Rein von der Baudrate her müsste eine Übertragung von bis zu 500 Samples / Sekunde möglich sein. Das verlieren der Bytes führt dann zu Problemen, da ich kein Flow Control in der Datenübertragung der Samples nutze. &amp;lt;br /&amp;gt;&lt;br /&gt;
Letztenendes habe ich mich für eine etwas unelegante Lösung entschieden, bei der ich den Seriellen Buffer in einem neuen Thread per Polling auslese und in einem First-In-First-Out Speicher ablege. Wenn genügend Daten (27 Bytes = Länge eines Datenpakets) eingelesen wurden, triggert der Thread ein Event, woraufhin der Hauptthread mit der Verarbeitung der Daten beginnt.&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
===Digitale Gleichspannungs-Entkopplung===&lt;br /&gt;
[[Datei:EKG Filter Frequenzgang.png|thumb|200px|right|X: Frequenz(Hz) Y: Dämpfung(dB)]]&lt;br /&gt;
Da es durch verschiedene Effekte zu Gleichspannungs-Offsets in der Messung kommen kann, habe ich in der Software eine Gleichspannungs-Entkopplung implementiert. Dazu werden die Samples jedes einzelnen Kanals vor der Anzeige in einem FIR Hoch Pass Filter neu berechnet. Dabei werden extrem tiefe Frequenzen, und demnach auch der Gleichspannungsoffset, herausgefiltert. Wichtig ist nur, dass die eigentlichen EKG Signale, dessen geringste Frequenz bei ca. 1 Hz liegt, nicht weggefiltert werden. Die Steilheit eines Filters mit 12 Koeffizienten ist zwar noch relativ flach, reicht aber für meine Anwendung aus. Für ein professionelles Diagnose EKG sind steilflankigere Filter notwendig, die aber den Rechenaufwand enorm in die Höhe treiben. &lt;br /&gt;
Ein Tool von [http://iowahills.com/ Iowahills] hat mir bei der Berechnung der Koeffizienten geholfen. Daher stammt auch die Grafik des Frequenzganges(Bild rechts).&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Firmware war das Tool [http://www.der-hammer.info/terminal/ Hterm]. Damit konnte ich alle Kommandos, die sonst von der PC-Software gesendet werden, manuell eingeben und so die möglichen Fehlerquellen auf die Firmware begrenzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &amp;lt;br /&amp;gt;&lt;br /&gt;
Durch ändern eines Wertes in der Scheduler Routine kann man die Samplerate des EKG&#039;s einstellen. Ich habe mich bewusst gegen eine zur Laufzeit einstellbare Samplerate entschieden, da der voreingestellte Wert genau die maximal mögliche Auslesegeschwindigkeit meines Seriellen Ports am PC ausnutzt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein weiterer wesentlicher Teil der Firmware besteht aus einem Case Verteiler, der die eingehenden Kommandos vom PC den entsprechenden Funktionen zuordnet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den einzelnen Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man das Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste also eine Software SPI Funktion implementiert werden. Da noch genügend Rechenzeit zur Verfügung stand war das kein großes Problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fazit und Ausblick==&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einige Dinge aufgeschrieben, die man in einer eventuellen Nachfolgerversion umsetzen könnte:&lt;br /&gt;
* Kommunikation nicht über Seriellen Port. Dieser hat mir viele Probleme bereitet und ist für höhere Datenraten nicht unbedingt geeignet.&lt;br /&gt;
* Eigenes Display zur Darstellung der Signale und evtl. kleines Betriebssystem.&lt;br /&gt;
* Höhere Abtastrate für bessere Auflösung und mehr Möglichkeiten bei der Filterung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/c/c9/Eagle_Files_XMC_EKG.zip Eagle Files der EKG Platine]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83956</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83956"/>
		<updated>2014-07-20T12:05:45Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist Quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige Menge Energie an den Patienten liefern. Intern werden leistungsfähige DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* 200 Samples pro Sekunde&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
In erster Linie möchte ich hier auch auf bei der Entwicklung aufgetretene Schwierigkeiten hinweisen.&lt;br /&gt;
Falls ich etwas vergessen habe oder etwas unklar ist, kann man mich natürlich gerne Fragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können - z.B. das Setzen eines Markers bei Auffälligen Ereignissen oder das Starten einer Samplereihe mit höherer Datenrate (bis jetzt noch nicht implementiert). Zwei LED&#039;s sollten eigentlich den Puls und den Lead-Off Status anzeigen.&amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das beim Layouten zumindest gedacht... Hätte ich das Datenblatt des XMC&#039;s vorher etwas genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen diese LED&#039;s hängen, nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO Board sollten auch erstmal reichen: Durch die LED an P1.1 wird die Prozessorauslastung in Form von Helligkeitsänderung(durch PWM) angezeigt. Die LED an P1.0 zeigt den aktuellen Betriebszustand in Form von Blinkmustern: &lt;br /&gt;
* Kurz an - Lange aus: nicht Verbunden&lt;br /&gt;
* Dauerhaft an: Verbunden&lt;br /&gt;
* Langsames Blinken: Aufnahme gestartet&lt;br /&gt;
* Schnelles Blinken: Fehler&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH SMD Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png&lt;br /&gt;
File:EKG Layout.bmp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Bis auf die Stiftleisten nutze ich ausschließlich SMD Komponenten. Die meisten passiven Komponenten haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 30mm x 70mm groß. Der SUB-D Stecker wird auf die Vorderkante der Platine gesteckt und von beiden Seiten verlötet.&lt;br /&gt;
Da die beiden SMD-Drosseln und das SMD-Poti ihre Pads direkt unter dem Bauteil haben, musste ich diese per Reflow löten. Den Rest habe ich per Hand verlötet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG Platine unbestückt2.jpeg&lt;br /&gt;
File:EKG Platine bestückt closeup.jpeg&lt;br /&gt;
File:EKG Platine bestückt.jpeg&lt;br /&gt;
File:EKG SubD Verbindung.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s mit einer Auflösung von 24 Bit. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Beeinträchtigung der Qualität eines EKG&#039;s sind Störungen, die in Extremfällen eine Größe von bis zu 800mV erreichen können - die sogenannten Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Um ein noch präziseres Signal aufnehmen zu können, bietet der ADS1298 ein weiteres Feature um Störungen zu unterdrücken: Das &amp;quot;Right Leg Drive&amp;quot;. Dabei werden die Störungen eines Einganges oder der Durchschnitt der Störungen mehrerer Eingänge(Auswählbar per Multiplexer) durch ein internes Modul Invertiert, danach Verstärkt und über eine am rechten Bein angebrachte Elektrode in den Körper &amp;quot;zurückgespeist&amp;quot;. Durch die Invertierung heben sich die Störungen dann auf. &amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses invertierte Signal kann man auch noch weiter verwenden und weitere Störungen reduzieren, indem man damit den Schirm des EKG-Kabels aktiv treibt. Dazu habe ich auf meiner Platine noch einen Impedanzwandler eingebaut, da der Interne Verstärker des ADS1298 die Kapazität des Schirms sonst nicht treiben könnte.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich auch selber bauen, allerdings sollte man dabei auf eine ausreichende Schirmung achten. Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein an allen Elektroden gleich guter Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg&lt;br /&gt;
File:Widerstand Elektroden.JPG&lt;br /&gt;
File:EKG Elektroden.jpeg&lt;br /&gt;
File:EKG ELektrodengel.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
&lt;br /&gt;
Die Anwendersoftware für den PC ist in C# geschrieben. Da ich diese Programmiersprache vorher nicht richtig beherrschte, musste ich mir erstmal einige Dinge aneignen. Dementsprechend sieht der Code für das geübte Programmierer-Auge wahrscheinlich auch aus. Nach vielen kleinen Problemchen habe ich schließlich doch noch eine Funktionierende Software auf die Beine gestellt bekommen. Entwickelt habe ich die mit dem Open Source Programm Sharp-Develop.&amp;lt;br /&amp;gt;&lt;br /&gt;
Da eine Erklärung des gesamten Codes den Rahmen sprengen würde, möchte ich mich hier nur auf eine Erklärung der einzelnen Elemente beschränken. Wer jedoch den gesamten Sourcecode einsehen möchte, findet in den Downloads die entsprechende Zip-Datei. Wer die Software ausprobieren möchte, muss sich noch das .Net Framework installieren.&lt;br /&gt;
&lt;br /&gt;
Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln des Designs war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Erste Aufzeichnung.png | Erste Version der Software mit den ersten eingelesenen &amp;quot;Daten&amp;quot;.&lt;br /&gt;
File:EKG Software V1 V6.png | Aktuellste Version der Software. Zu sehen sind die Ableitungen V1 bis V6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Der Serielle Port===&lt;br /&gt;
&lt;br /&gt;
Unheimlich viele Probleme hat die Verwaltung der Seriellen Schnittstelle gemacht. Die &amp;quot;SerilPort&amp;quot; Klasse aus dem &amp;quot;System.IO.Ports&amp;quot; Namespace scheint relativ verbuggt zu sein&lt;br /&gt;
Ich habe verschiedene Lösungswege probiert, doch es scheint, als ob Windows nicht mit der Menge der eingehenden Daten klar kommt und zwischendurch immer mal wieder Bytes verliert. Dies führt dann zu Problemen, da ich kein Flow Control in der Datenübertragung der Samples nutze. &amp;lt;br /&amp;gt;&lt;br /&gt;
Letztenendes nutze ich eine etwas unelegante Lösung, bei der ich den Seriellen Buffer in einem neuen Thread per Polling auslese und zwsichenspeichere. Wenn genügend Daten (27 Bytes, da ein Sample aus 27 Bytes besteht) eingelesen wurden, triggert der Thread ein Event, woraufhin der Hauptthread mit der Verarbeitung der Daten beginnt.&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
===Digitale Gleichspannungs-Entkopplung===&lt;br /&gt;
[[Datei:EKG Filter Frequenzgang.png|thumb|200px|right|X: Frequenz(Hz) Y: Dämpfung(dB)]]&lt;br /&gt;
Da es durch verschiedene Effekte zu Gleichspannungs-Offsets in der Messung kommen kann, habe ich in der Software eine Gleichspannungs-Entkopplung implementiert. Dazu werden die Samples jedes einzelnen Kanals vor der Anzeige in einem FIR Hoch Pass Filter neu berechnet. Dabei werden extrem tiefe Frequenzen, und demnach auch der Gleichspannungsoffset, herausgefiltert. Wichtig ist nur, dass die eigentlichen EKG Signale, dessen geringste Frequenz bei ca. 1 Hz liegt, nicht weggefiltert werden. Die Steilheit eines Filters mit 12 Koeffizienten ist zwar noch relativ flach, reicht aber für meine Anwendung aus. Für ein professionelles Diagnose EKG sind steilflankigere Filter notwendig, die aber den Rechenaufwand enorm in die Höhe treiben. &lt;br /&gt;
Ein Tool von [http://iowahills.com/ Iowahills] hat mir bei der Berechnung der Koeffizienten geholfen. Daher stammt auch die Grafik des Frequenzganges(Bild rechts).&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Firmware war das Tool [http://www.der-hammer.info/terminal/ Hterm]. Damit konnte ich alle Kommandos, die sonst von der PC-Software gesendet werden, manuell eingeben und so die möglichen Fehlerquellen auf die Firmware begrenzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &amp;lt;br /&amp;gt;&lt;br /&gt;
Durch ändern eines Wertes in der Scheduler Routine kann man die Samplerate des EKG&#039;s einstellen. Ich habe mich bewusst gegen eine zur Laufzeit einstellbare Samplerate entschieden, da der voreingestellte Wert genau die maximal mögliche Auslesegeschwindigkeit meines Seriellen Ports am PC ausnutzt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein weiterer wesentlicher Teil der Firmware besteht aus einem Case Verteiler, der die eingehenden Kommandos vom PC den entsprechenden Funktionen zuordnet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den einzelnen Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man das Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste also eine Software SPI Funktion implementiert werden. Da noch genügend Rechenzeit zur Verfügung stand war das kein großes Problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fazit und Ausblick==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einige Dinge aufgeschrieben, die man in einer eventuellen Nachfolgerversion umsetzen könnte:&lt;br /&gt;
* Kommunikation nicht über Seriellen Port. Dieser hat mir viele Probleme bereitet und ist für höhere Datenraten nicht unbedingt geeignet.&lt;br /&gt;
* Eigenes Display zur Darstellung der Signale und evtl. kleines Betriebssystem.&lt;br /&gt;
* Höhere Abtastrate für bessere Auflösung und mehr Möglichkeiten bei der Filterung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&lt;br /&gt;
[http://www.mikrocontroller.net/wikifiles/c/c9/Eagle_Files_XMC_EKG.zip Eagle Files der EKG Platine]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:Eagle_Files_XMC_EKG.zip&amp;diff=83951</id>
		<title>Datei:Eagle Files XMC EKG.zip</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:Eagle_Files_XMC_EKG.zip&amp;diff=83951"/>
		<updated>2014-07-20T09:54:40Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: Jojocp lud eine neue Version von „Datei:Eagle Files XMC EKG.zip“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83926</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83926"/>
		<updated>2014-07-19T19:11:49Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist Quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige Menge Energie an den Patienten liefern. Intern werden leistungsfähige DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* 200 Samples pro Sekunde&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
In erster Linie möchte ich hier auch auf bei der Entwicklung aufgetretene Schwierigkeiten hinweisen.&lt;br /&gt;
Falls ich etwas vergessen habe oder etwas unklar ist, kann man mich natürlich gerne Fragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png&lt;br /&gt;
File:EKG Layout.bmp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Bis auf die Stiftleisten nutze ich ausschließlich SMD Komponenten. Die meisten passiven Komponenten haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 30mm x 70mm groß. Den SUB-D Stecker habe ich einfach auf die Platine gesteckt und von beiden Seiten verlötet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG Platine unbestückt2.jpeg&lt;br /&gt;
File:EKG Platine bestückt closeup.jpeg&lt;br /&gt;
File:EKG Platine bestückt.jpeg&lt;br /&gt;
File:EKG SubD Verbindung.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Beeinträchtigung der Qualität bei der Aufzeichnung eines Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal aufzunehmen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein an allen Elektroden gleich guter Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg&lt;br /&gt;
File:Widerstand Elektroden.JPG&lt;br /&gt;
File:EKG Elektroden.jpeg&lt;br /&gt;
File:EKG ELektrodengel.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
&lt;br /&gt;
Da dies mein erstes Projekt mit einer PC Benutzerumgebung ist, musste ich mir hierfür erstmal das nötige Wissen aneignen. Ich habe mir also die Programmiersprache C#&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Erste Aufzeichnung.png | Erste Version der Software mit den ersten eingelesenen &amp;quot;Daten&amp;quot;.&lt;br /&gt;
File:EKG Software V1 V6.png | Aktuellste Version der Software. Zu sehen sind die Ableitungen V1 bis V6.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Der Serielle Port===&lt;br /&gt;
&lt;br /&gt;
Unheimlich viele Probleme hat die Verwaltung der Seriellen Schnittstelle gemacht. Die &amp;quot;SerilPort&amp;quot; Klasse aus dem &amp;quot;System.IO.Ports&amp;quot; Namespace scheint relativ verbuggt zu sein&lt;br /&gt;
Ich habe verschiedene Lösungswege probiert, doch es scheint, als ob Windows nicht mit der Menge der eingehenden Daten klar kommt und zwischendurch immer mal wieder Bytes verliert. Dies führt dann zu Problemen, da ich kein Flow Control in der Datenübertragung der Samples nutze. &amp;lt;br /&amp;gt;&lt;br /&gt;
Letztenendes nutze ich eine etwas unelegante Lösung, bei der ich den Seriellen Buffer in einem neuen Thread per Polling auslese und zwsichenspeichere. Wenn genügend Daten (27 Bytes, da ein Sample aus 27 Bytes besteht) eingelesen wurden, triggert der Thread ein Event, woraufhin der Hauptthread mit der Verarbeitung der Daten beginnt.&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
===Digitale Gleichspannungs-Entkopplung===&lt;br /&gt;
[[Datei:EKG Filter Frequenzgang.png|thumb|200px|right|X: Frequenz(Hz) Y: Dämpfung(dB)]]&lt;br /&gt;
Da es durch verschiedene Effekte zu Gleichspannungs-Offsets in der Messung kommen kann, habe ich in der Software eine Gleichspannungs-Entkopplung implementiert. Dazu werden die Samples jedes einzelnen Kanals vor der Anzeige in einem FIR Hoch Pass Filter neu berechnet. Dabei werden extrem tiefe Frequenzen, und demnach auch der Gleichspannungsoffset, herausgefiltert. Wichtig ist nur, dass die eigentlichen EKG Signale, dessen geringste Frequenz bei ca. 1 Hz liegt, nicht weggefiltert werden. Die Steilheit eines Filters mit 12 Koeffizienten ist zwar noch relativ flach, reicht aber für meine Anwendung aus. Für ein professionelles Diagnose EKG sind steilflankigere Filter notwendig, die aber den Rechenaufwand enorm in die Höhe treiben. &lt;br /&gt;
Ein Tool von [http://iowahills.com/ Iowahills] hat mir bei der Berechnung der Koeffizienten geholfen. Daher stammt auch die Grafik des Frequenzganges(Bild rechts).&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den einzelnen Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man das Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste also eine Software SPI Funktion implementiert werden. Da noch genügend Rechenzeit zur Verfügung stand war das kein großes Problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fazit und Ausblick==&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einige Dinge aufgeschrieben, die man in einer eventuellen Nachfolgerversion umsetzen könnte:&lt;br /&gt;
* Kommunikation nicht über Seriellen Port. Dieser hat mir viele Probleme bereitet und ist für höhere Datenraten nicht unbedingt geeignet.&lt;br /&gt;
* Eigenes Display zur Darstellung der Signale und evtl. kleines Betriebssystem.&lt;br /&gt;
* Höhere Abtastrate für bessere Auflösung und mehr Möglichkeiten bei der Filterung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Software_V1_V6.png&amp;diff=83925</id>
		<title>Datei:EKG Software V1 V6.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Software_V1_V6.png&amp;diff=83925"/>
		<updated>2014-07-19T18:44:13Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_best%C3%BCckt.jpeg&amp;diff=83924</id>
		<title>Datei:EKG Platine bestückt.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_best%C3%BCckt.jpeg&amp;diff=83924"/>
		<updated>2014-07-19T18:42:43Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: Jojocp lud eine neue Version von „Datei:EKG Platine bestückt.jpeg“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_unbest%C3%BCckt2.jpeg&amp;diff=83923</id>
		<title>Datei:EKG Platine unbestückt2.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_unbest%C3%BCckt2.jpeg&amp;diff=83923"/>
		<updated>2014-07-19T18:40:44Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: Jojocp lud eine neue Version von „Datei:EKG Platine unbestückt2.jpeg“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_best%C3%BCckt_closeup.jpeg&amp;diff=83922</id>
		<title>Datei:EKG Platine bestückt closeup.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_best%C3%BCckt_closeup.jpeg&amp;diff=83922"/>
		<updated>2014-07-19T18:30:43Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_unbest%C3%BCckt2.jpeg&amp;diff=83921</id>
		<title>Datei:EKG Platine unbestückt2.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_unbest%C3%BCckt2.jpeg&amp;diff=83921"/>
		<updated>2014-07-19T18:30:11Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_best%C3%BCckt.jpeg&amp;diff=83920</id>
		<title>Datei:EKG Platine bestückt.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Platine_best%C3%BCckt.jpeg&amp;diff=83920"/>
		<updated>2014-07-19T18:29:22Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83916</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83916"/>
		<updated>2014-07-19T14:35:17Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist Quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige Menge Energie an den Patienten liefern. Intern werden leistungsfähige DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* 200 Samples pro Sekunde&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
In erster Linie möchte ich hier auch auf bei der Entwicklung aufgetretene Schwierigkeiten hinweisen.&lt;br /&gt;
Falls ich etwas vergessen habe oder etwas unklar ist, kann man mich natürlich gerne Fragen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png&lt;br /&gt;
File:EKG Layout.bmp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Bis auf die Stiftleisten nutze ich ausschließlich SMD Komponenten. Die meisten passiven Komponenten haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 30mm x 70mm groß. Den SUB-D Stecker habe ich einfach auf die Platine gesteckt und von beiden Seiten verlötet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG SubD Verbindung.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Beeinträchtigung der Qualität bei der Aufzeichnung eines Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal aufzunehmen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein an allen Elektroden gleich guter Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg&lt;br /&gt;
File:Widerstand Elektroden.JPG&lt;br /&gt;
File:EKG Elektroden.jpeg&lt;br /&gt;
File:EKG ELektrodengel.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software ohne Gleichspannungs-Entkopplung]]&lt;br /&gt;
&lt;br /&gt;
Da dies mein erstes Projekt mit einer PC Benutzerumgebung ist, musste ich mir hierfür erstmal das nötige Wissen aneignen. Ich habe mir also die Programmiersprache C#&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Der Serielle Port===&lt;br /&gt;
&lt;br /&gt;
Unheimlich viele Probleme hat die Verwaltung der Seriellen Schnittstelle gemacht. Die &amp;quot;SerilPort&amp;quot; Klasse aus dem &amp;quot;System.IO.Ports&amp;quot; Namespace scheint relativ verbuggt zu sein&lt;br /&gt;
Ich habe verschiedene Lösungswege probiert, doch es scheint, als ob Windows nicht mit der Menge der eingehenden Daten klar kommt und zwischendurch immer mal wieder Bytes verliert. Dies führt dann zu Problemen, da ich kein Flow Control in der Datenübertragung der Samples nutze. &amp;lt;br /&amp;gt;&lt;br /&gt;
Letztenendes nutze ich eine etwas unelegante Lösung, bei der ich den Seriellen Buffer in einem neuen Thread per Polling auslese und zwsichenspeichere. Wenn genügend Daten (27 Bytes, da ein Sample aus 27 Bytes besteht) eingelesen wurden, triggert der Thread ein Event, woraufhin der Hauptthread mit der Verarbeitung der Daten beginnt.&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
===Digitale Gleichspannungs-Entkopplung===&lt;br /&gt;
[[Datei:EKG Filter Frequenzgang.png|thumb|200px|right|X: Frequenz(Hz) Y: Dämpfung(dB)]]&lt;br /&gt;
Da es durch verschiedene Effekte zu Gleichspannungs-Offsets in der Messung kommen kann, habe ich in der Software eine Gleichspannungs-Entkopplung implementiert. Dazu werden die Samples jedes einzelnen Kanals vor der Anzeige in einem FIR Hoch Pass Filter neu berechnet. Dabei werden extrem tiefe Frequenzen, und demnach auch der Gleichspannungsoffset, herausgefiltert. Wichtig ist nur, dass die eigentlichen EKG Signale, dessen geringste Frequenz bei ca. 1 Hz liegt, nicht weggefiltert werden. Ein Filter mit 12 Koeffizienten war für meine Anwendung steilflankig genug. Um noch steilere Flanken zu erzielen wäre der Rechenaufwand enorm gestiegen. &lt;br /&gt;
Ein berechnungs Tool von [http://iowahills.com/ Iowahills] hat mir die Berechung der Koeffizienten erleichtert.&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den einzelnen Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man das Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste also eine Software SPI Funktion implementiert werden. Da noch genügend Rechenzeit zur Verfügung stand war das kein großes Problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fazit und Ausblick==&lt;br /&gt;
&lt;br /&gt;
Ich habe mir einige Dinge aufgeschrieben, die man in einer eventuellen Nachfolgerversion umsetzen könnte:&lt;br /&gt;
* Kommunikation nicht über Seriellen Port. Dieser hat mir viele Probleme bereitet und ist für höhere Datenraten nicht unbedingt geeignet.&lt;br /&gt;
* Eigenes Display zur Darstellung der Signale und evtl. kleines Betriebssystem.&lt;br /&gt;
* Höhere Abtastrate für bessere Auflösung und mehr Möglichkeiten bei der Filterung.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83914</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83914"/>
		<updated>2014-07-19T12:02:23Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist Quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige Menge Energie an den Patienten liefern. Intern werden leistungsfähige DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* 200 Samples pro Sekunde&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png&lt;br /&gt;
File:EKG Layout.bmp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Bis auf die Stiftleisten nutze ich ausschließlich SMD Komponenten. Die meisten passiven Komponenten haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 30mm x 70mm groß. Den SUB-D Stecker habe ich einfach auf die Platine gesteckt und von beiden Seiten verlötet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG SubD Verbindung.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal zu bekommen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein an allen Elektroden gleich guter Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg&lt;br /&gt;
File:Widerstand Elektroden.JPG&lt;br /&gt;
File:EKG Elektroden.jpeg&lt;br /&gt;
File:EKG ELektrodengel.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
===Digitale Gleichspannungs-Entkopplung===&lt;br /&gt;
[[Datei:EKG Filter Frequenzgang.png|thumb|200px|right|X: Frequenz(Hz) Y: Dämpfung(dB)]]&lt;br /&gt;
Da es durch verschiedene Effekte zu Gleichspannungs-Offsets in der Messung kommen kann, habe ich in der Software eine Gleichspannungs-Entkopplung implementiert. Dazu werden die Samples jedes einzelnen Kanals vor der Anzeige in einem FIR Hoch Pass Filter neu berechnet. Dabei werden extrem tiefe Frequenzen, und demnach auch der Gleichspannungsoffset, herausgefiltert. Wichtig ist nur, dass die eigentlichen EKG Signale, dessen geringste Frequenz bei ca. 1 Hz liegt, nicht weggefiltert werden. Ein Filter mit 12 Koeffizienten war für meine Anwendung steilflankig genug. Um noch steilere Flanken zu erzielen wäre der Rechenaufwand enorm gestiegen. &lt;br /&gt;
Ein berechnungs Tool von [http://iowahills.com/ Iowahills] hat mir die Berechung der Koeffizienten erleichtert.&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man ein Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste ich also eine eigene Software-SPI Funktion schreiben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Protokoll für die Kommunikation zwischen PC und µC==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Filter_Frequenzgang.png&amp;diff=83912</id>
		<title>Datei:EKG Filter Frequenzgang.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Filter_Frequenzgang.png&amp;diff=83912"/>
		<updated>2014-07-19T11:39:16Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83903</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83903"/>
		<updated>2014-07-18T22:06:08Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist Quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige Menge Energie an den Patienten liefern. Intern werden leistungsfähige DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* 200 Samples pro Sekunde&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png&lt;br /&gt;
File:EKG Layout.bmp&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Bis auf die Stiftleisten nutze ich ausschließlich SMD Komponenten. Die meisten passiven Komponenten haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 30mm x 70mm groß. Den SUB-D Stecker habe ich einfach auf die Platine gesteckt und von beiden Seiten verlötet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:EKG SubD Verbindung.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal zu bekommen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein an allen Elektroden gleich guter Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg&lt;br /&gt;
File:Widerstand Elektroden.JPG&lt;br /&gt;
File:EKG Elektroden.jpeg&lt;br /&gt;
File:EKG ELektrodengel.jpeg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man ein Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste ich also eine eigene Software-SPI Funktion schreiben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Protokoll für die Kommunikation zwischen PC und µC==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83902</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83902"/>
		<updated>2014-07-18T21:41:59Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist Quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige menge Energie an den Patienten liefern. Intern werden leistungsfähige DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* 200 Samples pro Sekunde&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png| Schaltplan des Front End&#039;s&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png| Schaltplan der Schutzbeschaltung&lt;br /&gt;
File:EKG Layout.bmp| Layout der Platine&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG SubD Verbindung.jpeg| Schaltplan des Front End&#039;s&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png| Schaltplan der Schutzbeschaltung&lt;br /&gt;
File:EKG Layout.bmp| Layout der Platine&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal zu bekommen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG| XMC2GO&lt;br /&gt;
File:EKG XMC 2 GO vergleich.JPG| Größenvergleich&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg| EKG Kabel&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg| Verteiler von einem dicken Kabel auf die 10 einzelnen Kabel&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg| Bananenstecker für den Anschluss an Elektroden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein über mehrere Elektroden gleicher Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg| Widerstand mit Alufolie&lt;br /&gt;
File:Widerstand Elektroden.JPG| Widerstand mit EKG Elektroden&lt;br /&gt;
File:EKG Elektroden.jpeg| Elektroden&lt;br /&gt;
File:EKG ELektrodengel.jpeg| Elektrodengel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
//Setzt alle Parameter für das Graph Fenster&lt;br /&gt;
void SetupGraph()&lt;br /&gt;
{			&lt;br /&gt;
       	//Erstelle Liste für LEAD I&lt;br /&gt;
	RollingPointPairList LEAD1_list = new RollingPointPairList(1000);&lt;br /&gt;
			&lt;br /&gt;
	//Erstelle Kurve für LEAD I&lt;br /&gt;
	LineItem LEAD1 = GraphWindow.GraphPane.AddCurve(&amp;quot;L1&amp;quot;,LEAD1_list,Color.FloralWhite,SymbolType.None);&lt;br /&gt;
	//Antialiasing für diese Kurve aktivieren&lt;br /&gt;
	LEAD1.Line.IsAntiAlias = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun ein neues Sample in die Liste zu schreiben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man ein Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste ich also eine eigene Software-SPI Funktion schreiben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Protokoll für die Kommunikation zwischen PC und µC==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_SubD_Verbindung.jpeg&amp;diff=83901</id>
		<title>Datei:EKG SubD Verbindung.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_SubD_Verbindung.jpeg&amp;diff=83901"/>
		<updated>2014-07-18T21:38:06Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_XMC_2_GO_vergleich.JPG&amp;diff=83900</id>
		<title>Datei:EKG XMC 2 GO vergleich.JPG</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_XMC_2_GO_vergleich.JPG&amp;diff=83900"/>
		<updated>2014-07-18T21:22:58Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83899</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83899"/>
		<updated>2014-07-18T20:56:29Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei jedem Verdacht auf eine Erkrankung des Herz-Kreislauf Systems wird meist zuallererst ein EKG gemacht. Es ist Quasi der Diagnosestandard in der Kardiologie, da sich dadurch viele Störungen oder ernsthafte Erkrankungen des Herzens schnell erfassen lassen. Wenig verwunderlich ist es also, dass EKG Geräte heutzutage zur Standardausrüstung eines jeden Krankehauses, Arztes oder Rettungswagens gehören. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der Technische Fortschritt hat natürlich auch hier seine Spuren hinterlassen. So wuchs die Komplexität und Funktionalität der EKG Geräte immer weiter an. Heute gibt es EKG Geräte mit großzügiges Touchdisplays, Sprachfunktion um die Bedienung zu erleichtern, automatische Diagnose Algorithmen die ohne zutun eines Arztes eine Diagnose stellen. Außerdem gibt es Geräte mit integriertem Defibrillator, die bei bedarf automatisch die richtige menge Energie an den Patienten liefern. Intern werden leistungsfähige DSP&#039;s, FPGA&#039;s und Mikrocontroller für die Signalverarbeitung eingesetzt. &amp;lt;br /&amp;gt;&lt;br /&gt;
In diesem Artikel möchte ich mein eigenbau EKG Gerät vorstellen - leider ohne Sprachfunktion oder automatischer Diagnose. Stattdessen mit folgenden Eckdaten:&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
* 24 Bit Auflösung pro Kanal&lt;br /&gt;
* 200 Samples pro Sekunde&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Aktives Treiben der Kabelschirmung &lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
* Software &amp;quot;EKG Viewer&amp;quot; zum betrachten der Signale&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png| Schaltplan des Front End&#039;s&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png| Schaltplan der Schutzbeschaltung&lt;br /&gt;
File:EKG Layout.bmp| Layout der Platine&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal zu bekommen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG| XMC2GO&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg| EKG Kabel&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg| Verteiler von einem dicken Kabel auf die 10 einzelnen Kabel&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg| Bananenstecker für den Anschluss an Elektroden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein über mehrere Elektroden gleicher Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg| Widerstand mit Alufolie&lt;br /&gt;
File:Widerstand Elektroden.JPG| Widerstand mit EKG Elektroden&lt;br /&gt;
File:EKG Elektroden.jpeg| Elektroden&lt;br /&gt;
File:EKG ELektrodengel.jpeg| Elektrodengel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
//Setzt alle Parameter für das Graph Fenster&lt;br /&gt;
void SetupGraph()&lt;br /&gt;
{			&lt;br /&gt;
       	//Erstelle Liste für LEAD I&lt;br /&gt;
	RollingPointPairList LEAD1_list = new RollingPointPairList(1000);&lt;br /&gt;
			&lt;br /&gt;
	//Erstelle Kurve für LEAD I&lt;br /&gt;
	LineItem LEAD1 = GraphWindow.GraphPane.AddCurve(&amp;quot;L1&amp;quot;,LEAD1_list,Color.FloralWhite,SymbolType.None);&lt;br /&gt;
	//Antialiasing für diese Kurve aktivieren&lt;br /&gt;
	LEAD1.Line.IsAntiAlias = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun ein neues Sample in die Liste zu schreiben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man ein Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste ich also eine eigene Software-SPI Funktion schreiben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Protokoll für die Kommunikation zwischen PC und µC==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83898</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83898"/>
		<updated>2014-07-18T20:11:35Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artikel im Aufbau&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel möchte ich die Funktion und die Ergebnisse meines DIY EKG&#039;s vorstellen. Die Groben Features sind folgende:&lt;br /&gt;
&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
** max. 24 Bit Auflösung&lt;br /&gt;
** max. 500 Samples/Second&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png| Schaltplan des Front End&#039;s&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png| Schaltplan der Schutzbeschaltung&lt;br /&gt;
File:EKG Layout.bmp| Layout der Platine&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal zu bekommen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG| XMC2GO&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg| EKG Kabel&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg| Verteiler von einem dicken Kabel auf die 10 einzelnen Kabel&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg| Bananenstecker für den Anschluss an Elektroden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein über mehrere Elektroden gleicher Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen. Das Messergebnis ist auf den Beiden Bildern einsehbar. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg| Widerstand mit Alufolie&lt;br /&gt;
File:Widerstand Elektroden.JPG| Widerstand mit EKG Elektroden&lt;br /&gt;
File:EKG Elektroden.jpeg| Elektroden&lt;br /&gt;
File:EKG ELektrodengel.jpeg| Elektrodengel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
//Setzt alle Parameter für das Graph Fenster&lt;br /&gt;
void SetupGraph()&lt;br /&gt;
{			&lt;br /&gt;
       	//Erstelle Liste für LEAD I&lt;br /&gt;
	RollingPointPairList LEAD1_list = new RollingPointPairList(1000);&lt;br /&gt;
			&lt;br /&gt;
	//Erstelle Kurve für LEAD I&lt;br /&gt;
	LineItem LEAD1 = GraphWindow.GraphPane.AddCurve(&amp;quot;L1&amp;quot;,LEAD1_list,Color.FloralWhite,SymbolType.None);&lt;br /&gt;
	//Antialiasing für diese Kurve aktivieren&lt;br /&gt;
	LEAD1.Line.IsAntiAlias = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun ein neues Sample in die Liste zu schreiben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Grundlegender Programmablauf===&lt;br /&gt;
&lt;br /&gt;
Wie schon bei der PC-Software beschränke ich mich hier auf eine grobe Beschreibung des Ablaufes. Interessierte finden am Ende des Artikels den gesamten Code zum Downloaden.&lt;br /&gt;
&lt;br /&gt;
Nach dem Reset des Mikrocontrollers wird die Startup Routine des XMC1100 aufgerufen. Diese habe ich nicht selber geschrieben, sondern habe die von CMSIS bereitgestellte Routine genutzt. Als nächstes erfolgt die Konfiguration des Takts, sowie die Initialisierung des System-Tick Timers auf eine Tick Frequenz von 1kHz. Danach wird eine Funktion zur Festlegung der Datenrichtung der einzelnen IO Pins aufgerufen. Anschließend wird ein USIC Modul auf UART konfiguriert, sodass mit dem PC kommuniziert werden kann. Als letzter schritt wird der ADS1298 mit einer Standard Konfiguration beschrieben. Sind alle Initialisierungen abgeschlossen springt das Programm in eine leere Endlosschleife. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Ab jetzt wird der gesamte Ablauf über eine Art Scheduler geregelt.&lt;br /&gt;
Der Scheduler errechnet mithilfe der 1kHz des System-Tick Timers den Zeitpunkt an dem eine bestimmte Funktion aufgerufen werden muss und triggert den Aufruf dementsprechend. Sobald die Funktion abgearbeitet wurde springt das Programm wieder zurück in die Endlosschleife, bis der Scheduler die nächste Funktion aufruft.&amp;lt;br /&amp;gt;&lt;br /&gt;
Diese Art der Programmabarbeitung ermöglicht eine einfache Implementierung von Erweiterungen und das Programm bleibt dabei recht übersichtlich. &lt;br /&gt;
&lt;br /&gt;
===Software SPI===&lt;br /&gt;
&lt;br /&gt;
Weiter oben, im Abschnitt &amp;quot;SPI Tücke&amp;quot;, habe ich beschrieben, dass das Chip Select (CS) Signal bei der Übertragung eines Multi-Byte Befehls zwischen den Bytes nicht auf High wechseln darf. Leider ist genau dies der Fall, wenn man ein Hardware-USIC Modul des Mikrocontrollers für die SPI Kommunikation benutzt. Gezwungenermaßen musste ich also eine eigene Software-SPI Funktion schreiben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Protokoll für die Kommunikation zwischen PC und µC==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83871</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83871"/>
		<updated>2014-07-18T18:17:59Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artikel im Aufbau&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel möchte ich die Funktion und die Ergebnisse meines DIY EKG&#039;s vorstellen. Die Groben Features sind folgende:&lt;br /&gt;
&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
** max. 24 Bit Auflösung&lt;br /&gt;
** max. 500 Samples/Second&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png| Schaltplan des Front End&#039;s&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png| Schaltplan der Schutzbeschaltung&lt;br /&gt;
File:EKG Layout.bmp| Layout der Platine&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal zu bekommen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=200px&amp;gt;&lt;br /&gt;
File:EKG XMC 2 GO.JPG| XMC2GO&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=200px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg| EKG Kabel&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg| Verteiler von einem dicken Kabel auf die 10 einzelnen Kabel&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg| Bananenstecker für den Anschluss an Elektroden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein über mehrere Elektroden gleicher Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg| Widerstand mit Alufolie&lt;br /&gt;
File:Widerstand Elektroden.JPG| Widerstand mit EKG Elektroden&lt;br /&gt;
File:EKG Elektroden.jpeg| Elektroden&lt;br /&gt;
File:EKG ELektrodengel.jpeg| Elektrodengel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
//Setzt alle Parameter für das Graph Fenster&lt;br /&gt;
void SetupGraph()&lt;br /&gt;
{			&lt;br /&gt;
       	//Erstelle Liste für LEAD I&lt;br /&gt;
	RollingPointPairList LEAD1_list = new RollingPointPairList(1000);&lt;br /&gt;
			&lt;br /&gt;
	//Erstelle Kurve für LEAD I&lt;br /&gt;
	LineItem LEAD1 = GraphWindow.GraphPane.AddCurve(&amp;quot;L1&amp;quot;,LEAD1_list,Color.FloralWhite,SymbolType.None);&lt;br /&gt;
	//Antialiasing für diese Kurve aktivieren&lt;br /&gt;
	LEAD1.Line.IsAntiAlias = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun ein neues Sample in die Liste zu schreiben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware für den µC==&lt;br /&gt;
&lt;br /&gt;
Da ich eigentlich aus der 8 Bit Welt komme, stellte ich mich innerlich schon auf ein großes Umdenken bei der Programmierung eines Mikrocontrollers mit 32Bit ARM Kern ein. Glücklicherweise gestaltete sich die Programmierung des XMC1100 nicht so viel anders als z.B. die eines AVR&#039;s. Eigentlich erstaunlich, denn der Vergleich eines AVR&#039;s mit einem ARM Mikrocontroller ist rein Leistungstechnisch wie Äpfel mit Birnen zu Vergleichen. Ein Paar Unterschiede gibt es natürlich (wäre komisch wenn nicht). Am meisten aufgefallen sind mir folgende:&lt;br /&gt;
&lt;br /&gt;
*Bitbanding (das Parallele Ausgeben eines kompletten Words auf die Pins) wird vom Cortex M0 nicht unterstützt. Jeder IO Pin muss einzeln gesetzt, rückgesetzt oder getoggelt werden.&lt;br /&gt;
*Das konfigurieren von Modulen wie z.B. Timer, USIC&#039;s ist aufgrund der Komplexität recht schwierig.&lt;br /&gt;
*Interrupts viel komplexer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Entwicklungsumgebung - µVision===&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Keil uVision.png|thumb|300px|right|Keil µVision Entwicklungsumgebung]]&lt;br /&gt;
Die von Infineon empfohlene Entwicklungsumgebung ist die &amp;quot;hauseigene&amp;quot; Software Dave 3. Mit ihr erhält man die Möglichkeit mit sogenannten &amp;quot;Dave Apps&amp;quot; zu arbeiten. Das sind vorgefertigte konfigurierbare Module, die man zusammenschalten kann und einem so einen Teil der Schreibarbeit abgenommen wird. Sicherlich ist diese Methode eine sehr Interessante Art der Programmierung und bietet viele Möglichkeiten.&lt;br /&gt;
Da das App-Modell für mich jedoch völlig neu war und mir auf dem ersten Blick recht abstrakt vorkam, suchte ich für dieses Projekt nach einer alternativen Entwicklungsumgebung mit kürzerer Einarbeitungszeit. Mit der Software µVision von Keil kam ich direkt gut zurecht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Protokoll für die Kommunikation zwischen PC und µC==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Keil_uVision.png&amp;diff=83855</id>
		<title>Datei:EKG Keil uVision.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Keil_uVision.png&amp;diff=83855"/>
		<updated>2014-07-18T17:31:37Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_XMC_2_GO.JPG&amp;diff=83846</id>
		<title>Datei:EKG XMC 2 GO.JPG</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_XMC_2_GO.JPG&amp;diff=83846"/>
		<updated>2014-07-18T16:55:20Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83845</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83845"/>
		<updated>2014-07-18T16:45:41Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artikel im Aufbau&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel möchte ich die Funktion und die Ergebnisse meines DIY EKG&#039;s vorstellen. Die Groben Features sind folgende:&lt;br /&gt;
&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
** max. 24 Bit Auflösung&lt;br /&gt;
** max. 500 Samples/Second&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png| Schaltplan des Front End&#039;s&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png| Schaltplan der Schutzbeschaltung&lt;br /&gt;
File:EKG Layout.bmp| Layout der Platine&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal zu bekommen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
====Die SPI Tücke====&lt;br /&gt;
&lt;br /&gt;
Der Befehlssatz des ADS1298 besteht aus 10 Befehlen für z.B. das Starten / Stoppen einer Wandlung oder das versetzen in den Standby Modus. Die meisten Befehle davon haben eine Länge von einem Byte. Die Befehle für das Auslesen und das Schreiben eines Registers erwarten nach dem eigentlichen Befehls-Byte jedoch noch weitere Bytes für die Adresse des Registers und die eventuell zu schreibenden Daten. Die &amp;quot;Tücke&amp;quot; dabei ist, dass zwischen den einzelnen Bytes das Chip-Select (CS) Signal nicht zurück auf high gesetzt werden darf, da dies das interne SPI Modul zurücksetzen würde und die nachfolgenden Bytes nicht mehr richtig Interpretiert werden könnten. Im Datenblatt des ADS1298 fand ich hierzu leider nur einen kleinen Satz, der schnell überlesen ist. Vielleicht ist dieses Verfahren aber auch gängige Praxis in der SPI Kommunikation. Das kann ich nicht beurteilen, da ich noch nicht viel mit SPI gemacht habe. Evtl. weiß jemand mehr?&lt;br /&gt;
&lt;br /&gt;
====Die Register-Read Tücke====&lt;br /&gt;
&lt;br /&gt;
Als ich die SPI Tücke dann entdeckt und meine Firmware dementsprechend angepasst habe, konnte ich immerhin schon mal in Konfigurationsregister schreiben. Das Auslesen funktionierte allerdings trotzdem noch nicht. Das liegt daran, dass sich der ADS1298 nach dem Reset im &amp;quot;Read Data Continously Mode&amp;quot; befindet. In diesem Modus wird bei jedem ankommendem Serial-Clock Takt ein Bit aus dem Samplespeicher ausgegeben. Dieser Modus ist vor allem für Anwendungen mit hoher Samplerate gut geeignet, da dabei nicht jedesmal ein Befehl gesendet werden muss, bevor man ein Sample ausgelesen kann. Um Daten aus Konfigurationsregistern lesen zu können, muss man also einfach vorher den &amp;quot;Read Data Continously Mode&amp;quot; stoppen. Da bei meiner Anwendung nur niedrige Datenraten notwendig sind, bleibt der Modus auch für die weitere Laufzeit aus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg| EKG Kabel&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg| Verteiler von einem dicken Kabel auf die 10 einzelnen Kabel&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg| Bananenstecker für den Anschluss an Elektroden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein über mehrere Elektroden gleicher Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg| Widerstand mit Alufolie&lt;br /&gt;
File:Widerstand Elektroden.JPG| Widerstand mit EKG Elektroden&lt;br /&gt;
File:EKG Elektroden.jpeg| Elektroden&lt;br /&gt;
File:EKG ELektrodengel.jpeg| Elektrodengel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
//Setzt alle Parameter für das Graph Fenster&lt;br /&gt;
void SetupGraph()&lt;br /&gt;
{			&lt;br /&gt;
       	//Erstelle Liste für LEAD I&lt;br /&gt;
	RollingPointPairList LEAD1_list = new RollingPointPairList(1000);&lt;br /&gt;
			&lt;br /&gt;
	//Erstelle Kurve für LEAD I&lt;br /&gt;
	LineItem LEAD1 = GraphWindow.GraphPane.AddCurve(&amp;quot;L1&amp;quot;,LEAD1_list,Color.FloralWhite,SymbolType.None);&lt;br /&gt;
	//Antialiasing für diese Kurve aktivieren&lt;br /&gt;
	LEAD1.Line.IsAntiAlias = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun ein neues Sample in die Liste zu schreiben&lt;br /&gt;
&lt;br /&gt;
== Das Protokoll ==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83835</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83835"/>
		<updated>2014-07-18T15:33:21Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: Formatierung und Bilder&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artikel im Aufbau&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel möchte ich die Funktion und die Ergebnisse meines DIY EKG&#039;s vorstellen. Die Groben Features sind folgende:&lt;br /&gt;
&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
** max. 24 Bit Auflösung&lt;br /&gt;
** max. 500 Samples/Second&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Gesamtes System.JPG|500px|right]]&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png| Schaltplan des Front End&#039;s&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png| Schaltplan der Schutzbeschaltung&lt;br /&gt;
File:EKG Layout.bmp| Layout der Platine&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal zu bekommen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable float right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15em&amp;quot; | Elektrode !! style=&amp;quot;width:15em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Kabel.jpeg| EKG Kabel&lt;br /&gt;
File:EKG Kabel Verteiler.jpeg| Verteiler von einem dicken Kabel auf die 10 einzelnen Kabel&lt;br /&gt;
File:EKG Kabel Bananenstecker.jpeg| Bananenstecker für den Anschluss an Elektroden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein über mehrere Elektroden gleicher Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=150px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg| Widerstand mit Alufolie&lt;br /&gt;
File:Widerstand Elektroden.JPG| Widerstand mit EKG Elektroden&lt;br /&gt;
File:EKG Elektroden.jpeg| Elektroden&lt;br /&gt;
File:EKG ELektrodengel.jpeg| Elektrodengel&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
//Setzt alle Parameter für das Graph Fenster&lt;br /&gt;
void SetupGraph()&lt;br /&gt;
{			&lt;br /&gt;
       	//Erstelle Liste für LEAD I&lt;br /&gt;
	RollingPointPairList LEAD1_list = new RollingPointPairList(1000);&lt;br /&gt;
			&lt;br /&gt;
	//Erstelle Kurve für LEAD I&lt;br /&gt;
	LineItem LEAD1 = GraphWindow.GraphPane.AddCurve(&amp;quot;L1&amp;quot;,LEAD1_list,Color.FloralWhite,SymbolType.None);&lt;br /&gt;
	//Antialiasing für diese Kurve aktivieren&lt;br /&gt;
	LEAD1.Line.IsAntiAlias = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun ein neues Sample in die Liste zu schreiben&lt;br /&gt;
&lt;br /&gt;
== Das Protokoll ==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_ELektrodengel.jpeg&amp;diff=83832</id>
		<title>Datei:EKG ELektrodengel.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_ELektrodengel.jpeg&amp;diff=83832"/>
		<updated>2014-07-18T15:26:45Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Elektroden.jpeg&amp;diff=83831</id>
		<title>Datei:EKG Elektroden.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Elektroden.jpeg&amp;diff=83831"/>
		<updated>2014-07-18T15:26:23Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Kabel_Verteiler.jpeg&amp;diff=83816</id>
		<title>Datei:EKG Kabel Verteiler.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Kabel_Verteiler.jpeg&amp;diff=83816"/>
		<updated>2014-07-18T14:29:59Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: Jojocp lud eine neue Version von „Datei:EKG Kabel Verteiler.jpeg“ hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Kabel_Verteiler.jpeg&amp;diff=83815</id>
		<title>Datei:EKG Kabel Verteiler.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Kabel_Verteiler.jpeg&amp;diff=83815"/>
		<updated>2014-07-18T14:26:45Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Kabel_Bananenstecker.jpeg&amp;diff=83814</id>
		<title>Datei:EKG Kabel Bananenstecker.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Kabel_Bananenstecker.jpeg&amp;diff=83814"/>
		<updated>2014-07-18T14:25:19Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Kabel.jpeg&amp;diff=83807</id>
		<title>Datei:EKG Kabel.jpeg</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Kabel.jpeg&amp;diff=83807"/>
		<updated>2014-07-18T14:12:28Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Gesamtes_System.JPG&amp;diff=83806</id>
		<title>Datei:EKG Gesamtes System.JPG</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Gesamtes_System.JPG&amp;diff=83806"/>
		<updated>2014-07-18T14:05:58Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83789</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83789"/>
		<updated>2014-07-18T10:20:51Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;center&amp;gt;&#039;&#039;Dieser Artikel nimmt am Artikelwettbewerb [http://www.mikrocontroller.net/topic/infineon-xmc-design-contest-2014 Infineon XMC Design Contest 2014] teil.&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Platine unbestückt.jpg|300px|thumb|right|Unbestücktes EKG Board]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artikel im Aufbau&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel möchte ich die Funktion und die Ergebnisse meines DIY EKG&#039;s vorstellen. Die Groben Features sind folgende:&lt;br /&gt;
&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
** max. 24 Bit Auflösung&lt;br /&gt;
** max. 500 Samples/Second&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png| Schaltplan des Front End&#039;s&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png| Schaltplan der Schutzbeschaltung&lt;br /&gt;
File:EKG Layout.bmp| Layout der Platine&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differenz PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen, die in Extremfällen eine Größe von bis zu 800mV haben können - sogenannte Common Mode Störungen. Die Ursache für diese Störungen sind meist Leitungen oder Elektrische Geräte, die Netzspannung führen und induktiv oder kapazitiv in den Körper oder in die EKG Kabel einstreuen. Da die Störungen am gesamten Körper, an allen Kabeln und somit auch an allen Eingängen des ADS1298 mit nahezu gleicher Amplitude und gleicher Phase anliegen, wird ein Großteil davon vom Differenzverstärker gar nicht erst mit verstärkt. Um ein noch störungsfreieres Signal zu bekommen bietet der ADS1298 ein weiteres Feature um die Störungen direkt im Körper zu unterdrücken.&lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pinbelegung.bmp|200px|thumb|right|Pinbelegung des EKG Kabels (evtl. Standard?)]]&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | &#039;&#039;&#039;Pinbelegung des 15 Poligen SUB D Steckers&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:10em&amp;quot; | Elektrode !! style=&amp;quot;width:10em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein über mehrere Elektroden gleicher Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg| Widerstand mit Alufolie&lt;br /&gt;
File:Widerstand Elektroden.JPG| Widerstand mit EKG Elektroden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
//Setzt alle Parameter für das Graph Fenster&lt;br /&gt;
void SetupGraph()&lt;br /&gt;
{			&lt;br /&gt;
       	//Erstelle Liste für LEAD I&lt;br /&gt;
	RollingPointPairList LEAD1_list = new RollingPointPairList(1000);&lt;br /&gt;
			&lt;br /&gt;
	//Erstelle Kurve für LEAD I&lt;br /&gt;
	LineItem LEAD1 = GraphWindow.GraphPane.AddCurve(&amp;quot;L1&amp;quot;,LEAD1_list,Color.FloralWhite,SymbolType.None);&lt;br /&gt;
	//Antialiasing für diese Kurve aktivieren&lt;br /&gt;
	LEAD1.Line.IsAntiAlias = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun ein neues Sample in die Liste zu schreiben&lt;br /&gt;
&lt;br /&gt;
== Das Protokoll ==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83786</id>
		<title>EKG mit XMC µC</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=EKG_mit_XMC_%C2%B5C&amp;diff=83786"/>
		<updated>2014-07-18T09:48:59Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: Formatierung und hinzufügen des &amp;quot;Elektroden&amp;quot; Abschnitts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;von Jost H.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;center&amp;gt;&#039;&#039;Dieser Artikel nimmt am Artikelwettbewerb [http://www.mikrocontroller.net/topic/infineon-xmc-design-contest-2014 Infineon XMC Design Contest 2014] teil.&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Platine unbestückt.jpg|300px|thumb|right|Unbestücktes EKG Board]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Artikel im Aufbau&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel möchte ich die Funktion und die Ergebnisse meines DIY EKG&#039;s vorstellen. Die Groben Features sind folgende:&lt;br /&gt;
&lt;br /&gt;
* Aufnahme eines 12 Kanal EKG&#039;s&lt;br /&gt;
** max. 24 Bit Auflösung&lt;br /&gt;
** max. 500 Samples/Second&lt;br /&gt;
* Reduzierung von Störungen durch Right-Leg-Drive&lt;br /&gt;
* Überprüfung der Elektroden auf richtigen Kontakt&lt;br /&gt;
* Schutz der Eingänge vor Spannungsspitzen (ESD, Defibrillator)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Warnung ==&lt;br /&gt;
&lt;br /&gt;
Da die Hardware funktionsbedingt möglichst niederohmig über die Elektroden mit dem Körper verbunden ist, stellt dies eine nicht unerhebliche Gefahr für den Menschen dar. Im Fehlerfall hätte der Fehlerstrom also die besten Voraussetzungen um ungehindert in den Körper einzudringen. Deshalb sind im medizinischen Bereich besondere Sicherheitsvorkehrungen zu erfüllen. &lt;br /&gt;
Die große Schwierigkeit ist die sichere Netztrennung. Professionelle EKG Geräte nutzen dazu Optokoppler, Digitale Isolatoren, Trennverstärker und galvanisch getrennte Netzteile. Und das alles auch noch mit medizinischer Zulassung! Die gesamte Entwicklung erfordert daher eine Menge fachspezifisches Wissen und Erfahrung in diesem Bereich. Da ich es mir keinesfalls zutraue diese Sicherheitsmaßnahmen normgerecht zu erfüllen, habe ich eine wichtige Maßnahme ergriffen um den Betrieb meiner Schaltung trotzdem einigermaßen sicher zu gestalten.&amp;lt;br /&amp;gt;&lt;br /&gt;
Ich betreibe die Schaltung ausschließlich über einen Laptop im BATTERIEBETRIEB! Dadurch wird sichergestellt, dass im Fehlerfall nicht mehr als die 19,5V des Akkus am Körper anliegen können.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Falls jemand beabsichtigt diese Schaltung nachzubauen und zu verwenden tut dies auf eigene Gefahr!&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Was ist ein EKG?==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Original.jpg|thumb|300px|right|Professionelles 6 Kanal EKG. Ableitungen I, II und III sind zu sehen]]&lt;br /&gt;
&lt;br /&gt;
Das Herz eines jeden Menschen funktioniert, wie jeder andere Muskel auch, mit elektrischer Erregung. Beim Herzen geschieht dies jedoch völlig unbewusst über den Sinusknoten und den AV-Knoten. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eines der wichtigsten Geräte in der Kardiologie, der Elektrokardiograph, kann genau diese elektrische Erregung über Elektroden an der Hautoberfläche messen und ihre Größe auf einem Bildschirm oder auf Millimeterpapier graphisch darstellen(siehe Bild rechts).&lt;br /&gt;
Das Wort &amp;quot;EKG&amp;quot; ist ein Akronym und bedeutet &#039;&#039;Elektrokardiogramm&#039;&#039;. Allerdings haben sich noch zwei weitere Bedeutungen eingebürgert. Die Unterscheidung ist manchmal nicht ganz eindeutig, deswegen hier nochmal zusammengefasst:&lt;br /&gt;
&lt;br /&gt;
* Elektrokardiographie  - Das &#039;&#039;Verfahren&#039;&#039; im allgemeinen&lt;br /&gt;
* Elektrokardiogramm  - Der &#039;&#039;Graph&#039;&#039; der aufgezeichneten Herzspannungskurven&lt;br /&gt;
* Elektrokardiograph  - Das &#039;&#039;Gerät&#039;&#039; mit dem das Elektrokardiogramm aufgezeichnet wird&lt;br /&gt;
&lt;br /&gt;
Auch in dieser Doku verwende ich das Wort &amp;quot;EKG&amp;quot; mit unterschiedlichen Bedeutungen, aber ich denke man kann immer erkennen was gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Die heutigen EKG&#039;s nehmen meist nicht nur einen Graphen auf, sondern gleich mehrere auf einmal und ermöglichen so einen &amp;quot;Blick&amp;quot; auf das Herz aus verschiedenen Richtungen. Dazu werden mehrere Elektroden an verschiedenen Positionen am Körper angebracht um die Differenzen zwischen verschiedenen Elektrodenkonstellationen zu messen- die Ableitungen. Man kann sie in drei Gruppen einordnen die jeweils nach ihren Erfindern benannt wurden:&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Einthoven===&lt;br /&gt;
Hierbei werden Elektroden an den rechten Arm, den linken Arm, sowie an den linken Fuß angebracht. Das Englische Fachwort für diese drei Elektroden lautet &#039;&#039;Limb Lead&#039;s&#039;&#039;. Daraus ergeben sich drei Möglichkeiten eine Spannungsdifferenz zu messen - also drei verschiedene Ableitungen: Lead I, Lead II, Lead III. Willem Einthoven hat eine Regel über diese Ableitungen aufgestellt, die sich mit dem nach ihm benannten Einthoven Dreieck veranschaulichen und belegen lässt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I + (-Lead II) + Lead III = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Durch umstellen der Formel können wir nun also aus zwei bekannten Ableitungen die dritte berechnen. Das mache ich mir auch bei meinem EKG zunutze und messe lediglich Lead II und Lead III, woraus sich später in der Software Lead I errechnen lässt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   Lead I = Lead II - Lead III&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Goldenberg===&lt;br /&gt;
Die Ableitung nach Goldenberg bietet uns drei weitere Ableitungen: aVR, aVL, aVF. (augmented-vector-Right/Left/Foot)&amp;lt;br /&amp;gt;&lt;br /&gt;
Sie sind jedoch ein Sonderfall, da sie meist nicht wirklich gemessen werden, sondern aus Lead I, Lead II und Lead III errechnet werden. Die Berechnung hierfür ist denkbar einfach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVR= \frac {-(Lead I + Lead II)}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVL= \frac {Lead I - Lead II}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
   aVF= \frac {Lead II + Lead III}{2}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Ableitung nach Wilson===&lt;br /&gt;
Hierbei werden sechs Elektroden an festgelegten Positionen an der Brust angebracht. Anders als die anderen beiden Ableitungen(diese sind bipolare Messungen) ist die Ableitung nach Wilson eine Unipolare Messung. Das heißt, dass alle sechs Elektroden einen gemeinsamen Bezugspunkt für die Messung haben - das &#039;&#039;Wilson Central Terminal&#039;&#039; - eine virtuelle Elektrode in der Körpermitte. Diese virtuelle Elektrode wird gebildet, indem die drei Limb Leads(siehe Ableitung nach Einthoven) über drei Widerstände als Stern verbunden werden. Der Sternpunkt ist dann das Wilson Central Terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EKG Blockschaltbild.svg|200px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Die Hardware besteht im Wesentlichen aus zwei Modulen: Zum einen aus dem XMC2GO Board, welches für die Signalverarbeitung und die Kommunikation zum PC zuständig ist, zum Anderen aus einer Platine mit einem ADS1298 IC und einigem Hühnerfutter, für die Aufzeichnung und Wandlung der Analogsignale. Verbunden werden sie über simple Stift-/Buchsenleisten. Die Kommunikation der beiden Module läuft über einen SPI Bus.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Da der ADS1298 ein 64 Pin TQFP Gehäuse hat (Pin pitch = 0.5mm) und einige Durchkontaktierungen nötig waren, entschied ich mich direkt für eine professionell geätzte Leiterplatte. Die passiven Bauteile haben die Größe 0603 und 0805. So war es möglich das ganze Design ziemlich klein zu halten. Die Platine ist ohne den XMC2GO 20mm x 50mm groß.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Ein gutes Drittel der Platine wird von einer Schutzschaltung belegt, welche den Patienten, aber auch die Hardware schützen soll. Dieser besteht aus folgenden Bauteilen:&lt;br /&gt;
*Ein Patienten-Schutz-Widerstand soll evtl auftretende Fehlerströme durch den Körper auf einen ungefährlichen Wert begrenzen&lt;br /&gt;
*Eine bipolare TVS Diode begrenzt eventuelle am Eingang anliegende Spannungsspitzen auf max. 15V.&lt;br /&gt;
*Eine Doppel Shottky Diode begrenzt die 15V weiter auf VDD + U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt; bzw. VSS - U&amp;lt;sub&amp;gt;forward&amp;lt;/sub&amp;gt;. Ein der Shottky Diode vorgeschalteter Widerstand begrenzt den Strom durch die Diode dabei auf maximal 80mA.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zugegeben, der Schutz der Hardware war nicht zwingend notwendig, da er das IC hauptsächlich vor Impulsen eines Defibrillator schützen soll, die aber mit allerhöchster Wahrscheinlichkeit nie in Kontakt mit meinem EKG kommen werden. Da ich mein Projekt allerdings so &amp;quot;realitätsnah&amp;quot; wie möglich halten wollte, habe ich die Schutzschaltung trotzdem mit drauf gebaut. &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit einem Taster auf der Platine wird man bestimmte Funktionen Triggern können(noch nicht implementiert). Durch zwei zusätzliche LED&#039;s (zusätzlich zu denen auf dem XMC2GO Board) wird der aktuelle Betriebszustand angezeigt. &amp;lt;br /&amp;gt;&lt;br /&gt;
So hab ich mir das zumindest gedacht... Hätte ich vorher das Datenblatt des XMC&#039;s genauer gelesen, hätte ich gewusst, dass man Pin 2.7 und 2.9, an denen die LED&#039;s hängen,  nicht als Output konfigurieren kann. Naja, der gute Wille war da und die zwei LED&#039;s auf dem XMC2GO sollten auch locker reichen.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Versorgungsspannung für die gesamte Hardware wird über die 5V aus dem USB Port bezogen. Ein Low-Dropout Regler auf dem XMC2GO regelt sie dann auf 3,3V herunter. Er soll bis zu 150mA liefern können, wovon sich die µC&#039;s des XMC2GO selber schon mal ca. 75mA abzwicken. Dem ADS1298 reichen bei höchster Sample Rate schon süße 3,25mA, also sollten noch genügend Reserven vorhanden sein.&amp;lt;br /&amp;gt;&lt;br /&gt;
Um eine möglichst störungsfreie Digitalisierung zu gewährleisten, habe ich die Versorgungsspannung für den Analogen Teil der Schaltung über zwei 10µH Drosseln vom Digitalen entkoppelt. Besonders vom SPI Bus müsse man sonst während der Übertragung mit erheblichen Störungen rechnen.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:EKG Frontend Schaltplan.png| Schaltplan des Front End&#039;s&lt;br /&gt;
File:EKG Schutzbeschaltung Schaltplan.png| Schaltplan der Schutzbeschaltung&lt;br /&gt;
File:EKG Layout.bmp| Layout der Platine&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ADS1298 ===&lt;br /&gt;
&lt;br /&gt;
Für die Verstärkung und Wandlung der schwachen Signale des Herzens nutze ich den [http://www.ti.com/product/ads1298 ADS1298] aus einer IC Familie von Texas Instruments, welche extra für die Aufzeichnung von Biosignalen entwickelt wurde.&lt;br /&gt;
Die Größe der Signale beträgt ca. 1mV peak to peak, die durch Differential PGA&#039;s(Programmable gain amplifier) auf einen brauchbaren Pegel angehoben werden. Direkt danach erfolgt die Analog-Digital Wandlung durch Delta Sigma ADC&#039;s. Da es für jeden der 8 Kanäle einen separaten Wandler gibt, erfolgt die Abtastung auch absolut simultan. &amp;lt;br /&amp;gt;&lt;br /&gt;
Eine große Herausforderung bei der Aufzeichnung eines Qualitativen Signals sind Störungen (Sogenannte Common-Mode Störungen), die eine Größe von bis zu 1,5V haben können. Sie schleichen sich überall ins System ein, um unser EKG Signal zu ruinieren. Aus dem Grund wurde das Right Leg Drive erfunden. &lt;br /&gt;
Dabei wird der Common-Mode Anteil eines oder mehrerer Eingänge invertiert und über eine Elektrode auf das Rechte Bein gespeist. Dadurch heben sich die Störungen dann auf. Auch dazu bietet der ADS1298 ein Modul bei dem man den zu invertierenden Eingang intern per Multiplexer auswählen kann.&lt;br /&gt;
&lt;br /&gt;
* 24 Bit ADC Auflösung bei 8KSPS (kilo samples per second)&lt;br /&gt;
* 17 Bit ADC Auflösung bei 32KSPS&lt;br /&gt;
* Programmable Gain Amplifier&lt;br /&gt;
* Lead off detection&lt;br /&gt;
* Wilson Central Terminal&lt;br /&gt;
* Right Leg Drive&lt;br /&gt;
* SPI Interface&lt;br /&gt;
* Interne Referenzsspannung&lt;br /&gt;
* Internes Testsignal&lt;br /&gt;
&lt;br /&gt;
===XMC2GO===&lt;br /&gt;
&lt;br /&gt;
Das [http://www.infineon.com/cms/en/product/evaluation-boards/KIT_XMC_2GO_XMC1100_V1/productType.html?productType=db3a304443537c4e01436ccecb5d154f XMC2GO] ist ein winziges, sehr kostengünstiges (um die 5€) Entwicklungsboard für die neue XMC Mikrocontroller Serie von Infineon. Auf dem Board befinden sich 2 IC&#039;s: Ein XMC4200 und ein XMC1100.&amp;lt;br /&amp;gt;&lt;br /&gt;
Der 4200&#039;er dient ausschließlich dem Programmieren und dem Debuggen sowie als USB-UART Bridge. Um ihn muss man sich als Entwickler überhaupt nicht kümmern, da er bereits mit der richtigen Firmware geliefert kommt und nur ein Mittel zum Zweck ist. &amp;lt;br /&amp;gt;&lt;br /&gt;
Der XMC1100 ist der eigentliche µC zum Entwickeln. Seine Pins sind zu einem großen Teil auf die zwei 8 poligen Leisten an den Seiten des Boards gemapped worden um ihn an externe Hardware anschließen zu können. Über die Pins kann auch die Versorgungsspannung von 3,3V abgegriffen werden bzw. eine externe Spannungsquelle angeschlossen werden, wenn man den USB Port nicht benutzen möchte. Desweiteren befinden sich zwei LED&#039;s auf dem Board, die ganz normal über Portpins angesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
* ARM M0 (32 Bit)&lt;br /&gt;
* 32MHz&lt;br /&gt;
* 64kByte Flash&lt;br /&gt;
* 16kByte Ram&lt;br /&gt;
* Vier 16 Bit Timer&lt;br /&gt;
* 12 Bit ADC&lt;br /&gt;
* RTC&lt;br /&gt;
* Zwei Kanal USIC (SPI, UART, I2C...)&lt;br /&gt;
* Interner Temperatursensor&lt;br /&gt;
* On Chip Voltage Regulator&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===EKG - Kabel===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Pinbelegung.bmp|200px|thumb|right|Pinbelegung des EKG Kabels (evtl. Standard?)]]&lt;br /&gt;
Ein solches Kabel lässt sich relativ leicht selber bauen. Man sollte allerdings auf eine ausreichende Schirmung achten.  Ich hab mich aus optischen Gründen gegen einen Selbstbau entschieden. Für unter 20€ fand ich ein China Kabel, welches aber einen sehr guten Eindruck macht. Da mir der Hersteller / Vertreiber des Kabels keine angaben zur Pinbelegung des 15 poligen Sub-D Steckers machen konnte, musste ich im Internet suchen. Viel gefunden habe ich dazu nicht. Aber auf&lt;br /&gt;
[http://fongheart.blogspot.de/2013/10/olimex-ekgemg-audio-stereo-socket-to-10.html DIESER] Seite fand ich eine hübsche Tabelle, die Licht ins Dunkle brachte. Also hab ich die gesamte Entwicklung und vor allem das Layout auf diese Pinbelegung ausgelegt und gehofft, dass das bestellte Kabel die selbe Pinbelegung haben wird. Als es dann da war habe ich es direkt durchgemessen und zum Glück festgestellt, dass alles richtig ist. Wäre das nicht so gewesen, hätte ich mir noch einen Adapter bauen müssen - Nicht schön aber auch nicht weiter schlimm.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-datatable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | &#039;&#039;&#039;Pinbelegung des 15 Poligen SUB D Steckers&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:10em&amp;quot; | Elektrode !! style=&amp;quot;width:10em&amp;quot; | Pin &lt;br /&gt;
|-&lt;br /&gt;
| RA || 9 &lt;br /&gt;
|-&lt;br /&gt;
| LA || 10 &lt;br /&gt;
|-&lt;br /&gt;
| RL || 14 &lt;br /&gt;
|-&lt;br /&gt;
| LL || 11&lt;br /&gt;
|-&lt;br /&gt;
| V1 || 12&lt;br /&gt;
|-&lt;br /&gt;
| V2 || 1&lt;br /&gt;
|-&lt;br /&gt;
| V3 || 2&lt;br /&gt;
|-&lt;br /&gt;
| V4 || 3&lt;br /&gt;
|-&lt;br /&gt;
| V5 || 4&lt;br /&gt;
|-&lt;br /&gt;
| V6 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Elektroden===&lt;br /&gt;
&lt;br /&gt;
Die Qualität des EKG Signals ist sehr stark von dem Übergangswiderstand zwischen Elektrode und Haut abhängig.&lt;br /&gt;
Dabei ist jedoch nicht ausschließlich der absolute Widerstand zur Haut ausschlaggebend, sondern vielmehr ein an allen Elektroden gleich guter Kontakt. &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Angenommen wir befestigen zwei Elektroden am Körper, der mit 100mV 50Hz Common Mode Störungen belastet ist, und wollen über einen Differenzverstärker ein 1mV großes Signal vom Herzen messen. Wenn beide Elektroden einen gleich guten Kontakt zum Körper haben, werden über beide Elektroden die 100mV Störungen aufgenommen. Da die Differenz von 100mV und 100mV = 0 ist, heben sich die Störungen im Differenzverstärker auf und es werden nur die EKG Signale verstärkt. &amp;lt;br /&amp;gt;&lt;br /&gt;
Hat nun allerdings eine Elektrode einen schlechteren Kontakt als die andere, wird dieses Signal, bedingt durch den höheren Widerstand, abgeschwächt - als extremes Beispiel um 50%. Die Störungen werden im Differenzverstärker nicht mehr komplett aufgehoben, da die Differenz aus 100mV und 50mV = 50mV ist. Diese 50mV überlagern das eigentlich interessante Signal und es ist nicht mehr erkennbar oder es ist erheblicher Filteraufwand nötig.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Genau diese Probleme hatte ich, als ich anfangs mit 5 cent Stücken oder Alufolie als Elektrode experimentierte.&lt;br /&gt;
Wenn man die ganze Sache also halbwegs ernst angehen will, sollte man sich richtige Elektroden kaufen, da sich bei Selbstbau Lösungen einfach kein guter und vor allem kein über mehrere Elektroden gleicher Kontakt herstellen lässt. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mich hat interessiert, was für einen Vorteil richtige EKG Elektroden mit Elektrodengel wirklich haben. Deswegen habe ich den Widerstand zwischen meinen beiden Händen einmal mit Elektroden und einmal mit einem einfachen Metall-Haut Kontakt gemessen: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=packed-hover heights=250px&amp;gt;&lt;br /&gt;
File:Widerstand Alufolie.jpg| Widerstand mit Alufolie&lt;br /&gt;
File:Widerstand Elektroden.JPG| Widerstand mit EKG Elektroden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ich weiß nicht in wie fern ich den beiden Werte glauben schenken kann, da sie mir ein wenig hoch vorkommen. Aber was zählt ist der Unterschied - und der ist ja nicht gerade gering! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software - EKG Viewer ==&lt;br /&gt;
[[Datei:EKG 3.png|thumb|300px|right|Frühe Version der Software. Zu sehen sind die drei Ableitungen nach Einthoven.]]&lt;br /&gt;
&lt;br /&gt;
Die Software zum anschauen der EKG Signale und zum verwalten der Hardware habe ich in C# geschrieben.&lt;br /&gt;
Als Entwicklungsumgebung habe ich das Open Source Programm [http://www.icsharpcode.net/opensource/sd/ SharpDevelop] benutzt.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ist halbwegs Modular aufgebaut. So findet man zusammengehörende Elemente (wie z.B. COM Port Name, Baudrate, Connect-Button) in einer dementsprechenden Groupbox. Manche Elemente sind dauerhaft ausgegraut - können also nicht benutzt werden. Das hat den Grund, dass ich diese Elemente teilweise während der Entwicklung gebraucht und nachher ausgegraut habe, oder prophylaktisch für eventuell folgende Versionen eingebaut habe. Das Entwickeln der GUI war durch den Form Editor von SharpDevelop recht leicht und schnell gemacht.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Die Software überprüft direkt nach öffnen des Seriellen Ports das Hardware ID Register des ADS1298 um sicher zu stellen, dass man nicht nur den XMC2GO ohne EKG-Platine angeschlossen hat.&lt;br /&gt;
Eine große Hilfe beim Entwickeln der Software war das Tool &amp;quot;Hterm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Die Klasse &amp;quot;EKG&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Um mir das Leben etwas zu erleichtern, habe ich eine Klasse geschrieben, in der alle Funktionen und Parameter, die für die Steuerung und Verwaltung der EKG Hardware wichtig sind, zusammengefasst sind. Auch die komplette Verwaltung der Seriellen Schnittstelle wird von dieser Klasse übernommen. So ist es sehr leicht die Hardware anzusprechen. Das hat den Vorteil, dass man sich später besser auf das Programmieren der GUI und das ganze drum herum konzentrieren kann. Zum Beispiel habe ich eine &#039;&#039;Auto Lead Off&#039;&#039; Funktion eingebaut, die komplett selbstständig in einstellbaren Zeitabständen den Status der Elektroden einliest und ein Event in der Hauptklasse triggert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Methoden der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Methode !! Beschreibung !! style=&amp;quot;width:20%&amp;quot; | Parameter !! style=&amp;quot;width:20%&amp;quot; | Rückgabeparameter&lt;br /&gt;
|-&lt;br /&gt;
| Connect()&lt;br /&gt;
|| Versucht eine Verbindung mit der Hardware aufzubauen&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|| bool: true = erfolgreich verbunden, false = verbinden fehlgeschlagen&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect()&lt;br /&gt;
|| Beendet evtl. noch laufende Messungen und disonnected die Hardware.&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StartSampling()&lt;br /&gt;
|| Startet die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|-&lt;br /&gt;
| StopSampling()&lt;br /&gt;
|| Stoppt die Messung&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|style=&amp;quot;text-align:center&amp;quot; | /&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Properties der EKG Klasse&lt;br /&gt;
|-&lt;br /&gt;
! Property!! Read !! Write&lt;br /&gt;
|-&lt;br /&gt;
| IsConnected || True = mit Hardware verbunden, False = nicht verbunden || Read only&lt;br /&gt;
|-&lt;br /&gt;
| IsRunning || True = Sampling läuft, False = Sampling gestoppt || Read only&lt;br /&gt;
|-&lt;br /&gt;
| Samplerate || Liest aktuell eingestellte Samplerate || Setzt die Samplerate (auch im laufenden Sampling)&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffEnabled || True = Automatisches  || Aktiviert bzw. deaktiviert das AutoLOFF&lt;br /&gt;
|-&lt;br /&gt;
| AutoLeadOffIntervall || Liest aktuelles Intervall, mit dem der Lead OFF Status abgefragt wird || Setzt dieses Intervall&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;padding-bottom:1em&amp;quot; | Events die von der EKG Klasse ausgelöst werden können&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:15%&amp;quot; | Event !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| NewLOFF&lt;br /&gt;
|| Wird getriggert, wenn das AutoLeadOff neue LOFF Zustände empfangen hat.&lt;br /&gt;
|-&lt;br /&gt;
| NewData&lt;br /&gt;
|| Wird getriggert, wenn neue Daten aus dem Digital Analog Wandler empfangen wurden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ZedGraph===&lt;br /&gt;
&lt;br /&gt;
Der große schwarze Bereich (in meinen ersten Versionen war er noch Weiß) auf dem die EKG Signalverläufe dargestellt werden, besteht aus einem einzigen Element (einer GraphPane) aus der ZedGraph Bibliothek. Diese Bibliothek bietet unglaublich viele Möglichkeiten für die graphische Darstellung von Daten. Falls es jemanden genauer interessiert gibt es im [http://zedgraph.dariowiz.com/index.html?title=Main_Page ZedGraph-Wiki] eine große Auswahl an beispiel Code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im folgenden kleinen Codeschnipsel sieht man die Instanziierung einer RollingPointPairList in denen die EKG Samples gespeichert werden. Die Länge der Liste wird dabei auf 1000 Samples begrenzt.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
//Setzt alle Parameter für das Graph Fenster&lt;br /&gt;
void SetupGraph()&lt;br /&gt;
{			&lt;br /&gt;
       	//Erstelle Liste für LEAD I&lt;br /&gt;
	RollingPointPairList LEAD1_list = new RollingPointPairList(1000);&lt;br /&gt;
			&lt;br /&gt;
	//Erstelle Kurve für LEAD I&lt;br /&gt;
	LineItem LEAD1 = GraphWindow.GraphPane.AddCurve(&amp;quot;L1&amp;quot;,LEAD1_list,Color.FloralWhite,SymbolType.None);&lt;br /&gt;
	//Antialiasing für diese Kurve aktivieren&lt;br /&gt;
	LEAD1.Line.IsAntiAlias = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um nun ein neues Sample in die Liste zu schreiben&lt;br /&gt;
&lt;br /&gt;
== Das Protokoll ==&lt;br /&gt;
&lt;br /&gt;
Das Protokoll für die Kommunikation zwischen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Infineon_XMC_Design_Contest_2014]]&lt;br /&gt;
[[Kategorie:ARM]]&lt;br /&gt;
[[Kategorie:Infineon XMC]]&lt;br /&gt;
[[Kategorie:Sensorik]]&lt;br /&gt;
[[Kategorie:SPI]]&lt;br /&gt;
[[Kategorie:UART und RS232]]&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Layout_gesamt.png&amp;diff=83775</id>
		<title>Datei:EKG Layout gesamt.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Layout_gesamt.png&amp;diff=83775"/>
		<updated>2014-07-18T08:05:08Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Schutzbeschaltung_Schaltplan.png&amp;diff=83774</id>
		<title>Datei:EKG Schutzbeschaltung Schaltplan.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Schutzbeschaltung_Schaltplan.png&amp;diff=83774"/>
		<updated>2014-07-18T07:55:32Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Datei:EKG_Frontend_Schaltplan.png&amp;diff=83773</id>
		<title>Datei:EKG Frontend Schaltplan.png</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Datei:EKG_Frontend_Schaltplan.png&amp;diff=83773"/>
		<updated>2014-07-18T07:54:59Z</updated>

		<summary type="html">&lt;p&gt;Jojocp: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jojocp</name></author>
	</entry>
</feed>