https://www.mikrocontroller.net/api.php?action=feedcontributions&user=Engineer&feedformat=atomMikrocontroller.net - Benutzerbeiträge [de]2024-03-29T09:54:01ZBenutzerbeiträgeMediaWiki 1.38.5https://www.mikrocontroller.net/index.php?title=Glossar&diff=106637Glossar2024-02-13T20:56:00Z<p>Engineer: /* B */</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ABM]]: '''A'''nalog '''B'''ehavioral '''M'''odeling. Darstellung von elektronischen Schaltungen durch Mathematik zur Simulation z.B. in pSPICE oder Echtzeitrechnung in Musiksynthesizern.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU', ... für Umsetzer. <br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, der hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelsystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Audio-Rückkanal bei [[HMDI]]-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BBM]]: '''B'''ucket '''B'''rigade '''M'''emory: Engl. für Eimerkettenspeicher, bei Verzögerungsschaltungen genutzt<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei [[S/PDIF]]<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;[[BMS]]: '''B'''attery '''M'''anagement '''S''''ystem: Elektronik und Software zum kontrollierten Laden und Entladen, sowie Überwachen von Batterien - insbesondere wiederaufladbaren Akkumulatoren für Leistungsanwendungen.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''inute: Anzahl der Herzschläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''lock '''D'''omain '''C'''rossing: Stellen mit Taktübergängen in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ENOB]]: '''e'''ffective '''n'''umber '''o'''f '''b'''its; die sinnvoll verwendbare Auflösung eines A/D- oder D/A-Umsetzers<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer, Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;RMS: '''R'''oot '''M'''ean '''S'''quare, Mittel der Quadrate von Zahlen, z.B. bei Effektivwertberechnung<br />
<br />
;RMS-Gewinde: '''R'''oyal '''M'''icroscopical '''S'''ociety-Gewinde gem. Norm ISO 9345:2019-03, wird für Mikroskope verwendet<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232, ein Standard zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: ein Standard zur seriellen Datenübertragung, benutzt differentielle Signale, was die Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
;RTL: '''R'''ound '''T'''rip '''L'''atency, gesamte Latenz von Daten in einem System bei einem Schreib- und Rücklesevorgang<br />
<br />
;RTL: '''R'''egister '''T'''ransfer '''L'''anguage, textuelle Beschreibung einer Schaltung auf Registerebene beim Chip- und FPGA-design<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''pecific '''A'''bsorption '''R'''ate: eine Maßzahl die angibt, wieviel Energie der menschliche Körper bei Strahlung aufnimmt, wichtig in der Medizintechnik<br />
<br />
;SAR: '''S'''peicher / '''S'''torage '''A'''dress '''R'''egister: Zwischenspeicher in einer CPU, dessen Inhalt die aktuell bearbeitete Speicheradresse hält<br />
<br />
;SAR: '''S'''uccessive '''A'''pproximation '''R'''egister: eine Methode der Analog-Digitalwandlung, bei der Endwert zu iterative Findung der Bits und Vergleich generiert wird<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethode in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt wird, um den Empfangsbereich zu vergrößern.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Glossar&diff=106549Glossar2024-01-09T20:17:29Z<p>Engineer: /* B */</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ABM]]: '''A'''nalog '''B'''ehavioral '''M'''odeling. Darstellung von elektronischen Schaltungen durch Mathematik zur Simulation z.B. in pSPICE oder Echtzeitrechnung in Musiksynthesizern.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU', ... für Umsetzer. <br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, der hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelsystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Audio-Rückkanal bei [[HMDI]]-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei [[S/PDIF]]<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;[[BMS]]: '''B'''attery '''M'''anagement '''S''''ystem: Elektronik und Software zum kontrollierten Laden und Entladen, sowie Überwachen von Batterien - insbesondere wiederaufladbaren Akkumulatoren für Leistungsanwendungen.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''inute: Anzahl der Herzschläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''lock '''D'''omain '''C'''rossing: Stellen mit Taktübergängen in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ENOB]]: '''e'''ffective '''n'''umber '''o'''f '''b'''its; die sinnvoll verwendbare Auflösung eines A/D- oder D/A-Umsetzers<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer, Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;RMS: '''R'''oot '''M'''ean '''S'''quare, Mittel der Quadrate von Zahlen, z.B. bei Effektivwertberechnung<br />
<br />
;RMS-Gewinde: '''R'''oyal '''M'''icroscopical '''S'''ociety-Gewinde gem. Norm ISO 9345:2019-03, wird für Mikroskope verwendet<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232, ein Standard zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: ein Standard zur seriellen Datenübertragung, benutzt differentielle Signale, was die Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
;RTL: '''R'''ound '''T'''rip '''L'''atency, gesamte Latenz von Daten in einem System bei einem Schreib- und Rücklesevorgang<br />
<br />
;RTL: '''R'''egister '''T'''ransfer '''L'''anguage, textuelle Beschreibung einer Schaltung auf Registerebene beim Chip- und FPGA-design<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''pecific '''A'''bsorption '''R'''ate: eine Maßzahl die angibt, wieviel Energie der menschliche Körper bei Strahlung aufnimmt, wichtig in der Medizintechnik<br />
<br />
;SAR: '''S'''peicher / '''S'''torage '''A'''dress '''R'''egister: Zwischenspeicher in einer CPU, dessen Inhalt die aktuell bearbeitete Speicheradresse hält<br />
<br />
;SAR: '''S'''uccessive '''A'''pproximation '''R'''egister: eine Methode der Analog-Digitalwandlung, bei der Endwert zu iterative Findung der Bits und Vergleich generiert wird<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethode in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt wird, um den Empfangsbereich zu vergrößern.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Glossar&diff=106547Glossar2024-01-08T15:37:57Z<p>Engineer: /* A */</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ABM]]: '''A'''nalog '''B'''ehavioral '''M'''odeling. Darstellung von elektronischen Schaltungen durch Mathematik zur Simulation z.B. in pSPICE oder Echtzeitrechnung in Musiksynthesizern.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU', ... für Umsetzer. <br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, der hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelsystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Audio-Rückkanal bei [[HMDI]]-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei [[S/PDIF]]<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''inute: Anzahl der Herzschläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''lock '''D'''omain '''C'''rossing: Stellen mit Taktübergängen in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ENOB]]: '''e'''ffective '''n'''umber '''o'''f '''b'''its; die sinnvoll verwendbare Auflösung eines A/D- oder D/A-Umsetzers<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer, Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;RMS: '''R'''oot '''M'''ean '''S'''quare, Mittel der Quadrate von Zahlen, z.B. bei Effektivwertberechnung<br />
<br />
;RMS-Gewinde: '''R'''oyal '''M'''icroscopical '''S'''ociety-Gewinde gem. Norm ISO 9345:2019-03, wird für Mikroskope verwendet<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232, ein Standard zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: ein Standard zur seriellen Datenübertragung, benutzt differentielle Signale, was die Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
;RTL: '''R'''ound '''T'''rip '''L'''atency, gesamte Latenz von Daten in einem System bei einem Schreib- und Rücklesevorgang<br />
<br />
;RTL: '''R'''egister '''T'''ransfer '''L'''anguage, textuelle Beschreibung einer Schaltung auf Registerebene beim Chip- und FPGA-design<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''pecific '''A'''bsorption '''R'''ate: eine Maßzahl die angibt, wieviel Energie der menschliche Körper bei Strahlung aufnimmt, wichtig in der Medizintechnik<br />
<br />
;SAR: '''S'''peicher / '''S'''torage '''A'''dress '''R'''egister: Zwischenspeicher in einer CPU, dessen Inhalt die aktuell bearbeitete Speicheradresse hält<br />
<br />
;SAR: '''S'''uccessive '''A'''pproximation '''R'''egister: eine Methode der Analog-Digitalwandlung, bei der Endwert zu iterative Findung der Bits und Vergleich generiert wird<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethode in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt wird, um den Empfangsbereich zu vergrößern.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Glossar&diff=106546Glossar2024-01-08T15:33:11Z<p>Engineer: /* E */</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU'.<br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, die hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelersystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Rückkanal bei HMDI-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei [[S/PDIF]]<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''inute: Anzahl der Herzschläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''lock '''D'''omain '''C'''rossing: Stellen mit Taktübergängen in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ENOB]]: '''e'''ffective '''n'''umber '''o'''f '''b'''its; die sinnvoll verwendbare Auflösung eines A/D- oder D/A-Umsetzers<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer, Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;RMS: '''R'''oot '''M'''ean '''S'''quare, Mittel der Quadrate von Zahlen, z.B. bei Effektivwertberechnung<br />
<br />
;RMS-Gewinde: '''R'''oyal '''M'''icroscopical '''S'''ociety-Gewinde gem. Norm ISO 9345:2019-03, wird für Mikroskope verwendet<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232, ein Standard zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: ein Standard zur seriellen Datenübertragung, benutzt differentielle Signale, was die Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
;RTL: '''R'''ound '''T'''rip '''L'''atency, gesamte Latenz von Daten in einem System bei einem Schreib- und Rücklesevorgang<br />
<br />
;RTL: '''R'''egister '''T'''ransfer '''L'''anguage, textuelle Beschreibung einer Schaltung auf Registerebene beim Chip- und FPGA-design<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''pecific '''A'''bsorption '''R'''ate: eine Maßzahl die angibt, wieviel Energie der menschliche Körper bei Strahlung aufnimmt, wichtig in der Medizintechnik<br />
<br />
;SAR: '''S'''peicher / '''S'''torage '''A'''dress '''R'''egister: Zwischenspeicher in einer CPU, dessen Inhalt die aktuell bearbeitete Speicheradresse hält<br />
<br />
;SAR: '''S'''uccessive '''A'''pproximation '''R'''egister: eine Methode der Analog-Digitalwandlung, bei der Endwert zu iterative Findung der Bits und Vergleich generiert wird<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethode in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt wird, um den Empfangsbereich zu vergrößern.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Modellierung_analoger_Schaltungen&diff=106515Modellierung analoger Schaltungen2023-12-19T12:47:44Z<p>Engineer: /* Benötigte Anzahl der FPGAs */</p>
<hr />
<div>''von [[Benutzer:engineer|Jürgen Schuhmacher]]''<br />
<br />
Dieser Artikel untersucht die Möglichkeit, reale analoge Bauteile und Schaltungen mathematisch nachzubilden und simulieren zu können, um z.B. ihr Verhalten zu überwachen und voraussagen zu können. Es wird damit auch dargestellt, ob und inwieweit es möglich ist, analoge Schaltungen mit digitalen Systemen zu ersetzen, wie das z.B. bei Filtern und Signalerzeugern der Fall ist.<br />
<br />
== Vorbemerkung ==<br />
Die Aufstellung ist ursprünglich für die Umsetzung in FPGAs mit einer damaligen Taktfrequenz von 50 MHz erstellt worden und wurde für diesen Artikel entsprechend skaliert. Sie gilt sinngemäß auch für Microcontroller und PC-Systeme. Dazu würde man die Betrachtung der Resourcen im FPGA ignorieren und nur die gefroderte Rechenleistung in Betracht ziehen. Diese müsste entsprechend der Möglichkeiten des jeweilgen DSPs oder der CPU interpretiert werden:<br />
<br />
Für DSPs kann man diesbezüglich etwa 60% ... 80% Auslastung für die Berechnung ansetzen (Rest für Verwaltung und zusätzliche Speicherzugriffe) - aufgrund der besseren Arithmetik heutiger DSPs etwa 150% bis 200% der Rechenleistung - insbesondere bei genauen Anforderungen. Der hier beispielhaft angenommene FPGA mit 200 MHz entspräche im Bezug auf eine typische Multiplikation und Speicheropration in etwa einem 150MHz Audio DSP mit 24 Bit, bzw. 120MHz DSP mit 32 Bit.<br />
<br />
Für aktuelle CPUs kann man etwa 40% ... 60% der Auslastung - und aufgrund der Arithmetik etwa 150% ... 250% der Rechenleistung pro Takt annehmen - inbegriffen der Tatsache, dass bei den Schritten unten auch nicht-arithmetische Aktionen mitgerechnet werden, bei denen die CPU keine Vorteile hat. Ein durchschnittlich ausgelasteter 4-Kern-Intel7 mit 3GHz kommt so praktisch auf das 10-fache bis 30-fache der Leistung eines FPGAs für eine Operation. Bei DSPs und CPUs müssen dann aber noch Speicher- und externe RAM-Zyklen berücksichtigt werden, die die Performance um z.T. 25% bis 75% senken. Ein direkter Vergleich zwischen FPGA und einer solchen CPU wies für eine Klangsyntheseschaltung konkret einen Faktor 8.2 für die CPU aus. Da die CPU aber nur begrenzt parallelisieren kann, sinkt der Faktor für die Werte in den letzten beiden Tabellen, welche die Parallelisierung mit pipelining untersuchen, schnell ab.<br />
<br />
Wesentlich bei FPGAs ist die Berücksichtigung der gleichzeitig verfügbaren Resourcen. Typische FPGAs hatten zum Zeitpunkt der Artikelerstellung meist nur 20-40 Multipliziereinheiten. Auch die Anzahl der physisch parallen Speicherblöcke war begrenzt. Mit einem aktuellen FPGA unter 100€,- sind inzwischen hunderte Multiplizierer und Speicherblöcke verfügbar. Damit sind sehr rasch Rechen- und Daten-Bandbreiten zu erzielen, welche auch 16-Kern-CPU um ein mehrfaches übertreffen. Eine ähnliche Betrachtung lässt sich auch für Grafikkarten (GPU-processing) machen.<br />
<br />
Im Folgenden wird einzeln untersucht, welche Performance-Anforderungen an den FPGA / die CPU bestehen und wie diese zustande kommen:<br />
<br />
==Rechenbedarf für Modelle==<br />
Die folgende Tabelle zeigt den Bedarf an Rechen- und Prozessschritten für unterschiedliche Bauelemente je nach Komplexität des gewählten Modells:<br />
<br />
=== Tabelle 1 ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Modell !! Gleichungen !! Parameter !! Berechnungen !! Operationen !! Schritte<br />
|-<br />
| Transistor 3D - physisch|| 31 || 73 || 3700|| 4700|| 13200<br />
|-<br />
| Transistor hSpice|| 17 || 32 || 890|| 1190 || 2000<br />
|-<br />
| pSPice || 9 || 19 || 232 || 304 || 427<br />
|-<br />
| BiPol - KleinSignal|| 5 || 7 || 64 || 89|| 121<br />
|-<br />
| BiPol - Lineariarisiert|| 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Theoretischer Transistor|| 1 || 9 || 11 || 12|| 18<br />
|-<br />
| || || || || || <br />
|-<br />
| Widerstand 3D HF || 9 || 21 || 225 || 306 || 430<br />
|-<br />
| Widerstand 2D LF || 5 || 12 || 69 || 94 || 128<br />
|-<br />
| Widerstand pSpice || 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Widerstand - Linearisiert || 1 || 3 || 5 || 6 || 10<br />
|-<br />
| Theoretischer Widerstand || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Kondensator 3D HF || 17 || 37 || 904 || 1193 || 2011<br />
|-<br />
| Kondensator 2D LF || 9 || 18 || 222 || 303 || 426<br />
|-<br />
| Kondensator pSpice || 5 || 7 || 64 || 89 || 121<br />
|-<br />
| Kondensator - Linearisiert || 2 || 3 || 11 || 15 || 22<br />
|-<br />
| Theoretischer Kondensator || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Spule 3D HF - freq || 23 || 45 || 1819 || 2350 || 4825<br />
|-<br />
| Spule 2D LF - freq || 16 || 31 || 783 || 1040 || 1710<br />
|-<br />
| Spule pSpice || 7 || 11 || 129 || 178 || 244<br />
|-<br />
| Spule - Linearisiert || 3 || 6 || 25 || 34 || 47<br />
|-<br />
| Theoretische Spule || 1 || 3 || 5 || 6 || 10<br />
|}<br />
<br />
=== Anmerkungen ===<br />
Der 3D-Transistor ist eine Sammlung von Formeln, welche sich aus der Analyse eines räumlich ausgedehnten Gebildes im Silizium ergibt, so wie es im physikalischen Simulator zur Chipherstellung verwendet wird. Das Spice-Modell ist der angepasste C-Code des Modells aus Cadence, bzw das Equivalent. Das Modell unter "BiPol" ist das klassische Kleinsignalersatzschaltbild und - verhalten eines Transistors gemäß Möschwitzer / Lunze und Titze -Schenk. Der theoretische Transistor besteht aus einer Formel mit Teillinearisierungen (und entsprechenden Abweichungen). Für MOS-Fet und BiPolar wird dieselbe Abschätzung verwendet, wobei die Charakterisierung des MosFet aufwändiger ist und den BiPo nach oben abschätzt.<br />
<br />
Erwartungsgemäß haben umfangreichere Modelle mehr Formeln, Parameter und auch Rechentiefe. Bei Widerstand und Kondensator werden mitunter auch Temperatur, Induktivität und Streuung berücksichtigt, die sich aus realen Bauteilgehäuseformen ergeben, Bei den höheren Kondensator-Modellen sind auch die geringe Nichtlinearität des Dielektrikums und die Leckströme abgebildet.<br />
<br />
Die Spule ist besonders trickreich, wegen der Streufelder im 3D-Fall und der "seltsamen" Frequenzabhängigkeit schon im im 2D-Fall. Das Magnetmodell ist jenes nach Jiles-Atherton ("Spice"), das 2D ein modifiziertes Carpenter-Modell von mir, das komplett in VHDL erstellt wurde und in mehreren Ausbaustufen verwendet wird.<br />
<br />
Die Berechnungsformeln wurden u.a. in MATLAB umgesetzt und in lineares VHDL gewandelt. Daraus ergeben sich je nach Komplexität des Modells die anwendungsabhängige Anzahl von Rechenschritten. Der Bedarf ist als grober Anhaltspunkt zu sehen und kann stärker variieren.<br />
<br />
Bei der Betrachtung der notwendigen Rechenschritte für CPUs ist der Wert entsprechend der Möglichkeiten der Arithmetik und der Rechenanforderungen gfs ein anderer. Auch sind die Besonderheiten von PCs in Betracht zu ziehen. Daher ergeben sich bei einer virtuellen Simulation in MATLAB oder pSPice sehr viel geringere Werte, als die Tabelle suggeriert.<br />
<br />
==Bauelementebedarf==<br />
Die nachfolgende Tabelle zeigt exemplarisch den Bedarf an typischen Bauelementen für unterschiedliche ausgewählte Analogschaltungen:<br />
<br />
===Tabelle 2===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Halbleiter !! Widerstände !! Kondensatoren !! Spulen !! I,U,B,H,N<br />
|-<br />
| Ein-Transistor-Verstärker || 1 || 4 || 2 || 0 || 8<br />
|-<br />
| Gegentaktverstärker || 4 || 6 || 4 || 2 || 17<br />
|-<br />
| AB-HIFI-Verstärker || 14 || 15 || 11 || 4 || 45<br />
|-<br />
| Operationsverstärker || 18 || 32 || 6 || 0 || 57<br />
|-<br />
| HIFI-Amp mit Preamp || 27 || 42 || 26 || 8 || 104<br />
|-<br />
| Monophoner Analogsynthesizer || 155 || 235 || 130 || 36 || 557<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 1.085 || 1.450 || 850 || 240 || 3.626<br />
|}<br />
<br />
===Anmerkungen===<br />
Für die Abschätzung des grundsätzlichen Rechenbedarfs werden Beispielschaltungen herangezogen und die durchschnittliche Zahl sowie Art der Bauelemente bestimmt. Dabei werden 2 Dioden wie 1 Transistor gerechnet, ein Darlington-Transistor als 2 Transistoren. Mit I,U,B,H und N sind Spannungsquellen, Stromquellen sowie B- und H-Felder gemeint, die mit simuliert werden sollen. Eingeschlossen darin sind auch Störungen und das Rauschen auf Leitungen. Z.B. sind dies Rauschquellen beim Widerstand und induzierte Ströme, aber auch Rückwirkungen von Feldern. Laut Tabelle handelt es sich um scheinbar viele Parameter, welche aber in der realen Rechnung einen überschaubaren Rechenaufwand verursachen, da sie nur additiv wirken. Dennoch sind sie für das Ergebnis wichtig. Rauschen fördert z.B. die Konvergenz von Iterationen und hilft, Ungenauigkeiten bei den Rechnungen zu überwinden.<br />
<br />
===Schaltungskomplexität beim Beispiel Hochpass===<br />
<br />
Maßgeblich für die Menge der zu simulierenden Bauelemente ist hier bereits der Anspruch an die Genauigkeit: Je genauer der HF-Anteil einer Schaltung berechnet werden soll, desto mehr kommen Felder, Streuinduktivitäten und die Ausgestaltung des PCBs ins Spiel. Die nachfolgenden Zeichnungen zeigen beispielhaft 2 Simulationsansätze für eine Tiefpassschaltung.<br />
<br />
[[Datei:Highpass simulation simple view.png]]<br />
<br />
In der ersten kommen nur einfache theoretische Gleichungen zur Anwendung, darunter ein vollständig linearer Ansatz für den OPV. Der Ansatz führt zu einer geringen Zahl von Gleichungen und entsprechend schnellen Berechnung. In der unteren Zeichnung sind zusätzliche Bauelemente eingefügt, die helfen, das reale Verhalten besser nachzubilden. Dies betrifft neben den Komponenten (Eingangswiderstände und - kapazitäten) auch den Einfluss der konkreten Leiterbahnführung.<br />
<br />
[[Datei:Highpass simulation extended view.png]]<br />
<br />
Diese Schaltung ist zwar auch noch signifikant von der Realität entfernt, da der OP nach wie vor bis auf eine Ausgangsdämpfung linear modelliert wurde, dennoch war es möglich, das Verhalten bis etwa 100kHz für kleine Signale weitgehend exakt nachzustellen, was für Audiosimulationen taugen würde. Darüber hinaus kommt zunehmend der OP und seine limitierte Bandbreite ins Spiel. Für echte HF-Simulationen müssten weitere Effekte Berücksichtigung finden.<br />
<br />
==Rechenzeitbedarf==<br />
Die nachfolgende Tabelle zeigt den Bedarf an Rechenschritten für die gewählten Schaltungen je nach Modell:<br />
<br />
===Tabelle 3===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 82 || 146 || 563 || 1.810 || 19.020<br />
|-<br />
| Gegentaktverstärker || 206 || 460 || 1.765 || 7.615 || 73.000<br />
|-<br />
| AB-HIFI-Verstärker || 590 || 315 || 4.780 || 19.475 || 233.500<br />
|-<br />
| Operationsverstärker || 742 || 1.395 || 4.490 || 14.450 || 264.400<br />
|-<br />
| HIFI-Amp mit Preamp || 1.118 || 2.820 || 10.500 || 41.780 || 266.850<br />
|-<br />
| Monophoner Analogsynthesizer || 7.184 || 15.165 || 55.190 || 213.950 || 2.590.700<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 47.580 || 101.600 || 366.700 || 1.426.400 || 17.870.000<br />
|}<br />
<br />
===Anmerkungen===<br />
Diese Tabelle ist effektiv das Ergebnis der Verknüpfung der beiden vorherigen Tabellen unter Anrechnung der Anzahl der beteiligten Bauelemente und dem offset zur Verwaltung von z.B. Stimulationsobjekten. <br />
<br />
Erwartungsgemäß erfordern größere Schaltungen mit komplexeren Modellen überproportional immer mehr Rechenschritte, um einen einzelnen Rechnungsdurchlauf einer simulierten Zeiteinheit zu absolvieren. Bei umfangreichen Schaltungen entstehen zudem sehr viele Verbindungen, Schleifen und Einflüsse, welche den Rechenaufwand nach oben treiben. Der zuvor dargestellte Hochpass erforderte z.B. die 15-fache Zahl von Rechenschritten im Vergleich zum einfachen Modell und erreicht im Volumen bereits das Innere eines vollständigen OPs.<br />
<br />
Es ist hier sicher schon einsichtig, dass die einfachen linearisierten Modelle kein Detailverhalten wiedergeben-, sondern im Rahmen von Simulationen nur das Prinzip der Funktion darstellen können. Alle Feinheiten, insbesondere die Abweichungen der realen Bauelemente vom Ideal, fehlen hier.<br />
<br />
==Maximale Iterationsfrequenz==<br />
Die nachfolgende Tabelle zeigt die Anzahl der möglichen Iterationen je Sekunde bei Abarbeitung der vollständigen analytischen Gleichungen mit dem angenommen 200MHz FPGA:<br />
<br />
===Tabelle 4===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 2.500.000|| 1.400.000 || 355.000 || 110.000 || 10.500<br />
|-<br />
| Gegentaktverstärker || 970.000 || 434.000|| 113.000 || 26.200 || 2.730<br />
|-<br />
| AB-HIFI-Verstärker || 338.000|| 152.000 || 41.800 || 10.270 || 857<br />
|-<br />
| Operationsverstärker || 269.000 || 143.000 || 44.500 || 13.840 || 756<br />
|-<br />
| HIFI-Amp mit Preamp || 152.000 || 70.900 || 19.040 || 4.786 || 428<br />
|-<br />
| Monophoner Analogsynthesizer || 27.840 || 13.200 || 3.624 || 934 || 77<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 4.200 || 1.968 || 545 || 140 || 11<br />
|}<br />
<br />
===Anmerkungen===<br />
Unter der Annahme einer optimalen Ausnutzung des Chips und der typischen Auslastung der Fläche wie oben angesetzt, ergibt sich bei der Taktfrequenz eine maximale Anzahl von Durchläufen einer Iterations-Schleife, bis ein Ergebnis vorliegt. Diese entspricht der invertierten Latenz. Die Abschätzung zeigt, dass - die betreffende Hardware vorausgesetzt - es grundsätzlich möglich wäre, auch ein sehr kompliziertes Analogmodell mit immerhin 10Hz punktweise zu simulieren, was für Untersuchungen der Funktion im Vorfeld des Designs reichen würde. <br />
<br />
Die hier inbegriffene Streuung beträgt etwa 50% ... 100% je nach individueller Konvergenz und Ausbau des FPGAs sowie Qualität der Umsetzung, d.h. ein Maximalmodell eines Analogsynthesizers oder einer Filterbank, wie unten rechts angenommen wurde, kann statt 100ms zwischen 50ms und 200ms pendeln. Die Größenordnung bleibt aber in diesem Bereich.<br />
<br />
<br />
==Oversampling==<br />
Die nachfolgende Tabelle zeigt den ungefähren Bedarf an Oversampling und die Anzahl der Iterationen, bis eine ausreichende Konvergenz und damit Genauigkeit bei numerischer Berechnung erzielt wird. Die Werte ergeben sich aus Erfahrung sowie aus der Grundbetrachtung der notwendigen Repräsentation von Oberwellen eines Signals bei z.B. Faltungsoperationen. Vor allem schlägt sich hier ein zunehmend schlechteres Konvergenzverhalten der Rechnung beim Finden der Lösungen für umfangreiche Schaltungen mit Energiespeichern wie Drosseln und verlustbehaftete Kondensatoren nieder.<br />
<br />
===Tabelle 5===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 4 || 6 || 8 || 32 || 128<br />
|-<br />
| Gegentaktverstärker || 6 || 9 || 12 || 48 || 192<br />
|-<br />
| AB-HIFI-Verstärker || 8 || 12 || 16 || 64 || 256<br />
|-<br />
| Operationsverstärker || 12 || 18 || 24 || 96 || 384<br />
|-<br />
| HIFI-Amp mit Preamp || 16 || 24 || 32 || 128 || 512<br />
|-<br />
| Monophoner Analogsynthesizer || 24 || 36 || 48 || 192 || 768<br />
|-<br />
| 8-fach polyphoner Analogsynthesizer mit Filtern || 32 || 48 || 64 || 256 || 1024<br />
|}<br />
<br />
===Anmerkungen===<br />
Je nach Anwendung ist ein oversampling der Rechnung, eine Überhöhung der Taktfrequenz für numerische Rechnungen in Echtzeit und auch die gesteigerte Anzahl der echten Iterationen zu berücksichtigen. Dabei erfordern komplexere und umfangreichere Anwendungen für die letztlich gleiche Genauigkeit zunehmend mehr Iterationen. Zudem werden die Anforderungen an umfangreiche Schaltungen auch im Hinblick auf die Genauigkeit steigen. Daraus ergibt sich gewöhnlich ein ungefähr quadratisches Verhalten des Bedarfs mit wachsender Größe der Schaltung und des Modells. Gleichzeitig verläuft die Genauigkeit mit der Potenz der Anzahl der Iterationen, wächst also stärker, als linear. Damit ergibt sich ein mittleres Verhalten aus linearer Steigung und Potenzierung, was die Zahl der nötigen Iterationen / Takte angeht.<br />
<br />
Die Tabelle zeigt Erfahrungs- und Schätzwerte, die entsprechend variieren können. Der beispielhaft angeführte Hochpass musste seinerzeit schon mit fast der 10-fachen Abtastrate / Feinheit der Simulationsschritte simuliert werden, um realitätsnahe Ergebnisse zu erhalten und das Verhalten im höheren kHz-Bereich zufriedenstellend abzubilden. Insgesamt erforderte es eine fast 100-fache Rechenzeit gegenüber dem einfachen Modell.<br />
<br />
==Resultierende Abtastfrequenz==<br />
Die nachfolgende Tabelle zeigt die aus den Vorbetrachtungen resultierende mögliche Anzahl der Abtastungen für die vollständigen Iterationen :<br />
<br />
===Tabelle 6===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 610.000 || 228.000 || 44.400 || 3.459 || 82<br />
|-<br />
| Gegentaktverstärker || 161.000 || 48.300 || 9.400 || 547 || 14<br />
|-<br />
| AB-HIFI-Verstärker || 42.300 || 12.600 || 2.600 || 160 || 3<br />
|-<br />
| Operationsverstärker || 22.400 || 7.900 || 1.850 || 143 || 2<br />
|-<br />
| HIFI-Amp mit Preamp || 9.400 || 2.900 || 595 || 37 || 0,8<br />
|-<br />
| Monophoner Analogsynthesizer || 1.160 || 367 || 75 || 5 || 0,1<br />
|-<br />
| 8-fach polyphoner Analogsynthesizer mit Filtern || 131 || 41 || 9 || 0,5 || 0,011<br />
|}<br />
<br />
===Anmerkungen===<br />
Als Folge der nötigen Iterationen ergibt sich damit die Anzahl der echten Samples, die berechnet werden können und damit ein Hinweis auf die Echtzeitfähig der Anwendung. Um die jeweils erforderliche Genauigkeit und Frequenz zu ermitteln, muss die höchste auftretende Frequenz beachtet werden, welche für den Benutzer relevant ist, bzw. abgebildet werden soll. Diese ist maßgeblich für Authentizität der Berechnung und für z.B. Regelungen und Überwachungen wichtig. Für Temperaturen wären z.B. Raten von 10Hz und darunter möglicherweises ausreichend. Für Audiosignale wären mindestens 2x15kHz zu fordern. Mit Einschränkungen sind auch 5kHz ... 10kHz noch zulässig, wenn größere Abweichungen in den Höhen hakzeptiert werden können. Üblicherweise nehmen die Fehler in den Höhen mit jeder Oktave um 3...6db zu, was eine Abschätzung zulässt: Hat man z.B. bei einer angegebenen Frequenz eine definierte Präzision von 100dB THD Signalgüte erreicht und befindet sich genügend weit unterhalb der Eckfrequenz der Abtastrate, so kann man bei der 10-fachen Frequenz immerhin noch 80dB Güte erwarten und entscheiden, ob man man weniger überabtastet oder Iterationen früher abbricht.<br />
<br />
An dieser Stelle sieht man bereits, dass realistischerweise nur sehr kleine und einfache Schaltungen in Echtzeit sinnvoll simuliert und überwacht werden können. Sobald komplexere Strukturen voliegen, müssen Vereinfachungen an den Gleichungen vorgenommen werden.<br />
<br />
==Benötigte Anzahl der FPGAs==<br />
Aus den Rechenanforderungen ergibt sich eine theoretische Anzahl von FPGAs, die zeitlich belegt werden. Fälle mit Zahlen unter 1.0 lassen die Berechnung mehrerer Einheiten in einem FPGA zu. Zahlen > 1 deuten hingegen darauf hin, dass es mehr Resourcen benötigt, um überhaupt 1 Schaltung berechnen zu können.<br />
<br />
===Tabelle 7===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 0,1 || 0,1 || 0,3 || 1,0 || 11<br />
|-<br />
| Gegentaktverstärker || 0,1 || 0,3 || 1,0 || 4,3 || 41<br />
|-<br />
| AB-HIFI-Verstärker || 0,4 || 0,8 || 2,7 || 11 || 131<br />
|-<br />
| Operationsverstärker || 0,4 || 0,8 || 2,6 || 8,2 || 149<br />
|-<br />
| HIFI-Amp mit Preamp || 0,8 || 1,6 || 5,9 || 24 || 263<br />
|-<br />
| Monophoner Analogsynthesizer || 4,1 || 8,6 || 31 || 120 || 1.458<br />
|-<br />
| 8-fach polyphoner Analogsynthesizer mit Filtern || 27 || 57 || 206 || 803 || 10.050<br />
|}<br />
<br />
===Anmerkungen===<br />
Bei der Beurteilung, ob ein FPGA auch tatsächlich reicht, muss berücksichtigt werden, dass die Resourcen für einen sequenziellen Betrieb inklusive Verwaltung insgesamt reichen. In einigen Fällen der Teilauslastung ist dabei eine Teilparallelisierung effektiver und machbar. Bei Werten >1 reicht 1 FPGA aufgrund der gesamten Anforderungen nicht mehr aus, da die Rechnung von der Fläche her "zu lang" wird. Zwar gibt es einen schmalen Bereich, wo durch künstliche Sequenzialisierung (resource sharing) Resourcen gespart werden könnten, aber dies wird hier nicht betrachtet, da dann die Option des pipelinings entfiele, die im FPGA regelmäßig angewendet wird.<br />
<br />
==Maximale Performance==<br />
Die nachfolgende Tabelle zeigt die maximale Anzahl der parallelen Berechnungen bei totalem pipelining in angenommenden 16 FPGAs bei günstigster Verschaltung und Nutzung:<br />
<br />
===Tabelle 8===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 215 || 145 || 46 || 15 || 1,5<br />
|-<br />
| Gegentaktverstärker || 111 || 56 || 16 || 4 || 0,4<br />
|-<br />
| AB-HIFI-Verstärker || 44 || 21 || 6 || 1,5 || 0,1<br />
|-<br />
| Operationsverstärker || 36 || 20 || 6 || 2,0 || 0,1<br />
|-<br />
| HIFI-Amp mit Preamp || 21 || 10 || 3 || 0,7 || 0,1<br />
|-<br />
| Monophoner Analogsynthesizer || 4 || 2 || 0,5 || 0,1 || 0,01<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 0,6 || 0,3 || 0,1 || 0,02 || 0,001<br />
|}<br />
<br />
===Anmerkungen===<br />
Bei einem CUBE-System aus 16 FPGAs ergibt sich die Möglichkeit, die Rechnung als solche aufgrund der benötigten Hardware<br />
sehr wohl zu implementieren und die Iteration zu schließen, gleichzeitig eine Anzahl von Situationen simultan zu berechnen und so den FPGA voll zu nutzen. Das ist insbesondere bei Monte-Carlo-Analysen vorteilhaft. Es ergibt sich dann eine rechnerisch maximale Anzahl gleichzeitiger Rechenkanäle. Eine Anzahl größer 1 gibt an, dass 16 FPGAs in Umfang und Tempo für die Anforderung ausreichen. Konstellationen <1 könnten zwar teilweise vom Platz her mehr, als 100% berechnen, erlauben es aber nicht, den Loop in Echtzeit schließen. Abhilfe schafft dann nur noch eine schnellere Technologie mit einer höheren Taktfrequenz.<br />
<br />
==Fazit==<br />
Wie man erwarten konnte, ist ein einzelnes Bauelement bei entsprechendem Aufwand leicht zu berechnen, wenn man nicht gerade ins 3D geht und alle erdenklichen parasitären Effekte mitberücksichtigen will. Aber bereits, wenn man eine kleinere Schaltung zusammensetzt, entstehen durch die Leitungsführung Effekte, die zu Verfälschungen der reinen Modelle führen. Je höher die Frequenz ist, die betrachtet wird, desto mehr Effekte müssen simuliert werden.<br />
<br />
Nach meiner Einschätzung reicht für Audio die Modellierung auf Spice-Niveau gerade so aus, wenn man Leitungen und wichtige Störungen mit simuliert und diese als Einflüsse mit zusätzlichen Spannungen darstellt. Ansonsten laufen die Ergebnisse der Gleichungen rasch weg. Wichtig sind die Verluste bei Spulen und Kondensatoren, die oft nur unzureichend abgebildet werden.<br />
<br />
Trotzdem ist eine einfache Transistorschaltung noch gut zu modellieren und zu überwachen. Das geht auch in Echtzeit und ist wie die Wettervorhersage für einen gewissen Zeitraum stimmig. Eine Echtzeitüberwachung muss dann durch Messungen unterstützt und immer wieder "eingefangen" werden. Eine Simulation läuft dann logischerweise weg und ist nur dem Prinzip nach exakt d.h. ein Schwingkreis, den man ausrechnet, kommt gfs zu einer leicht abweichenden Frequenz, schwingt aber weitgehend authentisch. <br />
<br />
Sehr schwierig sind Spulen. Die Speicherwirkung des Feldes insbesondere die Streuung und Nichtlinearität bei magnetischen Werkstoffen ist eine Wissenschaft für sich. Ein weitgehend gut funktionierendes Ersatzmodell in VHDL, das ich entwickelt habe, füllte in der Realität schon einen halben FPGA. Mit den reduzierten Modellen darf man nicht erwarten, dass man Sättigungen und Oberwellen so hinbekommt, wie sie real auftreten. Wer also in seinem Analogschaltkreis eine Drossel mit Ferritkern hat, ist im Grunde schon "verloren".<br />
<br />
Eine simple Drossel ist hingegen in etwa so genau zu simulieren wie ein Kondensator, wenn man die parasitären Effekte mit drin hat und kleine Ströme nutzt und nicht viel von Außen einstreut. Ansonsten liegt man im Bereich der Komplexität von Transistoren.<br />
<br />
[[Kategorie:FPGA und Co]]<br />
[[Kategorie:Grundlagen]]<br />
[[Kategorie:C]]<br />
[[Kategorie:VHDL]]<br />
[[Kategorie:AVR-Arithmetik]]<br />
[[Kategorie:Algorithmen und Arithmetik|A]]<br />
[[Kategorie:Signalverarbeitung|P]]<br />
[[Kategorie:DSP]]<br />
[[Kategorie:Audio]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Modellierung_analoger_Schaltungen&diff=106514Modellierung analoger Schaltungen2023-12-19T12:42:35Z<p>Engineer: /* Resultierende Abtastfrequenz */</p>
<hr />
<div>''von [[Benutzer:engineer|Jürgen Schuhmacher]]''<br />
<br />
Dieser Artikel untersucht die Möglichkeit, reale analoge Bauteile und Schaltungen mathematisch nachzubilden und simulieren zu können, um z.B. ihr Verhalten zu überwachen und voraussagen zu können. Es wird damit auch dargestellt, ob und inwieweit es möglich ist, analoge Schaltungen mit digitalen Systemen zu ersetzen, wie das z.B. bei Filtern und Signalerzeugern der Fall ist.<br />
<br />
== Vorbemerkung ==<br />
Die Aufstellung ist ursprünglich für die Umsetzung in FPGAs mit einer damaligen Taktfrequenz von 50 MHz erstellt worden und wurde für diesen Artikel entsprechend skaliert. Sie gilt sinngemäß auch für Microcontroller und PC-Systeme. Dazu würde man die Betrachtung der Resourcen im FPGA ignorieren und nur die gefroderte Rechenleistung in Betracht ziehen. Diese müsste entsprechend der Möglichkeiten des jeweilgen DSPs oder der CPU interpretiert werden:<br />
<br />
Für DSPs kann man diesbezüglich etwa 60% ... 80% Auslastung für die Berechnung ansetzen (Rest für Verwaltung und zusätzliche Speicherzugriffe) - aufgrund der besseren Arithmetik heutiger DSPs etwa 150% bis 200% der Rechenleistung - insbesondere bei genauen Anforderungen. Der hier beispielhaft angenommene FPGA mit 200 MHz entspräche im Bezug auf eine typische Multiplikation und Speicheropration in etwa einem 150MHz Audio DSP mit 24 Bit, bzw. 120MHz DSP mit 32 Bit.<br />
<br />
Für aktuelle CPUs kann man etwa 40% ... 60% der Auslastung - und aufgrund der Arithmetik etwa 150% ... 250% der Rechenleistung pro Takt annehmen - inbegriffen der Tatsache, dass bei den Schritten unten auch nicht-arithmetische Aktionen mitgerechnet werden, bei denen die CPU keine Vorteile hat. Ein durchschnittlich ausgelasteter 4-Kern-Intel7 mit 3GHz kommt so praktisch auf das 10-fache bis 30-fache der Leistung eines FPGAs für eine Operation. Bei DSPs und CPUs müssen dann aber noch Speicher- und externe RAM-Zyklen berücksichtigt werden, die die Performance um z.T. 25% bis 75% senken. Ein direkter Vergleich zwischen FPGA und einer solchen CPU wies für eine Klangsyntheseschaltung konkret einen Faktor 8.2 für die CPU aus. Da die CPU aber nur begrenzt parallelisieren kann, sinkt der Faktor für die Werte in den letzten beiden Tabellen, welche die Parallelisierung mit pipelining untersuchen, schnell ab.<br />
<br />
Wesentlich bei FPGAs ist die Berücksichtigung der gleichzeitig verfügbaren Resourcen. Typische FPGAs hatten zum Zeitpunkt der Artikelerstellung meist nur 20-40 Multipliziereinheiten. Auch die Anzahl der physisch parallen Speicherblöcke war begrenzt. Mit einem aktuellen FPGA unter 100€,- sind inzwischen hunderte Multiplizierer und Speicherblöcke verfügbar. Damit sind sehr rasch Rechen- und Daten-Bandbreiten zu erzielen, welche auch 16-Kern-CPU um ein mehrfaches übertreffen. Eine ähnliche Betrachtung lässt sich auch für Grafikkarten (GPU-processing) machen.<br />
<br />
Im Folgenden wird einzeln untersucht, welche Performance-Anforderungen an den FPGA / die CPU bestehen und wie diese zustande kommen:<br />
<br />
==Rechenbedarf für Modelle==<br />
Die folgende Tabelle zeigt den Bedarf an Rechen- und Prozessschritten für unterschiedliche Bauelemente je nach Komplexität des gewählten Modells:<br />
<br />
=== Tabelle 1 ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Modell !! Gleichungen !! Parameter !! Berechnungen !! Operationen !! Schritte<br />
|-<br />
| Transistor 3D - physisch|| 31 || 73 || 3700|| 4700|| 13200<br />
|-<br />
| Transistor hSpice|| 17 || 32 || 890|| 1190 || 2000<br />
|-<br />
| pSPice || 9 || 19 || 232 || 304 || 427<br />
|-<br />
| BiPol - KleinSignal|| 5 || 7 || 64 || 89|| 121<br />
|-<br />
| BiPol - Lineariarisiert|| 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Theoretischer Transistor|| 1 || 9 || 11 || 12|| 18<br />
|-<br />
| || || || || || <br />
|-<br />
| Widerstand 3D HF || 9 || 21 || 225 || 306 || 430<br />
|-<br />
| Widerstand 2D LF || 5 || 12 || 69 || 94 || 128<br />
|-<br />
| Widerstand pSpice || 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Widerstand - Linearisiert || 1 || 3 || 5 || 6 || 10<br />
|-<br />
| Theoretischer Widerstand || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Kondensator 3D HF || 17 || 37 || 904 || 1193 || 2011<br />
|-<br />
| Kondensator 2D LF || 9 || 18 || 222 || 303 || 426<br />
|-<br />
| Kondensator pSpice || 5 || 7 || 64 || 89 || 121<br />
|-<br />
| Kondensator - Linearisiert || 2 || 3 || 11 || 15 || 22<br />
|-<br />
| Theoretischer Kondensator || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Spule 3D HF - freq || 23 || 45 || 1819 || 2350 || 4825<br />
|-<br />
| Spule 2D LF - freq || 16 || 31 || 783 || 1040 || 1710<br />
|-<br />
| Spule pSpice || 7 || 11 || 129 || 178 || 244<br />
|-<br />
| Spule - Linearisiert || 3 || 6 || 25 || 34 || 47<br />
|-<br />
| Theoretische Spule || 1 || 3 || 5 || 6 || 10<br />
|}<br />
<br />
=== Anmerkungen ===<br />
Der 3D-Transistor ist eine Sammlung von Formeln, welche sich aus der Analyse eines räumlich ausgedehnten Gebildes im Silizium ergibt, so wie es im physikalischen Simulator zur Chipherstellung verwendet wird. Das Spice-Modell ist der angepasste C-Code des Modells aus Cadence, bzw das Equivalent. Das Modell unter "BiPol" ist das klassische Kleinsignalersatzschaltbild und - verhalten eines Transistors gemäß Möschwitzer / Lunze und Titze -Schenk. Der theoretische Transistor besteht aus einer Formel mit Teillinearisierungen (und entsprechenden Abweichungen). Für MOS-Fet und BiPolar wird dieselbe Abschätzung verwendet, wobei die Charakterisierung des MosFet aufwändiger ist und den BiPo nach oben abschätzt.<br />
<br />
Erwartungsgemäß haben umfangreichere Modelle mehr Formeln, Parameter und auch Rechentiefe. Bei Widerstand und Kondensator werden mitunter auch Temperatur, Induktivität und Streuung berücksichtigt, die sich aus realen Bauteilgehäuseformen ergeben, Bei den höheren Kondensator-Modellen sind auch die geringe Nichtlinearität des Dielektrikums und die Leckströme abgebildet.<br />
<br />
Die Spule ist besonders trickreich, wegen der Streufelder im 3D-Fall und der "seltsamen" Frequenzabhängigkeit schon im im 2D-Fall. Das Magnetmodell ist jenes nach Jiles-Atherton ("Spice"), das 2D ein modifiziertes Carpenter-Modell von mir, das komplett in VHDL erstellt wurde und in mehreren Ausbaustufen verwendet wird.<br />
<br />
Die Berechnungsformeln wurden u.a. in MATLAB umgesetzt und in lineares VHDL gewandelt. Daraus ergeben sich je nach Komplexität des Modells die anwendungsabhängige Anzahl von Rechenschritten. Der Bedarf ist als grober Anhaltspunkt zu sehen und kann stärker variieren.<br />
<br />
Bei der Betrachtung der notwendigen Rechenschritte für CPUs ist der Wert entsprechend der Möglichkeiten der Arithmetik und der Rechenanforderungen gfs ein anderer. Auch sind die Besonderheiten von PCs in Betracht zu ziehen. Daher ergeben sich bei einer virtuellen Simulation in MATLAB oder pSPice sehr viel geringere Werte, als die Tabelle suggeriert.<br />
<br />
==Bauelementebedarf==<br />
Die nachfolgende Tabelle zeigt exemplarisch den Bedarf an typischen Bauelementen für unterschiedliche ausgewählte Analogschaltungen:<br />
<br />
===Tabelle 2===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Halbleiter !! Widerstände !! Kondensatoren !! Spulen !! I,U,B,H,N<br />
|-<br />
| Ein-Transistor-Verstärker || 1 || 4 || 2 || 0 || 8<br />
|-<br />
| Gegentaktverstärker || 4 || 6 || 4 || 2 || 17<br />
|-<br />
| AB-HIFI-Verstärker || 14 || 15 || 11 || 4 || 45<br />
|-<br />
| Operationsverstärker || 18 || 32 || 6 || 0 || 57<br />
|-<br />
| HIFI-Amp mit Preamp || 27 || 42 || 26 || 8 || 104<br />
|-<br />
| Monophoner Analogsynthesizer || 155 || 235 || 130 || 36 || 557<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 1.085 || 1.450 || 850 || 240 || 3.626<br />
|}<br />
<br />
===Anmerkungen===<br />
Für die Abschätzung des grundsätzlichen Rechenbedarfs werden Beispielschaltungen herangezogen und die durchschnittliche Zahl sowie Art der Bauelemente bestimmt. Dabei werden 2 Dioden wie 1 Transistor gerechnet, ein Darlington-Transistor als 2 Transistoren. Mit I,U,B,H und N sind Spannungsquellen, Stromquellen sowie B- und H-Felder gemeint, die mit simuliert werden sollen. Eingeschlossen darin sind auch Störungen und das Rauschen auf Leitungen. Z.B. sind dies Rauschquellen beim Widerstand und induzierte Ströme, aber auch Rückwirkungen von Feldern. Laut Tabelle handelt es sich um scheinbar viele Parameter, welche aber in der realen Rechnung einen überschaubaren Rechenaufwand verursachen, da sie nur additiv wirken. Dennoch sind sie für das Ergebnis wichtig. Rauschen fördert z.B. die Konvergenz von Iterationen und hilft, Ungenauigkeiten bei den Rechnungen zu überwinden.<br />
<br />
===Schaltungskomplexität beim Beispiel Hochpass===<br />
<br />
Maßgeblich für die Menge der zu simulierenden Bauelemente ist hier bereits der Anspruch an die Genauigkeit: Je genauer der HF-Anteil einer Schaltung berechnet werden soll, desto mehr kommen Felder, Streuinduktivitäten und die Ausgestaltung des PCBs ins Spiel. Die nachfolgenden Zeichnungen zeigen beispielhaft 2 Simulationsansätze für eine Tiefpassschaltung.<br />
<br />
[[Datei:Highpass simulation simple view.png]]<br />
<br />
In der ersten kommen nur einfache theoretische Gleichungen zur Anwendung, darunter ein vollständig linearer Ansatz für den OPV. Der Ansatz führt zu einer geringen Zahl von Gleichungen und entsprechend schnellen Berechnung. In der unteren Zeichnung sind zusätzliche Bauelemente eingefügt, die helfen, das reale Verhalten besser nachzubilden. Dies betrifft neben den Komponenten (Eingangswiderstände und - kapazitäten) auch den Einfluss der konkreten Leiterbahnführung.<br />
<br />
[[Datei:Highpass simulation extended view.png]]<br />
<br />
Diese Schaltung ist zwar auch noch signifikant von der Realität entfernt, da der OP nach wie vor bis auf eine Ausgangsdämpfung linear modelliert wurde, dennoch war es möglich, das Verhalten bis etwa 100kHz für kleine Signale weitgehend exakt nachzustellen, was für Audiosimulationen taugen würde. Darüber hinaus kommt zunehmend der OP und seine limitierte Bandbreite ins Spiel. Für echte HF-Simulationen müssten weitere Effekte Berücksichtigung finden.<br />
<br />
==Rechenzeitbedarf==<br />
Die nachfolgende Tabelle zeigt den Bedarf an Rechenschritten für die gewählten Schaltungen je nach Modell:<br />
<br />
===Tabelle 3===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 82 || 146 || 563 || 1.810 || 19.020<br />
|-<br />
| Gegentaktverstärker || 206 || 460 || 1.765 || 7.615 || 73.000<br />
|-<br />
| AB-HIFI-Verstärker || 590 || 315 || 4.780 || 19.475 || 233.500<br />
|-<br />
| Operationsverstärker || 742 || 1.395 || 4.490 || 14.450 || 264.400<br />
|-<br />
| HIFI-Amp mit Preamp || 1.118 || 2.820 || 10.500 || 41.780 || 266.850<br />
|-<br />
| Monophoner Analogsynthesizer || 7.184 || 15.165 || 55.190 || 213.950 || 2.590.700<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 47.580 || 101.600 || 366.700 || 1.426.400 || 17.870.000<br />
|}<br />
<br />
===Anmerkungen===<br />
Diese Tabelle ist effektiv das Ergebnis der Verknüpfung der beiden vorherigen Tabellen unter Anrechnung der Anzahl der beteiligten Bauelemente und dem offset zur Verwaltung von z.B. Stimulationsobjekten. <br />
<br />
Erwartungsgemäß erfordern größere Schaltungen mit komplexeren Modellen überproportional immer mehr Rechenschritte, um einen einzelnen Rechnungsdurchlauf einer simulierten Zeiteinheit zu absolvieren. Bei umfangreichen Schaltungen entstehen zudem sehr viele Verbindungen, Schleifen und Einflüsse, welche den Rechenaufwand nach oben treiben. Der zuvor dargestellte Hochpass erforderte z.B. die 15-fache Zahl von Rechenschritten im Vergleich zum einfachen Modell und erreicht im Volumen bereits das Innere eines vollständigen OPs.<br />
<br />
Es ist hier sicher schon einsichtig, dass die einfachen linearisierten Modelle kein Detailverhalten wiedergeben-, sondern im Rahmen von Simulationen nur das Prinzip der Funktion darstellen können. Alle Feinheiten, insbesondere die Abweichungen der realen Bauelemente vom Ideal, fehlen hier.<br />
<br />
==Maximale Iterationsfrequenz==<br />
Die nachfolgende Tabelle zeigt die Anzahl der möglichen Iterationen je Sekunde bei Abarbeitung der vollständigen analytischen Gleichungen mit dem angenommen 200MHz FPGA:<br />
<br />
===Tabelle 4===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 2.500.000|| 1.400.000 || 355.000 || 110.000 || 10.500<br />
|-<br />
| Gegentaktverstärker || 970.000 || 434.000|| 113.000 || 26.200 || 2.730<br />
|-<br />
| AB-HIFI-Verstärker || 338.000|| 152.000 || 41.800 || 10.270 || 857<br />
|-<br />
| Operationsverstärker || 269.000 || 143.000 || 44.500 || 13.840 || 756<br />
|-<br />
| HIFI-Amp mit Preamp || 152.000 || 70.900 || 19.040 || 4.786 || 428<br />
|-<br />
| Monophoner Analogsynthesizer || 27.840 || 13.200 || 3.624 || 934 || 77<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 4.200 || 1.968 || 545 || 140 || 11<br />
|}<br />
<br />
===Anmerkungen===<br />
Unter der Annahme einer optimalen Ausnutzung des Chips und der typischen Auslastung der Fläche wie oben angesetzt, ergibt sich bei der Taktfrequenz eine maximale Anzahl von Durchläufen einer Iterations-Schleife, bis ein Ergebnis vorliegt. Diese entspricht der invertierten Latenz. Die Abschätzung zeigt, dass - die betreffende Hardware vorausgesetzt - es grundsätzlich möglich wäre, auch ein sehr kompliziertes Analogmodell mit immerhin 10Hz punktweise zu simulieren, was für Untersuchungen der Funktion im Vorfeld des Designs reichen würde. <br />
<br />
Die hier inbegriffene Streuung beträgt etwa 50% ... 100% je nach individueller Konvergenz und Ausbau des FPGAs sowie Qualität der Umsetzung, d.h. ein Maximalmodell eines Analogsynthesizers oder einer Filterbank, wie unten rechts angenommen wurde, kann statt 100ms zwischen 50ms und 200ms pendeln. Die Größenordnung bleibt aber in diesem Bereich.<br />
<br />
<br />
==Oversampling==<br />
Die nachfolgende Tabelle zeigt den ungefähren Bedarf an Oversampling und die Anzahl der Iterationen, bis eine ausreichende Konvergenz und damit Genauigkeit bei numerischer Berechnung erzielt wird. Die Werte ergeben sich aus Erfahrung sowie aus der Grundbetrachtung der notwendigen Repräsentation von Oberwellen eines Signals bei z.B. Faltungsoperationen. Vor allem schlägt sich hier ein zunehmend schlechteres Konvergenzverhalten der Rechnung beim Finden der Lösungen für umfangreiche Schaltungen mit Energiespeichern wie Drosseln und verlustbehaftete Kondensatoren nieder.<br />
<br />
===Tabelle 5===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 4 || 6 || 8 || 32 || 128<br />
|-<br />
| Gegentaktverstärker || 6 || 9 || 12 || 48 || 192<br />
|-<br />
| AB-HIFI-Verstärker || 8 || 12 || 16 || 64 || 256<br />
|-<br />
| Operationsverstärker || 12 || 18 || 24 || 96 || 384<br />
|-<br />
| HIFI-Amp mit Preamp || 16 || 24 || 32 || 128 || 512<br />
|-<br />
| Monophoner Analogsynthesizer || 24 || 36 || 48 || 192 || 768<br />
|-<br />
| 8-fach polyphoner Analogsynthesizer mit Filtern || 32 || 48 || 64 || 256 || 1024<br />
|}<br />
<br />
===Anmerkungen===<br />
Je nach Anwendung ist ein oversampling der Rechnung, eine Überhöhung der Taktfrequenz für numerische Rechnungen in Echtzeit und auch die gesteigerte Anzahl der echten Iterationen zu berücksichtigen. Dabei erfordern komplexere und umfangreichere Anwendungen für die letztlich gleiche Genauigkeit zunehmend mehr Iterationen. Zudem werden die Anforderungen an umfangreiche Schaltungen auch im Hinblick auf die Genauigkeit steigen. Daraus ergibt sich gewöhnlich ein ungefähr quadratisches Verhalten des Bedarfs mit wachsender Größe der Schaltung und des Modells. Gleichzeitig verläuft die Genauigkeit mit der Potenz der Anzahl der Iterationen, wächst also stärker, als linear. Damit ergibt sich ein mittleres Verhalten aus linearer Steigung und Potenzierung, was die Zahl der nötigen Iterationen / Takte angeht.<br />
<br />
Die Tabelle zeigt Erfahrungs- und Schätzwerte, die entsprechend variieren können. Der beispielhaft angeführte Hochpass musste seinerzeit schon mit fast der 10-fachen Abtastrate / Feinheit der Simulationsschritte simuliert werden, um realitätsnahe Ergebnisse zu erhalten und das Verhalten im höheren kHz-Bereich zufriedenstellend abzubilden. Insgesamt erforderte es eine fast 100-fache Rechenzeit gegenüber dem einfachen Modell.<br />
<br />
==Resultierende Abtastfrequenz==<br />
Die nachfolgende Tabelle zeigt die aus den Vorbetrachtungen resultierende mögliche Anzahl der Abtastungen für die vollständigen Iterationen :<br />
<br />
===Tabelle 6===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 610.000 || 228.000 || 44.400 || 3.459 || 82<br />
|-<br />
| Gegentaktverstärker || 161.000 || 48.300 || 9.400 || 547 || 14<br />
|-<br />
| AB-HIFI-Verstärker || 42.300 || 12.600 || 2.600 || 160 || 3<br />
|-<br />
| Operationsverstärker || 22.400 || 7.900 || 1.850 || 143 || 2<br />
|-<br />
| HIFI-Amp mit Preamp || 9.400 || 2.900 || 595 || 37 || 0,8<br />
|-<br />
| Monophoner Analogsynthesizer || 1.160 || 367 || 75 || 5 || 0,1<br />
|-<br />
| 8-fach polyphoner Analogsynthesizer mit Filtern || 131 || 41 || 9 || 0,5 || 0,011<br />
|}<br />
<br />
===Anmerkungen===<br />
Als Folge der nötigen Iterationen ergibt sich damit die Anzahl der echten Samples, die berechnet werden können und damit ein Hinweis auf die Echtzeitfähig der Anwendung. Um die jeweils erforderliche Genauigkeit und Frequenz zu ermitteln, muss die höchste auftretende Frequenz beachtet werden, welche für den Benutzer relevant ist, bzw. abgebildet werden soll. Diese ist maßgeblich für Authentizität der Berechnung und für z.B. Regelungen und Überwachungen wichtig. Für Temperaturen wären z.B. Raten von 10Hz und darunter möglicherweises ausreichend. Für Audiosignale wären mindestens 2x15kHz zu fordern. Mit Einschränkungen sind auch 5kHz ... 10kHz noch zulässig, wenn größere Abweichungen in den Höhen hakzeptiert werden können. Üblicherweise nehmen die Fehler in den Höhen mit jeder Oktave um 3...6db zu, was eine Abschätzung zulässt: Hat man z.B. bei einer angegebenen Frequenz eine definierte Präzision von 100dB THD Signalgüte erreicht und befindet sich genügend weit unterhalb der Eckfrequenz der Abtastrate, so kann man bei der 10-fachen Frequenz immerhin noch 80dB Güte erwarten und entscheiden, ob man man weniger überabtastet oder Iterationen früher abbricht.<br />
<br />
An dieser Stelle sieht man bereits, dass realistischerweise nur sehr kleine und einfache Schaltungen in Echtzeit sinnvoll simuliert und überwacht werden können. Sobald komplexere Strukturen voliegen, müssen Vereinfachungen an den Gleichungen vorgenommen werden.<br />
<br />
==Benötigte Anzahl der FPGAs==<br />
Die nachfolgende Tabelle zeigt die benötigte Anzahl FPGAs und eine mögliche Parallelisierung:<br />
<br />
===Tabelle 7===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 0,1 || 0,1 || 0,3 || 1,0 || 11<br />
|-<br />
| Gegentaktverstärker || 0,1 || 0,3 || 1,0 || 4,3 || 41<br />
|-<br />
| AB-HIFI-Verstärker || 0,4 || 0,8 || 2,7 || 11 || 131<br />
|-<br />
| Operationsverstärker || 0,4 || 0,8 || 2,6 || 8,2 || 149<br />
|-<br />
| HIFI-Amp mit Preamp || 0,8 || 1,6 || 5,9 || 24 || 263<br />
|-<br />
| Monophoner Analogsynthesizer || 4,1 || 8,6 || 31 || 120 || 1.458<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 27 || 57 || 206 || 803 || 10.050<br />
|}<br />
<br />
===Anmerkungen===<br />
Aus den Rechenanforderungen ergibt sich eine theoretische Anzahl von FPGAs, die zeitlich belegt werden. Bei der Beurteilung, ob ein FPGA auch tatsächlich reicht, muss zudem berücksichtigt werden, dass die Resourcen für einen sequenziellen Betrieb inklusive Verwaltung insgesamt reichen. In einigen Fällen der Teilauslastung ist dabei eine Teilparallelisierung effektiver und machbar. Diese Werte sind grün markiert. Bei Werten >1 reicht 1 FPGA aufgrund der gesamten Anforderungen nicht mehr aus, da die Rechnung von der Fläche her "zu lang" wird. Zwar gibt es einen schmalen Bereich, wo durch künstliche Sequenzialisierung (resource sharing) Resourcen gespart werden könnten, aber dies wird hier nicht betrachtet, da dann die Option des pipelinings entfiele.<br />
<br />
<br />
==Maximale Performance==<br />
Die nachfolgende Tabelle zeigt die maximale Anzahl der parallelen Berechnungen bei totalem pipelining in angenommenden 16 FPGAs bei günstigster Verschaltung und Nutzung:<br />
<br />
===Tabelle 8===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 215 || 145 || 46 || 15 || 1,5<br />
|-<br />
| Gegentaktverstärker || 111 || 56 || 16 || 4 || 0,4<br />
|-<br />
| AB-HIFI-Verstärker || 44 || 21 || 6 || 1,5 || 0,1<br />
|-<br />
| Operationsverstärker || 36 || 20 || 6 || 2,0 || 0,1<br />
|-<br />
| HIFI-Amp mit Preamp || 21 || 10 || 3 || 0,7 || 0,1<br />
|-<br />
| Monophoner Analogsynthesizer || 4 || 2 || 0,5 || 0,1 || 0,01<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 0,6 || 0,3 || 0,1 || 0,02 || 0,001<br />
|}<br />
<br />
===Anmerkungen===<br />
Bei einem CUBE-System aus 16 FPGAs ergibt sich die Möglichkeit, die Rechnung als solche aufgrund der benötigten Hardware<br />
sehr wohl zu implementieren und die Iteration zu schließen, gleichzeitig eine Anzahl von Situationen simultan zu berechnen und so den FPGA voll zu nutzen. Das ist insbesondere bei Monte-Carlo-Analysen vorteilhaft. Es ergibt sich dann eine rechnerisch maximale Anzahl gleichzeitiger Rechenkanäle. Eine Anzahl größer 1 gibt an, dass 16 FPGAs in Umfang und Tempo für die Anforderung ausreichen. Konstellationen <1 könnten zwar teilweise vom Platz her mehr, als 100% berechnen, erlauben es aber nicht, den Loop in Echtzeit schließen. Abhilfe schafft dann nur noch eine schnellere Technologie mit einer höheren Taktfrequenz.<br />
<br />
==Fazit==<br />
Wie man erwarten konnte, ist ein einzelnes Bauelement bei entsprechendem Aufwand leicht zu berechnen, wenn man nicht gerade ins 3D geht und alle erdenklichen parasitären Effekte mitberücksichtigen will. Aber bereits, wenn man eine kleinere Schaltung zusammensetzt, entstehen durch die Leitungsführung Effekte, die zu Verfälschungen der reinen Modelle führen. Je höher die Frequenz ist, die betrachtet wird, desto mehr Effekte müssen simuliert werden.<br />
<br />
Nach meiner Einschätzung reicht für Audio die Modellierung auf Spice-Niveau gerade so aus, wenn man Leitungen und wichtige Störungen mit simuliert und diese als Einflüsse mit zusätzlichen Spannungen darstellt. Ansonsten laufen die Ergebnisse der Gleichungen rasch weg. Wichtig sind die Verluste bei Spulen und Kondensatoren, die oft nur unzureichend abgebildet werden.<br />
<br />
Trotzdem ist eine einfache Transistorschaltung noch gut zu modellieren und zu überwachen. Das geht auch in Echtzeit und ist wie die Wettervorhersage für einen gewissen Zeitraum stimmig. Eine Echtzeitüberwachung muss dann durch Messungen unterstützt und immer wieder "eingefangen" werden. Eine Simulation läuft dann logischerweise weg und ist nur dem Prinzip nach exakt d.h. ein Schwingkreis, den man ausrechnet, kommt gfs zu einer leicht abweichenden Frequenz, schwingt aber weitgehend authentisch. <br />
<br />
Sehr schwierig sind Spulen. Die Speicherwirkung des Feldes insbesondere die Streuung und Nichtlinearität bei magnetischen Werkstoffen ist eine Wissenschaft für sich. Ein weitgehend gut funktionierendes Ersatzmodell in VHDL, das ich entwickelt habe, füllte in der Realität schon einen halben FPGA. Mit den reduzierten Modellen darf man nicht erwarten, dass man Sättigungen und Oberwellen so hinbekommt, wie sie real auftreten. Wer also in seinem Analogschaltkreis eine Drossel mit Ferritkern hat, ist im Grunde schon "verloren".<br />
<br />
Eine simple Drossel ist hingegen in etwa so genau zu simulieren wie ein Kondensator, wenn man die parasitären Effekte mit drin hat und kleine Ströme nutzt und nicht viel von Außen einstreut. Ansonsten liegt man im Bereich der Komplexität von Transistoren.<br />
<br />
[[Kategorie:FPGA und Co]]<br />
[[Kategorie:Grundlagen]]<br />
[[Kategorie:C]]<br />
[[Kategorie:VHDL]]<br />
[[Kategorie:AVR-Arithmetik]]<br />
[[Kategorie:Algorithmen und Arithmetik|A]]<br />
[[Kategorie:Signalverarbeitung|P]]<br />
[[Kategorie:DSP]]<br />
[[Kategorie:Audio]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Modellierung_analoger_Schaltungen&diff=106513Modellierung analoger Schaltungen2023-12-19T12:34:45Z<p>Engineer: /* Oversampling */</p>
<hr />
<div>''von [[Benutzer:engineer|Jürgen Schuhmacher]]''<br />
<br />
Dieser Artikel untersucht die Möglichkeit, reale analoge Bauteile und Schaltungen mathematisch nachzubilden und simulieren zu können, um z.B. ihr Verhalten zu überwachen und voraussagen zu können. Es wird damit auch dargestellt, ob und inwieweit es möglich ist, analoge Schaltungen mit digitalen Systemen zu ersetzen, wie das z.B. bei Filtern und Signalerzeugern der Fall ist.<br />
<br />
== Vorbemerkung ==<br />
Die Aufstellung ist ursprünglich für die Umsetzung in FPGAs mit einer damaligen Taktfrequenz von 50 MHz erstellt worden und wurde für diesen Artikel entsprechend skaliert. Sie gilt sinngemäß auch für Microcontroller und PC-Systeme. Dazu würde man die Betrachtung der Resourcen im FPGA ignorieren und nur die gefroderte Rechenleistung in Betracht ziehen. Diese müsste entsprechend der Möglichkeiten des jeweilgen DSPs oder der CPU interpretiert werden:<br />
<br />
Für DSPs kann man diesbezüglich etwa 60% ... 80% Auslastung für die Berechnung ansetzen (Rest für Verwaltung und zusätzliche Speicherzugriffe) - aufgrund der besseren Arithmetik heutiger DSPs etwa 150% bis 200% der Rechenleistung - insbesondere bei genauen Anforderungen. Der hier beispielhaft angenommene FPGA mit 200 MHz entspräche im Bezug auf eine typische Multiplikation und Speicheropration in etwa einem 150MHz Audio DSP mit 24 Bit, bzw. 120MHz DSP mit 32 Bit.<br />
<br />
Für aktuelle CPUs kann man etwa 40% ... 60% der Auslastung - und aufgrund der Arithmetik etwa 150% ... 250% der Rechenleistung pro Takt annehmen - inbegriffen der Tatsache, dass bei den Schritten unten auch nicht-arithmetische Aktionen mitgerechnet werden, bei denen die CPU keine Vorteile hat. Ein durchschnittlich ausgelasteter 4-Kern-Intel7 mit 3GHz kommt so praktisch auf das 10-fache bis 30-fache der Leistung eines FPGAs für eine Operation. Bei DSPs und CPUs müssen dann aber noch Speicher- und externe RAM-Zyklen berücksichtigt werden, die die Performance um z.T. 25% bis 75% senken. Ein direkter Vergleich zwischen FPGA und einer solchen CPU wies für eine Klangsyntheseschaltung konkret einen Faktor 8.2 für die CPU aus. Da die CPU aber nur begrenzt parallelisieren kann, sinkt der Faktor für die Werte in den letzten beiden Tabellen, welche die Parallelisierung mit pipelining untersuchen, schnell ab.<br />
<br />
Wesentlich bei FPGAs ist die Berücksichtigung der gleichzeitig verfügbaren Resourcen. Typische FPGAs hatten zum Zeitpunkt der Artikelerstellung meist nur 20-40 Multipliziereinheiten. Auch die Anzahl der physisch parallen Speicherblöcke war begrenzt. Mit einem aktuellen FPGA unter 100€,- sind inzwischen hunderte Multiplizierer und Speicherblöcke verfügbar. Damit sind sehr rasch Rechen- und Daten-Bandbreiten zu erzielen, welche auch 16-Kern-CPU um ein mehrfaches übertreffen. Eine ähnliche Betrachtung lässt sich auch für Grafikkarten (GPU-processing) machen.<br />
<br />
Im Folgenden wird einzeln untersucht, welche Performance-Anforderungen an den FPGA / die CPU bestehen und wie diese zustande kommen:<br />
<br />
==Rechenbedarf für Modelle==<br />
Die folgende Tabelle zeigt den Bedarf an Rechen- und Prozessschritten für unterschiedliche Bauelemente je nach Komplexität des gewählten Modells:<br />
<br />
=== Tabelle 1 ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Modell !! Gleichungen !! Parameter !! Berechnungen !! Operationen !! Schritte<br />
|-<br />
| Transistor 3D - physisch|| 31 || 73 || 3700|| 4700|| 13200<br />
|-<br />
| Transistor hSpice|| 17 || 32 || 890|| 1190 || 2000<br />
|-<br />
| pSPice || 9 || 19 || 232 || 304 || 427<br />
|-<br />
| BiPol - KleinSignal|| 5 || 7 || 64 || 89|| 121<br />
|-<br />
| BiPol - Lineariarisiert|| 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Theoretischer Transistor|| 1 || 9 || 11 || 12|| 18<br />
|-<br />
| || || || || || <br />
|-<br />
| Widerstand 3D HF || 9 || 21 || 225 || 306 || 430<br />
|-<br />
| Widerstand 2D LF || 5 || 12 || 69 || 94 || 128<br />
|-<br />
| Widerstand pSpice || 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Widerstand - Linearisiert || 1 || 3 || 5 || 6 || 10<br />
|-<br />
| Theoretischer Widerstand || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Kondensator 3D HF || 17 || 37 || 904 || 1193 || 2011<br />
|-<br />
| Kondensator 2D LF || 9 || 18 || 222 || 303 || 426<br />
|-<br />
| Kondensator pSpice || 5 || 7 || 64 || 89 || 121<br />
|-<br />
| Kondensator - Linearisiert || 2 || 3 || 11 || 15 || 22<br />
|-<br />
| Theoretischer Kondensator || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Spule 3D HF - freq || 23 || 45 || 1819 || 2350 || 4825<br />
|-<br />
| Spule 2D LF - freq || 16 || 31 || 783 || 1040 || 1710<br />
|-<br />
| Spule pSpice || 7 || 11 || 129 || 178 || 244<br />
|-<br />
| Spule - Linearisiert || 3 || 6 || 25 || 34 || 47<br />
|-<br />
| Theoretische Spule || 1 || 3 || 5 || 6 || 10<br />
|}<br />
<br />
=== Anmerkungen ===<br />
Der 3D-Transistor ist eine Sammlung von Formeln, welche sich aus der Analyse eines räumlich ausgedehnten Gebildes im Silizium ergibt, so wie es im physikalischen Simulator zur Chipherstellung verwendet wird. Das Spice-Modell ist der angepasste C-Code des Modells aus Cadence, bzw das Equivalent. Das Modell unter "BiPol" ist das klassische Kleinsignalersatzschaltbild und - verhalten eines Transistors gemäß Möschwitzer / Lunze und Titze -Schenk. Der theoretische Transistor besteht aus einer Formel mit Teillinearisierungen (und entsprechenden Abweichungen). Für MOS-Fet und BiPolar wird dieselbe Abschätzung verwendet, wobei die Charakterisierung des MosFet aufwändiger ist und den BiPo nach oben abschätzt.<br />
<br />
Erwartungsgemäß haben umfangreichere Modelle mehr Formeln, Parameter und auch Rechentiefe. Bei Widerstand und Kondensator werden mitunter auch Temperatur, Induktivität und Streuung berücksichtigt, die sich aus realen Bauteilgehäuseformen ergeben, Bei den höheren Kondensator-Modellen sind auch die geringe Nichtlinearität des Dielektrikums und die Leckströme abgebildet.<br />
<br />
Die Spule ist besonders trickreich, wegen der Streufelder im 3D-Fall und der "seltsamen" Frequenzabhängigkeit schon im im 2D-Fall. Das Magnetmodell ist jenes nach Jiles-Atherton ("Spice"), das 2D ein modifiziertes Carpenter-Modell von mir, das komplett in VHDL erstellt wurde und in mehreren Ausbaustufen verwendet wird.<br />
<br />
Die Berechnungsformeln wurden u.a. in MATLAB umgesetzt und in lineares VHDL gewandelt. Daraus ergeben sich je nach Komplexität des Modells die anwendungsabhängige Anzahl von Rechenschritten. Der Bedarf ist als grober Anhaltspunkt zu sehen und kann stärker variieren.<br />
<br />
Bei der Betrachtung der notwendigen Rechenschritte für CPUs ist der Wert entsprechend der Möglichkeiten der Arithmetik und der Rechenanforderungen gfs ein anderer. Auch sind die Besonderheiten von PCs in Betracht zu ziehen. Daher ergeben sich bei einer virtuellen Simulation in MATLAB oder pSPice sehr viel geringere Werte, als die Tabelle suggeriert.<br />
<br />
==Bauelementebedarf==<br />
Die nachfolgende Tabelle zeigt exemplarisch den Bedarf an typischen Bauelementen für unterschiedliche ausgewählte Analogschaltungen:<br />
<br />
===Tabelle 2===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Halbleiter !! Widerstände !! Kondensatoren !! Spulen !! I,U,B,H,N<br />
|-<br />
| Ein-Transistor-Verstärker || 1 || 4 || 2 || 0 || 8<br />
|-<br />
| Gegentaktverstärker || 4 || 6 || 4 || 2 || 17<br />
|-<br />
| AB-HIFI-Verstärker || 14 || 15 || 11 || 4 || 45<br />
|-<br />
| Operationsverstärker || 18 || 32 || 6 || 0 || 57<br />
|-<br />
| HIFI-Amp mit Preamp || 27 || 42 || 26 || 8 || 104<br />
|-<br />
| Monophoner Analogsynthesizer || 155 || 235 || 130 || 36 || 557<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 1.085 || 1.450 || 850 || 240 || 3.626<br />
|}<br />
<br />
===Anmerkungen===<br />
Für die Abschätzung des grundsätzlichen Rechenbedarfs werden Beispielschaltungen herangezogen und die durchschnittliche Zahl sowie Art der Bauelemente bestimmt. Dabei werden 2 Dioden wie 1 Transistor gerechnet, ein Darlington-Transistor als 2 Transistoren. Mit I,U,B,H und N sind Spannungsquellen, Stromquellen sowie B- und H-Felder gemeint, die mit simuliert werden sollen. Eingeschlossen darin sind auch Störungen und das Rauschen auf Leitungen. Z.B. sind dies Rauschquellen beim Widerstand und induzierte Ströme, aber auch Rückwirkungen von Feldern. Laut Tabelle handelt es sich um scheinbar viele Parameter, welche aber in der realen Rechnung einen überschaubaren Rechenaufwand verursachen, da sie nur additiv wirken. Dennoch sind sie für das Ergebnis wichtig. Rauschen fördert z.B. die Konvergenz von Iterationen und hilft, Ungenauigkeiten bei den Rechnungen zu überwinden.<br />
<br />
===Schaltungskomplexität beim Beispiel Hochpass===<br />
<br />
Maßgeblich für die Menge der zu simulierenden Bauelemente ist hier bereits der Anspruch an die Genauigkeit: Je genauer der HF-Anteil einer Schaltung berechnet werden soll, desto mehr kommen Felder, Streuinduktivitäten und die Ausgestaltung des PCBs ins Spiel. Die nachfolgenden Zeichnungen zeigen beispielhaft 2 Simulationsansätze für eine Tiefpassschaltung.<br />
<br />
[[Datei:Highpass simulation simple view.png]]<br />
<br />
In der ersten kommen nur einfache theoretische Gleichungen zur Anwendung, darunter ein vollständig linearer Ansatz für den OPV. Der Ansatz führt zu einer geringen Zahl von Gleichungen und entsprechend schnellen Berechnung. In der unteren Zeichnung sind zusätzliche Bauelemente eingefügt, die helfen, das reale Verhalten besser nachzubilden. Dies betrifft neben den Komponenten (Eingangswiderstände und - kapazitäten) auch den Einfluss der konkreten Leiterbahnführung.<br />
<br />
[[Datei:Highpass simulation extended view.png]]<br />
<br />
Diese Schaltung ist zwar auch noch signifikant von der Realität entfernt, da der OP nach wie vor bis auf eine Ausgangsdämpfung linear modelliert wurde, dennoch war es möglich, das Verhalten bis etwa 100kHz für kleine Signale weitgehend exakt nachzustellen, was für Audiosimulationen taugen würde. Darüber hinaus kommt zunehmend der OP und seine limitierte Bandbreite ins Spiel. Für echte HF-Simulationen müssten weitere Effekte Berücksichtigung finden.<br />
<br />
==Rechenzeitbedarf==<br />
Die nachfolgende Tabelle zeigt den Bedarf an Rechenschritten für die gewählten Schaltungen je nach Modell:<br />
<br />
===Tabelle 3===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 82 || 146 || 563 || 1.810 || 19.020<br />
|-<br />
| Gegentaktverstärker || 206 || 460 || 1.765 || 7.615 || 73.000<br />
|-<br />
| AB-HIFI-Verstärker || 590 || 315 || 4.780 || 19.475 || 233.500<br />
|-<br />
| Operationsverstärker || 742 || 1.395 || 4.490 || 14.450 || 264.400<br />
|-<br />
| HIFI-Amp mit Preamp || 1.118 || 2.820 || 10.500 || 41.780 || 266.850<br />
|-<br />
| Monophoner Analogsynthesizer || 7.184 || 15.165 || 55.190 || 213.950 || 2.590.700<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 47.580 || 101.600 || 366.700 || 1.426.400 || 17.870.000<br />
|}<br />
<br />
===Anmerkungen===<br />
Diese Tabelle ist effektiv das Ergebnis der Verknüpfung der beiden vorherigen Tabellen unter Anrechnung der Anzahl der beteiligten Bauelemente und dem offset zur Verwaltung von z.B. Stimulationsobjekten. <br />
<br />
Erwartungsgemäß erfordern größere Schaltungen mit komplexeren Modellen überproportional immer mehr Rechenschritte, um einen einzelnen Rechnungsdurchlauf einer simulierten Zeiteinheit zu absolvieren. Bei umfangreichen Schaltungen entstehen zudem sehr viele Verbindungen, Schleifen und Einflüsse, welche den Rechenaufwand nach oben treiben. Der zuvor dargestellte Hochpass erforderte z.B. die 15-fache Zahl von Rechenschritten im Vergleich zum einfachen Modell und erreicht im Volumen bereits das Innere eines vollständigen OPs.<br />
<br />
Es ist hier sicher schon einsichtig, dass die einfachen linearisierten Modelle kein Detailverhalten wiedergeben-, sondern im Rahmen von Simulationen nur das Prinzip der Funktion darstellen können. Alle Feinheiten, insbesondere die Abweichungen der realen Bauelemente vom Ideal, fehlen hier.<br />
<br />
==Maximale Iterationsfrequenz==<br />
Die nachfolgende Tabelle zeigt die Anzahl der möglichen Iterationen je Sekunde bei Abarbeitung der vollständigen analytischen Gleichungen mit dem angenommen 200MHz FPGA:<br />
<br />
===Tabelle 4===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 2.500.000|| 1.400.000 || 355.000 || 110.000 || 10.500<br />
|-<br />
| Gegentaktverstärker || 970.000 || 434.000|| 113.000 || 26.200 || 2.730<br />
|-<br />
| AB-HIFI-Verstärker || 338.000|| 152.000 || 41.800 || 10.270 || 857<br />
|-<br />
| Operationsverstärker || 269.000 || 143.000 || 44.500 || 13.840 || 756<br />
|-<br />
| HIFI-Amp mit Preamp || 152.000 || 70.900 || 19.040 || 4.786 || 428<br />
|-<br />
| Monophoner Analogsynthesizer || 27.840 || 13.200 || 3.624 || 934 || 77<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 4.200 || 1.968 || 545 || 140 || 11<br />
|}<br />
<br />
===Anmerkungen===<br />
Unter der Annahme einer optimalen Ausnutzung des Chips und der typischen Auslastung der Fläche wie oben angesetzt, ergibt sich bei der Taktfrequenz eine maximale Anzahl von Durchläufen einer Iterations-Schleife, bis ein Ergebnis vorliegt. Diese entspricht der invertierten Latenz. Die Abschätzung zeigt, dass - die betreffende Hardware vorausgesetzt - es grundsätzlich möglich wäre, auch ein sehr kompliziertes Analogmodell mit immerhin 10Hz punktweise zu simulieren, was für Untersuchungen der Funktion im Vorfeld des Designs reichen würde. <br />
<br />
Die hier inbegriffene Streuung beträgt etwa 50% ... 100% je nach individueller Konvergenz und Ausbau des FPGAs sowie Qualität der Umsetzung, d.h. ein Maximalmodell eines Analogsynthesizers oder einer Filterbank, wie unten rechts angenommen wurde, kann statt 100ms zwischen 50ms und 200ms pendeln. Die Größenordnung bleibt aber in diesem Bereich.<br />
<br />
<br />
==Oversampling==<br />
Die nachfolgende Tabelle zeigt den ungefähren Bedarf an Oversampling und die Anzahl der Iterationen, bis eine ausreichende Konvergenz und damit Genauigkeit bei numerischer Berechnung erzielt wird. Die Werte ergeben sich aus Erfahrung sowie aus der Grundbetrachtung der notwendigen Repräsentation von Oberwellen eines Signals bei z.B. Faltungsoperationen. Vor allem schlägt sich hier ein zunehmend schlechteres Konvergenzverhalten der Rechnung beim Finden der Lösungen für umfangreiche Schaltungen mit Energiespeichern wie Drosseln und verlustbehaftete Kondensatoren nieder.<br />
<br />
===Tabelle 5===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 4 || 6 || 8 || 32 || 128<br />
|-<br />
| Gegentaktverstärker || 6 || 9 || 12 || 48 || 192<br />
|-<br />
| AB-HIFI-Verstärker || 8 || 12 || 16 || 64 || 256<br />
|-<br />
| Operationsverstärker || 12 || 18 || 24 || 96 || 384<br />
|-<br />
| HIFI-Amp mit Preamp || 16 || 24 || 32 || 128 || 512<br />
|-<br />
| Monophoner Analogsynthesizer || 24 || 36 || 48 || 192 || 768<br />
|-<br />
| 8-fach polyphoner Analogsynthesizer mit Filtern || 32 || 48 || 64 || 256 || 1024<br />
|}<br />
<br />
===Anmerkungen===<br />
Je nach Anwendung ist ein oversampling der Rechnung, eine Überhöhung der Taktfrequenz für numerische Rechnungen in Echtzeit und auch die gesteigerte Anzahl der echten Iterationen zu berücksichtigen. Dabei erfordern komplexere und umfangreichere Anwendungen für die letztlich gleiche Genauigkeit zunehmend mehr Iterationen. Zudem werden die Anforderungen an umfangreiche Schaltungen auch im Hinblick auf die Genauigkeit steigen. Daraus ergibt sich gewöhnlich ein ungefähr quadratisches Verhalten des Bedarfs mit wachsender Größe der Schaltung und des Modells. Gleichzeitig verläuft die Genauigkeit mit der Potenz der Anzahl der Iterationen, wächst also stärker, als linear. Damit ergibt sich ein mittleres Verhalten aus linearer Steigung und Potenzierung, was die Zahl der nötigen Iterationen / Takte angeht.<br />
<br />
Die Tabelle zeigt Erfahrungs- und Schätzwerte, die entsprechend variieren können. Der beispielhaft angeführte Hochpass musste seinerzeit schon mit fast der 10-fachen Abtastrate / Feinheit der Simulationsschritte simuliert werden, um realitätsnahe Ergebnisse zu erhalten und das Verhalten im höheren kHz-Bereich zufriedenstellend abzubilden. Insgesamt erforderte es eine fast 100-fache Rechenzeit gegenüber dem einfachen Modell.<br />
<br />
==Resultierende Abtastfrequenz==<br />
Die nachfolgende Tabelle zeigt die aus den Vorbetrachtungen resultierende Abtastfrequenz für die vollständigen Iterationen:<br />
<br />
===Tabelle 6===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 610.000 || 228.000 || 44.400 || 3.459 || 82<br />
|-<br />
| Gegentaktverstärker || 161.000 || 48.300 || 9.400 || 547 || 14<br />
|-<br />
| AB-HIFI-Verstärker || 42.300 || 12.600 || 2.600 || 160 || 3<br />
|-<br />
| Operationsverstärker || 22.400 || 7.900 || 1.850 || 143 || 2<br />
|-<br />
| HIFI-Amp mit Preamp || 9.400 || 2.900 || 595 || 37 || 0,8<br />
|-<br />
| Monophoner Analogsynthesizer || 1.160 || 367 || 75 || 5 || 0,1<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 131 || 41 || 9 || 0,5 || 0,01<br />
|}<br />
<br />
===Anmerkungen===<br />
Als Folge der nötigen Iterationen ergibt sich hier die Zahl der echten Samples, die berechnet werden können und damit ein Hinweis auf die Echtzeitfähig der Anwendung. Um die jeweils erforderliche Genauigkeit und Frequenz zu ermitteln, muss die höchste auftretende Frequenz beachtet werden, welche für den Benutzer relevant ist. Diese ist maßgeblich für die Reglung / Authentizität der Berechnung. Für Temperaturen wären z.B. Raten von 10Hz und darunter ausreichend. Für Audiosignale wären 2x15kHz zu fordern. Mit Einschränkungen sind auch 5kHz ... 10kHz noch zulässig, wenn größere Abweichungen akzeptiert werden können. Üblicherweise nehmen die Fehler in den Höhen mit jeder Oktave um 3...6db zu, d.h. hat man z.B. bei einer angegebenen Frequenz eine definierte Präzision von 100dB THD Signalgüte erreicht und befindet sich genügend weit unterhalb der Eckfrequenz der Abtastrate, so kann man bei der 10-fachen Frequenz immerhin noch 80dB Güte erwarten, wenn man weniger überabtastet oder Iterationen früher abbricht.<br />
<br />
An dieser Stelle sieht man aber bereits, dass realistischerweise nur sehr kleine und einfache Schaltungen in Echtzeit sinnvoll simuliert und überwacht werden können.<br />
<br />
==Benötigte Anzahl der FPGAs==<br />
Die nachfolgende Tabelle zeigt die benötigte Anzahl FPGAs und eine mögliche Parallelisierung:<br />
<br />
===Tabelle 7===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 0,1 || 0,1 || 0,3 || 1,0 || 11<br />
|-<br />
| Gegentaktverstärker || 0,1 || 0,3 || 1,0 || 4,3 || 41<br />
|-<br />
| AB-HIFI-Verstärker || 0,4 || 0,8 || 2,7 || 11 || 131<br />
|-<br />
| Operationsverstärker || 0,4 || 0,8 || 2,6 || 8,2 || 149<br />
|-<br />
| HIFI-Amp mit Preamp || 0,8 || 1,6 || 5,9 || 24 || 263<br />
|-<br />
| Monophoner Analogsynthesizer || 4,1 || 8,6 || 31 || 120 || 1.458<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 27 || 57 || 206 || 803 || 10.050<br />
|}<br />
<br />
===Anmerkungen===<br />
Aus den Rechenanforderungen ergibt sich eine theoretische Anzahl von FPGAs, die zeitlich belegt werden. Bei der Beurteilung, ob ein FPGA auch tatsächlich reicht, muss zudem berücksichtigt werden, dass die Resourcen für einen sequenziellen Betrieb inklusive Verwaltung insgesamt reichen. In einigen Fällen der Teilauslastung ist dabei eine Teilparallelisierung effektiver und machbar. Diese Werte sind grün markiert. Bei Werten >1 reicht 1 FPGA aufgrund der gesamten Anforderungen nicht mehr aus, da die Rechnung von der Fläche her "zu lang" wird. Zwar gibt es einen schmalen Bereich, wo durch künstliche Sequenzialisierung (resource sharing) Resourcen gespart werden könnten, aber dies wird hier nicht betrachtet, da dann die Option des pipelinings entfiele.<br />
<br />
<br />
==Maximale Performance==<br />
Die nachfolgende Tabelle zeigt die maximale Anzahl der parallelen Berechnungen bei totalem pipelining in angenommenden 16 FPGAs bei günstigster Verschaltung und Nutzung:<br />
<br />
===Tabelle 8===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 215 || 145 || 46 || 15 || 1,5<br />
|-<br />
| Gegentaktverstärker || 111 || 56 || 16 || 4 || 0,4<br />
|-<br />
| AB-HIFI-Verstärker || 44 || 21 || 6 || 1,5 || 0,1<br />
|-<br />
| Operationsverstärker || 36 || 20 || 6 || 2,0 || 0,1<br />
|-<br />
| HIFI-Amp mit Preamp || 21 || 10 || 3 || 0,7 || 0,1<br />
|-<br />
| Monophoner Analogsynthesizer || 4 || 2 || 0,5 || 0,1 || 0,01<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 0,6 || 0,3 || 0,1 || 0,02 || 0,001<br />
|}<br />
<br />
===Anmerkungen===<br />
Bei einem CUBE-System aus 16 FPGAs ergibt sich die Möglichkeit, die Rechnung als solche aufgrund der benötigten Hardware<br />
sehr wohl zu implementieren und die Iteration zu schließen, gleichzeitig eine Anzahl von Situationen simultan zu berechnen und so den FPGA voll zu nutzen. Das ist insbesondere bei Monte-Carlo-Analysen vorteilhaft. Es ergibt sich dann eine rechnerisch maximale Anzahl gleichzeitiger Rechenkanäle. Eine Anzahl größer 1 gibt an, dass 16 FPGAs in Umfang und Tempo für die Anforderung ausreichen. Konstellationen <1 könnten zwar teilweise vom Platz her mehr, als 100% berechnen, erlauben es aber nicht, den Loop in Echtzeit schließen. Abhilfe schafft dann nur noch eine schnellere Technologie mit einer höheren Taktfrequenz.<br />
<br />
==Fazit==<br />
Wie man erwarten konnte, ist ein einzelnes Bauelement bei entsprechendem Aufwand leicht zu berechnen, wenn man nicht gerade ins 3D geht und alle erdenklichen parasitären Effekte mitberücksichtigen will. Aber bereits, wenn man eine kleinere Schaltung zusammensetzt, entstehen durch die Leitungsführung Effekte, die zu Verfälschungen der reinen Modelle führen. Je höher die Frequenz ist, die betrachtet wird, desto mehr Effekte müssen simuliert werden.<br />
<br />
Nach meiner Einschätzung reicht für Audio die Modellierung auf Spice-Niveau gerade so aus, wenn man Leitungen und wichtige Störungen mit simuliert und diese als Einflüsse mit zusätzlichen Spannungen darstellt. Ansonsten laufen die Ergebnisse der Gleichungen rasch weg. Wichtig sind die Verluste bei Spulen und Kondensatoren, die oft nur unzureichend abgebildet werden.<br />
<br />
Trotzdem ist eine einfache Transistorschaltung noch gut zu modellieren und zu überwachen. Das geht auch in Echtzeit und ist wie die Wettervorhersage für einen gewissen Zeitraum stimmig. Eine Echtzeitüberwachung muss dann durch Messungen unterstützt und immer wieder "eingefangen" werden. Eine Simulation läuft dann logischerweise weg und ist nur dem Prinzip nach exakt d.h. ein Schwingkreis, den man ausrechnet, kommt gfs zu einer leicht abweichenden Frequenz, schwingt aber weitgehend authentisch. <br />
<br />
Sehr schwierig sind Spulen. Die Speicherwirkung des Feldes insbesondere die Streuung und Nichtlinearität bei magnetischen Werkstoffen ist eine Wissenschaft für sich. Ein weitgehend gut funktionierendes Ersatzmodell in VHDL, das ich entwickelt habe, füllte in der Realität schon einen halben FPGA. Mit den reduzierten Modellen darf man nicht erwarten, dass man Sättigungen und Oberwellen so hinbekommt, wie sie real auftreten. Wer also in seinem Analogschaltkreis eine Drossel mit Ferritkern hat, ist im Grunde schon "verloren".<br />
<br />
Eine simple Drossel ist hingegen in etwa so genau zu simulieren wie ein Kondensator, wenn man die parasitären Effekte mit drin hat und kleine Ströme nutzt und nicht viel von Außen einstreut. Ansonsten liegt man im Bereich der Komplexität von Transistoren.<br />
<br />
[[Kategorie:FPGA und Co]]<br />
[[Kategorie:Grundlagen]]<br />
[[Kategorie:C]]<br />
[[Kategorie:VHDL]]<br />
[[Kategorie:AVR-Arithmetik]]<br />
[[Kategorie:Algorithmen und Arithmetik|A]]<br />
[[Kategorie:Signalverarbeitung|P]]<br />
[[Kategorie:DSP]]<br />
[[Kategorie:Audio]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Modellierung_analoger_Schaltungen&diff=106512Modellierung analoger Schaltungen2023-12-19T12:30:11Z<p>Engineer: /* Vorbemerkung */</p>
<hr />
<div>''von [[Benutzer:engineer|Jürgen Schuhmacher]]''<br />
<br />
Dieser Artikel untersucht die Möglichkeit, reale analoge Bauteile und Schaltungen mathematisch nachzubilden und simulieren zu können, um z.B. ihr Verhalten zu überwachen und voraussagen zu können. Es wird damit auch dargestellt, ob und inwieweit es möglich ist, analoge Schaltungen mit digitalen Systemen zu ersetzen, wie das z.B. bei Filtern und Signalerzeugern der Fall ist.<br />
<br />
== Vorbemerkung ==<br />
Die Aufstellung ist ursprünglich für die Umsetzung in FPGAs mit einer damaligen Taktfrequenz von 50 MHz erstellt worden und wurde für diesen Artikel entsprechend skaliert. Sie gilt sinngemäß auch für Microcontroller und PC-Systeme. Dazu würde man die Betrachtung der Resourcen im FPGA ignorieren und nur die gefroderte Rechenleistung in Betracht ziehen. Diese müsste entsprechend der Möglichkeiten des jeweilgen DSPs oder der CPU interpretiert werden:<br />
<br />
Für DSPs kann man diesbezüglich etwa 60% ... 80% Auslastung für die Berechnung ansetzen (Rest für Verwaltung und zusätzliche Speicherzugriffe) - aufgrund der besseren Arithmetik heutiger DSPs etwa 150% bis 200% der Rechenleistung - insbesondere bei genauen Anforderungen. Der hier beispielhaft angenommene FPGA mit 200 MHz entspräche im Bezug auf eine typische Multiplikation und Speicheropration in etwa einem 150MHz Audio DSP mit 24 Bit, bzw. 120MHz DSP mit 32 Bit.<br />
<br />
Für aktuelle CPUs kann man etwa 40% ... 60% der Auslastung - und aufgrund der Arithmetik etwa 150% ... 250% der Rechenleistung pro Takt annehmen - inbegriffen der Tatsache, dass bei den Schritten unten auch nicht-arithmetische Aktionen mitgerechnet werden, bei denen die CPU keine Vorteile hat. Ein durchschnittlich ausgelasteter 4-Kern-Intel7 mit 3GHz kommt so praktisch auf das 10-fache bis 30-fache der Leistung eines FPGAs für eine Operation. Bei DSPs und CPUs müssen dann aber noch Speicher- und externe RAM-Zyklen berücksichtigt werden, die die Performance um z.T. 25% bis 75% senken. Ein direkter Vergleich zwischen FPGA und einer solchen CPU wies für eine Klangsyntheseschaltung konkret einen Faktor 8.2 für die CPU aus. Da die CPU aber nur begrenzt parallelisieren kann, sinkt der Faktor für die Werte in den letzten beiden Tabellen, welche die Parallelisierung mit pipelining untersuchen, schnell ab.<br />
<br />
Wesentlich bei FPGAs ist die Berücksichtigung der gleichzeitig verfügbaren Resourcen. Typische FPGAs hatten zum Zeitpunkt der Artikelerstellung meist nur 20-40 Multipliziereinheiten. Auch die Anzahl der physisch parallen Speicherblöcke war begrenzt. Mit einem aktuellen FPGA unter 100€,- sind inzwischen hunderte Multiplizierer und Speicherblöcke verfügbar. Damit sind sehr rasch Rechen- und Daten-Bandbreiten zu erzielen, welche auch 16-Kern-CPU um ein mehrfaches übertreffen. Eine ähnliche Betrachtung lässt sich auch für Grafikkarten (GPU-processing) machen.<br />
<br />
Im Folgenden wird einzeln untersucht, welche Performance-Anforderungen an den FPGA / die CPU bestehen und wie diese zustande kommen:<br />
<br />
==Rechenbedarf für Modelle==<br />
Die folgende Tabelle zeigt den Bedarf an Rechen- und Prozessschritten für unterschiedliche Bauelemente je nach Komplexität des gewählten Modells:<br />
<br />
=== Tabelle 1 ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Modell !! Gleichungen !! Parameter !! Berechnungen !! Operationen !! Schritte<br />
|-<br />
| Transistor 3D - physisch|| 31 || 73 || 3700|| 4700|| 13200<br />
|-<br />
| Transistor hSpice|| 17 || 32 || 890|| 1190 || 2000<br />
|-<br />
| pSPice || 9 || 19 || 232 || 304 || 427<br />
|-<br />
| BiPol - KleinSignal|| 5 || 7 || 64 || 89|| 121<br />
|-<br />
| BiPol - Lineariarisiert|| 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Theoretischer Transistor|| 1 || 9 || 11 || 12|| 18<br />
|-<br />
| || || || || || <br />
|-<br />
| Widerstand 3D HF || 9 || 21 || 225 || 306 || 430<br />
|-<br />
| Widerstand 2D LF || 5 || 12 || 69 || 94 || 128<br />
|-<br />
| Widerstand pSpice || 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Widerstand - Linearisiert || 1 || 3 || 5 || 6 || 10<br />
|-<br />
| Theoretischer Widerstand || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Kondensator 3D HF || 17 || 37 || 904 || 1193 || 2011<br />
|-<br />
| Kondensator 2D LF || 9 || 18 || 222 || 303 || 426<br />
|-<br />
| Kondensator pSpice || 5 || 7 || 64 || 89 || 121<br />
|-<br />
| Kondensator - Linearisiert || 2 || 3 || 11 || 15 || 22<br />
|-<br />
| Theoretischer Kondensator || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Spule 3D HF - freq || 23 || 45 || 1819 || 2350 || 4825<br />
|-<br />
| Spule 2D LF - freq || 16 || 31 || 783 || 1040 || 1710<br />
|-<br />
| Spule pSpice || 7 || 11 || 129 || 178 || 244<br />
|-<br />
| Spule - Linearisiert || 3 || 6 || 25 || 34 || 47<br />
|-<br />
| Theoretische Spule || 1 || 3 || 5 || 6 || 10<br />
|}<br />
<br />
=== Anmerkungen ===<br />
Der 3D-Transistor ist eine Sammlung von Formeln, welche sich aus der Analyse eines räumlich ausgedehnten Gebildes im Silizium ergibt, so wie es im physikalischen Simulator zur Chipherstellung verwendet wird. Das Spice-Modell ist der angepasste C-Code des Modells aus Cadence, bzw das Equivalent. Das Modell unter "BiPol" ist das klassische Kleinsignalersatzschaltbild und - verhalten eines Transistors gemäß Möschwitzer / Lunze und Titze -Schenk. Der theoretische Transistor besteht aus einer Formel mit Teillinearisierungen (und entsprechenden Abweichungen). Für MOS-Fet und BiPolar wird dieselbe Abschätzung verwendet, wobei die Charakterisierung des MosFet aufwändiger ist und den BiPo nach oben abschätzt.<br />
<br />
Erwartungsgemäß haben umfangreichere Modelle mehr Formeln, Parameter und auch Rechentiefe. Bei Widerstand und Kondensator werden mitunter auch Temperatur, Induktivität und Streuung berücksichtigt, die sich aus realen Bauteilgehäuseformen ergeben, Bei den höheren Kondensator-Modellen sind auch die geringe Nichtlinearität des Dielektrikums und die Leckströme abgebildet.<br />
<br />
Die Spule ist besonders trickreich, wegen der Streufelder im 3D-Fall und der "seltsamen" Frequenzabhängigkeit schon im im 2D-Fall. Das Magnetmodell ist jenes nach Jiles-Atherton ("Spice"), das 2D ein modifiziertes Carpenter-Modell von mir, das komplett in VHDL erstellt wurde und in mehreren Ausbaustufen verwendet wird.<br />
<br />
Die Berechnungsformeln wurden u.a. in MATLAB umgesetzt und in lineares VHDL gewandelt. Daraus ergeben sich je nach Komplexität des Modells die anwendungsabhängige Anzahl von Rechenschritten. Der Bedarf ist als grober Anhaltspunkt zu sehen und kann stärker variieren.<br />
<br />
Bei der Betrachtung der notwendigen Rechenschritte für CPUs ist der Wert entsprechend der Möglichkeiten der Arithmetik und der Rechenanforderungen gfs ein anderer. Auch sind die Besonderheiten von PCs in Betracht zu ziehen. Daher ergeben sich bei einer virtuellen Simulation in MATLAB oder pSPice sehr viel geringere Werte, als die Tabelle suggeriert.<br />
<br />
==Bauelementebedarf==<br />
Die nachfolgende Tabelle zeigt exemplarisch den Bedarf an typischen Bauelementen für unterschiedliche ausgewählte Analogschaltungen:<br />
<br />
===Tabelle 2===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Halbleiter !! Widerstände !! Kondensatoren !! Spulen !! I,U,B,H,N<br />
|-<br />
| Ein-Transistor-Verstärker || 1 || 4 || 2 || 0 || 8<br />
|-<br />
| Gegentaktverstärker || 4 || 6 || 4 || 2 || 17<br />
|-<br />
| AB-HIFI-Verstärker || 14 || 15 || 11 || 4 || 45<br />
|-<br />
| Operationsverstärker || 18 || 32 || 6 || 0 || 57<br />
|-<br />
| HIFI-Amp mit Preamp || 27 || 42 || 26 || 8 || 104<br />
|-<br />
| Monophoner Analogsynthesizer || 155 || 235 || 130 || 36 || 557<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 1.085 || 1.450 || 850 || 240 || 3.626<br />
|}<br />
<br />
===Anmerkungen===<br />
Für die Abschätzung des grundsätzlichen Rechenbedarfs werden Beispielschaltungen herangezogen und die durchschnittliche Zahl sowie Art der Bauelemente bestimmt. Dabei werden 2 Dioden wie 1 Transistor gerechnet, ein Darlington-Transistor als 2 Transistoren. Mit I,U,B,H und N sind Spannungsquellen, Stromquellen sowie B- und H-Felder gemeint, die mit simuliert werden sollen. Eingeschlossen darin sind auch Störungen und das Rauschen auf Leitungen. Z.B. sind dies Rauschquellen beim Widerstand und induzierte Ströme, aber auch Rückwirkungen von Feldern. Laut Tabelle handelt es sich um scheinbar viele Parameter, welche aber in der realen Rechnung einen überschaubaren Rechenaufwand verursachen, da sie nur additiv wirken. Dennoch sind sie für das Ergebnis wichtig. Rauschen fördert z.B. die Konvergenz von Iterationen und hilft, Ungenauigkeiten bei den Rechnungen zu überwinden.<br />
<br />
===Schaltungskomplexität beim Beispiel Hochpass===<br />
<br />
Maßgeblich für die Menge der zu simulierenden Bauelemente ist hier bereits der Anspruch an die Genauigkeit: Je genauer der HF-Anteil einer Schaltung berechnet werden soll, desto mehr kommen Felder, Streuinduktivitäten und die Ausgestaltung des PCBs ins Spiel. Die nachfolgenden Zeichnungen zeigen beispielhaft 2 Simulationsansätze für eine Tiefpassschaltung.<br />
<br />
[[Datei:Highpass simulation simple view.png]]<br />
<br />
In der ersten kommen nur einfache theoretische Gleichungen zur Anwendung, darunter ein vollständig linearer Ansatz für den OPV. Der Ansatz führt zu einer geringen Zahl von Gleichungen und entsprechend schnellen Berechnung. In der unteren Zeichnung sind zusätzliche Bauelemente eingefügt, die helfen, das reale Verhalten besser nachzubilden. Dies betrifft neben den Komponenten (Eingangswiderstände und - kapazitäten) auch den Einfluss der konkreten Leiterbahnführung.<br />
<br />
[[Datei:Highpass simulation extended view.png]]<br />
<br />
Diese Schaltung ist zwar auch noch signifikant von der Realität entfernt, da der OP nach wie vor bis auf eine Ausgangsdämpfung linear modelliert wurde, dennoch war es möglich, das Verhalten bis etwa 100kHz für kleine Signale weitgehend exakt nachzustellen, was für Audiosimulationen taugen würde. Darüber hinaus kommt zunehmend der OP und seine limitierte Bandbreite ins Spiel. Für echte HF-Simulationen müssten weitere Effekte Berücksichtigung finden.<br />
<br />
==Rechenzeitbedarf==<br />
Die nachfolgende Tabelle zeigt den Bedarf an Rechenschritten für die gewählten Schaltungen je nach Modell:<br />
<br />
===Tabelle 3===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 82 || 146 || 563 || 1.810 || 19.020<br />
|-<br />
| Gegentaktverstärker || 206 || 460 || 1.765 || 7.615 || 73.000<br />
|-<br />
| AB-HIFI-Verstärker || 590 || 315 || 4.780 || 19.475 || 233.500<br />
|-<br />
| Operationsverstärker || 742 || 1.395 || 4.490 || 14.450 || 264.400<br />
|-<br />
| HIFI-Amp mit Preamp || 1.118 || 2.820 || 10.500 || 41.780 || 266.850<br />
|-<br />
| Monophoner Analogsynthesizer || 7.184 || 15.165 || 55.190 || 213.950 || 2.590.700<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 47.580 || 101.600 || 366.700 || 1.426.400 || 17.870.000<br />
|}<br />
<br />
===Anmerkungen===<br />
Diese Tabelle ist effektiv das Ergebnis der Verknüpfung der beiden vorherigen Tabellen unter Anrechnung der Anzahl der beteiligten Bauelemente und dem offset zur Verwaltung von z.B. Stimulationsobjekten. <br />
<br />
Erwartungsgemäß erfordern größere Schaltungen mit komplexeren Modellen überproportional immer mehr Rechenschritte, um einen einzelnen Rechnungsdurchlauf einer simulierten Zeiteinheit zu absolvieren. Bei umfangreichen Schaltungen entstehen zudem sehr viele Verbindungen, Schleifen und Einflüsse, welche den Rechenaufwand nach oben treiben. Der zuvor dargestellte Hochpass erforderte z.B. die 15-fache Zahl von Rechenschritten im Vergleich zum einfachen Modell und erreicht im Volumen bereits das Innere eines vollständigen OPs.<br />
<br />
Es ist hier sicher schon einsichtig, dass die einfachen linearisierten Modelle kein Detailverhalten wiedergeben-, sondern im Rahmen von Simulationen nur das Prinzip der Funktion darstellen können. Alle Feinheiten, insbesondere die Abweichungen der realen Bauelemente vom Ideal, fehlen hier.<br />
<br />
==Maximale Iterationsfrequenz==<br />
Die nachfolgende Tabelle zeigt die Anzahl der möglichen Iterationen je Sekunde bei Abarbeitung der vollständigen analytischen Gleichungen mit dem angenommen 200MHz FPGA:<br />
<br />
===Tabelle 4===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 2.500.000|| 1.400.000 || 355.000 || 110.000 || 10.500<br />
|-<br />
| Gegentaktverstärker || 970.000 || 434.000|| 113.000 || 26.200 || 2.730<br />
|-<br />
| AB-HIFI-Verstärker || 338.000|| 152.000 || 41.800 || 10.270 || 857<br />
|-<br />
| Operationsverstärker || 269.000 || 143.000 || 44.500 || 13.840 || 756<br />
|-<br />
| HIFI-Amp mit Preamp || 152.000 || 70.900 || 19.040 || 4.786 || 428<br />
|-<br />
| Monophoner Analogsynthesizer || 27.840 || 13.200 || 3.624 || 934 || 77<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 4.200 || 1.968 || 545 || 140 || 11<br />
|}<br />
<br />
===Anmerkungen===<br />
Unter der Annahme einer optimalen Ausnutzung des Chips und der typischen Auslastung der Fläche wie oben angesetzt, ergibt sich bei der Taktfrequenz eine maximale Anzahl von Durchläufen einer Iterations-Schleife, bis ein Ergebnis vorliegt. Diese entspricht der invertierten Latenz. Die Abschätzung zeigt, dass - die betreffende Hardware vorausgesetzt - es grundsätzlich möglich wäre, auch ein sehr kompliziertes Analogmodell mit immerhin 10Hz punktweise zu simulieren, was für Untersuchungen der Funktion im Vorfeld des Designs reichen würde. <br />
<br />
Die hier inbegriffene Streuung beträgt etwa 50% ... 100% je nach individueller Konvergenz und Ausbau des FPGAs sowie Qualität der Umsetzung, d.h. ein Maximalmodell eines Analogsynthesizers oder einer Filterbank, wie unten rechts angenommen wurde, kann statt 100ms zwischen 50ms und 200ms pendeln. Die Größenordnung bleibt aber in diesem Bereich.<br />
<br />
<br />
==Oversampling==<br />
Die nachfolgende Tabelle zeigt den etwaigen Bedarf an Oversampling und Anzahl der Iterationen, bis eine ausreichende Konvergenz und Genauigkeit bei numerischer Berechnung erzielt wird. Die Werte ergeben sich aus Erfahrung sowie aus der Grundbetrachtung der notwendigen Repräsentation von Oberwellen eines Signals bei Faltungsoperationen. Vor allem schlägt sich hier ein zunehmend schlechteres Konvergenzverhalten bei dem Finden der Lösungen für umfangreiche Schaltungen mit Energiespeichern wie Drosseln und Kondensatoren nieder.<br />
<br />
===Tabelle 5===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 4 || 6 || 8 || 32 || 128<br />
|-<br />
| Gegentaktverstärker || 6 || 9 || 12 || 48 || 192<br />
|-<br />
| AB-HIFI-Verstärker || 8 || 12 || 16 || 64 || 256<br />
|-<br />
| Operationsverstärker || 12 || 18 || 24 || 96 || 384<br />
|-<br />
| HIFI-Amp mit Preamp || 16 || 24 || 32 || 128 || 512<br />
|-<br />
| Monophoner Analogsynthesizer || 24 || 36 || 48 || 192 || 768<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 32 || 48 || 64 || 256 || 1024<br />
|}<br />
<br />
===Anmerkungen===<br />
Je nach Anwendung ist ein oversampling der Rechnung, eine Überhöhung der Taktfrequenz für numerische Rechnungen in Echtzeit und auch die gesteigerte Anzahl der echten Iterationen zu berücksichtigen. Dabei erfordern komplexere und umfangreichere Anwendungen mehr Iterationen für die gleiche letztliche Genauigkeit. Zudem werden die Anforderungen an umfangreiche Schaltungen auch im Hinblick auf die Genauigkeit steigen. Daraus ergibt sich gewöhnlich ein quadratisches Verhalten des Bedarfs mit wachsender Größe der Schaltung und des Modells. Gleichzeitig verläuft die Genauigkeit mit der Potenz der Anzahl der Iterationen, wächst also stärker als linear. Damit ergibt sich ein mittleres Verhalten aus linearer Steigung und Potenzierung, was die Zahl der nötigen Iterationen / Takte angeht.<br />
<br />
Die Tabelle zeigt Erfahrungs- und Schätzwerte, die entsprechend variieren können. Der beispielhaft angeführte Hochpass musste seinerzeit schon mit fast der 10fachen Abtastrate / Feinheit der Simulationsschritte simuliert werden, um realitätsnahe Ergebnisse zu erhalten und das Verhalten im kHz-Bereich zufriedenstellend abzubilden. Insgesamt erforderte sie eine fast 100-fache Rechenzeit gegenüber dem einfachen Modell.<br />
<br />
==Resultierende Abtastfrequenz==<br />
Die nachfolgende Tabelle zeigt die aus den Vorbetrachtungen resultierende Abtastfrequenz für die vollständigen Iterationen:<br />
<br />
===Tabelle 6===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 610.000 || 228.000 || 44.400 || 3.459 || 82<br />
|-<br />
| Gegentaktverstärker || 161.000 || 48.300 || 9.400 || 547 || 14<br />
|-<br />
| AB-HIFI-Verstärker || 42.300 || 12.600 || 2.600 || 160 || 3<br />
|-<br />
| Operationsverstärker || 22.400 || 7.900 || 1.850 || 143 || 2<br />
|-<br />
| HIFI-Amp mit Preamp || 9.400 || 2.900 || 595 || 37 || 0,8<br />
|-<br />
| Monophoner Analogsynthesizer || 1.160 || 367 || 75 || 5 || 0,1<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 131 || 41 || 9 || 0,5 || 0,01<br />
|}<br />
<br />
===Anmerkungen===<br />
Als Folge der nötigen Iterationen ergibt sich hier die Zahl der echten Samples, die berechnet werden können und damit ein Hinweis auf die Echtzeitfähig der Anwendung. Um die jeweils erforderliche Genauigkeit und Frequenz zu ermitteln, muss die höchste auftretende Frequenz beachtet werden, welche für den Benutzer relevant ist. Diese ist maßgeblich für die Reglung / Authentizität der Berechnung. Für Temperaturen wären z.B. Raten von 10Hz und darunter ausreichend. Für Audiosignale wären 2x15kHz zu fordern. Mit Einschränkungen sind auch 5kHz ... 10kHz noch zulässig, wenn größere Abweichungen akzeptiert werden können. Üblicherweise nehmen die Fehler in den Höhen mit jeder Oktave um 3...6db zu, d.h. hat man z.B. bei einer angegebenen Frequenz eine definierte Präzision von 100dB THD Signalgüte erreicht und befindet sich genügend weit unterhalb der Eckfrequenz der Abtastrate, so kann man bei der 10-fachen Frequenz immerhin noch 80dB Güte erwarten, wenn man weniger überabtastet oder Iterationen früher abbricht.<br />
<br />
An dieser Stelle sieht man aber bereits, dass realistischerweise nur sehr kleine und einfache Schaltungen in Echtzeit sinnvoll simuliert und überwacht werden können.<br />
<br />
==Benötigte Anzahl der FPGAs==<br />
Die nachfolgende Tabelle zeigt die benötigte Anzahl FPGAs und eine mögliche Parallelisierung:<br />
<br />
===Tabelle 7===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 0,1 || 0,1 || 0,3 || 1,0 || 11<br />
|-<br />
| Gegentaktverstärker || 0,1 || 0,3 || 1,0 || 4,3 || 41<br />
|-<br />
| AB-HIFI-Verstärker || 0,4 || 0,8 || 2,7 || 11 || 131<br />
|-<br />
| Operationsverstärker || 0,4 || 0,8 || 2,6 || 8,2 || 149<br />
|-<br />
| HIFI-Amp mit Preamp || 0,8 || 1,6 || 5,9 || 24 || 263<br />
|-<br />
| Monophoner Analogsynthesizer || 4,1 || 8,6 || 31 || 120 || 1.458<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 27 || 57 || 206 || 803 || 10.050<br />
|}<br />
<br />
===Anmerkungen===<br />
Aus den Rechenanforderungen ergibt sich eine theoretische Anzahl von FPGAs, die zeitlich belegt werden. Bei der Beurteilung, ob ein FPGA auch tatsächlich reicht, muss zudem berücksichtigt werden, dass die Resourcen für einen sequenziellen Betrieb inklusive Verwaltung insgesamt reichen. In einigen Fällen der Teilauslastung ist dabei eine Teilparallelisierung effektiver und machbar. Diese Werte sind grün markiert. Bei Werten >1 reicht 1 FPGA aufgrund der gesamten Anforderungen nicht mehr aus, da die Rechnung von der Fläche her "zu lang" wird. Zwar gibt es einen schmalen Bereich, wo durch künstliche Sequenzialisierung (resource sharing) Resourcen gespart werden könnten, aber dies wird hier nicht betrachtet, da dann die Option des pipelinings entfiele.<br />
<br />
<br />
==Maximale Performance==<br />
Die nachfolgende Tabelle zeigt die maximale Anzahl der parallelen Berechnungen bei totalem pipelining in angenommenden 16 FPGAs bei günstigster Verschaltung und Nutzung:<br />
<br />
===Tabelle 8===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 215 || 145 || 46 || 15 || 1,5<br />
|-<br />
| Gegentaktverstärker || 111 || 56 || 16 || 4 || 0,4<br />
|-<br />
| AB-HIFI-Verstärker || 44 || 21 || 6 || 1,5 || 0,1<br />
|-<br />
| Operationsverstärker || 36 || 20 || 6 || 2,0 || 0,1<br />
|-<br />
| HIFI-Amp mit Preamp || 21 || 10 || 3 || 0,7 || 0,1<br />
|-<br />
| Monophoner Analogsynthesizer || 4 || 2 || 0,5 || 0,1 || 0,01<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 0,6 || 0,3 || 0,1 || 0,02 || 0,001<br />
|}<br />
<br />
===Anmerkungen===<br />
Bei einem CUBE-System aus 16 FPGAs ergibt sich die Möglichkeit, die Rechnung als solche aufgrund der benötigten Hardware<br />
sehr wohl zu implementieren und die Iteration zu schließen, gleichzeitig eine Anzahl von Situationen simultan zu berechnen und so den FPGA voll zu nutzen. Das ist insbesondere bei Monte-Carlo-Analysen vorteilhaft. Es ergibt sich dann eine rechnerisch maximale Anzahl gleichzeitiger Rechenkanäle. Eine Anzahl größer 1 gibt an, dass 16 FPGAs in Umfang und Tempo für die Anforderung ausreichen. Konstellationen <1 könnten zwar teilweise vom Platz her mehr, als 100% berechnen, erlauben es aber nicht, den Loop in Echtzeit schließen. Abhilfe schafft dann nur noch eine schnellere Technologie mit einer höheren Taktfrequenz.<br />
<br />
==Fazit==<br />
Wie man erwarten konnte, ist ein einzelnes Bauelement bei entsprechendem Aufwand leicht zu berechnen, wenn man nicht gerade ins 3D geht und alle erdenklichen parasitären Effekte mitberücksichtigen will. Aber bereits, wenn man eine kleinere Schaltung zusammensetzt, entstehen durch die Leitungsführung Effekte, die zu Verfälschungen der reinen Modelle führen. Je höher die Frequenz ist, die betrachtet wird, desto mehr Effekte müssen simuliert werden.<br />
<br />
Nach meiner Einschätzung reicht für Audio die Modellierung auf Spice-Niveau gerade so aus, wenn man Leitungen und wichtige Störungen mit simuliert und diese als Einflüsse mit zusätzlichen Spannungen darstellt. Ansonsten laufen die Ergebnisse der Gleichungen rasch weg. Wichtig sind die Verluste bei Spulen und Kondensatoren, die oft nur unzureichend abgebildet werden.<br />
<br />
Trotzdem ist eine einfache Transistorschaltung noch gut zu modellieren und zu überwachen. Das geht auch in Echtzeit und ist wie die Wettervorhersage für einen gewissen Zeitraum stimmig. Eine Echtzeitüberwachung muss dann durch Messungen unterstützt und immer wieder "eingefangen" werden. Eine Simulation läuft dann logischerweise weg und ist nur dem Prinzip nach exakt d.h. ein Schwingkreis, den man ausrechnet, kommt gfs zu einer leicht abweichenden Frequenz, schwingt aber weitgehend authentisch. <br />
<br />
Sehr schwierig sind Spulen. Die Speicherwirkung des Feldes insbesondere die Streuung und Nichtlinearität bei magnetischen Werkstoffen ist eine Wissenschaft für sich. Ein weitgehend gut funktionierendes Ersatzmodell in VHDL, das ich entwickelt habe, füllte in der Realität schon einen halben FPGA. Mit den reduzierten Modellen darf man nicht erwarten, dass man Sättigungen und Oberwellen so hinbekommt, wie sie real auftreten. Wer also in seinem Analogschaltkreis eine Drossel mit Ferritkern hat, ist im Grunde schon "verloren".<br />
<br />
Eine simple Drossel ist hingegen in etwa so genau zu simulieren wie ein Kondensator, wenn man die parasitären Effekte mit drin hat und kleine Ströme nutzt und nicht viel von Außen einstreut. Ansonsten liegt man im Bereich der Komplexität von Transistoren.<br />
<br />
[[Kategorie:FPGA und Co]]<br />
[[Kategorie:Grundlagen]]<br />
[[Kategorie:C]]<br />
[[Kategorie:VHDL]]<br />
[[Kategorie:AVR-Arithmetik]]<br />
[[Kategorie:Algorithmen und Arithmetik|A]]<br />
[[Kategorie:Signalverarbeitung|P]]<br />
[[Kategorie:DSP]]<br />
[[Kategorie:Audio]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Modellierung_analoger_Schaltungen&diff=106511Modellierung analoger Schaltungen2023-12-19T12:26:57Z<p>Engineer: kleine Änderungen</p>
<hr />
<div>''von [[Benutzer:engineer|Jürgen Schuhmacher]]''<br />
<br />
Dieser Artikel untersucht die Möglichkeit, reale analoge Bauteile und Schaltungen mathematisch nachzubilden und simulieren zu können, um z.B. ihr Verhalten zu überwachen und voraussagen zu können. Es wird damit auch dargestellt, ob und inwieweit es möglich ist, analoge Schaltungen mit digitalen Systemen zu ersetzen, wie das z.B. bei Filtern und Signalerzeugern der Fall ist.<br />
<br />
== Vorbemerkung ==<br />
Die Aufstellung ist ursprünglich für die Umsetzung in FPGAs mit einer damaligen Taktfrequenz von 50 MHz erstellt worden und wurde für diesen Artikel entsprechend skaliert. Sie gilt sinngemäß auch für Microcontroller und PC-Systeme. Dazu würde man die Betrachtung der Resourcen im FPGA ignorieren und nur die gefroderte Rechenleistung in Betracht ziehen. Diese müsste entsprechend der Möglichkeiten des jeweilgen DSPs oder der CPU interpretiert werden:<br />
<br />
Für DSPs kann man diesbezüglich etwa 60% ... 80% Auslastung für die Berechnung ansetzen (Rest für Verwaltung und zusätzliche Speicherzugriffe) - aufgrund der besseren Arithmetik heutiger DSPs etwa 150% bis 200% der Rechenleistung - insbesondere bei genauen Anforderungen. Der hier beispielhaft angenommene FPGA mit 200 MHz entspräche im Bezug auf eine typische Multiplikation und Speicheropration in etwa einem 150MHz Audio DSP mit 24 Bit, bzw. 120MHz DSP mit 32 Bit.<br />
<br />
Für aktuelle CPUs kann man etwa 40% ... 60% der Auslastung - und aufgrund der Arithmetik etwa 150% ... 250% der Rechenleistung pro Takt annehmen - inbegriffen der Tatsache, dass bei den Schritten unten auch nicht-arithmetische Aktionen mitgerechnet werden, bei denen die CPU keine Vorteile hat. Ein durchschnittlich ausgelasteter 4-Kern-Intel7 mit 3GHz kommt so praktisch auf das 10-fache bis 30-fache der Leistung eines FPGAs für eine Operation. Bei DSPs und CPUs müssen dann aber noch Speicher- und externe RAM-Zyklen berücksichtigt werden, die die Performance um z.T. 25% bis 75% senken. Ein direkter Vergleich zwischen FPGA und einer solchen CPU wies für eine Klangsyntheseschaltung konkret einen Faktor 8.2 für die CPU aus. Da die CPU aber nur begrenzt parallelisieren kann, sinkt der Faktor für die Werte in den letzten beiden Tabellen, welche die Parallelisierung mit pipelining untersuchen, schnell ab.<br />
<br />
Eine ähnliche Betrachtung lässt sich auch für Grafikkarten (GPU-processing) machen.<br />
<br />
Im Folgenden wird einzeln untersucht, welche Performance-Anforderungen an den FPGA / die CPU bestehen und wie diese zustande kommen:<br />
<br />
==Rechenbedarf für Modelle==<br />
Die folgende Tabelle zeigt den Bedarf an Rechen- und Prozessschritten für unterschiedliche Bauelemente je nach Komplexität des gewählten Modells:<br />
<br />
=== Tabelle 1 ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Modell !! Gleichungen !! Parameter !! Berechnungen !! Operationen !! Schritte<br />
|-<br />
| Transistor 3D - physisch|| 31 || 73 || 3700|| 4700|| 13200<br />
|-<br />
| Transistor hSpice|| 17 || 32 || 890|| 1190 || 2000<br />
|-<br />
| pSPice || 9 || 19 || 232 || 304 || 427<br />
|-<br />
| BiPol - KleinSignal|| 5 || 7 || 64 || 89|| 121<br />
|-<br />
| BiPol - Lineariarisiert|| 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Theoretischer Transistor|| 1 || 9 || 11 || 12|| 18<br />
|-<br />
| || || || || || <br />
|-<br />
| Widerstand 3D HF || 9 || 21 || 225 || 306 || 430<br />
|-<br />
| Widerstand 2D LF || 5 || 12 || 69 || 94 || 128<br />
|-<br />
| Widerstand pSpice || 3 || 5 || 24 || 33 || 46<br />
|-<br />
| Widerstand - Linearisiert || 1 || 3 || 5 || 6 || 10<br />
|-<br />
| Theoretischer Widerstand || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Kondensator 3D HF || 17 || 37 || 904 || 1193 || 2011<br />
|-<br />
| Kondensator 2D LF || 9 || 18 || 222 || 303 || 426<br />
|-<br />
| Kondensator pSpice || 5 || 7 || 64 || 89 || 121<br />
|-<br />
| Kondensator - Linearisiert || 2 || 3 || 11 || 15 || 22<br />
|-<br />
| Theoretischer Kondensator || 1 || 1 || 3 || 4 || 8<br />
|-<br />
| || || || || || <br />
|-<br />
| Spule 3D HF - freq || 23 || 45 || 1819 || 2350 || 4825<br />
|-<br />
| Spule 2D LF - freq || 16 || 31 || 783 || 1040 || 1710<br />
|-<br />
| Spule pSpice || 7 || 11 || 129 || 178 || 244<br />
|-<br />
| Spule - Linearisiert || 3 || 6 || 25 || 34 || 47<br />
|-<br />
| Theoretische Spule || 1 || 3 || 5 || 6 || 10<br />
|}<br />
<br />
=== Anmerkungen ===<br />
Der 3D-Transistor ist eine Sammlung von Formeln, welche sich aus der Analyse eines räumlich ausgedehnten Gebildes im Silizium ergibt, so wie es im physikalischen Simulator zur Chipherstellung verwendet wird. Das Spice-Modell ist der angepasste C-Code des Modells aus Cadence, bzw das Equivalent. Das Modell unter "BiPol" ist das klassische Kleinsignalersatzschaltbild und - verhalten eines Transistors gemäß Möschwitzer / Lunze und Titze -Schenk. Der theoretische Transistor besteht aus einer Formel mit Teillinearisierungen (und entsprechenden Abweichungen). Für MOS-Fet und BiPolar wird dieselbe Abschätzung verwendet, wobei die Charakterisierung des MosFet aufwändiger ist und den BiPo nach oben abschätzt.<br />
<br />
Erwartungsgemäß haben umfangreichere Modelle mehr Formeln, Parameter und auch Rechentiefe. Bei Widerstand und Kondensator werden mitunter auch Temperatur, Induktivität und Streuung berücksichtigt, die sich aus realen Bauteilgehäuseformen ergeben, Bei den höheren Kondensator-Modellen sind auch die geringe Nichtlinearität des Dielektrikums und die Leckströme abgebildet.<br />
<br />
Die Spule ist besonders trickreich, wegen der Streufelder im 3D-Fall und der "seltsamen" Frequenzabhängigkeit schon im im 2D-Fall. Das Magnetmodell ist jenes nach Jiles-Atherton ("Spice"), das 2D ein modifiziertes Carpenter-Modell von mir, das komplett in VHDL erstellt wurde und in mehreren Ausbaustufen verwendet wird.<br />
<br />
Die Berechnungsformeln wurden u.a. in MATLAB umgesetzt und in lineares VHDL gewandelt. Daraus ergeben sich je nach Komplexität des Modells die anwendungsabhängige Anzahl von Rechenschritten. Der Bedarf ist als grober Anhaltspunkt zu sehen und kann stärker variieren.<br />
<br />
Bei der Betrachtung der notwendigen Rechenschritte für CPUs ist der Wert entsprechend der Möglichkeiten der Arithmetik und der Rechenanforderungen gfs ein anderer. Auch sind die Besonderheiten von PCs in Betracht zu ziehen. Daher ergeben sich bei einer virtuellen Simulation in MATLAB oder pSPice sehr viel geringere Werte, als die Tabelle suggeriert.<br />
<br />
==Bauelementebedarf==<br />
Die nachfolgende Tabelle zeigt exemplarisch den Bedarf an typischen Bauelementen für unterschiedliche ausgewählte Analogschaltungen:<br />
<br />
===Tabelle 2===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Halbleiter !! Widerstände !! Kondensatoren !! Spulen !! I,U,B,H,N<br />
|-<br />
| Ein-Transistor-Verstärker || 1 || 4 || 2 || 0 || 8<br />
|-<br />
| Gegentaktverstärker || 4 || 6 || 4 || 2 || 17<br />
|-<br />
| AB-HIFI-Verstärker || 14 || 15 || 11 || 4 || 45<br />
|-<br />
| Operationsverstärker || 18 || 32 || 6 || 0 || 57<br />
|-<br />
| HIFI-Amp mit Preamp || 27 || 42 || 26 || 8 || 104<br />
|-<br />
| Monophoner Analogsynthesizer || 155 || 235 || 130 || 36 || 557<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 1.085 || 1.450 || 850 || 240 || 3.626<br />
|}<br />
<br />
===Anmerkungen===<br />
Für die Abschätzung des grundsätzlichen Rechenbedarfs werden Beispielschaltungen herangezogen und die durchschnittliche Zahl sowie Art der Bauelemente bestimmt. Dabei werden 2 Dioden wie 1 Transistor gerechnet, ein Darlington-Transistor als 2 Transistoren. Mit I,U,B,H und N sind Spannungsquellen, Stromquellen sowie B- und H-Felder gemeint, die mit simuliert werden sollen. Eingeschlossen darin sind auch Störungen und das Rauschen auf Leitungen. Z.B. sind dies Rauschquellen beim Widerstand und induzierte Ströme, aber auch Rückwirkungen von Feldern. Laut Tabelle handelt es sich um scheinbar viele Parameter, welche aber in der realen Rechnung einen überschaubaren Rechenaufwand verursachen, da sie nur additiv wirken. Dennoch sind sie für das Ergebnis wichtig. Rauschen fördert z.B. die Konvergenz von Iterationen und hilft, Ungenauigkeiten bei den Rechnungen zu überwinden.<br />
<br />
===Schaltungskomplexität beim Beispiel Hochpass===<br />
<br />
Maßgeblich für die Menge der zu simulierenden Bauelemente ist hier bereits der Anspruch an die Genauigkeit: Je genauer der HF-Anteil einer Schaltung berechnet werden soll, desto mehr kommen Felder, Streuinduktivitäten und die Ausgestaltung des PCBs ins Spiel. Die nachfolgenden Zeichnungen zeigen beispielhaft 2 Simulationsansätze für eine Tiefpassschaltung.<br />
<br />
[[Datei:Highpass simulation simple view.png]]<br />
<br />
In der ersten kommen nur einfache theoretische Gleichungen zur Anwendung, darunter ein vollständig linearer Ansatz für den OPV. Der Ansatz führt zu einer geringen Zahl von Gleichungen und entsprechend schnellen Berechnung. In der unteren Zeichnung sind zusätzliche Bauelemente eingefügt, die helfen, das reale Verhalten besser nachzubilden. Dies betrifft neben den Komponenten (Eingangswiderstände und - kapazitäten) auch den Einfluss der konkreten Leiterbahnführung.<br />
<br />
[[Datei:Highpass simulation extended view.png]]<br />
<br />
Diese Schaltung ist zwar auch noch signifikant von der Realität entfernt, da der OP nach wie vor bis auf eine Ausgangsdämpfung linear modelliert wurde, dennoch war es möglich, das Verhalten bis etwa 100kHz für kleine Signale weitgehend exakt nachzustellen, was für Audiosimulationen taugen würde. Darüber hinaus kommt zunehmend der OP und seine limitierte Bandbreite ins Spiel. Für echte HF-Simulationen müssten weitere Effekte Berücksichtigung finden.<br />
<br />
==Rechenzeitbedarf==<br />
Die nachfolgende Tabelle zeigt den Bedarf an Rechenschritten für die gewählten Schaltungen je nach Modell:<br />
<br />
===Tabelle 3===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 82 || 146 || 563 || 1.810 || 19.020<br />
|-<br />
| Gegentaktverstärker || 206 || 460 || 1.765 || 7.615 || 73.000<br />
|-<br />
| AB-HIFI-Verstärker || 590 || 315 || 4.780 || 19.475 || 233.500<br />
|-<br />
| Operationsverstärker || 742 || 1.395 || 4.490 || 14.450 || 264.400<br />
|-<br />
| HIFI-Amp mit Preamp || 1.118 || 2.820 || 10.500 || 41.780 || 266.850<br />
|-<br />
| Monophoner Analogsynthesizer || 7.184 || 15.165 || 55.190 || 213.950 || 2.590.700<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 47.580 || 101.600 || 366.700 || 1.426.400 || 17.870.000<br />
|}<br />
<br />
===Anmerkungen===<br />
Diese Tabelle ist effektiv das Ergebnis der Verknüpfung der beiden vorherigen Tabellen unter Anrechnung der Anzahl der beteiligten Bauelemente und dem offset zur Verwaltung von z.B. Stimulationsobjekten. <br />
<br />
Erwartungsgemäß erfordern größere Schaltungen mit komplexeren Modellen überproportional immer mehr Rechenschritte, um einen einzelnen Rechnungsdurchlauf einer simulierten Zeiteinheit zu absolvieren. Bei umfangreichen Schaltungen entstehen zudem sehr viele Verbindungen, Schleifen und Einflüsse, welche den Rechenaufwand nach oben treiben. Der zuvor dargestellte Hochpass erforderte z.B. die 15-fache Zahl von Rechenschritten im Vergleich zum einfachen Modell und erreicht im Volumen bereits das Innere eines vollständigen OPs.<br />
<br />
Es ist hier sicher schon einsichtig, dass die einfachen linearisierten Modelle kein Detailverhalten wiedergeben-, sondern im Rahmen von Simulationen nur das Prinzip der Funktion darstellen können. Alle Feinheiten, insbesondere die Abweichungen der realen Bauelemente vom Ideal, fehlen hier.<br />
<br />
==Maximale Iterationsfrequenz==<br />
Die nachfolgende Tabelle zeigt die Anzahl der möglichen Iterationen je Sekunde bei Abarbeitung der vollständigen analytischen Gleichungen mit dem angenommen 200MHz FPGA:<br />
<br />
===Tabelle 4===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 2.500.000|| 1.400.000 || 355.000 || 110.000 || 10.500<br />
|-<br />
| Gegentaktverstärker || 970.000 || 434.000|| 113.000 || 26.200 || 2.730<br />
|-<br />
| AB-HIFI-Verstärker || 338.000|| 152.000 || 41.800 || 10.270 || 857<br />
|-<br />
| Operationsverstärker || 269.000 || 143.000 || 44.500 || 13.840 || 756<br />
|-<br />
| HIFI-Amp mit Preamp || 152.000 || 70.900 || 19.040 || 4.786 || 428<br />
|-<br />
| Monophoner Analogsynthesizer || 27.840 || 13.200 || 3.624 || 934 || 77<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 4.200 || 1.968 || 545 || 140 || 11<br />
|}<br />
<br />
===Anmerkungen===<br />
Unter der Annahme einer optimalen Ausnutzung des Chips und der typischen Auslastung der Fläche wie oben angesetzt, ergibt sich bei der Taktfrequenz eine maximale Anzahl von Durchläufen einer Iterations-Schleife, bis ein Ergebnis vorliegt. Diese entspricht der invertierten Latenz. Die Abschätzung zeigt, dass - die betreffende Hardware vorausgesetzt - es grundsätzlich möglich wäre, auch ein sehr kompliziertes Analogmodell mit immerhin 10Hz punktweise zu simulieren, was für Untersuchungen der Funktion im Vorfeld des Designs reichen würde. <br />
<br />
Die hier inbegriffene Streuung beträgt etwa 50% ... 100% je nach individueller Konvergenz und Ausbau des FPGAs sowie Qualität der Umsetzung, d.h. ein Maximalmodell eines Analogsynthesizers oder einer Filterbank, wie unten rechts angenommen wurde, kann statt 100ms zwischen 50ms und 200ms pendeln. Die Größenordnung bleibt aber in diesem Bereich.<br />
<br />
<br />
==Oversampling==<br />
Die nachfolgende Tabelle zeigt den etwaigen Bedarf an Oversampling und Anzahl der Iterationen, bis eine ausreichende Konvergenz und Genauigkeit bei numerischer Berechnung erzielt wird. Die Werte ergeben sich aus Erfahrung sowie aus der Grundbetrachtung der notwendigen Repräsentation von Oberwellen eines Signals bei Faltungsoperationen. Vor allem schlägt sich hier ein zunehmend schlechteres Konvergenzverhalten bei dem Finden der Lösungen für umfangreiche Schaltungen mit Energiespeichern wie Drosseln und Kondensatoren nieder.<br />
<br />
===Tabelle 5===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 4 || 6 || 8 || 32 || 128<br />
|-<br />
| Gegentaktverstärker || 6 || 9 || 12 || 48 || 192<br />
|-<br />
| AB-HIFI-Verstärker || 8 || 12 || 16 || 64 || 256<br />
|-<br />
| Operationsverstärker || 12 || 18 || 24 || 96 || 384<br />
|-<br />
| HIFI-Amp mit Preamp || 16 || 24 || 32 || 128 || 512<br />
|-<br />
| Monophoner Analogsynthesizer || 24 || 36 || 48 || 192 || 768<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 32 || 48 || 64 || 256 || 1024<br />
|}<br />
<br />
===Anmerkungen===<br />
Je nach Anwendung ist ein oversampling der Rechnung, eine Überhöhung der Taktfrequenz für numerische Rechnungen in Echtzeit und auch die gesteigerte Anzahl der echten Iterationen zu berücksichtigen. Dabei erfordern komplexere und umfangreichere Anwendungen mehr Iterationen für die gleiche letztliche Genauigkeit. Zudem werden die Anforderungen an umfangreiche Schaltungen auch im Hinblick auf die Genauigkeit steigen. Daraus ergibt sich gewöhnlich ein quadratisches Verhalten des Bedarfs mit wachsender Größe der Schaltung und des Modells. Gleichzeitig verläuft die Genauigkeit mit der Potenz der Anzahl der Iterationen, wächst also stärker als linear. Damit ergibt sich ein mittleres Verhalten aus linearer Steigung und Potenzierung, was die Zahl der nötigen Iterationen / Takte angeht.<br />
<br />
Die Tabelle zeigt Erfahrungs- und Schätzwerte, die entsprechend variieren können. Der beispielhaft angeführte Hochpass musste seinerzeit schon mit fast der 10fachen Abtastrate / Feinheit der Simulationsschritte simuliert werden, um realitätsnahe Ergebnisse zu erhalten und das Verhalten im kHz-Bereich zufriedenstellend abzubilden. Insgesamt erforderte sie eine fast 100-fache Rechenzeit gegenüber dem einfachen Modell.<br />
<br />
==Resultierende Abtastfrequenz==<br />
Die nachfolgende Tabelle zeigt die aus den Vorbetrachtungen resultierende Abtastfrequenz für die vollständigen Iterationen:<br />
<br />
===Tabelle 6===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 610.000 || 228.000 || 44.400 || 3.459 || 82<br />
|-<br />
| Gegentaktverstärker || 161.000 || 48.300 || 9.400 || 547 || 14<br />
|-<br />
| AB-HIFI-Verstärker || 42.300 || 12.600 || 2.600 || 160 || 3<br />
|-<br />
| Operationsverstärker || 22.400 || 7.900 || 1.850 || 143 || 2<br />
|-<br />
| HIFI-Amp mit Preamp || 9.400 || 2.900 || 595 || 37 || 0,8<br />
|-<br />
| Monophoner Analogsynthesizer || 1.160 || 367 || 75 || 5 || 0,1<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 131 || 41 || 9 || 0,5 || 0,01<br />
|}<br />
<br />
===Anmerkungen===<br />
Als Folge der nötigen Iterationen ergibt sich hier die Zahl der echten Samples, die berechnet werden können und damit ein Hinweis auf die Echtzeitfähig der Anwendung. Um die jeweils erforderliche Genauigkeit und Frequenz zu ermitteln, muss die höchste auftretende Frequenz beachtet werden, welche für den Benutzer relevant ist. Diese ist maßgeblich für die Reglung / Authentizität der Berechnung. Für Temperaturen wären z.B. Raten von 10Hz und darunter ausreichend. Für Audiosignale wären 2x15kHz zu fordern. Mit Einschränkungen sind auch 5kHz ... 10kHz noch zulässig, wenn größere Abweichungen akzeptiert werden können. Üblicherweise nehmen die Fehler in den Höhen mit jeder Oktave um 3...6db zu, d.h. hat man z.B. bei einer angegebenen Frequenz eine definierte Präzision von 100dB THD Signalgüte erreicht und befindet sich genügend weit unterhalb der Eckfrequenz der Abtastrate, so kann man bei der 10-fachen Frequenz immerhin noch 80dB Güte erwarten, wenn man weniger überabtastet oder Iterationen früher abbricht.<br />
<br />
An dieser Stelle sieht man aber bereits, dass realistischerweise nur sehr kleine und einfache Schaltungen in Echtzeit sinnvoll simuliert und überwacht werden können.<br />
<br />
==Benötigte Anzahl der FPGAs==<br />
Die nachfolgende Tabelle zeigt die benötigte Anzahl FPGAs und eine mögliche Parallelisierung:<br />
<br />
===Tabelle 7===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 0,1 || 0,1 || 0,3 || 1,0 || 11<br />
|-<br />
| Gegentaktverstärker || 0,1 || 0,3 || 1,0 || 4,3 || 41<br />
|-<br />
| AB-HIFI-Verstärker || 0,4 || 0,8 || 2,7 || 11 || 131<br />
|-<br />
| Operationsverstärker || 0,4 || 0,8 || 2,6 || 8,2 || 149<br />
|-<br />
| HIFI-Amp mit Preamp || 0,8 || 1,6 || 5,9 || 24 || 263<br />
|-<br />
| Monophoner Analogsynthesizer || 4,1 || 8,6 || 31 || 120 || 1.458<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 27 || 57 || 206 || 803 || 10.050<br />
|}<br />
<br />
===Anmerkungen===<br />
Aus den Rechenanforderungen ergibt sich eine theoretische Anzahl von FPGAs, die zeitlich belegt werden. Bei der Beurteilung, ob ein FPGA auch tatsächlich reicht, muss zudem berücksichtigt werden, dass die Resourcen für einen sequenziellen Betrieb inklusive Verwaltung insgesamt reichen. In einigen Fällen der Teilauslastung ist dabei eine Teilparallelisierung effektiver und machbar. Diese Werte sind grün markiert. Bei Werten >1 reicht 1 FPGA aufgrund der gesamten Anforderungen nicht mehr aus, da die Rechnung von der Fläche her "zu lang" wird. Zwar gibt es einen schmalen Bereich, wo durch künstliche Sequenzialisierung (resource sharing) Resourcen gespart werden könnten, aber dies wird hier nicht betrachtet, da dann die Option des pipelinings entfiele.<br />
<br />
<br />
==Maximale Performance==<br />
Die nachfolgende Tabelle zeigt die maximale Anzahl der parallelen Berechnungen bei totalem pipelining in angenommenden 16 FPGAs bei günstigster Verschaltung und Nutzung:<br />
<br />
===Tabelle 8===<br />
{| class="wikitable"<br />
|-<br />
! Anwendung !! Theoretisch !! Linear !! pSpice !! 2D-Modell !! 3D-Modell<br />
|-<br />
| Ein-Transistor-Verstärker || 215 || 145 || 46 || 15 || 1,5<br />
|-<br />
| Gegentaktverstärker || 111 || 56 || 16 || 4 || 0,4<br />
|-<br />
| AB-HIFI-Verstärker || 44 || 21 || 6 || 1,5 || 0,1<br />
|-<br />
| Operationsverstärker || 36 || 20 || 6 || 2,0 || 0,1<br />
|-<br />
| HIFI-Amp mit Preamp || 21 || 10 || 3 || 0,7 || 0,1<br />
|-<br />
| Monophoner Analogsynthesizer || 4 || 2 || 0,5 || 0,1 || 0,01<br />
|-<br />
| 8-fach polyphoner Synthesizer mit Filtern || 0,6 || 0,3 || 0,1 || 0,02 || 0,001<br />
|}<br />
<br />
===Anmerkungen===<br />
Bei einem CUBE-System aus 16 FPGAs ergibt sich die Möglichkeit, die Rechnung als solche aufgrund der benötigten Hardware<br />
sehr wohl zu implementieren und die Iteration zu schließen, gleichzeitig eine Anzahl von Situationen simultan zu berechnen und so den FPGA voll zu nutzen. Das ist insbesondere bei Monte-Carlo-Analysen vorteilhaft. Es ergibt sich dann eine rechnerisch maximale Anzahl gleichzeitiger Rechenkanäle. Eine Anzahl größer 1 gibt an, dass 16 FPGAs in Umfang und Tempo für die Anforderung ausreichen. Konstellationen <1 könnten zwar teilweise vom Platz her mehr, als 100% berechnen, erlauben es aber nicht, den Loop in Echtzeit schließen. Abhilfe schafft dann nur noch eine schnellere Technologie mit einer höheren Taktfrequenz.<br />
<br />
==Fazit==<br />
Wie man erwarten konnte, ist ein einzelnes Bauelement bei entsprechendem Aufwand leicht zu berechnen, wenn man nicht gerade ins 3D geht und alle erdenklichen parasitären Effekte mitberücksichtigen will. Aber bereits, wenn man eine kleinere Schaltung zusammensetzt, entstehen durch die Leitungsführung Effekte, die zu Verfälschungen der reinen Modelle führen. Je höher die Frequenz ist, die betrachtet wird, desto mehr Effekte müssen simuliert werden.<br />
<br />
Nach meiner Einschätzung reicht für Audio die Modellierung auf Spice-Niveau gerade so aus, wenn man Leitungen und wichtige Störungen mit simuliert und diese als Einflüsse mit zusätzlichen Spannungen darstellt. Ansonsten laufen die Ergebnisse der Gleichungen rasch weg. Wichtig sind die Verluste bei Spulen und Kondensatoren, die oft nur unzureichend abgebildet werden.<br />
<br />
Trotzdem ist eine einfache Transistorschaltung noch gut zu modellieren und zu überwachen. Das geht auch in Echtzeit und ist wie die Wettervorhersage für einen gewissen Zeitraum stimmig. Eine Echtzeitüberwachung muss dann durch Messungen unterstützt und immer wieder "eingefangen" werden. Eine Simulation läuft dann logischerweise weg und ist nur dem Prinzip nach exakt d.h. ein Schwingkreis, den man ausrechnet, kommt gfs zu einer leicht abweichenden Frequenz, schwingt aber weitgehend authentisch. <br />
<br />
Sehr schwierig sind Spulen. Die Speicherwirkung des Feldes insbesondere die Streuung und Nichtlinearität bei magnetischen Werkstoffen ist eine Wissenschaft für sich. Ein weitgehend gut funktionierendes Ersatzmodell in VHDL, das ich entwickelt habe, füllte in der Realität schon einen halben FPGA. Mit den reduzierten Modellen darf man nicht erwarten, dass man Sättigungen und Oberwellen so hinbekommt, wie sie real auftreten. Wer also in seinem Analogschaltkreis eine Drossel mit Ferritkern hat, ist im Grunde schon "verloren".<br />
<br />
Eine simple Drossel ist hingegen in etwa so genau zu simulieren wie ein Kondensator, wenn man die parasitären Effekte mit drin hat und kleine Ströme nutzt und nicht viel von Außen einstreut. Ansonsten liegt man im Bereich der Komplexität von Transistoren.<br />
<br />
[[Kategorie:FPGA und Co]]<br />
[[Kategorie:Grundlagen]]<br />
[[Kategorie:C]]<br />
[[Kategorie:VHDL]]<br />
[[Kategorie:AVR-Arithmetik]]<br />
[[Kategorie:Algorithmen und Arithmetik|A]]<br />
[[Kategorie:Signalverarbeitung|P]]<br />
[[Kategorie:DSP]]<br />
[[Kategorie:Audio]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Motoransteuerung_mit_PWM&diff=106455Motoransteuerung mit PWM2023-11-27T11:34:47Z<p>Engineer: /* Ideale Frequenz */</p>
<hr />
<div>==Allgemeines==<br />
<br />
Bei der Dimensionierung der Strombelastbarkeit der Bauteile muss man vor allem 2 Werte betrachten:<br />
* Stromaufnahme des Motors im normalen Betrieb (also mit der Last)<br />
* Stromaufnahme bei blockiertem Motor, bzw. Anlaufstrom. Hier wird der Strom nur durch den ohmschen Widerstand im Stromkreis begrenzt, er kann also je nach Motor schnell den 2-3 stelligen Amperebereich erreichen.<br />
<br />
Die übliche Dimensionierung richtet sich vor allem nach dem ersten Wert und plant entsprechende Reserven ein (für ein paar Sekunden Faktor 2-5 des Stromes), da der zweite Wert in der Praxis aus Kostengründen meist nur schwer realisierbar und unnötig ist. Daher umgeht man das Problem entweder über eine schnelle Strombegrenzung oder über einen Sanftanlauf indem man die [[PWM]] langsam hoch fährt. Dadurch wird der maximale Strom auf einen deutlich niedrigeren Wert begrenzt, so dass die Bauteile schwächer und kostengünstiger ausfallen können. <br />
<br />
Die Spannung am Motor und somit näherungsweise die Leerlaufdrehzahl ist proportional zu dem Tastverhältnis:<br />
<br />
:<math>\text{Motorspannung} = \text{Betriebsspannung} \cdot \mathrm{Tastverh\ddot{a}ltnis}</math><br />
<br />
==Schaltungsvarianten==<br />
<br />
===Mosfet mit Freilaufdiode, 1-Quadrantensteller===<br />
<br />
[[Datei:Motor_PWM_1.gif|thumb|300px|1-Quadrantensteller]]<br />
Die einfachste Schaltung besteht nur aus Transistor T1, dem Motor, der Freilaufdiode D1, dem Kondensator C1, sowie der eigentlichen [[PWM]]-Erzeugung und dem [[MOSFET-Übersicht#Mosfet-Treiber | Mosfettreiber]].<br />
<br />
In der Einschaltphase von T1 liegt am Motor die gesamte Betriebsspannung an. Die Differenz zwischen der vom sich drehenden Motor erzeugten Generatorspannung und der Betriebsspannung fällt am Wicklungswiderstand sowie der Wicklungsinduktivität ab. Man hat es also mit einer RL Reihenschaltung zu tun. Da der Wicklungswiderstand recht klein ist, steigt der Strom näherungsweise linear an, bis T1 abschaltet. Dann übernimmt D1 den Stromfluss und schließt den Stromkreis solange, bis T1 den Strom wieder übernimmt (oder der Strom abgeklungen ist = lückender Betrieb). Obwohl keine Energie mehr von außen zugeführt wird, wird der Motor weiterhin durch die in der Wicklung gespeicherten Energie versorgt. Der Strom fällt nun wieder linear ab, bis T1 wieder durchsteuert und wieder Energie zuführt.<br />
<br />
Der Strom durch die Diode D1 ist von der Amplitude her genauso groß wie der Strom durch T1, je nach Tastverhältnis ist der Effektivwert aber kleiner als der durch T1 (bei über 50% Tastverhältnis), gleich (bei 50% Tastverhältnis) oder sogar größer (bei einem Tastverhältnis kleiner 50%). Daher muss die Diode genauso stark dimensioniert werden wie der Transistor (möglichst eine schnelle Schaltdiode (z.B. Schottky) verwenden, keine langsamen Gleichrichterdioden wie 1N400x). Der Kondensator C1 ist notwendig, um den durch die PWM gepulsten Strom zu glätten, da aufgrund der steilen Flanken ansonsten in den Zuleitungen ein Spannungsabfall bzw. Spannungsspitzen auftreten würden (am besten 2 oder mehrere Kondensatoren unterschiedlicher Kapazität und Bauart verwenden, meistens ein Folienkondensator mit einigen Mikrofarad parallel zu einem Aluminiumelektrolytkondensator).<br />
<br />
Der Transistor, die Diode und der Kondensator sollen möglichst nahe zusammen plaziert werden (kürzeste Verbindungen). Wenn die Diode am Motor angebracht wird, strahlt die Zuleitung massiv Störungen ab. Die Leitungen sollten am besten verdrillt werden.<br />
<br />
===Synchrongleichrichtung, 2-Quadrantensteller===<br />
<br />
[[Datei:Motor_PWM_2.gif|thumb|300px|2-Quadrantensteller]]<br />
Um die Verluste in der Freilaufdiode zu verringern kann man diese durch einen zweiten Mosfet ersetzen, der immer dann eingeschaltet wird, wenn der andere abgeschaltet ist.<br />
<br />
Da dieser Mosfet im Gegensatz zu einer Diode in beide Richtungen Strom leitet, ist es damit möglich den Motor kurzzuschließen und so den Motor zu bremsen. Allgemein kann man sagen: Ist die durch die PWM erzeugte mittlere Spannung größer als die Generatorspannung des Motors, wird dieser beschleunigt. Ist die Spannung kleiner, wird der Motor abgebremst. Durch T2 wird der Motor dabei kurzgeschlossen, so dass sich durch die Generatorspannung zunächst der Strom in der Motorwicklung ab- und dann in umgekehrter Richtung wieder aufbaut. Beim Abschalten von T2 und Einschalten von T1 fließt dieser Strom über T1 in C1 und somit die Spannungsquelle zurück. Die Energie wird beim Bremsen also nicht vernichtet, sondern wieder in elektrische Energie zurückverwandelt. Dies sollte man bedenken wenn man eine große Masse abbremst, denn die Spannungsquelle muss die Energie aufnehmen können. Sollte die Spannungsquelle z.&nbsp;B. aus einem Transformator mit Gleichrichter bestehen, kann dieser die Energie nicht aufnehmen sondern nur C1, was dazu führt, dass die Betriebsspannung ansteigt bis eventuell einer der Transistoren zerstört wird. Um dies zu verhindern ist eine Überspannungsbegrenzung in Form eines Bremswiderstands vorzusehen (Bremschopper). In einfachen Fällen reicht auch eine Leistung-Z-Diode oder ein passende Nachbildung aus Z-Diode und Leistungstransistor. Besteht die Spannungsquelle z.&nbsp;B. aus einem Akku dann nimmt dieser die Energie auf und wird beim Bremsen wieder etwas geladen.<br />
Dies funktioniert allerdings nur, wenn das Tastverhältnis nicht 0% beträgt, also T2 und T1 abwechselnd schalten, so dass nicht die gesamte Energie in der Motorwicklung sowie T2 verheizt wird. Man sollte es daher vermeiden das Tastverhältnis schnell in eine der beiden Richtungen zu ändern, da dies zu einem hohen Strom führt.<br />
<br />
Die Ansteuerschaltung muss weiterhin verhindern, dass T1 und T2 gleichzeitig leitend werden können, denn dies würde zu einem Kurzschluss der Betriebsspannung führen. Ein fertig aufgebauter Mosfet-Treiber verhindert dies.<br />
<br />
===H-Brücke, 4-Quadrantensteller===<br />
<br />
[[Datei:Motor_PWM_3.gif|thumb|300px|4-Quadrantensteller]]<br />
Die H-Brücke, bzw. der 4-Quadrantensteller ist eine Erweiterung des 2-Quadrantenstellers durch eine zweite Halbbrücke. Diese ermöglicht neben dem Beschleunigen und Bremsen des Motors auch eine Umkehr der Drehrichtung. Dafür gibt es mehrere Ansteuerverfahren<br />
#Das effizienteste ist, eine Hälfte wie beim 2-Quadrantensteller zu betreiben und mit der anderen den zweiten Motoranschluss an die Betriebsspannung zu legen. Für die andere Drehrichtung wechselt man einfach die Hälften, legt also den anderen Anschluss an die Betriebsspannung und verwendet die andere Hälfte als 2-Quadrantensteller.<br />
#Das andere Verfahren steuert abwechselnd T1 und T4 oder T2 und T3 durch, legt also immer eine Spannung an den Motor. Ist das Tastverhältnis 50% fließt im Mittel ein Strom von 0A, da der Motor für jeweils die Hälfte der Zeit eine positive und eine negative Spannung erhält, der Motor steht also. Je nachdem ob man das Tastverhältnis darüber oder darunter wählt, legt man die Drehrichtung fest. Dieses Verfahren ist Ansteuertechnisch einfacher, erzeugt aber auch im Stillstand Schaltverluste in den Transistoren und Verluste im Motor.<br />
<br />
=== Zusammenfassung der Eigenschaften ===<br />
<br />
1 Quadrantensteller<br />
* Drehzahlvorgabe in eine Richtung<br />
<br />
2 Quadrantensteller<br />
* Drehzahlvorgabe in eine Richtung<br />
* Aktives Bremsen möglich<br />
* Energierückspeisung vom Motor in die Stromversorgung möglich (engl. recuperation)<br />
* etwas geringere Verluste als 1 Quadrantensteller<br />
<br />
4 Quadrantensteller<br />
* Drehzahlvorgabe in zwei Richtungen<br />
* Aktives Bremsen in zwei Richtungen möglich<br />
* Energierückspeisung vom Motor in die Stromversorgung möglich (engl. recuperation)<br />
* etwa doppelt so große Verluste wie 2 Quadrantensteller<br />
<br />
==Beispielschaltungen==<br />
<br />
===1-Quadrantensteller mit diskretem Mosfettreiber===<br />
<br />
[[Datei:Motor_PWM1_real.gif|thumb|300px|Einfacher 1-Quadrantensteller]]<br />
Diese Schaltung eignet sich für Motoren bis etwa 35V und 10A Dauerstrom.<br />
Q1 und Q2 zusammen mit deren Beschaltung dienen als [[Pegelwandler]] von 3,3 oder 5V Digitalsignalen auf 12V für das Mosfet Gate. Die Schaltung arbeitet dabei invertierend, der Mosfet schaltet also bei einem Low am Eingang ein.<br />
Sperrt Q1, wird Q2 über R1 durchgesteuert und liefert etwa 11-11,5V ans Gate des Mosfets. R2 begrenzt dabei den Strom.<br />
Das Abschalten des Mosfets geschieht über den Pfad Q1 und D1. Gleichzeitig wird Q2 die Basisspannung weggenommen, so dass dieser sperrt.<br />
D2 zwischen Basis und Kollektor von Q1 verhindert, dass dieser in die Sättigung kommt, so dass dieser nahezu verzögerungsfrei sperrt, sobald der Eingang auf Low wechselt. Ab ein paar Ampere benötigt die Freilaufdiode D3 einen kleinen [[Kühlkörper]], ebenso Q3. Sollte die Betriebsspannung V+ des Motors bei etwa 10-16V liegen, dann kann diese Spannung auch für die Mosfetansteuerung verwendet werden. Ansonsten sollte dafür eine getrennte Spannung mit etwa 12-15V verwendet werden.<br />
<br />
===1-Quadrantensteller mit diskretem Highside-Mosfettreiber===<br />
<br />
[[Datei:Motor_PWM1b_real.gif|thumb|300px|Einfacher 1-Quadrantensteller mit P-Kanal Mosfet]]<br />
<br />
Diese Schaltung eignet sich für Motoren mit etwa 15-40V Betriebsspannung und mit bis zu 10A Dauerstrom. Schaltungen mit P-Kanal Mosfets sollte man wenn möglich vermeiden, da N-Kanal Mosfets prinzipbedingt um Faktor 3 bessere Werte aufweisen als P-Kanal Mosfets. Allerdings wird manchmal ein auf Masse bezogener Ausgang gefordert, dann ist diese Schaltung hier die richtige. Das Problem bei der Highsideansteuerung ist, dass man die Gate-Sourcespannung irgendwie auf max. 20V begrenzen muss, was hier durch eine zusätzliche Hilfsspannung von 12V wie bei der vorigen Schaltung, nicht so einfach geht. Daher wird hier ein anderer Weg eingeschlagen. Q1 und R2 bilden eine [[Konstantstromquelle]]. Dadurch, dass an der Basis eine feste Logikspannung ansteht, steuert Q1 so stark durch, bis er sich durch den Spannungsabfall an R2 selbst die Basisspannung reduziert. Der fließende Strom beträgt dabei (Logikpegel am Eingang - 0,6V Basis-Emitterspannung)/R2. Ein guter Wert für den Strom sind etwa 10-15mA. Bei der Dimensionierung sollte man auch die Verlustleistung beachten: 40V * 15mA = 0,6W. Dies ist für einen Transistor im TO92 Gehäuse deutlich zu viel. Dadurch, dass Q1 im Linearbetrieb arbeitet, kommt er nicht in die Sättigung, und es kann auf die Diode wie in der vorherigen Schaltung verzichtet werden. Ebenso ist ein Basiswiderstand unnötig bzw. sogar hier fehl am Platz. Da nun bekannt ist, dass im durchgesteuerten Zustand von Q1 bei 5V Logikspannung (5V-0,6V)/330Ω= 13,3mA fließen, kann man damit den Spannungsabfall an R1 berechnen, bzw. aus der gewünschten Spannung R1:<br />
U(R1)=13,3mA*1kOhm=13,3V. Im eingeschalteten Zustand ist die Spannung am Kollektor von Q1 also um 13,3V negativer als V+ und das unabhängig von der Betriebsspannung! Da diese Spannung durch die als Emitterfolger geschalteten Transistor Q2 und Q3 gepuffert auch an das Gate des Mosfets gelegt werden, bekommt dieser also rund 13V Gatespannung im eingeschalteten Zustand. Dies passt gut, denn für die meisten Mosfets sollte man einen Wert zwischen 10 und 15V verwenden. Durch den Spannungsteiler aus R1 und R2 ergibt sich allerdings auch eine untere Grenze der Betriebsspannung, damit die Schaltung sauber funktioniert: Um die 13,3V über R1 zu erhalten, bzw. die 4,4V über R2 sind mindestens 17,7V für V+ notwendig.<br />
<br />
===2-Quadrantensteller mit Halbbrücken Mosfettreiber===<br />
<br />
[[Datei:Motor_PWM2_real.gif|thumb|300px|Einfacher 2-Quadrantensteller]]<br />
<br />
Diese Schaltung eignet sich für Motoren bis etwa 35V und 20A Dauerstrom.<br />
Um den Aufwand zu minimieren wird für die Halbbrücke ein fertiger Halbbrückentreiber IR2184 verwendet. Dieser besitzt eine integrierte Totzeit (engl. dead time) von 500ns zwischen dem Umschalten der Mosfets, so dass ein gleichzeitiges Einschalten beider Mosfets ausgeschlossen ist. Da der Mosfet gegen V+ angeschlossen ist, arbeitet auch diese Schaltung invertierend. Der Grund, warum der Motor nicht gegenüber GND angeschlossen ist, ist folgender:<br />
Für die Ansteuerung des Highside Mosfets Q2 ist eine Spannung von etwa 10V mehr als die Betriebsspannung V+ notwendig. Diese wird über die Bootstrapschaltung aus C2 und D1 erzeugt. Ist Q1 durchgesteuert, läd sich C2 über D1 auf. Schaltet anschließend Q1 ab und Q2 ein, wird dessen Ansteuerspannung aus C2 entnommen. Da Q2 nun VS mit V+ verbindet, steigt auch das Potential an C2 an. An dem VB Pin stehen nun etwa V+ + 12V-0,7V (12V Betriebsspannung-Flusspannung von D1) an. Aufgrund von Leckströmen, entläd sich C2 allerdings innerhalb einiger Millisekunden. Daher ist die maximale Einschaltdauer von Q2 begrenzt. 100% Einschaltdauer wären daher nicht möglich. Um dieses Problem zu umgehen ist der Motor gegen V+ geschaltet, so dass für 100% Einschaltdauer Q1 eingeschaltet werden muss, was kein Problem ist, denn dessen Treiber wird direkt auf den 12V versorgt. Ist Q1 dagegen dauerhaft aus, Q2 also an, bremst der Motor, bzw. er steht, so dass kein Strom durch die Mosfets fließt. Daher ist es auch nicht weiter schlimm, wenn Q2 nach einer kurzen Zeit wieder abschaltet. Das einzige was nicht möglich ist, ist ein dauerhaftes Bremsen des Motors mittels Q2, aber dies wird in der Praxis auch nur in den seltensten Fällen benötigt. Über den IN Pin, wird das invertierte PWM Signal mit Logikpegeln eingespeist. Über den SD\ Pin, lassen sich beide Mosfets gemeinsam abschalten. Damit ist ein ungebremstes Auslaufen lassen des Motors möglich (Freilauf). Ab etwa 5Ampere benötigen die Mosfets einen kleinen [[Kühlkörper]].<br />
<br />
==Wahl der PWM-Frequenz==<br />
<br />
Bei der Wahl der PWM Frequenz muss man mehrere Faktoren berücksichtigen und einen Kompromiss eingehen:<br />
* Die Motorinduktivität L glättet den Strom, der Wicklungswiderstand R führt zu einem Abfallen des Stromes, daraus ergibt sich die elektrische Zeitkonstante des Motors <math>t=\frac{L}{R}</math>. Bei vielen Motoren liegt diese um 1ms. Bei hochwertigen Motoren sollte diese Angabe im Datenblatt zu finden sein. Um den Stromripple gering, also das Drehmoment konstant zu halten, sollte die Periodendauer der PWM diese Zeit nicht überschreiten. Vor allem im 2 bzw. 4-Quadratentebetrieb ist dies wichtig, denn dort kann der Strom auch seine Richtung ändern, was zu einem Abbremsen, somit zu einem deutlichen Ruckeln und zu Vibrationen des Motors und zu unnötigen Verlusten führt. <br />
* Frequenzen zwischen 100Hz und 10kHz erzeugen hörbare Pfeifgeräusche im Motor<br />
* Mit zunehmender Frequenz steigen die Schaltverluste in den Transistoren sowie die Verluste in der Ankerwicklung sowie in deren Kern.<br />
* Einfache Gleichstrommotoren (Bürstenmotoren) mit eingebauten Entstörkondensatoren können nur mit relativ niedrigen PWM-Frequenzen von ca. 30-200 Hz betrieben werden. Bei höheren Frequenzen kommt es zu starken Schaltverlusten durch das Umladen der Entstörkondensatoren, wie man in diesem [https://www.mikrocontroller.net/topic/393784#new Beitrag] sehen kann.<br />
<br />
=== Ideale Frequenz ===<br />
Die aus elektrischer Sicht ideale PWM Frequenz liegt für kleine Motoren daher meist bei 1-2kHz. Allerdings ist dies genau der Bereich, in dem das Gehör am empfindlichsten ist. Wenn das Pfeifen des Motors nicht stört, ist dies also der ideale Bereich.<br />
Da die untere Frequenz durch die elektrische Zeitkonstante des Motors begrenzt ist, kann man nur nach oben ausweichen. Ein Kompromiss ist daher der Bereich 5-15kHz in dem das Gehör deutlich unempfindlicher ist und sich die Verluste dennoch in Grenzen halten. Verwendet man die einfache Schaltung mit der Freilaufdiode und legt keinen Wert auf einen runden Lauf, bzw. hat eine hohe Masse am Motor, so dass dieser träge ist, dann kann man als Alternative zu den >5kHz die PWM Frequenz auch bis auf 200Hz reduzieren um das Geräusch erträglicher zu machen. Allerdings reduziert sich dann der Wirkungsgrad aufgrund des hohen Stromripples. Bei Hochstromanwendungen sind sonders die Umschaltverluste ein zusätzliches Problem.<br />
<br />
Sehr kleine Stellmotoren für z.B. Quetschventile werden mit Schaltfrequenzen jenseits der 100kHz angesteuert.<br />
<br />
== Siehe auch ==<br />
<br />
*[[PWM]]<br />
*[[Treiber]]<br />
*[[MOSFET-Übersicht#MOSFET-Treiber | Mosfet-Treiber]]<br />
*[[H-Brücken Übersicht]]<br />
*[https://www.ramser-elektro.at/pwm-regelung-von-ventilatoren-oder-motoren/ Projekt: PWM Regelung von Ventilatoren oder Motoren]<br />
*[http://www.mikrocontroller.net/topic/103116#900247 Forumsbeitrag]: Highside Mosfetansteuerung mit diskretem Treiber<br />
* [http://www.mikrocontroller.net/topic/191616#1870643 Forumsbeitrag]: Zur Erklärung der PWM Steuerung, Bremsen und Unterschied zum Relais<br />
* [http://www.mikrocontroller.net/topic/280480#2960070 Forumsbeitrag]: Clevere MOSFET-Treiber mit kleinsten Trafos<br />
*[https://www.mikrocontroller.net/topic/370476#4182456 Forumsbeitrag]: PWM Regler mit Strombegrenzer<br />
*[https://www.mikrocontroller.net/topic/397337?goto=4590784#4575721 Forumsbeitrag]: H-Bridge 50Hz Sinus - LC Filter dimensionieren<br />
*[https://www.mikrocontroller.net/topic/550961?goto=7353503#7353503 Forumsbeitrag]: Frage zu H-Brücken Treiber, PWM und Modell eines DC-Motors<br />
*[https://www.mikrocontroller.net/topic/546882#7279816 Forumsbeitrag]: 12V Motor mir automatischer Umschaltung z.B. mit Lichtschranke<br />
<br />
==Links==<br />
<br />
*[http://de.wikipedia.org/wiki/Zweiquadrantensteller Zweiquadrantensteller] bei Wikipedia<br />
*[http://de.wikipedia.org/wiki/Vierquadrantensteller Vierquadrantensteller] bei Wikipedia<br />
*[http://homepages.which.net/~paul.hills/SpeedControl/SpeedControllersBody.html Grundlagen zum Thema Motoransteuerung (englisch)]<br />
*[https://de.wikipedia.org/wiki/Nutzbremse Nutzbremse] bei Wikipedia<br />
* [https://www.amazon.de/Electric-Motors-Drives-Fundamentals-Applications/dp/0080983324/ref=sr_1_1?ie=UTF8&qid=1507632012&sr=8-1&keywords=motors+drives Electric Motors and Drives: Fundamentals, Types and Applications] (Taschenbuch, Englisch, ISBN-10 0080983324)<br />
<br />
[[Kategorie:Leistungselektronik]]<br />
[[Kategorie:Motoren]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Spannungsteiler&diff=106454Spannungsteiler2023-11-27T11:21:05Z<p>Engineer: /* Siehe auch */</p>
<hr />
<div>== Einleitung ==<br />
<br />
Oft ist es notwendig, die Ausgangsspannung eines Sensors an den Eingangsspannungsbereich eines [[AD-Wandler]]s anzupassen. Ist die Ausgangsspannung größer als die Eingangsspannung, ist dies sehr einfach und kostengünstig mit einem Spannungsteiler machbar.<br />
<br />
== Einfacher Spannungsteiler ==<br />
<br />
Die wohl einfachste Anwendung des Ohmschen Gesetzes ist der einfache Spannungsteiler. Dabei wird eine große Eingangsspannung linear in eine kleine Ausgangsspannung umgesetzt. Der mathematische Zusammenhang ist dabei<br />
<br />
:<math>U_\text{AUS} = U_\text{EIN} \cdot \frac{R_2}{R_1+R_2}</math>.<br />
<br />
[[Datei:st_einfach.png]]<br />
<br />
Die Berechnung von <math>R_1</math> und <math>R_2</math> ist einfach. Es wird ein Wert für <math>R_1</math> oder <math>R_2</math> gewählt und die Formel nach <math>R_1</math> bzw. <math>R_2</math> umgestellt. Das soll hier beispielhaft geschehen.<br />
<br />
:<math>R_2 = R_1 \cdot \frac{U_\text{AUS}}{U_\text{EIN}-U_\text{AUS}}</math><br />
<br />
Für die Herleitung der Formel siehe den [https://de.wikipedia.org/wiki/Spannungsteiler Wikipedia-Artikel zum Spannungsteiler].<br />
<br />
Ein Windows-Programm, das den Spannungsteiler aus Widerständen der E12- oder E24-Reihe mit der niedrigsten Toleranz automatisch berechnet, findet sich unter [http://www.elexs.de/kap2_4.htm elexs.de/kap2_4.htm]. Online (mit JavaScript) geht dies unter [http://www.gjlay.de/helferlein/spannungsteiler.html gjlay.de/helferlein/spannungsteiler.html].<br />
<br />
== Spannungsteiler mit Biaskorrektur ==<br />
<br />
Manche Spannungsteiler ziehen Strom, bzw. liefern einen ''konstanten'' Strom. Eine Möglichkeit besteht darin, die Widerstände niederohmig zu dimensionieren. Nachteil dieser Lösung ist die überproportional zunehmende Verlustleistung.<br />
<br />
Alternativ kann man den Spannungsteiler mit Offset folgendermaßen berechnen:<br />
<br />
:<math>U_\text{AUS} = \frac{R_2 \cdot U_\text{EIN}}{R_1+R_2}-\frac{I_B}{\frac{1}{R_1}+\frac{1}{R_2}}</math><br />
<br />
Löst man die Gleichung nach <math>R_2</math> auf, erhält man<br />
<br />
:<math>R_{2} = \frac{U_\text{AUS} \cdot R_1}{U_\text{EIN}-I_B \cdot R_1-U_\text{AUS}}</math>.<br />
<br />
== Spannungsteiler mit Offset, passiv ==<br />
<br />
Um einiges komplizierter wird die Situation, wenn die Eingangsspannung mit einem Offset behaftet ist, oder wenn die Ausgangsspannung einen Offset haben soll. Hier kommt ein Spannungsteiler mit 3 Widerständen zum Einsatz. Die Berechnung der Widerstände <math>R_1</math>, <math>R_2</math> und <math>R_3</math> ist um einiges komplexer. Hier kann mit dem Überlagerungsprinzip (Superpositionsprinzip) gerechnet werden. Man erhält<br />
<br />
:<math>U_\text{AUS} = U_\text{EIN} \cdot \frac{\frac{R_1 \cdot R_2}{R_1+R_2}}{\frac{R_1 \cdot R_2}{R_1+R_2} + R_3}<br />
+ V_\text{CC} \cdot \frac{\frac{R_3 \cdot R_2}{R_3+R_2}}{\frac{R_3 \cdot R_2}{R_3+R_2} + R_1}</math> und<br />
<br />
:<math>U_\text{EIN} = \left(U_\text{AUS} - V_\text{CC} \cdot \frac{\frac{R_3 \cdot R_2}{R_3+R_2}}{\frac{R_3 \cdot R_2}{R_3+R_2} + R_1}\right) \cdot \frac{\frac{R_1 \cdot R_2}{R_1+R_2} + R_3}{\frac{R_1 \cdot R_2}{R_1+R_2}}</math>.<br />
<br />
Mit<br />
<br />
:<math>R_a = R_1||R_2 = \frac{R_1 \cdot R_2}{R_1+R_2}</math> und<br />
<br />
:<math>R_b = R_3||R_2 = \frac{R_3 \cdot R_2}{R_3+R_2}</math><br />
<br />
lassen sich die Formeln etwas übersichtlicher schreiben:<br />
<br />
:<math>U_\text{AUS} = U_\text{EIN} \cdot \frac{R_a}{R_a + R_3}<br />
+ V_\text{CC} \cdot \frac{R_b}{R_b + R_1}</math><br />
<br />
:<math>U_\text{EIN} = \left(U_\text{AUS} - V_\text{CC} \cdot \frac{R_b}{R_b + R_1}\right) \cdot \frac{R_a + R_3}{R_a}</math><br />
<br />
Dieses Gleichungssystem ist unterbestimmt. Das heißt, dass es unendlich viele Lösungen gibt. Zur praktischen Anwendung muss man daher bei gegebenen Spannungswerten noch einen Widerstandswert wählen, zum Beispiel den von <math>R_2</math>, um die Werte der anderen Widerstände wie <math>R_1</math> und <math>R_3</math> bestimmen zu können.<br />
<br />
Um die praktische Anwendung zu vereinfachen finden sich alle Formeln in einer [[Media:Spannungsteiler_mit_Offset.zip | Exceltabelle]] wieder. Die Nutzung ist praktisch selbsterklärend. Im oberen Teil trägt man alle gegebenen bzw. gewünschten Parameter ein, im Mittelteil erscheinen Zwischenergebnisse, die jedoch für die direkte Anwendung nicht von Bedeutung sind. Wichtig sind nur die Ergebnisse ganz unten mit den Werten für <math>R_1</math> und <math>R_3</math> sowie dem Eingangs- und Ausgangswiderstand des Spannungsteilers sowie die obere Grenzfrequenz.<br />
<br />
[[Datei:st_offet.png]]<br />
<br />
Für die Anwendung ist es wichtig zu wissen, dass die Quelle, welche den Spannungsteiler speist, einen geringen Innenwiderstand haben muss, damit es nicht zu unakzeptablen Messfehlern kommt. „Pi mal Daumen“ gilt, dass der Innenwiderstand nur 1 % vom Eingangswiderstand des Spannungsteilers betragen darf, damit der Messfehler nicht größer als 1 % wird (<math>R_2</math> möglichst groß wählen). Ist das nicht möglich, dann muss ein Operationsverstärker als Impedanzwandler eingesetzt werden (Spannungsfolger). Als weiterer systematischer Messfehler kommen noch die Toleranzen der Widerstände R1…R3 hinzu. Bei 1-%-Metallschichtwiderständen beträgt dieser etwa 2 %. Wenn es genauer sein soll, muss man 0,1-%-Widerstände verwenden oder eine Kalibrierung durchführen. Eine dritte systematische Fehlerquelle ist die Spannung <math>V_\text{CC}</math>, welche normalerweise die Versorgungsspannung bzw. Referenzspannung des ADC ist. Der Einfluss von <math>V_\text{CC}</math> wird durch den Spannungsteiler etwas abgeschwächt und liegt bei ca. 0,1 bis 1. D.&nbsp;h. 10&nbsp;mV Fehler von <math>V_\text{CC}</math> erscheinen als 1…10&nbsp;mV Fehler auf dem Messsignal. Selbstverständlich muss <math>V_\text{CC}</math> auch ausreichend stabil und belastbar sein. Der einfache Aufbau wird jedoch mit einigen Nachteilen erkauft.<br />
<br />
* relativ geringer Eingangswiderstand<br />
* hoher Ausgangswiderstand<br />
* bei hochohmigen Widerständen sinkt die obere Grenzfrequenz, nur langsame Signale sind dann noch messbar<br />
<br />
Als grobe Abschätzung gilt<br />
* <math>R_\text{aus}=R_1||R_2||R_3 = \frac{1}{\frac{1}{R_1} + \frac{1}{R_2} + \frac{1}{R_3}}</math><br />
* <math>f_\text{3 dB}=\frac{1}{2 \pi \cdot R_\text{aus} \cdot C_\text{ein}}</math><br />
* Einschränkungen bezüglich der Werte für <math>U_\text{ein,min}</math>, <math>U_\text{ein,max}</math>, <math>U_\text{aus,min}</math>, <math>U_\text{aus,max}</math><br />
** <math>U_\text{aus,min} >= U_\text{ein,min}</math><br />
** <math>U_\text{aus,max} >= U_\text{ein,max}</math><br />
** <math>V_\text{CC} >= U_\text{ein,max}</math><br />
<br />
(<math>f_\text{3 dB}</math> ist die Frequenz, bei der das Ausgangssignal um 3&nbsp;dB (≈&nbsp;30 % der Spannung) abgefallen ist.)<br />
<br />
Nachfolgend ist eine praktische Schaltung des Spannungsteilers mit einem [[AVR]]-Mikrocontroller gezeigt. Prinzipiell gilt sie natürlich für jeden [[Mikrocontroller]] bzw. ADC. Wichtig ist hier der Kondensator C1. Dieser ist notwendig, um kurzzeitig Strom zu liefern, wenn der ADC das Eingangssignal abtastet. Leider sinkt damit auch die obere Grenzfrequenz (siehe Formel für <math>f_\text{3 dB}</math>). Hier muss ein Kompromiss aus Grenzfrequenz, Ausgangswiderstand und Messfehler gefunden werden. Der Kondensator C2 ist kein diskret platziertes Bauteil, er symbolisiert vielmehr die unvermeidliche Eingangskapazität des ADC.<br />
<br />
[[Datei:st_avr.png]]<br />
<br />
== Spannungsteiler mit Offset, aktiv ==<br />
<br />
Mit etwas mehr Aufwand kann man die genannten Probleme beseitigen. Ein Operationsverstärker bietet hier viele Vorteile.<br />
<br />
* sehr hoher Eingangswiderstand<br />
* niedriger Ausgangswiderstand, wichtig zum Speisen von ADC-Eingängen<br />
* <math>U_\text{ein,min}</math>, <math>U_\text{ein,max}</math>, <math>U_\text{aus,min}</math>, <math>U_\text{aus,max}</math> hängen praktisch nur von der Beschaltung des Operationsverstärker ab.<br />
<br />
[[Datei:st_opv.png]]<br />
<br />
Der mathematische Zusammenhang ist dabei gegeben durch<br />
<br />
:<math>U_\text{AUS} = U_\text{P} \cdot \left( 1 + \frac{R_1}{R_2} \right) - U_\text{N} \cdot \frac{R_1}{R_2} </math><br />
<br />
Man kann sowohl UP als auch UN als Eingang benutzen und erhält damit einen invertierenden oder nichtinvertierenden Verstärker mit Offset. Die Berechung der Parameter findet man auch in der [[Media:Spannungsteiler_mit_Offset.zip | Exceltabelle]]. Wenn die Rechnung negative Zahlen ergibt, ist die gewählte Kombination aus Ein- und Ausgangsspannungsbereich nicht möglich!<br />
<br />
== Spannungsteiler, der Geheimtip ==<br />
<br />
Oft verwendet man Spannungsteiler, um ein Signal für eine anschließende ADC-Wandlung anzupassen.<br />
Verwendet man 15&nbsp;kΩ und 1&nbsp;kΩ bzw. 150&nbsp;kΩ und 10&nbsp;kΩ, stellt sich ein Teilungsverhältnis von 1:16 ein … welches sehr einfach durch 4fach-Shift im Controller kompensiert werden kann. Das geht wesentlich schneller als die entsprechende Multiplikation.<br />
<br />
== Messung hochohmiger Widerstände ==<br />
<br />
Will man sehr hochohmige Widerstände messen, die deutlich hochohmiger als der Meßbereich der meisten Multimeter sind (10-50MOhm), so kann man das relativ leicht mittels Spannungsteiler aus Meßobjekt RX und Meßgerät tun. Die allermeisten Digitalmultimeter haben 10 MOhm Eingangswiderstand. Damit läßt sich der gesuchte Widerstand einfach ermitteln. Selbst wenn das Meßobjekt 100 mal hochohmiger als das Multimeter ist (z.B. 1 GOhm), so hat man mit 10V Testspannung immer noch 100mV als Meßwert, welcher relativ sicher und genau gemessen werden kann.<br />
[[bild:Gohm_Messung.png | thumb | 150px | left | Praktischer Aufbau]]<br />
<br />
* Messung der Spannungsquelle, UT<br />
* Messung in Reihe mit Meßobjekt, U2<br />
<br />
<math>R_X=(\frac{U_T}{U_2}-1) \cdot 10M\Omega</math><br />
<br />
== Fehlerrechnung ==<br />
Bei vielen Meßtechnikanwendungen dient der Spannungsteiler der Einstellung bestimmter Verstärkungsverhaltnisse, um z.B. einen ADC sinnvoll auszusteuern oder auch eine analoge Anzeige zu skalieren. Dabei ist es wichtig, eine Fehlerrechnung durchzuführen, welche eine Aussage macht, inwieweit die Streuung der Bauteile Einfluss nimmt. Dies ist besonders dann wichtig, wenn die Belastung eines Spannungsteilers nicht genau bekannt ist, weil z.B. der Rin eines Chips nur auf 10% bekannt ist. Die klassische Behandlung solcher Unsicherheiten besteht darin, den vorgeschalteten Spannungsteiler entsprechend niederohmig auszulegen. Fließt dort z.B. der 10-fache Strom gegenüber dem belastenden Eingang, so sinkt der Einfluss dessen Ungenauigkeit auf 1:10 - mit dem Resultat, dass er zusammen mit dem vorgeschalteten Spannungsteiler aus 1%-Widerständen zu einem Gesamtfehler von ca 3% führt.<br />
<br />
== Siehe auch ==<br />
<br />
* [https://www.mikrocontroller.net/topic/297748#3185471 Forumsbeitrag]: Frequenzkompensierter 10:1-Teiler mit 1&nbsp;MΩ Impedanz<br />
<br />
== Weblinks ==<br />
<br />
* [https://de.wikipedia.org/wiki/Spannungsteiler Wikipedia-Artikel zum Spannungsteiler]<br />
* [https://www.youtube.com/watch?v=jUvSP3BQpvs Youtube-Video]: Dynamischer Spannungsteiler für 5kV<br />
<br />
[[Kategorie:Bauteile]]<br />
[[Kategorie:Grundlagen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=230V&diff=106453230V2023-11-27T11:10:49Z<p>Engineer: /* Siehe auch */</p>
<hr />
<div>Auf dieser Seite finden sich einige Schaltungen und Hinweise zum Umgang mit 230V-Netzspannung.<br />
Generell gilt:<br />
* '''Beim Arbeiten mit Schaltungen, die direkt Netzspannung führen, ist immer äußerste Vorsicht angesagt!'''<br />
* '''Das Berühren von 230V Netzspannung ist lebensgefährlich!'''<br />
<br />
== Portpin an 230V AC (ohne Galvanische Trennung) ==<br />
<br />
[[Bild:Eingangsbeschaltung.png|thumb|300px|Schaltplan und Stückliste]]<br />
<br />
Hier ist eine kurze Beschreibung, wie man einen 230V-Pegel direkt an einen Input-pin eines Mikrocontrollers anschließen kann. Da diese Schaltung keine [[Galvanische Trennung | galvanische Trennung]] besitzt, muss die gesamte Schaltung '''berührungssicher verbaut''' sein! Beim Experimentieren sollte '''auf jeden Fall ein Trenntrafo verwendet'''- und auch sonst sehr vorsichtig gehandelt werden.<br />
<br />
Obige Schaltung ist für eine bloße Detektion von Wechselspannung konzipiert. Für eine phasenrichtige, niedriglatente Detektion des Nulldurchgangs der Netzspannung, lässt man R3 weg. Die beiden Dioden, welche '''immer''' vom Typ Schottky sein müssen, hier BAT45, sind in integrierten Schaltkreisen (IC) üblicherweise bereits als Schutzdiode enthalten. Beim Verwenden des MCLR-Eingangs speziell von MICROCHIP Mikroprozessoren können diese Dioden fehlen und müssen in der Schaltung ergänzt werden. Aber Achtung! Die externen Dioden sind immer zu empfehlen, da ein Strom über die integrierten Bodydioden chipinterne Referenzspannungen "verziehen" kann, ausserdem sind sie meist nur wenig belastbar, teilweise nur mit 1mA. Der Widerstand R3 hat zwei Funktionen: Erstes als Spannungsteiler mit R1 und R2 um die Spannung auf einen vernünftigen Wert zu begrenzen und zweitens als Pulldown-Widerstand für den Portpin.<br />
<br />
Die Widerstände R1 und R2 dürfen '''nicht''' durch einen Widerstand mit 2M&Omega; ersetzt werden, weil auch bei bedrahteten Widerständen die Spannungsfestigkeit meistens nicht ausreichend ist und aus Sicherheitsgründen davon ausgegangen werden muss, dass ein Widerstand ausfällt, nicht aber beide auf einmal. Wird SMD verwendet, sind '''zwei''' Stück in der Bauform 1206 oder größer mit ca. 5mm Abstand zu empfehlen. Die Spannungsfestigkeit der Widerstände ist zu überprüfen (siehe Datenblatt). Gegen Spikes könnte zusätzlich ein 500pF Kerko direkt am Portpin gegen GND helfen. '''Aber Achtung: Falle'''<br />
<br />
Eine ganz besonders schlechte Idee hatte ich, als ich zum Schaltungsschutz noch eine Z-Diode mit 4,7V parallel zum 39K-Widerstand schalten wollte. Nichts funktionierte mehr! Warum? Weil sich die Z-Diode wie ein Kondensator verhält, die den H-Pegel über längere Zeit am yC-Pin aufrecht erhält. In der Simulation mit LT-Spice hingegen klappte es mit der Z-Diode wunderbar. - Theorie und Praxis eben!<br />
<br />
Die Firma Microchip hat hier auch eine gute Applikation Note hierzu. Für die allgegenwärtigen Sicherheitsfanatiker: Bei einer FMEA wird ein Widerstand als ein sehr sicheres Bauteil angesehen, der nicht so mir-nichts-dir-nichts kaputt geht. (Ganz anders schaut es da schon mit den Dioden aus)<br />
<br />
Wichtig ist bei dieser Schaltung noch, daß ich einen vernünftigen High-Pegel nur jede positive Halbwelle und auch nur in der Nähe des Spannungsmaximum erhalte. Ich muß also durch meine restliche Schaltung sicherstellen, dass ich den Nulldurchgang des Wechselstromes richtig mitbekomme und dann ( Bei Netzspannung 230V / 50Hz ) mindestens 2ms nach dem Nulldurchgang warten, bis ich den Portpin richtig einlesen kann. Und natürlich muß es die positive Halbwelle sein. (Siehe Simulation, hier erkennt man gut, wann der High-Pegel hoch genug ist...)<br />
<br />
Der Elko mit 470µF und die Spannungsquelle werden natürlich nicht explizit benötigt und stellen nur die vorhanden Stromversorgung des Microcontrollers dar.<br />
<br />
== Galvanisch getrenntes Abfragen von 230&nbsp;V Wechselspannung (empfohlene Methode) ==<br />
<br />
Bevor sich mit obiger Schaltung jemand ins Jenseits befördert, hier eine sicherere Schaltung, mit der man galvanisch getrennt (also potentialgetrennt) vom Netz ein Signal für den Mikrocontroller-Eingang erzeugen kann:<br />
<br />
[[Bild:230V_am_uC_Port-Pin.png]]<br />
<br />
Die Bauteile links des Optokopplers müssen alle mindestens eine Spannungsfestigkeit von 250&nbsp;V&nbsp;AC aufweisen, d.&nbsp;h. sie müssen U<sub>eff</sub>&nbsp;=&nbsp;230&nbsp;V bzw. U<sub>max</sub>&nbsp;=&nbsp;325&nbsp;V dauerhaft verkraften. Um diese relativ hohe Spannung aufzuteilen, sind jeweils zwei Widerstände als Spannungsteiler in Reihe geschaltet. Selbst größere SMD-Widerstände vom Typ 2512 weisen nur eine Spannungsfestigkeit von 200&nbsp;V&nbsp;DC auf!<br />
<br />
R1 und R2 begrenzen den Einschaltstrom durch C1. R3 und R4 entladen C1 nach dem Ausschalten. C2 und R5 sorgen für einen dauerhaften Low-Pegel am Controller-Eingang, solange Netzspannung anliegt. Wer den 100-Hz-Puls braucht, möge C2 weglassen. Zum Detektieren des Nulldurchgangs eignet sich diese Schaltung wegen der Phasenverschiebung durch C1 nicht.<br />
<br />
== Nulldurchgangsdetektoren ==<br />
<br />
Nulldurchgangsdetektoren (engl.: ''zero-crossing detectors'') sind Schaltungen, die dazu dienen, den genauen Zeitpunkt des Nulldurchgangs von (Netz-)Wechselspannung zu erfassen; dies ist z.&nbsp;B. bei Dimmern und Steuerungen für Leistungsantriebe erforderlich. Neben der Aufbereitung der Information mit ADC und Software existieren fertigen Chips und Schaltungen.<br />
<br />
===Softwaremethode===<br />
Mittels Signalverarbeitung können hochgenaue Nulldurchgangsdetektoren gebildet werden, welche sich auf z.B. die 50Hz-Welle konzentrieren und dabei Oberwellen im Netz ausblenden. Somit kann eine Steuerung voll synchron zur Sollwelle geschaltet werden, wie es z.B. bei Einspeiserichtern für Photovoltaikanlagen nötig ist. Eine genaue und sichere Wandlung erfolgt mit speziellen ADCs, welche eine interne galvanische Trennung bieten und das 50Hz Sinus-Signal in einen digitalen Datenstrom mit 3,3V Ausgang übersetzen.<br />
<br />
===Schaltungshinweise===<br />
<br />
Siehe dazu:<br />
<br />
* [https://www.mikrocontroller.net/topic/166569?goto=1593827#1593827 Forumsbeitrag]: Genauer Nulldurchgangsdetektor, galvanisch getrennt, Erhalt der Phaseninformation<br />
* [https://www.mikrocontroller.net/topic/248511#2548074 Forumsbeitrag]: Sparsamer Nulldurchgangsdetektor, 0,2&nbsp;mA<br />
* [https://www.mikrocontroller.net/topic/186832#1820077 Forumsbeitrag]: Ähnlich sparsamer Nulldurchgangsdetektor<br />
* [https://www.mikrocontroller.net/topic/286318#3036999 Forumsbeitrag]: sparsamer Nulldurchgangsdetektor, praktisch aufgebaut<br />
* [https://www.mikrocontroller.net/topic/286730?goto=3043901#3042236 Forumsbeitrag]: Schneller, präziser Nulldurchgangsdetektor<br />
* [https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.9.3 d.s.e.-FAQ: Präziser Nulldurchgangsdetektor]<br />
* [https://www.onsemi.com/pub/Collateral/AND9282-D.PDF AND9282/D: Mains Synchronization for PLC Modems], onsemi (englisch)<br />
* [https://ww1.microchip.com/downloads/en/AppNotes/Atmel-2508-Zero-Cross-Detector_ApplicationNote_AVR182.pdf Atmel Application Note AVR182: Zero Cross Detector] (englisch)<br />
* [https://dextrel.net/dextrel-start-page/design-ideas-2/mains-zero-crossing-detector DIY – Isolated High Quality Mains Voltage Zero Crossing Detector], dextrel.net (englisch)<br />
* [https://www.edn.com/design/analog/4368740/Mains-driven-zero-crossing-detector-uses-only-a-few-high-voltage-parts Mains-driven zero-crossing detector uses only a few high-voltage parts], EDN (englisch)<br />
<br />
== PCB-Design ==<br />
=== Abstände ===<br />
Bei der Erstellung von Schaltungen ist auf ausreichende Abstände zu achten. Dies gilt neben den Leiterbahnen auch für die Pins an Steckern. Dabei sind mögliche Verschmutzungen und Feuchtigkeit / Kriechstrecken zu beachten.<br />
=== Bauteilauslegung ===<br />
Unter Berücksichtigung von Alterung und Fertigtoleranzen werden Bauteile für Hochvoltanwendungen oft mit 125% oder auch 150% Spannungsfestigkeit ausgelegt. Geht man von 230V Effektivwert aus, findet man in vielen Schaltungen daher 400Vss-Bauteile, in sicherheitskritischen Anwendungen sogar solche mit 600Vss. In Anlagen, in denen es zu Spannungsspitzen aus dem Netz kommen kann, werden dann entsprechende Suppressordioden vorgeschaltet, die einzelne kurze 600V peaks limitieren.<br />
<br />
Sind keine Bauteile ausreichender Spannungsfestigkeit verfügbar, sind auch diese wieder zu kaskadieren.<br />
<br />
== Siehe auch ==<br />
Weitere Infos:<br />
<br />
* [https://www.mikrocontroller.net/topic/443440#5285400 Forumsbeitrag]: Vorteile eines DC-Netzes?<br />
* [https://www.mikrocontroller.net/topic/514221?goto=6611773#6611773 Forumsbeitrag]: 230V, geringen Strom detektieren<br />
* [https://www.mikrocontroller.net/topic/525867?goto=6856548#6856548 Forumsbeitrag]: Unterschied zwischen AC und DC Sicherungen und Schaltern<br />
* [[Medium:Eingangsbeschaltung.asc|Simulation in LTspice]]<br />
<br />
== Weblinks ==<br />
<br />
* [https://ww1.microchip.com/downloads/en/AppNotes/00521c.pdf Microchip AN521: Interfacing to AC Power Lines], Dimensionierung für '''PIC''' und '''115&nbsp;V!''' (englisch)<br />
<br />
[[Kategorie:Sensorik]]<br />
[[Kategorie:Leistungselektronik]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Diskussion:230V&diff=106452Diskussion:230V2023-11-27T11:04:17Z<p>Engineer: /* 110 vs. 230 V */</p>
<hr />
<div>== Auslegung ==<br />
Wir legen die Spannungsfestigkeit immer mit 150% aus. D.h. die 250V würden in einem solchen Fall nicht reichen. Aufpassen muss man auch, ob bei Bauteilen wirklich der Effektivwert gemeint ist. 250V maximale Belastbarkeit würden dann schon technisch nicht für die Netzspannung reichen. Üblicherweise legen wir solche Schaltungen für 400V aus, wenn sie an 230V laufen sollen. Darin inbegriffen ist eine Sicherheit sowie Reserve für Alterung. Bei der Nutzung von 250V-Typen würde ich auch den Weg empfehlen, sie in Reihe zu schalten. [[Benutzer:Engineer|Engineer]] ([[Benutzer Diskussion:Engineer|Diskussion]]) 11:04, 27. Nov. 2023 (UTC)<br />
<br />
== 110 vs. 230 V ==<br />
<br />
--[[Benutzer:Eagle38106|eagle38106]] ([[Benutzer Diskussion:Eagle38106|Diskussion]]) 09:20, 26. Nov. 2023 (UTC)<br />
<br />
Hi Jofe!<br />
<br />
Ich finde das gut, dass Du diesen Artikel überarbeitest. Ich konnte Dich leider nicht per PN kontaktieren, da Du keine gültige E-Mail-Adresse angegeben hast.<br />
<br />
Ich würde aus der Link-Liste alles löschen, was nicht auf 230V ausgelegt ist, d.h. die Atmel und Microchip AppNotes. Die sind nur für 110V gemacht. Der undebarfte Leser könnte diese ANs ohne Nachzudenken 1:1 übernehmen.<br />
<br />
Gruß<br />
Carsten<br />
<br />
: Hi Carsten, danke für deine Nachricht.<br />
<br />
: Das mit der E-Mail-Adresse ist seltsam, ich habe eigentlich eine gültige hinterlegt und wurde per PN auch bereits von einigen anderen Usern erfolgreich kontaktiert …<br />
<br />
: Habe gerade nachgeschaut, die Atmel AVR182 ist tatsächlich für 110 bis 240 V ausgelegt, bei der Microchip AN521 habe ich einen Hinweis auf die dortigen 115 V hinzugefügt – ich denke, das sollte so gehen.<br />
<br />
: Gruß<br />Johannes<br />
<br />
: —[[Benutzer:Jofe|Jofe]] ([[Benutzer Diskussion:Jofe|Diskussion]]) 13:32, 26. Nov. 2023 (UTC)<br />
--[[Benutzer:Eagle38106|eagle38106]] ([[Benutzer Diskussion:Eagle38106|Diskussion]]) 14:02, 26. Nov. 2023 (UTC)<br />
<br />
So geht's natürlich auch. Danke.</div>Engineerhttps://www.mikrocontroller.net/index.php?title=230V&diff=106451230V2023-11-27T10:59:16Z<p>Engineer: direktes Messen der Spannung mit ADC</p>
<hr />
<div>Auf dieser Seite finden sich einige Schaltungen und Hinweise zum Umgang mit 230V-Netzspannung.<br />
Generell gilt:<br />
* '''Beim Arbeiten mit Schaltungen, die direkt Netzspannung führen, ist immer äußerste Vorsicht angesagt!'''<br />
* '''Das Berühren von 230V Netzspannung ist lebensgefährlich!'''<br />
<br />
== Portpin an 230V AC (ohne Galvanische Trennung) ==<br />
<br />
[[Bild:Eingangsbeschaltung.png|thumb|300px|Schaltplan und Stückliste]]<br />
<br />
Hier ist eine kurze Beschreibung, wie man einen 230V-Pegel direkt an einen Input-pin eines Mikrocontrollers anschließen kann. Da diese Schaltung keine [[Galvanische Trennung | galvanische Trennung]] besitzt, muss die gesamte Schaltung '''berührungssicher verbaut''' sein! Beim Experimentieren sollte '''auf jeden Fall ein Trenntrafo verwendet'''- und auch sonst sehr vorsichtig gehandelt werden.<br />
<br />
Obige Schaltung ist für eine bloße Detektion von Wechselspannung konzipiert. Für eine phasenrichtige, niedriglatente Detektion des Nulldurchgangs der Netzspannung, lässt man R3 weg. Die beiden Dioden, welche '''immer''' vom Typ Schottky sein müssen, hier BAT45, sind in integrierten Schaltkreisen (IC) üblicherweise bereits als Schutzdiode enthalten. Beim Verwenden des MCLR-Eingangs speziell von MICROCHIP Mikroprozessoren können diese Dioden fehlen und müssen in der Schaltung ergänzt werden. Aber Achtung! Die externen Dioden sind immer zu empfehlen, da ein Strom über die integrierten Bodydioden chipinterne Referenzspannungen "verziehen" kann, ausserdem sind sie meist nur wenig belastbar, teilweise nur mit 1mA. Der Widerstand R3 hat zwei Funktionen: Erstes als Spannungsteiler mit R1 und R2 um die Spannung auf einen vernünftigen Wert zu begrenzen und zweitens als Pulldown-Widerstand für den Portpin.<br />
<br />
Die Widerstände R1 und R2 dürfen '''nicht''' durch einen Widerstand mit 2M&Omega; ersetzt werden, weil auch bei bedrahteten Widerständen die Spannungsfestigkeit meistens nicht ausreichend ist und aus Sicherheitsgründen davon ausgegangen werden muss, dass ein Widerstand ausfällt, nicht aber beide auf einmal. Wird SMD verwendet, sind '''zwei''' Stück in der Bauform 1206 oder größer mit ca. 5mm Abstand zu empfehlen. Die Spannungsfestigkeit der Widerstände ist zu überprüfen (siehe Datenblatt). Gegen Spikes könnte zusätzlich ein 500pF Kerko direkt am Portpin gegen GND helfen. '''Aber Achtung: Falle'''<br />
<br />
Eine ganz besonders schlechte Idee hatte ich, als ich zum Schaltungsschutz noch eine Z-Diode mit 4,7V parallel zum 39K-Widerstand schalten wollte. Nichts funktionierte mehr! Warum? Weil sich die Z-Diode wie ein Kondensator verhält, die den H-Pegel über längere Zeit am yC-Pin aufrecht erhält. In der Simulation mit LT-Spice hingegen klappte es mit der Z-Diode wunderbar. - Theorie und Praxis eben!<br />
<br />
Die Firma Microchip hat hier auch eine gute Applikation Note hierzu. Für die allgegenwärtigen Sicherheitsfanatiker: Bei einer FMEA wird ein Widerstand als ein sehr sicheres Bauteil angesehen, der nicht so mir-nichts-dir-nichts kaputt geht. (Ganz anders schaut es da schon mit den Dioden aus)<br />
<br />
Wichtig ist bei dieser Schaltung noch, daß ich einen vernünftigen High-Pegel nur jede positive Halbwelle und auch nur in der Nähe des Spannungsmaximum erhalte. Ich muß also durch meine restliche Schaltung sicherstellen, dass ich den Nulldurchgang des Wechselstromes richtig mitbekomme und dann ( Bei Netzspannung 230V / 50Hz ) mindestens 2ms nach dem Nulldurchgang warten, bis ich den Portpin richtig einlesen kann. Und natürlich muß es die positive Halbwelle sein. (Siehe Simulation, hier erkennt man gut, wann der High-Pegel hoch genug ist...)<br />
<br />
Der Elko mit 470µF und die Spannungsquelle werden natürlich nicht explizit benötigt und stellen nur die vorhanden Stromversorgung des Microcontrollers dar.<br />
<br />
== Galvanisch getrenntes Abfragen von 230&nbsp;V Wechselspannung (empfohlene Methode) ==<br />
<br />
Bevor sich mit obiger Schaltung jemand ins Jenseits befördert, hier eine sicherere Schaltung, mit der man galvanisch getrennt (also potentialgetrennt) vom Netz ein Signal für den Mikrocontroller-Eingang erzeugen kann:<br />
<br />
[[Bild:230V_am_uC_Port-Pin.png]]<br />
<br />
Die Bauteile links des Optokopplers müssen alle mindestens eine Spannungsfestigkeit von 250&nbsp;V&nbsp;AC aufweisen, d.&nbsp;h. sie müssen U<sub>eff</sub>&nbsp;=&nbsp;230&nbsp;V bzw. U<sub>max</sub>&nbsp;=&nbsp;325&nbsp;V dauerhaft verkraften. Um diese relativ hohe Spannung aufzuteilen, sind jeweils zwei Widerstände als Spannungsteiler in Reihe geschaltet. Selbst größere SMD-Widerstände vom Typ 2512 weisen nur eine Spannungsfestigkeit von 200&nbsp;V&nbsp;DC auf!<br />
<br />
R1 und R2 begrenzen den Einschaltstrom durch C1. R3 und R4 entladen C1 nach dem Ausschalten. C2 und R5 sorgen für einen dauerhaften Low-Pegel am Controller-Eingang, solange Netzspannung anliegt. Wer den 100-Hz-Puls braucht, möge C2 weglassen. Zum Detektieren des Nulldurchgangs eignet sich diese Schaltung wegen der Phasenverschiebung durch C1 nicht.<br />
<br />
== Nulldurchgangsdetektoren ==<br />
<br />
Nulldurchgangsdetektoren (engl.: ''zero-crossing detectors'') sind Schaltungen, die dazu dienen, den genauen Zeitpunkt des Nulldurchgangs von (Netz-)Wechselspannung zu erfassen; dies ist z.&nbsp;B. bei Dimmern und Steuerungen für Leistungsantriebe erforderlich. Neben der Aufbereitung der Information mit ADC und Software existieren fertigen Chips und Schaltungen.<br />
<br />
===Softwaremethode===<br />
Mittels Signalverarbeitung können hochgenaue Nulldurchgangsdetektoren gebildet werden, welche sich auf z.B. die 50Hz-Welle konzentrieren und dabei Oberwellen im Netz ausblenden. Somit kann eine Steuerung voll synchron zur Sollwelle geschaltet werden, wie es z.B. bei Einspeiserichtern für Photovoltaikanlagen nötig ist. Eine genaue und sichere Wandlung erfolgt mit speziellen ADCs, welche eine interne galvanische Trennung bieten und das 50Hz Sinus-Signal in einen digitalen Datenstrom mit 3,3V Ausgang übersetzen.<br />
<br />
===Schaltungshinweise===<br />
<br />
Siehe dazu:<br />
<br />
* [https://www.mikrocontroller.net/topic/166569?goto=1593827#1593827 Forumsbeitrag]: Genauer Nulldurchgangsdetektor, galvanisch getrennt, Erhalt der Phaseninformation<br />
* [https://www.mikrocontroller.net/topic/248511#2548074 Forumsbeitrag]: Sparsamer Nulldurchgangsdetektor, 0,2&nbsp;mA<br />
* [https://www.mikrocontroller.net/topic/186832#1820077 Forumsbeitrag]: Ähnlich sparsamer Nulldurchgangsdetektor<br />
* [https://www.mikrocontroller.net/topic/286318#3036999 Forumsbeitrag]: sparsamer Nulldurchgangsdetektor, praktisch aufgebaut<br />
* [https://www.mikrocontroller.net/topic/286730?goto=3043901#3042236 Forumsbeitrag]: Schneller, präziser Nulldurchgangsdetektor<br />
* [https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.9.3 d.s.e.-FAQ: Präziser Nulldurchgangsdetektor]<br />
* [https://www.onsemi.com/pub/Collateral/AND9282-D.PDF AND9282/D: Mains Synchronization for PLC Modems], onsemi (englisch)<br />
* [https://ww1.microchip.com/downloads/en/AppNotes/Atmel-2508-Zero-Cross-Detector_ApplicationNote_AVR182.pdf Atmel Application Note AVR182: Zero Cross Detector] (englisch)<br />
* [https://dextrel.net/dextrel-start-page/design-ideas-2/mains-zero-crossing-detector DIY – Isolated High Quality Mains Voltage Zero Crossing Detector], dextrel.net (englisch)<br />
* [https://www.edn.com/design/analog/4368740/Mains-driven-zero-crossing-detector-uses-only-a-few-high-voltage-parts Mains-driven zero-crossing detector uses only a few high-voltage parts], EDN (englisch)<br />
<br />
== Siehe auch ==<br />
<br />
* [https://www.mikrocontroller.net/topic/443440#5285400 Forumsbeitrag]: Vorteile eines DC-Netzes?<br />
* [https://www.mikrocontroller.net/topic/514221?goto=6611773#6611773 Forumsbeitrag]: 230V, geringen Strom detektieren<br />
* [https://www.mikrocontroller.net/topic/525867?goto=6856548#6856548 Forumsbeitrag]: Unterschied zwischen AC und DC Sicherungen und Schaltern<br />
* [[Medium:Eingangsbeschaltung.asc|Simulation in LTspice]]<br />
<br />
== Weblinks ==<br />
<br />
* [https://ww1.microchip.com/downloads/en/AppNotes/00521c.pdf Microchip AN521: Interfacing to AC Power Lines], Dimensionierung für '''PIC''' und '''115&nbsp;V!''' (englisch)<br />
<br />
[[Kategorie:Sensorik]]<br />
[[Kategorie:Leistungselektronik]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Taktung_FPGA/CPLD&diff=106371Taktung FPGA/CPLD2023-10-05T22:54:13Z<p>Engineer: /* Einleitung */</p>
<hr />
<div>== Einleitung ==<br />
<br />
Von den vier Signalgruppen<br />
<br />
* interne Signale<br />
* IO Signale<br />
* Reset<br />
* Takt (Clock)<br />
<br />
ist letzterer der mit den höchsten Anforderungen an die Signalqualität und Laufzeit. Defizite im Taktnetzwerk führen zu ungewolltem, oft ''katastrophalen'' Verhalten der Schaltung. Um dies zu vermeiden, sind besondere Konstuktionsregeln verfasst- und Komponenten für die Taktverteilung in digitalen Schaltungen entwickelt worden. Dabei sind die Methoden für die Signalführung in ASICs und FPGAs im Details durchaus unterschiedlich und unterscheiden sich auch von den Ansprüchen und Methoden bei externer Signalführung auf PCBs:<br />
<br />
== Grundanforderungen Taktnetzwerk ==<br />
Der Takt muss möglichst störungsfrei an alle getakteten Bauelemente (FlipFlops, RAMs, IO-Zellen) im IC (ASIC / FPGA) geführt werden und zudem sehr viele Gatter-Eingänge treiben können (bis einige Hunderttausend!). Die Laufzeit vom Eingang des Chips zu jedem Endpunkt des Netzes muss idealerweise exakt gleich sein. Nur so ist gewährleistet, dass alle FlipFlops zum einem möglichst gleichen Zeitpunkt schalten und eine hohe Synchronität gewährleistet ist. Die verbleibenden Differenzen, die unvermeidlich sind, werden von den Tools dahingehend berücksichtigt, dass genügend Zeitreserven vorgesehen werden. Der Laufzeitunterschied zwischen verschiedenen Endpunkten des Taktnetzes wird Skew genannt und liegt bei modernen Digitalschaltkreisen idealerweise unter 100ps.<br />
<br />
Um dies zu realisieren, werden eine Reihe von Maßnahmen getroffen:<br />
<br />
- An den Eingängen der PLDs, FPGAs und ASICs werden spezielle Eingangsbuffer bereitgestellt, die mitunter durch symmetrische Signalquellen gespeist werden können.<br />
<br />
- In PLDs und FPGAs werden unterschiedliche Taktnetze und Taktregionen bereitgestellt. In ASICs werden diese nach Bedarf aufgezogen.<br />
<br />
- Es werden globale und mitunter regionale Takttreiber genutzt (in Xilinx FPGA: BUFG).<br />
<br />
- Taktnetzwerke als sehr oft als Baumstruktur gestaltet (d.h. gleiche Länge von der Baumwurzel zu jeder Astspitze). Man nennt diese Schaltungstechnik daher auch "Clock Tree". Hierdurch entsteht nicht nur eine begrenzte Last für jeden einzelnen Treiber, sondern auch eine Auffrischung des Signals. Aufgrund der Besonderheiten der Laufzeiten in digitalen Schaltungen ist eine mehrfach mit Treibern unterbrochene Leitung trotz scheinbar mehr Schaltzeiten schneller, als eine einzige lange Leitung.<br />
<br />
[[Bild:clock_tree.png | 320px]]<br />
<br />
- In ASICs und schnellen FPGAs geht man dazu über, auch intern differenzielle Taktnetze zu verwenden. <br />
<br />
- In ASICs und machen FPGAs wird das Taktnetzwerk physikalisch über einfache Inverter weitergeschaltet, wodurch partiell negierte Takte entstehen, was dann schaltungstechnisch berücksichtigt werden kann und muss, indem FFs verwendet werden, die mit negierter Flanke arbeiten, so, wie in besonderen ASIC-Anwendungen zur Balancierung des Strom-Schaltverhaltens auch komplette Schaltungsteile mit invertierter Logik betrieben werden können. Auch in FPGAs sind solche Prinzipien aktuell, werden aber von den Herstellern nicht kommuniziert und sind für den Nutzer auch nicht von Belang. Daher ist es in aller Regel ungünstig bis kontraproduktiv, beim FPGA-design negierte Takte zu verwenden oder FFs mit fallenden Flanken zu kommandieren.<br />
<br />
== Taktdomänen / Takterzeugung ==<br />
In fast jeder Digitalschaltung kommt es vor, dass verschiedene Bereiche nicht bei jedem Takt eine Aktion ausführen sollen oder mit erheblich geringeren Taktrate als der Rest der Schaltung arbeiten. Dazu muss aus dem relativ schnellen Systemtakt ein langsamer Takt gewonnen werden. Was auf den ersten Blick recht einfach aussieht, wird im Detail oft falsch gemacht.<br />
<br />
Bei externen Schaltungen wird hierzu gerne ein programmierbarer Taktteiler eingesetzt, um abgeleitete Takte zu gewinnen und Chips zu versorgen. Diese bestehen praktisch aus Zählern, welche als Teiler wirken. Diese Arbeitstechnik lässt sich so aber nur bei PLDs und langsam getakteten FPGAs direkt umsetzen, weil die dafür nicht optimierten physikalischen Resourcen (LUTs) in aller Regel unnötige Verzögerungen und Störanfälligkeit ins Spiel bringen.<br />
<br />
Daher ist die Verwendung der dedizierten Taktnetze zu bevorzugen und die langsame Ausführung von Aktionen mit enable-Signalen zu regeln. Dort wo dies nicht möglich ist, um z.B. Strom zu sparen, sollten Takte aus PLLs gewonnen- und einzelne Taktregionen benutzt werden, welche dann mitunter Synchronisationsstufen erfordern, um Daten zwischen ihnen zu übergeben.<br />
<br />
== Geschaltete Takte (Gated Clock)==<br />
<br />
Dieser Begriff bezieht sich auf geschaltete, also unterbrochene (engl. "gate"), Taktleitungen. Dies kann durch die Verwendung von:<br />
<br />
*'''Multiplexern''' (Auswahl zwischen Taktquelle 1 und 2) <br />
oder <br />
*'''kombinatorischer Logik''' (Schaltungsteile werden unter bestimmten Bedingungen vom Takt getrennt)<br />
geschehen.<br />
<br />
===Taktmultiplexer===<br />
Falls ein völliges Abschalten des Taktes wirklich erforderlich ist, z.&nbsp;B. um den Leistungsbedarf zeitweilig zu drosseln, sollte der Takttreiber selbst abgeschaltet werden. Bei Xilinx würde man statt eines BUFG einen BUFGMUX einsetzen. Dieser garantiert durch seinen speziellen Aufbau, daß während des Umschaltens keine [[Glitch]]es entstehen.<br />
<br />
===Kombinatorik im Taktpfad===<br />
Ein solches Design ist aus zwei Gründen problematisch:<br />
* es entstehen neben den gewünschten Schaltflanken zusätzliche, ultrakurze Flanken (->[[Glitch]]es)<br />
* bei CLK-Teilern hat der langsame Takt eine Phasenverschiebung zum schnellen Takt (-> Skew).<br />
* bei "gegateten" Takten besitzt der erzeugte Takt eine Phasenverschiebung zum Quell-Takt (-> Skew).<br />
<br />
Im ersten Fall können durch die Glitches unerwünschte Schaltaktivitäten an FlipFlops in folgenden Schaltungsteilen ausgelöst werden. Das ist fatal! Schon deshalb ist diese Variante nicht brauchbar. Sie wurde dennoch oft in der Vergangenheit angewendet, weil die relativ langsamen ICs die Glitches gefiltert bzw. ignoriert haben. Doch heute sind CPLDs und FPGAs extrem schnell, dass man mit dieser Methode schnell scheitert.<br />
<br />
Im zweiten Fall erfolgt durch Skew eine Verschiebung der Schaltzeiten im anderen Schaltungsteil, die insgesamt weniger Zeitreserve für Signale lässt, die aus dem anderen Schaltungsteil wieder in den ersten Schaltungsteil übergeben werden sollen. In der Vorwärtsrichtung bestehen sogannnte race conditions, d.h. Daten innerhalb der Quelltaktdomäne gelangen eher an FlipFlops der Zieldomäne als Daten, die innerhalb der Zieldomäne erzeugt wurden. Sind Signale zu früh, werden sie gfs. vom falschen Takt übernommen, wodurch das design "komisch" arbeitet, weil scheinbar ein Takt fehlt. Diese Methodik ist ohne Behandlung oder besondere Betrachtung der möglichen Fälle nicht zuverlässig und damit allgemeinen nicht akzeptabel.<br />
<br />
In Sonderfällen kann durch einen ausreichende Verschiebung dafür gesorgt werden, daß die Schaltungsteile zueinander korrekt laufen und stabil arbeiten. Dies ist dann einfach zu erreichen, wenn kein Rückwärtspfad der Daten benötigt wird, der im selben Taktzyklus agieren muss.<br />
<br />
=== Asynchrone Taktleitung ===<br />
<br />
Durch diese Methodik der verschobenen Takte kann jedoch auch eine Geschwindigkeitssteigerung erreicht werden, wenn der Takt quasi wie ein Lauffeuer durch den Chip läuft und bei korrektem Timing der Daten (kurze Kombinatorik), jene aus der zukünftigen Zeitebene nie einholt. Damit sind asynchron gepipelinete Architekturen bildbar, die unterhalb der Taktebene arbeiten und lokal die typischen setup-hold-Bedingungen einhalten.<br />
<br />
Dies wird üblicherweise aber nur bei ASICs eingesetzt, bei denen ohnehin die Takte und Daten passend lokal optimiert werden. Im Bereich des typischen FPGA-Designs findet man hierzu jedoch bislang nur akademische Lösungen und manuell plazierte Teildesigns bei Sonderlösungen, z.B. auf dem Gebiet der TDC (Time to Digital Converter, schnelle PMW-Generierung z.B. im [[PICCOLO]] von TI), da die Tools allesamt auf einem FPGA-weit synchronen Takt und Design aufbauen, dies nicht automatisiert unterstützen und folglich ein Design extrem aufwändig und schwer zu testen ist. Geschwindigkeitssteigerungen lassen sich bei FPGAs daher meist einfacher, sicherer und billiger erreichen, wenn man stärker Pipelining oder Parallelisierung nutzt, ggf. unter Nutzung von mehreren FPGAs.<br />
<br />
=== Derived Clock ===<br />
<br />
Eine geringfügige Verbesserung des Gated Clock erreicht man durch das Anfügen eines FlipFlops hinter den kombinatorischen Dekoder. Durch diese Zwischenspeicherung wird der Takt zumindest frei von Glitches. Wenn im FPGA/CPLD nur ein langsamer Takt gebraucht wird, oder der langsame Schaltungsteil keine logische Verbindung zum schnellen Schaltungsteil hat, dann ist diese Lösung akzeptabel und sicher. Wenn jedoch zwischen dem langsamen Schaltungsteil und schnellen Schaltungsteil Daten oder Steuersignale ausgetauscht werden, dann muss man zu einer anderen Entwurfsmethode greifen.<br />
<br />
== Clock Enable ==<br />
Jedes FlipFlop in FPGAs/CPLDs hat einen synchronen Steuereingang namens CE (Clock Enable). Damit kann man festlegen, ob das FlipFlop bei der nächsten Taktflanke neue Daten speichern oder die alten behalten soll. Da es sich um einen synchronen Eingang handelt, ist es vollkommen unkritisch, wenn diese Signal Glitches enthält. Es muss nur im Zeitraum beginnend kurz vor der Taktflanke (Setup Time, Aufbauzeit) bis kurz danach (Hold Time, Haltezeit) stabil anliegen. Eine Verschiebung dieses Signals zum Takt ist auch unkritisch, denn jedes normale Steuersignal ist phasenverschoben zum Takt (Schaltzeit der FlipFlops, Durchlaufzeit der Logik, Laufzeit der Verdrahtung (Routing)). Das CE-Signal kann von der Entwurfssoftware wie ein normales Steuersignal behandelt werden und vereinfacht damit erheblich die automatische Analyse der maximalen Schaltfrequenz (Timing Analyses).<br />
<br />
== Beispiele ==<br />
Im nachfolgenden Bild sind alle drei Typen von Takt kurz skizziert. Der schnelle Takt treibt einen 4Bit Zähler (CNT1). Dessen Ausgänge werden über eine UND-Gatter (Gate1) kombinatorisch verknüpft. Der Ausgang des UND-Gatters ist nur dann HIGH, wenn alle Eingänge HIGH sind. Das ist nur einmal alle 16 Takte der Fall, wenn der Zählerstand binär 1111 erreicht ist. Dieses Signal als Takt zu verwenden wäre sträflich, denn es ist ein <B>Gated Clock</B>. Wenn er jedoch noch einmal mittels FlipFlop (FF1) zwischengespeichert wird ist es ein <B>Derived Clock</B>. Der beste und sinnvollste Weg ist jedoch die Verwendung des <B>CE-Eingang</B>s der FlipFlops (FF2) wie es ganz unten im Bild dargestellt ist. <br />
<br />
[[bild:clock_types.png | thumb| left | 640px | verschiedene Taktteiler]]<br />
{{clear}}<br />
<br />
=== Umsetzung in VHDL ===<br />
<br />
<syntaxhighlight lang="vhdl"><br />
-- Die Verwendung von "Clock Enable" in VHDL<br />
-- die Signale clk und ce sind hier natürlich nur Beispiele<br />
-- es kann dafür jeder beliebige Signalname verwendet werden<br />
<br />
-- Das hier muss in die Signaldeklaration zwischen<br />
-- achitecture ... und begin<br />
<br />
constant cnt_div: integer:=16; -- Teilerverhältnis<br />
signal cnt: integer range 0 to cnt_div-1; -- Zähler für Teiler<br />
signal ce: std_logic;<br />
<br />
-- die Prozesse logischerweise nach begin der Architecture<br />
<br />
-- Prozess mit langsamen Clock Enable<br />
<br />
process(clk)<br />
begin<br />
if rising_edge(clk) then<br />
if ce='1' then<br />
<br />
-- Aktionen hier einfügen, welche mit langsamen Takt laufen <br />
<br />
end if;<br />
end if;<br />
end process;<br />
<br />
-- Clock Enable Generator<br />
<br />
process(clk)<br />
begin<br />
if rising_edge(clk) then<br />
if cnt=cnt_div-1 then<br />
ce <= '1';<br />
cnt <= 0;<br />
else<br />
ce <= '0';<br />
cnt <= cnt +1 ;<br />
end if;<br />
end if;<br />
end process;<br />
<br />
</syntaxhighlight><br />
<br />
== Takterzeugung mit PLLs ==<br />
=== Clock Skew ===<br />
Mithilfe der clock skew Einstellung kann ein Synthesewerkzeug angewiesen werden, den Zeitpunkt der Taktflanke entsprechend den Erfordernissen der Schaltungsverzögerungen einzustellen. Dies schafft mehr Reserven. Üblicherweise werden die Takte im FPGA so hingeschoben, dass sie synchron mit dem Erzeugertakt liegt, weil die damit erzeugten Daten am Ausgang ebenfalls wieder zur Taktphase passen und in der Regel auf diese Weise auch synchrone Datenbusse, die mit diesem Takt ankommen, leicht eingesampelt werden können.<br />
<br />
=== Phase Shift ===<br />
Innerhalb der FPGA-PLLs können mehrere Takte von demselben Eingangstakt abgeleitet werden, die eine feste Verschiebung aufweisen. Diese Verschiebung ist das Hauptwerkzeug, um den benötigten Zeitpunkt für einen steigende Flanke eines internen Taktes im Bezug zu extern eingehenden Daten herzustellen und Laufzeiten im FPGA und den IO-Bänken auszugleichen.<br />
<br />
[[Category:FPGA und Co]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Glossar&diff=106265Glossar2023-08-16T12:37:42Z<p>Engineer: /* C */</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU'.<br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, die hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelersystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Rückkanal bei HMDI-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei [[S/PDIF]]<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''inute: Anzahl der Herzschläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''lock '''D'''omain '''C'''rossing: Stellen mit Taktübergängen in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer, Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;RMS: '''R'''oot '''M'''ean '''S'''quare, Mittel der Quadrate von Zahlen, z.B. bei Effektivwertberechnung<br />
<br />
;RMS-Gewinde: '''R'''oyal '''M'''icroscopical '''S'''ociety-Gewinde gem. Norm ISO 9345:2019-03, wird für Mikroskope verwendet<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232, ein Standard zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: ein Standard zur seriellen Datenübertragung, benutzt differentielle Signale, was die Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
;RTL: '''R'''ound '''T'''rip '''L'''atency, gesamte Latenz von Daten in einem System bei einem Schreib- und Rücklesevorgang<br />
<br />
;RTL: '''R'''egister '''T'''ransfer '''L'''anguage, textuelle Beschreibung einer Schaltung auf Registerebene beim Chip- und FPGA-design<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''pecific '''A'''bsorption '''R'''ate: eine Maßzahl die angibt, wieviel Energie der menschliche Körper bei Strahlung aufnimmt, wichtig in der Medizintechnik<br />
<br />
;SAR: '''S'''peicher / '''S'''torage '''A'''dress '''R'''egister: Zwischenspeicher in einer CPU, dessen Inhalt die aktuell bearbeitete Speicheradresse hält<br />
<br />
;SAR: '''S'''uccessive '''A'''pproximation '''R'''egister: eine Methode der Analog-Digitalwandlung, bei der Endwert zu iterative Findung der Bits und Vergleich generiert wird<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethode in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt wird, um den Empfangsbereich zu vergrößern.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Glossar&diff=106162Glossar2023-05-21T17:02:57Z<p>Engineer: /* R */</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU'.<br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, die hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelersystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Rückkanal bei HMDI-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei [[S/PDIF]]<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''inute: Anzahl der Herzschläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''ross '''D'''omain '''C'''rossing: ein Synonym für Taktübergänge in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer, Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;RMS: '''R'''oot '''M'''ean '''S'''quare, Mittel der Quadrate von Zahlen, z.B. bei Effektivwertberechnung<br />
<br />
;RMS-Gewinde: '''R'''oyal '''M'''icroscopical '''S'''ociety-Gewinde gem. Norm ISO 9345:2019-03, wird für Mikroskope verwendet<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232, ein Standard zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: ein Standard zur seriellen Datenübertragung, benutzt differentielle Signale, was die Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
;RTL: '''R'''ound '''T'''rip '''L'''atency, gesamte Latenz von Daten in einem System bei einem Schreib- und Rücklesevorgang<br />
<br />
;RTL: '''R'''egister '''T'''ransfer '''L'''anguage, textuelle Beschreibung einer Schaltung auf Registerebene beim Chip- und FPGA-design<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''pecific '''A'''bsorption '''R'''ate: eine Maßzahl die angibt, wieviel Energie der menschliche Körper bei Strahlung aufnimmt, wichtig in der Medizintechnik<br />
<br />
;SAR: '''S'''peicher / '''S'''torage '''A'''dress '''R'''egister: Zwischenspeicher in einer CPU, dessen Inhalt die aktuell bearbeitete Speicheradresse hält<br />
<br />
;SAR: '''S'''uccessive '''A'''pproximation '''R'''egister: eine Methode der Analog-Digitalwandlung, bei der Endwert zu iterative Findung der Bits und Vergleich generiert wird<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethode in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt wird, um den Empfangsbereich zu vergrößern.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Glossar&diff=105999Glossar2023-04-01T22:01:33Z<p>Engineer: /* B */</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU'.<br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, die hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelersystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Rückkanal bei HMDI-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei [[S/PDIF]]<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''inute: Anzahl der Herzschläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''ross '''D'''omain '''C'''rossing: ein Synonym für Taktübergänge in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer, Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232, ein Standard zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: ein Standard zur seriellen Datenübertragung, benutzt differentielle Signale, was die Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
;RTL: '''R'''ound '''T'''rip '''L'''atency, gesamte Latenz von Daten in einem System bei einem Schreib- und Rücklesevorgang<br />
<br />
;RTL: '''R'''egister '''T'''ransfer '''L'''anguage, textuelle Beschreibung einer Schaltung auf Registerebene beim Chip- und FPGA-design<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''pecific '''A'''bsorption '''R'''ate: eine Maßzahl die angibt, wieviel Energie der menschliche Körper bei Strahlung aufnimmt, wichtig in der Medizintechnik<br />
<br />
;SAR: '''S'''peicher / '''S'''torage '''A'''dress '''R'''egister: Zwischenspeicher in einer CPU, dessen Inhalt die aktuell bearbeitete Speicheradresse hält<br />
<br />
;SAR: '''S'''uccessive '''A'''pproximation '''R'''egister: eine Methode der Analog-Digitalwandlung, bei der Endwert zu iterative Findung der Bits und Vergleich generiert wird<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethode in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt wird, um den Empfangsbereich zu vergrößern.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=AD-Wandler&diff=105998AD-Wandler2023-04-01T21:59:09Z<p>Engineer: /* Hohe Spannungen messen */</p>
<hr />
<div>Die Abkürzung AD-Wandler steht für '''A'''nalog-'''D'''igital-'''W'''andler (teilweise auch ADU, Analog-Digital-Umsetzer; im Englischen ADC Analog-Digital-Converter). Dieser wandelt eine [[analog|analoge]] Größe, meist eine Spannung, in einen [[digital|digitalen]] Wert um. Das Gegenstück ist der [[DA-Wandler]].<br />
<br />
== Eigenschaften ==<br />
<br />
Die Auflösung, mit der die analoge Größe dargestellt wird, bewegt sich typisch zwischen 1 (einfacher Komparator, Ein-Bit-Audio, PDC) und 24 [[Digitaltechnik|Bit]] - in Sonderfällen noch mehr. Den, durch die Wandlung entstehenden Fehler zwischen dem tatsächlichen Wert und dem ausgegebenen (gewandelten) Wert, nennt man [[Quantisierung|Quantisierungsfehler]]. Er entsteht durch die unvermeidbare Rundung und die Art der Wandlung. So entstehen durch die Nichtlinearität der Bauteile ebenfalls Fehler, wodurch die theoretisch möglichen Auflösungen der Messprinzipien niemals erreicht werden.<br />
<br />
Der Wandlungsvorgang benötigt immer eine gewisse Zeit, während der die Eingangsgröße konstant bleiben muss. Das gilt insbesondere für alle iterativen Wandlungsprinzipien. Aber selbst für den direkt wandelnden Flash-ADC, da nicht alle dort benutzten Komparatoren gleich schnell sind. Hierfür werden sogenannte 'Track and Hold' bzw. 'Sample and Hold' Schaltungen verwendet, welche das Eingangssignal "einfrieren" während die AD-Wandlung läuft.<br />
<br />
== Verfahren ==<br />
<br />
* '''Flash- oder Parallel-Wandler:''' verwenden für jeden Ausgangswert einen Komparator. Dadurch sind sie sehr schnell, aber auch teuer und stromhungrig. Flash-Wandler werden unter anderem in [[Oszilloskop#Digitale Oszilloskope|Digitalen Oszilloskopen]] eingesetzt.<br />
<br />
* '''Sukzessive Approximation (SAR)''': Stufenweise Annäherung, Wägeverfahren. Bezeichnet einen [[DA-Wandler]], der ausgehend von den MSBs sich iterativ Bit für Bit an die zu messende Spannung herantastet.<br />
** Der interne AD-Wandler eines [[AVR]] verwendet diese Methode<br />
<br />
* '''Single Slope, Dual Slope Verfahren:''' Werden meist in Multimetern oder ähnlichen Messgeräten verwendet da sie billig sind, wenig Strom brauchen und eine hohe Linearität besitzen. Im Prinzip wird hier die Spannungsmessung über eine Zeitmessung realisiert (Zeitmessung des Auf- und Entladen eines Kondensators).<br />
<br />
* '''Delta Sigma''': Vor allem für sehr genaue Messungen (24 Bit). Preisgünstig herstellbar und schnell, da im einfachsten Fall nur ein [[Komparator]] und Logik-Elemente benötigt werden, dafür aber sehr ungenau und können nur niedrige Frequenzen gut abbilden. Werden vor allem im Audio-Bereich eingesetzt. Siehe [[Delta-Sigma-Modulation]]<br />
<br />
* '''Spannungs-Frequenz-Umsetzer''': Hier steuert die Eingangsspannung einen Oszillator, dessen Ausgangsfrequenz möglichst linear von der Eingangsspannung abhängt (Frequenzmodulation).<br />
<br />
* '''Nachlauf-Verfahren''': Es wird auch hier ein [[DAC]] benötigt, der von einem Auf-Abwärtszähler gesteuert wird. Ein Komparator steuert ob auf- oder abwärts gezählt wird.<br />
<br />
== Kenngrößen ==<br />
<br />
Als Kenngrößen gibt es bei einem ADC bedeutend mehr als nur die [[Auflösung und Genauigkeit | Auflösung]]. Z.B. wäre es nicht schlecht, wenn er keine sogenannten 'Missing-Codes' hätte. Hier fehlen einfach gewisse Ausgangswerte, die Kennline hat Sprünge. <br />
<br />
Weiters wichtig ist die Linearität. Es kann sein, dass die Kennlinie nichtlinear ist (Kennlinie Ausgangscode-Eingangsspannung gebogen) oder aber die einzelnen Stufen sind nicht gleich groß.<br />
<br />
Außerdem wichtig sind: Eingangsrauschen, Samplingzeit und Stromverbrauch.<br />
<br />
==Praxis==<br />
<br />
=== Hohe Spannungen messen ===<br />
<br />
Will man einen AD-Wandler dazu nutzen große Spannungen zu messen, so behilft man sich mit einem [[Spannungsteiler]] nach Masse. So wird erreicht, dass die maximale Eingangsspannung bzw. Referenzspannung des AD-Wandlers nicht überschritten wird. Über das bekannte Widerstandsverhältnis kann dann per Software vom AD-Wert auf die gemessene Spannung zurückgeschlossen werden.<br />
<br />
* [https://www.mikrocontroller.net/topic/552328#7374604 Forumsbeitrag]: Wie beeinfluss ein ADC eines Prozessors einen Spannungsteiler?<br />
<br />
Für professionelle Messungen im kV-Bereich gibt es Wandler nach dem Delta-Sigma-Prinzip, die das auf der Hochspannungsseite-Seite gewonnene Signal über eine galvanische Entkopplung auf eine digitale Seite transformieren, wo es mit Standard 3.3V Technik ohne weitere Schutzbeschaltung und Erdungsproblem verarbeitet werden kann.<br />
<br />
=== Negative Spannungen messen ===<br />
<br />
Will man nun negative Spannungen messen, steht man vor dem Problem, den AD-Wandler keinen negativen Spannungen aussetzen zu dürfen. Hier hilft auch ein [[Spannungsteiler]] nach Masse nicht weiter. Es ist jedoch genausogut möglich, einen Spannungsteiler auf eine positive Spannung, z.&nbsp;B. die Betriebsspannung des AD-Wandlers zu beziehen. Um verlässliche Messwerte zu erhalten, darf die Bezugsspannung nicht schwanken, sollte also z.&nbsp;B. von einem Spannungsregler oder besser noch von einer [[Spannungsreferenz]] wie z.&nbsp;B. LM336 erzeugt werden.<br />
<br />
<pre><br />
Vcc<br />
---<br />
|<br />
+-+<br />
| | R1<br />
+-+<br />
|<br />
+---o Uadc<br />
|<br />
+-+<br />
| | R2<br />
+-+<br />
|<br />
Uin- o---+<br />
</pre><br />
<br />
<math>\mathrm{U_{adc}=(V_{CC}-U_{in-}) \cdot \frac{R_2}{R_1+R_2} + U_{in-}}</math><br />
<br />
<math>\mathrm{U_{in-}=\frac{U_{adc}-V_{CC} \cdot \frac{R_2}{R_1+R_2}}{1-\frac{R_2}{R_1+R_2}}}</math><br />
<br />
Bei differentieller Messung sind Bezugsspannungsschwankungen theoretisch kein Problem, praktisch bildet man aber eine Art Wheatstone-Brücke nach, sodass durch die Toleranzen der Widerstände große Abweichungen auftreten können, wenn sich die Bezugsspannung ändert (z.&nbsp;B. Batteriebetrieb).<br />
<br />
Siehe auch im Forum:<br />
*[http://www.mikrocontroller.net/forum/read-1-173727.html Mit AD-Wandler negative Spannungen messen]<br />
*[http://www.mikrocontroller.net/topic/78480 Vcc gegen interne Referenz messen] (AVR)<br />
*[http://www.mikrocontroller.net/topic/214334#2131984 Forumsbeitrag]: Berechung der Auflösung und des Messwerts, immer durch 2^N und nicht 2^N-1<br />
*[http://www.mikrocontroller.net/topic/261692#2715803 Forumsbeitrag] Warum man manchmal auch durch 2^N-1 dividieren will<br />
<br />
=== Wechselspannung mit AC-Kopplung messen ===<br />
<br />
In manchen Fällen, zum Beispiel bei Audio-Signalen, interessiert man sich nicht für den Gleichspannungsanteil (DC), sondern nur für den Wechselspannungsanteil (AC) eines Signals. In diesem Fall kann man durch einen Kondensator in Reihe eine sogenannte AC-Kopplung herstellen. Näheres dazu im Beitrag [http://www.mikrocontroller.net/topic/90989#new AC Kopplung wie groß muss der Kondensator sein?].<br />
<br />
=== Genaues Messen und Fixed-Point Arithmetik ===<br />
<br />
Siehe Forumsbeitrag [http://www.mikrocontroller.net/topic/170454#1630106 ADC und Fixed-Point Arithmetik] von Bernd N. und den Artikel [[Festkommaarithmetik]].<br />
<br />
Zitierte Appnotes:<br />
* [http://www.atmel.com/dyn/resources/prod_documents/doc2559.pdf AVR120: Characterization and Calibration of the ADC on an AVR] (PDF)<br />
* [http://www.atmel.com/dyn/resources/prod_documents/doc8003.pdf AVR121: Enhancing ADC resolution by oversampling] (PDF)<br />
<br />
== Externe AD-Wandler Bausteine ==<br />
=== ADC I2C/TWI BUS === <br />
* [http://www.mikrocontroller.net/topic/182614 12x12 Bit ADC MAX1238]<br />
* [http://www.mikrocontroller.net/topic/182614 12x10 Bit ADC MAX1138]<br />
* [http://www.jtronics.de/platinen.html 12x8 Bit ADC MAX1038]<br />
* [http://www.maxim-ic.com/datasheet/index.mvp/id/1890 8 x 12bit ADC MAX127]<br />
* [https://www.mouser.de/Semiconductors/Data-Converter-ICs/Analog-to-Digital-Converters-ADC/_/N-4c43g?P=1z0xwy0Z1yzr5ztZ1yyhncqZ1z0z7by Mouser in TSSOP/SOT/MSOP]<br />
* [https://www.tme.eu/en/katalog/#id_category=112877&s_field=artykul&s_order=DESC&visible_params=2%2C10%2C35%2C35%2C120%2C367%2C367%2C375%2C375%2C381%2C382%2C383%2C804&used_params=35%3A1517%2C1415%2C1406%2C1505%2C1516%3B367%3A53642%3B375%3A1508%3B TME in TSSOP/SOT/MSOP]<br />
<br />
=== ADC SPI BUS === <br />
* [http://www.mikrocontroller.net/part/TLC549 1x8 Bit TLC549], sukzessive Approximation<br />
* [http://www.mikrocontroller.net/part/MCP3551 1x22 Bit MCP3551], Delta Sigma<br />
* [https://www.mikrocontroller.net/part/MCP3208 8x12 Bit MCP3208], auch als 4 oder 1 Kanal Version MCP3204 bzw. MCP3201<br />
<br />
=== ADC UART BUS === <br />
* 4x16 Bit ADC ADS112U04, Delta Sigma<br />
* 4x24 Bit ADC ADS122U04, Delta Sigma<br />
<br />
=== ADC CAN BUS === <br />
*<br />
<br />
== Weblinks ==<br />
<br />
* [http://www.tu-ilmenau.de/mhe/lehre/interfacetechnik/ Vorlesung Interfacetechnik] von Dr.-Ing. Norbert Hirt an der TU Ilmenau<br />
* [http://www.ti.com/tool/adcpro Simulationssoftware für AD Wandler]<br />
<br />
[[Category:Bauteile]]<br />
* [http://www.embedded.com/design/212101523 The ABC's of A-D converter latency] by Bonnie Baker, Texas Instruments (via Embedded.com)<br />
* [http://www.embedded.com/design/multicore/217700911?printable=true Writing software drivers for analog to digital converters], By Mark Thoren and Leo Chen, Linear Technology Corp., Embedded.com, ([[I2C]])</div>Engineerhttps://www.mikrocontroller.net/index.php?title=AD-Wandler&diff=105997AD-Wandler2023-04-01T21:55:23Z<p>Engineer: /* Verfahren */</p>
<hr />
<div>Die Abkürzung AD-Wandler steht für '''A'''nalog-'''D'''igital-'''W'''andler (teilweise auch ADU, Analog-Digital-Umsetzer; im Englischen ADC Analog-Digital-Converter). Dieser wandelt eine [[analog|analoge]] Größe, meist eine Spannung, in einen [[digital|digitalen]] Wert um. Das Gegenstück ist der [[DA-Wandler]].<br />
<br />
== Eigenschaften ==<br />
<br />
Die Auflösung, mit der die analoge Größe dargestellt wird, bewegt sich typisch zwischen 1 (einfacher Komparator, Ein-Bit-Audio, PDC) und 24 [[Digitaltechnik|Bit]] - in Sonderfällen noch mehr. Den, durch die Wandlung entstehenden Fehler zwischen dem tatsächlichen Wert und dem ausgegebenen (gewandelten) Wert, nennt man [[Quantisierung|Quantisierungsfehler]]. Er entsteht durch die unvermeidbare Rundung und die Art der Wandlung. So entstehen durch die Nichtlinearität der Bauteile ebenfalls Fehler, wodurch die theoretisch möglichen Auflösungen der Messprinzipien niemals erreicht werden.<br />
<br />
Der Wandlungsvorgang benötigt immer eine gewisse Zeit, während der die Eingangsgröße konstant bleiben muss. Das gilt insbesondere für alle iterativen Wandlungsprinzipien. Aber selbst für den direkt wandelnden Flash-ADC, da nicht alle dort benutzten Komparatoren gleich schnell sind. Hierfür werden sogenannte 'Track and Hold' bzw. 'Sample and Hold' Schaltungen verwendet, welche das Eingangssignal "einfrieren" während die AD-Wandlung läuft.<br />
<br />
== Verfahren ==<br />
<br />
* '''Flash- oder Parallel-Wandler:''' verwenden für jeden Ausgangswert einen Komparator. Dadurch sind sie sehr schnell, aber auch teuer und stromhungrig. Flash-Wandler werden unter anderem in [[Oszilloskop#Digitale Oszilloskope|Digitalen Oszilloskopen]] eingesetzt.<br />
<br />
* '''Sukzessive Approximation (SAR)''': Stufenweise Annäherung, Wägeverfahren. Bezeichnet einen [[DA-Wandler]], der ausgehend von den MSBs sich iterativ Bit für Bit an die zu messende Spannung herantastet.<br />
** Der interne AD-Wandler eines [[AVR]] verwendet diese Methode<br />
<br />
* '''Single Slope, Dual Slope Verfahren:''' Werden meist in Multimetern oder ähnlichen Messgeräten verwendet da sie billig sind, wenig Strom brauchen und eine hohe Linearität besitzen. Im Prinzip wird hier die Spannungsmessung über eine Zeitmessung realisiert (Zeitmessung des Auf- und Entladen eines Kondensators).<br />
<br />
* '''Delta Sigma''': Vor allem für sehr genaue Messungen (24 Bit). Preisgünstig herstellbar und schnell, da im einfachsten Fall nur ein [[Komparator]] und Logik-Elemente benötigt werden, dafür aber sehr ungenau und können nur niedrige Frequenzen gut abbilden. Werden vor allem im Audio-Bereich eingesetzt. Siehe [[Delta-Sigma-Modulation]]<br />
<br />
* '''Spannungs-Frequenz-Umsetzer''': Hier steuert die Eingangsspannung einen Oszillator, dessen Ausgangsfrequenz möglichst linear von der Eingangsspannung abhängt (Frequenzmodulation).<br />
<br />
* '''Nachlauf-Verfahren''': Es wird auch hier ein [[DAC]] benötigt, der von einem Auf-Abwärtszähler gesteuert wird. Ein Komparator steuert ob auf- oder abwärts gezählt wird.<br />
<br />
== Kenngrößen ==<br />
<br />
Als Kenngrößen gibt es bei einem ADC bedeutend mehr als nur die [[Auflösung und Genauigkeit | Auflösung]]. Z.B. wäre es nicht schlecht, wenn er keine sogenannten 'Missing-Codes' hätte. Hier fehlen einfach gewisse Ausgangswerte, die Kennline hat Sprünge. <br />
<br />
Weiters wichtig ist die Linearität. Es kann sein, dass die Kennlinie nichtlinear ist (Kennlinie Ausgangscode-Eingangsspannung gebogen) oder aber die einzelnen Stufen sind nicht gleich groß.<br />
<br />
Außerdem wichtig sind: Eingangsrauschen, Samplingzeit und Stromverbrauch.<br />
<br />
==Praxis==<br />
<br />
=== Hohe Spannungen messen ===<br />
<br />
Will man einen AD-Wandler dazu nutzen große Spannungen zu messen, so behilft man sich mit einem [[Spannungsteiler]] nach Masse. So wird erreicht, dass die maximale Eingangsspannung bzw. Referenzspannung des AD-Wandlers nicht überschritten werden. Über das bekannte Widerstandsverhältnis kann dann per Software vom AD-Wert auf die gemessene Spannung zurückgeschlossen werden.<br />
<br />
* [https://www.mikrocontroller.net/topic/552328#7374604 Forumsbeitrag]: Wie beeinfluss ein ADC eines Prozessors einen Spannungsteiler?<br />
<br />
=== Negative Spannungen messen ===<br />
<br />
Will man nun negative Spannungen messen, steht man vor dem Problem, den AD-Wandler keinen negativen Spannungen aussetzen zu dürfen. Hier hilft auch ein [[Spannungsteiler]] nach Masse nicht weiter. Es ist jedoch genausogut möglich, einen Spannungsteiler auf eine positive Spannung, z.&nbsp;B. die Betriebsspannung des AD-Wandlers zu beziehen. Um verlässliche Messwerte zu erhalten, darf die Bezugsspannung nicht schwanken, sollte also z.&nbsp;B. von einem Spannungsregler oder besser noch von einer [[Spannungsreferenz]] wie z.&nbsp;B. LM336 erzeugt werden.<br />
<br />
<pre><br />
Vcc<br />
---<br />
|<br />
+-+<br />
| | R1<br />
+-+<br />
|<br />
+---o Uadc<br />
|<br />
+-+<br />
| | R2<br />
+-+<br />
|<br />
Uin- o---+<br />
</pre><br />
<br />
<math>\mathrm{U_{adc}=(V_{CC}-U_{in-}) \cdot \frac{R_2}{R_1+R_2} + U_{in-}}</math><br />
<br />
<math>\mathrm{U_{in-}=\frac{U_{adc}-V_{CC} \cdot \frac{R_2}{R_1+R_2}}{1-\frac{R_2}{R_1+R_2}}}</math><br />
<br />
Bei differentieller Messung sind Bezugsspannungsschwankungen theoretisch kein Problem, praktisch bildet man aber eine Art Wheatstone-Brücke nach, sodass durch die Toleranzen der Widerstände große Abweichungen auftreten können, wenn sich die Bezugsspannung ändert (z.&nbsp;B. Batteriebetrieb).<br />
<br />
Siehe auch im Forum:<br />
*[http://www.mikrocontroller.net/forum/read-1-173727.html Mit AD-Wandler negative Spannungen messen]<br />
*[http://www.mikrocontroller.net/topic/78480 Vcc gegen interne Referenz messen] (AVR)<br />
*[http://www.mikrocontroller.net/topic/214334#2131984 Forumsbeitrag]: Berechung der Auflösung und des Messwerts, immer durch 2^N und nicht 2^N-1<br />
*[http://www.mikrocontroller.net/topic/261692#2715803 Forumsbeitrag] Warum man manchmal auch durch 2^N-1 dividieren will<br />
<br />
=== Wechselspannung mit AC-Kopplung messen ===<br />
<br />
In manchen Fällen, zum Beispiel bei Audio-Signalen, interessiert man sich nicht für den Gleichspannungsanteil (DC), sondern nur für den Wechselspannungsanteil (AC) eines Signals. In diesem Fall kann man durch einen Kondensator in Reihe eine sogenannte AC-Kopplung herstellen. Näheres dazu im Beitrag [http://www.mikrocontroller.net/topic/90989#new AC Kopplung wie groß muss der Kondensator sein?].<br />
<br />
=== Genaues Messen und Fixed-Point Arithmetik ===<br />
<br />
Siehe Forumsbeitrag [http://www.mikrocontroller.net/topic/170454#1630106 ADC und Fixed-Point Arithmetik] von Bernd N. und den Artikel [[Festkommaarithmetik]].<br />
<br />
Zitierte Appnotes:<br />
* [http://www.atmel.com/dyn/resources/prod_documents/doc2559.pdf AVR120: Characterization and Calibration of the ADC on an AVR] (PDF)<br />
* [http://www.atmel.com/dyn/resources/prod_documents/doc8003.pdf AVR121: Enhancing ADC resolution by oversampling] (PDF)<br />
<br />
== Externe AD-Wandler Bausteine ==<br />
=== ADC I2C/TWI BUS === <br />
* [http://www.mikrocontroller.net/topic/182614 12x12 Bit ADC MAX1238]<br />
* [http://www.mikrocontroller.net/topic/182614 12x10 Bit ADC MAX1138]<br />
* [http://www.jtronics.de/platinen.html 12x8 Bit ADC MAX1038]<br />
* [http://www.maxim-ic.com/datasheet/index.mvp/id/1890 8 x 12bit ADC MAX127]<br />
* [https://www.mouser.de/Semiconductors/Data-Converter-ICs/Analog-to-Digital-Converters-ADC/_/N-4c43g?P=1z0xwy0Z1yzr5ztZ1yyhncqZ1z0z7by Mouser in TSSOP/SOT/MSOP]<br />
* [https://www.tme.eu/en/katalog/#id_category=112877&s_field=artykul&s_order=DESC&visible_params=2%2C10%2C35%2C35%2C120%2C367%2C367%2C375%2C375%2C381%2C382%2C383%2C804&used_params=35%3A1517%2C1415%2C1406%2C1505%2C1516%3B367%3A53642%3B375%3A1508%3B TME in TSSOP/SOT/MSOP]<br />
<br />
=== ADC SPI BUS === <br />
* [http://www.mikrocontroller.net/part/TLC549 1x8 Bit TLC549], sukzessive Approximation<br />
* [http://www.mikrocontroller.net/part/MCP3551 1x22 Bit MCP3551], Delta Sigma<br />
* [https://www.mikrocontroller.net/part/MCP3208 8x12 Bit MCP3208], auch als 4 oder 1 Kanal Version MCP3204 bzw. MCP3201<br />
<br />
=== ADC UART BUS === <br />
* 4x16 Bit ADC ADS112U04, Delta Sigma<br />
* 4x24 Bit ADC ADS122U04, Delta Sigma<br />
<br />
=== ADC CAN BUS === <br />
*<br />
<br />
== Weblinks ==<br />
<br />
* [http://www.tu-ilmenau.de/mhe/lehre/interfacetechnik/ Vorlesung Interfacetechnik] von Dr.-Ing. Norbert Hirt an der TU Ilmenau<br />
* [http://www.ti.com/tool/adcpro Simulationssoftware für AD Wandler]<br />
<br />
[[Category:Bauteile]]<br />
* [http://www.embedded.com/design/212101523 The ABC's of A-D converter latency] by Bonnie Baker, Texas Instruments (via Embedded.com)<br />
* [http://www.embedded.com/design/multicore/217700911?printable=true Writing software drivers for analog to digital converters], By Mark Thoren and Leo Chen, Linear Technology Corp., Embedded.com, ([[I2C]])</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Halbleiter&diff=105996Halbleiter2023-04-01T21:47:39Z<p>Engineer: /* Eigenschaften */ Analogiemodell</p>
<hr />
<div>'''Halbleiter''' ist eine Bezeichnung für eine spezielle Gruppe elektronischer Bauelemente, die sich durch ein kompliziertes Durchlaß- und Schaltverhalten auszeichnet.<br />
<br />
== Anwendung ==<br />
Weite Teile der heutigen Elektronik beruhen auf der Verwendung von Halbleitern. Nahezu alle aktiven Bauelemente sind Halbleiter. Wesentlich ist bei vielen Halbleitern ihre Fähigkeit, geschaltet zu werden. Damit können sie in der [[Digitaltechnik]] für Logikschaltungen und in der [[Analog]]technik als [[Verstärker]] eingesetzt werden.<br />
<br />
== Typen ==<br />
* [[Diode]]<br />
* [[Transistor]]<br />
* [[TRIAC]]<br />
* Thyristor<br />
* integrierte Schaltungen (ICs)<br />
* [[Mikrocontroller]]<br />
<br />
== Eigenschaften ==<br />
<br />
=== Leitfähigkeit ===<br />
Halbleiter besitzen eine gegensätzliche Form der Leitfähigkeit als Metalle, was an der besonderen Art der Verteilung der Ladungsträgerkonzentration liegt. Bei Metallen ist das Metallgitter (Valenz- und Leitungsband) mit Elektronen gesättigt, sodass nur Elektronen (im Leitungsband) zur Leitung betragen. Bei Halbleitern ist die Konzentration sehr viel geringer, sodass nur sehr wenige Elektronen im Leitungsband vorliegen und auch im Valenzband noch freie Plätze existieren. Damit tragen beide Bänder zur Leitung bei. (Im Valenzband interpretiert man die Bewegung der Elektronen auch als Wandern von Löchern). Dies erklärt auch, dass die Leitfähigkeit im Gegensatz zu Metallen mit der Temperatur steigt (Heißleiter), da durch die Temperaturerhöhung mehr Elektronen ins Leitungsband gelangen und so ein Ladungsträgerpaar generiert wird. (Ein leitendes Elektron mehr und zudem ein weiterer Platz frei für wandernde Elektronen).<br />
<br />
==== Analogiemodell ====<br />
Das Verhalten der Elektronen und der Leitfähigkeit wird in der Literatur gerne mit einem sogenannten "Garagenmodell" erklärt - lässt sich aber an folgender Situation einfacher und vollständiger darstellen, welche ich Theatermodell nenne:<br />
<br />
Ein metallischer Leiter verhält sich wie ein vollbesetztes Theater, bei dem alle Stühle im Zuschauerraum besetzt sind und in den Zwischenräumen zudem noch viele Personen stehen. Ein Laufen ist nur schwer möglich, ein Rücken auf den Sitzen praktisch gar nicht. Bei Erwärmung = Bewegung, können nur wenige Personen aufstehen, die Stühle werden aber sofort wieder besetzt und durch die Bewegung wird ein geordnetes Fortkommen der stehenden Personen sogar behindert. Die Leitfähigkeit sinkt insgesamt. Wird es sehr kalt, steht niemand mehr auf, in den Gängen ist mehr geordnetes Fortkommen möglich, was die Leitfähigkeit verbessert.<br />
<br />
Ein intrinsischer Halbleiter beim absoluten Gefrierpunkt ist ein Theater mit 100% besetzten Plätzen, in dem aber niemand steht. Bei Zimmertemperatur stehen 10% in den Gängen und 90% sitzen. Schon in diesem Zustand können einige Personen ungehindert durch die Gänge laufen und die Sitzenden von Stuhl zu Stuhl rücken. Dabei ist das Laufen leichter und schneller, als das Umsetzen. Alle Personen rücken dabei nach links, die Plätze damit nach rechts. Durch die vielen besetzten Plätze nimmt man primär ein Rücken von Löchern wahr. Bei Erwärmung stehen noch mehr Personen von ihren Plätzen auf. Sie verstopfen aber noch lange keine Gänge, sondern tragen unmittelbar zur besseren Leitung bei, ohne andere zu behindern. Durch den freiwerdenden Platz können obendrein nun noch mehr sitzende Personen rücken. Es entstehen schlagartig zwei Ladungsträger.<br />
<br />
Ein n-dotierter Halbleiter hat bei Zimmertemperatur 120% Personen, davon sitzen 95% und 25% stehen. Der Großteil (hier 25 von 30) der Leitung wird durch Personen bewerkstelligt, die durch die Gänge an den sitzenden Personen vorbeilaufen. Da das Umsetzen umständlicher ist, tragen die 5% freien Plätze nur wenig zur Leitfähigkeit bei.<br />
<br />
Ein p-dotierter Halbleiter hat bei Zimmertemperatur 80% Personen, davon sitzen 75% und 5% stehen. Der Großteil der Leitung wird durch sitzende Personen bewerkstelligt, da nur wenige Personen stehen und laufen. Obwohl das Umsetzen umständlicher ist, macht es einen größeren Anteil aus, weil von 100% Plätzen immer 25% frei sind und jede 4. Person einen Platz zum Rücken hat.<br />
<br />
== Wichtige Halbleitermaterialien ==<br />
* Si – Silizium, das am weitesten verwendete Material (engl. ''silicon'', das bedeutet ''nicht'' Silikon – letzteres ist ''silicon<u>e</u>'' im Englischen)<br />
* GaAs – Galliumarsenid, für Höchstfrequenzanwendungen<br />
* InP – Indiumphosphid, für [[LED]]s<br />
* Ge – Germanium, war das erste großindustriell genutzte Halbleitermaterial, heute nur noch in Nischenanwendungen<br />
* GaP – Galliumphosphid, für LEDs<br />
* InSb – [https://de.wikipedia.org/wiki/Indiumantimonid Indiumantimonid], für Höchstfrequenzanwendungen, noch im Forschungsstadium<br />
* SiC – [https://de.wikipedia.org/wiki/Siliciumcarbid#Halbleitermaterial Siliziumkarbid], für Hochtemperaturanwendungen im Bereich 200…300&nbsp;°C, für effiziente Leistungselektronik<br />
* GaN – [https://de.wikipedia.org/wiki/Galliumnitrid#Einsatzgebiete Galliumnitrid], für LEDs, für hochtaktende effiziente Leistungselektronik<br />
<br />
== Dotieren ==<br />
<br />
Um die Ladungsträgerkonzentration und damit die Leitfähigkeit von Halbleitern zu steuern, bringt man gezielt Fremdatome in das Material ein; diesen Vorgang nennt man "Dotieren". Bei den Fremdatomen unterscheidet man zwischen "Donatoren", die ein Elektron zur Verfügung stellen, und "Akzeptoren", die ein Elektron aufnehmen können (bzw. ein "Loch" zur Verfügung stellen.) Einen überwiegend mit Donatoren dotierten Halbleiter bezeichnet man als n-Halbleiter, einen überwiegend mit Akzeptoren dotierten als p-Halbleiter. Undotierte Halbleiter werden auch "intrinsische Halbleiter" genannt.<br />
<br />
Üblicherweise zum Dotieren verwendete Elemente:<br />
<br />
* Donatoren<br />
** P - Phosphor<br />
** As - Arsen<br />
** Sb - Zinn<br />
** Si - Silizium<br />
** S - Schwefel<br />
<br />
* Akzeptoren<br />
** B - Bor<br />
** Al - Aluminium<br />
** Ga - Gallium<br />
** C - Kohlenstoff<br />
** Si - Silizium<br />
** Mn - Mangan<br />
<br />
(Si kann in GaAs je nach Einbauplatz als Donator oder Akzeptor wirken)<br />
<br />
== Externe Links ==<br />
* [https://de.wikipedia.org/wiki/Halbleiter Artikel Halbleiter bei Wikipedia]<br />
<br />
[[Category:Grundlagen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Halbleiter&diff=105995Halbleiter2023-04-01T21:18:38Z<p>Engineer: /* Dotieren */</p>
<hr />
<div>'''Halbleiter''' ist eine Bezeichnung für eine spezielle Gruppe elektronischer Bauelemente, die sich durch ein kompliziertes Durchlaß- und Schaltverhalten auszeichnet.<br />
<br />
== Anwendung ==<br />
Weite Teile der heutigen Elektronik beruhen auf der Verwendung von Halbleitern. Nahezu alle aktiven Bauelemente sind Halbleiter. Wesentlich ist bei vielen Halbleitern ihre Fähigkeit, geschaltet zu werden. Damit können sie in der [[Digitaltechnik]] für Logikschaltungen und in der [[Analog]]technik als [[Verstärker]] eingesetzt werden.<br />
<br />
== Typen ==<br />
* [[Diode]]<br />
* [[Transistor]]<br />
* [[TRIAC]]<br />
* Thyristor<br />
* integrierte Schaltungen (ICs)<br />
* [[Mikrocontroller]]<br />
<br />
== Eigenschaften ==<br />
<br />
Halbleiter besitzen eine gegensätzliche Form der Leitfähigkeit als Metalle, was an der besonderen Art der Verteilung der Ladungsträgerkonzentration liegt. Bei Metallen ist das Metallgitter (Valenz- und Leitungsband) mit Elektronen gesättigt, sodass nur Elektronen (im Leitungsband) zur Leitung betragen. Bei Halbleitern ist die Konzentration sehr viel geringer, sodass nur sehr wenige Elektronen im Leitungsband vorliegen und auch im Valenzband noch freie Plätze existieren. Damit tragen beide Bänder zur Leitung bei. (Im Valenzband interpretiert man die Bewegung der Elektronen auch als Wandern von Löchern). Dies erklärt auch, dass die Leitfähigkeit im Gegensatz zu Metallen mit der Temperatur steigt (Heißleiter), da durch die Temperaturerhöhung mehr Elektronen ins Leitungsband gelangen und so ein Ladungsträgerpaar generiert wird. (Ein leitendes Elektron mehr und zudem ein weiterer Platz frei für wandernde Elektronen).<br />
<br />
Wichtige Halbleitermaterialien:<br />
* Si – Silizium, das am weitesten verwendete Material (engl. ''silicon'', das bedeutet ''nicht'' Silikon – letzteres ist ''silicon<u>e</u>'' im Englischen)<br />
* GaAs – Galliumarsenid, für Höchstfrequenzanwendungen<br />
* InP – Indiumphosphid, für [[LED]]s<br />
* Ge – Germanium, war das erste großindustriell genutzte Halbleitermaterial, heute nur noch in Nischenanwendungen<br />
* GaP – Galliumphosphid, für LEDs<br />
* InSb – [https://de.wikipedia.org/wiki/Indiumantimonid Indiumantimonid], für Höchstfrequenzanwendungen, noch im Forschungsstadium<br />
* SiC – [https://de.wikipedia.org/wiki/Siliciumcarbid#Halbleitermaterial Siliziumkarbid], für Hochtemperaturanwendungen im Bereich 200…300&nbsp;°C, für effiziente Leistungselektronik<br />
* GaN – [https://de.wikipedia.org/wiki/Galliumnitrid#Einsatzgebiete Galliumnitrid], für LEDs, für hochtaktende effiziente Leistungselektronik<br />
<br />
== Dotieren ==<br />
<br />
Um die Ladungsträgerkonzentration und damit die Leitfähigkeit von Halbleitern zu steuern, bringt man gezielt Fremdatome in das Material ein; diesen Vorgang nennt man "Dotieren". Bei den Fremdatomen unterscheidet man zwischen "Donatoren", die ein Elektron zur Verfügung stellen, und "Akzeptoren", die ein Elektron aufnehmen können (bzw. ein "Loch" zur Verfügung stellen.) Einen überwiegend mit Donatoren dotierten Halbleiter bezeichnet man als n-Halbleiter, einen überwiegend mit Akzeptoren dotierten als p-Halbleiter. Undotierte Halbleiter werden auch "intrinsische Halbleiter" genannt.<br />
<br />
Üblicherweise zum Dotieren verwendete Elemente:<br />
<br />
* Donatoren<br />
** P - Phosphor<br />
** As - Arsen<br />
** Sb - Zinn<br />
** Si - Silizium<br />
** S - Schwefel<br />
<br />
* Akzeptoren<br />
** B - Bor<br />
** Al - Aluminium<br />
** Ga - Gallium<br />
** C - Kohlenstoff<br />
** Si - Silizium<br />
** Mn - Mangan<br />
<br />
(Si kann in GaAs je nach Einbauplatz als Donator oder Akzeptor wirken)<br />
<br />
== Externe Links ==<br />
* [https://de.wikipedia.org/wiki/Halbleiter Artikel Halbleiter bei Wikipedia]<br />
<br />
[[Category:Grundlagen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Halbleiter&diff=105994Halbleiter2023-04-01T21:16:55Z<p>Engineer: /* Eigenschaften */ Korrekte Erklärung</p>
<hr />
<div>'''Halbleiter''' ist eine Bezeichnung für eine spezielle Gruppe elektronischer Bauelemente, die sich durch ein kompliziertes Durchlaß- und Schaltverhalten auszeichnet.<br />
<br />
== Anwendung ==<br />
Weite Teile der heutigen Elektronik beruhen auf der Verwendung von Halbleitern. Nahezu alle aktiven Bauelemente sind Halbleiter. Wesentlich ist bei vielen Halbleitern ihre Fähigkeit, geschaltet zu werden. Damit können sie in der [[Digitaltechnik]] für Logikschaltungen und in der [[Analog]]technik als [[Verstärker]] eingesetzt werden.<br />
<br />
== Typen ==<br />
* [[Diode]]<br />
* [[Transistor]]<br />
* [[TRIAC]]<br />
* Thyristor<br />
* integrierte Schaltungen (ICs)<br />
* [[Mikrocontroller]]<br />
<br />
== Eigenschaften ==<br />
<br />
Halbleiter besitzen eine gegensätzliche Form der Leitfähigkeit als Metalle, was an der besonderen Art der Verteilung der Ladungsträgerkonzentration liegt. Bei Metallen ist das Metallgitter (Valenz- und Leitungsband) mit Elektronen gesättigt, sodass nur Elektronen (im Leitungsband) zur Leitung betragen. Bei Halbleitern ist die Konzentration sehr viel geringer, sodass nur sehr wenige Elektronen im Leitungsband vorliegen und auch im Valenzband noch freie Plätze existieren. Damit tragen beide Bänder zur Leitung bei. (Im Valenzband interpretiert man die Bewegung der Elektronen auch als Wandern von Löchern). Dies erklärt auch, dass die Leitfähigkeit im Gegensatz zu Metallen mit der Temperatur steigt (Heißleiter), da durch die Temperaturerhöhung mehr Elektronen ins Leitungsband gelangen und so ein Ladungsträgerpaar generiert wird. (Ein leitendes Elektron mehr und zudem ein weiterer Platz frei für wandernde Elektronen).<br />
<br />
Wichtige Halbleitermaterialien:<br />
* Si – Silizium, das am weitesten verwendete Material (engl. ''silicon'', das bedeutet ''nicht'' Silikon – letzteres ist ''silicon<u>e</u>'' im Englischen)<br />
* GaAs – Galliumarsenid, für Höchstfrequenzanwendungen<br />
* InP – Indiumphosphid, für [[LED]]s<br />
* Ge – Germanium, war das erste großindustriell genutzte Halbleitermaterial, heute nur noch in Nischenanwendungen<br />
* GaP – Galliumphosphid, für LEDs<br />
* InSb – [https://de.wikipedia.org/wiki/Indiumantimonid Indiumantimonid], für Höchstfrequenzanwendungen, noch im Forschungsstadium<br />
* SiC – [https://de.wikipedia.org/wiki/Siliciumcarbid#Halbleitermaterial Siliziumkarbid], für Hochtemperaturanwendungen im Bereich 200…300&nbsp;°C, für effiziente Leistungselektronik<br />
* GaN – [https://de.wikipedia.org/wiki/Galliumnitrid#Einsatzgebiete Galliumnitrid], für LEDs, für hochtaktende effiziente Leistungselektronik<br />
<br />
== Dotieren ==<br />
<br />
Um die Ladungsträgerkonzentration und damit die Leitfähigkeit von Halbleitern zu erhöhen, bringt man gezielt Fremdatome in das Material ein; diesen Vorgang nennt man "Dotieren". Bei den Fremdatomen unterscheidet man zwischen "Donatoren", die ein Elektron zur Verfügung stellen, und "Akzeptoren", die ein Elektron aufnehmen können (bzw. ein "Loch" zur Verfügung stellen. Einen überwiegend mit Donatoren dotierten Halbleiter bezeichnet man als n-Halbleiter, einen überwiegend mit Akzeptoren dotierten als p-Halbleiter. Undotierte Halbleiter werden auch "intrinsische Halbleiter" genannt.<br />
<br />
Üblicherweise zum Dotieren verwendete Elemente:<br />
<br />
* Donatoren<br />
** P - Phosphor<br />
** As - Arsen<br />
** Sb - Zinn<br />
** Si - Silizium<br />
** S - Schwefel<br />
* Akzeptoren<br />
** B - Bor<br />
** Al - Aluminium<br />
** Ga - Gallium<br />
** C - Kohlenstoff<br />
** Si - Silizium<br />
** Mn - Mangan<br />
<br />
(Si kann in GaAs je nach Einbauplatz als Donator oder Akzeptor wirken)<br />
<br />
== Externe Links ==<br />
* [https://de.wikipedia.org/wiki/Halbleiter Artikel Halbleiter bei Wikipedia]<br />
<br />
[[Category:Grundlagen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Halbleiter&diff=105993Halbleiter2023-04-01T21:09:12Z<p>Engineer: Singular und Plural zweimal vertauscht</p>
<hr />
<div>'''Halbleiter''' ist eine Bezeichnung für eine spezielle Gruppe elektronischer Bauelemente, die sich durch ein kompliziertes Durchlaß- und Schaltverhalten auszeichnet.<br />
<br />
== Anwendung ==<br />
Weite Teile der heutigen Elektronik beruhen auf der Verwendung von Halbleitern. Nahezu alle aktiven Bauelemente sind Halbleiter. Wesentlich ist bei vielen Halbleitern ihre Fähigkeit, geschaltet zu werden. Damit können sie in der [[Digitaltechnik]] für Logikschaltungen und in der [[Analog]]technik als [[Verstärker]] eingesetzt werden.<br />
<br />
== Typen ==<br />
* [[Diode]]<br />
* [[Transistor]]<br />
* [[TRIAC]]<br />
* Thyristor<br />
* integrierte Schaltungen (ICs)<br />
* [[Mikrocontroller]]<br />
<br />
== Eigenschaften ==<br />
<br />
Halbleiter besitzen eine geringere Leitfähigkeit als normale Metalle, was an der viel niedrigeren Ladungsträgerkonzentration liegt. Ein weiteres Merkmal ist, dass die Leitfähigkeit im Gegensatz zu Metallen mit der Temperatur steigt (Heißleiter), da durch die Temperaturerhöhung mehr Ladungsträger aktiviert werden.<br />
<br />
Wichtige Halbleitermaterialien:<br />
* Si – Silizium, das am weitesten verwendete Material (engl. ''silicon'', das bedeutet ''nicht'' Silikon – letzteres ist ''silicon<u>e</u>'' im Englischen)<br />
* GaAs – Galliumarsenid, für Höchstfrequenzanwendungen<br />
* InP – Indiumphosphid, für [[LED]]s<br />
* Ge – Germanium, war das erste großindustriell genutzte Halbleitermaterial, heute nur noch in Nischenanwendungen<br />
* GaP – Galliumphosphid, für LEDs<br />
* InSb – [https://de.wikipedia.org/wiki/Indiumantimonid Indiumantimonid], für Höchstfrequenzanwendungen, noch im Forschungsstadium<br />
* SiC – [https://de.wikipedia.org/wiki/Siliciumcarbid#Halbleitermaterial Siliziumkarbid], für Hochtemperaturanwendungen im Bereich 200…300&nbsp;°C, für effiziente Leistungselektronik<br />
* GaN – [https://de.wikipedia.org/wiki/Galliumnitrid#Einsatzgebiete Galliumnitrid], für LEDs, für hochtaktende effiziente Leistungselektronik<br />
<br />
== Dotieren ==<br />
<br />
Um die Ladungsträgerkonzentration und damit die Leitfähigkeit von Halbleitern zu erhöhen, bringt man gezielt Fremdatome in das Material ein; diesen Vorgang nennt man "Dotieren". Bei den Fremdatomen unterscheidet man zwischen "Donatoren", die ein Elektron zur Verfügung stellen, und "Akzeptoren", die ein Elektron aufnehmen können (bzw. ein "Loch" zur Verfügung stellen. Einen überwiegend mit Donatoren dotierten Halbleiter bezeichnet man als n-Halbleiter, einen überwiegend mit Akzeptoren dotierten als p-Halbleiter. Undotierte Halbleiter werden auch "intrinsische Halbleiter" genannt.<br />
<br />
Üblicherweise zum Dotieren verwendete Elemente:<br />
<br />
* Donatoren<br />
** P - Phosphor<br />
** As - Arsen<br />
** Sb - Zinn<br />
** Si - Silizium<br />
** S - Schwefel<br />
* Akzeptoren<br />
** B - Bor<br />
** Al - Aluminium<br />
** Ga - Gallium<br />
** C - Kohlenstoff<br />
** Si - Silizium<br />
** Mn - Mangan<br />
<br />
(Si kann in GaAs je nach Einbauplatz als Donator oder Akzeptor wirken)<br />
<br />
== Externe Links ==<br />
* [https://de.wikipedia.org/wiki/Halbleiter Artikel Halbleiter bei Wikipedia]<br />
<br />
[[Category:Grundlagen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Entprellung&diff=105992Entprellung2023-04-01T21:05:33Z<p>Engineer: /* Selbstsättigendes Filter (nach Jürgen Schuhmacher) */</p>
<hr />
<div>== Problembeschreibung ==<br />
Mechanische stromführende Komponenten wie Schalter und Taster neigen beim Ein- und Ausschalten zum sogenannten '''Prellen''', d.&nbsp;h. sie schalten schnell mehrfach aus und ein, was durch mechanische Vibrationen des Schaltkontaktes verursacht wird, sofern sie nicht mit aufwändigen mechanischen Maßnahmen dagegen geschützt sind. Besonders [[Drehgeber]] sind aufgrund der Rasterfunktion und der Bewegung des Bedieners dafür empfindlich. Auch optoelektronische Bauelemente und chemische Kontaktschalter sowie Flüssigkeitsschalter haben das Problem.<br />
<br />
Vereinfacht dargestellt, sieht eine von einem prellenden Schalter oder Taster geschaltete Spannung wie folgt aus:<br />
[[Bild:Entprellen.png]]<br />
<br />
Es existieren also mehrere kurze Einschaltimpulse, welche bei Tastern als Mehrfachbefehl und bei Drehgebern als falsche Winkelbewegung interpretiert werden können. Bei Schaltern wiederum kommt es in der elektronischen Baugruppe zu mehreren Resets und Einschaltvorgängen, die unnötig Strom ziehen oder im schlechtesten Fall die Schaltung stressen oder beschädigen können. Wichtige Schalter und solche, die hohe Ströme führen sollen, werden dazu mit geeigneten Maßnahmen wie Redundanz, Stufenschaltkonzepten oder bei Gas- und Flüssigkeitsschaltern durch elektrochemische Maßnahmen abgesichert. Bei einfachen Schaltern spart man sich dies jedoch.<br />
<br />
Da es bei diesen einfachen, ungeschützten Schaltern keine sichere Möglichkeit gibt, diese Effekte zu vermeiden, muss das prellende Signal sinnvoll ausgewertet werden. Dafür gibt es verschiedene Ansätze, sowohl mit Elektronik als auch mit Software, die im Folgenden vorgestellt werden.<br />
<br />
== Hardwareentprellung ==<br />
<br />
=== Prellfreie Schalter ===<br />
<br />
Wie bereits angedeutet, hält die elektromechanische Industrie für Spezialanwendungen verschiedene Sonderkonstruktionen bereit, die saubere Schaltzustände nach außen generieren, indem sie entweder eine mechanische Dämpfung in Form eines selbsthemmenden Federmechanismus oder eine integrierte elektronische Signalverzögerung benutzen. Solche Systeme sind jedoch teuer und werden meist nur im Leistungsbereich eingesetzt, wo nicht einfach nur das Signal ausgewertet werden kann. Zudem sind auch diese nicht 100%ig sicher und fallen alterungsbedingt öfters aus. Wo immer es geht, werden im Kleinsignalbereich daher Maßnahmen getroffen, die Wirkung des Prellens zu unterdrücken.<br />
<br />
=== Wechselschalter ===<br />
<br />
Für die Entprellung von Wechselschaltern (engl. ''Double Throw Switch'') kann ein klassisches RS-[[Flipflop]] genutzt werden. Bei dieser Variante werden neben zwei NAND-Gattern nur noch zwei Pull-Up-Widerstände benötigt.<br />
<br />
[[Bild:NAND_debouncer.png|thumb|left|350px|Taster entprellen mit NAND-RS-Flipflop]]<br />
<br />
{{Clear}}<br />
<br />
In der gezeigten Schalterstellung liegt an der Position /S der Pegel 0 an. Damit ist das Flipflop gesetzt und der Ausgang auf dem Pegel 1. Schließt der Schalter zwischen den Kontakten 2 und 3, liegt an der Postion /R der Pegel 0 an. Dies bedeutet, dass der Ausgang des Flipflops auf den Pegel 0 geht. Sobald der Schalter von einem zum anderen Kontakt wechselt, beginnt er in der Regel zu prellen. Während des Prellens wechselt der Schalter zwischen den beiden Zuständen „Schalter berührt Kontakt“ und „Schalter ist frei in der Luft“. Der Ausgang des Flipflops bleibt in dieser Prellzeit aber stabil, da der Schalter während des Prellens nie den gegenüberliegenden Kontakt berührt und das RS-Flipflop seinen Zustand allein halten kann. Die Prellzeit ist stark vom Schaltertyp abhängig und liegt zwischen 0,1 und 10&nbsp;ms. Die Dimensionierung der Widerstände ist relativ unkritisch. Als Richtwert können hier 100&nbsp;kΩ verwendet werden.<br />
<br />
==== Wechselschalter ohne Flipflop ====<br />
<br />
Wenn man einmal kein Flipflop zur Hand hat, kann man sich auch mit dieser Schaltung behelfen.<br />
<br />
[[Bild:WechselEntprellC.PNG|thumb|left|350px|Wechsler entprellen mit Kondensator]]<br />
<br />
{{Clear}}<br />
<br />
'''Zur Funktionsweise:'''<br />
Beim Umschalten wird der Kondensator immer sofort umgeladen.<br />
Während der Kontakt prellt, befindet er sich in der Luft und hat keinerlei Verbindung. Während dieser Zeit übernimmt der Kondensator das Halten des Pegels.<br />
<br />
'''Dimensionierung:'''<br />
Ist der entprellte Taster an ein IC angeschlossen, ist der ''Input Leakage Current'' der ausschlaggebende Strom. Falls weitere Ströme fließen sind diese mit zu berücksichtigen. Bei einem Mikrocontroller von Atmel ist 1&nbsp;µA typisch.<br />
Es gilt:<br />
:<math>\frac{\mathrm d U}{\mathrm d t} = \frac{I}{C}</math><br />
Da ein Prellen maximal ca. 10&nbsp;ms dauert und die Spannung in dieser Zeit beispielsweise um maximal 0,5&nbsp;V fallen soll, kommt man auf folgende Kapazität:<br />
:<math>C = \frac{I \cdot \Delta t}{\Delta U} = \frac{1~\text{µA} \cdot 10~\text{ms}}{\text{0,5}~\text{V}} = 20~\text{nF}</math><br />
<br />
Um Stromspitzen zu verringern kann ein Widerstand mit eingefügt werden. Eine Zeitkonstante von 1&nbsp;µs bis 1&nbsp;ms scheint sinnvoll. Also 500&nbsp;Ω bis 500&nbsp;kΩ sind nutzbar, wobei bei niedrigem Widerstand die Stromspitzen höher sind, und bei 500&nbsp;kΩ der Pinstrom störend wird.<br />
<br />
=== Einfacher Taster ===<br />
<br />
Auch wenn das RS-Flipflop sehr effektiv ist, wird diese Variante der Entprellung nur selten angewendet. Der Grund dafür ist, dass in Schaltungen häufiger einfache Taster eingesetzt werden. Diese sind oft kleiner und preisgünstiger. Um solche Taster (engl. ''push button / momentary switch'') zu entprellen, kann ein einfacher RC-Tiefpass eingesetzt werden. Hierbei wird ein Kondensator über einen Widerstand je nach Schalterstellung auf- oder entladen. Das RC-Glied bildet einen Tiefpass, sodass die Spannung über dem Kondensator nicht von einem Pegel auf den anderen springen kann.<br />
<br />
[[Bild:RC_debouncer.png|thumb|left|300px|Taster entprellen mit RC-Entpreller]]<br />
<br />
[[Datei:Entprellen1a.png|thumb|350px|Entstehender Spannungsverlauf]]<br />
{{Absatz}}<br />
<br />
Wenn der Schalter geöffnet ist, lädt sich der Kondensator langsam über die beiden Widerstände R<sub>1</sub> und R<sub>2</sub> auf V<sub>CC</sub> auf. Beim Erreichen der Umschaltschwelle springt der Ausgang auf den Pegel 0. Wird der Schalter geschlossen, entlädt sich der Kondensator langsam über den Widerstand R<sub>2</sub>. Demnach ändert sich der Ausgang des Inverters auf den Pegel 1. Während der Taster prellt, kann sich die Spannung über dem Kondensator nicht sprunghaft ändern, da das Auf- und Entladen eher langsam über die Widerstände erfolgt. Außerdem sind die Schaltschwellen für die Übergänge ''low''→''high'' und ''high''→''low'' stark verschieden (Hysterese, siehe Artikel [[Schmitt-Trigger]]). Bei richtiger Dimensionierung der Bauelemente wird somit der Ausgang des Inverters prellfrei. Zu beachten ist, dass der Inverter '''unbedingt''' über Schmitt-Trigger-Eingänge verfügen muss, weil schon bei gewöhnlichen digitalen Eingängen immer auch analoge Effekte wie Rauschen wirken, die im Umschaltpunkt zu unsicherem Verhalten führen. Bei Standard-Logikeingängen ist der Bereich von üblicherweise 0,8…2,0&nbsp;V deren Ausgang nicht definiert. Trotz Filterung käme es daher in diesem Bereich zu einer Weiterleitung des Prellens.<br />
<br />
Als Inverterbaustein kann zum Beispiel der [https://www.ti.com/lit/ds/symlink/sn74hc14.pdf 74HC14] oder der [https://www.ti.com/lit/ds/symlink/cd40106b.pdf CD40106] (pinkompatibel) eingesetzt werden. Alternativ kann auch ein [https://www.ti.com/lit/ds/symlink/cd4093b.pdf CD4093] Verwendung finden. Bei dem CD4093 handelt es sich um NAND-Gatter mit Schmitt-Trigger-Eingängen. Um aus einem NAND-Gatter einen Inverter zu machen, müssen einfach nur die beiden Eingänge verbunden werden oder ein Eingang fest auf ''high'' gelegt werden.<br />
<br />
Für eine geeignete Dimensionierung muss man etwas mit den Standardformeln für einen Kondensator jonglieren. Die Spannung über dem Kondensator beim Entladen berechnet sich nach<br />
:<math>U_C(t) = U_0 \cdot \exp{\frac{-t}{R_2 C_1}}</math>.<br />
<br />
Damit der Ausgang des Inverters stabil ist, muss die Spannung über dem Kondensator und damit die Spannung am Eingang des Inverters über der Spannung bleiben, bei welcher der Inverter umschaltet. Diese Schwellwertspannung ist genau die zeitabhängige Spannung über dem Kondensator.<br />
:<math>U_C(t)\!\ = U_{th}</math><br />
<br />
Durch Umstellen der Formel ergibt sich nun<br />
:<math>R_2=\frac{-t}{C_1 \cdot \ln\left(\frac{U_{th}}{U_0}\right)}</math>.<br />
<br />
Ein Taster prellt üblicherweise bis zu etwa 10&nbsp;ms. Zur Sicherheit kann bei der Berechnung des Widerstandes eine Prellzeit von 20&nbsp;ms angenommen werden. <math>U_0</math> ist die Betriebsspannung, also V<sub>CC</sub>. Die Schwellwertspannung muss aus dem Datenblatt des eingesetzten Schmitt-Triggers abgelesen werden. Beim 74HC14 beträgt der gesuchte Wert 2,0&nbsp;V. Nimmt man für den Kondensator 1&nbsp;µF und beträgt die Betriebsspannung 5&nbsp;V, ergibt sich für den Widerstand ein Wert von etwa 22&nbsp;kΩ.<br />
<br />
Wird der Schalter geöffnet, lädt sich der Kondensator nach folgender Formel auf:<br />
:<math>U_C(t) = U_0 \cdot \left( 1-\exp{\frac{-t}{(R_1+R_2)\cdot C_1}} \right)</math><br />
<br />
Mit <math>U_{th}=U_C</math> ergibt das Umstellen nach <math>(R_1+R_2)</math>:<br />
:<math>R_1+R_2 = \frac{-t}{C_1 \cdot \ln\left(1-\frac{U_{th}}{U_0} \right)}</math><br />
<br />
Für die Schwellspannung lässt sich aus dem Datenblatt ein Wert von 2,3&nbsp;V ablesen. Mit diesem Wert und den Annahmen von oben ergibt sich für <math>R_1+R_2</math> ein Wert von 32&nbsp;kΩ. Somit folgt für <math>R_1</math> ein Wert von etwa 10&nbsp;kΩ.<br />
<br />
Anmerkung: Beim 74LS14 von Hitachi z.&nbsp;B. sind die oberen und unteren Schaltschwellwerte unterschiedlich. Es muss darauf geachtet werden, dass <math>U_{th}</math> beim Entladen die untere Schwelle und <math>U_{th}</math> beim Laden die obere Schwelle einnimmt.<br />
<br />
== Softwareentprellung ==<br />
<br />
In den Zeiten der elektronischen Auswertung von Tastern und Schaltern ist das softwaretechnische Entprellen oft billiger als die Benutzung eines teuren Schalters. Daher werden heute z.&nbsp;B. auch Computertastaturen nicht mehr mit prellarmen Tasten oder Entprellkondensatoren ausgestattet.<br />
<br />
Bei Verwendung des in den meisten Geräten ohnehin vorhandenen Mikrocontrollers z.&nbsp;B. kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso gut funktioniert. Dabei ist nur zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch einige Hardwareressourcen (z.&nbsp;B. Timer) benötigt werden. Dafür hat man aber den Vorteil, kurze Pulse, die offensichtlich keine Tastenbetätigung sein können sondern z.&nbsp;B. durch Einstreuungen hervorgerufen werden, einfach ausfiltern zu können.<br />
<br />
=== Flankenerkennung ===<br />
Bei einem Taster gibt es insgesamt 4 theoretische Zustände:<br />
<br />
# war nicht gedrückt und ist nicht gedrückt<br />
# war nicht gedrückt und ist gedrückt (steigende Flanke)<br />
# war gedrückt und ist immer noch gedrückt<br />
# war gedrückt und ist nicht mehr gedrückt (fallende Flanke)<br />
<br />
Diese einzelnen Zustände lassen sich jetzt bequem abfragen/durchlaufen. Die Entprellung geschieht dabei durch die ganze Laufzeit des Programms. Die Taster werden hierbei als ''active-low'' angeschlossen, um die internen Pull-Ups zu nutzen.<br />
<br />
Diese Routine gibt für den Zustand „steigende Flanke“ den Wert „1“ zurück, sonst „0“.<br />
<br />
<syntaxhighlight lang="c"><br />
#define TASTERPORT PINC<br />
#define TASTERBIT PINC1<br />
<br />
char taster(void)<br />
{<br />
static unsigned char zustand;<br />
char rw = 0;<br />
<br />
if(zustand == 0 && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gedrueckt (steigende Flanke)<br />
{<br />
zustand = 1;<br />
rw = 1;<br />
}<br />
else if (zustand == 1 && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gehalten<br />
{<br />
zustand = 2;<br />
rw = 0;<br />
}<br />
else if (zustand == 2 && (TASTERPORT & (1<<TASTERBIT))) //Taster wird losgelassen (fallende Flanke)<br />
{<br />
zustand = 3;<br />
rw = 0;<br />
}<br />
else if (zustand == 3 && (TASTERPORT & (1<<TASTERBIT))) //Taster losgelassen<br />
{<br />
zustand = 0;<br />
rw = 0;<br />
}<br />
<br />
return rw;<br />
}<br />
</syntaxhighlight><br />
<br />
Eine Erweiterung, damit beliebig lange das Halten einer Taste erkannt wird, kann man ganz einfach so implementieren:<br />
<br />
<syntaxhighlight lang="c"><br />
// Zustand kann entweder zum ersten Mal als gehalten detektiert werden oder aber jedes weitere Mal<br />
else if (((zustand == 1) || (zustand == 2)) && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gehalten<br />
{<br />
zustand = 2;<br />
rw = 0;<br />
}<br />
</syntaxhighlight><br />
<br />
=== Warteschleifen-Verfahren ===<br />
<br />
Soll nun mit einem Mikrocontroller gezählt werden, wie oft ein Kontakt oder ein Relais geschaltet wird, muss das Prellen des Kontaktes exakt berücksichtigt und von einem gewollten Mehrfachschalten abgegrenzt werden, da sonst möglicherweise Fehlimpulse gezählt oder andererseits echte Schaltvorgänge übersprungen werden. Dem muss beim Schreiben des Programms hinsichtlich des Abtastens des Kontaktes unbedingt Rechnung getragen werden.<br />
<br />
Beim folgenden einfachen Beispiel für eine Entprellung ist zu beachten, dass der AVR im Falle eines Tastendrucks 200&nbsp;ms wartet, also brach liegt. Bei zeitkritischen Anwendungen sollte man ein anderes Verfahren nutzen (z.&nbsp;B. Abfrage der Tastenzustände in einer Timer-Interrupt-Service-Routine).<br />
<br />
<syntaxhighlight lang="c"><br />
#include <avr/io.h><br />
#include <inttypes.h><br />
#ifndef F_CPU<br />
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"<br />
#define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */<br />
#endif<br />
#include <util/delay.h> /* bei alter avr-libc: #include <avr/delay.h> */<br />
<br />
/* Einfache Funktion zum Entprellen eines Tasters */<br />
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)<br />
{<br />
if ( !(*port & (1 << pin)) )<br />
{<br />
/* Pin wurde auf Masse gezogen, 100ms warten */<br />
_delay_ms(50); // Maximalwert des Parameters an _delay_ms<br />
_delay_ms(50); // beachten, vgl. Dokumentation der avr-libc<br />
if ( *port & (1 << pin) )<br />
{<br />
/* Anwender Zeit zum Loslassen des Tasters geben */<br />
_delay_ms(50);<br />
_delay_ms(50);<br />
return 1;<br />
}<br />
}<br />
return 0;<br />
}<br />
<br />
int main(void)<br />
{<br />
DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang Taster) */<br />
PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand aktivieren */<br />
...<br />
if (debounce(&PINB, PB0))<br />
{<br />
/* Falls Taster an PIN PB0 gedrueckt */<br />
/* LED an Port PD7 an- bzw. ausschalten: */<br />
PORTD = PORTD ^ ( 1 << PD7 );<br />
}<br />
...<br />
}<br />
</syntaxhighlight><br />
<br />
Die obige Routine hat leider mehrere Nachteile:<br />
* sie detektiert nur das Loslassen (unergonomisch),<br />
* sie verzögert die Mainloop immer um 100&nbsp;ms bei gedrückter Taste,<br />
* sie verliert Tastendrücke, je mehr die Mainloop zu tun hat.<br />
<br />
Eine ähnlich einfach zu benutzende Routine, aber ohne all diese Nachteile findet sich im Forenthread<br />
[https://www.mikrocontroller.net/topic/164194 Entprellung für Anfänger].<br />
<br />
Der ''DEBOUNCE''-Befehl in dem BASIC-Dialekt BASCOM für AVR ist ebenfalls nach dem Warteschleifen-Verfahren programmiert. Die Wartezeit beträgt standardmäßig 25&nbsp;ms, kann aber vom Anwender überschrieben werden. Vgl. [https://avrhelp.mcselec.com/index.html?debounce.htm BASCOM Online-Manual zu DEBOUNCE].<br />
<br />
Eine C-Implementierung für eine Tastenabfrage mit Warteschleife ist im Artikel [[AVR-GCC-Tutorial#IO-Register als Parameter und Variablen|AVR-GCC-Tutorial: IO-Register als Parameter und Variablen]] angeben.<br />
<br />
Der Nachteil dieses Verfahrens ist, dass der Controller durch die Warteschleife blockiert wird. Günstiger ist die Implementierung mit einem Timer-Interrupt.<br />
<br />
==== Warteschleifenvariante mit Maske und Pointer (nach Christian Riggenbach) ====<br />
<br />
Hier eine weitere Funktion, um Taster zu entprellen: Durch den zusätzlichen Code kann eine Entprellzeit von durchschnittlich 1…3&nbsp;ms (mindestens 8·150&nbsp;µs = 1,2&nbsp;ms) erreicht werden. Grundsätzlich prüft die Funktion den Pegel der Pins auf einem bestimmten Port. Wenn die/der Pegel 8-mal konstant war, wird die Schleife verlassen. Diese Funktion kann sehr gut eingesetzt werden, um in einer Endlosschleife Taster abzufragen, da sie, wie erwähnt, eine kurze Wartezeit hat.<br />
<br />
<syntaxhighlight lang="c"><br />
void entprellung( volatile uint8_t *port, uint8_t maske ) {<br />
uint8_t port_puffer;<br />
uint8_t entprellungs_puffer;<br />
<br />
for( entprellungs_puffer=0 ; entprellungs_puffer!=0xff ; ) {<br />
entprellungs_puffer<<=1;<br />
port_puffer = *port;<br />
_delay_us(150);<br />
if( (*port & maske) == (port_puffer & maske) )<br />
entprellungs_puffer |= 0x01;<br />
}<br />
}<br />
</syntaxhighlight><br />
Die Funktion wird wie folgt aufgerufen:<br />
<syntaxhighlight lang="c"><br />
// Bugfix 20100414<br />
// https://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass<br />
entprellung( &PINB, (1<<PINB2) ); // ggf. Prellen abwarten<br />
if( PINB & (1<<PINB2) ) // dann stabilen Wert einlesen<br />
{<br />
// mach was<br />
}<br />
else<br />
{<br />
// mach was anderes<br />
}<br />
</syntaxhighlight><br />
Als Maske kann ein beliebiger Wert übergeben werden. Sie verhindert, dass nichtverwendete Taster die Entprellzeit negativ beeinflussen.<br />
<br />
==== Debounce-Makro von Peter Dannegger ====<br />
<br />
Peter Dannegger hat im Forumsbeitrag [https://www.mikrocontroller.net/topic/164194#1566921 Entprellen für Anfänger] folgendes vereinfachtes Entprellverfahren beschrieben. Das Makro arbeitet in der Originalversion mit ''active low'' geschalteten Tastern, kann aber einfach für ''active high'' geschaltete Taster angepasst werden ([[Pollin Funk-AVR-Evaluationsboard#Tasty Reloaded|Tasty Reloaded]]).<br />
<br />
<syntaxhighlight lang="c"><br />
/************************************************************************/<br />
/* */<br />
/* Not so powerful Debouncing Example */<br />
/* No Interrupt needed */<br />
/* */<br />
/* Author: Peter Dannegger */<br />
/* */<br />
/************************************************************************/<br />
// Target: ATtiny13<br />
<br />
#include <avr/io.h><br />
#define F_CPU 9.6e6<br />
#include <util/delay.h><br />
<br />
<br />
#define debounce( port, pin ) \<br />
({ \<br />
static uint8_t flag = 0; /* new variable on every macro usage */ \<br />
uint8_t i = 0; \<br />
\<br />
if( flag ){ /* check for key release: */ \<br />
for(;;){ /* loop ... */ \<br />
if( !(port & 1<<pin) ){ /* ... until key pressed or ... */ \<br />
i = 0; /* 0 = bounce */ \<br />
break; \<br />
} \<br />
_delay_us( 98 ); /* * 256 = 25ms */ \<br />
if( --i == 0 ){ /* ... until key >25ms released */ \<br />
flag = 0; /* clear press flag */ \<br />
i = 0; /* 0 = key release debounced */ \<br />
break; \<br />
} \<br />
} \<br />
}else{ /* else check for key press: */ \<br />
for(;;){ /* loop ... */ \<br />
if( (port & 1<<pin) ){ /* ... until key released or ... */ \<br />
i = 0; /* 0 = bounce */ \<br />
break; \<br />
} \<br />
_delay_us( 98 ); /* * 256 = 25ms */ \<br />
if( --i == 0 ){ /* ... until key >25ms pressed */ \<br />
flag = 1; /* set press flag */ \<br />
i = 1; /* 1 = key press debounced */ \<br />
break; \<br />
} \<br />
} \<br />
} \<br />
i; /* return value of Macro */ \<br />
})<br />
<br />
/*<br />
Testapplication<br />
*/<br />
int main(void)<br />
{<br />
DDRB &= ~(1<<PB0);<br />
PORTB |= 1<<PB0;<br />
DDRB |= 1<<PB2;<br />
DDRB &= ~(1<<PB1);<br />
PORTB |= 1<<PB1;<br />
DDRB |= 1<<PB3;<br />
for(;;){<br />
if( debounce( PINB, PB1 ) )<br />
PORTB ^= 1<<PB2;<br />
if( debounce( PINB, PB0 ) )<br />
PORTB ^= 1<<PB3;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Wenn das Makro für die gleiche Taste (Pin) an mehreren Stellen aufgerufen werden soll, muss eine Funktion angelegt werden, damit beide Aufrufe an die gleiche Zustandsvariable <code>flag</code> auswerten (siehe [https://www.mikrocontroller.net/topic/195914#1918727 diesen Forumsbeitrag]):<br />
<br />
<syntaxhighlight lang="c"><br />
// Hilfsfunktion<br />
uint8_t debounce_C1( void )<br />
{<br />
return debounce(PINC, PC1);<br />
}<br />
<br />
// Beispielanwendung<br />
int main(void)<br />
{<br />
DDRB |= 1<<PB2;<br />
DDRB |= 1<<PB3;<br />
DDRC &= ~(1<<PC1);<br />
PORTC |= 1<<PC1; // Pullup für Taster<br />
<br />
for(;;){<br />
if( debounce_C1() ) // nicht: debounce(PINC, PC1)<br />
PORTB ^= 1<<PB2;<br />
if( debounce_C1() ) // nicht: debounce(PINC, PC1)<br />
PORTB ^= 1<<PB3;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
=== Timer-Verfahren (nach Peter Dannegger) ===<br />
<br />
==== Grundroutine (AVR-Assembler) ====<br />
<br />
Siehe dazu: Forumsbeitrag [https://www.mikrocontroller.net/topic/6490 Tasten entprellen].<br />
<br />
Vorteile:<br />
* besonders kurzer Code<br />
* schnell<br />
<br />
Außerdem können 8 Tasten (aktiv low) gleichzeitig bearbeitet werden, es dürfen also<br />
alle exakt zur selben Zeit gedrückt werden. Andere Routinen können z.&nbsp;B. nur eine Taste verarbeiten, d.&nbsp;h. die zuerst oder zuletzt gedrückte gewinnt, oder es kommt Unsinn heraus.<br />
<br />
Die eigentliche Einlese- und Entprellroutine ist nur 8 Instruktionen<br />
kurz. Der entprellte Tastenzustand ist im Register <code>key_state</code>. Mit nur 2 weiteren Instruktionen wird dann der Wechsel von ''Taste offen'' zu<br />
''Taste gedrückt'' erkannt und im Register <code>key_press</code> abgelegt. Im Beispielcode werden dann damit 8 LEDs ein- und ausgeschaltet. Jede Taste entspricht einem Bit in den Registern, d.&nbsp;h. die Verarbeitung erfolgt bitweise mit logischen Operationen. Zum Verständnis empfiehlt es sich daher, die Logikgleichungen mit Gattern für ein Bit = eine Taste aufzumalen. Die Register kann man sich als Flipflops denken, die mit der Entprellzeit als Takt arbeiten. D.&nbsp;h. man kann das auch so z.&nbsp;B. in einem GAL22V10 realisieren.<br />
<br />
Als Kommentar sind neben den einzelnen Instruktionen alle 8 möglichen<br />
Kombinationen der 3 Signale dargestellt.<br />
<br />
Beispielcode für AVR (Assembler):<br />
<br />
<syntaxhighlight lang="asm"><br />
.nolist<br />
.include "c:\avr\inc\1200def.inc"<br />
.list<br />
.def save_sreg = r0<br />
.def iwr0 = r1<br />
.def iwr1 = r2<br />
<br />
.def key_old = r3<br />
.def key_state = r4<br />
.def key_press = r5<br />
<br />
.def leds = r16<br />
.def wr0 = r17<br />
<br />
.equ key_port = pind<br />
.equ led_port = portb<br />
<br />
rjmp init<br />
.org OVF0addr ;timer interrupt 24ms<br />
in save_sreg, SREG<br />
get8key: ;/old state iwr1 iwr0<br />
mov iwr0, key_old ;00110011 10101010 00110011<br />
in key_old, key_port ;11110000<br />
eor iwr0, key_old ; 11000011<br />
com key_old ;00001111<br />
mov iwr1, key_state ; 10101010<br />
or key_state, iwr0 ; 11101011<br />
and iwr0, key_old ; 00000011<br />
eor key_state, iwr0 ; 11101000<br />
and iwr1, iwr0 ; 00000010<br />
or key_press, iwr1 ;store key press detect<br />
;<br />
; insert other timer functions here<br />
;<br />
out SREG, save_sreg<br />
reti<br />
;-------------------------------------------------------------------------<br />
init:<br />
ldi wr0, 0xFF<br />
out ddrb, wr0<br />
ldi wr0, 1<<CS02 | 1<<CS00 ;divide by 1024 * 256<br />
out TCCR0, wr0<br />
ldi wr0, 1<<TOIE0 ;enable timer interrupt<br />
out TIMSK, wr0<br />
<br />
clr key_old<br />
clr key_state<br />
clr key_press<br />
ldi leds, 0xFF<br />
main: cli<br />
eor leds, key_press ;toggle LEDs<br />
clr key_press ;clear, if key press action done<br />
sei<br />
out led_port, leds<br />
rjmp main<br />
;-------------------------------------------------------------<br />
</syntaxhighlight><br />
<br />
==== Komfortroutine (C für AVR) ====<br />
<br />
Siehe dazu: Forumsbeitrag [https://www.mikrocontroller.net/topic/48465 Universelle Tastenabfrage].<br />
<br />
'''Anmerkung:''' Wenn statt ''active-low'' (Ruhezustand ''high'') ''active-high'' (Ruhezustand ''low'') verwendet wird, muss eine Zeile geändert werden; siehe<br />
[https://www.mikrocontroller.net/topic/48465 gesamter Beitrag im Forum],<br />
[https://www.mikrocontroller.net/topic/48465#606555 Stelle 1 im Beitrag] ([https://www.mikrocontroller.net/topic/48465#2306398 Stelle 2 im Beitrag] muss ''nicht'' geändert werden, da hier die Polarität gar keinen Einfluß hat).<br />
<br />
'''Anmerkung 2:''' Zur Initialisierung siehe [https://www.mikrocontroller.net/topic/48465#3572793 diesen Forumsbeitrag].<br />
<br />
Funktionsprinzip wie oben plus zusätzliche Features:<br />
* Kann Tasten sparen durch unterschiedliche Aktionen bei kurzem oder langem Drücken<br />
* Wiederholfunktion, z.&nbsp;B. für die Eingabe von Werten<br />
<br />
Das Programm ist für avr-gcc/avr-libc geschrieben, kann aber mit ein paar Anpassungen auch mit anderen Compilern und Mikrocontrollern verwendet werden. Eine Portierung für den AT91SAM7 findet man [http://www.google.com/codesearch?q=show:ac2viP-2E2Y:pzkOO5QRsoc:RPICuprYy-A&sa=N&cd=1&ct=rc&cs_p=svn://mikrocontroller.net/mp3dec/trunk&cs_f=keys.c#a0 hier] (aus dem Projekt [[ARM MP3/AAC Player]]).<br />
<syntaxhighlight lang="c"><br />
/************************************************************************/<br />
/* */<br />
/* Debouncing 8 Keys */<br />
/* Sampling 4 Times */<br />
/* With Repeat Function */<br />
/* */<br />
/* Author: Peter Dannegger */<br />
/* danni@specs.de */<br />
/* */<br />
/************************************************************************/<br />
<br />
#include <stdint.h><br />
#include <avr/io.h><br />
#include <avr/interrupt.h><br />
<br />
#ifndef F_CPU<br />
#define F_CPU 1000000 // processor clock frequency<br />
#warning kein F_CPU definiert<br />
#endif<br />
<br />
#define KEY_DDR DDRB<br />
#define KEY_PORT PORTB<br />
#define KEY_PIN PINB<br />
#define KEY0 0<br />
#define KEY1 1<br />
#define KEY2 2<br />
#define ALL_KEYS (1<<KEY0 | 1<<KEY1 | 1<<KEY2)<br />
<br />
#define REPEAT_MASK (1<<KEY1 | 1<<KEY2) // repeat: key1, key2<br />
#define REPEAT_START 50 // after 500ms<br />
#define REPEAT_NEXT 20 // every 200ms<br />
<br />
#define LED_DDR DDRA<br />
#define LED_PORT PORTA<br />
#define LED0 0<br />
#define LED1 1<br />
#define LED2 2<br />
<br />
volatile uint8_t key_state; // debounced and inverted key state:<br />
// bit = 1: key pressed<br />
volatile uint8_t key_press; // key press detect<br />
<br />
volatile uint8_t key_rpt; // key long press and repeat<br />
<br />
<br />
ISR( TIMER0_OVF_vect ) // every 10ms<br />
{<br />
static uint8_t ct0 = 0xFF, ct1 = 0xFF, rpt;<br />
uint8_t i;<br />
<br />
TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms<br />
<br />
i = key_state ^ ~KEY_PIN; // key changed ?<br />
ct0 = ~( ct0 & i ); // reset or count ct0<br />
ct1 = ct0 ^ (ct1 & i); // reset or count ct1<br />
i &= ct0 & ct1; // count until roll over ?<br />
key_state ^= i; // then toggle debounced state<br />
key_press |= key_state & i; // 0->1: key press detect<br />
<br />
if( (key_state & REPEAT_MASK) == 0 ) // check repeat function<br />
rpt = REPEAT_START; // start delay<br />
if( --rpt == 0 ){<br />
rpt = REPEAT_NEXT; // repeat delay<br />
key_rpt |= key_state & REPEAT_MASK;<br />
}<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key has been pressed. Each pressed key is reported<br />
// only once<br />
//<br />
uint8_t get_key_press( uint8_t key_mask )<br />
{<br />
cli(); // read and clear atomic !<br />
key_mask &= key_press; // read key(s)<br />
key_press ^= key_mask; // clear key(s)<br />
sei();<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key has been pressed long enough such that the<br />
// key repeat functionality kicks in. After a small setup delay<br />
// the key is reported being pressed in subsequent calls<br />
// to this function. This simulates the user repeatedly<br />
// pressing and releasing the key.<br />
//<br />
uint8_t get_key_rpt( uint8_t key_mask )<br />
{<br />
cli(); // read and clear atomic !<br />
key_mask &= key_rpt; // read key(s)<br />
key_rpt ^= key_mask; // clear key(s)<br />
sei();<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key is pressed right now<br />
//<br />
uint8_t get_key_state( uint8_t key_mask )<br />
<br />
{<br />
key_mask &= key_state;<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
uint8_t get_key_short( uint8_t key_mask )<br />
{<br />
cli(); // read key state and key press atomic !<br />
return get_key_press( ~key_state & key_mask );<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
uint8_t get_key_long( uint8_t key_mask )<br />
{<br />
return get_key_press( get_key_rpt( key_mask ));<br />
}<br />
<br />
int main( void )<br />
{<br />
LED_PORT = 0xFF;<br />
LED_DDR = 0xFF;<br />
<br />
// Configure debouncing routines<br />
KEY_DDR &= ~ALL_KEYS; // configure key port for input<br />
KEY_PORT |= ALL_KEYS; // and turn on pull up resistors<br />
<br />
TCCR0 = (1<<CS02)|(1<<CS00); // divide by 1024<br />
TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms<br />
TIMSK |= 1<<TOIE0; // enable timer interrupt<br />
<br />
sei();<br />
<br />
while(1){<br />
if( get_key_short( 1<<KEY1 ))<br />
LED_PORT ^= 1<<LED1;<br />
<br />
if( get_key_long( 1<<KEY1 ))<br />
LED_PORT ^= 1<<LED2;<br />
<br />
// single press and repeat<br />
<br />
if( get_key_press( 1<<KEY2 ) || get_key_rpt( 1<<KEY2 )){<br />
uint8_t i = LED_PORT;<br />
<br />
i = (i & 0x07) | ((i << 1) & 0xF0);<br />
if( i < 0xF0 )<br />
i |= 0x08;<br />
LED_PORT = i;<br />
}<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Das Single-press-und-repeat-Beispiel geht nicht in jeder Beschaltung; folgendes Beispiel sollte universeller sein (einzelne LED an/aus):<br />
<syntaxhighlight lang="c"><br />
// single press and repeat<br />
if( get_key_press( 1<<KEY2 ) || get_key_rpt( 1<<KEY2 ))<br />
LED_PORT ^=0x08;<br />
</syntaxhighlight><br />
<br />
Neuere Variante, die einer Taste folgende Funktionen erlaubt:<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1753367 Universelle Tastenabfrage mit 2 Tastenerkennung]<br />
<syntaxhighlight lang="c"><br />
- get_key_press()<br />
- get_key_rpt()<br />
- get_key_press() mit get_key_rpt()<br />
- get_key_short() mit get_key_long()<br />
- get_key_short() mit get_key_long_r() und get_key_rpt_l()<br />
</syntaxhighlight><br />
Erweiterung für die Erkennung von zwei gleichzeitig gedrückten Tasten:<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1753367]<br />
<syntaxhighlight lang="c"><br />
- get_key_common()<br />
</syntaxhighlight><br />
<br />
===== Funktionsweise =====<br />
Der Code basiert auf 8 parallelen vertikalen Zählern, die über die Variablen <code>ct0</code> und <code>ct1</code> aufgebaut werden,<br />
<br />
[[Bild:VertCount.png|framed|center|8 vertikale Zähler in zwei 8-Bit-Variablen]]<br />
<br />
wobei jeweils ein Bit in <code>ct0</code> mit dem gleichwertigen Bit in <code>ct1</code> zusammengenommen einen 2-Bit-Zähler bildet.<br />
Der Code, der sich um die 8 Zähler kümmert, ist so geschrieben, daß er alle 8 Zähler gemeinsam parallel behandelt.<br />
<br />
<syntaxhighlight lang="c"><br />
i = key_state ^ ~KEY_PIN; // key changed ?<br />
</syntaxhighlight><br />
<code>i</code> enthält an dieser Stelle für jede Taste, die sich im Vergleich mit dem vorhergehenden entprellten Zustand (<code>key_state</code>) verändert hat, ein 1-Bit.<br />
<br />
<syntaxhighlight lang="c"><br />
ct0 = ~( ct0 & i ); // reset or count ct0<br />
ct1 = ct0 ^ (ct1 & i); // reset or count ct1<br />
</syntaxhighlight><br />
<br />
Diese beiden Anweisungen erniedrigen den 2-Bit-Zähler <code>ct0</code>/<code>ct1</code> für jedes Bit um 1, welches in <code>i</code> gesetzt ist. Liegt an der entsprechenden Stelle in <code>i</code> ein 0-Bit vor (keine Änderung des Zustands), so wird der Zähler <code>ct0</code>/<code>ct1</code> für dieses Bit auf 1 gesetzt.<br />
Der Grundzustand des Zählers ist also <code>ct0</code> == 1 und <code>ct1</code> == 1 (Wert 3). Der Zähler zählt daher mit jedem ISR-Aufruf, bei dem die Taste im Vergleich zu <code>key_state</code> als verändert erkannt wurde,<br />
<br />
ct1 ct0<br />
1 1 // 3<br />
1 0 // 2<br />
0 1 // 1<br />
0 0 // 0<br />
1 1 // 3<br />
<br />
<syntaxhighlight lang="c"><br />
i &= ct0 & ct1; // count until roll over ?<br />
</syntaxhighlight><br />
in <code>i</code> bleibt nur dort ein 1-Bit erhalten, wo sowohl in <code>ct1</code> als auch in <code>ct0</code> ein 1-Bit vorgefunden wird, der betreffende Zähler also bis 3 zählen konnte. Durch die zusätzliche Verundung mit <code>i</code> wird der Fall abgefangen, dass ein konstanter Zählerwert von 3 in <code>i</code> ein 1-Bit hinterlässt. Im Endergebnis bedeutet das, dass nur ein Zählerwechsel von 0 auf 3 zu einem 1-Bit an der betreffenden Stelle in <code>i</code> führt, aber auch nur dann, wenn in <code>i</code> an dieser Bitposition ebenfalls ein 1-Bit war (welches wiederum deswegen auf 1 war, weil an diesem Eingabeport eine Veränderung zum letzten bekannten entprellten Zustand festgestellt wurde). Alles zusammengenommen heißt das, dass ein Tastendruck dann erkannt wird, wenn die Taste 4-mal hintereinander in einem anderen Zustand vorgefunden wurde als dem zuletzt bekannten entprellten Tastenzustand.<br />
<br />
An dieser Stelle ist <code>i</code> daher ein Vektor von 8 Bits, von denen jedes einzelne der Bits darüber Auskunft gibt, ob die entsprechende Taste mehrmals hintereinander im selben Zustand angetroffen wurde, der nicht mit dem zuletzt bekannten Tastenzustand übereinstimmt. Ist das der Fall, dann wird eine entsprechende Veränderung des Tastenzustands in <code>key_state</code> registriert<br />
<syntaxhighlight lang="c"><br />
key_state ^= i; // then toggle debounced state<br />
</syntaxhighlight><br />
und wenn sich in <code>key_state</code> das entsprechende Bit von 0 auf 1 verändert hat, wird dieses Ereignis als „Taste wurde niedergedrückt“ gewertet.<br />
<syntaxhighlight lang="c"><br />
key_press |= key_state & i; // 0->1: key press detect<br />
</syntaxhighlight><br />
<br />
Damit ist der Tasteneingang entprellt. Und zwar sowohl beim Drücken einer Taste als auch beim Loslassen (damit Tastenpreller beim Loslassen nicht mit dem Niederdrücken einer Taste verwechselt werden). Der weitere Code beschäftigt sich dann nur noch damit, diesen entprellten Tastenzustand weiter zu verarbeiten.<br />
<br />
Der Codeteil sieht durch die Verwendung der vielen bitweisen Operationen relativ komplex aus. Behält man aber im Hinterkopf, dass einige der bitweisen wie ein „paralles If“ gleichzeitig auf allen 8 Bits eingesetzt werden, dann vereinfacht sich vieles. Ein<br />
<syntaxhighlight lang="c"><br />
key_press |= key_state & i;<br />
</syntaxhighlight><br />
ist nichts anderes als ein<br />
<syntaxhighlight lang="c"><br />
// teste ob Bit 0 sowohl in key_state als auch in i gesetzt ist<br />
// und setze Bit 0 in key_press, wenn das der Fall ist<br />
if( ( key_state & ( 1 << 0 ) ) &&<br />
( i & ( 1 << 0 ) )<br />
key_press |= ( 1 << 0 );<br />
<br />
// Bit 1<br />
if( ( key_state & ( 1 << 1 ) ) &&<br />
( i & ( 1 << 1 ) )<br />
key_press |= ( 1 << 1 );<br />
<br />
// Bit 2<br />
if( ( key_state & ( 1 << 2 ) ) &&<br />
( i & ( 1 << 2 ) )<br />
key_press |= ( 1 << 2 );<br />
<br />
...<br />
</syntaxhighlight><br />
nur als wesentlich kompaktere Operation ausgeführt und für alle 8 Bits gleichzeitig.<br />
Die Kürze und Effizienz dieser paar Codezeilen ergibt sich aus dem Umstand, dass jedes Bit in den Variablen für eine Taste steht und alle 8 (maximal möglichen) Tasten gleichzeitig die Operationen durchlaufen.<br />
<br />
Die Funktionsweisen der verschiedenen Modi anhand von Zeitstrahlen erklärt<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1844458 dieser Forumsbeitrag].<br />
<br />
„Walkthrough“ der verschiedenen Zustände der einzelnen Variablen anhand eines Tastendrucks auf<br />
[https://www.avrfreaks.net/comment/726676#comment-726676 avrfreaks.net].<br />
<br />
===== Reduziert auf lediglich 1 Taste =====<br />
Diskussionen im Forum zeigen immer wieder, dass viele eine Abneigung gegen diesen Code haben, weil er ihnen sehr kompliziert vorkommt.<br />
<br />
Der Code ist nicht leicht zu analysieren und er zieht alle Register dessen, was möglich ist, um sowohl Laufzeit als auch Speicherverbrauch einzusparen. Oft hört man auch das Argument: Ich benötige ja nur eine Entprellung für 1 Taste, gibt es da nichts Einfacheres?<br />
<br />
Hier ist die „Langform“ des Codes, so wie man das für lediglich 1 Taste schreiben würde, wenn man exakt dasselbe Entprellverfahren einsetzen würde. Man sieht: Da ist keine Hexerei dabei: In <code>key_state</code> wird der letzte bekannte entprellte Zustand der Taste gehalten. Der Pin-Eingang wird mit diesem Zustand verglichen und wenn sich die beiden unterscheiden, dann wird ein Zähler heruntergezählt. Produziert dieses Herunterzählen einen Unterlauf des Zählers, dann gilt die Taste als entprellt und wenn dann auch noch die Taste gerade gedrückt ist, dann wird dieses in <code>key_press</code> entsprechend vermerkt.<br />
<br />
<syntaxhighlight lang="c"><br />
uint8_t key_state;<br />
uint8_t key_counter;<br />
volatile uint8_t key_press;<br />
<br />
ISR( ... Overflow ... )<br />
{<br />
uint8_t input = KEY_PIN & ( 1 << KEY0 );<br />
<br />
if( input != key_state ) {<br />
key_counter--;<br />
if( key_counter == 0xFF ) {<br />
key_counter = 3;<br />
key_state = input;<br />
if( input )<br />
key_press = TRUE;<br />
}<br />
}<br />
else<br />
key_counter = 3;<br />
<br />
}<br />
<br />
uint8_t get_key_press()<br />
{<br />
uint8_t result;<br />
<br />
cli();<br />
result = key_press;<br />
key_press = FALSE;<br />
sei();<br />
<br />
return result;<br />
}<br />
</syntaxhighlight><br />
<br />
Der vollständige Entprellcode, wie weiter oben gelistet, besticht jetzt aber darin, dass er compiliert kleiner ist als diese anschaulichere Variante für lediglich 1 Taste. Und das bei gleichzeitig erhöhter Funktionalität. Denn z.&nbsp;B. ein Autorepeat ist in diesem Code noch gar nicht eingebaut. Und spätestens wenn man dann eine zweite Taste entprellen möchte, dann ist auch der SRAM-Speicherverbrauch dieser Langform höher als der des Originals für 8 Tasten. Daraus folgt: Selbst für lediglich 1 Taste ist die Originalroutine die bessere Wahl.<br />
<br />
Und wegen der Komplexität mal eine Frage: Sind Sie selbst in der Lage eine entsprechend effiziente <code>sqrt()</code>-Funktion zu schreiben, wie die, die Sie in der Standard-C-Bibliothek vorfinden? Nein? Dann dürften Sie eigentlich Ihrer Argumentation nach die Bibliotheksfunktion <code>sqrt()</code> nicht verwenden, sondern müssten sich stattdessen selbst eine Wurzel-Funktion schreiben.<br />
<br />
=== Selbstsättigendes Filter (nach Jürgen Schuhmacher) ===<br />
Durch die Nutzung der diskreten Signalanalyse in Software kann die Funktionalität der oben beschriebenen Entprellung mit einem Widerstand, einem Kondensator und einem Schmitt-Trigger nachgebildet werden, indem ein abstraktes IIR-Filter benutzt wird, das eine Kondensatorladekurve emuliert. Mit der Vorschrift ''Y(t) = k Y(t−1) + Input'' wird ein einfaches Filter erzeugt, das dem Eingangswert träge folgt. Bei Überschreiten eines bestimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.<br />
<br />
Für Assembler und VHDL bei FPGAs eignet sich aufgrund der leicht zu implementierenden binären Operationen folgende Darstellung mit einer Auflösung des Filterwertspeichers von nur 8 bit: Wert_Neu = Wert_Alt − Wert_Alt/16 + 16*(Taste = True). Der Filterwert bildet dann den gedämpften Verlauf des Eingangs (flankenverschliffen) ab und kann Prellen bis nahe an den Grenzbereich zum schnellen Tasten unterdrücken. Der Ausgangswert ist dann einfach das höchstwertige Bit des Filterwertes.<br />
<br />
[[Datei:Entprellung mit IIR-Filter.gif]]<br />
<br />
Dazu muss das Signal des Tasters idealerweise um den Faktor 10…20 schneller abgetastet werden, als die höchste gewünschte Tippgeschwindigkeit vorgibt. Noch schneller abzutasten ist möglich, führt aber zu mehr Bedarf an Bits beim Filter. Die Schmitt-Trigger-Funktion wird auch hier wieder benötigt und kann dadurch gebildet werden, dass eine 1 am Ausgang bei z.&nbsp;B. Überschreiten einer 60%-%-Grenze und eine 0 bei Unterschreitung der 40-%-Grenze ausgegeben wird. Im Zwischenbereich wird der alte Wert gehalten. Die realen Grenzen dieser [[Hysterese]] müssen in ähnlicher Weise an die Applikation angepasst werden, da zu enge Grenzen zu empfindlich gegenüber Störungen sind und zu weit gefasste Grenzen zu einem übermäßig trägem Verhalten führen.<br />
<br />
Als Alternative für einen solchen Filter erster Ordnung bieten sich auch einfache FIR-Filter an, welche ein verbessertes Zeitverhalten (Ansprech- und Verzögerungszeit, bei optimierter Hysteres) ermöglichen.<br />
<br />
=== Einfaches Mittelwertfilter (nach Lothar Miller) ===<br />
Für digitale Schaltungen oder PLDs empfiehlt sich ein FIR-Filter mit aneinandergereihten Flipflops. Man schiebt das Eingangssignal in eine Flipflop-Kette und schaltet oberhalb der Mitte um:<br />
<br />
SignalInput → FF1 → FF2 → FF3 → FF4 → FF5 → FF6 → FF7 → FF8<br />
<br />
Wenn alle FFs = 1 (Summe der FFs=8) dann SignalOutput = 1<br /><br />
Wenn alle FFs = 0 (Summe der FFs=0) dann SignalOutput = 0<br />
<br />
Dieses Verfahren kann sehr einfach in Logik abgebildet werden, weil für die Berechnung des Ausgangs nur ein NOR- bzw. ein AND-Gatter nötig ist.<br />
<br />
Das reale Signal muss dazu aber genügend langsam abgetastet werden, sodaß die Filterperiode die Prelldauer übersteigt, um zu verhindern, daß nicht inmitten einer passiven Phase eines Prellvorgangs ein 8-fach 1 gesehen wird. Damit wird die Interpretation vergleichsweise langsam.<br />
<br />
== Gegenüberstellung der Verfahren ==<br />
<br />
=== Hardware ===<br />
<br />
* „entprellte Schalter“: sehr teuer, große Bauform, verschleißbelastet, geringe Haltbarkeit<br />
* „Umschalter“: benötigt aufwendigeren Schalter, benötigt Elektronik<br />
* „Umschalter ohne FF“: benötigt aufwendigeren Schalter und kleinen Kondensator<br />
* „Kondensatorentprellung“: benötigt etwas mehr Platz, kommt mit schlechten Schaltern zurecht<br />
<br />
=== Software ===<br />
<br />
* Flankenverfahren:<br />
* Warteschleife: Durch die Warteschleifen entsteht eine nicht zu vernachlässigende Verzögerung im Code. Speziell wenn mehrere Tasten zu überwachen sind, nicht unproblematisch.<br />
* Timer: Universalfunktionalität, die durch geringen Speicherverbrauch, geringen Rechenzeitverbrauch und gute Funktion besticht. Der „Verbrauch“ eines Timers sieht auf den ersten Blick schlimmer aus, als er ist, denn in den meisten Programmen hat man sowieso einen Basistimer für die Zeitsteuerung des Programms im Einsatz, der für die Tastenentprellung mitbenutzt werden kann.<br />
* Filter: sehr geringer Platzbedarf in FPGAs, relativ gute Wirkung<br />
* Filter 2: sehr geringer Platzbedarf, gute Wirkung<br />
<br />
== Siehe auch ==<br />
<br />
* [[AVR-Tutorial: Tasten]] (Assembler)<br />
* [https://www.mikrocontroller.net/topic/6490 Forumsbeitrag]: von Peter Dannegger (AVR-Assembler)<br />
* [https://www.mikrocontroller.net/topic/552487?goto=7378825#7378825 Forumsbeitrag]: Entprellung im Arduino-Stil<br />
<br />
== Weblinks ==<br />
<br />
* [https://www.edn.com/contact-debouncing-algorithm-emulates-schmitt-trigger/ Contact-debouncing algorithm emulates Schmitt trigger (Artikel)], [https://web.archive.org/web/20170501074320/http://www.edn.com/Pdf/ViewPdf?contentItemId=4324067 als PDF] (englisch)<br />
* [http://www.ganssle.com/debouncing.pdf A Guide to Debouncing, or, How to Debounce a Contact in Two Easy Pages, by Jack Ganssle] (englisch), praktische Erläuterungen zum Entprellen in Soft- und Hardware<br />
* [https://www.pololu.com/docs/0J16/all Understanding Destructive LC Voltage Spikes] (englisch)<br />
<br />
[[Kategorie:AVR]]<br />
[[Kategorie:Signalverarbeitung]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Entprellung&diff=105991Entprellung2023-04-01T20:59:47Z<p>Engineer: /* Einfacher Taster */</p>
<hr />
<div>== Problembeschreibung ==<br />
Mechanische stromführende Komponenten wie Schalter und Taster neigen beim Ein- und Ausschalten zum sogenannten '''Prellen''', d.&nbsp;h. sie schalten schnell mehrfach aus und ein, was durch mechanische Vibrationen des Schaltkontaktes verursacht wird, sofern sie nicht mit aufwändigen mechanischen Maßnahmen dagegen geschützt sind. Besonders [[Drehgeber]] sind aufgrund der Rasterfunktion und der Bewegung des Bedieners dafür empfindlich. Auch optoelektronische Bauelemente und chemische Kontaktschalter sowie Flüssigkeitsschalter haben das Problem.<br />
<br />
Vereinfacht dargestellt, sieht eine von einem prellenden Schalter oder Taster geschaltete Spannung wie folgt aus:<br />
[[Bild:Entprellen.png]]<br />
<br />
Es existieren also mehrere kurze Einschaltimpulse, welche bei Tastern als Mehrfachbefehl und bei Drehgebern als falsche Winkelbewegung interpretiert werden können. Bei Schaltern wiederum kommt es in der elektronischen Baugruppe zu mehreren Resets und Einschaltvorgängen, die unnötig Strom ziehen oder im schlechtesten Fall die Schaltung stressen oder beschädigen können. Wichtige Schalter und solche, die hohe Ströme führen sollen, werden dazu mit geeigneten Maßnahmen wie Redundanz, Stufenschaltkonzepten oder bei Gas- und Flüssigkeitsschaltern durch elektrochemische Maßnahmen abgesichert. Bei einfachen Schaltern spart man sich dies jedoch.<br />
<br />
Da es bei diesen einfachen, ungeschützten Schaltern keine sichere Möglichkeit gibt, diese Effekte zu vermeiden, muss das prellende Signal sinnvoll ausgewertet werden. Dafür gibt es verschiedene Ansätze, sowohl mit Elektronik als auch mit Software, die im Folgenden vorgestellt werden.<br />
<br />
== Hardwareentprellung ==<br />
<br />
=== Prellfreie Schalter ===<br />
<br />
Wie bereits angedeutet, hält die elektromechanische Industrie für Spezialanwendungen verschiedene Sonderkonstruktionen bereit, die saubere Schaltzustände nach außen generieren, indem sie entweder eine mechanische Dämpfung in Form eines selbsthemmenden Federmechanismus oder eine integrierte elektronische Signalverzögerung benutzen. Solche Systeme sind jedoch teuer und werden meist nur im Leistungsbereich eingesetzt, wo nicht einfach nur das Signal ausgewertet werden kann. Zudem sind auch diese nicht 100%ig sicher und fallen alterungsbedingt öfters aus. Wo immer es geht, werden im Kleinsignalbereich daher Maßnahmen getroffen, die Wirkung des Prellens zu unterdrücken.<br />
<br />
=== Wechselschalter ===<br />
<br />
Für die Entprellung von Wechselschaltern (engl. ''Double Throw Switch'') kann ein klassisches RS-[[Flipflop]] genutzt werden. Bei dieser Variante werden neben zwei NAND-Gattern nur noch zwei Pull-Up-Widerstände benötigt.<br />
<br />
[[Bild:NAND_debouncer.png|thumb|left|350px|Taster entprellen mit NAND-RS-Flipflop]]<br />
<br />
{{Clear}}<br />
<br />
In der gezeigten Schalterstellung liegt an der Position /S der Pegel 0 an. Damit ist das Flipflop gesetzt und der Ausgang auf dem Pegel 1. Schließt der Schalter zwischen den Kontakten 2 und 3, liegt an der Postion /R der Pegel 0 an. Dies bedeutet, dass der Ausgang des Flipflops auf den Pegel 0 geht. Sobald der Schalter von einem zum anderen Kontakt wechselt, beginnt er in der Regel zu prellen. Während des Prellens wechselt der Schalter zwischen den beiden Zuständen „Schalter berührt Kontakt“ und „Schalter ist frei in der Luft“. Der Ausgang des Flipflops bleibt in dieser Prellzeit aber stabil, da der Schalter während des Prellens nie den gegenüberliegenden Kontakt berührt und das RS-Flipflop seinen Zustand allein halten kann. Die Prellzeit ist stark vom Schaltertyp abhängig und liegt zwischen 0,1 und 10&nbsp;ms. Die Dimensionierung der Widerstände ist relativ unkritisch. Als Richtwert können hier 100&nbsp;kΩ verwendet werden.<br />
<br />
==== Wechselschalter ohne Flipflop ====<br />
<br />
Wenn man einmal kein Flipflop zur Hand hat, kann man sich auch mit dieser Schaltung behelfen.<br />
<br />
[[Bild:WechselEntprellC.PNG|thumb|left|350px|Wechsler entprellen mit Kondensator]]<br />
<br />
{{Clear}}<br />
<br />
'''Zur Funktionsweise:'''<br />
Beim Umschalten wird der Kondensator immer sofort umgeladen.<br />
Während der Kontakt prellt, befindet er sich in der Luft und hat keinerlei Verbindung. Während dieser Zeit übernimmt der Kondensator das Halten des Pegels.<br />
<br />
'''Dimensionierung:'''<br />
Ist der entprellte Taster an ein IC angeschlossen, ist der ''Input Leakage Current'' der ausschlaggebende Strom. Falls weitere Ströme fließen sind diese mit zu berücksichtigen. Bei einem Mikrocontroller von Atmel ist 1&nbsp;µA typisch.<br />
Es gilt:<br />
:<math>\frac{\mathrm d U}{\mathrm d t} = \frac{I}{C}</math><br />
Da ein Prellen maximal ca. 10&nbsp;ms dauert und die Spannung in dieser Zeit beispielsweise um maximal 0,5&nbsp;V fallen soll, kommt man auf folgende Kapazität:<br />
:<math>C = \frac{I \cdot \Delta t}{\Delta U} = \frac{1~\text{µA} \cdot 10~\text{ms}}{\text{0,5}~\text{V}} = 20~\text{nF}</math><br />
<br />
Um Stromspitzen zu verringern kann ein Widerstand mit eingefügt werden. Eine Zeitkonstante von 1&nbsp;µs bis 1&nbsp;ms scheint sinnvoll. Also 500&nbsp;Ω bis 500&nbsp;kΩ sind nutzbar, wobei bei niedrigem Widerstand die Stromspitzen höher sind, und bei 500&nbsp;kΩ der Pinstrom störend wird.<br />
<br />
=== Einfacher Taster ===<br />
<br />
Auch wenn das RS-Flipflop sehr effektiv ist, wird diese Variante der Entprellung nur selten angewendet. Der Grund dafür ist, dass in Schaltungen häufiger einfache Taster eingesetzt werden. Diese sind oft kleiner und preisgünstiger. Um solche Taster (engl. ''push button / momentary switch'') zu entprellen, kann ein einfacher RC-Tiefpass eingesetzt werden. Hierbei wird ein Kondensator über einen Widerstand je nach Schalterstellung auf- oder entladen. Das RC-Glied bildet einen Tiefpass, sodass die Spannung über dem Kondensator nicht von einem Pegel auf den anderen springen kann.<br />
<br />
[[Bild:RC_debouncer.png|thumb|left|300px|Taster entprellen mit RC-Entpreller]]<br />
<br />
[[Datei:Entprellen1a.png|thumb|350px|Entstehender Spannungsverlauf]]<br />
{{Absatz}}<br />
<br />
Wenn der Schalter geöffnet ist, lädt sich der Kondensator langsam über die beiden Widerstände R<sub>1</sub> und R<sub>2</sub> auf V<sub>CC</sub> auf. Beim Erreichen der Umschaltschwelle springt der Ausgang auf den Pegel 0. Wird der Schalter geschlossen, entlädt sich der Kondensator langsam über den Widerstand R<sub>2</sub>. Demnach ändert sich der Ausgang des Inverters auf den Pegel 1. Während der Taster prellt, kann sich die Spannung über dem Kondensator nicht sprunghaft ändern, da das Auf- und Entladen eher langsam über die Widerstände erfolgt. Außerdem sind die Schaltschwellen für die Übergänge ''low''→''high'' und ''high''→''low'' stark verschieden (Hysterese, siehe Artikel [[Schmitt-Trigger]]). Bei richtiger Dimensionierung der Bauelemente wird somit der Ausgang des Inverters prellfrei. Zu beachten ist, dass der Inverter '''unbedingt''' über Schmitt-Trigger-Eingänge verfügen muss, weil schon bei gewöhnlichen digitalen Eingängen immer auch analoge Effekte wie Rauschen wirken, die im Umschaltpunkt zu unsicherem Verhalten führen. Bei Standard-Logikeingängen ist der Bereich von üblicherweise 0,8…2,0&nbsp;V deren Ausgang nicht definiert. Trotz Filterung käme es daher in diesem Bereich zu einer Weiterleitung des Prellens.<br />
<br />
Als Inverterbaustein kann zum Beispiel der [https://www.ti.com/lit/ds/symlink/sn74hc14.pdf 74HC14] oder der [https://www.ti.com/lit/ds/symlink/cd40106b.pdf CD40106] (pinkompatibel) eingesetzt werden. Alternativ kann auch ein [https://www.ti.com/lit/ds/symlink/cd4093b.pdf CD4093] Verwendung finden. Bei dem CD4093 handelt es sich um NAND-Gatter mit Schmitt-Trigger-Eingängen. Um aus einem NAND-Gatter einen Inverter zu machen, müssen einfach nur die beiden Eingänge verbunden werden oder ein Eingang fest auf ''high'' gelegt werden.<br />
<br />
Für eine geeignete Dimensionierung muss man etwas mit den Standardformeln für einen Kondensator jonglieren. Die Spannung über dem Kondensator beim Entladen berechnet sich nach<br />
:<math>U_C(t) = U_0 \cdot \exp{\frac{-t}{R_2 C_1}}</math>.<br />
<br />
Damit der Ausgang des Inverters stabil ist, muss die Spannung über dem Kondensator und damit die Spannung am Eingang des Inverters über der Spannung bleiben, bei welcher der Inverter umschaltet. Diese Schwellwertspannung ist genau die zeitabhängige Spannung über dem Kondensator.<br />
:<math>U_C(t)\!\ = U_{th}</math><br />
<br />
Durch Umstellen der Formel ergibt sich nun<br />
:<math>R_2=\frac{-t}{C_1 \cdot \ln\left(\frac{U_{th}}{U_0}\right)}</math>.<br />
<br />
Ein Taster prellt üblicherweise bis zu etwa 10&nbsp;ms. Zur Sicherheit kann bei der Berechnung des Widerstandes eine Prellzeit von 20&nbsp;ms angenommen werden. <math>U_0</math> ist die Betriebsspannung, also V<sub>CC</sub>. Die Schwellwertspannung muss aus dem Datenblatt des eingesetzten Schmitt-Triggers abgelesen werden. Beim 74HC14 beträgt der gesuchte Wert 2,0&nbsp;V. Nimmt man für den Kondensator 1&nbsp;µF und beträgt die Betriebsspannung 5&nbsp;V, ergibt sich für den Widerstand ein Wert von etwa 22&nbsp;kΩ.<br />
<br />
Wird der Schalter geöffnet, lädt sich der Kondensator nach folgender Formel auf:<br />
:<math>U_C(t) = U_0 \cdot \left( 1-\exp{\frac{-t}{(R_1+R_2)\cdot C_1}} \right)</math><br />
<br />
Mit <math>U_{th}=U_C</math> ergibt das Umstellen nach <math>(R_1+R_2)</math>:<br />
:<math>R_1+R_2 = \frac{-t}{C_1 \cdot \ln\left(1-\frac{U_{th}}{U_0} \right)}</math><br />
<br />
Für die Schwellspannung lässt sich aus dem Datenblatt ein Wert von 2,3&nbsp;V ablesen. Mit diesem Wert und den Annahmen von oben ergibt sich für <math>R_1+R_2</math> ein Wert von 32&nbsp;kΩ. Somit folgt für <math>R_1</math> ein Wert von etwa 10&nbsp;kΩ.<br />
<br />
Anmerkung: Beim 74LS14 von Hitachi z.&nbsp;B. sind die oberen und unteren Schaltschwellwerte unterschiedlich. Es muss darauf geachtet werden, dass <math>U_{th}</math> beim Entladen die untere Schwelle und <math>U_{th}</math> beim Laden die obere Schwelle einnimmt.<br />
<br />
== Softwareentprellung ==<br />
<br />
In den Zeiten der elektronischen Auswertung von Tastern und Schaltern ist das softwaretechnische Entprellen oft billiger als die Benutzung eines teuren Schalters. Daher werden heute z.&nbsp;B. auch Computertastaturen nicht mehr mit prellarmen Tasten oder Entprellkondensatoren ausgestattet.<br />
<br />
Bei Verwendung des in den meisten Geräten ohnehin vorhandenen Mikrocontrollers z.&nbsp;B. kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso gut funktioniert. Dabei ist nur zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch einige Hardwareressourcen (z.&nbsp;B. Timer) benötigt werden. Dafür hat man aber den Vorteil, kurze Pulse, die offensichtlich keine Tastenbetätigung sein können sondern z.&nbsp;B. durch Einstreuungen hervorgerufen werden, einfach ausfiltern zu können.<br />
<br />
=== Flankenerkennung ===<br />
Bei einem Taster gibt es insgesamt 4 theoretische Zustände:<br />
<br />
# war nicht gedrückt und ist nicht gedrückt<br />
# war nicht gedrückt und ist gedrückt (steigende Flanke)<br />
# war gedrückt und ist immer noch gedrückt<br />
# war gedrückt und ist nicht mehr gedrückt (fallende Flanke)<br />
<br />
Diese einzelnen Zustände lassen sich jetzt bequem abfragen/durchlaufen. Die Entprellung geschieht dabei durch die ganze Laufzeit des Programms. Die Taster werden hierbei als ''active-low'' angeschlossen, um die internen Pull-Ups zu nutzen.<br />
<br />
Diese Routine gibt für den Zustand „steigende Flanke“ den Wert „1“ zurück, sonst „0“.<br />
<br />
<syntaxhighlight lang="c"><br />
#define TASTERPORT PINC<br />
#define TASTERBIT PINC1<br />
<br />
char taster(void)<br />
{<br />
static unsigned char zustand;<br />
char rw = 0;<br />
<br />
if(zustand == 0 && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gedrueckt (steigende Flanke)<br />
{<br />
zustand = 1;<br />
rw = 1;<br />
}<br />
else if (zustand == 1 && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gehalten<br />
{<br />
zustand = 2;<br />
rw = 0;<br />
}<br />
else if (zustand == 2 && (TASTERPORT & (1<<TASTERBIT))) //Taster wird losgelassen (fallende Flanke)<br />
{<br />
zustand = 3;<br />
rw = 0;<br />
}<br />
else if (zustand == 3 && (TASTERPORT & (1<<TASTERBIT))) //Taster losgelassen<br />
{<br />
zustand = 0;<br />
rw = 0;<br />
}<br />
<br />
return rw;<br />
}<br />
</syntaxhighlight><br />
<br />
Eine Erweiterung, damit beliebig lange das Halten einer Taste erkannt wird, kann man ganz einfach so implementieren:<br />
<br />
<syntaxhighlight lang="c"><br />
// Zustand kann entweder zum ersten Mal als gehalten detektiert werden oder aber jedes weitere Mal<br />
else if (((zustand == 1) || (zustand == 2)) && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gehalten<br />
{<br />
zustand = 2;<br />
rw = 0;<br />
}<br />
</syntaxhighlight><br />
<br />
=== Warteschleifen-Verfahren ===<br />
<br />
Soll nun mit einem Mikrocontroller gezählt werden, wie oft ein Kontakt oder ein Relais geschaltet wird, muss das Prellen des Kontaktes exakt berücksichtigt und von einem gewollten Mehrfachschalten abgegrenzt werden, da sonst möglicherweise Fehlimpulse gezählt oder andererseits echte Schaltvorgänge übersprungen werden. Dem muss beim Schreiben des Programms hinsichtlich des Abtastens des Kontaktes unbedingt Rechnung getragen werden.<br />
<br />
Beim folgenden einfachen Beispiel für eine Entprellung ist zu beachten, dass der AVR im Falle eines Tastendrucks 200&nbsp;ms wartet, also brach liegt. Bei zeitkritischen Anwendungen sollte man ein anderes Verfahren nutzen (z.&nbsp;B. Abfrage der Tastenzustände in einer Timer-Interrupt-Service-Routine).<br />
<br />
<syntaxhighlight lang="c"><br />
#include <avr/io.h><br />
#include <inttypes.h><br />
#ifndef F_CPU<br />
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"<br />
#define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */<br />
#endif<br />
#include <util/delay.h> /* bei alter avr-libc: #include <avr/delay.h> */<br />
<br />
/* Einfache Funktion zum Entprellen eines Tasters */<br />
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)<br />
{<br />
if ( !(*port & (1 << pin)) )<br />
{<br />
/* Pin wurde auf Masse gezogen, 100ms warten */<br />
_delay_ms(50); // Maximalwert des Parameters an _delay_ms<br />
_delay_ms(50); // beachten, vgl. Dokumentation der avr-libc<br />
if ( *port & (1 << pin) )<br />
{<br />
/* Anwender Zeit zum Loslassen des Tasters geben */<br />
_delay_ms(50);<br />
_delay_ms(50);<br />
return 1;<br />
}<br />
}<br />
return 0;<br />
}<br />
<br />
int main(void)<br />
{<br />
DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang Taster) */<br />
PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand aktivieren */<br />
...<br />
if (debounce(&PINB, PB0))<br />
{<br />
/* Falls Taster an PIN PB0 gedrueckt */<br />
/* LED an Port PD7 an- bzw. ausschalten: */<br />
PORTD = PORTD ^ ( 1 << PD7 );<br />
}<br />
...<br />
}<br />
</syntaxhighlight><br />
<br />
Die obige Routine hat leider mehrere Nachteile:<br />
* sie detektiert nur das Loslassen (unergonomisch),<br />
* sie verzögert die Mainloop immer um 100&nbsp;ms bei gedrückter Taste,<br />
* sie verliert Tastendrücke, je mehr die Mainloop zu tun hat.<br />
<br />
Eine ähnlich einfach zu benutzende Routine, aber ohne all diese Nachteile findet sich im Forenthread<br />
[https://www.mikrocontroller.net/topic/164194 Entprellung für Anfänger].<br />
<br />
Der ''DEBOUNCE''-Befehl in dem BASIC-Dialekt BASCOM für AVR ist ebenfalls nach dem Warteschleifen-Verfahren programmiert. Die Wartezeit beträgt standardmäßig 25&nbsp;ms, kann aber vom Anwender überschrieben werden. Vgl. [https://avrhelp.mcselec.com/index.html?debounce.htm BASCOM Online-Manual zu DEBOUNCE].<br />
<br />
Eine C-Implementierung für eine Tastenabfrage mit Warteschleife ist im Artikel [[AVR-GCC-Tutorial#IO-Register als Parameter und Variablen|AVR-GCC-Tutorial: IO-Register als Parameter und Variablen]] angeben.<br />
<br />
Der Nachteil dieses Verfahrens ist, dass der Controller durch die Warteschleife blockiert wird. Günstiger ist die Implementierung mit einem Timer-Interrupt.<br />
<br />
==== Warteschleifenvariante mit Maske und Pointer (nach Christian Riggenbach) ====<br />
<br />
Hier eine weitere Funktion, um Taster zu entprellen: Durch den zusätzlichen Code kann eine Entprellzeit von durchschnittlich 1…3&nbsp;ms (mindestens 8·150&nbsp;µs = 1,2&nbsp;ms) erreicht werden. Grundsätzlich prüft die Funktion den Pegel der Pins auf einem bestimmten Port. Wenn die/der Pegel 8-mal konstant war, wird die Schleife verlassen. Diese Funktion kann sehr gut eingesetzt werden, um in einer Endlosschleife Taster abzufragen, da sie, wie erwähnt, eine kurze Wartezeit hat.<br />
<br />
<syntaxhighlight lang="c"><br />
void entprellung( volatile uint8_t *port, uint8_t maske ) {<br />
uint8_t port_puffer;<br />
uint8_t entprellungs_puffer;<br />
<br />
for( entprellungs_puffer=0 ; entprellungs_puffer!=0xff ; ) {<br />
entprellungs_puffer<<=1;<br />
port_puffer = *port;<br />
_delay_us(150);<br />
if( (*port & maske) == (port_puffer & maske) )<br />
entprellungs_puffer |= 0x01;<br />
}<br />
}<br />
</syntaxhighlight><br />
Die Funktion wird wie folgt aufgerufen:<br />
<syntaxhighlight lang="c"><br />
// Bugfix 20100414<br />
// https://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass<br />
entprellung( &PINB, (1<<PINB2) ); // ggf. Prellen abwarten<br />
if( PINB & (1<<PINB2) ) // dann stabilen Wert einlesen<br />
{<br />
// mach was<br />
}<br />
else<br />
{<br />
// mach was anderes<br />
}<br />
</syntaxhighlight><br />
Als Maske kann ein beliebiger Wert übergeben werden. Sie verhindert, dass nichtverwendete Taster die Entprellzeit negativ beeinflussen.<br />
<br />
==== Debounce-Makro von Peter Dannegger ====<br />
<br />
Peter Dannegger hat im Forumsbeitrag [https://www.mikrocontroller.net/topic/164194#1566921 Entprellen für Anfänger] folgendes vereinfachtes Entprellverfahren beschrieben. Das Makro arbeitet in der Originalversion mit ''active low'' geschalteten Tastern, kann aber einfach für ''active high'' geschaltete Taster angepasst werden ([[Pollin Funk-AVR-Evaluationsboard#Tasty Reloaded|Tasty Reloaded]]).<br />
<br />
<syntaxhighlight lang="c"><br />
/************************************************************************/<br />
/* */<br />
/* Not so powerful Debouncing Example */<br />
/* No Interrupt needed */<br />
/* */<br />
/* Author: Peter Dannegger */<br />
/* */<br />
/************************************************************************/<br />
// Target: ATtiny13<br />
<br />
#include <avr/io.h><br />
#define F_CPU 9.6e6<br />
#include <util/delay.h><br />
<br />
<br />
#define debounce( port, pin ) \<br />
({ \<br />
static uint8_t flag = 0; /* new variable on every macro usage */ \<br />
uint8_t i = 0; \<br />
\<br />
if( flag ){ /* check for key release: */ \<br />
for(;;){ /* loop ... */ \<br />
if( !(port & 1<<pin) ){ /* ... until key pressed or ... */ \<br />
i = 0; /* 0 = bounce */ \<br />
break; \<br />
} \<br />
_delay_us( 98 ); /* * 256 = 25ms */ \<br />
if( --i == 0 ){ /* ... until key >25ms released */ \<br />
flag = 0; /* clear press flag */ \<br />
i = 0; /* 0 = key release debounced */ \<br />
break; \<br />
} \<br />
} \<br />
}else{ /* else check for key press: */ \<br />
for(;;){ /* loop ... */ \<br />
if( (port & 1<<pin) ){ /* ... until key released or ... */ \<br />
i = 0; /* 0 = bounce */ \<br />
break; \<br />
} \<br />
_delay_us( 98 ); /* * 256 = 25ms */ \<br />
if( --i == 0 ){ /* ... until key >25ms pressed */ \<br />
flag = 1; /* set press flag */ \<br />
i = 1; /* 1 = key press debounced */ \<br />
break; \<br />
} \<br />
} \<br />
} \<br />
i; /* return value of Macro */ \<br />
})<br />
<br />
/*<br />
Testapplication<br />
*/<br />
int main(void)<br />
{<br />
DDRB &= ~(1<<PB0);<br />
PORTB |= 1<<PB0;<br />
DDRB |= 1<<PB2;<br />
DDRB &= ~(1<<PB1);<br />
PORTB |= 1<<PB1;<br />
DDRB |= 1<<PB3;<br />
for(;;){<br />
if( debounce( PINB, PB1 ) )<br />
PORTB ^= 1<<PB2;<br />
if( debounce( PINB, PB0 ) )<br />
PORTB ^= 1<<PB3;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Wenn das Makro für die gleiche Taste (Pin) an mehreren Stellen aufgerufen werden soll, muss eine Funktion angelegt werden, damit beide Aufrufe an die gleiche Zustandsvariable <code>flag</code> auswerten (siehe [https://www.mikrocontroller.net/topic/195914#1918727 diesen Forumsbeitrag]):<br />
<br />
<syntaxhighlight lang="c"><br />
// Hilfsfunktion<br />
uint8_t debounce_C1( void )<br />
{<br />
return debounce(PINC, PC1);<br />
}<br />
<br />
// Beispielanwendung<br />
int main(void)<br />
{<br />
DDRB |= 1<<PB2;<br />
DDRB |= 1<<PB3;<br />
DDRC &= ~(1<<PC1);<br />
PORTC |= 1<<PC1; // Pullup für Taster<br />
<br />
for(;;){<br />
if( debounce_C1() ) // nicht: debounce(PINC, PC1)<br />
PORTB ^= 1<<PB2;<br />
if( debounce_C1() ) // nicht: debounce(PINC, PC1)<br />
PORTB ^= 1<<PB3;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
=== Timer-Verfahren (nach Peter Dannegger) ===<br />
<br />
==== Grundroutine (AVR-Assembler) ====<br />
<br />
Siehe dazu: Forumsbeitrag [https://www.mikrocontroller.net/topic/6490 Tasten entprellen].<br />
<br />
Vorteile:<br />
* besonders kurzer Code<br />
* schnell<br />
<br />
Außerdem können 8 Tasten (aktiv low) gleichzeitig bearbeitet werden, es dürfen also<br />
alle exakt zur selben Zeit gedrückt werden. Andere Routinen können z.&nbsp;B. nur eine Taste verarbeiten, d.&nbsp;h. die zuerst oder zuletzt gedrückte gewinnt, oder es kommt Unsinn heraus.<br />
<br />
Die eigentliche Einlese- und Entprellroutine ist nur 8 Instruktionen<br />
kurz. Der entprellte Tastenzustand ist im Register <code>key_state</code>. Mit nur 2 weiteren Instruktionen wird dann der Wechsel von ''Taste offen'' zu<br />
''Taste gedrückt'' erkannt und im Register <code>key_press</code> abgelegt. Im Beispielcode werden dann damit 8 LEDs ein- und ausgeschaltet. Jede Taste entspricht einem Bit in den Registern, d.&nbsp;h. die Verarbeitung erfolgt bitweise mit logischen Operationen. Zum Verständnis empfiehlt es sich daher, die Logikgleichungen mit Gattern für ein Bit = eine Taste aufzumalen. Die Register kann man sich als Flipflops denken, die mit der Entprellzeit als Takt arbeiten. D.&nbsp;h. man kann das auch so z.&nbsp;B. in einem GAL22V10 realisieren.<br />
<br />
Als Kommentar sind neben den einzelnen Instruktionen alle 8 möglichen<br />
Kombinationen der 3 Signale dargestellt.<br />
<br />
Beispielcode für AVR (Assembler):<br />
<br />
<syntaxhighlight lang="asm"><br />
.nolist<br />
.include "c:\avr\inc\1200def.inc"<br />
.list<br />
.def save_sreg = r0<br />
.def iwr0 = r1<br />
.def iwr1 = r2<br />
<br />
.def key_old = r3<br />
.def key_state = r4<br />
.def key_press = r5<br />
<br />
.def leds = r16<br />
.def wr0 = r17<br />
<br />
.equ key_port = pind<br />
.equ led_port = portb<br />
<br />
rjmp init<br />
.org OVF0addr ;timer interrupt 24ms<br />
in save_sreg, SREG<br />
get8key: ;/old state iwr1 iwr0<br />
mov iwr0, key_old ;00110011 10101010 00110011<br />
in key_old, key_port ;11110000<br />
eor iwr0, key_old ; 11000011<br />
com key_old ;00001111<br />
mov iwr1, key_state ; 10101010<br />
or key_state, iwr0 ; 11101011<br />
and iwr0, key_old ; 00000011<br />
eor key_state, iwr0 ; 11101000<br />
and iwr1, iwr0 ; 00000010<br />
or key_press, iwr1 ;store key press detect<br />
;<br />
; insert other timer functions here<br />
;<br />
out SREG, save_sreg<br />
reti<br />
;-------------------------------------------------------------------------<br />
init:<br />
ldi wr0, 0xFF<br />
out ddrb, wr0<br />
ldi wr0, 1<<CS02 | 1<<CS00 ;divide by 1024 * 256<br />
out TCCR0, wr0<br />
ldi wr0, 1<<TOIE0 ;enable timer interrupt<br />
out TIMSK, wr0<br />
<br />
clr key_old<br />
clr key_state<br />
clr key_press<br />
ldi leds, 0xFF<br />
main: cli<br />
eor leds, key_press ;toggle LEDs<br />
clr key_press ;clear, if key press action done<br />
sei<br />
out led_port, leds<br />
rjmp main<br />
;-------------------------------------------------------------<br />
</syntaxhighlight><br />
<br />
==== Komfortroutine (C für AVR) ====<br />
<br />
Siehe dazu: Forumsbeitrag [https://www.mikrocontroller.net/topic/48465 Universelle Tastenabfrage].<br />
<br />
'''Anmerkung:''' Wenn statt ''active-low'' (Ruhezustand ''high'') ''active-high'' (Ruhezustand ''low'') verwendet wird, muss eine Zeile geändert werden; siehe<br />
[https://www.mikrocontroller.net/topic/48465 gesamter Beitrag im Forum],<br />
[https://www.mikrocontroller.net/topic/48465#606555 Stelle 1 im Beitrag] ([https://www.mikrocontroller.net/topic/48465#2306398 Stelle 2 im Beitrag] muss ''nicht'' geändert werden, da hier die Polarität gar keinen Einfluß hat).<br />
<br />
'''Anmerkung 2:''' Zur Initialisierung siehe [https://www.mikrocontroller.net/topic/48465#3572793 diesen Forumsbeitrag].<br />
<br />
Funktionsprinzip wie oben plus zusätzliche Features:<br />
* Kann Tasten sparen durch unterschiedliche Aktionen bei kurzem oder langem Drücken<br />
* Wiederholfunktion, z.&nbsp;B. für die Eingabe von Werten<br />
<br />
Das Programm ist für avr-gcc/avr-libc geschrieben, kann aber mit ein paar Anpassungen auch mit anderen Compilern und Mikrocontrollern verwendet werden. Eine Portierung für den AT91SAM7 findet man [http://www.google.com/codesearch?q=show:ac2viP-2E2Y:pzkOO5QRsoc:RPICuprYy-A&sa=N&cd=1&ct=rc&cs_p=svn://mikrocontroller.net/mp3dec/trunk&cs_f=keys.c#a0 hier] (aus dem Projekt [[ARM MP3/AAC Player]]).<br />
<syntaxhighlight lang="c"><br />
/************************************************************************/<br />
/* */<br />
/* Debouncing 8 Keys */<br />
/* Sampling 4 Times */<br />
/* With Repeat Function */<br />
/* */<br />
/* Author: Peter Dannegger */<br />
/* danni@specs.de */<br />
/* */<br />
/************************************************************************/<br />
<br />
#include <stdint.h><br />
#include <avr/io.h><br />
#include <avr/interrupt.h><br />
<br />
#ifndef F_CPU<br />
#define F_CPU 1000000 // processor clock frequency<br />
#warning kein F_CPU definiert<br />
#endif<br />
<br />
#define KEY_DDR DDRB<br />
#define KEY_PORT PORTB<br />
#define KEY_PIN PINB<br />
#define KEY0 0<br />
#define KEY1 1<br />
#define KEY2 2<br />
#define ALL_KEYS (1<<KEY0 | 1<<KEY1 | 1<<KEY2)<br />
<br />
#define REPEAT_MASK (1<<KEY1 | 1<<KEY2) // repeat: key1, key2<br />
#define REPEAT_START 50 // after 500ms<br />
#define REPEAT_NEXT 20 // every 200ms<br />
<br />
#define LED_DDR DDRA<br />
#define LED_PORT PORTA<br />
#define LED0 0<br />
#define LED1 1<br />
#define LED2 2<br />
<br />
volatile uint8_t key_state; // debounced and inverted key state:<br />
// bit = 1: key pressed<br />
volatile uint8_t key_press; // key press detect<br />
<br />
volatile uint8_t key_rpt; // key long press and repeat<br />
<br />
<br />
ISR( TIMER0_OVF_vect ) // every 10ms<br />
{<br />
static uint8_t ct0 = 0xFF, ct1 = 0xFF, rpt;<br />
uint8_t i;<br />
<br />
TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms<br />
<br />
i = key_state ^ ~KEY_PIN; // key changed ?<br />
ct0 = ~( ct0 & i ); // reset or count ct0<br />
ct1 = ct0 ^ (ct1 & i); // reset or count ct1<br />
i &= ct0 & ct1; // count until roll over ?<br />
key_state ^= i; // then toggle debounced state<br />
key_press |= key_state & i; // 0->1: key press detect<br />
<br />
if( (key_state & REPEAT_MASK) == 0 ) // check repeat function<br />
rpt = REPEAT_START; // start delay<br />
if( --rpt == 0 ){<br />
rpt = REPEAT_NEXT; // repeat delay<br />
key_rpt |= key_state & REPEAT_MASK;<br />
}<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key has been pressed. Each pressed key is reported<br />
// only once<br />
//<br />
uint8_t get_key_press( uint8_t key_mask )<br />
{<br />
cli(); // read and clear atomic !<br />
key_mask &= key_press; // read key(s)<br />
key_press ^= key_mask; // clear key(s)<br />
sei();<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key has been pressed long enough such that the<br />
// key repeat functionality kicks in. After a small setup delay<br />
// the key is reported being pressed in subsequent calls<br />
// to this function. This simulates the user repeatedly<br />
// pressing and releasing the key.<br />
//<br />
uint8_t get_key_rpt( uint8_t key_mask )<br />
{<br />
cli(); // read and clear atomic !<br />
key_mask &= key_rpt; // read key(s)<br />
key_rpt ^= key_mask; // clear key(s)<br />
sei();<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key is pressed right now<br />
//<br />
uint8_t get_key_state( uint8_t key_mask )<br />
<br />
{<br />
key_mask &= key_state;<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
uint8_t get_key_short( uint8_t key_mask )<br />
{<br />
cli(); // read key state and key press atomic !<br />
return get_key_press( ~key_state & key_mask );<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
uint8_t get_key_long( uint8_t key_mask )<br />
{<br />
return get_key_press( get_key_rpt( key_mask ));<br />
}<br />
<br />
int main( void )<br />
{<br />
LED_PORT = 0xFF;<br />
LED_DDR = 0xFF;<br />
<br />
// Configure debouncing routines<br />
KEY_DDR &= ~ALL_KEYS; // configure key port for input<br />
KEY_PORT |= ALL_KEYS; // and turn on pull up resistors<br />
<br />
TCCR0 = (1<<CS02)|(1<<CS00); // divide by 1024<br />
TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms<br />
TIMSK |= 1<<TOIE0; // enable timer interrupt<br />
<br />
sei();<br />
<br />
while(1){<br />
if( get_key_short( 1<<KEY1 ))<br />
LED_PORT ^= 1<<LED1;<br />
<br />
if( get_key_long( 1<<KEY1 ))<br />
LED_PORT ^= 1<<LED2;<br />
<br />
// single press and repeat<br />
<br />
if( get_key_press( 1<<KEY2 ) || get_key_rpt( 1<<KEY2 )){<br />
uint8_t i = LED_PORT;<br />
<br />
i = (i & 0x07) | ((i << 1) & 0xF0);<br />
if( i < 0xF0 )<br />
i |= 0x08;<br />
LED_PORT = i;<br />
}<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Das Single-press-und-repeat-Beispiel geht nicht in jeder Beschaltung; folgendes Beispiel sollte universeller sein (einzelne LED an/aus):<br />
<syntaxhighlight lang="c"><br />
// single press and repeat<br />
if( get_key_press( 1<<KEY2 ) || get_key_rpt( 1<<KEY2 ))<br />
LED_PORT ^=0x08;<br />
</syntaxhighlight><br />
<br />
Neuere Variante, die einer Taste folgende Funktionen erlaubt:<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1753367 Universelle Tastenabfrage mit 2 Tastenerkennung]<br />
<syntaxhighlight lang="c"><br />
- get_key_press()<br />
- get_key_rpt()<br />
- get_key_press() mit get_key_rpt()<br />
- get_key_short() mit get_key_long()<br />
- get_key_short() mit get_key_long_r() und get_key_rpt_l()<br />
</syntaxhighlight><br />
Erweiterung für die Erkennung von zwei gleichzeitig gedrückten Tasten:<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1753367]<br />
<syntaxhighlight lang="c"><br />
- get_key_common()<br />
</syntaxhighlight><br />
<br />
===== Funktionsweise =====<br />
Der Code basiert auf 8 parallelen vertikalen Zählern, die über die Variablen <code>ct0</code> und <code>ct1</code> aufgebaut werden,<br />
<br />
[[Bild:VertCount.png|framed|center|8 vertikale Zähler in zwei 8-Bit-Variablen]]<br />
<br />
wobei jeweils ein Bit in <code>ct0</code> mit dem gleichwertigen Bit in <code>ct1</code> zusammengenommen einen 2-Bit-Zähler bildet.<br />
Der Code, der sich um die 8 Zähler kümmert, ist so geschrieben, daß er alle 8 Zähler gemeinsam parallel behandelt.<br />
<br />
<syntaxhighlight lang="c"><br />
i = key_state ^ ~KEY_PIN; // key changed ?<br />
</syntaxhighlight><br />
<code>i</code> enthält an dieser Stelle für jede Taste, die sich im Vergleich mit dem vorhergehenden entprellten Zustand (<code>key_state</code>) verändert hat, ein 1-Bit.<br />
<br />
<syntaxhighlight lang="c"><br />
ct0 = ~( ct0 & i ); // reset or count ct0<br />
ct1 = ct0 ^ (ct1 & i); // reset or count ct1<br />
</syntaxhighlight><br />
<br />
Diese beiden Anweisungen erniedrigen den 2-Bit-Zähler <code>ct0</code>/<code>ct1</code> für jedes Bit um 1, welches in <code>i</code> gesetzt ist. Liegt an der entsprechenden Stelle in <code>i</code> ein 0-Bit vor (keine Änderung des Zustands), so wird der Zähler <code>ct0</code>/<code>ct1</code> für dieses Bit auf 1 gesetzt.<br />
Der Grundzustand des Zählers ist also <code>ct0</code> == 1 und <code>ct1</code> == 1 (Wert 3). Der Zähler zählt daher mit jedem ISR-Aufruf, bei dem die Taste im Vergleich zu <code>key_state</code> als verändert erkannt wurde,<br />
<br />
ct1 ct0<br />
1 1 // 3<br />
1 0 // 2<br />
0 1 // 1<br />
0 0 // 0<br />
1 1 // 3<br />
<br />
<syntaxhighlight lang="c"><br />
i &= ct0 & ct1; // count until roll over ?<br />
</syntaxhighlight><br />
in <code>i</code> bleibt nur dort ein 1-Bit erhalten, wo sowohl in <code>ct1</code> als auch in <code>ct0</code> ein 1-Bit vorgefunden wird, der betreffende Zähler also bis 3 zählen konnte. Durch die zusätzliche Verundung mit <code>i</code> wird der Fall abgefangen, dass ein konstanter Zählerwert von 3 in <code>i</code> ein 1-Bit hinterlässt. Im Endergebnis bedeutet das, dass nur ein Zählerwechsel von 0 auf 3 zu einem 1-Bit an der betreffenden Stelle in <code>i</code> führt, aber auch nur dann, wenn in <code>i</code> an dieser Bitposition ebenfalls ein 1-Bit war (welches wiederum deswegen auf 1 war, weil an diesem Eingabeport eine Veränderung zum letzten bekannten entprellten Zustand festgestellt wurde). Alles zusammengenommen heißt das, dass ein Tastendruck dann erkannt wird, wenn die Taste 4-mal hintereinander in einem anderen Zustand vorgefunden wurde als dem zuletzt bekannten entprellten Tastenzustand.<br />
<br />
An dieser Stelle ist <code>i</code> daher ein Vektor von 8 Bits, von denen jedes einzelne der Bits darüber Auskunft gibt, ob die entsprechende Taste mehrmals hintereinander im selben Zustand angetroffen wurde, der nicht mit dem zuletzt bekannten Tastenzustand übereinstimmt. Ist das der Fall, dann wird eine entsprechende Veränderung des Tastenzustands in <code>key_state</code> registriert<br />
<syntaxhighlight lang="c"><br />
key_state ^= i; // then toggle debounced state<br />
</syntaxhighlight><br />
und wenn sich in <code>key_state</code> das entsprechende Bit von 0 auf 1 verändert hat, wird dieses Ereignis als „Taste wurde niedergedrückt“ gewertet.<br />
<syntaxhighlight lang="c"><br />
key_press |= key_state & i; // 0->1: key press detect<br />
</syntaxhighlight><br />
<br />
Damit ist der Tasteneingang entprellt. Und zwar sowohl beim Drücken einer Taste als auch beim Loslassen (damit Tastenpreller beim Loslassen nicht mit dem Niederdrücken einer Taste verwechselt werden). Der weitere Code beschäftigt sich dann nur noch damit, diesen entprellten Tastenzustand weiter zu verarbeiten.<br />
<br />
Der Codeteil sieht durch die Verwendung der vielen bitweisen Operationen relativ komplex aus. Behält man aber im Hinterkopf, dass einige der bitweisen wie ein „paralles If“ gleichzeitig auf allen 8 Bits eingesetzt werden, dann vereinfacht sich vieles. Ein<br />
<syntaxhighlight lang="c"><br />
key_press |= key_state & i;<br />
</syntaxhighlight><br />
ist nichts anderes als ein<br />
<syntaxhighlight lang="c"><br />
// teste ob Bit 0 sowohl in key_state als auch in i gesetzt ist<br />
// und setze Bit 0 in key_press, wenn das der Fall ist<br />
if( ( key_state & ( 1 << 0 ) ) &&<br />
( i & ( 1 << 0 ) )<br />
key_press |= ( 1 << 0 );<br />
<br />
// Bit 1<br />
if( ( key_state & ( 1 << 1 ) ) &&<br />
( i & ( 1 << 1 ) )<br />
key_press |= ( 1 << 1 );<br />
<br />
// Bit 2<br />
if( ( key_state & ( 1 << 2 ) ) &&<br />
( i & ( 1 << 2 ) )<br />
key_press |= ( 1 << 2 );<br />
<br />
...<br />
</syntaxhighlight><br />
nur als wesentlich kompaktere Operation ausgeführt und für alle 8 Bits gleichzeitig.<br />
Die Kürze und Effizienz dieser paar Codezeilen ergibt sich aus dem Umstand, dass jedes Bit in den Variablen für eine Taste steht und alle 8 (maximal möglichen) Tasten gleichzeitig die Operationen durchlaufen.<br />
<br />
Die Funktionsweisen der verschiedenen Modi anhand von Zeitstrahlen erklärt<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1844458 dieser Forumsbeitrag].<br />
<br />
„Walkthrough“ der verschiedenen Zustände der einzelnen Variablen anhand eines Tastendrucks auf<br />
[https://www.avrfreaks.net/comment/726676#comment-726676 avrfreaks.net].<br />
<br />
===== Reduziert auf lediglich 1 Taste =====<br />
Diskussionen im Forum zeigen immer wieder, dass viele eine Abneigung gegen diesen Code haben, weil er ihnen sehr kompliziert vorkommt.<br />
<br />
Der Code ist nicht leicht zu analysieren und er zieht alle Register dessen, was möglich ist, um sowohl Laufzeit als auch Speicherverbrauch einzusparen. Oft hört man auch das Argument: Ich benötige ja nur eine Entprellung für 1 Taste, gibt es da nichts Einfacheres?<br />
<br />
Hier ist die „Langform“ des Codes, so wie man das für lediglich 1 Taste schreiben würde, wenn man exakt dasselbe Entprellverfahren einsetzen würde. Man sieht: Da ist keine Hexerei dabei: In <code>key_state</code> wird der letzte bekannte entprellte Zustand der Taste gehalten. Der Pin-Eingang wird mit diesem Zustand verglichen und wenn sich die beiden unterscheiden, dann wird ein Zähler heruntergezählt. Produziert dieses Herunterzählen einen Unterlauf des Zählers, dann gilt die Taste als entprellt und wenn dann auch noch die Taste gerade gedrückt ist, dann wird dieses in <code>key_press</code> entsprechend vermerkt.<br />
<br />
<syntaxhighlight lang="c"><br />
uint8_t key_state;<br />
uint8_t key_counter;<br />
volatile uint8_t key_press;<br />
<br />
ISR( ... Overflow ... )<br />
{<br />
uint8_t input = KEY_PIN & ( 1 << KEY0 );<br />
<br />
if( input != key_state ) {<br />
key_counter--;<br />
if( key_counter == 0xFF ) {<br />
key_counter = 3;<br />
key_state = input;<br />
if( input )<br />
key_press = TRUE;<br />
}<br />
}<br />
else<br />
key_counter = 3;<br />
<br />
}<br />
<br />
uint8_t get_key_press()<br />
{<br />
uint8_t result;<br />
<br />
cli();<br />
result = key_press;<br />
key_press = FALSE;<br />
sei();<br />
<br />
return result;<br />
}<br />
</syntaxhighlight><br />
<br />
Der vollständige Entprellcode, wie weiter oben gelistet, besticht jetzt aber darin, dass er compiliert kleiner ist als diese anschaulichere Variante für lediglich 1 Taste. Und das bei gleichzeitig erhöhter Funktionalität. Denn z.&nbsp;B. ein Autorepeat ist in diesem Code noch gar nicht eingebaut. Und spätestens wenn man dann eine zweite Taste entprellen möchte, dann ist auch der SRAM-Speicherverbrauch dieser Langform höher als der des Originals für 8 Tasten. Daraus folgt: Selbst für lediglich 1 Taste ist die Originalroutine die bessere Wahl.<br />
<br />
Und wegen der Komplexität mal eine Frage: Sind Sie selbst in der Lage eine entsprechend effiziente <code>sqrt()</code>-Funktion zu schreiben, wie die, die Sie in der Standard-C-Bibliothek vorfinden? Nein? Dann dürften Sie eigentlich Ihrer Argumentation nach die Bibliotheksfunktion <code>sqrt()</code> nicht verwenden, sondern müssten sich stattdessen selbst eine Wurzel-Funktion schreiben.<br />
<br />
=== Selbstsättigendes Filter (nach Jürgen Schuhmacher) ===<br />
Durch die Nutzung der diskreten Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit einem Widerstand, einem Kondensator und einem Schmitt-Trigger wie in Hardware nachgebildet werden, indem ein abstraktes IIR-Filter benutzt wird, der eine Kondensatorladekurve emuliert. Mit der Vorschrift ''Y(t) = k Y(t−1) + Input'' wird ein einfaches Filter erzeugt, das dem Eingangswert träge folgt. Bei Überschreiten eines bestimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.<br />
<br />
Für Assembler und VHDL bei FPGAs eignet sich aufgrund der leicht zu implementierenden binären Operationen folgende Darstellung mit einer Auflösung des Filterwertspeichers von nur 8 bit: Wert_Neu = Wert_Alt − Wert_Alt/16 + 16*(Taste = True). Der Filterwert bildet dann den gedämpften Verlauf des Eingangs (flankenverschliffen) ab und kann Prellen bis nahe an den Grenzbereich zum schnellen Tasten unterdrücken. Der Ausgangswert ist dann einfach das höchstwertige Bit des Filterwertes.<br />
<br />
[[Datei:Entprellung mit IIR-Filter.gif]]<br />
<br />
Dazu muss das Signal des Tasters idealerweise um den Faktor 10…20 schneller abgetastet werden, als die höchste gewünschte Tippgeschwindigkeit vorgibt. Noch schneller abzutasten ist möglich, führt aber zu mehr Bedarf an Bits beim Filter. Die Schmitt-Trigger-Funktion kann dadurch gebildet werden, dass eine 1 am Ausgang bei z.&nbsp;B. Überschreiten einer 55-%-Grenze und eine 0 bei Unterschreitung der 45-%-Grenze ausgegeben wird. Im Zwischenbereich wird der alte Wert gehalten. Die realen Grenzen dieser [[Hysterese]] müssen an die Applikation angepasst werden, da zu enge Grenzen sonst zu empfindlich gegenüber Störungen wären.<br />
<br />
=== Einfaches Mittelwertfilter (nach Lothar Miller) ===<br />
Für digitale Schaltungen oder PLDs empfiehlt sich ein FIR-Filter mit aneinandergereihten Flipflops. Man schiebt das Eingangssignal in eine Flipflop-Kette und schaltet oberhalb der Mitte um:<br />
<br />
SignalInput → FF1 → FF2 → FF3 → FF4 → FF5 → FF6 → FF7 → FF8<br />
<br />
Wenn alle FFs = 1 (Summe der FFs=8) dann SignalOutput = 1<br /><br />
Wenn alle FFs = 0 (Summe der FFs=0) dann SignalOutput = 0<br />
<br />
Dieses Verfahren kann sehr einfach in Logik abgebildet werden, weil für die Berechnung des Ausgangs nur ein NOR- bzw. ein AND-Gatter nötig ist.<br />
<br />
Das reale Signal muss dazu aber genügend langsam abgetastet werden, sodaß die Filterperiode die Prelldauer übersteigt, um zu verhindern, daß nicht inmitten einer passiven Phase eines Prellvorgangs ein 8-fach 1 gesehen wird. Damit wird die Interpretation vergleichsweise langsam.<br />
<br />
== Gegenüberstellung der Verfahren ==<br />
<br />
=== Hardware ===<br />
<br />
* „entprellte Schalter“: sehr teuer, große Bauform, verschleißbelastet, geringe Haltbarkeit<br />
* „Umschalter“: benötigt aufwendigeren Schalter, benötigt Elektronik<br />
* „Umschalter ohne FF“: benötigt aufwendigeren Schalter und kleinen Kondensator<br />
* „Kondensatorentprellung“: benötigt etwas mehr Platz, kommt mit schlechten Schaltern zurecht<br />
<br />
=== Software ===<br />
<br />
* Flankenverfahren:<br />
* Warteschleife: Durch die Warteschleifen entsteht eine nicht zu vernachlässigende Verzögerung im Code. Speziell wenn mehrere Tasten zu überwachen sind, nicht unproblematisch.<br />
* Timer: Universalfunktionalität, die durch geringen Speicherverbrauch, geringen Rechenzeitverbrauch und gute Funktion besticht. Der „Verbrauch“ eines Timers sieht auf den ersten Blick schlimmer aus, als er ist, denn in den meisten Programmen hat man sowieso einen Basistimer für die Zeitsteuerung des Programms im Einsatz, der für die Tastenentprellung mitbenutzt werden kann.<br />
* Filter: sehr geringer Platzbedarf in FPGAs, relativ gute Wirkung<br />
* Filter 2: sehr geringer Platzbedarf, gute Wirkung<br />
<br />
== Siehe auch ==<br />
<br />
* [[AVR-Tutorial: Tasten]] (Assembler)<br />
* [https://www.mikrocontroller.net/topic/6490 Forumsbeitrag]: von Peter Dannegger (AVR-Assembler)<br />
* [https://www.mikrocontroller.net/topic/552487?goto=7378825#7378825 Forumsbeitrag]: Entprellung im Arduino-Stil<br />
<br />
== Weblinks ==<br />
<br />
* [https://www.edn.com/contact-debouncing-algorithm-emulates-schmitt-trigger/ Contact-debouncing algorithm emulates Schmitt trigger (Artikel)], [https://web.archive.org/web/20170501074320/http://www.edn.com/Pdf/ViewPdf?contentItemId=4324067 als PDF] (englisch)<br />
* [http://www.ganssle.com/debouncing.pdf A Guide to Debouncing, or, How to Debounce a Contact in Two Easy Pages, by Jack Ganssle] (englisch), praktische Erläuterungen zum Entprellen in Soft- und Hardware<br />
* [https://www.pololu.com/docs/0J16/all Understanding Destructive LC Voltage Spikes] (englisch)<br />
<br />
[[Kategorie:AVR]]<br />
[[Kategorie:Signalverarbeitung]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Entprellung&diff=105990Entprellung2023-04-01T20:52:46Z<p>Engineer: /* Prellfreie Schalter */</p>
<hr />
<div>== Problembeschreibung ==<br />
Mechanische stromführende Komponenten wie Schalter und Taster neigen beim Ein- und Ausschalten zum sogenannten '''Prellen''', d.&nbsp;h. sie schalten schnell mehrfach aus und ein, was durch mechanische Vibrationen des Schaltkontaktes verursacht wird, sofern sie nicht mit aufwändigen mechanischen Maßnahmen dagegen geschützt sind. Besonders [[Drehgeber]] sind aufgrund der Rasterfunktion und der Bewegung des Bedieners dafür empfindlich. Auch optoelektronische Bauelemente und chemische Kontaktschalter sowie Flüssigkeitsschalter haben das Problem.<br />
<br />
Vereinfacht dargestellt, sieht eine von einem prellenden Schalter oder Taster geschaltete Spannung wie folgt aus:<br />
[[Bild:Entprellen.png]]<br />
<br />
Es existieren also mehrere kurze Einschaltimpulse, welche bei Tastern als Mehrfachbefehl und bei Drehgebern als falsche Winkelbewegung interpretiert werden können. Bei Schaltern wiederum kommt es in der elektronischen Baugruppe zu mehreren Resets und Einschaltvorgängen, die unnötig Strom ziehen oder im schlechtesten Fall die Schaltung stressen oder beschädigen können. Wichtige Schalter und solche, die hohe Ströme führen sollen, werden dazu mit geeigneten Maßnahmen wie Redundanz, Stufenschaltkonzepten oder bei Gas- und Flüssigkeitsschaltern durch elektrochemische Maßnahmen abgesichert. Bei einfachen Schaltern spart man sich dies jedoch.<br />
<br />
Da es bei diesen einfachen, ungeschützten Schaltern keine sichere Möglichkeit gibt, diese Effekte zu vermeiden, muss das prellende Signal sinnvoll ausgewertet werden. Dafür gibt es verschiedene Ansätze, sowohl mit Elektronik als auch mit Software, die im Folgenden vorgestellt werden.<br />
<br />
== Hardwareentprellung ==<br />
<br />
=== Prellfreie Schalter ===<br />
<br />
Wie bereits angedeutet, hält die elektromechanische Industrie für Spezialanwendungen verschiedene Sonderkonstruktionen bereit, die saubere Schaltzustände nach außen generieren, indem sie entweder eine mechanische Dämpfung in Form eines selbsthemmenden Federmechanismus oder eine integrierte elektronische Signalverzögerung benutzen. Solche Systeme sind jedoch teuer und werden meist nur im Leistungsbereich eingesetzt, wo nicht einfach nur das Signal ausgewertet werden kann. Zudem sind auch diese nicht 100%ig sicher und fallen alterungsbedingt öfters aus. Wo immer es geht, werden im Kleinsignalbereich daher Maßnahmen getroffen, die Wirkung des Prellens zu unterdrücken.<br />
<br />
=== Wechselschalter ===<br />
<br />
Für die Entprellung von Wechselschaltern (engl. ''Double Throw Switch'') kann ein klassisches RS-[[Flipflop]] genutzt werden. Bei dieser Variante werden neben zwei NAND-Gattern nur noch zwei Pull-Up-Widerstände benötigt.<br />
<br />
[[Bild:NAND_debouncer.png|thumb|left|350px|Taster entprellen mit NAND-RS-Flipflop]]<br />
<br />
{{Clear}}<br />
<br />
In der gezeigten Schalterstellung liegt an der Position /S der Pegel 0 an. Damit ist das Flipflop gesetzt und der Ausgang auf dem Pegel 1. Schließt der Schalter zwischen den Kontakten 2 und 3, liegt an der Postion /R der Pegel 0 an. Dies bedeutet, dass der Ausgang des Flipflops auf den Pegel 0 geht. Sobald der Schalter von einem zum anderen Kontakt wechselt, beginnt er in der Regel zu prellen. Während des Prellens wechselt der Schalter zwischen den beiden Zuständen „Schalter berührt Kontakt“ und „Schalter ist frei in der Luft“. Der Ausgang des Flipflops bleibt in dieser Prellzeit aber stabil, da der Schalter während des Prellens nie den gegenüberliegenden Kontakt berührt und das RS-Flipflop seinen Zustand allein halten kann. Die Prellzeit ist stark vom Schaltertyp abhängig und liegt zwischen 0,1 und 10&nbsp;ms. Die Dimensionierung der Widerstände ist relativ unkritisch. Als Richtwert können hier 100&nbsp;kΩ verwendet werden.<br />
<br />
==== Wechselschalter ohne Flipflop ====<br />
<br />
Wenn man einmal kein Flipflop zur Hand hat, kann man sich auch mit dieser Schaltung behelfen.<br />
<br />
[[Bild:WechselEntprellC.PNG|thumb|left|350px|Wechsler entprellen mit Kondensator]]<br />
<br />
{{Clear}}<br />
<br />
'''Zur Funktionsweise:'''<br />
Beim Umschalten wird der Kondensator immer sofort umgeladen.<br />
Während der Kontakt prellt, befindet er sich in der Luft und hat keinerlei Verbindung. Während dieser Zeit übernimmt der Kondensator das Halten des Pegels.<br />
<br />
'''Dimensionierung:'''<br />
Ist der entprellte Taster an ein IC angeschlossen, ist der ''Input Leakage Current'' der ausschlaggebende Strom. Falls weitere Ströme fließen sind diese mit zu berücksichtigen. Bei einem Mikrocontroller von Atmel ist 1&nbsp;µA typisch.<br />
Es gilt:<br />
:<math>\frac{\mathrm d U}{\mathrm d t} = \frac{I}{C}</math><br />
Da ein Prellen maximal ca. 10&nbsp;ms dauert und die Spannung in dieser Zeit beispielsweise um maximal 0,5&nbsp;V fallen soll, kommt man auf folgende Kapazität:<br />
:<math>C = \frac{I \cdot \Delta t}{\Delta U} = \frac{1~\text{µA} \cdot 10~\text{ms}}{\text{0,5}~\text{V}} = 20~\text{nF}</math><br />
<br />
Um Stromspitzen zu verringern kann ein Widerstand mit eingefügt werden. Eine Zeitkonstante von 1&nbsp;µs bis 1&nbsp;ms scheint sinnvoll. Also 500&nbsp;Ω bis 500&nbsp;kΩ sind nutzbar, wobei bei niedrigem Widerstand die Stromspitzen höher sind, und bei 500&nbsp;kΩ der Pinstrom störend wird.<br />
<br />
=== Einfacher Taster ===<br />
<br />
Auch wenn das RS-Flipflop sehr effektiv ist, wird diese Variante der Entprellung nur selten angewendet. Grund dafür ist, dass in Schaltungen häufiger einfache Taster eingesetzt werden. Diese sind oft kleiner und preisgünstiger. Um einfache Taster (engl. ''push button / momentary switch'') zu entprellen, kann ein einfacher RC-Tiefpass eingesetzt werden. Hierbei wird ein Kondensator über einen Widerstand je nach Schalterstellung auf- oder entladen. Das RC-Glied bildet einen Tiefpass, sodass die Spannung über dem Kondensator nicht von einem Pegel auf den anderen springen kann.<br />
<br />
[[Bild:RC_debouncer.png|thumb|left|300px|Taster entprellen mit RC-Entpreller]]<br />
<br />
[[Datei:Entprellen1a.png|thumb|350px|Entstehender Spannungsverlauf]]<br />
{{Absatz}}<br />
<br />
Wenn der Schalter geöffnet ist, lädt sich der Kondensator langsam über die beiden Widerstände R<sub>1</sub> und R<sub>2</sub> auf V<sub>CC</sub> auf. Beim Erreichen der Umschaltschwelle springt der Ausgang auf den Pegel 0. Wird der Schalter geschlossen, entlädt sich der Kondensator langsam über den Widerstand R<sub>2</sub>. Demnach ändert sich der Ausgang des Inverters auf den Pegel 1. Während der Taster prellt, kann sich die Spannung über dem Kondensator nicht sprunghaft ändern, da das Auf- und Entladen eher langsam über die Widerstände erfolgt. Außerdem sind die Schaltschwellen für die Übergänge ''low''→''high'' und ''high''→''low'' stark verschieden (Hysterese, siehe Artikel [[Schmitt-Trigger]]). Bei richtiger Dimensionierung der Bauelemente wird somit der Ausgang des Inverters prellfrei.<br />
<br />
Zu beachten ist, dass der Inverter '''unbedingt''' einer mit Schmitt-Trigger-Eingängen sein muss, weil bei Standard-Logikeingängen im Bereich von üblicherweise 0,8…2,0&nbsp;V der Ausgang nicht definiert ist. Als Inverter kann zum Beispiel der [https://www.ti.com/lit/ds/symlink/sn74hc14.pdf 74HC14] oder der [https://www.ti.com/lit/ds/symlink/cd40106b.pdf CD40106] (pinkompatibel) eingesetzt werden. Alternativ kann auch ein [https://www.ti.com/lit/ds/symlink/cd4093b.pdf CD4093] eingesetzt werden. Bei dem CD4093 handelt es sich um NAND-Gatter mit Schmitt-Trigger-Eingängen. Um aus einem NAND-Gatter einen Inverter zu machen, müssen einfach nur die beiden Eingänge verbunden werden oder ein Eingang fest auf ''high'' gelegt werden.<br />
<br />
Für eine geeignete Dimensionierung muss man etwas mit den Standardformeln für einen Kondensator jonglieren. Die Spannung über dem Kondensator beim Entladen berechnet sich nach<br />
:<math>U_C(t) = U_0 \cdot \exp{\frac{-t}{R_2 C_1}}</math>.<br />
<br />
Damit der Ausgang des Inverters stabil ist, muss die Spannung über dem Kondensator und damit die Spannung am Eingang des Inverters über der Spannung bleiben, bei welcher der Inverter umschaltet. Diese Schwellwertspannung ist genau die zeitabhängige Spannung über dem Kondensator.<br />
:<math>U_C(t)\!\ = U_{th}</math><br />
<br />
Durch Umstellen der Formel ergibt sich nun<br />
:<math>R_2=\frac{-t}{C_1 \cdot \ln\left(\frac{U_{th}}{U_0}\right)}</math>.<br />
<br />
Ein Taster prellt üblicherweise bis zu etwa 10&nbsp;ms. Zur Sicherheit kann bei der Berechnung des Widerstandes eine Prellzeit von 20&nbsp;ms angenommen werden. <math>U_0</math> ist die Betriebsspannung, also V<sub>CC</sub>. Die Schwellwertspannung muss aus dem Datenblatt des eingesetzten Schmitt-Triggers abgelesen werden. Beim 74HC14 beträgt der gesuchte Wert 2,0&nbsp;V. Nimmt man für den Kondensator 1&nbsp;µF und beträgt die Betriebsspannung 5&nbsp;V, ergibt sich für den Widerstand ein Wert von etwa 22&nbsp;kΩ.<br />
<br />
Wird der Schalter geöffnet, lädt sich der Kondensator nach folgender Formel auf:<br />
:<math>U_C(t) = U_0 \cdot \left( 1-\exp{\frac{-t}{(R_1+R_2)\cdot C_1}} \right)</math><br />
<br />
Mit <math>U_{th}=U_C</math> ergibt das Umstellen nach <math>(R_1+R_2)</math>:<br />
:<math>R_1+R_2 = \frac{-t}{C_1 \cdot \ln\left(1-\frac{U_{th}}{U_0} \right)}</math><br />
<br />
Für die Schwellspannung lässt sich aus dem Datenblatt ein Wert von 2,3&nbsp;V ablesen. Mit diesem Wert und den Annahmen von oben ergibt sich für <math>R_1+R_2</math> ein Wert von 32&nbsp;kΩ. Somit folgt für <math>R_1</math> ein Wert von etwa 10&nbsp;kΩ.<br />
<br />
Anmerkung: Beim 74LS14 von Hitachi z.&nbsp;B. sind die oberen und unteren Schaltschwellwerte unterschiedlich. Es muss darauf geachtet werden, dass <math>U_{th}</math> beim Entladen die untere Schwelle und <math>U_{th}</math> beim Laden die obere Schwelle einnimmt.<br />
<br />
== Softwareentprellung ==<br />
<br />
In den Zeiten der elektronischen Auswertung von Tastern und Schaltern ist das softwaretechnische Entprellen oft billiger als die Benutzung eines teuren Schalters. Daher werden heute z.&nbsp;B. auch Computertastaturen nicht mehr mit prellarmen Tasten oder Entprellkondensatoren ausgestattet.<br />
<br />
Bei Verwendung des in den meisten Geräten ohnehin vorhandenen Mikrocontrollers z.&nbsp;B. kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso gut funktioniert. Dabei ist nur zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch einige Hardwareressourcen (z.&nbsp;B. Timer) benötigt werden. Dafür hat man aber den Vorteil, kurze Pulse, die offensichtlich keine Tastenbetätigung sein können sondern z.&nbsp;B. durch Einstreuungen hervorgerufen werden, einfach ausfiltern zu können.<br />
<br />
=== Flankenerkennung ===<br />
Bei einem Taster gibt es insgesamt 4 theoretische Zustände:<br />
<br />
# war nicht gedrückt und ist nicht gedrückt<br />
# war nicht gedrückt und ist gedrückt (steigende Flanke)<br />
# war gedrückt und ist immer noch gedrückt<br />
# war gedrückt und ist nicht mehr gedrückt (fallende Flanke)<br />
<br />
Diese einzelnen Zustände lassen sich jetzt bequem abfragen/durchlaufen. Die Entprellung geschieht dabei durch die ganze Laufzeit des Programms. Die Taster werden hierbei als ''active-low'' angeschlossen, um die internen Pull-Ups zu nutzen.<br />
<br />
Diese Routine gibt für den Zustand „steigende Flanke“ den Wert „1“ zurück, sonst „0“.<br />
<br />
<syntaxhighlight lang="c"><br />
#define TASTERPORT PINC<br />
#define TASTERBIT PINC1<br />
<br />
char taster(void)<br />
{<br />
static unsigned char zustand;<br />
char rw = 0;<br />
<br />
if(zustand == 0 && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gedrueckt (steigende Flanke)<br />
{<br />
zustand = 1;<br />
rw = 1;<br />
}<br />
else if (zustand == 1 && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gehalten<br />
{<br />
zustand = 2;<br />
rw = 0;<br />
}<br />
else if (zustand == 2 && (TASTERPORT & (1<<TASTERBIT))) //Taster wird losgelassen (fallende Flanke)<br />
{<br />
zustand = 3;<br />
rw = 0;<br />
}<br />
else if (zustand == 3 && (TASTERPORT & (1<<TASTERBIT))) //Taster losgelassen<br />
{<br />
zustand = 0;<br />
rw = 0;<br />
}<br />
<br />
return rw;<br />
}<br />
</syntaxhighlight><br />
<br />
Eine Erweiterung, damit beliebig lange das Halten einer Taste erkannt wird, kann man ganz einfach so implementieren:<br />
<br />
<syntaxhighlight lang="c"><br />
// Zustand kann entweder zum ersten Mal als gehalten detektiert werden oder aber jedes weitere Mal<br />
else if (((zustand == 1) || (zustand == 2)) && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gehalten<br />
{<br />
zustand = 2;<br />
rw = 0;<br />
}<br />
</syntaxhighlight><br />
<br />
=== Warteschleifen-Verfahren ===<br />
<br />
Soll nun mit einem Mikrocontroller gezählt werden, wie oft ein Kontakt oder ein Relais geschaltet wird, muss das Prellen des Kontaktes exakt berücksichtigt und von einem gewollten Mehrfachschalten abgegrenzt werden, da sonst möglicherweise Fehlimpulse gezählt oder andererseits echte Schaltvorgänge übersprungen werden. Dem muss beim Schreiben des Programms hinsichtlich des Abtastens des Kontaktes unbedingt Rechnung getragen werden.<br />
<br />
Beim folgenden einfachen Beispiel für eine Entprellung ist zu beachten, dass der AVR im Falle eines Tastendrucks 200&nbsp;ms wartet, also brach liegt. Bei zeitkritischen Anwendungen sollte man ein anderes Verfahren nutzen (z.&nbsp;B. Abfrage der Tastenzustände in einer Timer-Interrupt-Service-Routine).<br />
<br />
<syntaxhighlight lang="c"><br />
#include <avr/io.h><br />
#include <inttypes.h><br />
#ifndef F_CPU<br />
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"<br />
#define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */<br />
#endif<br />
#include <util/delay.h> /* bei alter avr-libc: #include <avr/delay.h> */<br />
<br />
/* Einfache Funktion zum Entprellen eines Tasters */<br />
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)<br />
{<br />
if ( !(*port & (1 << pin)) )<br />
{<br />
/* Pin wurde auf Masse gezogen, 100ms warten */<br />
_delay_ms(50); // Maximalwert des Parameters an _delay_ms<br />
_delay_ms(50); // beachten, vgl. Dokumentation der avr-libc<br />
if ( *port & (1 << pin) )<br />
{<br />
/* Anwender Zeit zum Loslassen des Tasters geben */<br />
_delay_ms(50);<br />
_delay_ms(50);<br />
return 1;<br />
}<br />
}<br />
return 0;<br />
}<br />
<br />
int main(void)<br />
{<br />
DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang Taster) */<br />
PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand aktivieren */<br />
...<br />
if (debounce(&PINB, PB0))<br />
{<br />
/* Falls Taster an PIN PB0 gedrueckt */<br />
/* LED an Port PD7 an- bzw. ausschalten: */<br />
PORTD = PORTD ^ ( 1 << PD7 );<br />
}<br />
...<br />
}<br />
</syntaxhighlight><br />
<br />
Die obige Routine hat leider mehrere Nachteile:<br />
* sie detektiert nur das Loslassen (unergonomisch),<br />
* sie verzögert die Mainloop immer um 100&nbsp;ms bei gedrückter Taste,<br />
* sie verliert Tastendrücke, je mehr die Mainloop zu tun hat.<br />
<br />
Eine ähnlich einfach zu benutzende Routine, aber ohne all diese Nachteile findet sich im Forenthread<br />
[https://www.mikrocontroller.net/topic/164194 Entprellung für Anfänger].<br />
<br />
Der ''DEBOUNCE''-Befehl in dem BASIC-Dialekt BASCOM für AVR ist ebenfalls nach dem Warteschleifen-Verfahren programmiert. Die Wartezeit beträgt standardmäßig 25&nbsp;ms, kann aber vom Anwender überschrieben werden. Vgl. [https://avrhelp.mcselec.com/index.html?debounce.htm BASCOM Online-Manual zu DEBOUNCE].<br />
<br />
Eine C-Implementierung für eine Tastenabfrage mit Warteschleife ist im Artikel [[AVR-GCC-Tutorial#IO-Register als Parameter und Variablen|AVR-GCC-Tutorial: IO-Register als Parameter und Variablen]] angeben.<br />
<br />
Der Nachteil dieses Verfahrens ist, dass der Controller durch die Warteschleife blockiert wird. Günstiger ist die Implementierung mit einem Timer-Interrupt.<br />
<br />
==== Warteschleifenvariante mit Maske und Pointer (nach Christian Riggenbach) ====<br />
<br />
Hier eine weitere Funktion, um Taster zu entprellen: Durch den zusätzlichen Code kann eine Entprellzeit von durchschnittlich 1…3&nbsp;ms (mindestens 8·150&nbsp;µs = 1,2&nbsp;ms) erreicht werden. Grundsätzlich prüft die Funktion den Pegel der Pins auf einem bestimmten Port. Wenn die/der Pegel 8-mal konstant war, wird die Schleife verlassen. Diese Funktion kann sehr gut eingesetzt werden, um in einer Endlosschleife Taster abzufragen, da sie, wie erwähnt, eine kurze Wartezeit hat.<br />
<br />
<syntaxhighlight lang="c"><br />
void entprellung( volatile uint8_t *port, uint8_t maske ) {<br />
uint8_t port_puffer;<br />
uint8_t entprellungs_puffer;<br />
<br />
for( entprellungs_puffer=0 ; entprellungs_puffer!=0xff ; ) {<br />
entprellungs_puffer<<=1;<br />
port_puffer = *port;<br />
_delay_us(150);<br />
if( (*port & maske) == (port_puffer & maske) )<br />
entprellungs_puffer |= 0x01;<br />
}<br />
}<br />
</syntaxhighlight><br />
Die Funktion wird wie folgt aufgerufen:<br />
<syntaxhighlight lang="c"><br />
// Bugfix 20100414<br />
// https://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass<br />
entprellung( &PINB, (1<<PINB2) ); // ggf. Prellen abwarten<br />
if( PINB & (1<<PINB2) ) // dann stabilen Wert einlesen<br />
{<br />
// mach was<br />
}<br />
else<br />
{<br />
// mach was anderes<br />
}<br />
</syntaxhighlight><br />
Als Maske kann ein beliebiger Wert übergeben werden. Sie verhindert, dass nichtverwendete Taster die Entprellzeit negativ beeinflussen.<br />
<br />
==== Debounce-Makro von Peter Dannegger ====<br />
<br />
Peter Dannegger hat im Forumsbeitrag [https://www.mikrocontroller.net/topic/164194#1566921 Entprellen für Anfänger] folgendes vereinfachtes Entprellverfahren beschrieben. Das Makro arbeitet in der Originalversion mit ''active low'' geschalteten Tastern, kann aber einfach für ''active high'' geschaltete Taster angepasst werden ([[Pollin Funk-AVR-Evaluationsboard#Tasty Reloaded|Tasty Reloaded]]).<br />
<br />
<syntaxhighlight lang="c"><br />
/************************************************************************/<br />
/* */<br />
/* Not so powerful Debouncing Example */<br />
/* No Interrupt needed */<br />
/* */<br />
/* Author: Peter Dannegger */<br />
/* */<br />
/************************************************************************/<br />
// Target: ATtiny13<br />
<br />
#include <avr/io.h><br />
#define F_CPU 9.6e6<br />
#include <util/delay.h><br />
<br />
<br />
#define debounce( port, pin ) \<br />
({ \<br />
static uint8_t flag = 0; /* new variable on every macro usage */ \<br />
uint8_t i = 0; \<br />
\<br />
if( flag ){ /* check for key release: */ \<br />
for(;;){ /* loop ... */ \<br />
if( !(port & 1<<pin) ){ /* ... until key pressed or ... */ \<br />
i = 0; /* 0 = bounce */ \<br />
break; \<br />
} \<br />
_delay_us( 98 ); /* * 256 = 25ms */ \<br />
if( --i == 0 ){ /* ... until key >25ms released */ \<br />
flag = 0; /* clear press flag */ \<br />
i = 0; /* 0 = key release debounced */ \<br />
break; \<br />
} \<br />
} \<br />
}else{ /* else check for key press: */ \<br />
for(;;){ /* loop ... */ \<br />
if( (port & 1<<pin) ){ /* ... until key released or ... */ \<br />
i = 0; /* 0 = bounce */ \<br />
break; \<br />
} \<br />
_delay_us( 98 ); /* * 256 = 25ms */ \<br />
if( --i == 0 ){ /* ... until key >25ms pressed */ \<br />
flag = 1; /* set press flag */ \<br />
i = 1; /* 1 = key press debounced */ \<br />
break; \<br />
} \<br />
} \<br />
} \<br />
i; /* return value of Macro */ \<br />
})<br />
<br />
/*<br />
Testapplication<br />
*/<br />
int main(void)<br />
{<br />
DDRB &= ~(1<<PB0);<br />
PORTB |= 1<<PB0;<br />
DDRB |= 1<<PB2;<br />
DDRB &= ~(1<<PB1);<br />
PORTB |= 1<<PB1;<br />
DDRB |= 1<<PB3;<br />
for(;;){<br />
if( debounce( PINB, PB1 ) )<br />
PORTB ^= 1<<PB2;<br />
if( debounce( PINB, PB0 ) )<br />
PORTB ^= 1<<PB3;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Wenn das Makro für die gleiche Taste (Pin) an mehreren Stellen aufgerufen werden soll, muss eine Funktion angelegt werden, damit beide Aufrufe an die gleiche Zustandsvariable <code>flag</code> auswerten (siehe [https://www.mikrocontroller.net/topic/195914#1918727 diesen Forumsbeitrag]):<br />
<br />
<syntaxhighlight lang="c"><br />
// Hilfsfunktion<br />
uint8_t debounce_C1( void )<br />
{<br />
return debounce(PINC, PC1);<br />
}<br />
<br />
// Beispielanwendung<br />
int main(void)<br />
{<br />
DDRB |= 1<<PB2;<br />
DDRB |= 1<<PB3;<br />
DDRC &= ~(1<<PC1);<br />
PORTC |= 1<<PC1; // Pullup für Taster<br />
<br />
for(;;){<br />
if( debounce_C1() ) // nicht: debounce(PINC, PC1)<br />
PORTB ^= 1<<PB2;<br />
if( debounce_C1() ) // nicht: debounce(PINC, PC1)<br />
PORTB ^= 1<<PB3;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
=== Timer-Verfahren (nach Peter Dannegger) ===<br />
<br />
==== Grundroutine (AVR-Assembler) ====<br />
<br />
Siehe dazu: Forumsbeitrag [https://www.mikrocontroller.net/topic/6490 Tasten entprellen].<br />
<br />
Vorteile:<br />
* besonders kurzer Code<br />
* schnell<br />
<br />
Außerdem können 8 Tasten (aktiv low) gleichzeitig bearbeitet werden, es dürfen also<br />
alle exakt zur selben Zeit gedrückt werden. Andere Routinen können z.&nbsp;B. nur eine Taste verarbeiten, d.&nbsp;h. die zuerst oder zuletzt gedrückte gewinnt, oder es kommt Unsinn heraus.<br />
<br />
Die eigentliche Einlese- und Entprellroutine ist nur 8 Instruktionen<br />
kurz. Der entprellte Tastenzustand ist im Register <code>key_state</code>. Mit nur 2 weiteren Instruktionen wird dann der Wechsel von ''Taste offen'' zu<br />
''Taste gedrückt'' erkannt und im Register <code>key_press</code> abgelegt. Im Beispielcode werden dann damit 8 LEDs ein- und ausgeschaltet. Jede Taste entspricht einem Bit in den Registern, d.&nbsp;h. die Verarbeitung erfolgt bitweise mit logischen Operationen. Zum Verständnis empfiehlt es sich daher, die Logikgleichungen mit Gattern für ein Bit = eine Taste aufzumalen. Die Register kann man sich als Flipflops denken, die mit der Entprellzeit als Takt arbeiten. D.&nbsp;h. man kann das auch so z.&nbsp;B. in einem GAL22V10 realisieren.<br />
<br />
Als Kommentar sind neben den einzelnen Instruktionen alle 8 möglichen<br />
Kombinationen der 3 Signale dargestellt.<br />
<br />
Beispielcode für AVR (Assembler):<br />
<br />
<syntaxhighlight lang="asm"><br />
.nolist<br />
.include "c:\avr\inc\1200def.inc"<br />
.list<br />
.def save_sreg = r0<br />
.def iwr0 = r1<br />
.def iwr1 = r2<br />
<br />
.def key_old = r3<br />
.def key_state = r4<br />
.def key_press = r5<br />
<br />
.def leds = r16<br />
.def wr0 = r17<br />
<br />
.equ key_port = pind<br />
.equ led_port = portb<br />
<br />
rjmp init<br />
.org OVF0addr ;timer interrupt 24ms<br />
in save_sreg, SREG<br />
get8key: ;/old state iwr1 iwr0<br />
mov iwr0, key_old ;00110011 10101010 00110011<br />
in key_old, key_port ;11110000<br />
eor iwr0, key_old ; 11000011<br />
com key_old ;00001111<br />
mov iwr1, key_state ; 10101010<br />
or key_state, iwr0 ; 11101011<br />
and iwr0, key_old ; 00000011<br />
eor key_state, iwr0 ; 11101000<br />
and iwr1, iwr0 ; 00000010<br />
or key_press, iwr1 ;store key press detect<br />
;<br />
; insert other timer functions here<br />
;<br />
out SREG, save_sreg<br />
reti<br />
;-------------------------------------------------------------------------<br />
init:<br />
ldi wr0, 0xFF<br />
out ddrb, wr0<br />
ldi wr0, 1<<CS02 | 1<<CS00 ;divide by 1024 * 256<br />
out TCCR0, wr0<br />
ldi wr0, 1<<TOIE0 ;enable timer interrupt<br />
out TIMSK, wr0<br />
<br />
clr key_old<br />
clr key_state<br />
clr key_press<br />
ldi leds, 0xFF<br />
main: cli<br />
eor leds, key_press ;toggle LEDs<br />
clr key_press ;clear, if key press action done<br />
sei<br />
out led_port, leds<br />
rjmp main<br />
;-------------------------------------------------------------<br />
</syntaxhighlight><br />
<br />
==== Komfortroutine (C für AVR) ====<br />
<br />
Siehe dazu: Forumsbeitrag [https://www.mikrocontroller.net/topic/48465 Universelle Tastenabfrage].<br />
<br />
'''Anmerkung:''' Wenn statt ''active-low'' (Ruhezustand ''high'') ''active-high'' (Ruhezustand ''low'') verwendet wird, muss eine Zeile geändert werden; siehe<br />
[https://www.mikrocontroller.net/topic/48465 gesamter Beitrag im Forum],<br />
[https://www.mikrocontroller.net/topic/48465#606555 Stelle 1 im Beitrag] ([https://www.mikrocontroller.net/topic/48465#2306398 Stelle 2 im Beitrag] muss ''nicht'' geändert werden, da hier die Polarität gar keinen Einfluß hat).<br />
<br />
'''Anmerkung 2:''' Zur Initialisierung siehe [https://www.mikrocontroller.net/topic/48465#3572793 diesen Forumsbeitrag].<br />
<br />
Funktionsprinzip wie oben plus zusätzliche Features:<br />
* Kann Tasten sparen durch unterschiedliche Aktionen bei kurzem oder langem Drücken<br />
* Wiederholfunktion, z.&nbsp;B. für die Eingabe von Werten<br />
<br />
Das Programm ist für avr-gcc/avr-libc geschrieben, kann aber mit ein paar Anpassungen auch mit anderen Compilern und Mikrocontrollern verwendet werden. Eine Portierung für den AT91SAM7 findet man [http://www.google.com/codesearch?q=show:ac2viP-2E2Y:pzkOO5QRsoc:RPICuprYy-A&sa=N&cd=1&ct=rc&cs_p=svn://mikrocontroller.net/mp3dec/trunk&cs_f=keys.c#a0 hier] (aus dem Projekt [[ARM MP3/AAC Player]]).<br />
<syntaxhighlight lang="c"><br />
/************************************************************************/<br />
/* */<br />
/* Debouncing 8 Keys */<br />
/* Sampling 4 Times */<br />
/* With Repeat Function */<br />
/* */<br />
/* Author: Peter Dannegger */<br />
/* danni@specs.de */<br />
/* */<br />
/************************************************************************/<br />
<br />
#include <stdint.h><br />
#include <avr/io.h><br />
#include <avr/interrupt.h><br />
<br />
#ifndef F_CPU<br />
#define F_CPU 1000000 // processor clock frequency<br />
#warning kein F_CPU definiert<br />
#endif<br />
<br />
#define KEY_DDR DDRB<br />
#define KEY_PORT PORTB<br />
#define KEY_PIN PINB<br />
#define KEY0 0<br />
#define KEY1 1<br />
#define KEY2 2<br />
#define ALL_KEYS (1<<KEY0 | 1<<KEY1 | 1<<KEY2)<br />
<br />
#define REPEAT_MASK (1<<KEY1 | 1<<KEY2) // repeat: key1, key2<br />
#define REPEAT_START 50 // after 500ms<br />
#define REPEAT_NEXT 20 // every 200ms<br />
<br />
#define LED_DDR DDRA<br />
#define LED_PORT PORTA<br />
#define LED0 0<br />
#define LED1 1<br />
#define LED2 2<br />
<br />
volatile uint8_t key_state; // debounced and inverted key state:<br />
// bit = 1: key pressed<br />
volatile uint8_t key_press; // key press detect<br />
<br />
volatile uint8_t key_rpt; // key long press and repeat<br />
<br />
<br />
ISR( TIMER0_OVF_vect ) // every 10ms<br />
{<br />
static uint8_t ct0 = 0xFF, ct1 = 0xFF, rpt;<br />
uint8_t i;<br />
<br />
TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms<br />
<br />
i = key_state ^ ~KEY_PIN; // key changed ?<br />
ct0 = ~( ct0 & i ); // reset or count ct0<br />
ct1 = ct0 ^ (ct1 & i); // reset or count ct1<br />
i &= ct0 & ct1; // count until roll over ?<br />
key_state ^= i; // then toggle debounced state<br />
key_press |= key_state & i; // 0->1: key press detect<br />
<br />
if( (key_state & REPEAT_MASK) == 0 ) // check repeat function<br />
rpt = REPEAT_START; // start delay<br />
if( --rpt == 0 ){<br />
rpt = REPEAT_NEXT; // repeat delay<br />
key_rpt |= key_state & REPEAT_MASK;<br />
}<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key has been pressed. Each pressed key is reported<br />
// only once<br />
//<br />
uint8_t get_key_press( uint8_t key_mask )<br />
{<br />
cli(); // read and clear atomic !<br />
key_mask &= key_press; // read key(s)<br />
key_press ^= key_mask; // clear key(s)<br />
sei();<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key has been pressed long enough such that the<br />
// key repeat functionality kicks in. After a small setup delay<br />
// the key is reported being pressed in subsequent calls<br />
// to this function. This simulates the user repeatedly<br />
// pressing and releasing the key.<br />
//<br />
uint8_t get_key_rpt( uint8_t key_mask )<br />
{<br />
cli(); // read and clear atomic !<br />
key_mask &= key_rpt; // read key(s)<br />
key_rpt ^= key_mask; // clear key(s)<br />
sei();<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key is pressed right now<br />
//<br />
uint8_t get_key_state( uint8_t key_mask )<br />
<br />
{<br />
key_mask &= key_state;<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
uint8_t get_key_short( uint8_t key_mask )<br />
{<br />
cli(); // read key state and key press atomic !<br />
return get_key_press( ~key_state & key_mask );<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
uint8_t get_key_long( uint8_t key_mask )<br />
{<br />
return get_key_press( get_key_rpt( key_mask ));<br />
}<br />
<br />
int main( void )<br />
{<br />
LED_PORT = 0xFF;<br />
LED_DDR = 0xFF;<br />
<br />
// Configure debouncing routines<br />
KEY_DDR &= ~ALL_KEYS; // configure key port for input<br />
KEY_PORT |= ALL_KEYS; // and turn on pull up resistors<br />
<br />
TCCR0 = (1<<CS02)|(1<<CS00); // divide by 1024<br />
TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms<br />
TIMSK |= 1<<TOIE0; // enable timer interrupt<br />
<br />
sei();<br />
<br />
while(1){<br />
if( get_key_short( 1<<KEY1 ))<br />
LED_PORT ^= 1<<LED1;<br />
<br />
if( get_key_long( 1<<KEY1 ))<br />
LED_PORT ^= 1<<LED2;<br />
<br />
// single press and repeat<br />
<br />
if( get_key_press( 1<<KEY2 ) || get_key_rpt( 1<<KEY2 )){<br />
uint8_t i = LED_PORT;<br />
<br />
i = (i & 0x07) | ((i << 1) & 0xF0);<br />
if( i < 0xF0 )<br />
i |= 0x08;<br />
LED_PORT = i;<br />
}<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Das Single-press-und-repeat-Beispiel geht nicht in jeder Beschaltung; folgendes Beispiel sollte universeller sein (einzelne LED an/aus):<br />
<syntaxhighlight lang="c"><br />
// single press and repeat<br />
if( get_key_press( 1<<KEY2 ) || get_key_rpt( 1<<KEY2 ))<br />
LED_PORT ^=0x08;<br />
</syntaxhighlight><br />
<br />
Neuere Variante, die einer Taste folgende Funktionen erlaubt:<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1753367 Universelle Tastenabfrage mit 2 Tastenerkennung]<br />
<syntaxhighlight lang="c"><br />
- get_key_press()<br />
- get_key_rpt()<br />
- get_key_press() mit get_key_rpt()<br />
- get_key_short() mit get_key_long()<br />
- get_key_short() mit get_key_long_r() und get_key_rpt_l()<br />
</syntaxhighlight><br />
Erweiterung für die Erkennung von zwei gleichzeitig gedrückten Tasten:<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1753367]<br />
<syntaxhighlight lang="c"><br />
- get_key_common()<br />
</syntaxhighlight><br />
<br />
===== Funktionsweise =====<br />
Der Code basiert auf 8 parallelen vertikalen Zählern, die über die Variablen <code>ct0</code> und <code>ct1</code> aufgebaut werden,<br />
<br />
[[Bild:VertCount.png|framed|center|8 vertikale Zähler in zwei 8-Bit-Variablen]]<br />
<br />
wobei jeweils ein Bit in <code>ct0</code> mit dem gleichwertigen Bit in <code>ct1</code> zusammengenommen einen 2-Bit-Zähler bildet.<br />
Der Code, der sich um die 8 Zähler kümmert, ist so geschrieben, daß er alle 8 Zähler gemeinsam parallel behandelt.<br />
<br />
<syntaxhighlight lang="c"><br />
i = key_state ^ ~KEY_PIN; // key changed ?<br />
</syntaxhighlight><br />
<code>i</code> enthält an dieser Stelle für jede Taste, die sich im Vergleich mit dem vorhergehenden entprellten Zustand (<code>key_state</code>) verändert hat, ein 1-Bit.<br />
<br />
<syntaxhighlight lang="c"><br />
ct0 = ~( ct0 & i ); // reset or count ct0<br />
ct1 = ct0 ^ (ct1 & i); // reset or count ct1<br />
</syntaxhighlight><br />
<br />
Diese beiden Anweisungen erniedrigen den 2-Bit-Zähler <code>ct0</code>/<code>ct1</code> für jedes Bit um 1, welches in <code>i</code> gesetzt ist. Liegt an der entsprechenden Stelle in <code>i</code> ein 0-Bit vor (keine Änderung des Zustands), so wird der Zähler <code>ct0</code>/<code>ct1</code> für dieses Bit auf 1 gesetzt.<br />
Der Grundzustand des Zählers ist also <code>ct0</code> == 1 und <code>ct1</code> == 1 (Wert 3). Der Zähler zählt daher mit jedem ISR-Aufruf, bei dem die Taste im Vergleich zu <code>key_state</code> als verändert erkannt wurde,<br />
<br />
ct1 ct0<br />
1 1 // 3<br />
1 0 // 2<br />
0 1 // 1<br />
0 0 // 0<br />
1 1 // 3<br />
<br />
<syntaxhighlight lang="c"><br />
i &= ct0 & ct1; // count until roll over ?<br />
</syntaxhighlight><br />
in <code>i</code> bleibt nur dort ein 1-Bit erhalten, wo sowohl in <code>ct1</code> als auch in <code>ct0</code> ein 1-Bit vorgefunden wird, der betreffende Zähler also bis 3 zählen konnte. Durch die zusätzliche Verundung mit <code>i</code> wird der Fall abgefangen, dass ein konstanter Zählerwert von 3 in <code>i</code> ein 1-Bit hinterlässt. Im Endergebnis bedeutet das, dass nur ein Zählerwechsel von 0 auf 3 zu einem 1-Bit an der betreffenden Stelle in <code>i</code> führt, aber auch nur dann, wenn in <code>i</code> an dieser Bitposition ebenfalls ein 1-Bit war (welches wiederum deswegen auf 1 war, weil an diesem Eingabeport eine Veränderung zum letzten bekannten entprellten Zustand festgestellt wurde). Alles zusammengenommen heißt das, dass ein Tastendruck dann erkannt wird, wenn die Taste 4-mal hintereinander in einem anderen Zustand vorgefunden wurde als dem zuletzt bekannten entprellten Tastenzustand.<br />
<br />
An dieser Stelle ist <code>i</code> daher ein Vektor von 8 Bits, von denen jedes einzelne der Bits darüber Auskunft gibt, ob die entsprechende Taste mehrmals hintereinander im selben Zustand angetroffen wurde, der nicht mit dem zuletzt bekannten Tastenzustand übereinstimmt. Ist das der Fall, dann wird eine entsprechende Veränderung des Tastenzustands in <code>key_state</code> registriert<br />
<syntaxhighlight lang="c"><br />
key_state ^= i; // then toggle debounced state<br />
</syntaxhighlight><br />
und wenn sich in <code>key_state</code> das entsprechende Bit von 0 auf 1 verändert hat, wird dieses Ereignis als „Taste wurde niedergedrückt“ gewertet.<br />
<syntaxhighlight lang="c"><br />
key_press |= key_state & i; // 0->1: key press detect<br />
</syntaxhighlight><br />
<br />
Damit ist der Tasteneingang entprellt. Und zwar sowohl beim Drücken einer Taste als auch beim Loslassen (damit Tastenpreller beim Loslassen nicht mit dem Niederdrücken einer Taste verwechselt werden). Der weitere Code beschäftigt sich dann nur noch damit, diesen entprellten Tastenzustand weiter zu verarbeiten.<br />
<br />
Der Codeteil sieht durch die Verwendung der vielen bitweisen Operationen relativ komplex aus. Behält man aber im Hinterkopf, dass einige der bitweisen wie ein „paralles If“ gleichzeitig auf allen 8 Bits eingesetzt werden, dann vereinfacht sich vieles. Ein<br />
<syntaxhighlight lang="c"><br />
key_press |= key_state & i;<br />
</syntaxhighlight><br />
ist nichts anderes als ein<br />
<syntaxhighlight lang="c"><br />
// teste ob Bit 0 sowohl in key_state als auch in i gesetzt ist<br />
// und setze Bit 0 in key_press, wenn das der Fall ist<br />
if( ( key_state & ( 1 << 0 ) ) &&<br />
( i & ( 1 << 0 ) )<br />
key_press |= ( 1 << 0 );<br />
<br />
// Bit 1<br />
if( ( key_state & ( 1 << 1 ) ) &&<br />
( i & ( 1 << 1 ) )<br />
key_press |= ( 1 << 1 );<br />
<br />
// Bit 2<br />
if( ( key_state & ( 1 << 2 ) ) &&<br />
( i & ( 1 << 2 ) )<br />
key_press |= ( 1 << 2 );<br />
<br />
...<br />
</syntaxhighlight><br />
nur als wesentlich kompaktere Operation ausgeführt und für alle 8 Bits gleichzeitig.<br />
Die Kürze und Effizienz dieser paar Codezeilen ergibt sich aus dem Umstand, dass jedes Bit in den Variablen für eine Taste steht und alle 8 (maximal möglichen) Tasten gleichzeitig die Operationen durchlaufen.<br />
<br />
Die Funktionsweisen der verschiedenen Modi anhand von Zeitstrahlen erklärt<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1844458 dieser Forumsbeitrag].<br />
<br />
„Walkthrough“ der verschiedenen Zustände der einzelnen Variablen anhand eines Tastendrucks auf<br />
[https://www.avrfreaks.net/comment/726676#comment-726676 avrfreaks.net].<br />
<br />
===== Reduziert auf lediglich 1 Taste =====<br />
Diskussionen im Forum zeigen immer wieder, dass viele eine Abneigung gegen diesen Code haben, weil er ihnen sehr kompliziert vorkommt.<br />
<br />
Der Code ist nicht leicht zu analysieren und er zieht alle Register dessen, was möglich ist, um sowohl Laufzeit als auch Speicherverbrauch einzusparen. Oft hört man auch das Argument: Ich benötige ja nur eine Entprellung für 1 Taste, gibt es da nichts Einfacheres?<br />
<br />
Hier ist die „Langform“ des Codes, so wie man das für lediglich 1 Taste schreiben würde, wenn man exakt dasselbe Entprellverfahren einsetzen würde. Man sieht: Da ist keine Hexerei dabei: In <code>key_state</code> wird der letzte bekannte entprellte Zustand der Taste gehalten. Der Pin-Eingang wird mit diesem Zustand verglichen und wenn sich die beiden unterscheiden, dann wird ein Zähler heruntergezählt. Produziert dieses Herunterzählen einen Unterlauf des Zählers, dann gilt die Taste als entprellt und wenn dann auch noch die Taste gerade gedrückt ist, dann wird dieses in <code>key_press</code> entsprechend vermerkt.<br />
<br />
<syntaxhighlight lang="c"><br />
uint8_t key_state;<br />
uint8_t key_counter;<br />
volatile uint8_t key_press;<br />
<br />
ISR( ... Overflow ... )<br />
{<br />
uint8_t input = KEY_PIN & ( 1 << KEY0 );<br />
<br />
if( input != key_state ) {<br />
key_counter--;<br />
if( key_counter == 0xFF ) {<br />
key_counter = 3;<br />
key_state = input;<br />
if( input )<br />
key_press = TRUE;<br />
}<br />
}<br />
else<br />
key_counter = 3;<br />
<br />
}<br />
<br />
uint8_t get_key_press()<br />
{<br />
uint8_t result;<br />
<br />
cli();<br />
result = key_press;<br />
key_press = FALSE;<br />
sei();<br />
<br />
return result;<br />
}<br />
</syntaxhighlight><br />
<br />
Der vollständige Entprellcode, wie weiter oben gelistet, besticht jetzt aber darin, dass er compiliert kleiner ist als diese anschaulichere Variante für lediglich 1 Taste. Und das bei gleichzeitig erhöhter Funktionalität. Denn z.&nbsp;B. ein Autorepeat ist in diesem Code noch gar nicht eingebaut. Und spätestens wenn man dann eine zweite Taste entprellen möchte, dann ist auch der SRAM-Speicherverbrauch dieser Langform höher als der des Originals für 8 Tasten. Daraus folgt: Selbst für lediglich 1 Taste ist die Originalroutine die bessere Wahl.<br />
<br />
Und wegen der Komplexität mal eine Frage: Sind Sie selbst in der Lage eine entsprechend effiziente <code>sqrt()</code>-Funktion zu schreiben, wie die, die Sie in der Standard-C-Bibliothek vorfinden? Nein? Dann dürften Sie eigentlich Ihrer Argumentation nach die Bibliotheksfunktion <code>sqrt()</code> nicht verwenden, sondern müssten sich stattdessen selbst eine Wurzel-Funktion schreiben.<br />
<br />
=== Selbstsättigendes Filter (nach Jürgen Schuhmacher) ===<br />
Durch die Nutzung der diskreten Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit einem Widerstand, einem Kondensator und einem Schmitt-Trigger wie in Hardware nachgebildet werden, indem ein abstraktes IIR-Filter benutzt wird, der eine Kondensatorladekurve emuliert. Mit der Vorschrift ''Y(t) = k Y(t−1) + Input'' wird ein einfaches Filter erzeugt, das dem Eingangswert träge folgt. Bei Überschreiten eines bestimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.<br />
<br />
Für Assembler und VHDL bei FPGAs eignet sich aufgrund der leicht zu implementierenden binären Operationen folgende Darstellung mit einer Auflösung des Filterwertspeichers von nur 8 bit: Wert_Neu = Wert_Alt − Wert_Alt/16 + 16*(Taste = True). Der Filterwert bildet dann den gedämpften Verlauf des Eingangs (flankenverschliffen) ab und kann Prellen bis nahe an den Grenzbereich zum schnellen Tasten unterdrücken. Der Ausgangswert ist dann einfach das höchstwertige Bit des Filterwertes.<br />
<br />
[[Datei:Entprellung mit IIR-Filter.gif]]<br />
<br />
Dazu muss das Signal des Tasters idealerweise um den Faktor 10…20 schneller abgetastet werden, als die höchste gewünschte Tippgeschwindigkeit vorgibt. Noch schneller abzutasten ist möglich, führt aber zu mehr Bedarf an Bits beim Filter. Die Schmitt-Trigger-Funktion kann dadurch gebildet werden, dass eine 1 am Ausgang bei z.&nbsp;B. Überschreiten einer 55-%-Grenze und eine 0 bei Unterschreitung der 45-%-Grenze ausgegeben wird. Im Zwischenbereich wird der alte Wert gehalten. Die realen Grenzen dieser [[Hysterese]] müssen an die Applikation angepasst werden, da zu enge Grenzen sonst zu empfindlich gegenüber Störungen wären.<br />
<br />
=== Einfaches Mittelwertfilter (nach Lothar Miller) ===<br />
Für digitale Schaltungen oder PLDs empfiehlt sich ein FIR-Filter mit aneinandergereihten Flipflops. Man schiebt das Eingangssignal in eine Flipflop-Kette und schaltet oberhalb der Mitte um:<br />
<br />
SignalInput → FF1 → FF2 → FF3 → FF4 → FF5 → FF6 → FF7 → FF8<br />
<br />
Wenn alle FFs = 1 (Summe der FFs=8) dann SignalOutput = 1<br /><br />
Wenn alle FFs = 0 (Summe der FFs=0) dann SignalOutput = 0<br />
<br />
Dieses Verfahren kann sehr einfach in Logik abgebildet werden, weil für die Berechnung des Ausgangs nur ein NOR- bzw. ein AND-Gatter nötig ist.<br />
<br />
Das reale Signal muss dazu aber genügend langsam abgetastet werden, sodaß die Filterperiode die Prelldauer übersteigt, um zu verhindern, daß nicht inmitten einer passiven Phase eines Prellvorgangs ein 8-fach 1 gesehen wird. Damit wird die Interpretation vergleichsweise langsam.<br />
<br />
== Gegenüberstellung der Verfahren ==<br />
<br />
=== Hardware ===<br />
<br />
* „entprellte Schalter“: sehr teuer, große Bauform, verschleißbelastet, geringe Haltbarkeit<br />
* „Umschalter“: benötigt aufwendigeren Schalter, benötigt Elektronik<br />
* „Umschalter ohne FF“: benötigt aufwendigeren Schalter und kleinen Kondensator<br />
* „Kondensatorentprellung“: benötigt etwas mehr Platz, kommt mit schlechten Schaltern zurecht<br />
<br />
=== Software ===<br />
<br />
* Flankenverfahren:<br />
* Warteschleife: Durch die Warteschleifen entsteht eine nicht zu vernachlässigende Verzögerung im Code. Speziell wenn mehrere Tasten zu überwachen sind, nicht unproblematisch.<br />
* Timer: Universalfunktionalität, die durch geringen Speicherverbrauch, geringen Rechenzeitverbrauch und gute Funktion besticht. Der „Verbrauch“ eines Timers sieht auf den ersten Blick schlimmer aus, als er ist, denn in den meisten Programmen hat man sowieso einen Basistimer für die Zeitsteuerung des Programms im Einsatz, der für die Tastenentprellung mitbenutzt werden kann.<br />
* Filter: sehr geringer Platzbedarf in FPGAs, relativ gute Wirkung<br />
* Filter 2: sehr geringer Platzbedarf, gute Wirkung<br />
<br />
== Siehe auch ==<br />
<br />
* [[AVR-Tutorial: Tasten]] (Assembler)<br />
* [https://www.mikrocontroller.net/topic/6490 Forumsbeitrag]: von Peter Dannegger (AVR-Assembler)<br />
* [https://www.mikrocontroller.net/topic/552487?goto=7378825#7378825 Forumsbeitrag]: Entprellung im Arduino-Stil<br />
<br />
== Weblinks ==<br />
<br />
* [https://www.edn.com/contact-debouncing-algorithm-emulates-schmitt-trigger/ Contact-debouncing algorithm emulates Schmitt trigger (Artikel)], [https://web.archive.org/web/20170501074320/http://www.edn.com/Pdf/ViewPdf?contentItemId=4324067 als PDF] (englisch)<br />
* [http://www.ganssle.com/debouncing.pdf A Guide to Debouncing, or, How to Debounce a Contact in Two Easy Pages, by Jack Ganssle] (englisch), praktische Erläuterungen zum Entprellen in Soft- und Hardware<br />
* [https://www.pololu.com/docs/0J16/all Understanding Destructive LC Voltage Spikes] (englisch)<br />
<br />
[[Kategorie:AVR]]<br />
[[Kategorie:Signalverarbeitung]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Entprellung&diff=105989Entprellung2023-04-01T20:49:15Z<p>Engineer: /* Problembeschreibung */ ehemalige Schreibweise wiederhergestellt, da "Aufwand" - siehe Rechtschreibung.</p>
<hr />
<div>== Problembeschreibung ==<br />
Mechanische stromführende Komponenten wie Schalter und Taster neigen beim Ein- und Ausschalten zum sogenannten '''Prellen''', d.&nbsp;h. sie schalten schnell mehrfach aus und ein, was durch mechanische Vibrationen des Schaltkontaktes verursacht wird, sofern sie nicht mit aufwändigen mechanischen Maßnahmen dagegen geschützt sind. Besonders [[Drehgeber]] sind aufgrund der Rasterfunktion und der Bewegung des Bedieners dafür empfindlich. Auch optoelektronische Bauelemente und chemische Kontaktschalter sowie Flüssigkeitsschalter haben das Problem.<br />
<br />
Vereinfacht dargestellt, sieht eine von einem prellenden Schalter oder Taster geschaltete Spannung wie folgt aus:<br />
[[Bild:Entprellen.png]]<br />
<br />
Es existieren also mehrere kurze Einschaltimpulse, welche bei Tastern als Mehrfachbefehl und bei Drehgebern als falsche Winkelbewegung interpretiert werden können. Bei Schaltern wiederum kommt es in der elektronischen Baugruppe zu mehreren Resets und Einschaltvorgängen, die unnötig Strom ziehen oder im schlechtesten Fall die Schaltung stressen oder beschädigen können. Wichtige Schalter und solche, die hohe Ströme führen sollen, werden dazu mit geeigneten Maßnahmen wie Redundanz, Stufenschaltkonzepten oder bei Gas- und Flüssigkeitsschaltern durch elektrochemische Maßnahmen abgesichert. Bei einfachen Schaltern spart man sich dies jedoch.<br />
<br />
Da es bei diesen einfachen, ungeschützten Schaltern keine sichere Möglichkeit gibt, diese Effekte zu vermeiden, muss das prellende Signal sinnvoll ausgewertet werden. Dafür gibt es verschiedene Ansätze, sowohl mit Elektronik als auch mit Software, die im Folgenden vorgestellt werden.<br />
<br />
== Hardwareentprellung ==<br />
<br />
=== Prellfreie Schalter ===<br />
<br />
Wie bereits angedeutet, hält die elektromechanische Industrie für Spezialanwendungen verschiedene Sonderkonstruktionen bereit, die saubere Schaltzustände nach außen generieren, indem sie entweder eine mechanische Dämpfung in Form eines selbsthemmenden Federmechanismus oder eine integrierte elektronische Signalverzögerung benutzen. Solche Systeme sind jedoch teuer und werden meist nur im Leistungsbereich eingesetzt. Zudem sind sie nicht 100 % sicher und fallen alterungsbedingt aus. Wo immer es geht, werden daher weitere Maßnahmen getroffen, ein Prellen zu unterdrücken.<br />
<br />
=== Wechselschalter ===<br />
<br />
Für die Entprellung von Wechselschaltern (engl. ''Double Throw Switch'') kann ein klassisches RS-[[Flipflop]] genutzt werden. Bei dieser Variante werden neben zwei NAND-Gattern nur noch zwei Pull-Up-Widerstände benötigt.<br />
<br />
[[Bild:NAND_debouncer.png|thumb|left|350px|Taster entprellen mit NAND-RS-Flipflop]]<br />
<br />
{{Clear}}<br />
<br />
In der gezeigten Schalterstellung liegt an der Position /S der Pegel 0 an. Damit ist das Flipflop gesetzt und der Ausgang auf dem Pegel 1. Schließt der Schalter zwischen den Kontakten 2 und 3, liegt an der Postion /R der Pegel 0 an. Dies bedeutet, dass der Ausgang des Flipflops auf den Pegel 0 geht. Sobald der Schalter von einem zum anderen Kontakt wechselt, beginnt er in der Regel zu prellen. Während des Prellens wechselt der Schalter zwischen den beiden Zuständen „Schalter berührt Kontakt“ und „Schalter ist frei in der Luft“. Der Ausgang des Flipflops bleibt in dieser Prellzeit aber stabil, da der Schalter während des Prellens nie den gegenüberliegenden Kontakt berührt und das RS-Flipflop seinen Zustand allein halten kann. Die Prellzeit ist stark vom Schaltertyp abhängig und liegt zwischen 0,1 und 10&nbsp;ms. Die Dimensionierung der Widerstände ist relativ unkritisch. Als Richtwert können hier 100&nbsp;kΩ verwendet werden.<br />
<br />
==== Wechselschalter ohne Flipflop ====<br />
<br />
Wenn man einmal kein Flipflop zur Hand hat, kann man sich auch mit dieser Schaltung behelfen.<br />
<br />
[[Bild:WechselEntprellC.PNG|thumb|left|350px|Wechsler entprellen mit Kondensator]]<br />
<br />
{{Clear}}<br />
<br />
'''Zur Funktionsweise:'''<br />
Beim Umschalten wird der Kondensator immer sofort umgeladen.<br />
Während der Kontakt prellt, befindet er sich in der Luft und hat keinerlei Verbindung. Während dieser Zeit übernimmt der Kondensator das Halten des Pegels.<br />
<br />
'''Dimensionierung:'''<br />
Ist der entprellte Taster an ein IC angeschlossen, ist der ''Input Leakage Current'' der ausschlaggebende Strom. Falls weitere Ströme fließen sind diese mit zu berücksichtigen. Bei einem Mikrocontroller von Atmel ist 1&nbsp;µA typisch.<br />
Es gilt:<br />
:<math>\frac{\mathrm d U}{\mathrm d t} = \frac{I}{C}</math><br />
Da ein Prellen maximal ca. 10&nbsp;ms dauert und die Spannung in dieser Zeit beispielsweise um maximal 0,5&nbsp;V fallen soll, kommt man auf folgende Kapazität:<br />
:<math>C = \frac{I \cdot \Delta t}{\Delta U} = \frac{1~\text{µA} \cdot 10~\text{ms}}{\text{0,5}~\text{V}} = 20~\text{nF}</math><br />
<br />
Um Stromspitzen zu verringern kann ein Widerstand mit eingefügt werden. Eine Zeitkonstante von 1&nbsp;µs bis 1&nbsp;ms scheint sinnvoll. Also 500&nbsp;Ω bis 500&nbsp;kΩ sind nutzbar, wobei bei niedrigem Widerstand die Stromspitzen höher sind, und bei 500&nbsp;kΩ der Pinstrom störend wird.<br />
<br />
=== Einfacher Taster ===<br />
<br />
Auch wenn das RS-Flipflop sehr effektiv ist, wird diese Variante der Entprellung nur selten angewendet. Grund dafür ist, dass in Schaltungen häufiger einfache Taster eingesetzt werden. Diese sind oft kleiner und preisgünstiger. Um einfache Taster (engl. ''push button / momentary switch'') zu entprellen, kann ein einfacher RC-Tiefpass eingesetzt werden. Hierbei wird ein Kondensator über einen Widerstand je nach Schalterstellung auf- oder entladen. Das RC-Glied bildet einen Tiefpass, sodass die Spannung über dem Kondensator nicht von einem Pegel auf den anderen springen kann.<br />
<br />
[[Bild:RC_debouncer.png|thumb|left|300px|Taster entprellen mit RC-Entpreller]]<br />
<br />
[[Datei:Entprellen1a.png|thumb|350px|Entstehender Spannungsverlauf]]<br />
{{Absatz}}<br />
<br />
Wenn der Schalter geöffnet ist, lädt sich der Kondensator langsam über die beiden Widerstände R<sub>1</sub> und R<sub>2</sub> auf V<sub>CC</sub> auf. Beim Erreichen der Umschaltschwelle springt der Ausgang auf den Pegel 0. Wird der Schalter geschlossen, entlädt sich der Kondensator langsam über den Widerstand R<sub>2</sub>. Demnach ändert sich der Ausgang des Inverters auf den Pegel 1. Während der Taster prellt, kann sich die Spannung über dem Kondensator nicht sprunghaft ändern, da das Auf- und Entladen eher langsam über die Widerstände erfolgt. Außerdem sind die Schaltschwellen für die Übergänge ''low''→''high'' und ''high''→''low'' stark verschieden (Hysterese, siehe Artikel [[Schmitt-Trigger]]). Bei richtiger Dimensionierung der Bauelemente wird somit der Ausgang des Inverters prellfrei.<br />
<br />
Zu beachten ist, dass der Inverter '''unbedingt''' einer mit Schmitt-Trigger-Eingängen sein muss, weil bei Standard-Logikeingängen im Bereich von üblicherweise 0,8…2,0&nbsp;V der Ausgang nicht definiert ist. Als Inverter kann zum Beispiel der [https://www.ti.com/lit/ds/symlink/sn74hc14.pdf 74HC14] oder der [https://www.ti.com/lit/ds/symlink/cd40106b.pdf CD40106] (pinkompatibel) eingesetzt werden. Alternativ kann auch ein [https://www.ti.com/lit/ds/symlink/cd4093b.pdf CD4093] eingesetzt werden. Bei dem CD4093 handelt es sich um NAND-Gatter mit Schmitt-Trigger-Eingängen. Um aus einem NAND-Gatter einen Inverter zu machen, müssen einfach nur die beiden Eingänge verbunden werden oder ein Eingang fest auf ''high'' gelegt werden.<br />
<br />
Für eine geeignete Dimensionierung muss man etwas mit den Standardformeln für einen Kondensator jonglieren. Die Spannung über dem Kondensator beim Entladen berechnet sich nach<br />
:<math>U_C(t) = U_0 \cdot \exp{\frac{-t}{R_2 C_1}}</math>.<br />
<br />
Damit der Ausgang des Inverters stabil ist, muss die Spannung über dem Kondensator und damit die Spannung am Eingang des Inverters über der Spannung bleiben, bei welcher der Inverter umschaltet. Diese Schwellwertspannung ist genau die zeitabhängige Spannung über dem Kondensator.<br />
:<math>U_C(t)\!\ = U_{th}</math><br />
<br />
Durch Umstellen der Formel ergibt sich nun<br />
:<math>R_2=\frac{-t}{C_1 \cdot \ln\left(\frac{U_{th}}{U_0}\right)}</math>.<br />
<br />
Ein Taster prellt üblicherweise bis zu etwa 10&nbsp;ms. Zur Sicherheit kann bei der Berechnung des Widerstandes eine Prellzeit von 20&nbsp;ms angenommen werden. <math>U_0</math> ist die Betriebsspannung, also V<sub>CC</sub>. Die Schwellwertspannung muss aus dem Datenblatt des eingesetzten Schmitt-Triggers abgelesen werden. Beim 74HC14 beträgt der gesuchte Wert 2,0&nbsp;V. Nimmt man für den Kondensator 1&nbsp;µF und beträgt die Betriebsspannung 5&nbsp;V, ergibt sich für den Widerstand ein Wert von etwa 22&nbsp;kΩ.<br />
<br />
Wird der Schalter geöffnet, lädt sich der Kondensator nach folgender Formel auf:<br />
:<math>U_C(t) = U_0 \cdot \left( 1-\exp{\frac{-t}{(R_1+R_2)\cdot C_1}} \right)</math><br />
<br />
Mit <math>U_{th}=U_C</math> ergibt das Umstellen nach <math>(R_1+R_2)</math>:<br />
:<math>R_1+R_2 = \frac{-t}{C_1 \cdot \ln\left(1-\frac{U_{th}}{U_0} \right)}</math><br />
<br />
Für die Schwellspannung lässt sich aus dem Datenblatt ein Wert von 2,3&nbsp;V ablesen. Mit diesem Wert und den Annahmen von oben ergibt sich für <math>R_1+R_2</math> ein Wert von 32&nbsp;kΩ. Somit folgt für <math>R_1</math> ein Wert von etwa 10&nbsp;kΩ.<br />
<br />
Anmerkung: Beim 74LS14 von Hitachi z.&nbsp;B. sind die oberen und unteren Schaltschwellwerte unterschiedlich. Es muss darauf geachtet werden, dass <math>U_{th}</math> beim Entladen die untere Schwelle und <math>U_{th}</math> beim Laden die obere Schwelle einnimmt.<br />
<br />
== Softwareentprellung ==<br />
<br />
In den Zeiten der elektronischen Auswertung von Tastern und Schaltern ist das softwaretechnische Entprellen oft billiger als die Benutzung eines teuren Schalters. Daher werden heute z.&nbsp;B. auch Computertastaturen nicht mehr mit prellarmen Tasten oder Entprellkondensatoren ausgestattet.<br />
<br />
Bei Verwendung des in den meisten Geräten ohnehin vorhandenen Mikrocontrollers z.&nbsp;B. kann man sich die zusätzliche Hardware sparen, da die Entprellung in Software praktisch genauso gut funktioniert. Dabei ist nur zu beachten, dass zusätzliche Rechenleistung und je nach Umsetzung auch einige Hardwareressourcen (z.&nbsp;B. Timer) benötigt werden. Dafür hat man aber den Vorteil, kurze Pulse, die offensichtlich keine Tastenbetätigung sein können sondern z.&nbsp;B. durch Einstreuungen hervorgerufen werden, einfach ausfiltern zu können.<br />
<br />
=== Flankenerkennung ===<br />
Bei einem Taster gibt es insgesamt 4 theoretische Zustände:<br />
<br />
# war nicht gedrückt und ist nicht gedrückt<br />
# war nicht gedrückt und ist gedrückt (steigende Flanke)<br />
# war gedrückt und ist immer noch gedrückt<br />
# war gedrückt und ist nicht mehr gedrückt (fallende Flanke)<br />
<br />
Diese einzelnen Zustände lassen sich jetzt bequem abfragen/durchlaufen. Die Entprellung geschieht dabei durch die ganze Laufzeit des Programms. Die Taster werden hierbei als ''active-low'' angeschlossen, um die internen Pull-Ups zu nutzen.<br />
<br />
Diese Routine gibt für den Zustand „steigende Flanke“ den Wert „1“ zurück, sonst „0“.<br />
<br />
<syntaxhighlight lang="c"><br />
#define TASTERPORT PINC<br />
#define TASTERBIT PINC1<br />
<br />
char taster(void)<br />
{<br />
static unsigned char zustand;<br />
char rw = 0;<br />
<br />
if(zustand == 0 && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gedrueckt (steigende Flanke)<br />
{<br />
zustand = 1;<br />
rw = 1;<br />
}<br />
else if (zustand == 1 && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gehalten<br />
{<br />
zustand = 2;<br />
rw = 0;<br />
}<br />
else if (zustand == 2 && (TASTERPORT & (1<<TASTERBIT))) //Taster wird losgelassen (fallende Flanke)<br />
{<br />
zustand = 3;<br />
rw = 0;<br />
}<br />
else if (zustand == 3 && (TASTERPORT & (1<<TASTERBIT))) //Taster losgelassen<br />
{<br />
zustand = 0;<br />
rw = 0;<br />
}<br />
<br />
return rw;<br />
}<br />
</syntaxhighlight><br />
<br />
Eine Erweiterung, damit beliebig lange das Halten einer Taste erkannt wird, kann man ganz einfach so implementieren:<br />
<br />
<syntaxhighlight lang="c"><br />
// Zustand kann entweder zum ersten Mal als gehalten detektiert werden oder aber jedes weitere Mal<br />
else if (((zustand == 1) || (zustand == 2)) && !(TASTERPORT & (1<<TASTERBIT))) //Taster wird gehalten<br />
{<br />
zustand = 2;<br />
rw = 0;<br />
}<br />
</syntaxhighlight><br />
<br />
=== Warteschleifen-Verfahren ===<br />
<br />
Soll nun mit einem Mikrocontroller gezählt werden, wie oft ein Kontakt oder ein Relais geschaltet wird, muss das Prellen des Kontaktes exakt berücksichtigt und von einem gewollten Mehrfachschalten abgegrenzt werden, da sonst möglicherweise Fehlimpulse gezählt oder andererseits echte Schaltvorgänge übersprungen werden. Dem muss beim Schreiben des Programms hinsichtlich des Abtastens des Kontaktes unbedingt Rechnung getragen werden.<br />
<br />
Beim folgenden einfachen Beispiel für eine Entprellung ist zu beachten, dass der AVR im Falle eines Tastendrucks 200&nbsp;ms wartet, also brach liegt. Bei zeitkritischen Anwendungen sollte man ein anderes Verfahren nutzen (z.&nbsp;B. Abfrage der Tastenzustände in einer Timer-Interrupt-Service-Routine).<br />
<br />
<syntaxhighlight lang="c"><br />
#include <avr/io.h><br />
#include <inttypes.h><br />
#ifndef F_CPU<br />
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"<br />
#define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */<br />
#endif<br />
#include <util/delay.h> /* bei alter avr-libc: #include <avr/delay.h> */<br />
<br />
/* Einfache Funktion zum Entprellen eines Tasters */<br />
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)<br />
{<br />
if ( !(*port & (1 << pin)) )<br />
{<br />
/* Pin wurde auf Masse gezogen, 100ms warten */<br />
_delay_ms(50); // Maximalwert des Parameters an _delay_ms<br />
_delay_ms(50); // beachten, vgl. Dokumentation der avr-libc<br />
if ( *port & (1 << pin) )<br />
{<br />
/* Anwender Zeit zum Loslassen des Tasters geben */<br />
_delay_ms(50);<br />
_delay_ms(50);<br />
return 1;<br />
}<br />
}<br />
return 0;<br />
}<br />
<br />
int main(void)<br />
{<br />
DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang Taster) */<br />
PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand aktivieren */<br />
...<br />
if (debounce(&PINB, PB0))<br />
{<br />
/* Falls Taster an PIN PB0 gedrueckt */<br />
/* LED an Port PD7 an- bzw. ausschalten: */<br />
PORTD = PORTD ^ ( 1 << PD7 );<br />
}<br />
...<br />
}<br />
</syntaxhighlight><br />
<br />
Die obige Routine hat leider mehrere Nachteile:<br />
* sie detektiert nur das Loslassen (unergonomisch),<br />
* sie verzögert die Mainloop immer um 100&nbsp;ms bei gedrückter Taste,<br />
* sie verliert Tastendrücke, je mehr die Mainloop zu tun hat.<br />
<br />
Eine ähnlich einfach zu benutzende Routine, aber ohne all diese Nachteile findet sich im Forenthread<br />
[https://www.mikrocontroller.net/topic/164194 Entprellung für Anfänger].<br />
<br />
Der ''DEBOUNCE''-Befehl in dem BASIC-Dialekt BASCOM für AVR ist ebenfalls nach dem Warteschleifen-Verfahren programmiert. Die Wartezeit beträgt standardmäßig 25&nbsp;ms, kann aber vom Anwender überschrieben werden. Vgl. [https://avrhelp.mcselec.com/index.html?debounce.htm BASCOM Online-Manual zu DEBOUNCE].<br />
<br />
Eine C-Implementierung für eine Tastenabfrage mit Warteschleife ist im Artikel [[AVR-GCC-Tutorial#IO-Register als Parameter und Variablen|AVR-GCC-Tutorial: IO-Register als Parameter und Variablen]] angeben.<br />
<br />
Der Nachteil dieses Verfahrens ist, dass der Controller durch die Warteschleife blockiert wird. Günstiger ist die Implementierung mit einem Timer-Interrupt.<br />
<br />
==== Warteschleifenvariante mit Maske und Pointer (nach Christian Riggenbach) ====<br />
<br />
Hier eine weitere Funktion, um Taster zu entprellen: Durch den zusätzlichen Code kann eine Entprellzeit von durchschnittlich 1…3&nbsp;ms (mindestens 8·150&nbsp;µs = 1,2&nbsp;ms) erreicht werden. Grundsätzlich prüft die Funktion den Pegel der Pins auf einem bestimmten Port. Wenn die/der Pegel 8-mal konstant war, wird die Schleife verlassen. Diese Funktion kann sehr gut eingesetzt werden, um in einer Endlosschleife Taster abzufragen, da sie, wie erwähnt, eine kurze Wartezeit hat.<br />
<br />
<syntaxhighlight lang="c"><br />
void entprellung( volatile uint8_t *port, uint8_t maske ) {<br />
uint8_t port_puffer;<br />
uint8_t entprellungs_puffer;<br />
<br />
for( entprellungs_puffer=0 ; entprellungs_puffer!=0xff ; ) {<br />
entprellungs_puffer<<=1;<br />
port_puffer = *port;<br />
_delay_us(150);<br />
if( (*port & maske) == (port_puffer & maske) )<br />
entprellungs_puffer |= 0x01;<br />
}<br />
}<br />
</syntaxhighlight><br />
Die Funktion wird wie folgt aufgerufen:<br />
<syntaxhighlight lang="c"><br />
// Bugfix 20100414<br />
// https://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass<br />
entprellung( &PINB, (1<<PINB2) ); // ggf. Prellen abwarten<br />
if( PINB & (1<<PINB2) ) // dann stabilen Wert einlesen<br />
{<br />
// mach was<br />
}<br />
else<br />
{<br />
// mach was anderes<br />
}<br />
</syntaxhighlight><br />
Als Maske kann ein beliebiger Wert übergeben werden. Sie verhindert, dass nichtverwendete Taster die Entprellzeit negativ beeinflussen.<br />
<br />
==== Debounce-Makro von Peter Dannegger ====<br />
<br />
Peter Dannegger hat im Forumsbeitrag [https://www.mikrocontroller.net/topic/164194#1566921 Entprellen für Anfänger] folgendes vereinfachtes Entprellverfahren beschrieben. Das Makro arbeitet in der Originalversion mit ''active low'' geschalteten Tastern, kann aber einfach für ''active high'' geschaltete Taster angepasst werden ([[Pollin Funk-AVR-Evaluationsboard#Tasty Reloaded|Tasty Reloaded]]).<br />
<br />
<syntaxhighlight lang="c"><br />
/************************************************************************/<br />
/* */<br />
/* Not so powerful Debouncing Example */<br />
/* No Interrupt needed */<br />
/* */<br />
/* Author: Peter Dannegger */<br />
/* */<br />
/************************************************************************/<br />
// Target: ATtiny13<br />
<br />
#include <avr/io.h><br />
#define F_CPU 9.6e6<br />
#include <util/delay.h><br />
<br />
<br />
#define debounce( port, pin ) \<br />
({ \<br />
static uint8_t flag = 0; /* new variable on every macro usage */ \<br />
uint8_t i = 0; \<br />
\<br />
if( flag ){ /* check for key release: */ \<br />
for(;;){ /* loop ... */ \<br />
if( !(port & 1<<pin) ){ /* ... until key pressed or ... */ \<br />
i = 0; /* 0 = bounce */ \<br />
break; \<br />
} \<br />
_delay_us( 98 ); /* * 256 = 25ms */ \<br />
if( --i == 0 ){ /* ... until key >25ms released */ \<br />
flag = 0; /* clear press flag */ \<br />
i = 0; /* 0 = key release debounced */ \<br />
break; \<br />
} \<br />
} \<br />
}else{ /* else check for key press: */ \<br />
for(;;){ /* loop ... */ \<br />
if( (port & 1<<pin) ){ /* ... until key released or ... */ \<br />
i = 0; /* 0 = bounce */ \<br />
break; \<br />
} \<br />
_delay_us( 98 ); /* * 256 = 25ms */ \<br />
if( --i == 0 ){ /* ... until key >25ms pressed */ \<br />
flag = 1; /* set press flag */ \<br />
i = 1; /* 1 = key press debounced */ \<br />
break; \<br />
} \<br />
} \<br />
} \<br />
i; /* return value of Macro */ \<br />
})<br />
<br />
/*<br />
Testapplication<br />
*/<br />
int main(void)<br />
{<br />
DDRB &= ~(1<<PB0);<br />
PORTB |= 1<<PB0;<br />
DDRB |= 1<<PB2;<br />
DDRB &= ~(1<<PB1);<br />
PORTB |= 1<<PB1;<br />
DDRB |= 1<<PB3;<br />
for(;;){<br />
if( debounce( PINB, PB1 ) )<br />
PORTB ^= 1<<PB2;<br />
if( debounce( PINB, PB0 ) )<br />
PORTB ^= 1<<PB3;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Wenn das Makro für die gleiche Taste (Pin) an mehreren Stellen aufgerufen werden soll, muss eine Funktion angelegt werden, damit beide Aufrufe an die gleiche Zustandsvariable <code>flag</code> auswerten (siehe [https://www.mikrocontroller.net/topic/195914#1918727 diesen Forumsbeitrag]):<br />
<br />
<syntaxhighlight lang="c"><br />
// Hilfsfunktion<br />
uint8_t debounce_C1( void )<br />
{<br />
return debounce(PINC, PC1);<br />
}<br />
<br />
// Beispielanwendung<br />
int main(void)<br />
{<br />
DDRB |= 1<<PB2;<br />
DDRB |= 1<<PB3;<br />
DDRC &= ~(1<<PC1);<br />
PORTC |= 1<<PC1; // Pullup für Taster<br />
<br />
for(;;){<br />
if( debounce_C1() ) // nicht: debounce(PINC, PC1)<br />
PORTB ^= 1<<PB2;<br />
if( debounce_C1() ) // nicht: debounce(PINC, PC1)<br />
PORTB ^= 1<<PB3;<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
=== Timer-Verfahren (nach Peter Dannegger) ===<br />
<br />
==== Grundroutine (AVR-Assembler) ====<br />
<br />
Siehe dazu: Forumsbeitrag [https://www.mikrocontroller.net/topic/6490 Tasten entprellen].<br />
<br />
Vorteile:<br />
* besonders kurzer Code<br />
* schnell<br />
<br />
Außerdem können 8 Tasten (aktiv low) gleichzeitig bearbeitet werden, es dürfen also<br />
alle exakt zur selben Zeit gedrückt werden. Andere Routinen können z.&nbsp;B. nur eine Taste verarbeiten, d.&nbsp;h. die zuerst oder zuletzt gedrückte gewinnt, oder es kommt Unsinn heraus.<br />
<br />
Die eigentliche Einlese- und Entprellroutine ist nur 8 Instruktionen<br />
kurz. Der entprellte Tastenzustand ist im Register <code>key_state</code>. Mit nur 2 weiteren Instruktionen wird dann der Wechsel von ''Taste offen'' zu<br />
''Taste gedrückt'' erkannt und im Register <code>key_press</code> abgelegt. Im Beispielcode werden dann damit 8 LEDs ein- und ausgeschaltet. Jede Taste entspricht einem Bit in den Registern, d.&nbsp;h. die Verarbeitung erfolgt bitweise mit logischen Operationen. Zum Verständnis empfiehlt es sich daher, die Logikgleichungen mit Gattern für ein Bit = eine Taste aufzumalen. Die Register kann man sich als Flipflops denken, die mit der Entprellzeit als Takt arbeiten. D.&nbsp;h. man kann das auch so z.&nbsp;B. in einem GAL22V10 realisieren.<br />
<br />
Als Kommentar sind neben den einzelnen Instruktionen alle 8 möglichen<br />
Kombinationen der 3 Signale dargestellt.<br />
<br />
Beispielcode für AVR (Assembler):<br />
<br />
<syntaxhighlight lang="asm"><br />
.nolist<br />
.include "c:\avr\inc\1200def.inc"<br />
.list<br />
.def save_sreg = r0<br />
.def iwr0 = r1<br />
.def iwr1 = r2<br />
<br />
.def key_old = r3<br />
.def key_state = r4<br />
.def key_press = r5<br />
<br />
.def leds = r16<br />
.def wr0 = r17<br />
<br />
.equ key_port = pind<br />
.equ led_port = portb<br />
<br />
rjmp init<br />
.org OVF0addr ;timer interrupt 24ms<br />
in save_sreg, SREG<br />
get8key: ;/old state iwr1 iwr0<br />
mov iwr0, key_old ;00110011 10101010 00110011<br />
in key_old, key_port ;11110000<br />
eor iwr0, key_old ; 11000011<br />
com key_old ;00001111<br />
mov iwr1, key_state ; 10101010<br />
or key_state, iwr0 ; 11101011<br />
and iwr0, key_old ; 00000011<br />
eor key_state, iwr0 ; 11101000<br />
and iwr1, iwr0 ; 00000010<br />
or key_press, iwr1 ;store key press detect<br />
;<br />
; insert other timer functions here<br />
;<br />
out SREG, save_sreg<br />
reti<br />
;-------------------------------------------------------------------------<br />
init:<br />
ldi wr0, 0xFF<br />
out ddrb, wr0<br />
ldi wr0, 1<<CS02 | 1<<CS00 ;divide by 1024 * 256<br />
out TCCR0, wr0<br />
ldi wr0, 1<<TOIE0 ;enable timer interrupt<br />
out TIMSK, wr0<br />
<br />
clr key_old<br />
clr key_state<br />
clr key_press<br />
ldi leds, 0xFF<br />
main: cli<br />
eor leds, key_press ;toggle LEDs<br />
clr key_press ;clear, if key press action done<br />
sei<br />
out led_port, leds<br />
rjmp main<br />
;-------------------------------------------------------------<br />
</syntaxhighlight><br />
<br />
==== Komfortroutine (C für AVR) ====<br />
<br />
Siehe dazu: Forumsbeitrag [https://www.mikrocontroller.net/topic/48465 Universelle Tastenabfrage].<br />
<br />
'''Anmerkung:''' Wenn statt ''active-low'' (Ruhezustand ''high'') ''active-high'' (Ruhezustand ''low'') verwendet wird, muss eine Zeile geändert werden; siehe<br />
[https://www.mikrocontroller.net/topic/48465 gesamter Beitrag im Forum],<br />
[https://www.mikrocontroller.net/topic/48465#606555 Stelle 1 im Beitrag] ([https://www.mikrocontroller.net/topic/48465#2306398 Stelle 2 im Beitrag] muss ''nicht'' geändert werden, da hier die Polarität gar keinen Einfluß hat).<br />
<br />
'''Anmerkung 2:''' Zur Initialisierung siehe [https://www.mikrocontroller.net/topic/48465#3572793 diesen Forumsbeitrag].<br />
<br />
Funktionsprinzip wie oben plus zusätzliche Features:<br />
* Kann Tasten sparen durch unterschiedliche Aktionen bei kurzem oder langem Drücken<br />
* Wiederholfunktion, z.&nbsp;B. für die Eingabe von Werten<br />
<br />
Das Programm ist für avr-gcc/avr-libc geschrieben, kann aber mit ein paar Anpassungen auch mit anderen Compilern und Mikrocontrollern verwendet werden. Eine Portierung für den AT91SAM7 findet man [http://www.google.com/codesearch?q=show:ac2viP-2E2Y:pzkOO5QRsoc:RPICuprYy-A&sa=N&cd=1&ct=rc&cs_p=svn://mikrocontroller.net/mp3dec/trunk&cs_f=keys.c#a0 hier] (aus dem Projekt [[ARM MP3/AAC Player]]).<br />
<syntaxhighlight lang="c"><br />
/************************************************************************/<br />
/* */<br />
/* Debouncing 8 Keys */<br />
/* Sampling 4 Times */<br />
/* With Repeat Function */<br />
/* */<br />
/* Author: Peter Dannegger */<br />
/* danni@specs.de */<br />
/* */<br />
/************************************************************************/<br />
<br />
#include <stdint.h><br />
#include <avr/io.h><br />
#include <avr/interrupt.h><br />
<br />
#ifndef F_CPU<br />
#define F_CPU 1000000 // processor clock frequency<br />
#warning kein F_CPU definiert<br />
#endif<br />
<br />
#define KEY_DDR DDRB<br />
#define KEY_PORT PORTB<br />
#define KEY_PIN PINB<br />
#define KEY0 0<br />
#define KEY1 1<br />
#define KEY2 2<br />
#define ALL_KEYS (1<<KEY0 | 1<<KEY1 | 1<<KEY2)<br />
<br />
#define REPEAT_MASK (1<<KEY1 | 1<<KEY2) // repeat: key1, key2<br />
#define REPEAT_START 50 // after 500ms<br />
#define REPEAT_NEXT 20 // every 200ms<br />
<br />
#define LED_DDR DDRA<br />
#define LED_PORT PORTA<br />
#define LED0 0<br />
#define LED1 1<br />
#define LED2 2<br />
<br />
volatile uint8_t key_state; // debounced and inverted key state:<br />
// bit = 1: key pressed<br />
volatile uint8_t key_press; // key press detect<br />
<br />
volatile uint8_t key_rpt; // key long press and repeat<br />
<br />
<br />
ISR( TIMER0_OVF_vect ) // every 10ms<br />
{<br />
static uint8_t ct0 = 0xFF, ct1 = 0xFF, rpt;<br />
uint8_t i;<br />
<br />
TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms<br />
<br />
i = key_state ^ ~KEY_PIN; // key changed ?<br />
ct0 = ~( ct0 & i ); // reset or count ct0<br />
ct1 = ct0 ^ (ct1 & i); // reset or count ct1<br />
i &= ct0 & ct1; // count until roll over ?<br />
key_state ^= i; // then toggle debounced state<br />
key_press |= key_state & i; // 0->1: key press detect<br />
<br />
if( (key_state & REPEAT_MASK) == 0 ) // check repeat function<br />
rpt = REPEAT_START; // start delay<br />
if( --rpt == 0 ){<br />
rpt = REPEAT_NEXT; // repeat delay<br />
key_rpt |= key_state & REPEAT_MASK;<br />
}<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key has been pressed. Each pressed key is reported<br />
// only once<br />
//<br />
uint8_t get_key_press( uint8_t key_mask )<br />
{<br />
cli(); // read and clear atomic !<br />
key_mask &= key_press; // read key(s)<br />
key_press ^= key_mask; // clear key(s)<br />
sei();<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key has been pressed long enough such that the<br />
// key repeat functionality kicks in. After a small setup delay<br />
// the key is reported being pressed in subsequent calls<br />
// to this function. This simulates the user repeatedly<br />
// pressing and releasing the key.<br />
//<br />
uint8_t get_key_rpt( uint8_t key_mask )<br />
{<br />
cli(); // read and clear atomic !<br />
key_mask &= key_rpt; // read key(s)<br />
key_rpt ^= key_mask; // clear key(s)<br />
sei();<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
// check if a key is pressed right now<br />
//<br />
uint8_t get_key_state( uint8_t key_mask )<br />
<br />
{<br />
key_mask &= key_state;<br />
return key_mask;<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
uint8_t get_key_short( uint8_t key_mask )<br />
{<br />
cli(); // read key state and key press atomic !<br />
return get_key_press( ~key_state & key_mask );<br />
}<br />
<br />
///////////////////////////////////////////////////////////////////<br />
//<br />
uint8_t get_key_long( uint8_t key_mask )<br />
{<br />
return get_key_press( get_key_rpt( key_mask ));<br />
}<br />
<br />
int main( void )<br />
{<br />
LED_PORT = 0xFF;<br />
LED_DDR = 0xFF;<br />
<br />
// Configure debouncing routines<br />
KEY_DDR &= ~ALL_KEYS; // configure key port for input<br />
KEY_PORT |= ALL_KEYS; // and turn on pull up resistors<br />
<br />
TCCR0 = (1<<CS02)|(1<<CS00); // divide by 1024<br />
TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5); // preload for 10ms<br />
TIMSK |= 1<<TOIE0; // enable timer interrupt<br />
<br />
sei();<br />
<br />
while(1){<br />
if( get_key_short( 1<<KEY1 ))<br />
LED_PORT ^= 1<<LED1;<br />
<br />
if( get_key_long( 1<<KEY1 ))<br />
LED_PORT ^= 1<<LED2;<br />
<br />
// single press and repeat<br />
<br />
if( get_key_press( 1<<KEY2 ) || get_key_rpt( 1<<KEY2 )){<br />
uint8_t i = LED_PORT;<br />
<br />
i = (i & 0x07) | ((i << 1) & 0xF0);<br />
if( i < 0xF0 )<br />
i |= 0x08;<br />
LED_PORT = i;<br />
}<br />
}<br />
}<br />
</syntaxhighlight><br />
<br />
Das Single-press-und-repeat-Beispiel geht nicht in jeder Beschaltung; folgendes Beispiel sollte universeller sein (einzelne LED an/aus):<br />
<syntaxhighlight lang="c"><br />
// single press and repeat<br />
if( get_key_press( 1<<KEY2 ) || get_key_rpt( 1<<KEY2 ))<br />
LED_PORT ^=0x08;<br />
</syntaxhighlight><br />
<br />
Neuere Variante, die einer Taste folgende Funktionen erlaubt:<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1753367 Universelle Tastenabfrage mit 2 Tastenerkennung]<br />
<syntaxhighlight lang="c"><br />
- get_key_press()<br />
- get_key_rpt()<br />
- get_key_press() mit get_key_rpt()<br />
- get_key_short() mit get_key_long()<br />
- get_key_short() mit get_key_long_r() und get_key_rpt_l()<br />
</syntaxhighlight><br />
Erweiterung für die Erkennung von zwei gleichzeitig gedrückten Tasten:<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1753367]<br />
<syntaxhighlight lang="c"><br />
- get_key_common()<br />
</syntaxhighlight><br />
<br />
===== Funktionsweise =====<br />
Der Code basiert auf 8 parallelen vertikalen Zählern, die über die Variablen <code>ct0</code> und <code>ct1</code> aufgebaut werden,<br />
<br />
[[Bild:VertCount.png|framed|center|8 vertikale Zähler in zwei 8-Bit-Variablen]]<br />
<br />
wobei jeweils ein Bit in <code>ct0</code> mit dem gleichwertigen Bit in <code>ct1</code> zusammengenommen einen 2-Bit-Zähler bildet.<br />
Der Code, der sich um die 8 Zähler kümmert, ist so geschrieben, daß er alle 8 Zähler gemeinsam parallel behandelt.<br />
<br />
<syntaxhighlight lang="c"><br />
i = key_state ^ ~KEY_PIN; // key changed ?<br />
</syntaxhighlight><br />
<code>i</code> enthält an dieser Stelle für jede Taste, die sich im Vergleich mit dem vorhergehenden entprellten Zustand (<code>key_state</code>) verändert hat, ein 1-Bit.<br />
<br />
<syntaxhighlight lang="c"><br />
ct0 = ~( ct0 & i ); // reset or count ct0<br />
ct1 = ct0 ^ (ct1 & i); // reset or count ct1<br />
</syntaxhighlight><br />
<br />
Diese beiden Anweisungen erniedrigen den 2-Bit-Zähler <code>ct0</code>/<code>ct1</code> für jedes Bit um 1, welches in <code>i</code> gesetzt ist. Liegt an der entsprechenden Stelle in <code>i</code> ein 0-Bit vor (keine Änderung des Zustands), so wird der Zähler <code>ct0</code>/<code>ct1</code> für dieses Bit auf 1 gesetzt.<br />
Der Grundzustand des Zählers ist also <code>ct0</code> == 1 und <code>ct1</code> == 1 (Wert 3). Der Zähler zählt daher mit jedem ISR-Aufruf, bei dem die Taste im Vergleich zu <code>key_state</code> als verändert erkannt wurde,<br />
<br />
ct1 ct0<br />
1 1 // 3<br />
1 0 // 2<br />
0 1 // 1<br />
0 0 // 0<br />
1 1 // 3<br />
<br />
<syntaxhighlight lang="c"><br />
i &= ct0 & ct1; // count until roll over ?<br />
</syntaxhighlight><br />
in <code>i</code> bleibt nur dort ein 1-Bit erhalten, wo sowohl in <code>ct1</code> als auch in <code>ct0</code> ein 1-Bit vorgefunden wird, der betreffende Zähler also bis 3 zählen konnte. Durch die zusätzliche Verundung mit <code>i</code> wird der Fall abgefangen, dass ein konstanter Zählerwert von 3 in <code>i</code> ein 1-Bit hinterlässt. Im Endergebnis bedeutet das, dass nur ein Zählerwechsel von 0 auf 3 zu einem 1-Bit an der betreffenden Stelle in <code>i</code> führt, aber auch nur dann, wenn in <code>i</code> an dieser Bitposition ebenfalls ein 1-Bit war (welches wiederum deswegen auf 1 war, weil an diesem Eingabeport eine Veränderung zum letzten bekannten entprellten Zustand festgestellt wurde). Alles zusammengenommen heißt das, dass ein Tastendruck dann erkannt wird, wenn die Taste 4-mal hintereinander in einem anderen Zustand vorgefunden wurde als dem zuletzt bekannten entprellten Tastenzustand.<br />
<br />
An dieser Stelle ist <code>i</code> daher ein Vektor von 8 Bits, von denen jedes einzelne der Bits darüber Auskunft gibt, ob die entsprechende Taste mehrmals hintereinander im selben Zustand angetroffen wurde, der nicht mit dem zuletzt bekannten Tastenzustand übereinstimmt. Ist das der Fall, dann wird eine entsprechende Veränderung des Tastenzustands in <code>key_state</code> registriert<br />
<syntaxhighlight lang="c"><br />
key_state ^= i; // then toggle debounced state<br />
</syntaxhighlight><br />
und wenn sich in <code>key_state</code> das entsprechende Bit von 0 auf 1 verändert hat, wird dieses Ereignis als „Taste wurde niedergedrückt“ gewertet.<br />
<syntaxhighlight lang="c"><br />
key_press |= key_state & i; // 0->1: key press detect<br />
</syntaxhighlight><br />
<br />
Damit ist der Tasteneingang entprellt. Und zwar sowohl beim Drücken einer Taste als auch beim Loslassen (damit Tastenpreller beim Loslassen nicht mit dem Niederdrücken einer Taste verwechselt werden). Der weitere Code beschäftigt sich dann nur noch damit, diesen entprellten Tastenzustand weiter zu verarbeiten.<br />
<br />
Der Codeteil sieht durch die Verwendung der vielen bitweisen Operationen relativ komplex aus. Behält man aber im Hinterkopf, dass einige der bitweisen wie ein „paralles If“ gleichzeitig auf allen 8 Bits eingesetzt werden, dann vereinfacht sich vieles. Ein<br />
<syntaxhighlight lang="c"><br />
key_press |= key_state & i;<br />
</syntaxhighlight><br />
ist nichts anderes als ein<br />
<syntaxhighlight lang="c"><br />
// teste ob Bit 0 sowohl in key_state als auch in i gesetzt ist<br />
// und setze Bit 0 in key_press, wenn das der Fall ist<br />
if( ( key_state & ( 1 << 0 ) ) &&<br />
( i & ( 1 << 0 ) )<br />
key_press |= ( 1 << 0 );<br />
<br />
// Bit 1<br />
if( ( key_state & ( 1 << 1 ) ) &&<br />
( i & ( 1 << 1 ) )<br />
key_press |= ( 1 << 1 );<br />
<br />
// Bit 2<br />
if( ( key_state & ( 1 << 2 ) ) &&<br />
( i & ( 1 << 2 ) )<br />
key_press |= ( 1 << 2 );<br />
<br />
...<br />
</syntaxhighlight><br />
nur als wesentlich kompaktere Operation ausgeführt und für alle 8 Bits gleichzeitig.<br />
Die Kürze und Effizienz dieser paar Codezeilen ergibt sich aus dem Umstand, dass jedes Bit in den Variablen für eine Taste steht und alle 8 (maximal möglichen) Tasten gleichzeitig die Operationen durchlaufen.<br />
<br />
Die Funktionsweisen der verschiedenen Modi anhand von Zeitstrahlen erklärt<br />
[https://www.mikrocontroller.net/topic/48465?goto=1753367#1844458 dieser Forumsbeitrag].<br />
<br />
„Walkthrough“ der verschiedenen Zustände der einzelnen Variablen anhand eines Tastendrucks auf<br />
[https://www.avrfreaks.net/comment/726676#comment-726676 avrfreaks.net].<br />
<br />
===== Reduziert auf lediglich 1 Taste =====<br />
Diskussionen im Forum zeigen immer wieder, dass viele eine Abneigung gegen diesen Code haben, weil er ihnen sehr kompliziert vorkommt.<br />
<br />
Der Code ist nicht leicht zu analysieren und er zieht alle Register dessen, was möglich ist, um sowohl Laufzeit als auch Speicherverbrauch einzusparen. Oft hört man auch das Argument: Ich benötige ja nur eine Entprellung für 1 Taste, gibt es da nichts Einfacheres?<br />
<br />
Hier ist die „Langform“ des Codes, so wie man das für lediglich 1 Taste schreiben würde, wenn man exakt dasselbe Entprellverfahren einsetzen würde. Man sieht: Da ist keine Hexerei dabei: In <code>key_state</code> wird der letzte bekannte entprellte Zustand der Taste gehalten. Der Pin-Eingang wird mit diesem Zustand verglichen und wenn sich die beiden unterscheiden, dann wird ein Zähler heruntergezählt. Produziert dieses Herunterzählen einen Unterlauf des Zählers, dann gilt die Taste als entprellt und wenn dann auch noch die Taste gerade gedrückt ist, dann wird dieses in <code>key_press</code> entsprechend vermerkt.<br />
<br />
<syntaxhighlight lang="c"><br />
uint8_t key_state;<br />
uint8_t key_counter;<br />
volatile uint8_t key_press;<br />
<br />
ISR( ... Overflow ... )<br />
{<br />
uint8_t input = KEY_PIN & ( 1 << KEY0 );<br />
<br />
if( input != key_state ) {<br />
key_counter--;<br />
if( key_counter == 0xFF ) {<br />
key_counter = 3;<br />
key_state = input;<br />
if( input )<br />
key_press = TRUE;<br />
}<br />
}<br />
else<br />
key_counter = 3;<br />
<br />
}<br />
<br />
uint8_t get_key_press()<br />
{<br />
uint8_t result;<br />
<br />
cli();<br />
result = key_press;<br />
key_press = FALSE;<br />
sei();<br />
<br />
return result;<br />
}<br />
</syntaxhighlight><br />
<br />
Der vollständige Entprellcode, wie weiter oben gelistet, besticht jetzt aber darin, dass er compiliert kleiner ist als diese anschaulichere Variante für lediglich 1 Taste. Und das bei gleichzeitig erhöhter Funktionalität. Denn z.&nbsp;B. ein Autorepeat ist in diesem Code noch gar nicht eingebaut. Und spätestens wenn man dann eine zweite Taste entprellen möchte, dann ist auch der SRAM-Speicherverbrauch dieser Langform höher als der des Originals für 8 Tasten. Daraus folgt: Selbst für lediglich 1 Taste ist die Originalroutine die bessere Wahl.<br />
<br />
Und wegen der Komplexität mal eine Frage: Sind Sie selbst in der Lage eine entsprechend effiziente <code>sqrt()</code>-Funktion zu schreiben, wie die, die Sie in der Standard-C-Bibliothek vorfinden? Nein? Dann dürften Sie eigentlich Ihrer Argumentation nach die Bibliotheksfunktion <code>sqrt()</code> nicht verwenden, sondern müssten sich stattdessen selbst eine Wurzel-Funktion schreiben.<br />
<br />
=== Selbstsättigendes Filter (nach Jürgen Schuhmacher) ===<br />
Durch die Nutzung der diskreten Signalanalyse in Software kann die Funktionalität einer einfachen Entprellung mit einem Widerstand, einem Kondensator und einem Schmitt-Trigger wie in Hardware nachgebildet werden, indem ein abstraktes IIR-Filter benutzt wird, der eine Kondensatorladekurve emuliert. Mit der Vorschrift ''Y(t) = k Y(t−1) + Input'' wird ein einfaches Filter erzeugt, das dem Eingangswert träge folgt. Bei Überschreiten eines bestimmten Wertes erfolgt mit einer einfachen Abfrage das Schalten des Ausgangssignals.<br />
<br />
Für Assembler und VHDL bei FPGAs eignet sich aufgrund der leicht zu implementierenden binären Operationen folgende Darstellung mit einer Auflösung des Filterwertspeichers von nur 8 bit: Wert_Neu = Wert_Alt − Wert_Alt/16 + 16*(Taste = True). Der Filterwert bildet dann den gedämpften Verlauf des Eingangs (flankenverschliffen) ab und kann Prellen bis nahe an den Grenzbereich zum schnellen Tasten unterdrücken. Der Ausgangswert ist dann einfach das höchstwertige Bit des Filterwertes.<br />
<br />
[[Datei:Entprellung mit IIR-Filter.gif]]<br />
<br />
Dazu muss das Signal des Tasters idealerweise um den Faktor 10…20 schneller abgetastet werden, als die höchste gewünschte Tippgeschwindigkeit vorgibt. Noch schneller abzutasten ist möglich, führt aber zu mehr Bedarf an Bits beim Filter. Die Schmitt-Trigger-Funktion kann dadurch gebildet werden, dass eine 1 am Ausgang bei z.&nbsp;B. Überschreiten einer 55-%-Grenze und eine 0 bei Unterschreitung der 45-%-Grenze ausgegeben wird. Im Zwischenbereich wird der alte Wert gehalten. Die realen Grenzen dieser [[Hysterese]] müssen an die Applikation angepasst werden, da zu enge Grenzen sonst zu empfindlich gegenüber Störungen wären.<br />
<br />
=== Einfaches Mittelwertfilter (nach Lothar Miller) ===<br />
Für digitale Schaltungen oder PLDs empfiehlt sich ein FIR-Filter mit aneinandergereihten Flipflops. Man schiebt das Eingangssignal in eine Flipflop-Kette und schaltet oberhalb der Mitte um:<br />
<br />
SignalInput → FF1 → FF2 → FF3 → FF4 → FF5 → FF6 → FF7 → FF8<br />
<br />
Wenn alle FFs = 1 (Summe der FFs=8) dann SignalOutput = 1<br /><br />
Wenn alle FFs = 0 (Summe der FFs=0) dann SignalOutput = 0<br />
<br />
Dieses Verfahren kann sehr einfach in Logik abgebildet werden, weil für die Berechnung des Ausgangs nur ein NOR- bzw. ein AND-Gatter nötig ist.<br />
<br />
Das reale Signal muss dazu aber genügend langsam abgetastet werden, sodaß die Filterperiode die Prelldauer übersteigt, um zu verhindern, daß nicht inmitten einer passiven Phase eines Prellvorgangs ein 8-fach 1 gesehen wird. Damit wird die Interpretation vergleichsweise langsam.<br />
<br />
== Gegenüberstellung der Verfahren ==<br />
<br />
=== Hardware ===<br />
<br />
* „entprellte Schalter“: sehr teuer, große Bauform, verschleißbelastet, geringe Haltbarkeit<br />
* „Umschalter“: benötigt aufwendigeren Schalter, benötigt Elektronik<br />
* „Umschalter ohne FF“: benötigt aufwendigeren Schalter und kleinen Kondensator<br />
* „Kondensatorentprellung“: benötigt etwas mehr Platz, kommt mit schlechten Schaltern zurecht<br />
<br />
=== Software ===<br />
<br />
* Flankenverfahren:<br />
* Warteschleife: Durch die Warteschleifen entsteht eine nicht zu vernachlässigende Verzögerung im Code. Speziell wenn mehrere Tasten zu überwachen sind, nicht unproblematisch.<br />
* Timer: Universalfunktionalität, die durch geringen Speicherverbrauch, geringen Rechenzeitverbrauch und gute Funktion besticht. Der „Verbrauch“ eines Timers sieht auf den ersten Blick schlimmer aus, als er ist, denn in den meisten Programmen hat man sowieso einen Basistimer für die Zeitsteuerung des Programms im Einsatz, der für die Tastenentprellung mitbenutzt werden kann.<br />
* Filter: sehr geringer Platzbedarf in FPGAs, relativ gute Wirkung<br />
* Filter 2: sehr geringer Platzbedarf, gute Wirkung<br />
<br />
== Siehe auch ==<br />
<br />
* [[AVR-Tutorial: Tasten]] (Assembler)<br />
* [https://www.mikrocontroller.net/topic/6490 Forumsbeitrag]: von Peter Dannegger (AVR-Assembler)<br />
* [https://www.mikrocontroller.net/topic/552487?goto=7378825#7378825 Forumsbeitrag]: Entprellung im Arduino-Stil<br />
<br />
== Weblinks ==<br />
<br />
* [https://www.edn.com/contact-debouncing-algorithm-emulates-schmitt-trigger/ Contact-debouncing algorithm emulates Schmitt trigger (Artikel)], [https://web.archive.org/web/20170501074320/http://www.edn.com/Pdf/ViewPdf?contentItemId=4324067 als PDF] (englisch)<br />
* [http://www.ganssle.com/debouncing.pdf A Guide to Debouncing, or, How to Debounce a Contact in Two Easy Pages, by Jack Ganssle] (englisch), praktische Erläuterungen zum Entprellen in Soft- und Hardware<br />
* [https://www.pololu.com/docs/0J16/all Understanding Destructive LC Voltage Spikes] (englisch)<br />
<br />
[[Kategorie:AVR]]<br />
[[Kategorie:Signalverarbeitung]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Glossar&diff=105937Glossar2023-03-12T17:48:15Z<p>Engineer: /* S */</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU'.<br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, die hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelersystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Rückkanal bei HMDI-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei S/PDIF<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''minute: Anzahl der Herzschgläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''ross '''D'''omain '''C'''rossing: ein Synonym für Taktübergänge in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer, Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232, ein Standard zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: ein Standard zur seriellen Datenübertragung, benutzt differentielle Signale, was die Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
;RTL: '''R'''ound '''T'''rip '''L'''atency, gesamte Latenz von Daten in einem System bei einem Schreib- und Rücklesevorgang<br />
<br />
;RTL: '''R'''egister '''T'''ransfer '''L'''anguage, textuelle Beschreibung einer Schaltung auf Registerebene beim Chip- und FPGA-design<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''pecific '''A'''bsorption '''R'''ate: eine Maßzahl die angibt, wieviel Energie der menschliche Körper bei Strahlung aufnimmt, wichtig in der Medizintechnik<br />
<br />
;SAR: '''S'''peicher / '''S'''torage '''A'''dress '''R'''egister: Zwischenspeicher in einer CPU, dessen Inhalt die aktuell bearbeitete Speicheradresse hält<br />
<br />
;SAR: '''S'''uccessive '''A'''pproximation '''R'''egister: eine Methode der Analog-Digitalwandlung, bei der Endwert zu iterative Findung der Bits und Vergleich generiert wird<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethode in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt wird, um den Empfangsbereich zu vergrößern.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Glossar&diff=105871Glossar2023-02-11T22:42:54Z<p>Engineer: /* R */</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU'.<br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, die hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelersystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Rückkanal bei HMDI-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei S/PDIF<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''minute: Anzahl der Herzschgläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''ross '''D'''omain '''C'''rossing: ein Synonym für Taktübergänge in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer, Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232, ein Standard zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: ein Standard zur seriellen Datenübertragung, benutzt differentielle Signale, was die Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
;RTL: '''R'''ound '''T'''rip '''L'''atency, gesamte Latenz von Daten in einem System bei einem Schreib- und Rücklesevorgang<br />
<br />
;RTL: '''R'''egister '''T'''ransfer '''L'''anguage, textuelle Beschreibung einer Schaltung auf Registerebene beim Chip- und FPGA-design<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethodik in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt werden kann, wodurch sich der Empfangsbereich stark vergrössert.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Glossar&diff=105780Glossar2022-12-31T14:17:03Z<p>Engineer: bmc</p>
<hr />
<div>{{TOC}}<br />
<br />
== A ==<br />
<br />
;ABI: '''A'''pplication '''B'''inary '''I'''nterface: Das Binärinterface, das zum Datenaustausch verwendet wird, z.B. die Registerverwendung in einer Funktion und für Parameterübergabe, Datenablage, Strukturlayout, etc. Jeder [[Compiler]] erzeugt Code nach einer bestimmten ABI, so daß der Code aus unterschiedlichen Modulen und Bibliotheken zusammenpasst. Beim Mischen von Hochsprachen mit (Inline-)Assembler muss auf ABI-Konformität geachtet werden. Compiler-Schalter können das ABI beeinflussen. Beispiel: -fpack-struct beim GCC.<br />
<br />
;[[ADC]]: '''A'''nalog '''D'''igital '''C'''onverter. Im Deutschen auch 'ADU'.<br />
<br />
;[[ADSR]]: '''A'''ttack '''D'''ecay '''S'''ustain '''R'''elease. Ein Amplitudenverlauf als Hüllkurve, die hauptsächlich in der elektronischen Musik - aber auch bei der Verhaltensbeschreibung von Regelersystemen verwendet wird<br />
<br />
;[[AGC]]: '''A'''utomatic '''G'''ain '''C'''ontrol. Ein Schaltkreis oder eine Software zur selbsttätigen Verstärkungsanpassung in Form einer Regelung.<br />
<br />
;[[ARC]]: '''A'''udio '''R'''eturn '''C'''hannel. Der Rückkanal bei HMDI-gekoppelten Audiogeräten<br />
<br />
;[[ARM]]: '''A'''dvanced '''R'''ISC '''M'''achine. Eine Mikrocontrollerfamilie des Types RISC ("reduced instruction set") bzw. die Firma, die diese designt und lizensiert.<br />
<br />
;[[AVR]]: Eine Mikrocontrollerfamilie von Atmel. Der Ursprung des Namens ist unklar.<br />
<br />
== B ==<br />
<br />
;[[BGA]]: '''B'''all '''G'''rid '''A'''rray: Eine Gehäuseform für ICs.<br />
<br />
;[[Bit]]: '''Bi'''nary Digi'''t''': Kleinste Informationseinheit, siehe [[Bitmanipulation]].<br />
<br />
;[[BMC]]: '''B'''iphase '''M'''ark '''C'''ode: Ein digitaler Leitungscode z.B. bei S/PDIF<br />
<br />
;[[BMC]]: '''B'''oard '''M'''anagement '''C''''ontroller: Steuereinheit für ein Mainboard in der Elektronik, meist ein UC.<br />
<br />
;BNC: '''B'''ajonet '''N'''ut '''C'''onnector: Ein Steckverbinder für Koaxialkabel.<br />
<br />
;[[BPM]]: '''B'''eats '''p'''er '''m'''minute: Anzahl der Herzschgläge bei Cardio-Applikationen / Zahl der Schlagzeugschläge je Minute in der Musik<br />
<br />
;[[BPS]]: '''B'''its '''p'''er '''s'''econd: Anzahl der Bits je Sekunde, Masszahl für die Übertragungsgeschwindigkeit / Bandbreite<br />
<br />
;[[BSDL]]: '''B'''oundary '''S'''can '''D'''escription '''L'''anguage: Eine Sprache für [[boundary scan]]-basiertes Testen und Debuggen bei z.B. Chips<br />
<br />
;[[BTL]]: '''B'''ridge '''T'''ied '''L'''oad: Verschaltungstechnik bei Class-D-Verstärkern<br />
<br />
<br />
== C ==<br />
<br />
;[[C]]: Eine weit verbreitete Programmiersprache.<br />
<br />
;[[CAN]]: '''C'''ontroller '''A'''rea '''N'''etwork: Ein Netzwerk für kleine [[Mikrocontroller]], ursprünglich für die Automobilbranche entwickelt.<br />
<br />
;[[CCD]]: '''C'''harge '''C'''oupled '''D'''evices: (Ladungsverkoppelte Bauteile), eine Bezeichung für Bildsensoren<br />
<br />
;[[CDC]]: '''C'''ross '''D'''omain '''C'''rossing: ein Synonym für Taktübergänge in digitalen Schaltungen<br />
<br />
;[[CDC]]: '''C'''ommunication '''D'''evice '''C'''lass: Im USB-Standard festgelegte (OS-unabhängige) Emulation serieller Geräte über USB<br />
<br />
;[[CDS]]: ''' C'''omponent '''D'''esign '''S'''pecification: formelle Designbeschreibung<br />
<br />
;[[CLB]]: '''C'''onfigurable '''L'''ogic '''B'''lock: elementares konfigurierbares Logikelement in PLDs<br />
<br />
;[[CMB]]: '''C'''ommand '''M'''anagement '''B'''lock: der Befehlsinterpreter in einer CPU-Plattform, meist im Bereich der Kommunikationsschnittstelle, auch [[CMI]]<br />
<br />
;[[CMT]]: '''C'''lock '''M'''anagement '''T'''ile: Ein takterzeugendes Element in einem (Xilinx)-FPGA<br />
<br />
;[[CNC]]: '''C'''omputerized '''N'''umerical '''C'''ontrol: Computer gesteuerte Steuerung, z.B. bei Werkzeugmaschinen<br />
<br />
;[[CPLD]]: '''C'''omplex '''P'''rogrammable '''L'''ogic '''D'''evice: Ein programmierbarer Logikbaustein<br />
<br />
;[[CRS]]: ''' C'''omponent '''R'''equirement '''S'''pecification: formelle Anforderungsspezifikation<br />
<br />
== D ==<br />
;[[DAC]]: '''D'''igital to '''A'''nalog '''C'''onverter<br />
;[[DCC]]: '''D'''igital '''C'''ommand '''C'''ontrol: Standard zur digitalen Steuerung von Modelleisenbahnen<br />
;[[DCM]]: '''D'''igital '''C'''lock '''M'''anager, eine Takterzeugungseinheit in [[FPGA]]s<br />
;[[DDC]]: '''D'''igital '''D'''own '''C'''onversion: Abtastfrequenzverringerung in der Signalverarbeitung<br />
;[[DDR]]: '''D'''ouble '''D'''ata '''R'''ate: "doppelte Datenrate", oft in Verbindung mit [[RAM]]s verwendet<br />
;DDS: '''D'''igital '''D'''ata '''S'''torage: Bezeichung für grosse Massenspeicher in der Computertechnik<br />
;[[DDS]]: '''D'''irect '''D'''igital '''S'''ynthesis: Verfahren zur Wellenformerzeugung - i.d.R ein Sinus<br />
<br />
;[[DFS]]: '''D'''igital '''F'''requency '''S'''ynthesis: Allgemeiner Begriff bzw digitale Wellenformerzeugung<br />
<br />
;[[DMX]]: Protokoll zur Steuerung von Lichteffektgeräten<br />
;[[DRC]]: '''D'''esign '''R'''ule '''C'''heck, ein Prüfvorgang auf geometrische Fehler in einem PCB-Layout<br />
;[[DTMF]]: '''D'''ual '''T'''one '''M'''ultiple '''F'''requency: Tonwahlverfahren im Telephon<br />
;[[DUC]]: '''D'''igital '''U'''p '''C'''onversion: Abtastfrequenzerhöhung in der Signalverarbeitung<br />
<br />
== E ==<br />
<br />
;[[EDO]]: '''E'''nhanced '''D'''ata '''O'''ut, ein (inzwischen veraltetes) Datenformat beim [[RAM]]s.<br />
<br />
;[[EEPROM]]: '''E'''lectrical '''E'''rasable and '''P'''rogrammable '''R'''ead '''O'''nly '''M'''emory: Ein nichtflüchtiger [[Speicher#EEPROM|Speicher]].<br />
<br />
;[[EMV]]: '''E'''lektro'''m'''agnetische '''V'''erträglichkeit: Beschreibt das Verhalten von Geräten bezüglich Aussenden von elektromagetischen Störungen und die Toleranz bezüglich Einstrahlung eben dieser.<br />
<br />
;[[ERC]]: '''E'''lectrical '''R'''ule '''C'''heck, ein Prüfvorgang auf Fehler in einem [[PCB]]-Layout, bzw einem Schaltplan.<br />
<br />
;[[ESR]]: '''E'''quivalent '''S'''eries '''R'''esistance, der effektive innere Widerstand von z.B. Kondensatoren.<br />
<br />
== F ==<br />
<br />
;FBGA: '''F'''ine [[BGA|'''B'''all '''G'''rid '''A'''rray]]: Eine Gehäusebauform für ICs.<br />
;FCU: '''F'''low '''C'''ontrol '''U'''nit: eine logische Einheit in einem Microcontroller oder einem FPGA, welche einen Datenfluss steuert, z.B. in einer Rechenpipeline<br />
;FEC: '''F'''orward '''E'''rror '''C'''orrectopn: Fehlerkorrekturverfahren, welches die Paritätsinformation vor den eigentlichen Daten sendet und somit eine on the fly Korrektur im Empfänger ermöglicht<br />
;FEM: '''F'''inite '''E'''lemente '''M'''ethode: Rechenverfahren, das mittels Stützstellenapproximation und Minimierung eines Energiefunktionals Systemzustände ermittelt<br />
;[http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation FFT]: '''F'''ast '''F'''ourier '''T'''ransformation: Ein Algorithmus zur effizienten Berechnung der [http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation Diskreten Fourier-Transformation] für den Fall gleicher Zeitabstände der Eingabewerte und einer Zweierpotenz als Anzahl der Eingabewerte. Die Fourier-Transformation bildet eine Funktion auf ihr Frequenzspektrum ab, was vielfach in der Signalverarbeitung Anwendung findet neben anderen Transformationen wie Laplace-Transformation, Wavelet-Transformation oder Z-Transformation.<br />
;FI: Fehlerstromschutzschalter (Ein anderer Name für RCD.)<br />
;[[FIFO]]: '''F'''irst '''I'''n '''F'''irst '''O'''ut: Eine Organisationsform für einen Zwischenspeicher, bei dem die Daten in der Reihenfolge ausgegeben werden, in der sie eingeschrieben wurden<br />
;[[FMEA]]: '''F'''ault '''M'''ode '''E'''ffect '''A'''nalsys, englisch für die Analyse von Funktionsfehlern eines Systems infolge äusserer Einflüsse, deutsch auch "Fehlermöglichkeitseinflussanalyse"<br />
;[[FOC]]: '''F'''ield '''O'''riented '''C'''ontrol, englisch für feldorientierte Regelung (bei Motoren)<br />
;[[FPGA]]: '''F'''ield '''P'''rogrammable '''G'''ate '''A'''rray: Bezeichnung für jederzeit wieder programmierbare Logikbausteine.<br />
;[[FPU]]: '''F'''loating '''P'''oint '''U'''nit: Teil eines Prozessors, der Berechnungen mit Gleitkommazahlen unterstützt.<br />
;[[FSM]]: '''F'''inite '''S'''tate '''M'''achine, englisch für Zustandsautomat; eine Schaltung, die einen Ablauf in Form einer Software realisiert, z.B. in einem Microcontroller oder auch einem Logikbaustein<br />
<br />
== G ==<br />
;GFCI: '''G'''round '''F'''ault '''C'''urrent '''I'''nterrupter, eine Art RCD eingebaut in eine Steckdose. Bei Steckdosen für draußen und im Bad in Nordamerika anzutreffen.<br />
;GFR: '''G'''eneral '''F'''unction '''R'''egister, s.u.<br />
;GPR: '''G'''eneral '''P'''urpose '''R'''egister, Arbeitsregister eines Prozessors. Bei vielen Architekturen müssen Daten in solche Register geladen werden, um sie bearbeiten zu können. Bei [[AVR]] sind das die Register R0 – R31<br />
;GMI:<br />
;GMII: '''G'''igabit '''M'''edia '''I'''ndependent '''I'''nterface, eine Schnittstelle für Gigabit-PHYs<br />
;GMP: '''G'''ood '''M'''anufacturing '''P'''ractice, Richtlinie zur Qualitätssicherung in der Fertigung<br />
;GMT: '''G'''reenwich '''M'''ean '''T'''ime, Standardzeitzone für Europa<br />
;GOC: eine C-ähnliche Programmiersprache<br />
;GPS: '''G'''lobal '''P'''ositioning '''S'''ystem, Naviationsunterstützung durch Satelliten<br />
;GPU: '''G'''raphic '''P'''rocessing '''U'''nit, eine Grafikverarbeitungseinheit, meist für die Grafikarte in Rechnern verwendet, oft auch im Zusammenhang mit der Benutzung derselben als Coprozessor - teils in der CPU realisiert<br />
;GSM: '''G'''lobal '''S'''ystem for '''M'''obile Communications, Das Mobilfunknetz der zweiten Generation (auch 2G genannt). Darüber können Gespräche (circuit switched) und Daten (packet switched, GPRS) übertragen werden.<br />
;GTP: '''G'''igabit '''T'''ransceiver '''P'''ort, Ein high speed port bei [[FPGA]]s<br />
;GUI: '''G'''raphical '''U'''ser '''I'''nterface, grafische Benutzerschnittstelle eines Computerprogramms<br />
<br />
== H ==<br />
<br />
;HF: Hochfrequenz<br />
<br />
;HIL: &rarr; Wikipedia: [http://de.wikipedia.org/wiki/Hardware_in_the_Loop '''H'''ardware '''i'''n the '''L'''oop].<br />
<br />
;HP: '''H'''orse '''P'''ower, engl. Bezeichnung für mechanische Leistung, siehe Pferdestärek <br />
;HPF: '''H'''igh '''P'''ass '''F'''ilter: Englisch für Hochpass-[[Filter]], seltener auch nur '''HP'''<br />
<br />
== I ==<br />
<br />
;IIR: '''I'''nfinite '''I'''mpulse '''R'''esponse: Bezeichnet ein bestimmte Sorte von [[Filter]]n, mit unendlicher Sprungantwort.<br />
<br />
;ISA: '''I'''nstruction '''S'''et '''A'''rchitecture: Registerstruktur und Befehlssatz eines Prozessors/[[Mikrocontroller]]s bzw. einer Prozessorfamilie.<br />
<br />
;[[ISP]]: '''I'''n '''S'''ystem '''P'''rogramming: Der Mikrocontroller wird direkt auf der Zielhardware programmiert.<br />
<br />
;ISR: '''I'''nterrupt '''S'''ervice '''R'''outine: Ein Programmstück, das nach Eintreten eines bestimmten Ereignisses ausgeführt wird. Siehe [[Interrupt]].<br />
<br />
;IRQ: '''I'''nterrupt '''R'''e'''q'''uest: Ein Ereignis, das einen [[Interrupt]] auslöst. In der Regel wird die Programmausführung unterbrochen und ein spezielles Programmstück, eine ISR, ausgeführt und danach zum ursprünglichen Programmcode zurückgekehrt. Viele IRQs können aktiviert oder deaktiviert werden.<br />
<br />
== J ==<br />
<br />
;[[JTAG]]: '''J'''oint '''T'''est '''A'''ction '''G'''roup: Eine Funktion für komplexe ICs, um diese im aufgelöteten Zustand zu prüfen bzw. zu programmieren und debuggen (Mikrocontroller).<br />
<br />
== K ==<br />
<br />
;KDE: Oberfläche bei Linux<br />
<br />
== L ==<br />
;[[LFSR]]: '''L'''inear '''F'''eedback '''S'''hift '''R'''egister: Rückgekoppeltes Schieberegister<br />
<br />
;LIFO: '''L'''ast ''''I'''n '''F'''irst '''O'''ut: azyklisch beschriebener Speicher, der wie ein Stapel (stack) arbeitet<br />
<br />
;LPF: '''L'''ow '''P'''ass '''F'''ilter: Englisch für Tiefpass[[Filter]], teilweise auch nur '''LP'''<br />
<br />
;LSB: '''L'''east '''S'''ignificant '''B'''yte: Das niederwertigste Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''L'''east '''S'''ignificant '''B'''it: niederwertigstes Bit.<br />
<br />
;LTE: '''L'''ong '''T'''erm '''E'''volution: LTE ist ein Mobilfunkstandard und auch als 4G (fourth generation) bekannt. Der Vorgänger von LTE ist 3G (third generation).<br />
<br />
== M ==<br />
<br />
;MAC: '''M'''edia '''A'''ccess '''C'''ontroller: Bezeichnung für die Logik, die einen Baustein steuert, meist im Zusammenhang mit Ethernet verwendet<br />
<br />
;MCB: '''M'''ain '''C'''ontrol '''B'''lock: Eine allgemeine Bezeichnung für die zentrale Steuerlogik in einem System<br />
: '''M'''emory '''C'''ontroller '''B'''lock: Abkürzung für einen Speichercontroller z.B. in einem FPGA<br />
<br />
;MCU: '''M'''ain '''C'''ontrol '''U'''nit: Die zentrale Steuerlogik in einem System, auch '''[[CPU]]'''<br />
: '''M'''icro '''C'''ontroller '''U'''nit: allgeine Bezeichnung für einen Prozessor<br />
<br />
: '''M'''icro '''E'''lectro '''M'''echanical '''S'''ystem : Abkürzung für ein Bauelement der Mikrosystemtechnik<br />
<br />
;MIG: '''M'''emory '''I'''nterface '''G'''enerator: Eine Software, die ein Speicherinterface in [[FPGA]]s konfiguriert<br />
<br />
;MII: '''M'''edia '''I'''ndependent '''I'''nterface, ein Begriff für ein allgemeines, bausteinunabhängiges Interface, oft in Verbindung mit Ethernet-PHYs verwendet<br />
<br />
;[[MIPS]]: '''M'''illion '''i'''nstructions '''p'''er '''s'''econd<br />
: '''M'''icroprocessor without '''i'''nterlocked '''p'''ipeline '''s'''tages.<br />
<br />
;MMC: '''M'''ulti '''M'''edia '''C'''ard: Eine kleine Speicherkarte<br />
<br />
;MSB: '''M'''ost '''S'''ignificant '''B'''yte: Das höchstwertige Byte in einem Datenwort mit mehreren Bytes. Je nach Zusammenhang aber auch<br />
: '''M'''ost '''S'''ignificant '''B'''it: höchstwertiges Bit.<br />
<br />
;[[Modbus]]: Ein älteres, aber immer noch oft eingesetztes Busprotokoll für serielle Verbindungen. In der Modbus [[TCP]]-Variante auch ethernetfähig<br />
<br />
== N ==<br />
<br />
;NCO: '''N'''umeric '''C'''ontrolled '''O'''scillator. Ein numerisch/digital arbeitender Schwingkreis - siehe auch [[DDS]].<br />
<br />
== O ==<br />
<br />
; OCDS: '''O'''n '''C'''hip '''D'''ebug '''S'''upport<br />
<br />
== P ==<br />
;[[PAM]]: '''P'''ulse '''A'''mplituden '''M'''odulation: Umsetzung eines Wertes auf analoge Spannungszustände, z.B. bei Ethernet<br />
;[[PCM]]: '''P'''ulse '''C'''ode '''M'''odulation: Umsetzung eines analogen Wertes auf ein digitales Signal - auch als Begriff für das Datenformat verwendet. Siehe [[Pulscodemodulation]]<br />
;PDM: '''P'''ulse '''D'''ichte '''M'''odulation: Umsetzung eines Wertes auf ein 1-Bit Signal, siehe [[Pulsdichtemodulation]]<br />
;[[PFC]]: '''P'''ower '''F'''actor '''C'''orrection: Eine Schaltung, die Blindleistung kompensiert<br />
;PHY: Bezeichnung für einen physikalischen Chip, oft im Zusammenhang mit Ethernet verwendet<br />
;[http://de.wikipedia.org/wiki/Phase-locked_loop PLL]: '''P'''hase '''L'''ocked '''L'''oop: Eine Schaltung, die einen Ausgangstakt mit definierter Phaselage zu einem Eingangstakt generiert.<br />
;[[PSU]]: '''P'''ower '''S'''upply '''U'''nit: Bezeichnung für die Stromversorgungseinheit<br />
;[[PWM]]: '''P'''ulse '''W'''eiten '''M'''odulation: Umsetzung eines Wertes auf 1-Bit Signal - siehe [[Pulsweitenmodulation]]<br />
<br />
== Q ==<br />
;[[QAM]]: '''Q'''adratur '''A'''mplituden '''M'''odulation: Modulation eines Analogsignals mit einem Quadratursignal (IQ).<br />
<br />
;[[QDR]]: '''Q'''adruple '''D'''ata '''R'''ate: Eine Speicherzugriffstechnik mit 4 Daten je Takt, siehe RAMs.<br />
<br />
== R ==<br />
<br />
;RCCB: '''R'''esidual '''C'''urrent operated '''C'''ircuit '''B'''reaker - ist eine andere Bezeichnung für einen RCD.<br />
<br />
;RCD: '''R'''esidual '''C'''urrent protective '''D'''evice, neudeutsch für [http://de.wikipedia.org/wiki/Fehlerstromschutzschalter Fehlerstromschutzschalter].<br />
<br />
;RISC: '''R'''educed '''I'''nstruction '''S'''et '''C'''omputer. Designstrategie für den Befehlssatz von Prozessoren und Microcontrollern, die einfache Befehle bevorzugt.<br />
<br />
;[[RS232]]: '''R'''ecommended '''S'''tandard 232: Eine Definition zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS232]] ist auch unter EIA232 bekannt.<br />
<br />
;[[RS485]]: '''R'''ecommended '''S'''tandard 485: Eine Definition zur seriellen Datenübertragung, eng gekoppelt an [[UART]]. [[RS485]] ist differentiell, was Störfestigkeit erhöht. Auch unter EIA485 bekannt.<br />
<br />
== S ==<br />
<br />
;SAR: '''S'''ynthetic '''A'''perture '''R'''adar: Eine Messwertverarbeitungsmethodik in der Radartechnik, bei der durch eine virtuelle Positionsvariation eine künstlich vergrösserte "Blende" benutzt werden kann, wodurch sich der Empfangsbereich stark vergrössert.<br />
<br />
;SAS: '''S'''erial '''A'''ttached '''S'''CSI: SAS ist eine Schnittstelle zur Anbindung von SSDs und Festplatten, welche meistens in Servern zu finden ist. Es gibt auch SAS Expander, mit welchen man an ein Interface noch mehr Datenträger hängen kann.<br />
<br />
;SATA: Sata ist eine Schnittstelle zur anbindung von Festplatten und SSDs innerhalb eines Computers. Der Nachfolger ist NVMe.<br />
<br />
;SDF: '''S'''ignal '''D'''elay '''F'''ile: Eine Datei für zeitgenaue Simulationen in der Digitaltechnik, welche die internen Zeitverzögerungen beschreibt.<br />
<br />
;SDR: '''S'''oftware '''D'''efined '''R'''adio: Allgemeine Bezeichung für mathematisch - per Software erzeugte - und modulierte elektromagnetische Wellen in der HF-Technik, speziell der Funkdatenübertragung und Radartechnik.<br />
<br />
;SOC: '''S'''ystem '''O'''n '''C'''hip: Bezeichung für die Erzeugung ganzer, computerähnlicher Rechnersysteme in programmierbaren Schaltkreisen wie FPGAs.<br />
<br />
;SOP: '''S'''tart '''O'''f '''P'''roduction: Ein Begriff aus dem Projektmanagement, der den Beginn der Produktion bezeichet.<br />
<br />
;SOP: '''S'''tandard '''O'''peration '''P'''rocedure: Ein Begriff aus dem Qualitätsmanagement, der eine Test- und Prüfmethodik zur Qualifizierung von Systemen beschreibt. Wird teilweise auch als Anleitung für Benutzer verstanden.<br />
<br />
;SFR: '''S'''pecial '''F'''unction '''R'''egister: Hardware-Register, über die interne und externe Peripherie eines Prozessors/[[Mikrocontroller]]s konfiguriert wird, und über die Daten ausgetauscht werden. IO-Ports werden z.B. auf bestimmte [[Speicher#Register|SFRs]] abgebildet, auf die dann mit speziellen Befehlen zugegriffen werden kann.<br />
<br />
;STM: Eine Microcontrollerfamilie der Firma '''S''' '''T''' '''M'''icroelectronics.<br />
<br />
== T ==<br />
<br />
;TTL: '''T'''ransistor-'''T'''ransistor-'''L'''ogik.<br />
<br />
== U ==<br />
<br />
;[[UART]]: '''U'''niversal '''A'''synchronus '''R'''eceiver and '''T'''ransmitter: Ein Modul in Mikrocontrollern oder PCs zum seriellen Datenaustausch.<br />
<br />
;[[USB]]: '''U'''niversal '''S'''erial '''B'''us : Ein standardisiertes serielles Protokoll, das vorwiegend bei PCs verwendet wird. Bandbreite beträgt bis zu 5Gbit/s.<br />
<br />
== V ==<br />
;VCA: '''V'''oltage '''C'''ontrolled '''A'''mplifier - Spannungsgesteuerter Verstärker<br />
;VCO: '''V'''oltage '''C'''ontrolled '''O'''scillator - Spannungsgesteuerter Oszillator<br />
;VHDL: '''V'''HSIC '''H'''ardware '''D'''escription '''L'''anguage - Programmiersprache für ASIC-und FPGA-Entwurfswerkzeuge<br />
;VHSIC: '''V'''ery '''H'''igh '''S'''peed '''I'''ntegrated '''C'''ircuit - allgemein für schnelle Digtialschaltungen<br />
;VLSI: '''V'''ery '''L'''arge '''S'''cale '''I'''ntegrated '''C'''ircuit - allgemein für ASICS<br />
<br />
== W ==<br />
<br />
;[[Watchdog|WDT]]: '''W'''atch '''D'''og '''T'''imer<br />
<br />
== X ==<br />
<br />
== Y ==<br />
<br />
== Z ==<br />
<br />
;Z: In der HF-Technik das Formelzeichen für den [[Wellenwiderstand]].<br />
<br />
[[Kategorie:Grundlagen| ]]<br />
[[Kategorie:Listen]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Projekt_VGA_Core_in_VHDL&diff=105669Projekt VGA Core in VHDL2022-11-28T22:55:59Z<p>Engineer: /* Spartan 6 */ altes Bild von 2006</p>
<hr />
<div>''von [[Benutzer:engineer|J.S.]]''<br />
<br />
Ein einfacher VGA-Core in VHDL zur Implementierung in eigene designs zwecks direkter Ausgabe digital repräsentierter Analogsignale oder Erzeugung dynamischer, grafischer Animationen.<br />
<br />
==Motivation==<br />
Oftmals besteht die Notwendigkeit, eine grössere Zahl von sich schnell ändernden Signalen innerhalb eines FPGA-Designs visuell darzustellen, hat aber nicht die Möglichkeit, eine ausreichend schnelle Schnittstelle zu einem übergeordneten System zu implementieren und zu nutzen. Änderungen an FFT-Daten oder Bilddaten oder parallelen Signalwegen mehrerer AD-Eingänge können vom Auge mit wenigstens 10 Bildern je Sekunde erfasst werden - erforderten aber große Datenraten zu einem PC hin sowie und dazu weitere Auswertesoftware. Mit einer direkten Ausgabe auf einem Monitor kann der Aufwand vereinfacht werden sowie Hürden, wie die Latenz bei PCs und die Bandbreite bzw. die limitierte Zahl von Kanälen bei LogicAnalyzern und Oszilloskopen umgangen werden.<br />
<br />
Für die Beobachtung von flächenförmigen Datenanordnungen wie Registerbänken oder sporadischen Fehlern bieten sich Datenfelder mit Markierungen und Farbwerten an, die man als Matrix darstellt. Je nach Auftreten eines Signals klinkt dann das entsprechende Kästchen.<br />
<br />
==Signalerzeugung==<br />
Je nach gewünschter Auflösung des Bildes ist ein bestimmtes Videotiming einzuhalten. Der Core ist vorbereitet für 640x480 sowie 800x600, kann jedoch leicht der Erfordernissen angepasst werden, sofern die Hardware die benötigte Signalbandbreite / Taktfrequenz leisten kann.<br />
=== Tabelle ===<br />
{| class="wikitable"<br />
|-<br />
! Pixeltakt!! 50 MHz!! 75 MHz !! 100 MHz !!108 MHz !! 135!!135 /162!! 148.351!! 148.500 !!154.000 !! 193.250<br />
|-<br />
| Horizontal||800||1024||1280||1280||1280||1600||1920||1920||1920||1920<br />
|-<br />
| Front Porch||56||24||40||48||64||64||88||528||48||136<br />
|-<br />
| Synch||120||136||168||184||192||192||48||44||32||200<br />
|-<br />
| Back Porch||64||144||96||200||192||305||144||148||80||336<br />
|-<br />
| Pixel X||1040||1328||1584||1712||1728||2160||2200||2640||2080||2592<br />
|-<br />
| Pixeltakt||48,1||56,5||63,1||63,1||78,1||75||67,4||56,3||1920||1920<br />
|-<br />
| Vertikal||600||768||1024||1024||1024||1200||1080||1080||1200||1200<br />
|-<br />
| Front Porch||37||3||3||3||3||1||4||4||3||3<br />
|-<br />
| Synch||6||6||3||3||3||3||5||5||6||6<br />
|-<br />
| Back Porch||23||29||26||26||55||46||36||36||26||36<br />
|-<br />
| Pixel Y||666||806||1056||1056||1085||1250||1125||1125||1235||1245<br />
|-<br />
| Frames||72,2||70,1||59,8||59,7||72,0||50 /60||60,1||50,1||59,94||59,9<br />
|}<br />
<br />
=== Links ===<br />
[http://info.electronicwerkstatt.de/bereiche/monitortechnik/vga/Standard-Timing/index.html VGA timing infos]<br />
<br />
[http://www.mythtv.org/wiki/Modeline_Database Database Modelines]<br />
<br />
[http://martin.hinner.info/vga/timing.html VGA Timings]<br />
<br />
== Datenspeicherung ==<br />
=== unbuffered===<br />
Die Daten werden idealerweise zum Zeitpunkt der Entstehung ausgegeben. Damit entfällt eine aufwändige Pufferung oder ein Video-RAM. Damit ist es nötig, die Daten entsprechend vorzuberechnen.<br />
<br />
=== buffered===<br />
Wenn Systemtakt und Horizontal-Frequenz nicht zusammenpassen oder Daten nicht permanent periodisch anfallen, reicht für die Daten ein asynchrones FIFO, das maximal einmalig je Bild beschrieben- und durch den H-Takt ausgelesen wird. Damit lässt sich rechentechnisch die komplette Zeit des Rohbildes für die Datenerzeugung nutzen und eine höhere Komplexität realisieren, bzw das Timing bei kritischen Anwendungen noch einhalten.<br />
<br />
Im einfachsten Fall lässt sich dies für eine Zeile realisieren. Ansonsten braucht es einen Bildspeicher.<br />
<br />
==Ausgabe==<br />
<br />
=== 1-Bit Version ===<br />
Hier erfolgt die Ausgabe digital, also nur mit einem Bit je Farbkanal. Es werden 5 Leitungen benötigt. Damit sind 7 Farben und Schwarz darstellbar. Wie man trotzdem mehr Farben bekommt, wird im Projekt unten dargestellt.<br />
<br />
=== Mehrbit-Version ===<br />
Hier erfolgt die Ausgabe ebenfalls digital, allerdings mit mehreren Bits je Farbkanal. Es werden damit 3 x n + 2 Leitungen benötigt. Zur Anwendung kommt ein [[Widerstandsnetzwerk]] vom Typ R-2R, wie es z.B. auf dem Spartan 3A board von Digilent / Trenz realisiert ist. Die Widerstände bilden in Zusammenwirkung mit den Terminierungswiderständen und der Leitungsimpedanz einen Spannungsteiler.<br />
<br />
=== DAC - Version ===<br />
Hier wird der Farbwert je Kanal an einen Video-[[DAC]] übertragen<br />
<br />
==Applikationsbeispiele==<br />
Nachfolgend befinden sich einige von usern bereitgestellte fertig synthetisierte files zum Laden in den jeweiligen FPGA. Wer das Projekt auf seine Plattform portiert, bitte das file auch einstellen.<br />
<br />
=== Spartan 3E ===<br />
====Board-Beschreibung====<br />
[[Datei:Spartan-3e-starter-kit-video-demo-800x600.jpg|left|thumb|225px|Spartan 3E Kit von Digilent]]<br />
<br />
Der core muss an folgende Eigenheiten des boards angepasst werden:<br />
<br />
Das board läuft mit 50MHz Quarz, besitzt nur einen 1-Bit-Anschluss je VGA-Farbe und wird daher interlaced (s.u.).<br />
<br />
Es werden die 4 Input buttons verwendet, von denen einer als Reset fungiert. Dieser wurde auf den Drehencoder umgemappt.<br />
<br />
Wichtig für das S3E: Die Steuerleitungen für das Flash müssen gfs. programmiert werden. Siehe Projekt.<br />
<br />
Ansonsten wird nichts verwendet. Das Laden geht über das Platform-Flash (embedded JTAG Adapter).<br />
{{Absatz}}<br />
<br />
====Testbildgenerator 800x600 SVGA (J.S.)====<br />
[[Datei:Spartan3e-demo-board-vgademo 800 600.jpg|left|thumb|225px|Modus: SVGA 800×600 @ 50MHz, mit scrollenden und interlacten Farben.<br />
]]<br />
Testbildgenerator für das Spartan 3E-board von digilent:<br />
[[:Datei:Vga test.bit|Vga test.bit]]<br />
<br />
Das Spartan 3E-board wird mit einem 3-Bit Anschluss betrieben, womit eigentlich nur 7 Farben möglich wären. Im Beispieldesign werden jeweils 2 benachbarte Farben im Spektrum multiplext, z.B. Rot und Gelb zu Orange oder Blau und Schwarz zu Dunkelblau. So entstehen etwa 30 verschiedene, nutzbare Farben. Das Multiplexen wird mit einem selbstschwingenden Takt bewerkstelligt, der nicht mit dem H-Takt korrelliert. Genaueres zu dieser Funktion im Projekt oder hier: [http://www.mikrocontroller.net/topic/64358 Farbmultiplexfunktion (Stand 2007)]<br />
<br />
Zusätzlich zu den rotierenden Farben bewegt sich ein Cursor/Ball durchs Bild, um zu zeigen, wie man selektiv Objekte einblenden und dem Raster überlagern kann. In ähnlicher Weise liesse sich ein ruler für ein Oszilloskop oder auch eine Lichtorgel realisieren.<br />
<br />
Das Bild entspricht exakt der Ausgabe der Version im folgenden ISE-Projekt:<br />
[[:Datei:Jsvgademo s3e.zip|Jsvgademo s3e.zip]]<br />
<br />
{{Absatz}}<br />
<br />
==== Oszilloskop mit FFT und Ausgabe in SXGA 1280x1024 (J.S.) ====<br />
[[Datei:Vga-oscilloscope-core-1280-fft-demo-js-s3e1.jpg|left|thumb|225px|Modus: SXGA 1280×1024x60 @ 108MHz, mit den beiden gefilterten Wellenformen und FFT samt Windows der gelben, einmal gefilterten Welle.]]<br />
<br />
Das file [[Datei:Jsoscvgacore1280 s3e.bit]] demonstriert ein Oszilloskop mit 8 verschiedenen Wellenformen, zwei IIR-Filter eine FFT523 und die Echtzeitausgabe entlang von x und y. Es erzeugt nacheinander im Wechsel 8 Wellenformen, filtert diese in 2 Stufen und stellt sie im bekannten 10x8 Raster dar. Die hierfür gewählte Auflösung beträgt gegenüber der VGA-Demo jetzt 1280x1024, da diese einfach in das typische Oszi-Raster mit jeweils 128 Punkten passt. Aufgrund der Echtzeitausgabe wird kein Video-RAM benötigt. Die Wellen werden als Punkte (weiss), sowie Linien (gelb und türkis) dargestellt.<br />
<br />
Die Demo selbsttätig die Filtereingänge (gelb / türkis) über zwei wechselnde Windows auf einen FFT-Core, dessen scan-Bereich und Werteausgabe in der jeweiligen Farbe angezeigt wird. Zudem wird in der neuen Version die gefensterte Welle dargestellt. Das Umschalten erfolgt mit dem Bildzähler. Das Design ist absichtlich auf ein file zusammenkopiert und trennt nur zwischen Signal-Generator und Video-Mixer. Dieser kann entfallen, wenn man keine interlacten Farben haben möchte.<br />
{{Absatz}}<br />
<br />
[[Datei:Vga-oscilloscope-core-1280-fft-demo-js-s3e2.jpg|left|thumb|225px|Die gleiche Ausgabe nun mit einer künstlichen Sinuswelle aus 8 Punkten je Viertelwelle und der einmal gefilterter Welle (gelb) und deren Spektrum.]]<br />
<br />
Leider lässt der begrenzte Platz im S3E keine erweiterten Funktionen wie Datenspeicherung, Zoom, verbreiterte Darstellung der FFT, etc zu. Die Wellensynthesen, Filter und Modulatoren, sowie die FFT mussten in der Zahl und Auflösung reduziert werden. Auch das Maus-Interface und der Zeichengenerator wurden herausgenommen. Damit enthält das Design kaum noch PCB-spezifische Elemente und kann leicht portiert werden. Die FFT ist maximal ausgebaut und per area constraint synthetisiert, um das design erzeugt zu bekommen. Um das Design praktisch zu verwenden, müsste die FFT gekürzt werden. Eigene Module können eingehängt werden, indem man sich auf die bereitgestellten Video-X und Video-Y Koordinaten bezieht und die Latenzen, die bei einer umständlicheren Berechung entstehen, anpasst. Die Latenz beträgt derzeit je nach Implementierung 3-4 Takte.<br />
<br />
Wichtig: Das Design nutzt zwei verkette DCMs, um auf die "krumme" Frequenz von 108MHz statt ehemals 135MHz zu kommen, die für die Darstellung nötig ist. Damit sinkt die Wiederholfrequenz von 75Hz auf 60Hz, aber mit der geringeren Video-Taktfrequenz ist das Design bei dem S3E erheblich einfacher zu fitten, da entspannter. Bei beiden Versionen war das Bild gestochen scharf und die Bewegung der Wellen sehr plastisch. Getestet wurde mit 2 TFT-Monitoren, die beide allerdings etwas brauchen, bis sie sich auf das Bild zentriert haben. Teilweise kommt es zum Ruckeln, wenn die Monitore einen Auto-Zoomm nutzen und ständig kalibieren. Der fette weisse Rahmen hilft, das zu unterdrücken. Manchmal klappt das Farbmultiplex nicht richtig - scheint an der Art zu liegen, wie die TFTs die Analogdaten scannen und interpolieren. In eigenen Designs daher entweder weglassen und nur die Vollfarben verwenden oder einen 4-Bit Ausgang für die Farben nutzen.<br />
<br />
{{Absatz}}<br />
<br />
==== Logic Analyzer ====<br />
<br />
==== Spektrum Analyzer ====<br />
<br />
=== Spartan 3A ===<br />
<small>board ist defekt - kann nicht getestet werden. Wer ein solche board hat, bitte die Version laden, anpassen und wieder hochladen und den Satz entfernen.</small><br />
<br />
=== Spartan 6 ===<br />
==== Digilent Atlys Spartan 6====<br />
<br />
<gallery caption="Vergleich: Mit und ohne Dither" widths="300" heights="200" perrow=2><br />
Datei:Fpga-gui-drum-synthesizer1.jpg|;Drum Computer GUI:Eingebaute GUI für einen Schlagzeugsynthesizer (siehe Projekt Drumcomputer in VHDL) mit Keyboard, Mouse-CTRL, virtuellen Reglern für die Settings und Parameter sowie Volumen-Anzeigen für Kompressoren und Master-Volume. Realisiert mit DVI-Ausgabekarte mit bis zu 1600x1200, hier 800x600.<br />
Datei:Wellensynthese_vga_screen_1280x1024.jpg|;Wellenformen mit VGA-Ausgabe: Erzeugt mit Wavetable-Synthese, verwendet wird ein eingebautes virtuelles Oszilloskop, das bis zu 8 Wellen gleichzeitig darstellen und mischen kann.<br />
</gallery><br />
<br />
{{Absatz}}<br />
<br />
==== Trenz TE630 mit S6LX75 ====<br />
<br />
[[Datei:Trenz-spartan6lx75-modul-mit-traeger.jpg|left|thumb|225px|Trenz TE630 mit Xilinx Spartan 6LX75 auf Trägerboard TE0304]]<br />
[[Datei:Jsvgacore_testdesign_spartan6.jpg|left|thumb|225px|Modus: 800×600x72 @ 50MHz]]<br />
<br />
Das plugin-Modul von Trenz-Elektronik, hier montiert auf einem passenden Trägerboard. Daten des Systems:<br />
* S6 LX75 FPGA (mit Webedition programmierbar)<br />
* DDR3-RAM 1 GB<br />
* Serial Male/FeMale<br />
* VGA 5Bit/Farbe RGB<br />
* USB, PS/2 Maus + Tastatur<br />
* Compact Flash-Interface<br />
* JTAG, Spannungsversorgung<br />
<br />
Komplettes FPGA-Projekt für Xilinx ISE 14.7, angepasst für TE0304 + TE630file mit dem integrierten 100 MHZ-Oszillator fuer 50MHz-VGA-timing 800x600x72 auf CRT-Monitor. Zur eigenen Verwendung muss gfs das timing etwas angepasst werden. Bei anderen Applikationen gfs. die Inverter aus der Schaltung nehmen, wegen Polarität der Synch-Signale. Datei zur freien Verwendung: [[Datei:Jsvgacore_s6.zip]]<br />
<br />
Link zu einer Visualisierung: https://youtu.be/H3eBzMw-HfI<br />
{{Absatz}}<br />
<br />
=== Altera Cyclone IV DE-115 (Terasic)===<br />
Das Cyclone -IV board von Terasic ist ein ideales board mit allen möglichen Komponenten für viele professionelle Anwendungen. Es wird zusammen mit einem extension board verwendet, das ADCs und DACs sowie weitere Audio-In-Outs zur Verfügung stellt. Es ist vollständig mit der freien Webedition programmierbar und kommt zudem mit einer System-Builder-Software, die den einfachen Aufbau von Systemen gestattet. Ein Video-DAC mit hoher Analoggüte ist auch integriert. Wenn das nicht reicht, kann über die SAMTEC-Stecker z.B. ein third party DVI-Video-Board angeschlossen werden.<br />
<br />
[[Datei:Altera fpga based-oscilloscope-logic analyzer-spectrum analyzer.jpg|left|thumb|225px|Altera Cyclone 4 Plattform mit IO-Extension von Terasic]]<br />
MainBoard:<br />
* 115.000 LEs, 180 Multiplier DSPs, 2x GB Ethernet, 1x USB Host + 2x USB + 1 Seriell, 1x VideoInput, 1 Stereo LineIn, 1 Stereo MicIn, 1 Stereo Stereo LineOut / Stereo HeadPhone, 16 Schalter, 4 Taster<br />
<br />
Extension Board:<br />
* 2x ADC 150 MHz 14 Bit, 2x DAC 250 MHz 14 Bit<br />
* Stereo LineIn, Stereo MicIn, Stereo Stereo LineOut, Stereo HeadPhone<br />
<br />
{{Absatz}}<br />
<br />
[[Datei:Analog vga fpga colour example.jpg|left|thumb|225px|Modus: 1920×1080x30]]<br />
Detaillierte Farbausgabe mit 4-Bit-VGA für ein Musikprojekt zur schnellen Darstellung der Parameter eines MIDI-Controllers und der resultierenden Wellenamplituden in Echtzeit mit zusätzlicher Darstellung des Controllerwertes über virtuelle digitale 7-Segment-Anzeigen und Zeichensatzgenerator im RAM.<br />
{{Absatz}}<br />
<br />
==== Wellenformgenerator nach LaPlace ====<br />
[[Datei:Fpga-sin-based-function-generator-circle.jpg|left|thumb|225px|LaPlace-Generator mit 4 Wellen]]<br />
Bildung eines Kreises durch sinusförmige Grundwelle und einigen sinusförmigen Oberwellen nach LaPlace/Fourier. Das System produziert bis zu 20MHz + 7 Oberwellen bis zu 160MHz. In einer Anwendung zur Klangsynthese (additive Synthese) werden ab 5Hz Oberwellen bis 50kHz erzeugt. Siehe [http://www.mikrocontroller.net/articles/Digitaler_LaPlace-Funktionsgenerator_im_FPGA Ein Funktionsgenerator mit FPGA]<br />
{{Absatz}}<br />
<br />
==== Eingebautes virtuelles Oszilloskop ====<br />
[[Datei:4ch fpga built in oscilloscope.jpg|left|thumb|225px|Eingebautes virtuelles Oszilloskop im FPGA]]<br />
Um Messsignale in einem FPGA in Echtzeit beobachten zu können, wird ein virtuelles Oszilloskop eingebaut und dessen optischer output auf einem VGA-Monitor dargestellt. Hier kommen 4 Kanäle in klassischer Darstellung zu Anwendung. Ausgabe als 1920x1080 mit 60Hz. Es werden insgesamt 3x4+2 Pins benötigt. Bei kurzen Kabeln ist kein Treiber nötig. Die Signale werden direkt aus dem FPGA getrieben.<br />
{{Absatz}}<br />
<br />
==Downloads==<br />
<br />
* VGA-Oszilloskop-Demo mit 1280x1024x60 für Digilent Spartan 3E board. (Xilinx ISE 14.1 - Projekt) [[Datei:Uc-js-vga-osc.zip]]<br />
<br />
==Bezugsquellen==<br />
* Digilent Spartan 3E board (Deutschland): http://www.trenz-electronic.de<br />
* AVNET / SILICA (Deutschland) : http://silica.avnet.com<br />
* Terasic Altera Cyclone IV (Taiwan) : www.terasic.com.tw<br />
<br />
==Links zu Anwendungen==<br />
* [https://www.youtube.com/watch?v=GxFuGZ4ZvsI Audio-Monitoring Applikation] Video-Core in Aktion mit mehreren Objekten<br />
<br />
==Relevante Beiträge==<br />
* [http://www.mikrocontroller.net/topic/405577 Rechenungenauigkeiten im FPGA als Video]<br />
* [http://www.mikrocontroller.net/topic/64358 Farben Multiplexen bei Ausgabe]<br />
* [http://www.mikrocontroller.net/topic/102972 VGA Signale mit colour map]<br />
* [http://www.mikrocontroller.net/topic/104526 VGA-Bildschirm mit XILINX-Board ansteuern]<br />
* [http://www.mikrocontroller.net/topic/196597 FPGA-basierter LA / Oszi mit VGA-Ausgang]<br />
* [http://www.mikrocontroller.net/topic/83741 Möglichkeit unterschiedliche VGA-Signale auszugeben]<br />
* [http://www.mikrocontroller.net/topic/192183 Digital-Vorsatz für Analog-Scope]<br />
* [http://www.mikrocontroller.net/topic/106696 VSync und HSync bei VGA]<br />
* [http://www.mikrocontroller.net/topic/28098 VGA Aufbau mit AVR]<br />
* [http://www.mikrocontroller.net/topic/25108 VGA Grafikkarte mit AVR und 8MB SDRAM]<br />
* [http://www.mikrocontroller.net/topic/93142 VGA-Signal digitalisieren]<br />
* [http://www.mikrocontroller.net/topic/58207#451622 FBAS in VGA Wandler]<br />
* [http://www.mikrocontroller.net/topic/393118 VGA in VHDL - Simulieren]<br />
* [http://www.mikrocontroller.net/topic/29300 VGA-Grafikkarte an uC]<br />
* [http://www.mikrocontroller.net/topic/399554 Zynq VGA - Blockram füllen]<br />
* [http://www.mikrocontroller.net/topic/122258 digital VGA 6bit -> VGA?]<br />
* [http://www.mikrocontroller.net/topic/81283 VGA Monitor Hardware emulation]<br />
* [http://www.mikrocontroller.net/topic/376105 EDID erstellen / programmieren (Windows 7)]<br />
<br />
==Projekte==<br />
* [http://www.mikrocontroller.net/topic/77033 FPGA Oszi mit VGA Ausgang]<br />
* [http://www.mikrocontroller.net/topic/234702 Oszilloskop Vorstufe]<br />
* [https://www.mikrocontroller.net/topic/25091 VGA Testbildgenerator mit ATMEGA 8]<br />
<br />
[[Kategorie:FPGA-Projekte]]<br />
[[Kategorie:Video]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Datei:Wellensynthese_vga_screen_1280x1024.jpg&diff=105668Datei:Wellensynthese vga screen 1280x1024.jpg2022-11-28T22:41:09Z<p>Engineer: Wellenformen auf einem FPGA-VGA-Monitor - 1280x1024 Auflösung</p>
<hr />
<div>== Beschreibung ==<br />
Wellenformen auf einem FPGA-VGA-Monitor - 1280x1024 Auflösung<br />
== Lizenz ==<br />
{{Bild-frei}}</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Widerstandsnetzwerk&diff=105553Widerstandsnetzwerk2022-11-02T21:40:58Z<p>Engineer: Artikel</p>
<hr />
<div>Ein '''Widerstandsnetzwerk''' ist eine kompakte Anordnung mehrerer [[Widerstand|Widerstände]] desselben Wertes. Sie werden eingesetzt, um die Bestückung zu vereinfachen, Platz zu sparen und Funktionen zu realisieren, wo es auf eng tolerierte Werte ankommt. In Schaltbildern findet sich meist das Kürzel RN für ''resistor network''.<br />
<br />
== Anwendungen ==<br />
=== Abschlusswiderstände===<br />
Bei [[Bus|Bussen]] in Schaltungen mit hohen Datenraten werden oft Abschlusswiderstände gefordert, die sich mit RN platzsparender implementieren lassen. Zudem kommt hier die enge Toleranz der Werte zum Tragen.<br />
<br />
=== R2R-Netzwerk ===<br />
Mit einem R2R-Netzwerk lassen sich einfache [[Spannungsteiler]] aufbauen, die lineare Spannungsstufen liefern. Diese können für einfache [[DA-Wandler]] und [[AD-Wandler]] verwendet werden. Dabei sind enge Toleranzen wichtig.<br />
==== DA-Wandlung ====<br />
Bei R2R-DACs werden Widerstände mit zwei Werten eingesetzt, bei denen einer genau doppelt so groß ist, wie der andere. Die Ausgangsbits legen den Eingang des Netzwerks entweder auf Masse oder die Betriebspannung, wobei jedes Bit genau den richtigen Beitrag liefert.<br />
<br />
==== AD-Wandlung ====<br />
Eine einfache Spannungsüberwachung für Boards wird oft dadurch realisiert, dass eine asymmetrischer Spannungsteiler verwendet wird:<br />
<br />
:U – R1 – RA – RB – RC – R2 – GND<br />
<br />
R1 und R2 sind so zu dimensionieren, dass die Potenziale um RA, RB und RC jeweils im Bereich der Schaltschwelle des digitalen Eingangs liegen. Damit kann eine Art Ampel für einen Spannungsregler erzeugt werden, sofern die Widerstandswerte dafür taugen.<br />
<br />
== Links ==<br />
<br />
* [https://www.mikrocontroller.net/topic/531532#7240183 Linearisierung eines R2R-Netzwerks]<br />
<br />
[[Kategorie:Bauteile]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=DDS&diff=105366DDS2022-08-13T19:39:52Z<p>Engineer: /* Beiträge */</p>
<hr />
<div>Die '''D'''irekte '''D'''igitale '''S'''ynthese (engl. Direct Digital Synthesis) ist ein Verfahren zur Erzeugung einer Wechselspannung mit definierter Kurvenform mittels digitaler Logik, wie Addierer, [[Speicher#OTP-ROM|ROM]] und [[DA-Wandler]]. Sie ist eine der wichtigsten Funktionen der digitalen Signalverarbeitung und kann in Microcontrollern in Software oder digitalen Logikbausteinen in Hardware aufgebaut sowie als fertiger Chip inklusive [[DA-Wandler]] erworben werden.<br />
<br />
== Funktionsweise ==<br />
[[bild:dds_basic.png|Grundsätzlicher Aufbau einer DDS]]<br />
<br />
Der Takt für eine DDS wird meist mit einem Quarzoszillator generiert, manchmal auch noch zusätzlich über eine PLL für sehr hohe interne Takte im Chip, dem PLD oder dem Microcontroller. Der Addresszähler, der als Phasenakkumulator arbeitet, wird mit jedem Takt um eine definierte Schrittweite hochgezählt, die die Frequenz mitbestimmt. Der Wert des Akkumulators entspricht der Phase bezogen auf eine volle Schwingung von 0-360° und ist binär von 0 bis 2^M-1 dargestellt. Der Phasenakkumulator hat eine Breite M von typisch 8-48 Bit. Die höchstwertigsten N Bits (N <= M) bilden die Adresse für einen Speicher (Look UpTable), in welchem die Kurvenform abgelegt ist. Die niederwerigen Bits sind die Nachkommastellen, welche Rundungsfehler reduzieren. Sie sind wesentlich für das richtige Arbeiten der DDS. Die Gesamtauflösung des Akkumulators bestimmt letztlich die Auflösung, mit welcher die Frequenz erzeugt werden kann. Die Genauigkeit bestimmt die Taktquelle der DDS, meist ein Quarzoszillator. Die Anzahl N der MSBs des Phasenakkumulators bestimmt wiederum den lokalen Phasenfehler und damit das Phasenrauschen, die Bitbreite K des AD-Wandlers das [[Quantisierung || Quantisierungsrauschen]].<br />
<br />
Die Grundformel der DDS lautet<br><br><br />
<math>f_{out} = \frac{FTW}{2^M} \cdot f_{clk}</math><br />
<br />
FTW: frequency tuning word, Einstellwert für die Frequenz im Bereich <math>0-2^{M-1}</math><br><br />
<br />
Der Ausgangswert der Tabelle gelangt auf einen [[DA-Wandler]], dem meistens ein analoges Filter nachgeschaltet werden muss, um die systematischen Störsignale des DA-Wandlers ("Treppenstufen" Oberschwingungen) herauszufiltern.<br />
<br />
Die LookUpTable kann fest (ROM), programmierbar ([[RAM]], [[FY6900 | Arbitrary Waveform Generator]]) oder auch in Echtzeit berecht sein. Die Kurvenform entspricht aus praktischen Gründen fast immer einer [[Digitale Sinusfunktion|Sinusfunktion]]. Für den Fall anderer Wellenformen ist zu beachten, dass diese Oberwellen beinhalten, auf die ein nachgeschaltetes Filter Rücksicht nehmen muss. Auch ergeben sich dann niedrigere, maximal erzielbare Frequenzen, die noch sinnvoll dargestellt werden können. In der Regel kommt es bezüglich dieser Frequenzen zu Phasensprüngen (Jitter).<br />
<br />
Die maximal erzielbare Ausgangsfrequenz ist immer kleiner gleich der halben Taktfrequenz, was durch das [[Abtasttheorem]] von Nyquist/Shannon erklärt wird. Real sind teilweise nur deutlich niedrigere Frequenzen gut nutzbar, da Frequenzen in der Nähe der Abtastfrequenz sehr steilflankige Filter benötigen, die sich praktisch nur sehr aufwändig realisieren lassen. <br />
<br />
Die Qualität der DDS hängt damit massgeblich von der des analogen Filters ab. Mit einem [[Filter]] hoher Ordnung lassen sich sehr gute Sinussignale erzeugen. Die Nichtlinearitäten des Filters im Bezug auf die Amplitude sind durch Variation des digitalen Ausgangssignals (Amplitude) kompensierbar. Gerade im Bereich der Grenzfrequenz kann damit der Frequenzgang gut linearisiert werden.<br />
<br />
== Eigenschaften ==<br />
<br />
*vollständig digitaler Aufbau, damit keine Probleme mit analogen Parametertoleranzen und Temperaturdrift<br />
*Extrem grosse Frequenzauflösung, theoretisch unbegrenzt, praktisch bis in den Bereich von Milli- un MikroHertz<br />
*phasenkontinuierliche Phasen- und Frequenzmodulation mit praktisch Null Einschwingzeit möglich<br />
*mehrere DDS-ICs lassen sich mit digitaler Genauigkeit und Reproduzierbarkeit synchronisieren<br />
<br />
Mit Mikroprozessoren und DSPs sind je nach Güteanforderungen Ausgangsfrequenzen bis typisch 50MHz, mit FPGAs bis 100MHz und speziellen ASICs bis zu 1 GHz möglich<br />
<br />
== Anwendungen ==<br />
<br />
Verwendung findet das DDS-Prinzip in vielen Bereichen:<br />
* Niederfrequenz (NF), als Signal und Testgenerator, meist mit möglichst gutem Sinus<br />
* Audiobereich, höchste Anforderungen an Wellenform<br />
* Hochfrequenz (HF), hohe Frequenzanforderung<br />
* Funk-Bereich (Taktfrequenzen bis 4 GHz und mehr) z.B. SDR<br />
<br />
Bei geringen Ausgangsfrequenzen < 15kHz kann für einfache Audioanwendungen noch mit Mikrocontrollern gerarbeitet werden. Konkret wurden mit einem AVR@16MHz bei weniger als 10% Prozessorlast eine Schleife mit 150kHz erzeugt und passend gefiltert, wodurch ein Sinus mit <0,06% Fehler erzielbar war.<br />
<br />
Bei anspruchsvolleren Audioanwendungen mit tauglicher Musikalität sind Abtastraten von wenigstens 100 x fg, konkret 9,6 MHz nötig, um den Sinus gut genug abzubilden und einen [[Glossar|SFDR]] von besser als 60dB bis in die Höhen zu erreichen. Für 100dB Güte (z.B. Audiomessfunktionen) sind 10.000 x fg nötig. Konkret wird der DA-Wandler mit 20kHz x 10k = 200MHz angesteuert.<br />
<br />
== Bauteile und Hersteller ==<br />
<br />
Bekanntester Hersteller ist [http://www.analog.com Analog Devices].<br />
<br />
Bekannte ICs:<br />
*AD9833 (25MHz)<br />
*AD9834 (75MHz)<br />
*AD9835 (50MHz)<br />
*AD9851 (180MHz)<br />
*AD9854 (300MHz)<br />
*AD9951 (400MHz)<br />
<br />
Die moderneren ICs beinhalten weitere Funktionen wie automatische, programmierbare Amplitudenmodulation (AM), Phasenmodulation (PM), Frequency Shift Keying (FSK) und ähnliches mehr. Viele ICs sind mehrkanalig und liefern einen Sinus- und Cosinusausgang gleichzeitig.<br />
<br />
== Siehe auch==<br />
=== Artikel===<br />
<br />
*[[Digitaler Funktionsgenerator]]<br />
*[[DDS basierter Funktionsgenerator mit AD5930]]<br />
*[[200MHz DDS-Generator]]<br />
*[[FPGA Lab]]<br />
*[[Digitale Sinusfunktion]]<br />
*[[DDS-Signalgenerator_per_USB]]<br />
*[[AVR - Die genaue Sekunde / RTC]]<br />
<br />
=== Beiträge===<br />
*[http://www.mikrocontroller.net/topic/229792#2318989 Universell programmierbarer Funktionsgenerator]<br />
*[http://www.mikrocontroller.net/forum/read-1-350237.html HF-Meßplatz]: <br />
*[http://www.mikrocontroller.net/forum/read-1-403708.html Einfache Schaltung: 6 Drehschalter - PIC16F84 - AD9833]<br />
* [http://www.mikrocontroller.net/topic/84498 Berechnung des Frequency Tuning Words]<br />
* [http://www.mikrocontroller.net/topic/84498#710690 Praktische Umsetzung]<br />
* [http://www.mikrocontroller.net/topic/250604 DDS Sinuserzeugung]<br />
* [http://www.mikrocontroller.net/topic/250604?goto=2573345 verbesserte DDS], basierend auf Jesper DDS, mit verschiedenen Modulationsarten.<br />
* [http://www.mikrocontroller.net/topic/goto_post/3115387 Signalgenerator, Grenzen eines Atmega8]<br />
* [http://www.mikrocontroller.net/topic/goto_post/3098563 SPWM auf Atmega8, bitte um Feedback hinsichtlich Optimierung]<br />
* [http://www.mikrocontroller.net/topic/178301 DDS mit AM Modulation]<br />
* [http://www.mikrocontroller.net/topic/344325 Grundlagen]<br />
* [http://www.mikrocontroller.net/topic/225329 Sinus mit DDS]<br />
* [http://www.mikrocontroller.net/topic/343501 Nicht-Sinus DDS]<br />
* [http://www.mikrocontroller.net/topic/189657 Sinustabelle mit 2 Geschwindigkeiten]<br />
* [https://www.mikrocontroller.net/topic/105800#929062 DDS AD9851 Synchronisierung]<br />
* [https://www.mikrocontroller.net/topic/473916#5834928 Zwei 45kHz-Signale, 90° Phasenverschoben erzeugen]<br />
* [https://www.mikrocontroller.net/topic/511883#6569666 Fraktionaler Teiler, 14:1 bis 524000:1]<br />
* [https://www.mikrocontroller.net/topic/540517#7141031 DDS im FPGA]<br />
<br />
===Suchen===<br />
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=sinus* Suche nach *sinus* im Forum]<br />
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=tonerzeug* Suche nach tonerzeug* im Forum]<br />
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=dds* Suche nach dds* im Forum]<br />
* [http://www.mikrocontroller.net/forum/list-1-1.html?filter=synthe* Suche nach synthe* im Forum]<br />
<br />
=Weblinks=<br />
<br />
*[http://www.seattlerobotics.org/encoder/200205/ddsfgen.htm DDS mit ML2037]<br />
*[http://www.dg4rbf.de/ DDS-Signalgenerator], bis 500 MHz (1200MHz Takt) -> SYN500, SYN500/2<br />
*[http://www.mydarc.de/dg8saq/AVR-USB/ AD9850] DDS-board (0 to 40 MHz), ATtiny2313 basiertes USB Interface<br />
*[http://www.scienceprog.com/avr-dds-signal-generator-v20/ AVR DDS signal generator V2.0], DDS 0-65534 Hz; Rechtecksignal 1-8 MHz<br />
* [http://www.myplace.nu/avr/minidds/index.htm MiniDDS], Jesper's AVR pages, DDS using an AVR (DTMF mit uC)<br />
* [https://www.microchip.com//wwwAppNotes/AppNotes.aspx?appnote=en591264 AVR314] DTMF Generator, Microchip Application Note<br />
* [http://www.analog.com/static/imported-files/tutorials/450968421DDS_Tutorial_rev12-2-99.pdf DDS Tutorial], Theorie und alle Vor-und Nachteile (Phasenrauschen etc); Analog Devices<br />
<br />
[[Kategorie:Signalgeneratoren]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Filter&diff=105297Filter2022-07-06T21:54:29Z<p>Engineer: /* Anwendungen */</p>
<hr />
<div>== Einführung ==<br />
<br />
Als Filter bezeichnet man in der Elektronik eine Schaltung, die die Frequenzanteile eines Signals unterschiedlich stark abschwächt oder betont. Im Bereich der Signalverarbeitung mit Software werden Filter mathematisch nachgebildet.<br />
<br />
=== Tiefpass ===<br />
<br />
Ein TP filtert Frequenzen oberhalb der Grenzfrequenz weg. Der einfachste passive (analoge) Tiefpass besteht aus einer R/C-Kombination.<br />
<br />
[[Bild:LP.bmp|thumb|right|Die Übertragungskennlinie eines Tiefpasses mit<br />
<math>f_g</math> = 1.59kHz]]<br />
<br />
VCC ___<br />
o-------|___|----+------o<br />
|<br />
|<br />
---<br />
---<br />
|<br />
|<br />
o----------------+------o<br />
GND<br />
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)<br />
<br />
<br />
==== Grenzfrequenz ====<br />
<br />
<math>f_g = \frac{1}{2 \pi \cdot R \cdot C}</math><br />
<br />
<br />
Bei der Grenzfrequenz <math>f_g</math> besteht zwischen Eingangssignal und Ausgangssignal eine Phasenverschiebung von 45&deg;.<br />
Ausserdem ist die Ausgangsspannung zur Eingangspannung um 3dB abgeschwächt.<br />
<br />
Der einfachste digitale Tiefpass ist ein rückgekoppelter Akkumulator vom Typ Y(t+1) = Y(t)*(1-k) + I*k, wobei I der Inputwert, k der Dämpfungswert und Y der Ausgangswert sind.<br />
<br />
=== Hochpass ===<br />
<br />
Ein HP filtert Frequenzen unterhalb seiner Grenzfrequenz weg, d.h. er lässt Frequenzen oberhalb passieren. Analog zum Tiefpass, kann auch hier eine einfache passiver Variante mit einem RC-Glied realisiert werden:<br />
<br />
VCC ||<br />
o--------||------+------o<br />
|| |<br />
.-.<br />
| |<br />
| |<br />
'-'<br />
|<br />
o----------------+------o<br />
GND<br />
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)<br />
<br />
=== Bandpass ===<br />
<br />
Ein BP lässt sich als Kombination von HP und TP auffassen. Er lässt Frequenzen zwischen zwei Grenzwerten durch.<br />
<br />
=== Notch-Filter ===<br />
Das Notch-Filter nimmt einen definierten, sehr schmalbandigen Frequenzbereich aus dem Spektrum des Eingangssignals heraus. Sie können als FIR- oder IIR-Filter ausgeführt sein. Eine mögliche Realisation besteht in der Verwendung eines Resonanzfilters oder Kammfilters.<br />
<br />
=== Reso-Filter ===<br />
Ein Resonanzfilter schwingt auf einer bestimmten Frequenz und wird durch das Eingangssignal mehr oder weniger stark angeregt. Frequenzen nahe der Resonanzfrequenz werden besonders betont. Theoretisch wird die Übertragungsfunktion für diese Frequenzen vollständig Null, praktisch wird dies für reale, verlustbehaftete Bauteile aber nicht erreicht. Resonanzfilter sind praktisch immer [[Glossar#I|IIR]]-Filter. Resonanzfilter werden zur Verstärkung oder Abschwächung eines Frequenzbereiches genutzt.<br />
<br />
=== Kamm-Filter ===<br />
Durch zeitversetze gegenphasige Überlagerung eines Eingangssignals mit einer Kopie entsteht ein Kammfilter, bei dem sich alle die Frequenzen auslöschen, bei denen die Periodendauer im Bereich der Verzögerung liegt.<br />
<br />
== Realisierung ==<br />
<br />
=== Analog ===<br />
<br />
Analoge Filter werden aus elektronischen oder mechanischen Bauteilen aufgebaut. In der Elektronik dienen sie der analogen Signalbearbeitung, in der Mechanik der Beeinflussung von Schwingungen. Beispielsweise werden durch Verkettung von schwingenden Feder-Masse-Systemen akustische Dämpfer ausgebildet.<br />
<br />
Analoge Filter haben bis auf eine systembedingte Anstiegszeit keine Reaktionsverzögerung bzw Latenz.<br />
<br />
=== Digital ===<br />
Hier unterscheiden wir im Wesentlichen zwischen IIR- und FIR-Filtern. Der Algorithmus und der Rechenaufwand ist - wie die Effizienz - bei beiden Formen ist sehr verschieden. Speziell beim IIR muss man aufpassen, dass die Filterstufen nicht übersteuern, da IIR-Filter einen Energiespeicher besitzen und damit grundsätzlich instabil sein können.<br />
<br />
Digitale Filter haben gegenüber analogen Filtern neben einer diskreten Anstiegszeit mitunter eine rechenzeitbedingte Latenz, d.h. sie geben eine Signaländerung die am Eingang anliegt, nicht sofort an den Ausgang weiter.<br />
<br />
==== Aufbau der Digitalfilter ====<br />
Ein digitales Filter besteht allgemein aus einem Speicher, in den nacheinander die einzelnen Daten eines Datenstromes hineingeladen- und bedarfsweise mit Koeffizienten multipliziert werden. Die Summe über einen definierten Bereich, der Zahl der sog. Taps, ist der Filterwert, der gfs. noch durch die Zahl der Taps oder den maximalen Wert, der sich aus der Addition ergeben kann, dividiert wird. Die Zahl der Taps ist maßgeblich für die Güte und den Frequenzgang des Filters.<br />
<br />
Die Filterkoeffizienten rühren aus der Überlagerung mit Schwingungen genau der Frequenzen, die man selektieren möchte. Im einfachsten Fall multipliziert man einen eingehenden Datenstrom mit einer COS-Schwingung (im komplexen Fall auch zusätzlich mit der Sinus-Schwingung) und erhält eine Resonanz: Frequenzen im Datenstrom, die genau der Filterfrequenz entsprechen, werden vollständig durchgelassen. Frequenzen links und rechts davon mit zunehmender Abweichung der Filterfrequenz immer schlechter. Durch Überlagerung mehrerer solcher Frequenzen erhält man eine Addition der COS-Funktionen und immer mehr Frequenzen werden durch das Filter durchgelassen. Mathematisch kann man dies allgemein formulieren und z.B. für alle Frequenzen abwärts gegen Null integrieren, wodurch man einen Tiefpass erhält.<br />
<br />
Die Filterkoeffizienten sind selbst überlagerbar, d.h. wenn man von einem Koeffizientensatz eines Tiefpasses, der auf 100kHz ausgelegt wurde, einen TP-Koeffizientensatz, welcher auf 1kHz ausgelegt wurde, abzieht, erhält man automatisch ein Bandpassfilter 1kHz-100kHz.<br />
<br />
==== Beispiel ====<br />
<br />
Zuerst berechnen wir die Filterkoeffizienten mithilfe folgender Daten:<br />
<br />
# Filterart<br />
# Ordnung<br />
# Sample-Frequenz<br />
# Grenzfrequenz.<br />
<br />
Für die "analogen Koeffizienten" findet man z.&nbsp;B. im Tietze-Schenk Tabellen (nach Art und Ordnung sortiert). Diese rechnet man in "digitale Koeffizienten" um (Verhältnis Sample-Frequenz / Grenzfrequenz geht mit ein). Die Eingangsdaten werden mit diesen Koeffizienten im eigentlichen Filteralgorithmus verarbeitet.<br />
<br />
Gleich mal ein Beispiel: krit.Filter, 2.Ordnung, Samplefreq 100Hz, Grenzfreq 2Hz (Verhältnis 50:1)<br />
<pre><br />
float afc[] = {<br />
/* analoge Filterkoeff. Art Ordnung */<br />
1.287188506, 0.414213562, 0.0, /* Krit. 2. */<br />
0.869958884, 0.189207115, 0.0, /* Krit. 4. */<br />
0.699891558, 0.122462048, 0.0, /* Krit. 6. */<br />
0.601690062, 0.090507733, 0.0, /* Krit. 6. */<br />
1.3617, 0.6180, 0.0, /* Bessel 2. */<br />
1.3397, 0.4889, 0.7743, 0.3890, 0.0, /* Bessel 4. */<br />
1.2217, 0.3887, 0.9686, 0.3505, 0.5131, 0.2756, 0.0, /* Bessel 6. */<br />
0.0<br />
};<br />
<br />
Ergebnis:<br />
<br />
AFC: A0= 0.870000 A1= 0.189200<br />
DFC: C1=-1.494553 C0= 0.558423 D0= 0.015967 D1= 0.031934 D2= 0.015967<br />
(das sind die gesuchten fünf Werte)<br />
<br />
DFC: 0x5fa7 0x8ef4 0x0416 0x82d 0x0416 (skaliert mit -16384 bzw. +65536)<br />
</pre><br />
<br />
Für höhere Ordnungen speisen wir das Ergebnis wiederholt (Ordnung / 2 mal) durch den Filter, allerdings (außer beim krit. Filter) jede Stufe mit anderen Koeffizienten.<br />
<br />
==== Fensterung ====<br />
Da die einkommenden Daten nicht immer ganzzahlig in die Tap-Zahl sowie die einzelnen selekttierten Frequenzen passen, ergeben sich Verzerrungen, die man lindern kann, wenn man den Datenstrom mit einer [[Fensterfunktion]] weich ein- und aublendet. Beispiele dafür sind die COS-basierten Funktionen "Hamming", "Blackman-Harris und "von Hann", das oft fälschlich als "Hanning" bezeichnet wird, sowie die weithin gebräuchlichen unterschiedlichen Versionen des Kaiser-Fensters, das auf Besselfunktionen beruht.<br />
<br />
Ihnen allen gemein ist, dass die verwendete Funktion zum Rand hin abfällt, d.h. ein eingehender Datenstrom sich langsam in die Gesamtrechnung "hineinschleicht" ohne größere Sprünge zu bewirken. Dieser Vorgang stellt einen Kompromiss zwischen zufälliger = nicht kontrollierbarer und gezielten = kontrollierbarer Datenverfälschung dar und ist Gegenstand der jeweiligen Optimierung innerhalb der konkreten Aufgabenstellung.<br />
<br />
=== geeignete Literatur ===<br />
<br />
<br />
[http://www.digitalfilter.com www.digitalfilter.com]<br />
<br />
Dough Coulter: Digital Audio Processing<br />
<br />
Tietze / Schenk: Schaltungstechnik<br />
<br />
Fortsetzung / Erweiterung folgt...<br />
<br />
== Links ==<br />
<br />
* [https://www.mikrocontroller.net/topic/539473#7118963 Dezimation und Halbbandfilterung]<br />
* [https://www.mikrocontroller.net/articles/Sinusgenerator_mit_IIR-Filter Sinusgenerator mit IIR-Filter]<br />
* [https://www.mikrocontroller.net/articles/Klangerzeugung Klangerzeugung mit IIR-Filter]<br />
<br />
== Anwendungen ==<br />
<br />
* Entfernen von Störsignalen aus einem Nutzsignal (z.&nbsp;B. bei einem Funkempfänger)<br />
* Unterdrückung eines Wechselpannungsanteils<br />
* Anti-Aliasing -> siehe [[Abtasttheorem]]<br />
* Auftrennung in unterschiedliche Bänder<br />
<br />
[[Kategorie:Grundlagen]]<br />
[[Kategorie:Datenübertragung]]<br />
[[Kategorie:Signalverarbeitung]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Filter&diff=105296Filter2022-07-06T21:47:37Z<p>Engineer: /* Aufbau der Digitalfilter */</p>
<hr />
<div>== Einführung ==<br />
<br />
Als Filter bezeichnet man in der Elektronik eine Schaltung, die die Frequenzanteile eines Signals unterschiedlich stark abschwächt oder betont. Im Bereich der Signalverarbeitung mit Software werden Filter mathematisch nachgebildet.<br />
<br />
=== Tiefpass ===<br />
<br />
Ein TP filtert Frequenzen oberhalb der Grenzfrequenz weg. Der einfachste passive (analoge) Tiefpass besteht aus einer R/C-Kombination.<br />
<br />
[[Bild:LP.bmp|thumb|right|Die Übertragungskennlinie eines Tiefpasses mit<br />
<math>f_g</math> = 1.59kHz]]<br />
<br />
VCC ___<br />
o-------|___|----+------o<br />
|<br />
|<br />
---<br />
---<br />
|<br />
|<br />
o----------------+------o<br />
GND<br />
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)<br />
<br />
<br />
==== Grenzfrequenz ====<br />
<br />
<math>f_g = \frac{1}{2 \pi \cdot R \cdot C}</math><br />
<br />
<br />
Bei der Grenzfrequenz <math>f_g</math> besteht zwischen Eingangssignal und Ausgangssignal eine Phasenverschiebung von 45&deg;.<br />
Ausserdem ist die Ausgangsspannung zur Eingangspannung um 3dB abgeschwächt.<br />
<br />
Der einfachste digitale Tiefpass ist ein rückgekoppelter Akkumulator vom Typ Y(t+1) = Y(t)*(1-k) + I*k, wobei I der Inputwert, k der Dämpfungswert und Y der Ausgangswert sind.<br />
<br />
=== Hochpass ===<br />
<br />
Ein HP filtert Frequenzen unterhalb seiner Grenzfrequenz weg, d.h. er lässt Frequenzen oberhalb passieren. Analog zum Tiefpass, kann auch hier eine einfache passiver Variante mit einem RC-Glied realisiert werden:<br />
<br />
VCC ||<br />
o--------||------+------o<br />
|| |<br />
.-.<br />
| |<br />
| |<br />
'-'<br />
|<br />
o----------------+------o<br />
GND<br />
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)<br />
<br />
=== Bandpass ===<br />
<br />
Ein BP lässt sich als Kombination von HP und TP auffassen. Er lässt Frequenzen zwischen zwei Grenzwerten durch.<br />
<br />
=== Notch-Filter ===<br />
Das Notch-Filter nimmt einen definierten, sehr schmalbandigen Frequenzbereich aus dem Spektrum des Eingangssignals heraus. Sie können als FIR- oder IIR-Filter ausgeführt sein. Eine mögliche Realisation besteht in der Verwendung eines Resonanzfilters oder Kammfilters.<br />
<br />
=== Reso-Filter ===<br />
Ein Resonanzfilter schwingt auf einer bestimmten Frequenz und wird durch das Eingangssignal mehr oder weniger stark angeregt. Frequenzen nahe der Resonanzfrequenz werden besonders betont. Theoretisch wird die Übertragungsfunktion für diese Frequenzen vollständig Null, praktisch wird dies für reale, verlustbehaftete Bauteile aber nicht erreicht. Resonanzfilter sind praktisch immer [[Glossar#I|IIR]]-Filter. Resonanzfilter werden zur Verstärkung oder Abschwächung eines Frequenzbereiches genutzt.<br />
<br />
=== Kamm-Filter ===<br />
Durch zeitversetze gegenphasige Überlagerung eines Eingangssignals mit einer Kopie entsteht ein Kammfilter, bei dem sich alle die Frequenzen auslöschen, bei denen die Periodendauer im Bereich der Verzögerung liegt.<br />
<br />
== Realisierung ==<br />
<br />
=== Analog ===<br />
<br />
Analoge Filter werden aus elektronischen oder mechanischen Bauteilen aufgebaut. In der Elektronik dienen sie der analogen Signalbearbeitung, in der Mechanik der Beeinflussung von Schwingungen. Beispielsweise werden durch Verkettung von schwingenden Feder-Masse-Systemen akustische Dämpfer ausgebildet.<br />
<br />
Analoge Filter haben bis auf eine systembedingte Anstiegszeit keine Reaktionsverzögerung bzw Latenz.<br />
<br />
=== Digital ===<br />
Hier unterscheiden wir im Wesentlichen zwischen IIR- und FIR-Filtern. Der Algorithmus und der Rechenaufwand ist - wie die Effizienz - bei beiden Formen ist sehr verschieden. Speziell beim IIR muss man aufpassen, dass die Filterstufen nicht übersteuern, da IIR-Filter einen Energiespeicher besitzen und damit grundsätzlich instabil sein können.<br />
<br />
Digitale Filter haben gegenüber analogen Filtern neben einer diskreten Anstiegszeit mitunter eine rechenzeitbedingte Latenz, d.h. sie geben eine Signaländerung die am Eingang anliegt, nicht sofort an den Ausgang weiter.<br />
<br />
==== Aufbau der Digitalfilter ====<br />
Ein digitales Filter besteht allgemein aus einem Speicher, in den nacheinander die einzelnen Daten eines Datenstromes hineingeladen- und bedarfsweise mit Koeffizienten multipliziert werden. Die Summe über einen definierten Bereich, der Zahl der sog. Taps, ist der Filterwert, der gfs. noch durch die Zahl der Taps oder den maximalen Wert, der sich aus der Addition ergeben kann, dividiert wird. Die Zahl der Taps ist maßgeblich für die Güte und den Frequenzgang des Filters.<br />
<br />
Die Filterkoeffizienten rühren aus der Überlagerung mit Schwingungen genau der Frequenzen, die man selektieren möchte. Im einfachsten Fall multipliziert man einen eingehenden Datenstrom mit einer COS-Schwingung (im komplexen Fall auch zusätzlich mit der Sinus-Schwingung) und erhält eine Resonanz: Frequenzen im Datenstrom, die genau der Filterfrequenz entsprechen, werden vollständig durchgelassen. Frequenzen links und rechts davon mit zunehmender Abweichung der Filterfrequenz immer schlechter. Durch Überlagerung mehrerer solcher Frequenzen erhält man eine Addition der COS-Funktionen und immer mehr Frequenzen werden durch das Filter durchgelassen. Mathematisch kann man dies allgemein formulieren und z.B. für alle Frequenzen abwärts gegen Null integrieren, wodurch man einen Tiefpass erhält.<br />
<br />
Die Filterkoeffizienten sind selbst überlagerbar, d.h. wenn man von einem Koeffizientensatz eines Tiefpasses, der auf 100kHz ausgelegt wurde, einen TP-Koeffizientensatz, welcher auf 1kHz ausgelegt wurde, abzieht, erhält man automatisch ein Bandpassfilter 1kHz-100kHz.<br />
<br />
==== Beispiel ====<br />
<br />
Zuerst berechnen wir die Filterkoeffizienten mithilfe folgender Daten:<br />
<br />
# Filterart<br />
# Ordnung<br />
# Sample-Frequenz<br />
# Grenzfrequenz.<br />
<br />
Für die "analogen Koeffizienten" findet man z.&nbsp;B. im Tietze-Schenk Tabellen (nach Art und Ordnung sortiert). Diese rechnet man in "digitale Koeffizienten" um (Verhältnis Sample-Frequenz / Grenzfrequenz geht mit ein). Die Eingangsdaten werden mit diesen Koeffizienten im eigentlichen Filteralgorithmus verarbeitet.<br />
<br />
Gleich mal ein Beispiel: krit.Filter, 2.Ordnung, Samplefreq 100Hz, Grenzfreq 2Hz (Verhältnis 50:1)<br />
<pre><br />
float afc[] = {<br />
/* analoge Filterkoeff. Art Ordnung */<br />
1.287188506, 0.414213562, 0.0, /* Krit. 2. */<br />
0.869958884, 0.189207115, 0.0, /* Krit. 4. */<br />
0.699891558, 0.122462048, 0.0, /* Krit. 6. */<br />
0.601690062, 0.090507733, 0.0, /* Krit. 6. */<br />
1.3617, 0.6180, 0.0, /* Bessel 2. */<br />
1.3397, 0.4889, 0.7743, 0.3890, 0.0, /* Bessel 4. */<br />
1.2217, 0.3887, 0.9686, 0.3505, 0.5131, 0.2756, 0.0, /* Bessel 6. */<br />
0.0<br />
};<br />
<br />
Ergebnis:<br />
<br />
AFC: A0= 0.870000 A1= 0.189200<br />
DFC: C1=-1.494553 C0= 0.558423 D0= 0.015967 D1= 0.031934 D2= 0.015967<br />
(das sind die gesuchten fünf Werte)<br />
<br />
DFC: 0x5fa7 0x8ef4 0x0416 0x82d 0x0416 (skaliert mit -16384 bzw. +65536)<br />
</pre><br />
<br />
Für höhere Ordnungen speisen wir das Ergebnis wiederholt (Ordnung / 2 mal) durch den Filter, allerdings (außer beim krit. Filter) jede Stufe mit anderen Koeffizienten.<br />
<br />
==== Fensterung ====<br />
Da die einkommenden Daten nicht immer ganzzahlig in die Tap-Zahl sowie die einzelnen selekttierten Frequenzen passen, ergeben sich Verzerrungen, die man lindern kann, wenn man den Datenstrom mit einer [[Fensterfunktion]] weich ein- und aublendet. Beispiele dafür sind die COS-basierten Funktionen "Hamming", "Blackman-Harris und "von Hann", das oft fälschlich als "Hanning" bezeichnet wird, sowie die weithin gebräuchlichen unterschiedlichen Versionen des Kaiser-Fensters, das auf Besselfunktionen beruht.<br />
<br />
Ihnen allen gemein ist, dass die verwendete Funktion zum Rand hin abfällt, d.h. ein eingehender Datenstrom sich langsam in die Gesamtrechnung "hineinschleicht" ohne größere Sprünge zu bewirken. Dieser Vorgang stellt einen Kompromiss zwischen zufälliger = nicht kontrollierbarer und gezielten = kontrollierbarer Datenverfälschung dar und ist Gegenstand der jeweiligen Optimierung innerhalb der konkreten Aufgabenstellung.<br />
<br />
=== geeignete Literatur ===<br />
<br />
<br />
[http://www.digitalfilter.com www.digitalfilter.com]<br />
<br />
Dough Coulter: Digital Audio Processing<br />
<br />
Tietze / Schenk: Schaltungstechnik<br />
<br />
Fortsetzung / Erweiterung folgt...<br />
<br />
== Anwendungen ==<br />
<br />
* Entfernen von Störsignalen aus einem Nutzsignal (z.&nbsp;B. bei einem Funkempfänger)<br />
* Unterdrückung eines Wechselpannungsanteils<br />
* Anti-Aliasing -> siehe [[Abtasttheorem]]<br />
* Auftrennung in unterschiedliche Bänder<br />
<br />
[[Kategorie:Grundlagen]]<br />
[[Kategorie:Datenübertragung]]<br />
[[Kategorie:Signalverarbeitung]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Diskussion:Digitaler_LaPlace-Funktionsgenerator_im_FPGA&diff=105258Diskussion:Digitaler LaPlace-Funktionsgenerator im FPGA2022-06-09T23:36:14Z<p>Engineer: /* VHDL - Core */</p>
<hr />
<div>== Höhere Ordnungen ==<br />
Lässt sich damit auch die Funktion mit jeweils höherer Frequenz als nur die 4. Oberwelle erzeugen? Wie sieht es aus mit dem Code?<br />
: Die Zahl der Oberwellen hängt von Wunsch und Resourcen ab. Solange die Sinuswelle perfekt ist, kann man in gewohnter Weise hochmultipizieren. Ansonsten per DDS parallel bauen. Code ist für FPGA in Form von DDS in jedem Tool mit drin. C Code für einen Controller müsste man selber schreiben, allerdings gibt es ja LIBs für den Sinus.<br />
<br />
== VHDL - Core ==<br />
Den Core mit der kompletten WAVE-Table-Einheit gibt es in meinem P2-Core oder einzeln. Ebenso die Flat-Top-Funktionen als optimiertes VHDL.<br />
<br />
== Anmerkung zu den Formeln ==<br />
Ab der 5. Oberwelle ist die Lösung für ein flat top nicht mehr eindeutig, sondern von den Randbedingungen abhängig. Grundsätzlich kann man einen streng montonen Verlauf nur erzeugen, wenn man die zusätzlichen Oberwellen moderat einsetzt und eine maximale Steigung akzeptiert. In gewissen Grenzen kann man variieren, wenn man geringe Abweichungen und Wendepunkte zulässt und ein Band für den Maximalbereich definiert. Dazu habe ich ein interativ arbeitendes Excel-Programm. Als Beispiel kann man für eine Funktion mit bis f7 die Koeffizienten 1,0000; 0,2000; 0,0400; 0,0041 und auch 1,0000; 0,2222; 0,0556; 0,0083 finden. Letztere ist etwas eckiger.</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Digitaler_LaPlace-Funktionsgenerator_im_FPGA&diff=105257Digitaler LaPlace-Funktionsgenerator im FPGA2022-06-09T23:27:54Z<p>Engineer: /* Beispiel bandbegrenzte Rechtecke */ Formel bis F7</p>
<hr />
<div>Ein digitaler [[Funktionsgenerator]], basierend auf der Wellenformsynthese nach LaPlace / Fourier.<br />
<br />
''von Jürgen Schuhmacher''<br />
<br />
== Funktionen ==<br />
Auf der Basis von Sinuswellen werden komplexe Wellenformen in Echtzeit zusammengesetzt.<br />
<br />
* Signalformen: Sinusgrundwelle + bis zu 7 Oberwellen, inzwischen erweitert auf 31<br />
* Ausgangsfrequenz: von 0 Hz bis 25 MHz in Cyclone IV-chip (bei DDS)<br />
* Ausgangsfrequenz: von 0 Hz bis 5 MHz in Cyclone IV-chip (bei VA-Oszillation)<br />
* Amplitude +/-3V bei Verwendung der Beispiel-Plattform mit DACs in 3.3V-Technologie<br />
<br />
<gallery caption="Generation von Rechteck, Dreieck und Kreis mit 3 Oberwellen" widths="240" heights="150" perrow=3><br />
Datei:Fpga-sin-based-function-generator-square.jpg|;Rechteck: unzureichend <br />
Datei:Fpga-sin-based-function-generator-triangle.jpg|;Dreieck: relativ gut<br />
Datei:Fpga-sin-based-function-generator-circle.jpg|;Kreis: sehr gut<br />
</gallery><br />
<br />
Die Darstellung gelingt hier nur über direkte Ausgabe über VGA (Siehe [[Projekt VGA Core in VHDL]], daher gibt es nur Screenshots). Alternativ würde ein mehrkanaliges Oszilloskop ausreichen, um die Signale zu scannen. <br />
<br />
==Erzeugung==<br />
Die Sinuswellen selbst wurden aufgrund der benötigten Genauigkeit in diesem Projekt aus einer interpolierten, mehrfach abgetasteten Sinustabelle (phase dithering) gemäß dem [[DDS]]-Prinzip gewonnen, nochmals gefiltert und in der Phase so verschoben, dass die frequenzabhängige Phasenverschiebung durch den Filter kompensiert wird und die ideale Addition korrekt gelingt. In einer späteren Version für Audio wurden selbstschwingende Oszillatoren auf der Basis der DGL zweiter Ordnung verwendet. Diese erfordern mehr Rechenaufwand, liefern aber besonders bei hohen Frequenzen den besseren Sinus. Für einfache Operationen weit unterhalb der Abtastfrequenz reicht eine [[Vervielfachung der Frequenz mittels Multiplikation]] und Bereinigung um den Gleichanteil. Diese Methode eignet sich auch für die Berechnung auf Mikrocontrollern.<br />
<br />
== Anwendungen ==<br />
Das System wird als z.B. Testgenerator verwendet und dient u.a. zum design von komplexen Impulsen für Sonderanwendungen, die parametrierbare bandlimitierte Pulse benötigen oder als Klangsyntheseeinheit.<br />
<br />
=== Beispiel bandbegrenzte Rechtecke ===<br />
Durch geschickte Wahl der Parameter kann durch Einfügen von Oberwellen ein zunehmend besseres Rechteck gewonnen werden - auf Wunsch auch ohne die Überschwinger, die sich bei der klassischen Fourier-Entwicklung ergeben. Der erste Ansatz ist das Einfügen der ersten <br />
Oberwelle - beim Rechteck die dreifache Frequenz - mit theoretisch dem Faktor 0,125 gegenüber dem 1,125-fachen der Grundwelle. Der nächste theoretisch optimale Fall wäre die Hinzunahme der 5. Oberwelle mit: 1,2 x f1 + 0,24 * f3 + 0,048 * f5. Weiter habe ich gefunden: 1,0 x f1 + 0,215 * f3 + 0,055 * f5 + 0,0085 * f7.<br />
<br />
Setzt man das fort gelangt man zu einem immer steileren Anstieg der Funktion mit flachem Verlauf im Maximalbereich. Funktionen dieser Art werden vereinzelt auch als "flat top functions" bezeichnet und als Fenster in der Signalverarbeitung oder zur direkten Ansteuerung von Leistungselektronik benutzt.<br />
<br />
[[Datei:Band_limited_square_waves_pyratone_synth.jpg|thumb|Bandbegrenzte Rechteckfunktion bis 4. Ordnung (mit 9. Oberwelle)]]<br />
<br />
Siehe : [https://www.mikrocontroller.net/topic/520500#6732878 Bandbegrenzte Rechtecke]<br />
<br />
=== Beispiel Wellenfeld ===<br />
Bei Audio-Anwendung dient es bei der virtuellen Wave Table Synthese: Dabei werden mehrere Kanäle und damit Wellen gleichzeitig berechnet, dafür aber nur mit maximal 768ks/sec. Die finale Welle wird dann durch gewichtetes Addieren komplett in Echtzeit berechnet, statt sie (wie beim Original) aus Tabellenwerten zusammenzusetzen, die durch das Durchschreiten der Tabellen selektiert werden. Damit ist auch eine Wellenmodifikation im Frequenzbereich, statt nur im Zeitbereich möglich.<br />
<br />
<gallery caption="Wellenfeldsynthese komplexer Wellenformen aus Sinuswellen" widths="240" heights="150" perrow=3><br />
Datei:Laplacegenwaveforms.jpg<br />
Datei:Laplacegenwaveforms2.jpg<br />
</gallery><br />
<br />
== Links ==<br />
* [http://96khz.org/htm/testsignalgenerator.htm Verwendung im FPGA als Audio Testsignal Generator]<br />
* [http://96khz.org/htm/wavetablesynthesis.htm Verwendung im FPGA als Wellenfeldsynthese]<br />
* [https://www.mikrocontroller.net/topic/520500#6732878 Wellen gezielt erzeugen]<br />
<br />
[[Kategorie:Signalgeneratoren]]<br />
[[Kategorie:FPGA-Projekte]]<br />
[[Kategorie:Algorithmen und Arithmetik]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Digitaler_LaPlace-Funktionsgenerator_im_FPGA&diff=105256Digitaler LaPlace-Funktionsgenerator im FPGA2022-06-09T23:09:05Z<p>Engineer: /* Beispiel bandbegrenzte Rechtecke */</p>
<hr />
<div>Ein digitaler [[Funktionsgenerator]], basierend auf der Wellenformsynthese nach LaPlace / Fourier.<br />
<br />
''von Jürgen Schuhmacher''<br />
<br />
== Funktionen ==<br />
Auf der Basis von Sinuswellen werden komplexe Wellenformen in Echtzeit zusammengesetzt.<br />
<br />
* Signalformen: Sinusgrundwelle + bis zu 7 Oberwellen, inzwischen erweitert auf 31<br />
* Ausgangsfrequenz: von 0 Hz bis 25 MHz in Cyclone IV-chip (bei DDS)<br />
* Ausgangsfrequenz: von 0 Hz bis 5 MHz in Cyclone IV-chip (bei VA-Oszillation)<br />
* Amplitude +/-3V bei Verwendung der Beispiel-Plattform mit DACs in 3.3V-Technologie<br />
<br />
<gallery caption="Generation von Rechteck, Dreieck und Kreis mit 3 Oberwellen" widths="240" heights="150" perrow=3><br />
Datei:Fpga-sin-based-function-generator-square.jpg|;Rechteck: unzureichend <br />
Datei:Fpga-sin-based-function-generator-triangle.jpg|;Dreieck: relativ gut<br />
Datei:Fpga-sin-based-function-generator-circle.jpg|;Kreis: sehr gut<br />
</gallery><br />
<br />
Die Darstellung gelingt hier nur über direkte Ausgabe über VGA (Siehe [[Projekt VGA Core in VHDL]], daher gibt es nur Screenshots). Alternativ würde ein mehrkanaliges Oszilloskop ausreichen, um die Signale zu scannen. <br />
<br />
==Erzeugung==<br />
Die Sinuswellen selbst wurden aufgrund der benötigten Genauigkeit in diesem Projekt aus einer interpolierten, mehrfach abgetasteten Sinustabelle (phase dithering) gemäß dem [[DDS]]-Prinzip gewonnen, nochmals gefiltert und in der Phase so verschoben, dass die frequenzabhängige Phasenverschiebung durch den Filter kompensiert wird und die ideale Addition korrekt gelingt. In einer späteren Version für Audio wurden selbstschwingende Oszillatoren auf der Basis der DGL zweiter Ordnung verwendet. Diese erfordern mehr Rechenaufwand, liefern aber besonders bei hohen Frequenzen den besseren Sinus. Für einfache Operationen weit unterhalb der Abtastfrequenz reicht eine [[Vervielfachung der Frequenz mittels Multiplikation]] und Bereinigung um den Gleichanteil. Diese Methode eignet sich auch für die Berechnung auf Mikrocontrollern.<br />
<br />
== Anwendungen ==<br />
Das System wird als z.B. Testgenerator verwendet und dient u.a. zum design von komplexen Impulsen für Sonderanwendungen, die parametrierbare bandlimitierte Pulse benötigen oder als Klangsyntheseeinheit.<br />
<br />
=== Beispiel bandbegrenzte Rechtecke ===<br />
Durch geschickte Wahl der Parameter kann durch Einfügen von Oberwellen ein zunehmend besseres Rechteck gewonnen werden - auf Wunsch auch ohne die Überschwinger, die sich bei der klassischen Fourier-Entwicklung ergeben. Der erste Ansatz ist das Einfügen der ersten <br />
Oberwelle - beim Rechteck die dreifache Frequenz - mit theoretisch dem Faktor 0,125 gegenüber dem 1,125-fachen der Grundwelle. Der nächste theoretisch optimale Fall wäre die Hinzunahme der 5. Oberwelle mit: 1,2 x f1 + 0,24 * f3 + 0,048 * f5. Setzt man das fort gelangt man zu einem immer steileren Anstieg der Funktion mit flachem Verlauf im Maximalbereich. Funktionen dieser Art werden vereinzelt auch als "flat top functions" bezeichnet und als Fenster in der Signalverarbeitung oder zur direkten Ansteuerung von Leistungselektronik benutzt.<br />
<br />
[[Datei:Band_limited_square_waves_pyratone_synth.jpg|thumb|Bandbegrenzte Rechteckfunktion bis 4. Ordnung (mit 9. Oberwelle)]]<br />
<br />
Siehe : [https://www.mikrocontroller.net/topic/520500#6732878 Bandbegrenzte Rechtecke]<br />
<br />
=== Beispiel Wellenfeld ===<br />
Bei Audio-Anwendung dient es bei der virtuellen Wave Table Synthese: Dabei werden mehrere Kanäle und damit Wellen gleichzeitig berechnet, dafür aber nur mit maximal 768ks/sec. Die finale Welle wird dann durch gewichtetes Addieren komplett in Echtzeit berechnet, statt sie (wie beim Original) aus Tabellenwerten zusammenzusetzen, die durch das Durchschreiten der Tabellen selektiert werden. Damit ist auch eine Wellenmodifikation im Frequenzbereich, statt nur im Zeitbereich möglich.<br />
<br />
<gallery caption="Wellenfeldsynthese komplexer Wellenformen aus Sinuswellen" widths="240" heights="150" perrow=3><br />
Datei:Laplacegenwaveforms.jpg<br />
Datei:Laplacegenwaveforms2.jpg<br />
</gallery><br />
<br />
== Links ==<br />
* [http://96khz.org/htm/testsignalgenerator.htm Verwendung im FPGA als Audio Testsignal Generator]<br />
* [http://96khz.org/htm/wavetablesynthesis.htm Verwendung im FPGA als Wellenfeldsynthese]<br />
* [https://www.mikrocontroller.net/topic/520500#6732878 Wellen gezielt erzeugen]<br />
<br />
[[Kategorie:Signalgeneratoren]]<br />
[[Kategorie:FPGA-Projekte]]<br />
[[Kategorie:Algorithmen und Arithmetik]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Datei:Band_limited_square_waves_pyratone_synth.jpg&diff=105255Datei:Band limited square waves pyratone synth.jpg2022-06-09T23:03:30Z<p>Engineer: Bandbegrenzte Rechteckfunktionen, auch "flat top functions" genannt, gewonnen aus gewichteten Oberwellen und einer Grundwelle mit X3, X5, X7 und X9 - hier erstellt mit Echtzeitsynthese aus Pyratone-FPGA-Synthesizer.</p>
<hr />
<div>== Beschreibung ==<br />
Bandbegrenzte Rechteckfunktionen, auch "flat top functions" genannt, gewonnen aus gewichteten Oberwellen und einer Grundwelle mit X3, X5, X7 und X9 - hier erstellt mit Echtzeitsynthese aus Pyratone-FPGA-Synthesizer.<br />
<br />
== Lizenz ==<br />
{{subst:Mehrlizenzdateien|Bild-CC-by-sa/3.0/de|Bild-CC-by-sa/3.0|Bild-GFDL-Neu}}</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Digitaler_LaPlace-Funktionsgenerator_im_FPGA&diff=105254Digitaler LaPlace-Funktionsgenerator im FPGA2022-06-09T22:38:22Z<p>Engineer: /* Anwendungen */</p>
<hr />
<div>Ein digitaler [[Funktionsgenerator]], basierend auf der Wellenformsynthese nach LaPlace / Fourier.<br />
<br />
''von Jürgen Schuhmacher''<br />
<br />
== Funktionen ==<br />
Auf der Basis von Sinuswellen werden komplexe Wellenformen in Echtzeit zusammengesetzt.<br />
<br />
* Signalformen: Sinusgrundwelle + bis zu 7 Oberwellen, inzwischen erweitert auf 31<br />
* Ausgangsfrequenz: von 0 Hz bis 25 MHz in Cyclone IV-chip (bei DDS)<br />
* Ausgangsfrequenz: von 0 Hz bis 5 MHz in Cyclone IV-chip (bei VA-Oszillation)<br />
* Amplitude +/-3V bei Verwendung der Beispiel-Plattform mit DACs in 3.3V-Technologie<br />
<br />
<gallery caption="Generation von Rechteck, Dreieck und Kreis mit 3 Oberwellen" widths="240" heights="150" perrow=3><br />
Datei:Fpga-sin-based-function-generator-square.jpg|;Rechteck: unzureichend <br />
Datei:Fpga-sin-based-function-generator-triangle.jpg|;Dreieck: relativ gut<br />
Datei:Fpga-sin-based-function-generator-circle.jpg|;Kreis: sehr gut<br />
</gallery><br />
<br />
Die Darstellung gelingt hier nur über direkte Ausgabe über VGA (Siehe [[Projekt VGA Core in VHDL]], daher gibt es nur Screenshots). Alternativ würde ein mehrkanaliges Oszilloskop ausreichen, um die Signale zu scannen. <br />
<br />
==Erzeugung==<br />
Die Sinuswellen selbst wurden aufgrund der benötigten Genauigkeit in diesem Projekt aus einer interpolierten, mehrfach abgetasteten Sinustabelle (phase dithering) gemäß dem [[DDS]]-Prinzip gewonnen, nochmals gefiltert und in der Phase so verschoben, dass die frequenzabhängige Phasenverschiebung durch den Filter kompensiert wird und die ideale Addition korrekt gelingt. In einer späteren Version für Audio wurden selbstschwingende Oszillatoren auf der Basis der DGL zweiter Ordnung verwendet. Diese erfordern mehr Rechenaufwand, liefern aber besonders bei hohen Frequenzen den besseren Sinus. Für einfache Operationen weit unterhalb der Abtastfrequenz reicht eine [[Vervielfachung der Frequenz mittels Multiplikation]] und Bereinigung um den Gleichanteil. Diese Methode eignet sich auch für die Berechnung auf Mikrocontrollern.<br />
<br />
== Anwendungen ==<br />
Das System wird als z.B. Testgenerator verwendet und dient u.a. zum design von komplexen Impulsen für Sonderanwendungen, die parametrierbare bandlimitierte Pulse benötigen oder als Klangsyntheseeinheit.<br />
<br />
=== Beispiel bandbegrenzte Rechtecke ===<br />
Durch geschickte Wahl der Parameter kann durch Einfügen von Oberwellen ein zunehmend besseres Rechteck gewonnen werden - auf Wunsch auch ohne die Überschwinger, die sich bei der Fourier-Entwicklung ergeben. Der erste Ansatz ist das Einfügen der ersten <br />
Oberwelle - beim Rechteck die dreifache Frequenz - mit theoretisch dem Faktor 0,125 gegenüber 1,125 x der Grundwelle. Der nächste theoretisch optimale Fall wäre 1,2 x f1 + 0,24 * f3 + 0,048 * f5.<br />
<br />
Siehe : [https://www.mikrocontroller.net/topic/520500#6732878 Bandbegrenzte Rechtecke]<br />
<br />
=== Beispiel Wellenfeld ===<br />
Bei Audio-Anwendung dient es bei der virtuellen Wave Table Synthese: Dabei werden mehrere Kanäle und damit Wellen gleichzeitig berechnet, dafür aber nur mit maximal 768ks/sec. Die finale Welle wird dann durch gewichtetes Addieren komplett in Echtzeit berechnet, statt sie (wie beim Original) aus Tabellenwerten zusammenzusetzen, die durch das Durchschreiten der Tabellen selektiert werden. Damit ist auch eine Wellenmodifikation im Frequenzbereich, statt nur im Zeitbereich möglich.<br />
<br />
<gallery caption="Wellenfeldsynthese komplexer Wellenformen aus Sinuswellen" widths="240" heights="150" perrow=3><br />
Datei:Laplacegenwaveforms.jpg<br />
Datei:Laplacegenwaveforms2.jpg<br />
</gallery><br />
<br />
== Links ==<br />
* [http://96khz.org/htm/testsignalgenerator.htm Verwendung im FPGA als Audio Testsignal Generator]<br />
* [http://96khz.org/htm/wavetablesynthesis.htm Verwendung im FPGA als Wellenfeldsynthese]<br />
* [https://www.mikrocontroller.net/topic/520500#6732878 Wellen gezielt erzeugen]<br />
<br />
[[Kategorie:Signalgeneratoren]]<br />
[[Kategorie:FPGA-Projekte]]<br />
[[Kategorie:Algorithmen und Arithmetik]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Digitaler_LaPlace-Funktionsgenerator_im_FPGA&diff=105253Digitaler LaPlace-Funktionsgenerator im FPGA2022-06-09T22:32:19Z<p>Engineer: /* Links */</p>
<hr />
<div>Ein digitaler [[Funktionsgenerator]], basierend auf der Wellenformsynthese nach LaPlace / Fourier.<br />
<br />
''von Jürgen Schuhmacher''<br />
<br />
== Funktionen ==<br />
Auf der Basis von Sinuswellen werden komplexe Wellenformen in Echtzeit zusammengesetzt.<br />
<br />
* Signalformen: Sinusgrundwelle + bis zu 7 Oberwellen, inzwischen erweitert auf 31<br />
* Ausgangsfrequenz: von 0 Hz bis 25 MHz in Cyclone IV-chip (bei DDS)<br />
* Ausgangsfrequenz: von 0 Hz bis 5 MHz in Cyclone IV-chip (bei VA-Oszillation)<br />
* Amplitude +/-3V bei Verwendung der Beispiel-Plattform mit DACs in 3.3V-Technologie<br />
<br />
<gallery caption="Generation von Rechteck, Dreieck und Kreis mit 3 Oberwellen" widths="240" heights="150" perrow=3><br />
Datei:Fpga-sin-based-function-generator-square.jpg|;Rechteck: unzureichend <br />
Datei:Fpga-sin-based-function-generator-triangle.jpg|;Dreieck: relativ gut<br />
Datei:Fpga-sin-based-function-generator-circle.jpg|;Kreis: sehr gut<br />
</gallery><br />
<br />
Die Darstellung gelingt hier nur über direkte Ausgabe über VGA (Siehe [[Projekt VGA Core in VHDL]], daher gibt es nur Screenshots). Alternativ würde ein mehrkanaliges Oszilloskop ausreichen, um die Signale zu scannen. <br />
<br />
==Erzeugung==<br />
Die Sinuswellen selbst wurden aufgrund der benötigten Genauigkeit in diesem Projekt aus einer interpolierten, mehrfach abgetasteten Sinustabelle (phase dithering) gemäß dem [[DDS]]-Prinzip gewonnen, nochmals gefiltert und in der Phase so verschoben, dass die frequenzabhängige Phasenverschiebung durch den Filter kompensiert wird und die ideale Addition korrekt gelingt. In einer späteren Version für Audio wurden selbstschwingende Oszillatoren auf der Basis der DGL zweiter Ordnung verwendet. Diese erfordern mehr Rechenaufwand, liefern aber besonders bei hohen Frequenzen den besseren Sinus. Für einfache Operationen weit unterhalb der Abtastfrequenz reicht eine [[Vervielfachung der Frequenz mittels Multiplikation]] und Bereinigung um den Gleichanteil. Diese Methode eignet sich auch für die Berechnung auf Mikrocontrollern.<br />
<br />
== Anwendungen ==<br />
Das System wird als z.B. Testgenerator verwendet und dient u.a. zum design von komplexen Impulsen für Sonderanwendungen, die parametrierbare bandlimitierte Pulse benötigen. Bei Audio-Anwendung dient es z.B. bei der virtuellen Wave Table Synthese. Dabei werden mehrere Kanäle und damit Wellen gleichzeitig berechnet, dafür aber nur mit maximal 768ks/sec.<br />
<br />
=== Beispiel Wellenfeld ===<br />
<gallery caption="Wellenfeldsynthese komplexer Wellenformen aus Sinuswellen" widths="240" heights="150" perrow=3><br />
Datei:Laplacegenwaveforms.jpg<br />
Datei:Laplacegenwaveforms2.jpg<br />
</gallery><br />
Die finale Welle wird dann durch gewichtetes Addieren komplett in Echtzeit berechnet, statt sie (wie beim Original) aus Tabellenwerten zusammenzusetzen, die durch das Durchschreiten der Tabellen selektiert werden. Damit ist auch eine Wellenmodifikation im Frequenzbereich, statt nur im Zeitbereich möglich.<br />
<br />
== Links ==<br />
* [http://96khz.org/htm/testsignalgenerator.htm Verwendung im FPGA als Audio Testsignal Generator]<br />
* [http://96khz.org/htm/wavetablesynthesis.htm Verwendung im FPGA als Wellenfeldsynthese]<br />
* [https://www.mikrocontroller.net/topic/520500#6732878 Wellen gezielt erzeugen]<br />
<br />
[[Kategorie:Signalgeneratoren]]<br />
[[Kategorie:FPGA-Projekte]]<br />
[[Kategorie:Algorithmen und Arithmetik]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Digitaler_LaPlace-Funktionsgenerator_im_FPGA&diff=105252Digitaler LaPlace-Funktionsgenerator im FPGA2022-06-09T22:27:59Z<p>Engineer: /* Anwendung */</p>
<hr />
<div>Ein digitaler [[Funktionsgenerator]], basierend auf der Wellenformsynthese nach LaPlace / Fourier.<br />
<br />
''von Jürgen Schuhmacher''<br />
<br />
== Funktionen ==<br />
Auf der Basis von Sinuswellen werden komplexe Wellenformen in Echtzeit zusammengesetzt.<br />
<br />
* Signalformen: Sinusgrundwelle + bis zu 7 Oberwellen, inzwischen erweitert auf 31<br />
* Ausgangsfrequenz: von 0 Hz bis 25 MHz in Cyclone IV-chip (bei DDS)<br />
* Ausgangsfrequenz: von 0 Hz bis 5 MHz in Cyclone IV-chip (bei VA-Oszillation)<br />
* Amplitude +/-3V bei Verwendung der Beispiel-Plattform mit DACs in 3.3V-Technologie<br />
<br />
<gallery caption="Generation von Rechteck, Dreieck und Kreis mit 3 Oberwellen" widths="240" heights="150" perrow=3><br />
Datei:Fpga-sin-based-function-generator-square.jpg|;Rechteck: unzureichend <br />
Datei:Fpga-sin-based-function-generator-triangle.jpg|;Dreieck: relativ gut<br />
Datei:Fpga-sin-based-function-generator-circle.jpg|;Kreis: sehr gut<br />
</gallery><br />
<br />
Die Darstellung gelingt hier nur über direkte Ausgabe über VGA (Siehe [[Projekt VGA Core in VHDL]], daher gibt es nur Screenshots). Alternativ würde ein mehrkanaliges Oszilloskop ausreichen, um die Signale zu scannen. <br />
<br />
==Erzeugung==<br />
Die Sinuswellen selbst wurden aufgrund der benötigten Genauigkeit in diesem Projekt aus einer interpolierten, mehrfach abgetasteten Sinustabelle (phase dithering) gemäß dem [[DDS]]-Prinzip gewonnen, nochmals gefiltert und in der Phase so verschoben, dass die frequenzabhängige Phasenverschiebung durch den Filter kompensiert wird und die ideale Addition korrekt gelingt. In einer späteren Version für Audio wurden selbstschwingende Oszillatoren auf der Basis der DGL zweiter Ordnung verwendet. Diese erfordern mehr Rechenaufwand, liefern aber besonders bei hohen Frequenzen den besseren Sinus. Für einfache Operationen weit unterhalb der Abtastfrequenz reicht eine [[Vervielfachung der Frequenz mittels Multiplikation]] und Bereinigung um den Gleichanteil. Diese Methode eignet sich auch für die Berechnung auf Mikrocontrollern.<br />
<br />
== Anwendungen ==<br />
Das System wird als z.B. Testgenerator verwendet und dient u.a. zum design von komplexen Impulsen für Sonderanwendungen, die parametrierbare bandlimitierte Pulse benötigen. Bei Audio-Anwendung dient es z.B. bei der virtuellen Wave Table Synthese. Dabei werden mehrere Kanäle und damit Wellen gleichzeitig berechnet, dafür aber nur mit maximal 768ks/sec.<br />
<br />
=== Beispiel Wellenfeld ===<br />
<gallery caption="Wellenfeldsynthese komplexer Wellenformen aus Sinuswellen" widths="240" heights="150" perrow=3><br />
Datei:Laplacegenwaveforms.jpg<br />
Datei:Laplacegenwaveforms2.jpg<br />
</gallery><br />
Die finale Welle wird dann durch gewichtetes Addieren komplett in Echtzeit berechnet, statt sie (wie beim Original) aus Tabellenwerten zusammenzusetzen, die durch das Durchschreiten der Tabellen selektiert werden. Damit ist auch eine Wellenmodifikation im Frequenzbereich, statt nur im Zeitbereich möglich.<br />
<br />
== Links ==<br />
* [http://96khz.org/htm/testsignalgenerator.htm Verwendung im FPGA als Audio Testsignal Generator]<br />
* [http://96khz.org/htm/wavetablesynthesis.htm Verwendung im FPGA als Wellenfeldsynthese]<br />
<br />
[[Kategorie:Signalgeneratoren]]<br />
[[Kategorie:FPGA-Projekte]]<br />
[[Kategorie:Algorithmen und Arithmetik]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Digitaler_LaPlace-Funktionsgenerator_im_FPGA&diff=105251Digitaler LaPlace-Funktionsgenerator im FPGA2022-06-09T22:21:29Z<p>Engineer: /* Erzeugung */</p>
<hr />
<div>Ein digitaler [[Funktionsgenerator]], basierend auf der Wellenformsynthese nach LaPlace / Fourier.<br />
<br />
''von Jürgen Schuhmacher''<br />
<br />
== Funktionen ==<br />
Auf der Basis von Sinuswellen werden komplexe Wellenformen in Echtzeit zusammengesetzt.<br />
<br />
* Signalformen: Sinusgrundwelle + bis zu 7 Oberwellen, inzwischen erweitert auf 31<br />
* Ausgangsfrequenz: von 0 Hz bis 25 MHz in Cyclone IV-chip (bei DDS)<br />
* Ausgangsfrequenz: von 0 Hz bis 5 MHz in Cyclone IV-chip (bei VA-Oszillation)<br />
* Amplitude +/-3V bei Verwendung der Beispiel-Plattform mit DACs in 3.3V-Technologie<br />
<br />
<gallery caption="Generation von Rechteck, Dreieck und Kreis mit 3 Oberwellen" widths="240" heights="150" perrow=3><br />
Datei:Fpga-sin-based-function-generator-square.jpg|;Rechteck: unzureichend <br />
Datei:Fpga-sin-based-function-generator-triangle.jpg|;Dreieck: relativ gut<br />
Datei:Fpga-sin-based-function-generator-circle.jpg|;Kreis: sehr gut<br />
</gallery><br />
<br />
Die Darstellung gelingt hier nur über direkte Ausgabe über VGA (Siehe [[Projekt VGA Core in VHDL]], daher gibt es nur Screenshots). Alternativ würde ein mehrkanaliges Oszilloskop ausreichen, um die Signale zu scannen. <br />
<br />
==Erzeugung==<br />
Die Sinuswellen selbst wurden aufgrund der benötigten Genauigkeit in diesem Projekt aus einer interpolierten, mehrfach abgetasteten Sinustabelle (phase dithering) gemäß dem [[DDS]]-Prinzip gewonnen, nochmals gefiltert und in der Phase so verschoben, dass die frequenzabhängige Phasenverschiebung durch den Filter kompensiert wird und die ideale Addition korrekt gelingt. In einer späteren Version für Audio wurden selbstschwingende Oszillatoren auf der Basis der DGL zweiter Ordnung verwendet. Diese erfordern mehr Rechenaufwand, liefern aber besonders bei hohen Frequenzen den besseren Sinus. Für einfache Operationen weit unterhalb der Abtastfrequenz reicht eine [[Vervielfachung der Frequenz mittels Multiplikation]] und Bereinigung um den Gleichanteil. Diese Methode eignet sich auch für die Berechnung auf Mikrocontrollern.<br />
<br />
==Anwendung==<br />
Das System wird als Testgenerator verwendet und dient u.a. zum Sounddesign. Als Audio-Anwendung dient es zur Wave Table Synthese wobei mehrere Kanäle und Wellen gleichzeitig berechnet werden, dafür aber nur maximal 768k samples / sec.<br />
<br />
===Beispiel Wellenfeld===<br />
<gallery caption="Wellenfeldsynthese komplexer Wellenformen aus Sinuswellen" widths="240" heights="150" perrow=3><br />
Datei:Laplacegenwaveforms.jpg<br />
Datei:Laplacegenwaveforms2.jpg<br />
</gallery><br />
<br />
== Links ==<br />
* [http://96khz.org/htm/testsignalgenerator.htm Verwendung im FPGA als Audio Testsignal Generator]<br />
* [http://96khz.org/htm/wavetablesynthesis.htm Verwendung im FPGA als Wellenfeldsynthese]<br />
<br />
[[Kategorie:Signalgeneratoren]]<br />
[[Kategorie:FPGA-Projekte]]<br />
[[Kategorie:Algorithmen und Arithmetik]]</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Diskussion:Augendiagramm&diff=105247Diskussion:Augendiagramm2022-06-05T12:16:00Z<p>Engineer: /* Formulierung */</p>
<hr />
<div>= Formulierung =<br />
Hinweis wegen einer Rückfrage: Der einleitende Satz ist dem der Wikipedia deshalb so ähnlich, weil dieser ebenfalls von mir formuliert wurde. :-) [[Benutzer:Engineer|Engineer]] ([[Benutzer Diskussion:Engineer|Diskussion]]) 12:15, 5. Jun. 2022 (UTC)<br />
<br />
= Augendiagram - Bild =<br />
Die Kombi 3+3, die in der Darstellung verwendet wird, ist nicht unbedingt Standard, taugt aber für meine Zwecke und ließ sich auf der Plattform leicht realisieren. [[Benutzer:Engineer|Engineer]] ([[Benutzer Diskussion:Engineer|Diskussion]]) 12:15, 5. Jun. 2022 (UTC)</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Augendiagramm&diff=105246Augendiagramm2022-06-05T12:13:40Z<p>Engineer: /* Beispiel I2S-Audio-Signal */</p>
<hr />
<div>Erklärung der Entstehung eines sogenannten Augendiagramms (engl. eye pattern)<br />
<br />
''von [[Benutzer:engineer|J.S.]]''<br />
<br />
= Bedeutung =<br />
<br />
Ein Augendiagramm ist eine bildliche Darstellung eines elektrischen Signalverlaufs, mit dessen Hilfe die Signalqualität einer digitalen Datenübertragung beurteilt werden kann. Es entsteht durch die grafische Überlagerung von mehreren Messungen eines Signals zu unterschiedlichen Zeitpunkten und Phasen. Es entsteht eine Art von Summation der statistisch verteilten Signalverläufe.<br />
<br />
Durch die systematischen und zufälligen Einflüsse, denen das Signal unterworfen ist, verlaufen die theoretisch unendlich steilen Übergänge von 0 auf 1 und umgekehrt dabei nicht mathematisch rechteckig oder konstant an derselben Stelle, sondern als mehr oder weniger breit verschmierte Rampen, wodurch im Zentrum die typische Form eines Auges entsteht. Dabei spielen die Impedanz, Dämpfung und Reflektionen auf der Leitung eine Rolle. <br />
<br />
= Datengewinnung =<br />
Das Signal wird mehrfach vermessen und die Ergebnisse phasenrichtig überlagert. Aus technischen Gründen müssen dabei mehrere mögliche Kombinationen von Bitfolgen betrachtet werden, weil der Übergang von z.B. 0 auf 1 auch davon abhängt, wie die Historie des Signals und dessen Zukunft aussieht. Es macht z.B. einen Unterschied, ob der Pegel aufgrund von 2 oder mehr Null-Bits schon eingeschwungen ist oder kurz zuvor erst ein 1-0-Übergang stattgefunden hat. Dasselbe gilt für das Folgebit: Bei einem Übergang von 0 auf 1 entsteht gfs ein Überschwinger, der sich im Zusammenspiel mit Reflektionen bei einer Folge 010 und 011 anders abbilden kann. Im folgenden Beispiel werden jeweils 4er-Gruppen durchgespielt und überlagert, also 00->01, 00->10 und 00->11 danach 01->01, 01-10 und 01-11 usw. 3er-Gruppen bei einer ausgewählten Bitfolge würden im Einzelfall ebenfalls genügen. Aus Darstellungsgründen sind hier Punkte statt Linien verwendet, da sich in der schemtatischn Darstellung in Excel sonst ein unschöner Rücklauf ergeben würde. Zudem sind dies die realen Messpunkte des Signals.<br />
<br />
== Teildatensatz Beginn==<br />
<br />
[[Datei:Eye-pattern-explain1.gif]]<br />
Signalverlauf der ersten drei Kombinationen 0000.0001.0010<br />
{{Absatz}}<br />
<br />
Beim Signalverlauf der ersten drei Kombinationen rangiert die Spannung bei 0,2V-3,2V und zeigt einen overshoot von 0,3V. Die Pegel sind erst in der Mitte des Bits voll eingeschwungen, was auch den Zacken links (abklingende "1" zu Beginn der 3. Gruppe) erklärt.<br />
<br />
== Teildatensatz Mitte==<br />
<br />
[[Datei:Eye-pattern-explain2.gif]]<br />
Signalverlauf des Übergangs von 0111.1000<br />
{{Absatz}}<br />
<br />
Bei den Kombinationen 0111 und 1000 erkennt man den Übergang von overshoot in den statischen Bereich der eigentlich richtigen Spannung, wenn die Bits lange genug stabil bleiben und sich nicht schon im nächsten Takt wieder ändern.<br />
<br />
== Gesamter Datensatz wenige Durchläufe==<br />
[[Datei:Eye-pattern-explain3.gif]]<br />
Signalverläufe aller Kombinationen überlagert.<br />
{{Absatz}}<br />
<br />
Bei sich schnell ändernden Bits kommt immer mehr die Bandbreite des Kabels und der Treiber/Empfänger zur Geltung sodass sich das Auge langsam schließt.<br />
<br />
Durch Aufsummieren aller statistisch auftretenden Signalverläufe und Histogrambildung entsteht das eigentliche Augendiagramm.<br />
<br />
== Gesamter Datensatz viele Durchläufe==<br />
<br />
[[Datei:Eye-pattern-explain4.gif]]<br />
Eingefärbtes Augendiagramm<br />
{{Absatz}}<br />
<br />
Das 2D-Histogrammbild, das zunächst für jeden Bildpunkt in der T,U-Ebene (Zeitpunkt/Phase sowie Spannung) die Wahrscheinlichkeit für das Auftreten eines Durchlaufs darstellt, wird mit einem Farbprofil ähnlich der Wärmekameras eingefärbt, um die Häufungen zu zeigen. Massgeblich ist letzlich die Breite und Höhe des Auges. Das Zentrum definiert den Punkt, an dem die Abtastung optimal ist.<br />
<br />
Zu berücksichtigen sind dabei auch die absoluten Pegel, die jeweils den Empfänger sicher durchsteuern müssen.<br />
<br />
= Beispiel I2S-Audio-Signal =<br />
<br />
[[Datei:Augendiagramm_fpga_scan_I2S_bit_signal.png]]<br />
<br />
Augendiagram eines [[I2S]]-Datensignals aufgenommen mit einem FPGA-basierten DIY-Tester unter Nutzung eines 6-Bit-Musters (000.000 -> 111.111) = 64 Kombinationen und 4 überlagerten Durchläufen. Nutzfrequenz 49152 MHz (768 kHz Audio), Abtastung x 4, Plattform: Terrasic DE-115 mit Cyclone IV-FPGA. Am Ende der Leitung ist das Auge noch gerade ausreichend groß, um die Nutzdaten trotz Überschwinger und Störungen mit einem um etwa 100° verschobenen Takt sicher und fehlerfrei einsynchronisieren und im FPGA verarbeiten zu können. Ein angeschlossener kommerzieller Chip in einer äquivalenten Schaltung arbeitete dagegen mit den standardmässigen 180° nicht fehlerfrei und war nur mit 192kHz zu betreiben.<br />
{{Absatz}}<br />
<br />
= Interpretationsproblem =<br />
Bei differentiellen Leitungen entsteht bei der längeren Betrachtung der beiden Signale in den Fällen starker Störungen oftmals der Eindruck, dass das Auge geschlossen sei und keine Übertragung möglich ist. Dies muss jedoch nicht der Fall sein! Differenzielle Leitungen sind oftmals von Störungen in gleicher Weise betroffen und zeigen einen ähnlichen Spannungshub, der vom differenziellen Verstärker tolerant verarbeitet werden kann. Daher kommt mitunter dennoch wieder ein stabiles und jederzeit eindeutiges Signal heraus. Daher müssen differentielle Leitungen vor und nach dem Receiver betrachtet werden. Ist das nicht möglich, weil der Receiver in einem FPGA sitzt, muss der Logikpegel anhand von realen Messungen validiert werden.<br />
<br />
=Anwendungsbeispiele=<br />
* Lokalisierung von Problemen<br />
* Optimierung der Impedanzanpassung<br />
* Formelle Validierung<br />
* Bestimmung der Störreserve<br />
* Bestimmung maximale Bandbreite<br />
<br />
= Fußnoten =<br />
<references/><br />
<br />
=Links=<br />
<br />
http://www.mikrocontroller.net/topic/233342<br />
<br />
Suche im Forum nach<br />
* [http://www.mikrocontroller.net/search?query=Augendiagramm eye pattern]<br />
<br />
[[Kategorie:Signalverarbeitung]]<br />
[[Kategorie:Grundlagen]]<br />
<br />
=Weblinks=<br />
<br />
* http://it.e-technik.uni-ulm.de/archiv/World/Teaching/Experiment/eye/eye.html<br />
* https://home.zhaw.ch/~rur/ntm/unterlagen/ntmkap54opt.pdf</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Augendiagramm&diff=105233Augendiagramm2022-05-28T17:26:56Z<p>Engineer: </p>
<hr />
<div>Erklärung der Entstehung eines sogenannten Augendiagramms (engl. eye pattern)<br />
<br />
''von [[Benutzer:engineer|J.S.]]''<br />
<br />
= Bedeutung =<br />
<br />
Ein Augendiagramm ist eine bildliche Darstellung eines elektrischen Signalverlaufs, mit dessen Hilfe die Signalqualität einer digitalen Datenübertragung beurteilt werden kann. Es entsteht durch die grafische Überlagerung von mehreren Messungen eines Signals zu unterschiedlichen Zeitpunkten und Phasen. Es entsteht eine Art von Summation der statistisch verteilten Signalverläufe.<br />
<br />
Durch die systematischen und zufälligen Einflüsse, denen das Signal unterworfen ist, verlaufen die theoretisch unendlich steilen Übergänge von 0 auf 1 und umgekehrt dabei nicht mathematisch rechteckig oder konstant an derselben Stelle, sondern als mehr oder weniger breit verschmierte Rampen, wodurch im Zentrum die typische Form eines Auges entsteht. Dabei spielen die Impedanz, Dämpfung und Reflektionen auf der Leitung eine Rolle. <br />
<br />
= Datengewinnung =<br />
Das Signal wird mehrfach vermessen und die Ergebnisse phasenrichtig überlagert. Aus technischen Gründen müssen dabei mehrere mögliche Kombinationen von Bitfolgen betrachtet werden, weil der Übergang von z.B. 0 auf 1 auch davon abhängt, wie die Historie des Signals und dessen Zukunft aussieht. Es macht z.B. einen Unterschied, ob der Pegel aufgrund von 2 oder mehr Null-Bits schon eingeschwungen ist oder kurz zuvor erst ein 1-0-Übergang stattgefunden hat. Dasselbe gilt für das Folgebit: Bei einem Übergang von 0 auf 1 entsteht gfs ein Überschwinger, der sich im Zusammenspiel mit Reflektionen bei einer Folge 010 und 011 anders abbilden kann. Im folgenden Beispiel werden jeweils 4er-Gruppen durchgespielt und überlagert, also 00->01, 00->10 und 00->11 danach 01->01, 01-10 und 01-11 usw. 3er-Gruppen bei einer ausgewählten Bitfolge würden im Einzelfall ebenfalls genügen. Aus Darstellungsgründen sind hier Punkte statt Linien verwendet, da sich in der schemtatischn Darstellung in Excel sonst ein unschöner Rücklauf ergeben würde. Zudem sind dies die realen Messpunkte des Signals.<br />
<br />
== Teildatensatz Beginn==<br />
<br />
[[Datei:Eye-pattern-explain1.gif]]<br />
Signalverlauf der ersten drei Kombinationen 0000.0001.0010<br />
{{Absatz}}<br />
<br />
Beim Signalverlauf der ersten drei Kombinationen rangiert die Spannung bei 0,2V-3,2V und zeigt einen overshoot von 0,3V. Die Pegel sind erst in der Mitte des Bits voll eingeschwungen, was auch den Zacken links (abklingende "1" zu Beginn der 3. Gruppe) erklärt.<br />
<br />
== Teildatensatz Mitte==<br />
<br />
[[Datei:Eye-pattern-explain2.gif]]<br />
Signalverlauf des Übergangs von 0111.1000<br />
{{Absatz}}<br />
<br />
Bei den Kombinationen 0111 und 1000 erkennt man den Übergang von overshoot in den statischen Bereich der eigentlich richtigen Spannung, wenn die Bits lange genug stabil bleiben und sich nicht schon im nächsten Takt wieder ändern.<br />
<br />
== Gesamter Datensatz wenige Durchläufe==<br />
[[Datei:Eye-pattern-explain3.gif]]<br />
Signalverläufe aller Kombinationen überlagert.<br />
{{Absatz}}<br />
<br />
Bei sich schnell ändernden Bits kommt immer mehr die Bandbreite des Kabels und der Treiber/Empfänger zur Geltung sodass sich das Auge langsam schließt.<br />
<br />
Durch Aufsummieren aller statistisch auftretenden Signalverläufe und Histogrambildung entsteht das eigentliche Augendiagramm.<br />
<br />
== Gesamter Datensatz viele Durchläufe==<br />
<br />
[[Datei:Eye-pattern-explain4.gif]]<br />
Eingefärbtes Augendiagramm<br />
{{Absatz}}<br />
<br />
Das 2D-Histogrammbild, das zunächst für jeden Bildpunkt in der T,U-Ebene (Zeitpunkt/Phase sowie Spannung) die Wahrscheinlichkeit für das Auftreten eines Durchlaufs darstellt, wird mit einem Farbprofil ähnlich der Wärmekameras eingefärbt, um die Häufungen zu zeigen. Massgeblich ist letzlich die Breite und Höhe des Auges. Das Zentrum definiert den Punkt, an dem die Abtastung optimal ist.<br />
<br />
Zu berücksichtigen sind dabei auch die absoluten Pegel, die jeweils den Empfänger sicher durchsteuern müssen.<br />
<br />
= Beispiel I2S-Audio-Signal =<br />
<br />
[[Datei:Augendiagramm_fpga_scan_I2S_bit_signal.png]]<br />
<br />
Augendiagram eines I2S-Datensignals aufgenommen mit FPGA-basiertem DIY-Tester unter Nutzung eines 6-Bit-Musters (000.000 -> 111.111) = 64 Kombinationen und 4 überlagerten Durchläufen. Nutzfrequenz 49152 MHz Abtastung x 4, Cyclone II DE 115 FPGA. Am Ende der Leitung ist das Aug noch gerade ausreichend groß, um trotz Überschwinger und Störungen mit einem um etwa 100° verschobenen Takt einsynchronisieren zu können. Ein angeschlossener Chip arbeitete mit standarmässigen 180° nicht fehlerfrei.<br />
{{Absatz}}<br />
<br />
= Interpretationsproblem =<br />
Bei differentiellen Leitungen entsteht bei der längeren Betrachtung der beiden Signale in den Fällen starker Störungen oftmals der Eindruck, dass das Auge geschlossen sei und keine Übertragung möglich ist. Dies muss jedoch nicht der Fall sein! Differenzielle Leitungen sind oftmals von Störungen in gleicher Weise betroffen und zeigen einen ähnlichen Spannungshub, der vom differenziellen Verstärker tolerant verarbeitet werden kann. Daher kommt mitunter dennoch wieder ein stabiles und jederzeit eindeutiges Signal heraus. Daher müssen differentielle Leitungen vor und nach dem Receiver betrachtet werden. Ist das nicht möglich, weil der Receiver in einem FPGA sitzt, muss der Logikpegel anhand von realen Messungen validiert werden.<br />
<br />
=Anwendungsbeispiele=<br />
* Lokalisierung von Problemen<br />
* Optimierung der Impedanzanpassung<br />
* Formelle Validierung<br />
* Bestimmung der Störreserve<br />
* Bestimmung maximale Bandbreite<br />
<br />
= Fußnoten =<br />
<references/><br />
<br />
=Links=<br />
<br />
http://www.mikrocontroller.net/topic/233342<br />
<br />
Suche im Forum nach<br />
* [http://www.mikrocontroller.net/search?query=Augendiagramm eye pattern]<br />
<br />
[[Kategorie:Signalverarbeitung]]<br />
[[Kategorie:Grundlagen]]<br />
<br />
=Weblinks=<br />
<br />
* http://it.e-technik.uni-ulm.de/archiv/World/Teaching/Experiment/eye/eye.html<br />
* https://home.zhaw.ch/~rur/ntm/unterlagen/ntmkap54opt.pdf</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Augendiagramm&diff=105232Augendiagramm2022-05-28T17:25:39Z<p>Engineer: /* Beispiel I2S-Audio-Signal */</p>
<hr />
<div>Erklärung der Entstehung eines sogenannten Augendiagramms (engl. eye pattern)<br />
<br />
''von [[Benutzer:engineer|J.S.]]''<br />
<br />
= Bedeutung =<br />
<br />
Ein Augendiagramm ist eine bildliche Darstellung eines elektrischen Signalverlaufs, mit dessen Hilfe die Signalqualität einer digitalen Datenübertragung beurteilt werden kann. Es entsteht durch die grafische Überlagerung von mehreren Messungen eines Signals zu unterschiedlichen Zeitpunkten und Phasen. Es entsteht eine Art von Summation der statistisch verteilten Signalverläufe.<br />
<br />
Durch die systematischen und zufälligen Einflüsse, denen das Signal unterworfen ist, verlaufen die theoretisch unendlich steilen Übergänge von 0 auf 1 und umgekehrt dabei nicht mathematisch rechteckig oder konstant an derselben Stelle, sondern als mehr oder weniger breit verschmierte Rampen, wodurch im Zentrum die typische Form eines Auges entsteht. Dabei spielen die Impedanz, Dämpfung und Reflektionen auf der Leitung eine Rolle. <br />
<br />
= Datengewinnung =<br />
Das Signal wird mehrfach vermessen und die Ergebnisse phasenrichtig überlagert. Aus technischen Gründen müssen dabei mehrere mögliche Kombinationen von Bitfolgen betrachtet werden, weil der Übergang von z.B. 0 auf 1 auch davon abhängt, wie die Historie des Signals und dessen Zukunft aussieht. Es macht z.B. einen Unterschied, ob der Pegel aufgrund von 2 oder mehr Null-Bits schon eingeschwungen ist oder kurz zuvor erst ein 1-0-Übergang stattgefunden hat. Dasselbe gilt für das Folgebit: Bei einem Übergang von 0 auf 1 entsteht gfs ein Überschwinger, der sich im Zusammenspiel mit Reflektionen bei einer Folge 010 und 011 anders abbilden kann. Im folgenden Beispiel werden jeweils 4er-Gruppen durchgespielt und überlagert, also 00->01, 00->10 und 00->11 danach 01->01, 01-10 und 01-11 usw. 3er-Gruppen bei einer ausgewählten Bitfolge würden im Einzelfall ebenfalls genügen. Aus Darstellungsgründen sind hier Punkte statt Linien verwendet, da sich in der schemtatischn Darstellung in Excel sonst ein unschöner Rücklauf ergeben würde. Zudem sind dies die realen Messpunkte des Signals.<br />
<br />
== Teildatensatz Beginn==<br />
<br />
[[Datei:Eye-pattern-explain1.gif]]<br />
Signalverlauf der ersten drei Kombinationen 0000.0001.0010<br />
{{Absatz}}<br />
<br />
Beim Signalverlauf der ersten drei Kombinationen rangiert die Spannung bei 0,2V-3,2V und zeigt einen overshoot von 0,3V. Die Pegel sind erst in der Mitte des Bits voll eingeschwungen, was auch den Zacken links (abklingende "1" zu Beginn der 3. Gruppe) erklärt.<br />
<br />
== Teildatensatz Mitte==<br />
<br />
[[Datei:Eye-pattern-explain2.gif]]<br />
Signalverlauf des Übergangs von 0111.1000<br />
{{Absatz}}<br />
<br />
Bei den Kombinationen 0111 und 1000 erkennt man den Übergang von overshoot in den statischen Bereich der eigentlich richtigen Spannung, wenn die Bits lange genug stabil bleiben und sich nicht schon im nächsten Takt wieder ändern.<br />
<br />
== Gesamter Datensatz wenige Durchläufe==<br />
[[Datei:Eye-pattern-explain3.gif]]<br />
Signalverläufe aller Kombinationen überlagert.<br />
{{Absatz}}<br />
<br />
Bei sich schnell ändernden Bits kommt immer mehr die Bandbreite des Kabels und der Treiber/Empfänger zur Geltung sodass sich das Auge langsam schließt.<br />
<br />
Durch Aufsummieren aller statistisch auftretenden Signalverläufe und Histogrambildung entsteht das eigentliche Augendiagramm.<br />
<br />
== Gesamter Datensatz viele Durchläufe==<br />
<br />
[[Datei:Eye-pattern-explain4.gif]]<br />
Eingefärbtes Augendiagramm<br />
{{Absatz}}<br />
<br />
Das 2D-Histogrammbild, das zunächst für jeden Bildpunkt in der T,U-Ebene (Zeitpunkt/Phase sowie Spannung) die Wahrscheinlichkeit für das Auftreten eines Durchlaufs darstellt, wird mit einem Farbprofil ähnlich der Wärmekameras eingefärbt, um die Häufungen zu zeigen. Massgeblich ist letzlich die Breite und Höhe des Auges. Das Zentrum definiert den Punkt, an dem die Abtastung optimal ist.<br />
<br />
Zu berücksichtigen sind dabei auch die absoluten Pegel, die jeweils den Empfänger sicher durchsteuern müssen.<br />
<br />
= Beispiel I2S-Audio-Signal =<br />
<br />
[[Datei:Augendiagramm_fpga_scan_I2S_bit_signal.png]]<br />
<br />
Augendiagram eines I2S-Datensignals aufgenommen mit FPGA-basiertem DIY-Tester unter Nutzung eines 6-Bit-Musters (000.000 -> 111.111) = 64 Kombinationen und 4 überlagerten Durchläufen. Nutzfrequenz 49152 MHz Abtastung x 4, Cyclone II DE 115 FPGA. Am Ende der Leitung ist das Aug noch gerade ausreichend groß, um trotz Überschwinger und Störungen mit einem um etwa 200° verschobenen Takt einsynchronisieren zu können. Ein angeschlossener Chip arbeitet mit rund 180° fehlerfrei.<br />
{{Absatz}}<br />
<br />
= Interpretationsproblem =<br />
Bei differentiellen Leitungen entsteht bei der längeren Betrachtung der beiden Signale in den Fällen starker Störungen oftmals der Eindruck, dass das Auge geschlossen sei und keine Übertragung möglich ist. Dies muss jedoch nicht der Fall sein! Differenzielle Leitungen sind oftmals von Störungen in gleicher Weise betroffen und zeigen einen ähnlichen Spannungshub, der vom differenziellen Verstärker tolerant verarbeitet werden kann. Daher kommt mitunter dennoch wieder ein stabiles und jederzeit eindeutiges Signal heraus. Daher müssen differentielle Leitungen vor und nach dem Receiver betrachtet werden. Ist das nicht möglich, weil der Receiver in einem FPGA sitzt, muss der Logikpegel anhand von realen Messungen validiert werden.<br />
<br />
=Anwendungsbeispiele=<br />
* Lokalisierung von Problemen<br />
* Optimierung der Impedanzanpassung<br />
* Formelle Validierung<br />
* Bestimmung der Störreserve<br />
* Bestimmung maximale Bandbreite<br />
<br />
= Fußnoten =<br />
<references/><br />
<br />
=Links=<br />
<br />
http://www.mikrocontroller.net/topic/233342<br />
<br />
Suche im Forum nach<br />
* [http://www.mikrocontroller.net/search?query=Augendiagramm eye pattern]<br />
<br />
[[Kategorie:Signalverarbeitung]]<br />
[[Kategorie:Grundlagen]]<br />
<br />
=Weblinks=<br />
<br />
* http://it.e-technik.uni-ulm.de/archiv/World/Teaching/Experiment/eye/eye.html<br />
* https://home.zhaw.ch/~rur/ntm/unterlagen/ntmkap54opt.pdf</div>Engineerhttps://www.mikrocontroller.net/index.php?title=Augendiagramm&diff=105231Augendiagramm2022-05-28T17:22:04Z<p>Engineer: /* Gesamter Datensatz viele Durchläufe */</p>
<hr />
<div>Erklärung der Entstehung eines sogenannten Augendiagramms (engl. eye pattern)<br />
<br />
''von [[Benutzer:engineer|J.S.]]''<br />
<br />
= Bedeutung =<br />
<br />
Ein Augendiagramm ist eine bildliche Darstellung eines elektrischen Signalverlaufs, mit dessen Hilfe die Signalqualität einer digitalen Datenübertragung beurteilt werden kann. Es entsteht durch die grafische Überlagerung von mehreren Messungen eines Signals zu unterschiedlichen Zeitpunkten und Phasen. Es entsteht eine Art von Summation der statistisch verteilten Signalverläufe.<br />
<br />
Durch die systematischen und zufälligen Einflüsse, denen das Signal unterworfen ist, verlaufen die theoretisch unendlich steilen Übergänge von 0 auf 1 und umgekehrt dabei nicht mathematisch rechteckig oder konstant an derselben Stelle, sondern als mehr oder weniger breit verschmierte Rampen, wodurch im Zentrum die typische Form eines Auges entsteht. Dabei spielen die Impedanz, Dämpfung und Reflektionen auf der Leitung eine Rolle. <br />
<br />
= Datengewinnung =<br />
Das Signal wird mehrfach vermessen und die Ergebnisse phasenrichtig überlagert. Aus technischen Gründen müssen dabei mehrere mögliche Kombinationen von Bitfolgen betrachtet werden, weil der Übergang von z.B. 0 auf 1 auch davon abhängt, wie die Historie des Signals und dessen Zukunft aussieht. Es macht z.B. einen Unterschied, ob der Pegel aufgrund von 2 oder mehr Null-Bits schon eingeschwungen ist oder kurz zuvor erst ein 1-0-Übergang stattgefunden hat. Dasselbe gilt für das Folgebit: Bei einem Übergang von 0 auf 1 entsteht gfs ein Überschwinger, der sich im Zusammenspiel mit Reflektionen bei einer Folge 010 und 011 anders abbilden kann. Im folgenden Beispiel werden jeweils 4er-Gruppen durchgespielt und überlagert, also 00->01, 00->10 und 00->11 danach 01->01, 01-10 und 01-11 usw. 3er-Gruppen bei einer ausgewählten Bitfolge würden im Einzelfall ebenfalls genügen. Aus Darstellungsgründen sind hier Punkte statt Linien verwendet, da sich in der schemtatischn Darstellung in Excel sonst ein unschöner Rücklauf ergeben würde. Zudem sind dies die realen Messpunkte des Signals.<br />
<br />
== Teildatensatz Beginn==<br />
<br />
[[Datei:Eye-pattern-explain1.gif]]<br />
Signalverlauf der ersten drei Kombinationen 0000.0001.0010<br />
{{Absatz}}<br />
<br />
Beim Signalverlauf der ersten drei Kombinationen rangiert die Spannung bei 0,2V-3,2V und zeigt einen overshoot von 0,3V. Die Pegel sind erst in der Mitte des Bits voll eingeschwungen, was auch den Zacken links (abklingende "1" zu Beginn der 3. Gruppe) erklärt.<br />
<br />
== Teildatensatz Mitte==<br />
<br />
[[Datei:Eye-pattern-explain2.gif]]<br />
Signalverlauf des Übergangs von 0111.1000<br />
{{Absatz}}<br />
<br />
Bei den Kombinationen 0111 und 1000 erkennt man den Übergang von overshoot in den statischen Bereich der eigentlich richtigen Spannung, wenn die Bits lange genug stabil bleiben und sich nicht schon im nächsten Takt wieder ändern.<br />
<br />
== Gesamter Datensatz wenige Durchläufe==<br />
[[Datei:Eye-pattern-explain3.gif]]<br />
Signalverläufe aller Kombinationen überlagert.<br />
{{Absatz}}<br />
<br />
Bei sich schnell ändernden Bits kommt immer mehr die Bandbreite des Kabels und der Treiber/Empfänger zur Geltung sodass sich das Auge langsam schließt.<br />
<br />
Durch Aufsummieren aller statistisch auftretenden Signalverläufe und Histogrambildung entsteht das eigentliche Augendiagramm.<br />
<br />
== Gesamter Datensatz viele Durchläufe==<br />
<br />
[[Datei:Eye-pattern-explain4.gif]]<br />
Eingefärbtes Augendiagramm<br />
{{Absatz}}<br />
<br />
Das 2D-Histogrammbild, das zunächst für jeden Bildpunkt in der T,U-Ebene (Zeitpunkt/Phase sowie Spannung) die Wahrscheinlichkeit für das Auftreten eines Durchlaufs darstellt, wird mit einem Farbprofil ähnlich der Wärmekameras eingefärbt, um die Häufungen zu zeigen. Massgeblich ist letzlich die Breite und Höhe des Auges. Das Zentrum definiert den Punkt, an dem die Abtastung optimal ist.<br />
<br />
Zu berücksichtigen sind dabei auch die absoluten Pegel, die jeweils den Empfänger sicher durchsteuern müssen.<br />
<br />
= Beispiel I2S-Audio-Signal =<br />
<br />
[[Datei:Augendiagramm_fpga_scan_I2S_bit_signal.png]]<br />
Augendiagram eines I2S-Datensignals aufgenommen mit FPGA-basiertem DIY-Tester unter Nutzung eines 6-Bit-Musters (000.000 -> 111.111) = 64 Kombinationen und 4 überlagerten Durchläufen. Nutzfrequenz 49152 MHz Abtastung x 4, Cyclone II DE 115 FPGA.<br />
{{Absatz}}<br />
<br />
= Interpretationsproblem =<br />
Bei differentiellen Leitungen entsteht bei der längeren Betrachtung der beiden Signale in den Fällen starker Störungen oftmals der Eindruck, dass das Auge geschlossen sei und keine Übertragung möglich ist. Dies muss jedoch nicht der Fall sein! Differenzielle Leitungen sind oftmals von Störungen in gleicher Weise betroffen und zeigen einen ähnlichen Spannungshub, der vom differenziellen Verstärker tolerant verarbeitet werden kann. Daher kommt mitunter dennoch wieder ein stabiles und jederzeit eindeutiges Signal heraus. Daher müssen differentielle Leitungen vor und nach dem Receiver betrachtet werden. Ist das nicht möglich, weil der Receiver in einem FPGA sitzt, muss der Logikpegel anhand von realen Messungen validiert werden.<br />
<br />
=Anwendungsbeispiele=<br />
* Lokalisierung von Problemen<br />
* Optimierung der Impedanzanpassung<br />
* Formelle Validierung<br />
* Bestimmung der Störreserve<br />
* Bestimmung maximale Bandbreite<br />
<br />
= Fußnoten =<br />
<references/><br />
<br />
=Links=<br />
<br />
http://www.mikrocontroller.net/topic/233342<br />
<br />
Suche im Forum nach<br />
* [http://www.mikrocontroller.net/search?query=Augendiagramm eye pattern]<br />
<br />
[[Kategorie:Signalverarbeitung]]<br />
[[Kategorie:Grundlagen]]<br />
<br />
=Weblinks=<br />
<br />
* http://it.e-technik.uni-ulm.de/archiv/World/Teaching/Experiment/eye/eye.html<br />
* https://home.zhaw.ch/~rur/ntm/unterlagen/ntmkap54opt.pdf</div>Engineer