Juli/August 2016 | Nr. Nr. 547/5 547/548 48 www.elektormagazine.de
LEARN
DESIGN
SHARE
Software Defined Radio Foto-Türspion mit Raspberry Pi
FledermausDetektor deluxe
d d l e e i h S s s a l o n n i u d r A ü r f ü
a b e : g s u A r e e s I n d i e e t e e k o j e o r P P r o b a 8 L e t e e k o j e r o P P r e s e L 4 u r s e K - K e e r a w w t t f o 3 S s ... w e e i v e R 2 ! r ! u n d m e h Windows steuert Arduino • Akku-Technologien Akku-Technologien der Zukunft • Fernsteuerung für Media Player • Universeller Stromtastkopf für Oszilloskope • Fernsteuerung I2C-Bus-Isolator und -Pegelwandler • PC-Watchdog • Mini-Radio • NFCTag gehackt • Grundlagen: PLL • Filter auf dem Red Pitaya • Schaltungen für Klangeinsteller • Neues Display für Multimeter • Assembler Crashkurs:
Wetterstation für BBC micro:bit
Speicherinhalt ausgeben • Retronik: Audio-Messplatz • Web-Recherche: Media-Player Kodi • Recht: Niederspannung, EMV und
RED • Bemerkenswerte Bauteile: Magnetspeicher
G3078 E
(D) € 14,90 | CHF 27,00 | (A, B, L) € 16,00
»Unser Produktsortiment Produkt sortiment in einem ein em Wort: Tief Tiefenb enbreite.« reite.« Wolfgang Lex, Senior Area Manager Business Supplies, Tekkie seit 1987
Die besten Tekkie-Stories unserer innovativsten Kunden und Mitarbeiter jetzt auf tekkie.conrad.de Conrad. Tekkie Tekkie seit 1923. Ihr Pro-Partner und Berater für Lösungen in den Bereichen Bauelemente, Automation, Gebäudetechnik, Werkzeug, Messtechnik, Computertechnik u. v. v. m. Mit über 700.000 700.000 Artikeln für Ihr Business von morgen.
»Unser Produktsortiment Produkt sortiment in einem ein em Wort: Tief Tiefenb enbreite.« reite.« Wolfgang Lex, Senior Area Manager Business Supplies, Tekkie seit 1987
Die besten Tekkie-Stories unserer innovativsten Kunden und Mitarbeiter jetzt auf tekkie.conrad.de Conrad. Tekkie Tekkie seit 1923. Ihr Pro-Partner und Berater für Lösungen in den Bereichen Bauelemente, Automation, Gebäudetechnik, Werkzeug, Messtechnik, Computertechnik u. v. v. m. Mit über 700.000 700.000 Artikeln für Ihr Business von morgen.
Impressum 47. Jahrgang, Nr. 547/548 Juli/August 2016 Erscheinungsweise: 10 x jährlich (inkl. Doppelhefte Januar/Februar und Juli/August)
Verlag Elektor-Verlag GmbH Kackertstraße 10 52072 Aachen Tel. 02 41/955 09 190 Fax 02 41/955 09 013 Technische Fragen bitten Fragen bitten wir per E-Mail an
[email protected] [email protected] zu richten. Hauptsitz des Verlags Elektor International Media Allee 1, NL-6141 NL-6141 AV Limbricht Limbricht
Kreative Maker Auf Elektronikmessen gehört die Vorstellung unseres Magazins zu meinen Aufgaben. Vor einigen Jahren besuchte ich mit einer Kollegin aus der Anzeigenabteilung einen Mittelständler, dessen Linux-Evalkits ich sehr interessant fand. Nach kurzem Blättern durch eine Elektor-Ausgabe verflog das Interesse unseres Gegenübers. Man
Anzeigen: Anzeigen: Margriet Debeij (verantwortlich) Tel. Tel. 02 41/955 09 174 / Fax 02 41/955 09 013 Mobil: +49 (170) 550 539 6 E-Mail: margriet.debeij@eimworl
[email protected] d.com
wolle aufpassen, keine „Bastler“ anzulocken, so der Herr vom Marketing. Diese orderten immer nur in Einzelstückzahlen, machten aber häufig dem Support viel Arbeit. Wie an manchen anderen Ständen, die wir besuchten, wurde nicht ausgesprochen, dass man sich mit Pressearbeit und Anzeigen lieber auf die „Fachmagazine“ konzentrieren wollte. Neulich blätterte ich in einem solchen Fachmagazin und fand darin interessante Aussagen
Julia Grotenrath Tel. Tel. 02 41/955 09 177 / Fax 02 41/955 09 013 Mobil: +31 6 510 530 39 E-Mail: julia.grotenrath@eimworld.
[email protected] com
zur Maker-Szene. Der Geschäftsführer genau jenes Mittelständlers lobte, dass Maker
Es gilt die Anzeigenpreisliste Nr. Nr. 46 ab
anderen Herstellers präzisiert im selben Artikel: „Man muss es den Professional Makern
01.01.2016
sehr einfach machen, an die Muster zu kommen – einfach über das Internet bestellen“.
– angelockt durch Starter-Kits aus Hardware, OS und Tool Chain – schon Produkte „mit sehr professionellem Hintergrund“ auf die Beine gestellt hätten. Viele EmbeddedAnbieter reagierten nun darauf mit neuen Vertriebskanälen. Und ein Sales Director eines
Wie das Fachmagazin dann weiter ausführt, würden junge Talente aus der Szene häufig
Distribution: IPS Pressevertrieb GmbH Postfach 12 11, 53334 Meckenheim Tel. 0 22 25/88 01-0 Fax 0 22 25/88 01-199
Firmen gründen oder eine Karriere in etablierten Unternehmen starten. Ich kann nur erfreut feststellen: Der frische Wind, der durch die Maker-Szene in der Branche entstanden ist, hat nun auch die Chefetagen der klassischen Anbieter erreicht. Offenbar wurde erkannt, dass das kreative Potential von „Bastlern“ nicht zu unterschätzen ist und dass aus Hobbyisten häufig Professionals werden. Elektor sieht das genauso – übrigens schon seit vielen Jahren. In diesem Jahr laden
Der Herausgeber ist nicht verpflichtet, unverlangt eingesandte Manuskripte oder Geräte zurückzusenden. Auch
wir alle Maker ein, sich an unserem Wettbewerb zu beteiligen, den wir zusammen mit
wird für diese Gegenstände keine Haftung übernommen.
der Messe electronica veranstalten. In den drei Kategorien „Idee“, „Prototyp“ und
Nimmt der Herausgeber einen Beitrag zur Veröffentlichung Veröffentlichung
„Start-up“ gibt es wertvolle Preise zu gewinnen – siehe Seite 40.
an, so erwirbt er gleichzeitig das Nachdruckrecht für alle ausländischen Ausgaben inklusive Lizenzen. Die in dieser Zeitschrift veröffentlichten Beiträge, insbesondere alle Auf-
Jens Nickel
sätze und Artikel sowie alle Entwürfe, Pläne, Zeichnungen
Chefredakteur Elektor
einschließlich Platinen sind urheberrechtlich geschützt. Ihre auch teilweise Vervielfältigung und Verbreitung ist grundsätzlich nur mit vorheriger schriftlicher Zustimmung des Herausgebers gestattet. Die veröffentlichten veröffentlichten Schaltungen Schaltungen können unter Patent- oder Gebrauchsmusterschutz Gebrauchsmusterschutz stehen. Herstellen, Feilhalten, Inverkehrbringen und gewerblicher Gebrauch der Beiträge sind nur mit Zustimmung des Verlages und ggf. des Schutzrechts inhabers zulässig. Nur der private Gebrauch ist frei. Bei den benutzten WarenbezeichWarenbezeichnungen kann es sich um geschützte Warenzeichen handeln, die nur mit Zustimmung ihrer Inhaber warenzeichengemäß warenzeichengemäß
Unser Team Chefredakteur:
Jens Nickel (v.i.S.d.P.) (redakti (redaktion@elekto
[email protected]) r.de)
Ständige Mitarbeiter:
Dr. Thomas Scherer, Rolf Gerstend Gerstendorf orf
Leserservice:
Ralf Schmiedel
Korrekturen:
Malte Fischer
benutzt werden dürfen. Die geltenden gesetzlichen Bestimmungen hinsichtlich Bau, Erwerb und Betrieb von Sendeund Empfangseinrichtungen Empfangseinrichtungen und der elektrischen Sicherheit sind unbedingt zu beachten. Eine Haftung des Herausgebers
Internationale Redaktion: Thijs Beckers, Jan Buiting, Buiting, Mariline Thiebaut-Brodier
für die Richtigkeit und Brauchbarkeit der veröffentlichten Schaltungen und sonstigen Anordnungen Anordnungen sowie für die Richtigkeit des technischen Inhalts der veröffentlichten Aufsätze
Elektor-Labor:
und sonstigen Beiträge ist ausgeschlossen. ausgeschlossen.
© 2016 elektor international media b.v.
Harry Baggen, Ton Giesber Giesberts, ts, Luc Lemmens, Denis Meyer, Jan Visser, Clemens Valens
Grafik & Layout:
Giel Dols
Druck: Senefelder Misset, Doetinchem (NL) ISSN 0932-5468
www.elektormagazine.de
Juli/August 2016
3
Inhalt 47. Jahrgang – Nr. 547/548
Juli/August 2016
3 Impressum
ELEKTOR SDR RELOADED
6 Das Elektor-Netzwerk 40 News 42 ElektorBusiness Report Futuristisch-fantastische Akkus
SHIELD FÜR ARDUINO
80
128 Elektor World News 130 Hexadoku Sudoku für Elektroniker
LEARN
DESIGN
Ein Software Defined Radio ist ein universelles Werkzeug in der HF-Technik, das auch für Messungen einsetzbar ist. Die Eigenschaften des Empfängers werden durch Software definiert. In unserer heutigen Zeit bietet es sich an, das Frontend als Arduino-Shield zu realisieren.
SHARE
WETTERSTATION FÜR BBC MICRO:BIT
8 Willkommen bei LEARN 9 Bemerkenswerte Bauteile Magnetspeicher 10 Ein zweites Leben für den NFC-Tag (1)
IM DOPPEL MIT EINEM ERWEITERUNGSBOARD Das BBC micro:bit ist ein kleines Kraftpaket voller toller Funktionen und wird von einer Reihe ausgezeichneter Entwicklungstools und Bibliotheken unterstützt. Sein Platinensteckverbinder gewährt Zugang zu allen Features wie GPIO, analoge Eingänge, I²C und SPI. Wir haben mit dem micro:bit eine kleine Wetterstation gebaut.
14 Grundlagen: Die Magie der PLL 19 Review: Flowcode 7 22 Windows steuert Arduino Über USB und Bluetooth 30 CircuitMaker Tipps & Tricks (3) 32 Niederspannung, EMV und R&TTE Was gibt‘s Neues? 36 Assembler Crashkurs 2.2 Indirekte Adressierung
LEARN
DESIGN
SHARE
48 Willkommen bei DESIGN 49 Wetterstation für BBC micro:bit
72 iBaxandall Variationen von Klangeinstellern 80 Elektor SDR Reloaded SDR-Shield für Arduino
52 Stromtastkopf für Oszilloskope 56 Fledermaus-DetektorPLUS Frequenzteilung + Amplitudenerhaltung
88 Skip! Drahtlose „Next Track“-Taste für den Media-Player
67 Filter auf dem Red Pitaya Teil 1: FIR-Filter
92 Foto-Türspion mit Raspberry Pi Besucher-Check über das Smartphone
4
Juli/August 2016
www.elektormagazine.de
49
magazine LEARN
DESIGN
SHARE
114 Willkommen bei SHARE 115 Elektormagazine.de/Labs 116 Retronik Professioneller Audio-Messplatz 121 Aus dem Labor LCD am Rpi anschließen 122 ScanaQuad, der allerkleinste Logic-Analyzer 124 Projekt 2.0 Korrekturen, Updates und Leserbriefe 126 Web-Recherche Kodi: Medien-Player für alle
iBAXANDALL VARIATIONEN VON KLANGEINSTELLERN
Vorschau
72
Das kann dabei herauskommen, wenn man als Elektroniker „eben mal schnell“ einen Klangeinsteller aufbauen möchte: 1. googelt man nach der Standardschaltung, 2. fällt einem daran etwas auf und 3. will man es besser machen und entwickelt folglich eine neue Schaltungsvariante. Noch schlimmer: Man geht der Sache auf den Grund und kommt so auf mehrere neuartige Varianten.
Das nächste Heft ist wie immer randvoll gefüllt mit Schaltungsprojekten, Grundlagen sowie Tipps und Tricks für Elektroniker. Aus dem Inhalt:
• OBD mit Raspberry Pi • Lösungen für die Haus-Automatisierung • Bluetooth-Relais • RasPi steuert Lego • Netzgerät • Assembler Crashkurs: SPI und I2C
97 PC-Watchdog Automatischer Reset für durchdrehende PCs
• Filter auf dem Red Pitaya: IIR-Filter
100 My Tiny Radio Ein Radio - drei Plattformen
• Fragen und Antworten: MQTT
• Analoger Zufallsgenerator
Und vieles mehr!
105 MAXQ rettet Philips PM2535 Multimeter vor dem Verschrotten bewahrt 108 Universeller I2C-Bus-Isolator und Pegelwandler
Änderungen vorbehalten. Elektor September erscheint am 17. August 2016. Verkaufsstellen findet man unter www.pressekaufen.de.
www.elektormagazine.de
Juli/August 2016
5
Die Elektor-Community LEARN
DESIGN
SHARE
Elektor durchbricht die Schranken einer Zeitschrift und wird zur Community aktiver E-Ingenieure vom Anfänger bis zum Profi – begierig, überraschende Elektronik zu lernen, zu entwickeln, zu teilen. Elektor-Shop: 24 Stunden an 7 Tagen der Woche für jeden Elektroniker geöffnet! Dauerhafter Rabatt von 10% für alle GOLD- und GREEN-Mitglieder. www.elektor.de
Elektor-Zeitschrift: 10 Ausgaben pro Jahr voll gepackt mit Elektronik-Projekten, Artikeln, Besprechungen, Tipps und Tricks. www.elektormagazine.de
Elektor-Platinen-Service: Bestellung von Platinen als Einzelstück oder Kleinserie. www.elektorpcbservice.de
Elektor wöchentlich & papierlos: Wöchentlicher digitaler Newsletter. Kostenlos und aktuell. www.elektor.de/newsletter
Elektor Academy: Webinare, Seminare, Präsentationen, Workshops, DVDs und mehr = praxisorientiertes Lernen. www.elektor.de
Elektor-Bücher & DVDs: Arduino, Raspberry Pi, Mikrocontroller und vieles andere mehr. Im Online-Shop mit 10% Rabatt für Mitglieder! www.elektor.de/bucher
Elektor.TV: Reviews, Eindrücke, Unboxings und persönliche Journale. Anschauen heißt Erfahrung sammeln. www.elektor.tv
Elektor-Labs: Eigene Projekte vorstellen – von Anderen lernen – Anderen helfen und mit Anderen teilen. Elektor macht mit und testet Ihre Ideen! www.elektormagazine.de/labs
Treten Sie dem weltweit größten Elektroniker-Netzwerk bei! GREEN ✔ Zugang ✔ 10%
1,78 €/Woche
zum Elektor-Archiv
Rabatt auf Shop-Produkte
✔ Zugang ✔ 10%
2,45 €/Woche
zum Elektor-Archiv
Rabatt auf Shop-Produkte
GRATIS ✘ Zugang ✘ 10%
zum Elektor-Archiv
Rabatt auf Shop-Produkte
✔ 10x
Elektor jährlich (Digital)
✔ 10x
Elektor jährlich (Digital)
✘ 10x
Elektor jährlich (Digital)
✘ 10x
Elektor jährlich (Print)
✔ 10x
Elektor jährlich (Print)
✘ 10x
Elektor jährlich (Print)
✔
Exklusive Top-Angebote
✔ Zugang ✘ Elektor
Jahrgangs-DVD
Juli/August 2016
✔
Exklusive Top-Angebote
✔ Zugang
zu
www.elektor.de/green-mitglied
6
GOLD
www.elektormagazine.de
✔ Elektor
zu Jahrgangs-DVD
www.elektor.de/gold-mitglied
✔
Exklusive Top-Angebote
✔ Zugang ✘ Elektor
zu
Jahrgangs-DVD
www.elektor.de/newsletter
79
247031
1034
485
Länder
Mitglieder
Experten & Autoren
Literatur
235102 Monatliche Besucher
www.elektormagazine.de Eine ganze Welt mit Elektronik-News Elektroniker entdecken eine ganze Welt mit Projekten, News, Videos und mehr auf unserer neu überarbeiteten Website. Rechts oben kann man einfach die Sprache auswählen. Zur Wahl stehen Deutsch, Englisch, Französisch und Niederländisch. Die intelligenten Such-Tools erleichtern das Auffinden von Artikeln und weiterführender Information. Registrieren Sie sich als GREEN- oder GOLD-Mitglied; mit Ihrem persönlichen Login haben Sie vollen Zugriff auf den Online-Shop inklusive vieler Extras. Hier können Sie auch Ihren Account überarbeiten – und das gilt auch für Ihre Mitgliedschaft, das gedruckte Heft und den Newsletter Elektor .
: wöchentlich & papierlos Ein wöchentlicher Newsletter vollgepackt mit Information Mehr als 120.000 Elektroniker haben bereits ein Abonnement unseres kostenlosen ElektorNewsletters.
Jede Woche gibt es hier News,
Tipps, Trends und mehr direkt in ihrem digitalen Briefkasten. Außerdem erhalten Sie so Zugriff auf weitere exklusive Projekte, Spezialangebote und Rabatte für den Online-Shop. Registrieren Sie sich noch heute: www.elektor.de/newsletter
www.elektormagazine.de
Juli/August 2016
7
Willkommen bei LEARN
E R A H S
�on Jens
Nickel
Bastelkisten-Börse
N G I S E D
Eigentlich wollte ich hier wieder etwas über die Fortschritte auf meiner Reise in das Internet of Things berichten. Am ziemlich bewölkten Pfingstmontag hatte ich mir vorgenommen, das bekannte Xmega-Webserver-Board als Pilotplattform für einen direkten Anschluss einer Platine ans Netzwerk zu benutzen (ohne den Umweg über einen PC als Relaisstation). Doch trotz einer guten Ausgangslage – ich hatte ja schon Democode und Bibliotheksfiles vorliegen, unter anderem für das WIZ820io-Netzwerkmodul – wurde nichts draus. Router und (Programmier-)Arbeitsplatz befinden sich in genau gegenüberliegenden Ecken meiner Wohnung; und zu meiner Überraschung reichten 10 m Netzwerkkabel nicht aus. Ich brauchte 15 m, doch am Feiertag hatten ja alle möglichen kommerziellen Bezugsquellen geschlossen. Sicher gab es in Köln noch den einen oder anderen gleichgesinnten Elektroniker, der mir hätte aushelfen können, und eine kleine Fahrt wäre mir nicht zu beschwerlich gewesen. Aber wie denjenigen oder die jenige finden? Hierüber müsste man mal nachdenken, denn das Internet bietet ja inzwischen eine Fülle von Möglichkeiten!
Neues aus der Cloud In der Zwischenzeit geht die Entwicklung in Sachen IoT mit Riesenschritten weiter, man kommt kaum damit nach, sich alles anzusehen und den eigenen Horizont ständig zu erweitern. Auch der große deutsche Distributor Conrad lädt nun potentielle User mit einer eigenen Lösung dazu ein, Daten in die Cloud hochzuladen und zu visualisieren (https://conradconnect.de). Und von meinem Ex-Kollegen Jaime (nun beim Berliner Startup Relayr tätig) bekam ich eine Mail, die ich hier in Auszügen übersetze: „Hi Jens! Wahnsinn, wie die Zeit vergeht… Ich muss mal wieder bei euch Jungs vorbeischauen… Wir sind gerade dabei, eine App zu launchen, mit dem ein Smartphone in eine Art Sensorkit verwandelt wird – und ich dachte mir, du willst das vielleicht mal ausprobieren? Die App wird komplett open source sein, alles wird bei GitHub reingestellt…“
N R A E L
Na das klingt doch alles interessant – klar gucke ich mir das mal an. Mehr darüber finden Sie in Kürze in unserer Online-Ausgabe unter www.elektormagazine.de !
Arduino ferngesteuert Und noch mal was gelernt: Profi-Autor und Software-Spezialist Tam Hanna zeigt in seinem Artikel, wie man mit einem Windows-Smartphone oder –Tablet einen Arduino fernsteuern kann – über USB oder kabellos per Bluetooth. Das Firmata-Protokoll kannte ich bisher noch nicht; interessant, dass Microsoft dafür sogar eine eigene .NET-Bibliothek bereitstellt. Mehr darüber lesen Sie in diesem LEARN-Abschnitt. (160012)
8
Juli/August 2016
www.elektormagazine.de
����������
����
�
&
�
����� & ������
��������
Magnetspeicher Bemerkenswerte Bauteile Von Neil Gruending (Kanada)
Heutzutage kennen wir eine Vielzahl von Möglichkeiten, Informationen auf elektronischem Wege zu speichern: SRAM, DRAM, Flash und EEPROM. Direktzugriffsspeicher (random access memory RAM) wie SRAM und DRAM nutzen dazu die Kapazität, was sie unkompliziert und sehr schnell macht. Aber ihr Nachteil ist, dass alle Informationen verloren sind, wenn der Speicher nicht mit Strom versorgt wird. Nichtflüchtige Speicher wie Flash oder EEPROM erhalten ihre Inhalte, wenn sie abgeschaltet werden, allerdings auf Kosten der Geschwindigkeit. Zudem sind komplexere Zugriffsmethoden wie Speicher-Paging erforderlich. Magnetspeicher verbinden die positiven Eigenschaften beider Speicherarten. Eines der ersten Modelle war in den 50er und 60er Jahren der Magnetkernspeicher (magnetic core memory), zu diesen Zeiten viel schneller als andere Speichermethoden wie die Williamsröhre, die auf Kathodenstrahlröhren basierte. Der Name beruht auf den magnetischen Ringkernen, durch die Drähte als Schreib und Leseleitungen geführt wurden. Jeder Ringkern konnte durch die Steuerung seiner magnetischen Richtung auf 1 oder 0 gesetzt werden. Da aber jeder Lesevorgang die magnetische Orientierung des Ringkerns löschte, war zum Datenerhalt noch eine zusätzliche Schaltung erforderlich. Der Magnetkernspeicher erwies sich zwar als sehr zuverlässig und konnte sogar einem EMP-Impuls widerstehen, war aber sehr schwierig herzustellen und deshalb auch ziemlich teuer, so dass er schließlich Ende der 60er Jahre vom SRAM (static random access memory) abgelöst wurde. Das Computer History Museum in Mountain View, Kalifornien, zeigt eine feine Sammlung von Magnetkernspeichern auf seiner Website. Wenn Sie mal im Museum vorbeischauen, sollten Sie im Gift Shop einen schönen Untersetzer mit einem MM-Bild
erwerben. Eine moderne Version des Magnetspeichers ist der magnetoresistive RAM-Speicher (MRAM), der in den letzten 30 Jahren entwickelt wurde. Frühe Versionen besaßen ferromagnetische Platten mit einer isolierenden Zwischenschicht. Eine Platte hatte ein permanentes Magnetfeld, die andere Platte war magnetisierbar, um ein Bit zu speichern.
Der logische Zustand der Zelle wurde durch Messung des Widerstands bestimmt, der abhängig war von der magnetischen Orientierung der beschreibbaren zur permanenten Platte. Neuere MRAMs nutzen das Drehmoment des Spin-Transfers von Elektronen in ihren Speicherzellen und kommen mit sehr wenig Energie aus. Eine weitere Variante ist der ferroelektrische RAM-Speicher (FRAM), der gleichzeitig mit dem MRAM entwickelt wurde. Ein herkömmlicher DRAM-Speicher verwendet einen Transistor und einen Kondensator pro Speicherzelle, die in eine FRAM-Zelle verwandelt wird, wenn ein ferroelektrisches anstelle des normalen dielektrischen Materials eingesetzt wird. Das ferroelektrische Material ändert das normalerweise lineare Verhalten der Zelle und fügt eine magnetische Hysterese hinzu, was gleichbedeutend mit einer nichtflüchtigen Eigen-
schaft ist. Das Schreiben der Daten ist ziemlich einfach, aber um eine FRAM-Zelle zu lesen, ist ein Transistor nötig, der die Zelle in einen bekannten Zustand bringt. Dann wird die Zelle überwacht, um zu sehen, ob das ferroelektrische Material einen Stromfluss verursacht. Klar, die Zelle ist anschließend gelöscht und muss neu beschrieben werden. Sowohl MRAMs und FRAMs werden heute von verschiedenen Firmen hergestellt. Bei MRAMs liegt der Fokus auf Speicherdichte und Geschwindigkeit, während FRAMs für Low-Power-Anwendungen prädestiniert sind. So oder so, es sind sehr interessante Bauteile! (160016) Bilder 1, 2, 3: Wikimedia
Steuern Sie weitere Bauteile hinzu: Mailen Sie an
[email protected].
www.elektormagazine.de
Juli/August 2016
9
�����
������
�����
Ein zweites Leben für den NFC-Tag (1) Zugang zum Innenleben Von Patrick Gueulle (Frankreich)
Abo-Mitglieder von Elektor erhielten mit dem Januar/ Februar-Heft dieses Jahres eine kostenlose Smartcard mit einem NFC-Chip ST25TA02K. Der Tag war mit einer URL programmiert, die man mit einem Smartphone lesen konnte, wenn dieses NFC unterstützt. Hier wollen wir zeigen, wie die URL gehackt werden kann, um der Karte mit dem Standard NFC Type 4 neues Leben einzuhauchen.
Nahfeldkommunikation, auf gut Deutsch auch Near Field Communication, verwendet gewöhnliche RFID-Technologie, wendet sie aber etwas „intelligenter“ an. Fast jede Chipkarte, die drahtlose Kommunikation unterstützt, setzt dabei einen NFC-Tag ein. Die Standards für NFC werden vom NFC-Forum festgelegt. Dieses Forum möchte die Austauschbarkeit von Karten und Techniken so weit wie möglich fördern und hat dazu eine Reihe von standardisierten Types von NFC definiert.
Deshalb ist es wichtig, dass NFC-Karten diesen Types entsprechen. Es gibt aber gewisse Halbleiterhersteller, die sich wenig um die Vorgaben des NFC-Forums kümmern und Karten beziehungsweise Tags auf den Markt bringen, die sich nur teilweise an die Regeln halten. Eine der ersten nativen NFC-Tags auf dem Markt war der TopazChip von Innovision (Bild 1), einer Firma, die mittlerweile zu Broadcom gehört. Dieser Tag erfüllte vollständig die Spezifikationen des Type 1, besaß aber nur 96 Byte nutzbaren Speicher
Bild 1. Die Topaz-Card von Innovision erfüllt die Type-1-Spezifikationen des NFC-Forums.
Bild 2. Mifare Ultralight von NXP ist ein einfach zu konfigurierender NFC-Tag des Type 2.
Von NFC Type 1 nach Type 4
10
Juli/August 2016
www.elektormagazine.de
����������
����
und war deshalb nur für einfache Anwendungen geeignet. Dann kam die Mifare Ultralight von NXP (Bild 2), eine Type-2-Karte, die ganz bequem zu konfigurieren ist, aber sogar nur 64 Byte nutzbaren Speicher zur Verfügung stellen konnte. Natürlich kann man heutzutage modernere Versionen mit mehr Speicher kaufen (zum Beispiel Tags aus der Ultralight-C- oder NTAG-Familie), aber die kleineren Pioniere weisen doch noch einen wichtigen Vorteil auf, nämlich einen sehr niedrigen Preis. Type 3 mit dem Spitznamen Felica taucht eigentlich nur in Asien auf, so dass wir diese Karten hier außer Acht lassen können. Interessanter ist die populäre Familie Mifare Classic oder „Standard“ (Bild 3), die speziell für NFC formatiert ist und manchmal auch Type 7 genannt wird. Diese Tags haben einen viel größeren Speicher (1024 Byte) und entsprechen auch dem Standard, verwenden aber ein sehr speziell auf NXP zugeschnittenes Kommunikationsprotokoll. So sind diese Tags auch nur mit NFC-Chipsets von NXP auszulesen. Wenn das Smartphone mit einem NFC-Chipsatz eines mit NXP konkurrierenden Herstellers ausgestattet ist, lassen sich die Mifare-Classic-Tags nicht lesen. Aus diesem Grund sind diese Tags kaum geeignet für Open-source-Projekte. Bei Type 4 wird ganz anders vorgegangen, was ihn sehr attraktiv für uns macht. Das Problem mit Type 1 und Type 2 ist, dass Leseeinrichtung und Tag auf einem niedrigen Niveau kompatibel sein müssen und das bedeutet, dass die Auswahl an Leseplattformen recht beschränkt ist. Type 4 erkennt dagegen vollständig die APDU-Befehle nach ISO7816-4 (APDU T=CL, contactless) und wird auch durchweg bei Smartcards eingesetzt, die einen Mikroprozessor an Bord haben. Die ersten Type-4-Tags wurden für die beiden Karten DESFire (Bild 4) und JCOP entwickelt. Sie sind zwar nicht billig, aber die Tags haben einen „aktiven Inhalt“, so dass ein höherer Preis doch gerechtfertigt ist. In der Karte steckt eine Firmware, die komplexe Aufgaben erfüllen kann, zum Beispiel eine Ver-
�
&
�
����� & ������
��������
Wie war das nochmal? ISO 14443 betrifft eine Reihe von Normierungen für drahtlose Nahfeldkommunikation auf 13,56 MHz mit Identifikations-, kontaktlosen Chip- und NFC-Karten. Teil 1: physische Eigenschaften Teil 2: HF-Leistung und Signalschnittstelle Teil 3: Initialisierung und Konfliktdetektion Teil 4: Übertragungsprotokoll Das A in der Typbezeichnung ST25TA02K gibt an, dass dieser NFC-Tag das Protokoll Type A der Norm 14443-4 verwendet. Allerdings weichen, wie erwähnt, die Hersteller oft etwas von der Norm ab. Hier einige Beispiele: Mifare Classic ist ein Markenname von Philips, jetzt NXP, für ein Protokoll, das 14443-1, -2 und -3 (Type A) genügt, nicht aber 14443-4, mit oder ohne Unterstützung des CRYPTO1-Algorithmus. Mifare Ultralight ist eine Variante von Mifare Classic, die kein CRYPTO1 unterstützt. LEGIC RF ist eine eigene „Norm“ des Herstellers, die aber scheinbar auf der ISO14443 beruht. So arbeiten beide zum Beispiel auf 13,56 MHz. FeliCa ist ein herstellereigenes Protokoll, das von Sony entwickelt wurde. In dem Artikel haben wir uns mit APDU-Befehlen beschäftigt. APDU steht für A pplication P rotocol Data U nit . In diesen Dateneinheiten werden Mitteilungen zwischen NFC-Tag und Lesegerät ausgetauscht. APDU ist ein standardisiertes Format, beschrieben in der Norm ISO 7816-4 für Organisation, Sicherung und Austauschbefehle . Der Befehl Application Selection ist beispielsweise wie folgt aufgebaut: C-APDU of the NDEF Tag Application Select Command Name –
CLA
INS
P1
P2
Lc
Data
Le
0x00
0xA4
0x04
0x00
0x07
0xD27600 00850101
0x00
Class byte Select instruction code P1 field P2 field Number of bytes of data Application ID Le field
(Quelle: Tabelle 22 im Datenblatt von STMicroelectronics [3])
Bild 3. Mifare Classic verfügt über 1024 Bytes Speicher, aber ist nur beschränkt kompatibel.
Der Befehl ist aus einer Anzahl von Feldern einer bestimmten Länge (in Bytes) aufgebaut. CLA heißt class byte und gibt an, um welche Art von Befehl es sich handelt, beispielsweise interindustry für standardisiertes oder proprietary für ein herstellereigenes. INS steht für die Sorte des Befehls wie Lesen oder Schreiben oder anderes. P1 und P2 sind Befehlsparameter, zum Beispiel Positionen innerhalb einer Datei. Lc ist die Anzahl der Bytes in diesem Befehl. Data ist der eigentliche Befehlsinhalt. Le ist die Anzahl der Bytes, die als Antwort erwartet wird (wenn erforderlich).
www.elektormagazine.de
Juli/August 2016
11
�����
������
�����
Rolle, es muss nur ein geeigneter Treiber installiert werden. Wenn wir ein CCID-kompatibles Lesegerät wie den beliebten ACR122 verwenden, so kann man sogar einen generischen Treiber verwenden. Alles, was wir beim NFC-Tag ändern wollen, geschieht mit Hilfe weniger APDU-Befehle. Ein wichtiger Befehl ist Select . Alle Befehle werden im 50-seitigen Datenblatt des ST25TA02K (DM00179392.PDF) erläutert, das man bei STMicroelectronics herunterladen kann [3]. Wenn wir unseren NFC-Tag an ein Lesegerät halten, müssen wir einen Befehl senden. Dieser Befehl heißt NDEF Application Select command. NDEF steht dabei für NFC Data Exchange Format . Ein solcher Befehl ist nichts anderes als ein Byte-String, der hexadezimal notiert ist als: Bild 4. MIFARE DESFire von NXP ist einer der ersten Type-4-NFC-Tags.
00A4040007D2760000850101.
Im Kasten wird kurz erläutert, wie dieser String aufgebaut ist. Es gibt auch eine Variante des Befehls, die allerdings nicht gut dokumentiert ist: 00A4040007D2760000850100.
Damit wird der Tag kompatibel mit dem Speicher-Mapping Version 1.0, im ersten Fall mit der zurzeit gängigeren Version 2.0. Nach diesem Befehl können wir aus folgenden Dateien wählen: • einen Capability Container (CC), der Informationen über
die Eigenschaften des Tags enthält, • der Systemdatei (spezifisch für STMicroelectronics) • oder der NDEF-Datei, die die „Nutzlast“ (payload) des
Tags enthält.
Bild 5. Mit einem kontaktlosen PC/SC-Lesegerät an einem PC (und Software, die frei im Netz verfügbar ist) liest man einen Tag aus.
Die ersten beiden Dateien lassen wir in Ruhe, die dritte ist dagegen umso interessanter, da sich damit bestens herumspielen lässt. Spielen mit der URL
schlüsselung. So ist es möglich, eine kontaktlose BasicCard (ZC7.5) mit wirklich sicheren und „intelligenten“ NFC-Funktionen auszustatten. Dabei kommt die größere Speicherkapazität natürlich gerade recht. Der ST25TA02K ist ein NFC-Tag von STMicroelectronics, der vollständig mit Type 4 kompatibel ist. Er besitzt keinen Mikroprozessor und ist deshalb recht preisgünstig, aber verfügt über 256 Bype EEPROM-Speicher. Das Konzept erinnert etwas an den CryptoMemory von Atmel, ein synchroner Kontaktchip ohne Mikroprozessor und deshalb „harter“ Logik, die aber gehorsam Befehle asynchroner Karten ausführt (APDU T=0). Diese brillante Idee stammt von Gemplus (jetzt Gemalto) und wurde schon 1998 patentiert, kurz bevor Gemplus die GemClub-Memo-Karte auf der CARTES-Messe in Paris vorstellte. Dialog aufnehmen
Der ST25TA02K kann von Applikationen auf bestimmten Smartphones gelesen und beschrieben werden. Man kann noch sehr viel mehr damit anfangen, allerdings ist das Ganze mit ein paar nicht auflösbaren Problemen behaftet. Darum verwenden wir lieber eine Alternative: einen kontaktlosen PC/SC-Leser in Verbindung mit einem Computer. Marke und Typ spielen keine
12
Juli/August 2016
www.elektormagazine.de
Der Befehl zur Auswahl ist 00A4000C020001. Die letzten beiden Ziffern bilden den Dateinamen 0001h (der Capability Container ist E103h, die Systemdatei E101h). Ein Lesebefehl besteht aus zwei Bytes, nämlich einem Klassifizierungsbyte (class byte) gefolgt von einem Instruktionscode. Der Instruktionscode ist immer ReadBinary = B0. Das Class Byte lautet 00h für „normales“
Lesen (ReadBinary ), A2h steht für extended ReadBinary. Der Unterschied ist, dass ReadBinary einen Fehlercode zurückgibt (6282h), wenn man über das Ende der Nutzlast hinaus liest, während extended ReadBinary den gesamten Speicherraum für die Datei von Anfang bis Ende liest, also alle 255 Bytes. Wenn Sie sich weiter in diese Materie vertiefen wollen, sollten Sie das Datenblatt [3] studieren. Die ersten beiden Bytes einer NDEF-Datei, die sich mit dem Befehl 00B0000002 aufrufen lassen, enthalten Angaben über die Länge des Inhalts. Auf der Karte aus dem Wettbewerb ist 00 24 zu lesen. Es folgen demnach 36 zu lesende Bytes (24 hexadezimal ist 36 dezimal). Mit einem Offset von 2 Bytes (02h) wird der Befehl zu 00B0000224. Mit dem Befehl A2B00002FE lesen wir die Datei bis an ihr Ende, dann sehen wir auch den verwendeten Speicherplatz. In beiden Fällen erhalten wir eine NDEF-Mitteilung mit der URL zur Teilnahme an dem Entwick-
����������
����
�
&
�
����� & ������
��������
e g i e z n A
lungswettbewerb [1], folgendermaßen kodiert: D1 01 20 55 02 65 6C 65 6B 74 6F 72 6D 61 67 61 7A 69 6E 65 2E 63 6F 6D 2F 73 74 6D 69 63 72 6F 2D 6E 66 63
Ab dem sechsten Byte (von 65h bis 63h) ist der Text elektor in ASCII-Code zu finden. Das vormagazine.com/stmicro-nfc laufende Byte 02h ist die Standard-Abkürzung für https://www . Man kann auch http://www (ohne „s“) mit 01h angeben. Es gibt noch mehr nützliche Abkürzungen, wie das Datenblatt zeigt. Byte 55h ist der große Buchstabe U, der angibt, dass eine URL folgt (oder besser gesagt, eine URI). 20h ist die Länge der URI, die vier Byte kürzer ist als die ganze Mitteilung mit 24h. Wenn man nur die URL ändern möchte, muss man sich aber nicht weiter damit befassen. Wenn wir einen Fehler machen, so wird der Tag nicht antworten, wenn man versucht, ihn mit einem Smartphone auszulesen. Wenn man die URL beispielsweise in http://www.elektormagazine.com ändern möchte, muss man nur drei Bytes anpassen. Man gibt zweimal den Befehl UpdateBinary ( 00 D6). Mit dem ersten 00D600060101 verändern wir https in http; mit dem zweiten 00D60000050018D10114 werden die Bytes für die Länge geändert. Das Ende der Datei befindet sich dann genau nach dem „com“. Der Rest der URL (/stmicro-nfc) spielt dann keine Rolle mehr, kann aber immer noch mit dem Befehl extended ReadBinary ausgelesen werden, mit dem ja der gesamte Speicherraum gelesen wird. Wenn Sie sich gefragt haben, wie im Tatort die Polizei immer problemlos gelöschte SMS auf einer „verdächtigen“ SIM-Karte lesen kann, dann wissen Sie jetzt die Antwort: Es wird dabei stets die gesamte Karte gelesen. Deshalb kann man bei unserer Karte auch die ursprüngliche URL mit den beiden Befehlen 00D600060102 und 00D60000050024D10120 wieder herstellen! Will man überprüfen, ob alles gut funktioniert hat, kann man ein beliebiges PC-Lesegerät anschließen und den NFC-Tag mit einem Programm auslesen, das unter http://www.nfcwizard. com/fr/actions-fr/read-fr/ (Bild 5) verfügbar ist. Leider ist diese Website im Moment aus technischen Gründen geschlossen; Sie können es in der Zwischenzeit einmal mit dem Programm probieren, das man von https://gototags.com/products/windowsapp/ downloaden kann. Funktioniert alles nach Wunsch, kann man anfangen, sich mit Android zu beschäftigen. Doch dies werden wir erst im zweiten Teil des Artikels machen.
PicoScope 5000 Serie ®
OSZILLOSKOPE MIT FLEXIBLER AUFLÖSUNG DIE OSZILLOSKOPE DER PICOSCOPE 5000 SERIE MIT FLEXIBLER AUFLÖSUNG HABEN EINE AUSWÄHLBARE AUFLÖSUNG VON 8 BIS 16 BIT UND ABTASTGESCHWINDIGKEITEN BIS 1 GS/S.
Moderne elektronische Baugruppen und Geräte erzeugen eine Vielzahl von sehr schnellen und sehr hochauflösenden Signalen. Die Fähigkeit, kleine Signale in Gegenwart von größeren aufzuspüren und zu charakterisieren ist der Schlüssel zur Prüfung elektronischer Designs der nächsten Generation. Die Präzision eines Oszilloskops wird bestimmt durch seine Auflösung und Genauigkeit. Hier sehen Sie, wie sich unterschiedliche Auflösungen bei Oszilloskopen auswirken: Das Signal im Screenshot wurde zunächst mit 8-bit-Auflösung erfasst; ein 64x-Zoom zeigt die Grenzen der 8-bit-Auflösung. Das gleiche Signal, erfasst mit einem PicoScope, das auf 12-bit-Auflösung eingestellt wurde, zeigt Details, die im 8bit-Modus nicht sichtbar waren.
(150805)
Weblinks
Zu dem Wettbewerb gehören zwei Elektor-Artikel: [1] STMicroelectronics NFC-Technologie mit ST25TA, Elektor Januar/Februar 2016, www.elektormagazine.de/magazine/elektor-201601/28658 und [2] Erste Schritte mit den NFC-Tags der ST25TA-Familie, Elektor März/April 2016, www.elektormagazine.de/magazine/elektor-201603/28782 [3] Dokumentation der Befehle, STMicroelectronics: www.st.com/web/en/resource/technical/document/datasheet/DM00179392.pdf
Alle Modelle inkl. Software und 5 Jahren Gewährleistung. Die Software umfasst standardmäßig Messungen, Spektrum-Analyse, erweiterte Trigger, farbiges Nachleuchten, serielles Decoding (16 Protokolle inkl. 1-Wire, CAN, Ethernet, I²C, I²S, LIN, RS-232, SENT, SPI, USB 1.1), Masken, mathematische Kanäle; mit KOSTENFREIEN Updates. Außerdem kostenfreies Software Development Kit erhältlich.
www.picotech.com /PS469 www.elektormagazine.de
Juli/August 2016
13
�����
������
�����
Die Magie der PLL Stabile frequenzvariable Signale mit VCO und PLL Von Robert Lacoste (F)
Zauberei ist eigentlich nicht im Spiel, wenn es um eine Schaltungstechnik geht, die Phase Locked Loop oder kurz PLL genannt wird. Der PLL ging früher der Ruf voraus, hoch kompliziert zu sein. Heute gibt es unkompliziert nutzbare Tools, die PLLs berechnen und simulieren.
10MHz +/–10ppm
122.4MHz +/–10ppm
PLL 10MHz +/–10ppm, mit Jitter
10MHz +/–10ppm, Jitterfrei
PLL
Bild 1. Zwei typische Anwendungen der PLL: Erzeugen periodischer frequenzvariabler Signale und Entfernen der Jitters aus periodischen Signalen.
Im vorangegangenen Beitrag zum Thema Schwingquarze [1] haben wir gezeigt, dass mithilfe von Quarzen hochpräzise, frequenzstabile Oszillatoren realisierbar sind. Allerdings sind di e Frequenzen dieser Oszillatoren nicht variabel, sie sind an die Frequenz des Quarzes gebunden. Dem steht g egenüber, dass zahlreiche Systeme Signale benötigen, die bei hoher Stabilität frequenzvariabel sind. Ein Messsender im Laboreinsatz, um nur ein Beispiel zu nennen, muss stabile Signale im gesamten überstrichenen Frequenzband liefern. Die Anzahl der Beispiele ließe sich endlos fortsetzen, die Lösung bleibt jedoch gleich: Es ist die PLL, die Phase-locked Loop, was ins Deutsche übersetzt so viel wie Phasenverriegelte Schleife heißt. Eine PLL liefert ein frequenzvariables Ausgangssignal, bei dem die Phase starr an die Phase eines am Eingang liegenden Bezugssignals gekoppelt ist. Dadurch wird erreicht, dass die Frequenzgenauigkeit und Stabilität des Ausgangssignals exakt den Eigenschaften des Bezugssignals entspricht. Wenn ein Oszillator beispielsweise ein Bezugssignal mit der Frequenz 10 MHz und der Genauigkeit 1 ppm ( part per million) liefert, hat die Frequenz des PLL-Ausgangssignals auf jeder beliebigen einstellbaren Frequenz exakt die gleiche Genauigkeit. Eine weitere wichtige Eigenschaft einer PLL ist ihre Fähigkeit, sogenannten Jitter aus periodischen Signalen zu entfernen. Jitter werden die Phasenschwankungen periodischer Signale genannt, die auf dem Oszilloskop als „Zittern“ der Flanken in Erscheinung treten. Das Auftreten von Jitter kann sich bei der Übertragung von Daten äußerst störend auswirken. Das PLL-Prinzip ist in Funkempfängern ebenso vertreten wie in Ether-
14
Juli/August 2016
www.elektormagazine.de
net-Schnittstellen-Komponenten oder Bausteinen für digitale Audiostreams. In Bild 1 sind die klassischen Anwendungen der PLL dargestellt. Spannungsgesteuerter Oszillator
Kernstück eines PLL-Systems ist der VCO ( Voltage Controlled Oscillator ), ein spannungsgesteuerter Oszillator. Meistens hat ein VCO die Gestalt eines integrierten Bausteins, um das Innenleben muss sich nur der Hersteller kümmern. Doch es kann nicht schaden, zumindest das Prinzip etwas näher kennenzulernen. Ein Oszillator entsteht, wenn das Ausgangssignal eines Verstärkers auf seinen Eingang rückwirkt. Dabei müssen zwei Bedingungen erfüllt sein: Die Verstärkung muss bei der Frequenz des schwingenden Signals größer 1 sein, und die Phase des Eingangssignals muss mit der Phase des Ausgangssignals übereinstimmen. Wir haben mit dem CAD-Programm Proteus von Labcenter einen Mini-Verstärker mit lediglich einem Transistor simuliert, er ist in Bild 2 dargestellt. Die Verstärkung liegt im Bereich 250 kHz...20 MHz über der 0-dB-Linie, bei ungefähr 13 MHz ist das Eingangssignal mit dem Ausgangssignal in Phase. Mit einer Rückkopplung zwischen Ausgang und Eingang schwingt die Schaltung auf dieser Frequenz. Die Simulation, die Bild 3 wiedergibt, bestätigt den Betrieb als Oszillator. Die berechnete Frequenz beträgt 14,6 MHz, weil die Rückkopplung eine Änderung der Lastimpedanz herbeiführt. Wenn wir diesen Oszillator zu einem VCO erweitern wollen, müssen wir eine Komponente hinzufügen, die ihren Wert abhängig von einer Spannung variiert. Die gängigste Lösung ist eine
����
����������
�
&
�
����� & ������
��������
+6V +6V
SPICE OPTIONS : TMA X=1ns TS IM=50 0us -500 .2us INTEGR=TRAPEZOIDAL
R2
R2
220
220 OUTPUT OUTPUT
R1
R1
10k INPUT
C1 1nF
R3 470
L1
C2
10k
Q1
C1
BF259
1uH
L1
R3
220pF
C3
C4
470pF
100pF
Bild 2. Die Verstärkung dieser Schaltung hat zwischen 250 kHz und 20 MHz positive Werte. Wie die rote Kurve zeigt, ist die Phasenverschiebung bei etwa 13 MHz gleich 0.
Varicap-Diode, sie ist so konstruiert, dass die Kapazität des internen pn-Übergangs, wie in Bild 4 dargestellt, eine definierte Funktion der angelegten Sperrspannung ist. Über Drossel L2, die Signalanteile hoher Frequenzen sperrt, wird an die Varicap-Diode eine Gleichspannung im Bereich 0...25 V gelegt. Die Simulation bestätigt, dass die Phasenantwort und somit auch die Frequenz des Ausgangssignals von der angelegten Spannung abhängt: Entstanden ist ein VCO! Diese Simulation eines VCO hat zwar stark vereinfachenden Charakter, doch das Prinzip ist deutlich. VCOs in integrierter Form gehören zur Produktpalette zahlreicher Hersteller wie Analog Devices und Maxim, integrierte Module werden unter anderem von Minicircuits und Sirenza gefertigt. Im schon etwas betagten CMOS-Baustein CD 4046 ist ein VCO integriert, der sich für unkritische Anwendungen eignet, und sogar der klassische Timer 555 ist mit passender Beschaltung als VCO brauchbar. Die angestrebten Präzisionseigenschaften lassen sich nur erreichen, wenn der Filterung des steuernden Signals Aufmerksamkeit gewidmet wird. Jede Art von Rauschen wirkt sich unweigerlich als Frequenzrauschen und folglich als Phasenrauschen des Ausgangssignals aus. Das Phasenrauschen steht mit der Bandbreite des Frequenzbereichs in engem Zusammenhang. Wenn dem steuernden Signal ein bestimmter Rauschanteil überlagert ist, führt dies bei einem VCO mit einer Bandbreite von nur einigen Megahertz zu vergleichsweise geringem Phasenrauschen. Der gleiche Rauschanteil hat bei einem VCO mit einer Bandbreite von 1 GHz bis 2 GHz ein wesentlich höheres Phasenrauschen zur Folge. Ein VCO, der nur ein äußerst geringes Phasenrauschen aufweist, jedoch nur in einem engen Bereich frequenzvariabel ist, lässt sich mit einem Quarzoszillator zusammen mit einer Varicap-Diode realisieren. Diese Konstruktion wird Voltage Controlled Crystal Oscillator (VCXO) genannt.
Q1 BF259
1uH
470
1nF
C2 220pF
C3
C4
470pF
100pF
Bild 3. Wenn der Eingang mit dem Ausgang gekoppelt wird, schwingt der Verstärker, er wird zum Oszillator. Die Frequenz liegt bei 13 MHz, in der Simulation bei 14,6 MHz.
Phasenverrieglung
Wir haben zwar einen VCO mit variabler Frequenz konstruiert, doch die Genauigkeit und insbesondere die Stabilität lassen Wünsche offen. Die Frequenz schwankt infolge von Instabilitäten der steuernden Spannung, als Funktion der Umgebungstem-
+25V
R5 X
+6V
C5
R4
100nF
10k
E N U T V
R2 220 OUTPUT
L2 1mH
R1 10k
INPUT
C1 1nF
L1
R3
C2
Q1 BF259
6.8uH
470
220pF
D1 FMMV2105
C3
C4
22pF
100pF
Bild 4. Durch Hinzufügen einer Varicap-Diode wird der Oszillator zum VCO. In der Simulation wurden durch Variieren des Widerstands R5 unterschiedliche Spannungen an die Varicap-Diode gelegt. Da durch wandern der Nullpunkt der Phasenverschiebung und folglich auch die Frequenz.
www.elektormagazine.de
Juli/August 2016
15
�����
ReferenzFrequenz (Fin )
������
teilen durch R
�����
Fin /R
Phasendetektor
Fout /N
Filter
VCO
AusgangsFrequenz (Fout )
teilen durch N
Bild 5. Prinzip einer PLL: Der Phasendetektor vergleicht das vom VCO erzeugte Signal mit einem Bezugssignal und passt die steuernde Spannung des VCOs an. Die Teiler bestimmen das Verhältnis der Signalfrequenzen.
peratur, der Alterung der Bauelemente und anderem mehr. Außerdem ändert sich die Frequenz abhängig von der Betriebsspannung und von der Last am Signalausgang. Das Problem lässt sich durch die Phasenverriegelung lösen, die das Signal des VCO phasenstarr an ein hochpräzises Bezugssignal koppelt. Das Bezugssignal stammt meistens von einem quarzstabilisierten Oszillator. Übrigens reichen die Ursprünge der PLL laut Wikipedia bis in der Jahr 1930 zurück, als im britischen Königreich die ersten Funkempfänger mit Direktüberlagerung (Homodyn-Empfänger) konstruiert wurden. Diese Empfänger mischen das empfangene HF-Signal mit dem Signal eines lokalen Oszillators, der auf der Empfangsfrequenz schwingt. Da es regelmäßig nötig war, die Oszillatorfrequenz nachzustellen, haben die Konstrukteure schon früh über eine selbsttätige Regelschleife nachgedacht. Die Historiker vermuten, dass die Idee auf einer wissenschaftlichen Arbeit des französischen Physikers Henri De Bellescise beruht. Doch zurück zur Technik der PLL: Aus dem Funktionsschema in Bild 5 geht hervor, dass die Frequenz des Bezugssignals Fin (gegebenenfalls geteilt durch die Konstante R) mit der Frequenz des VCO-Ausgangssignals Fout (gegebenenfalls geteilt durch eine Konstante N) verglichen wird. Das Ausgangssignal des Phasenvergleichers (Phase Frequency Detector , PFD) wird gefiltert und anschließend dem VCO als steuernde Spannung zugeführt. Um die Phasen der Signale an den Eingängen des PFD starr miteinander zu koppeln, müssen sie identische Frequenzen und übereinstimmende Phasenlagen haben, es muss also gelten: Fin /R = Fout /N Wenn die Frequenz des VCO-Signals ansteigt, tritt eine Phasendifferenz zwischen den Eingangssignalen des PFD auf, so dass an seinem Ausgang über die Zeit betrachtet Logisch 0 verglichen mit Logisch 1 überwiegt. Die gefilterte Ausgangsspannung sinkt, sie stellt die Frequenz des VCO in Richtung niedriger Frequenz nach. Genau dies ist das Ziel, das erreicht werden soll. Die Regelung arbeitet natürlich auch in umgekehrter Richtung. Da die Schleife geschlossen ist, wird die VCO-Frequenz auf N · Fin /R verriegelt. Die Frequenz Fin /R, bei der die Phasen miteinander verglichen werden, wird PFD-Frequenz oder kurz FPFD genannt. Aus den angeführten Zusammenhängen folgt: FPFD = Fin /R = Fout /N Für das Entwerfen einer PLL ist F PFD ein wichtiger Parameter, denn es gilt: Fout = N · Fin /R = N · FPFD. Wie lässt sich eine PLL schaltungstechnisch realisieren? Die
16
Juli/August 2016
www.elektormagazine.de
Teiler durch N und durch R sind binäre Teiler, die unkompliziert mit digitalen Zählern und Komparatoren aufgebaut werden können. Der PFD erfordert etwas mehr Überlegung, doch auch hier existiert eine wenig aufwendige Lösung: Das logische Exklusiv-Oder-Gatter. Diese logische Funktion liefert eine logische 1 am Ausgang, wenn die logischen Zustände der beiden Signale an den Eingängen miteinander übereinstimmen (beide 0 oder beide 1). Wenn an den Eingängen zwei Rechtecksignale gleicher Frequenz liegen, erscheint am Ausgang des EXOR-Gatters ein Rechtecksignal dieser Frequenz, wobei das Impuls-Pause-Verhältnis von der Phasendifferenz der Eingangssignale abhängt. Zusammen mit einem steilen Tiefpass ist dies ein durchaus akzeptabler Phasenvergleicher, also ein PFD. Der VCO wird stabilisiert, wenn die Frequenzen übereinstimmen und die Phasendifferenz gegen Null geht. Der einzige Nachteil dieser Lösung besteht darin, dass dem Ausgangssignal viel unerwünschtes Rauschen überlagert ist, das bei der Frequenz FPFD und ihren Vielfachen sein Maximum hat. Effizientere Lösungen benutzen Ladungspumpen, die einen Kondensator abhängig von den Signalphasen mit positiven oder negativen Strömen laden oder entladen, das Grundprinzip ist jedoch gleich. Den Lesern, die sich in dieses Thema vertiefen möchten, empfehlen wir das Studium der Veröffentlichung von Texas Instruments, die am Schluss dieses Beitrags unter den Referenzen aufgeführt ist. Integer-N oder Fractional-N
Wenn eine PLL auf der in Bild 5 skizzierten Architektur fußt, wird sie Integer-N-PLL genannt. Aus den oben angegebenen mathematischen Beziehungen folgt, dass die Frequenz des Ausgangssignals innerhalb der VCO-Bandbreite frei gewählt werden kann, solange sie ein ganzzahliges Vielfaches der Frequenz FPFD ist. Die Frequenz des PLL-Ausgangssignals soll beispielsweise bei 500 MHz liegen und in Schritten von 1 kHz einstellbar sein, das Bezugssignal soll die Frequenz Fin = 10 MHz haben. Die Lösung mit einer Integer-N-PLL besteht darin, eine Frequenz FPFD zu wählen, die gleich der Schrittweite 1 kHz ist. Daraus ergibt sich der Teilfaktor R, in diesem Fall ist R = 10 MHz/1 kHz = 10000. Für N gilt, dass N = 500 MHz/1 kHz = 500000 ist. Damit beträgt die Frequenz des Ausgangssignals genau 500 MHz. Ist N = 500001, steigt die Frequenz auf 500001 MHz, und so weiter. Integer-N-PLLs haben ein weites Einsatzfeld, sie haben jedoch zwei Handicaps. Der erste Nachteil ist die Zeit, die vergeht, bis die PLL „einrastet“, die Verriegelungszeit. Die Frequenz FPFD hängt von der Schrittweite, also von der Auflösung des PLL-Ausgangssignals ab. Wie schon beschrieben, muss d as
����������
����
�
&
�
����� & ������
��������
Eine PLL ist eine Kombination aus spannungsgesteuertem Oszillator, Phasenvergleicher und Tiefpass
Ausgangssignal des PFD einen Tiefpass durchlaufen, der den Mittelwert der Spannung zum Steuern des VCO bildet. Die Eckfrequenz des Tiefpasses muss wesentlich niedriger als di e Frequenz FPFD liegen, ein Richtwert ist der Faktor 10. Im Beispiel ist FPFD = 1 kHz, so dass die Eckfrequenz des Tiefpasses ungefähr 100 Hz betragen muss. Wenn N verändert wird, um die PLL-Ausgangsfrequenz zu ändern, kann die Änderung erst wirksam werden, nachdem sich der Tiefpass stabilisiert hat. Dies dauert jedoch eine gewisse Zeit, da es die ureigenste Aufgabe eines Tiefpasses ist, schnellen Änderungen entgegenzuwirken. Die Integer-N-PLL ist folglich mit zwei gegensätzlichen Parametern behaftet: Entweder ist die Schrittweite klein, od er die Verriegelungszeit ist kurz. Das zweite Handicap der Integer-N-PLL hat etwas komplexere Ursachen: Das Phasenrauschen steigt stark an, wenn der Teilfaktor N zu hohen Werten verschoben wird, denn (vereinfacht beschrieben) wird das Rauschen des PFD-Signals mit N multipliziert. Integer-N-PLLs müssen jedoch häufig mit hohen Werten von N arbeiten, um eine hohe Auflösung, also kurze Frequenzschritte zu realisieren. Das Herabsetzen des Phasenrauschens stößt hier an seine Grenzen. Um den beschriebenen Problemen aus dem Weg zu gehen, haben findige Entwickler die Fractional-N-PLL ersonnen, bei der N einen gebrochenen Wert hat. Die Methode des Phasenvergleichs bleibt bestehen, nun kann jedoch die Frequenz FPFD einen Wert erhalten, der wesentlich größer als die Schrittweite ist. Die Verriegelungszeit und das Phasenrauschen werden drastisch reduziert, die Frequenz des PLL-Ausgangssignals hat eine hohe Auflösung. Ein Beispiel: Beim 500-MHz-Oszillator kann FPFD beispielsweise auf 100 kHz festgelegt werden. Wenn N = 5000 ist, hat das PLL-Ausgangssignal die Frequenz 500 MHz, und bei N = 5000,01 ist sie 500,001 MHz. Ein Tiefpass mit der Eckfrequenz 10 kHz genügt, und die Verriegelungszeit ist verglichen mit einer Integer-N-PLL um den Faktor 100 kürzer. Dies grenzt zwar an Magie, doch auch die Fractional-N-PLL hat ihre Handicaps. Leider wurde ein perfekter Frequenzteiler mit nicht ganzzahligem Teilfaktor noch nicht erfunden. Das Teilen durch eine gebrochene Zahl lässt sich nur mit einem Kunstgriff erreichen, der darin besteht, dass der Teilfaktor mit bestimmter Frequenz umgeschaltet wird. Beispielsweise lässt sich der Teilfaktor N = 5000,01 realisieren, indem für 99 % der Zeit N = 5000 gesetzt wird und für 1 % der Zeit N = 5001 ist. Im zeitlichen Mittel ergibt sich zwar der angestrebte gebrochene Teilfaktor, doch es bedarf nicht viel Phantasie, um zu ahnen, dass die Methode unvollkommen ist. Im PLL-Ausgangssignal finden sich diverse Anteile wieder, die dort nicht hingehören. Der Fractional-N-PLL können deshalb gravierendere Probleme anhaften als der Integer-N-PLL. Hinzu kommt, dass die Eigenschaften der verwendeten integrierten Bausteine der freizügigen Gestaltung Grenzen setzen. Auch dies verkompliziert di e Realisierung in nicht zu unterschätzendem Maß.
Entwerfen einer PLL
Wenn Sie ein Signal mit fester Frequenz oder konstanten Frequenzschritten generieren möchten, ohne dass hohe Forderungen an das Phasenrauschen gestellt werden, ist die IntegerN-PLL der richtige Weg. Wählen Sie die PFD-Frequenz übereinstimmend mit der Schrittweite und dimensionieren Sie den Tiefpass so, dass die Eckfrequenz um den Faktor 10 niedriger liegt. Wenn jedoch eine hohe Frequenzauflösung oder niedriges Phasenrauschen Priorität haben, dann sollten Sie im Normalfall einer Fractional-N-PLL den Vorzug geben. Die PFD-Frequenz soll dann möglichst hoch sein. Dies sind die Grundregeln beim Entwerfen einer PLL. Was noch fehlt, ist das exakte Berechnen der Parameter, unter anderem des Tiefpasses. Ferner müssen Maßnahmen getroffen werden, falls das Bezugssignal nicht sonderlich stabil ist, also starkes Phasenrauschen aufweist. Das Phasenrauschen einer PLL ist in der Umgebung der Frequenz des Ausgangssignals fast gleich dem Phasenrauschen des Bezugssignals. In diesem Bereich folgt die PLL dem Bezugssignal einschließlich seiner Toleranzen. Wird der Abstand zur Frequenz des Ausgangssignals größer, sinkt der Einfluss des Bezugssignals, die Eigenschaften des VCO gewinnen an Wirkung. Abhängig von der Anwendung muss mehr oder weniger Aufwand für den Tiefpass getrieben werden, was sich letztendlich auf die Wahl der PFD-Frequenz auswirkt. Dies alles klingt enorm kompliziert, doch zum Glück übernehmen die Hersteller integrierter PLL-Bausteine den Großteil der Arbeit. Zum Beispiel stellt Analog Devices sein Tool „ADIsimPLL“ kostenlos zur Verfügung, einen Vorgeschmack gibt Bild 6. Nach der Eingabe der unteren und oberen Frequenzgrenze, der Frequenzauflösung, der Eigenschaften des Bezugssignals und des VCO sowie einiger anderer Parameter generiert das Tool auf Mausklick eine wunschgemäße PLL-Schaltung und simuliert
Bild 6. Simulation einer PLL-Schaltung auf dem Bildschirm mit dem Programm ADIsimPLL von Analog Devices.
www.elektormagazine.de
Juli/August 2016
17
�����
������
�����
Bild 7. Das Entwicklungsboard für den CY22393 von Cypress vereinfacht den Umgang mit PLLs. Auf dem Chip sind drei PLLs integriert.
Bild 8. Das Programm für die Konfiguration des CY22393 ist denkbar einfach zu bedienen.
ihre Arbeitsweise. Wen wundert es, dass dem Benutzer nahe gelegt wird, für den realen Aufbau Bausteine aus der Produktion des Herstellers zu verwenden... Ein solches Tool kann das Leben eines Entwicklers enorm erleichtern. Wenn die vom Tool gelieferten Ergebnisse nicht zusagen, können einige Vorgaben modifiziert werden, und das Spiel beginnt von vorn. Nach mehr oder weniger vielen Simulationen können Sie darangehen, den ersten Prototypen zu bauen. Wenn Sie die allgemeinen Regeln für den Aufbau hochfrequenter Schaltungen befolgen, werden die tatsächlichen Ergebnisse den Simulationen sehr nahe kommen.
reitung von Signalen und beim Extrahieren aus anderen Signalen unverzichtbare Dienste. Dieser Beitrag kann natürlich die umfangreiche Literatur zum Thema PLL nicht ersetzen, die inzwischen Bibliotheken füllt. Unser Ziel war es, den von Geheimnissen umwobenen Schleier ein wenig zu lüften, der diese Schaltungstechnik umgibt. Wir empfehlen Ihnen, einen PLL-Simulator wie ADIsimPLL aus dem Netz herunterzuladen und auszuprobieren. Der Simulator vermittelt Ihnen ein Gefühl dafür, wie die einzelnen Parameter einer PLL ineinandergreifen. In einem nachfolgenden Beitrag werden wir eine andere Methode der Generierung von Signalen betrachten: Die so genannte Direkte Digitale Synthese (Direct Digital Synthesis, DDS). Wir werden zeigen, dass PLL und DDS die Voraussetzungen haben, gemeinsam ein starkes Team zu bilden.
Silizium
Wenn Sie in Ihrem Projekt eine PLL einsetzen möchten, sollten Sie auf einen dafür zugeschnittenen integrierten Baustein zurückgreifen. Das Angebot des Marktes ist vielfältig, Analog Devices, Maxim und Texas Instruments sind nur drei Hersteller von vielen. Manche PLL-ICs kosten weniger als einen Euro, sie sind für weniger anspruchsvolle Zwecke bestimmt. Am anderen Ende der Skala rangieren Bausteine, die schlicht Eindruck erweckend sind. Um nur ein Beispiel zu nennen: Im ADF5355 von Analog Devices sind eine Fractional-N-PLL und ein VCO mit hoher Bandbreite integriert, so dass Signale mit jeder Frequenz zwischen 54 MHz und 13,6 GHz generierbar sind. Der PFD arbeitet mit Frequenzen bis 125 MHz! In der weitläufigen PLL-Familie sind auch clevere Bausteine vertreten, die mit nur einem Bezugssignal mehrere Ausgangssignale erzeugen. Wenn zum Beispiel in einem Audioprojekt Signale mit den Frequenzen 10 MHz, 25,55 MHz, 8,42 MHz und 5,44 MHz benötigt werden, genügt ein einziges IC. Der CY22393 von Cypress (Bild 7) vereint drei PLLs mit zugehörigen VCOs, eine Schaltmatrix und mehrere programmierbare Frequenzteiler auf einem Chip. Ihn gibt es in einem Gehäuse mit 16 Anschlüssen für nur wenige Euro! Das „Sahnehäubchen“ ist die Software, mit der sich dieser Baustein höchst einfach konfigurieren lässt (Bild 8). PLL? Gar nicht schwer!
PLLs dürfen im Arsenal des Entwicklers nicht fehlen, denn sie leisten beim Generieren periodischer Signale, bei der Aufbe-
18
Juli/August 2016
www.elektormagazine.de
(150203)gd Dieser Beitrag erschien auch in Circuit Cellar Nr. 209 vom Dezember 2008.
Weblinks: [1] www.elektormagazine.de/150013 Software: Proteus Design Suite: www.labcenter.co.uk
Tool „ADIsimPLL, V3“: www.analog.com „CyberClocks“ und Datenblatt CY22393: www.cypress.com Referenzen: Sampled Systems and the Effects of Clock Phase Noise and Jitter
Application Note AN-756, Brad Brannon, Analog Devices www.analog.com Fractional/Integer-N PLL Basics
Technical Brief SWRA029, Texas Instruments www.ti.com/lit/an/swra029/swra029.pdf Phasenregelschleife
https://de.wikipedia.org/wiki/Phasenregelschleife
����������
����
�
&
�
����� & ������
��������
Das etwas andere Software-Tool Von Liam Walton, Matrix Technology Solutions (UK)
Nichts ist beständiger als der Wandel. Das gilt auch für Matrix. Unser Kerngeschäft sind Produkte rund um die Entwicklung mit Mikrocontrollern. Im Moment ändert sich dieser Markt in atemberaubendem Tempo. In diesem Artikel geht es um diese Änderungen und wie sie die Entwicklung von Flowcode, unseres wichtigsten Produkts, beeinflusst.
Single-Chip-Mikrocontroller werden nun schon seit fast 40 Jahren für Consumerund Industrieprodukte eingesetzt. Doch erst in letzter Zeit sind die Stückzahlen so angestiegen, dass man über deren Preis/Leistungs-Verhältnis nur noch staunen kann. Einfache 8-Pin-Mikrocontroller sind schon für wenige Cent zu haben. Selbst komplexe 32-bit-Typen mit über 40 Pins gibt es mittlerweile für wenige Euro, ja sogar für kaum mehr, als man für 8-bit-Ausführungen mit gleicher Pin-Zahl berappen muss. Die Kosten für Gehäuse und Verpackung übersteigen die für das Silizium, da immer mehr Transistoren auf die gleiche Fläche passen. Kostenlose Soft- und Hardware
Halbleiterfirmen haben realisiert, dass heute etliche Innovationen aus der Maker-
ADVERTORIAL
und Hobby-Szene kommen. Deshalb gibt es komplette Entwicklungs-Kits für weniger als 15 €. Bei Matrix haben wir kürzlich ein Entwicklungs-Kit für ARM-Controller von ST mitsamt 6’’-LCD für gerademal 40 € gekauft. Und direkt aus China bekommt man ein komplettes Bluetooth-Modul für unglaubliche 3 $. Dank fehlender Zollgebühren bei kleinen Beträgen und stagnierendem Heimatmarkt haben chinesische Lieferanten den direkten Weg zum Kunden in Europa entdeckt. Alibaba-Express und eBay spielen hier eine große Rolle. Die Hardwarekosten für Embedded-Systeme gehen also (fast) gegen Null. Oder wie schafft es die RPi-Foundation, ein Board für gerade einmal 5 € herstellen zu lassen und zu vermarkten? Passend dazu haben Arduino und RPi den
Vergleichsmaßstab für Entwicklungsumgebungen hoch gesetzt. Die Arduino-IDE ist einfach, leistungsfähig und praktisch. Doch was bedeutet das für uns? Diesen Sommer kommt die Version 7 von Flowcode heraus — ein grafisches Entwicklungssystem für Mikrocontroller-Systeme (Bild 1). Das Überraschende: Flowcode verkauft sich besser als je zuvor! Arduino und die Maker-Bewegung haben diesem Markt viele ambitionierte Kunden zugeführt, doch fremdeln diese mit C und finden die Einfachheit von Flowcode interessant. Flowcode ist zu vielen Mikrocontrollern kompatibel: V7 unterstützt nun sogar die leistungsfähige PIC32-Serie von Microchip. Diese Chips bieten extrem viel Leistung für geringe Kosten. Und das Beste: Die bisherigen Flowcode-Programme kann man einfach zur neuen
www.elektormagazine.de
Juli/August 2016
19
�����
������
�����
Soft- und Hardware kaum noch etwas kostet: Zeit ist wertvoll. Flowcode und die Matrix-Hardware sparen Zeit. Weder Elektronik noch Mechanik: Mechatronik und Robotik
Falls es noch nicht aufgefallen ist: Robotik verlässt ihren Inkubator in Form der Auto-Fabriken und beginnt unser Alltagsleben zu tangieren. Man denke nur an Kennzeichenerkennung, automatische Parkschranken, Passerkennung und biometrische Zugangskontrollen. Auch 3D-Drucker haben damit zu tun. Roboter werden (bald) iRobot-ähnliche, humanoide Funktionen erhalten. Und da der 3D-Druck mehr und mehr mechanische Probleme lösen hilft, werden sie in unserem Leben eine größere Rolle spielen.
Bild 1. So begrüßt Sie Flowcode 7 (auch Deutsch lässt sich als Sprache einstellen).
Plattform transferieren. Damit steht nun 32-Prozessor-Power für mathematische und rechenintensive Funktionen wie etwa die Sprach-Synthese zur Verfügung. Und wir haben auch Hardware im Programm. Sie ist etwas teurer wie die der großen Halbleiter-Firmen, da wir keine so großen Stückzahlen erreichen und
auch Matrix von etwas leben muss. Dafür haben unsere Produkte eine zeitsparende Debug- und Mess-Elektronik an Bord, die auf den schönen Namen „Ghost“ hört. Dazu gehört ein Datenrekorder, ein Oszilloskop, ein Logik-Analyzer, ein Paket-Decoder sowie Tools für das In-Circuit- und In-System-Debugging. Auch wenn viele
Dazu der Trend in der Industrie: In der Ingenieur-Ausbildung finden zwei große Disziplinen zusammen: Elektronik und Mechanik. Das gilt für Frankreichs renommierte Ausbildungen der Lycees Technique genauso wie für angehende britische Ingenieure des BTEC National oder für die technischen Unis und Fachhochschulen in deutschen Landen. Daher hat die Industrie Bedarf an breiter ausgebildeten Ingenieuren mit Kenntnissen in mehreren Disziplinen. Moderne Ingenieure haben eher ein Tablet in der Hand als einen Lötkolben oder einen Schraubendreher. Jeder angehende Ingenieur braucht heute Programmierkenntnisse. Er muss eher Mikrocontroller programmieren statt Anwendungsprogramme für PCs, denn diese kleinen Chips stecken einfach überall. Welche Folgen hat das für uns? Flowcode
Bild 2. Ganzheitliche Entwicklung bei einem Autositz.
20
Juli/August 2016
www.elektormagazine.de
Version 6 enthielt eine Simulation von 2Dund 3D-Systemen. Das hat einige Kunden verwirrt. Warum sollte man Mikrocontroller-Verhalten in 3D simulieren? Die Antwort: Ingenieure programmieren nicht nur Mikrocontroller, sondern sie konstruieren ganze Systeme mit Mikrocontrollern. Wenn ein Entwicklungsingenieur aber Elektronik und Mechanik eines Systems zugleich simulieren kann, vereinfacht das die Entwicklung und verkürzt die erforderliche Zeit, was Kosten reduziert. Wenn man also Studenten eine Umgebung in die Hand gibt, mit der sie sogar elektrochemische, chemische oder produktionstechnische Systeme kombiniert simulieren können, hat das ein vertieftes Lernen zur Folge. Um dies weiter zu forcieren, ver-
ADVERTORIA L
����������
����
fügt Flowcode 7 über eine neue, verbesserte 3D-Simulation sowie die Möglichkeit zur Verbindung mit CAD-Paketen anderer Hersteller wie etwa Solidworks und DesignSpark Mechanical. Bild 2 zeigt, wie Ingenieure in der Automobilindustrie jetzt mit Anwendungen und in Flowcode enthaltenen Beispielen elektronischer Komponenten von Autositzen umgehen können und dabei lernen, wie Mikrocontroller funktionieren. ADAS und Automotive
Die größte technische Revolution der nächsten Jahre dürften mit ADAS (Advanced Driver Assistance Systems) ausgestattete Autos sein. Das wird unser bisheriges Leben verändern. Ab 2025 – laut Experten der späteste Zeitpunkt ihrer Einführung – fahren autonome Autos auf den Straßen. Nicht erst seit heute haben die Auto-Hersteller sowie Google funktionierende Prototypen. Und interessant ist, dass viele unserer Kunden heute schon Technik für Fahrzeuge mit unseren Produkten entwickeln. Zwar nicht gerade Motorsteuerungen für die großen Marken, aber doch viel Zubehör wie etwa Displays, Technik für Wohnwagen, ferngesteuerte Schalter oder Testumgebungen. Wichtig ist, dass vernetzte Mikrocontroller zum Einsatz kommen. Der CAN-Bus ist dabei der etablierte Kommunikations-Standard.
�
&
�
len, dass das Programm korrekt auf die ankommende Kommunikation reagiert. Fazit
Es ging hauptsächlich um drei Aspekte von Veränderung und die Art, wie wir darauf reagieren. Noch zu erwähnen wären die Themen: Internet of Things. Auch hier gibt es schnelles Wachstum. Flowcode 7 ist dank der Unterstützung von Bluetooth und WLAN/Internet für IoT bereit. • Touchscreen-PCs und Tablets. Sie sind mittlerweile weit verbreitet. Flowcode unterstützt sie mit größeren Icons passend für die Touch-Bedienung. • Enge auf Bildschirmen. Flowcode 7 kommt dem entgegen, indem weniger Fläche benötigt wird. • Microchip-Templates. Die PIC-Familie wächst und Flowcode ermöglicht die Programmierung mit fertigen •
����� & ������
��������
Templates der bekannten Entwicklungs-Kits wie dem der Low-PinCount-Demo des PICkit und seinem 44-Pin-Demo-Board. Flowcode 7 ist vollgepackt mit neuen Funktionen, die das Entwickeln vereinfachen: Neue und schnelle Microchip-XC-Compiler (bei den PIC-Versionen), Code-Profiling (Bild 3) mit der Angabe der Häufigkeit, mit der auf Icons bei Simulation und Debugging zugegriffen wird, Offline-Hilfe mit schnellem Zugriff sowie ein neues grafisches User-Interface, und mehr. Flowcode 7 ist ab Juni 2016 über den Elektor Store unter der URL www.elektor. de/flowcode erhältlich. (160050)
Was bedeutet das für uns? Der Schwer-
punkt liegt hier eher auf Entwicklungssystemen als auf bloßen Mikrocontroller-Schaltungen, denn es geht um Systeme mit mehreren Mikrocontrollern. Flowcode 7 bringt viele Funktionen für solche Systeme mit und kann mehr als einen Mikrocontroller gleichzeitig simulieren. Tatsächlich kann man ein System von bis zu zehn Instanzen mit Flowcode auf einem PC oder einem Netzwerk von PCs realisieren, die alle miteinander kommunizieren. Die System-Protokolle können dabei auf Tabellen basieren. Auf diese Weise kann man Software entwickeln und viele Mikrocontroller unterstützen, aber die Daten für das Verhalten der Mikrocontroller können extern vorliegen. Dies vereinfacht das Design von Multi-Mikrocontroller-Systemen beträchtlich. Nicht zuletzt macht der „Injector“ von Flowcode 7 den Test und das Debugging sehr einfach: Man kann eine Simulation mit den Signalen erstellen, auf die das System reagieren soll, und dabei sicherstel-
ADVERTORIAL
Bild 3. Neu in Flowcode 7: Code-Profiling.
www.elektormagazine.de
Juli/August 2016
21
�����
������
�����
Windows steuert Arduino Über USB und Bluetooth
Windows-Smartphones haben mittlerweile einen beträchtlichen Marktanteil. Das neue Betriebssystem Windows Mobile 10 bietet einige Möglichkeiten, ein Windows-Handy oder -Tablet als Steuerzentrale in eigenen Projekten einzusetzen. Über USB oder Bluetooth kann man zum Beispiel mit einem Arduino-Board kommunizieren. Von Microsoft wird hierfür sogar eine eigene Bibliothek bereitgestellt.
Von Tam
Hanna
Unter Windows Mobile 10 stehen Entwicklern verschiedene Möglichkeiten zur Kommunikation mit externer Hardware offen. Naheliegend ist die Verbindung über ein USB-Kabel. Microsoft
22
Juli/August 2016
www.elektormagazine.de
macht die Nutzung des USB-Treiber-APIs unter Windows Mobile 10 wieder für Drittentwickler zugänglich. Für Kleinserien und den Hobby-Bereich ist eine Programmierung gegen das komplexe API allerdings nicht wirklich effizient. Microsoft bietet aber alternative Programmierschnittstellen an, die Entwicklern das Verbinden von Hardware und Smartphone erleichtern.
����������
����
Ferngesteuerter Arduino
In der Arduino-Welt ist ein als „ Firmata“ bezeichnetes Protokoll populär [1]. Mit dem Protokoll, das interessanterweise vom MIDI-Protokoll abgeleitet ist, lassen sich zum Beispiel bestimmte Portpins auf High oder Low setzen. In die andere Richtung kann der Arduino Messwerte übermitteln, die an
�
&
�
����� & ������
��������
einem analogen Eingang erfasst wurden. Microsoft bietet mit Windows Remote Arduino ein dafür geeignetes Spezial-API an, das sich auch unter Windows Mobile 10 einsetzen lässt. Mit den hier enthaltenen Funktionen kann der Anwendungsentwickler dann zum Beispiel ein Kommando zum Setzen eines
www.elektormagazine.de
Juli/August 2016
23
�����
������
�����
Arduino-Pins senden, ohne Details des Protokolls kennen zu müssen: myArduino.digitalWrite(13, Microsoft.Maker.RemoteWiring. PinState.LOW);
Wie wir sehen (und ausprobieren) werden, lässt sich das API sowohl für die Kommunikation über ein USB-Kabel als auch via Bluetooth einsetzen. Es ist keine schlechte Idee, sich vor der Lektüre des folgenden Artikels noch einmal die kleine Artikelserie „Windows auf dem RasPi“ (Elektor ab November 2015 [2]) anzusehen; es wird dort zum Beispiel der Umgang mit Visual Studio und .NET-Ob jekten beschrieben. Anfängern empfehlen wir wie immer, den folgenden Code erst einmal 1:1 zu benutzen und sich dann mit kleinen Abwandlungen weiter vorzuwagen. Der gesamte Quellcode kann von der Webseite zu diesem Artikel heruntergeladen werden [3]. USB-Kabel
Bild 1. Dieses Telefon weiß mit USB OTG nichts anzufangen.
Probieren wir die Kommunikation über USB einmal aus. Für die Arbeit per Kabel ist ein Windows Phone 10 notwendig, das vollwertigen USB-Support bietet. Dies lässt sich in der Einstellungen-Applikation prüfen: Klicken Sie auf Settings , wechseln Sie in die Rubrik Devices und suchen Sie den Eintrag USB. Auf nichtfunktionierenden Geräten erscheint daraufhin die in Bild 1 gezeigte Fehlermeldung. Die Vorlage Windows Universal Blank App (Universal Windows) erzeugt in Visual Studio 2015 ein Projekt, das sowohl auf dem Handy als auch auf einem PC lauffähig ist. Unser Programmbeispiel ließe sich auch am PC ausführen, wenn Sie den Arduino mit ihm verbinden und Windows 10 als Hostbetriebssystem verwenden. Visual Studio fragt in manchen Fällen (wie in Bild 2 gezeigt) nach der zu verwendenden Version der Universal Windows Platform. Wählen Sie in diesem Fall die niedrigste Version aus. Microsoft bietet für Visual Studio mit „NuGet“ seit einiger Zeit eine Paketverwaltung an, aus der häufig verwendete Bibliotheken direkt in das aktive Projekt heruntergeladen werden. Windows Remote Arduino gehört dazu: Klicken Sie auf Tools -> NuGet Packet Manager -> Packet Manager Console, um das Verwaltungswerkzeug zu öffnen. Geben Sie im daraufhin erscheinenden Fenster das Kommando „ Install-Package Windows-Remote-Arduino ” ein, um die notwendigen Pakete aus dem Internet herunterzuladen und in Ihr Projekt zu integrieren. Für die Kommunikation mit Hardware ist unter Windows 10 eine Permission erforderlich, die von Hand einzupflegen ist. Klicken Sie die Datei Package.appxmanifest rechts an, und wählen Sie die Option View Code aus. Ändern Sie den Inhalt der Manifestdatei dann folgendermaßen: ª
Bild 2. Welche Variante darf es sein?
ª
Bild 3. VID und PID identifizieren ein USB-Gerät eindeutig.
24
Juli/August 2016
www.elektormagazine.de
����������
����
�
Bitte achten Sie darauf, dass eine mit dem DeviceCapability-Attribut ausgestattete Manifestdatei nicht mehr mit dem grafischen Editor bearbeitet werden kann: Ein Microsoft bereits bekannter Bug führt in diesem Fall zur Korrumpierung des Inhalts. Damit sind die Vorbereitungshandlungen abgeschlossen. Beschaffen Sie ein zu Ihrem Telefon passendes USB-OTG-Kabel, das den Mini-USB-Kombiport Ihres Telefons in einen normalen USB-Hostport umwandelt. Zum Test des Kabels bietet sich ein USB-Stick an – wird dieser erkannt, so können Sie problemlos einen Arduino anschließen.
&
�
����� & ������
��������
void setup() { Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION); . . . Firmata.begin(115200); . . . }
Windows-Code
Falls Sie keinen originalen Arduino Uno verwenden, dann sollten Sie das Board allerdings zuerst mit einem PC verbinden, denn Sie müssen noch die VID und PID des Boards herausbekommen. Öffnen Sie den Gerätemanager und suchen Sie den Arduino in der Rubrik Anschlüsse bzw. Ports. Ein Rechtsklick ermöglicht das Öffnen der Eigenschaftenseite, unsere gewünschten Parameter finden sich unter Details Hardware Ids. Bei einem Arduino Uno präsentiert sich das Fenster wie in Bild 3 gezeigt.
Öffnen Sie im nächsten Schritt die Layout-Datei des Visual-Studio-Projekts, um sie um ein Label, das Text anzeigen kann, zu ergänzen:
ª
Arduino-Code
Auf Seiten des Arduinos können wir auf Standard-Firmata-Software zurückgreifen, die unter Datei Beispiele Firmata StandardFirmata zur Verfügung steht. Zur Steigerung der Systemperformance wollen wir lediglich die Kommunikationsbandbreite verdoppeln. Firmata arbeitet von Haus aus mit sehr konservativen 57600 bps, die nur bei vergleichsweise hoher Zusatzbelastung des Prozessrechners oder bei Nutzung der I2C-Funktion notwendig sind (siehe auch [4]). ª
ª
ª
Die Windows Remote Arduino-Programmierumgebung ist mehrschichtig aufgebaut. Im Fall einer Verbindung per USB sieht der notwendige Code so wie in Listing 1 aus. Alle Funktionen, die zu Anfang des Programms ausgeführt werden müssen, stehen im Konstruktor der MainPage MainPage(). Zuerst wird ein Objekt der Klasse UsbSerial erzeugt, und jetzt sieht man, für was wir die VID und PID des Arduino-Boards benötigen. Beim Erzeugen des Objekts myArduino wird dieses USB-Objekt namens myUSB als Parameter mitgegeben. Bei einer fehlgeschlagenen Verbindung soll eine entsprechende
Listing 1. Pins steuern über USB. public sealed partial class MainPage : Page { UsbSerial myUSB;
TxtStatus.Text = “Connection to Arduino!”;
runner(); }
Microsoft. Maker.RemoteWiring.R emoteDevice myArduino;
async private void runner() {
public MainPage() { this.InitializeComponent();
await Task.Run(() => innerRunner()); }
myUSB = new UsbSerial(“VID_2341” , “PID_0043”); myArduino = new Microsoft.Maker.Remo teWiring.
void innerRunner() {
RemoteDevice(myUSB); myUSB.ConnectionEst ablished += MyUSB_ConnectionEstablished;
myArduino.pinMode( 13, Microsoft.Maker.Rem oteWiring. PinMode.OUTPUT); for (;;)
myUSB.ConnectionFai led += MyUSB_ConnectionFail ed;
{
myUSB.begin(115200, Microsoft.Maker.Ser ial.
myArduino.digitalWri te(13, Microsoft.Maker.
SerialConfig.SERIAL_8N1);
RemoteWiring.PinState.LOW); myArduino.digitalWri te(13, Microsoft.Maker.
}
RemoteWiring.PinState.HIGH); myArduino.digitalWri te(13, Microsoft.Maker.
private void MyUSB_ConnectionF ailed(string message) {
RemoteWiring.PinState.LOW);
TxtStatus.Text = „Connection failed“;
myArduino.digitalWri te(13, Microsoft.Maker. RemoteWiring.PinState.HIGH);
}
} }
private void MyUSB_ConnectionE stablished() {
}
www.elektormagazine.de
Juli/August 2016
25
�����
������
�����
Meldung im Label ausgegeben werden. Das ist beim ersten Programmstart aber kein Grund zu Panik, beim nächsten Programmstart sollte es dann klappen. Scheitert die Verbindung nicht, dann geben wir die Erfolgsmeldung im Label aus und starten mit runner() einen eigenen Thread. In ihm wird der Pin 13 abwechselnd auf High und Low gesetzt, um ein Rechtecksignal auszugeben. Das Ganze funktioniert hinter den Kulissen mit Kommando-Bytes, die zum Arduino geschickt werden. Das muss den Anwendungsentwickler aber nicht interessieren. Die in Windows Remote Arduino implementierte API ist eng mit der normalen Arduino-API verwandt, die Funktionen sehen ähnlich aus wie in einem ganz normalen Arduino-Sketch. Windows Mobile-Geräte nehmen nur dann Programme an, wenn sie unter Einstellungen Updates&Sicherheit-> Für Entwickler in den Developer Mode versetzt werden. Deployen Sie das Steuerprogramm sodann auf das Telefon und achten Sie dabei darauf, im Feld Architektur die passende Zielplattform auszuwählen. Beim Start des Programms gibt der angeschlossene Arduino ein Rechtecksignal aus. Auf einem MDA (Modulation Domain Analyzer) des Autors entstand das in Bild 4 gezeigte Bild. ª
Bild 4. Das Rechtecksignal ist vergleichsweise stabil.
Win10 only!
Auch wenn die Dokumentation zu Windows Remote Arduino anderes verspricht: Zuverlässig funktioniert das Produkt nur unter Windows 10. Der Autor rät aus schmerzhafter eigener Erfahrung von Experimenten mit Windows 8.1 als Zielplattform ab. Als Hostplattform für Visual Studio lässt sich Win 8.1 bei Vorhandensein eines physikalischen Windows Phone 10 aber problemlos einsetzen.
Et tu, Yun?
Ein Arduino Yun ist ob seines WLAN-Funkmoduls die bequemste Methode zur Nutzung von Windows Remote Arduino. Leider sind hierzu Konfigurationsarbeiten notwendig, die unter [7] im Detail beschrieben sind.
Bluetooth für den Arduino
Bluetooth funktioniert auf so gut wie jedem Windows Phone, und lässt sich dem Arduino durch ein bei AliExpress preiswert erhältliches Modul der Bauart HC-06 beibringen. Die Verbindung ist so primitiv, dass das in Bild 5 gezeigte Schaltbild eigentlich gar nicht erforderlich ist. Ob einer kleinen Inkompatibilität ist an dieser Stelle ein Downgrade der Firmatabibliothek notwendig. Öffnen Sie den Bibliotheksmanager der Arduino-IDE, und installieren Sie die Version 2.4.4 um den unter [5] dokumentierten Fehler zu umgehen. Danach müssen Sie den Code nur noch an die Baudrate des Moduls anpassen, die von Haus aus 9600 bps beträgt: void setup() { Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION); . . . Firmata.begin(9600);
5V
. . .
Win10
} ARDUINO
Bluetooth unter Windows
USB VCC 1=TX
RXD
0=RX
TXD
Unter Windows Phone ist eine neue Bibliothek notwendig, die den Zugriff auf Bluetooth ermöglicht. Ihre Einpflegung in die Datei Package.appxmanifest sollte ebenfalls von Hand erfolgen, da der Editor die inneren Capabilities nicht korrekt deklariert:
HC-06 GND
GND
Bild 5. Der Arduino ist einfach um Bluetooth zu erweitern.
26
Juli/August 2016
www.elektormagazine.de
����������
����
�
&
�
Listing 2. Verbinden über Bluetooth.
����� & ������
��������
DeviceInformationCo llection aColl = await BluetoothSerial.listAvailableDevicesAsync();
BluetoothSerial myBTSerial;
TxtStatus.Text += “\n Result: “ + aColl.Count(). ToString();
Microsoft.Maker.RemoteWiring.RemoteDevice myArduino; public MainPage()
if (aColl.Count() > 0){ myBTSerial = new BluetoothSerial(a Coll[0]); myArduino = new Microsoft.Maker.Re moteWiring.
{ this.InitializeComponent(); btScanner();
RemoteDevice(myBTSerial); myBTSerial.Connect ionEstablished +=
}
MyBTSerial_ConnectionEstablished; myBTSerial.Connect ionFailed += MyBTSerial_ConnectionFailed;
async public void btScanner() {
myBTSerial.begin(9 600, Microsoft.Maker.Se rial. SerialConfig.SERIAL_8N1);
var radios = await Radio.GetRadiosAsync(); var bluetoothRadio = radios.FirstOrDefau lt(radio =>
} } else {
radio.Kind == RadioKind.Bluetooth);
TxtStatus.Text = “No BT-Module!”; if (bluetoothRadio != null && bluetoothRadio.State == RadioState.On) { TxtStatus.Text = “Scan!”;
Unser auf dem Windows Phone laufende Rechenprogramm [3] ruft im Rahmen des Konstruktors MainPage() die Funktion btScanner() auf (siehe Listing 2). Statt des bisher verwendeten UsbSerial-Objekts nutzen wir nun eine Instanz von BluetoothSerial, die für die Kommunikation über Kurzstreckenfunk vorgesehen ist. Die Funktion btScanner dient mehreren Herren: Im ersten Schritt verwenden wir die GetRadiosAsync-Methode, um eine Liste aller im vorliegenden Telefon verbauten Funkmodule zu erhalten. Sofern das Standard-Funkmodul vorhanden und eingeschaltet ist, stoßen wir im nächsten Schritt den Scanprozess an. Das von GetRadiosAsync zurückgelieferte Objekt radios ist insofern interessant, als es im Debugger überhaupt keinen Inhalt zeigt. Seine Inhalte lassen sich nur durch Enumeration auf den Bildschirm holen - wir beschränken uns im Code darauf, das erste Modul auszuwählen und eine Verbindung zu ihm aufzunehmen. Vor der Ausführung des Programms müssen Sie das Modul mit dem Windows Phone 10 pairen. Die in Windows Remote Arduino implementierte Suchengine findet nur jene Funkmodule, die schon eine Pairingbeziehung aufweisen. Die im Rahmen des Pairings erforderliche ID lautet bei einem im Auslieferungszustand befindlichen Modul 1234. Microsofts Bluetooth-Stack weist die eine oder andere Eigenheit auf, die im Zusammenspiel mit den oft nicht sonderlich stabilen Firmwares der Funkmodule zu Lustigkeiten führt. Ihre Bekämpfung erfolgt im ersten Schritt durch einen Reboot des Moduls. Ist dies nicht zielführend, so sollte ein Neustart des Telefons folgen. Der Rest des Windows-Programms ist gleich wie bei USB; wir schalten den Pin 13 auf dem Arduino hoch und runter. Bild 6 zeigt die entstehende Wellenform aus Sicht eines MDA. Es ist deutlich erkennbar, dass die kabellose Verbindung mit größeren Latenzproblemen zu kämpfen hat.
} }
Alles roh!
Firmata mag für Informatik-unerfahrene Entwickler eine große Erleichterung darstellen. Wer die maximale Leistung aus der Hardware herausholen will, kommt um die Implementierung eines eigenen Protokolls nicht herum. Wir wollen diesen Schritt hier kurz ansprechen. Zur Motivation und zur Schaffung von Problembewusstsein wollen wir hier ein per SPI ansprechbares OLED-Display verwenden. Aufmerksame Leser der Elektor kennen das 0,96 Zoll große Display aus Elektor April 2015 [6] als alten Bekannten. Schließen Sie es an den (schon mit dem Bluetooth-Modul verbundenen) Arduino an, was zur in Bild 7 gezeigten Schaltung führt. Ob der komplexeren Aufgabenstellung erzeugen wir an dieser Stelle ein weiteres neues Projekt. Sein Konstruktor ruft – wie in den vorigen Codebeispielen – auch dieses Mal die asynchrone Methode runner() auf, die für die eigentliche Verarbeitung der Datenkommunikation zuständig ist (Listing 3).
Bild 6. Bluetooth ist latenzanfälliger als verkabelte Verbindungen.
www.elektormagazine.de
Juli/August 2016
27
�����
������
�����
Listing 3. Zeichen senden vom Smartphone aus.
{ await mySocket.ConnectAsy nc(myService.
public sealed partial class MainPage : Page
ConnectionHostName, myService. ConnectionServiceName);
{ RfcommDeviceService myService;
byte[] thisChar = { (byte)1, (byte)‘H‘, (byte)‘e‘, (byte)‘l‘, (byte)‘l‘, (byte)‘o‘, (byte)0 }; myWriter = new DataWriter(mySocket. OutputStream);
StreamSocket mySocket; DataWriter myWriter; public MainPage() { this.InitializeComponent();
while (1 == 1) {
myWriter.WriteBytes(thisChar); Task aTask = myWriter.StoreAsync (). AsTask();
runner(); }
await aTask; await Task.Delay(250);
async void runner()
} } catch (Exception e)
{ DeviceInformationCo llection dIC = await DeviceInformation.FindAllAsync(RfcommDeviceService. GetDeviceSelector(RfcommServiceId.SerialPort)); myService = await RfcommDeviceServic e.
{ e = e;
FromIdAsync(dIC[0].Id); DeviceInformation a = dIC[0]; mySocket = new StreamSocket(); try
} } }
Listing 4. Zeichen empfangen mit Arduino. #include #include #include #include
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_ DC, OLED_RESET, OLED_CS); char mode=0; char readCtr=0; char myField[32]; void setup() { Serial.begin(9600);
}
display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); delay(2000); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.println(“Online!”); display.display();
case 0: //Warte auf LOS
readCtr=0; } }
break; case 1: //Lese und speie aus
if(Serial.available()) {
char val=Serial.read(); if(val==0){ //Ende
myField[readCtr]=val;
display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(myField);
display.display(); readCtr=0;
mode=0; } else
{
myField[readCtr]=val;
readCtr++; }
}
switch(mode)
}
{
Juli/August 2016
break; }
{
28
if(val==1){ mode=1;
}
void loop() { if(Serial.available())
if(Serial.available()) { char val=Serial.read();
www.elektormagazine.de
����������
����
�
Nach dem nun etwas anders aussehenden Scanprozess öffnen wir einen StreamSocket . Diese Klasse ist in der Universal Windows Platform auch für serielle Verbindungen zu externer Hardware zuständig. Nach dem erfolgreichen Aufbau der Verbindung erzeugen wir den zu sendenden Bitstrom, der daraufhin über eine DataWriterKlasse in den zum Arduino zeigenden Socket geschrieben wird. Diese auf den ersten Blick überkomplex aussehende Vorgehensweise ist notwendig, da das Einschreiben der von WriteBytes entgegengenommenen Daten erst im Rahmen der Abarbeitung des von StoreAsync zurückgegebenen AsyncTasks erfolgt. Im nächsten Schritt warten wir 250 Millisekunden, um dem Arduino etwas Zeit zur Entgegennahme der angelieferten Daten zu geben. Dies ist insofern notwendig, als es sonst zu Überlastungen des Puffers kommt – sie äußern sich durch das in Bild 8 gezeigte Schirmbild. Am Ende des Codes findet man noch eine kleine Spitzfindigkeit in Sachen .NET. Das Setzen von e = e erleichtert die Platzierung eines Breakpoints, mit dem wir eine eventuell angelieferte Exception analysieren können.
&
�
����� & ������
��������
= SPI CLK
10
5V
D0
9
D1
13
RES
11
DC
12
5V capable 0.96” OLED 128 x 64
CS
ARDUINO
USB VCC 1=TX
RXD
HC-06 0=RX
TXD
GND
GND
Bild 7. SPI und serielle Schnittstelle im Do ppelteam.
Arduino-Sketch
Damit können wir uns dem auf dem Arduino Uno laufenden Sketch zuwenden. Die für das Display benötigte Treiberbibliothek steht im Bibliotheksverwalter unter dem Namen „Adafruit SSD1306“ zum Download bereit. Aus Gründen der Bequemlichkeit wollen wir zudem auf die Adafruit GFX Library zurückgreifen, die grafische Primitiva bereitstellt. Im Rahmen von setup() weisen wir die display-Bibliothek dazu an, eine Verbindung zu unserem Display aufzunehmen (Listing 4). Die eigentliche Intelligenz findet sich derweil in der loop-Methode, die einen kleinen Zustandsautomaten realisiert. Dazu etwas Erklärung: Ein Zustandsautomat ist ein Programm, das zwischen mehreren definierten Betriebszuständen hin und her wechselt. In unserem Fall ist dies entweder das Warten auf das Startbit 1 oder das Entgegennehmen von Bits, die anzuzeigen sind. Damit ist auch diese Version des Programms ausführbar. Fehler der Bauart „No more data is available. (Exception from HRESULT: 0x80070103)“ lassen sich durch einen Neustart des Telefons und/oder des Funkmoduls beheben.
Bild 8. Hier wurden zu viele Daten übertragen.
Weblinks [1] www.arduino.cc/en/Reference/Firmata [2] www.elektormagazine.de/150465 [3] www.elektormagazine.de/150763 [4] https://sourceforge.net/p/firmata/mailman/ message/22824115/
Fazit
[5] https://github.com/ms-iot/remote-wiring/issues/80
Die schlechte Reputation von Windows Mobile 10 ist unverdient, die Kommunikation per Bluetooth funktioniert im Großen und Ganzen problemlos. Dieser Artikel beschränkte sich auf das Senden von Informationen vom Telefon zum Arduino. In beiden Fällen ist natürlich auch das Entgegennehmen von Daten möglich.
[6] www.elektormagazine.de/150520 [7] https://create.arduino.cc/projecthub/mohanp/ windows-remote-arduino-yun-wifi-and-networkserial-b3290a
(150763)
Es geht nicht!
Zu langsam!
Wenn eine auf Windows Remote Arduino basierende Applikation partout keinen Kontakt zum Arduino aufnehmen möchte, können Sie das korrekte Funktionieren von Hardware und Telefon sowie die Korrektheit der FirmataVersion mit dem im App-Store bereitstehenden Programm „Windows Remote Arduino“ prüfen.
Das HC-06-Modul arbeitet von Haus aus nur mit 9600 bps. Wer mehr Geschwindigkeit haben möchte, muss ein diesbezügliches AT-Kommando an das Modul senden. Weitere Informationen hierzu finden sich in der Dokumentation.
www.elektormagazine.de
Juli/August 2016
29
�����
������
�����
Tipps & Tricks (3) von Neil Gruending (kanada)
Seit der letzten Folge ist klar, wie man ein Projekt anlegt und einen Schaltplan hinzufügt. Nachfolgend wird demonstriert, wie man eine Platine erstellt und Gerber-Dateien erzeugt. Platine erstellen
Will man eine Platine zum Projekt hinzufügen, so führt der erste Schritt über das Menü Home Add new PCB. Man wird nach einem Dateinamen gefragt, danach wird eine Platinen-Datei für das quadratische Standardmaß von 100 × 100 mm wie in Bild 1 erzeugt. Diese Größe passt natürlich selten, weshalb man via Home Board Board Shape Redefine Board Shape oder Edit Board Shape andere Maße festlegen kann. Doch die bevorzugte Methode ist das Zeichnen der Platinen-Umrisse im Layer Keepout mit den Tools line und arc . Auf diese Weise wird der Keepout-Bereich auch bei der Platzierung der Bauteile und beim Routing der Leiterbahnen wirksam. Wenn man den Plaª
ª
ª
ª
tinen-Umriss gezeichnet hat, kann man alle Elemente im Layer Keepout via Home Clipboard Select All on Layer selektieren; danach geht man ins Board-Shape-Menü und macht diese Elemente mit Define From Selected Objects zum wirksamen Platinenumriss. Wenn dieser Punkt erledigt ist, geht es darum, die Bauteile aus dem Schaltplan auf die Platine zu transferieren. Dies erfolgt mit Home Project Update PCB Document . CircuitMaker wird dann automatisch alle Schaltungsdokumente scannen um deren Hierarchie zu bestimmen und die Verbindungsinformationen zu generieren. Dann sucht das Comparator-Tool nach etwaigen Unterschieden zwischen Schaltung und Platine. Aus den gefundenen Unterschieden wird dann wie in Bild 2 eine ECO-Liste (Engineering Change Order) erstellt, mit der man die aufgelisteten Änderungen der Platine validieren und anwenden (execute) kann. Man kann die Anwendung von Änderungen auch verhindern, indem man den entsprechenden Haken in der Spalte Enable vor der jeweiligen Zeile wegnimmt. Anschließend sind alle Bauteile auf der Platine vorhanden und die Netzliste erfährt ein Update. Wenn man nun die Bauteile auf der Platine platziert, kann man mit den in der letzten Folge erwähnten Tastatur-Shortcuts viel Zeit sparen. Z.B. ist es viel einfacher, ein Bauteil mit der Leerzeichen-Taste zu rotieren statt mit der Maus. Wenn alle Bauteile platziert sind, geht es weiter mit dem Routing. ª
ª
ª
ª
Platinen-Routing
Bild 1. Standard-Platine mit 10 × 10 cm.
CircuitMaker verfügt über einige interaktive Routing-Tools. Mit dem Tool Interactive Routing kann man eine Leiterbahn verlegen, wobei CircuitMaker dafür sorgt, dass anderen Leiterbahnen und sonstigen Hindernissen ausgewichen wird. Das Tool Differential Pair dient zum gleichzeitigen Verlegen beider Bahnen differentieller Leiterbahnen. Mit dem Tool Interactive Multi-Routing kann man gleich eine ganze Gruppe von Leiterbahnen wie etwa bei einem Bus gemeinsam verlegen. Bei Verlegen von Leiterbahnen gibt es via Shortcut Shift+R mehrere Optionen: • Ignore: Damit kann
man überall Leiterbahnen verlegen. • Stop at first obstacle: Hier wird das Verlegen beim ersten Hindernis gestoppt. • Push: Es wird versucht, andere Leiterbahnen zu verschieben (siehe Bild 3). Bild 2. Fenster „Engineering Change Order“.
30
Juli/August 2016
www.elektormagazine.de
• Autoroute on current Layer : Ein einfacher Autorou-
Advertor ial
����������
����
�
&
�
����� & ������
��������
ter schlägt beim Auftreten eines Hindernisses eine optimale Route vor.
Weblinks
Der interaktive Router von CircuitMaker überprüft permanent die gerade verlegte Leiterbahn auf Verstöße gegen die Design Rules. Jedes neue Projekt erhält zunächst einen Standard-Satz an Design-Regeln, die mit dem entsprechenden Editor per Home Design Rules Define Design Rules geändert werden können. Bild 4 zeigt die Regel für die Clearance. Man kann CircuitMaker beispielsweise anweisen, normalerweise einen Bahnabstand von 0,25 mm zu verwenden, der bei bestimmten Bauelementen auf 0,15 mm reduziert wird. Das Regel-System erlaubt auch das Gruppieren von Bauelementen und Netzen in Klassen, auf die dann Design-Regeln angewendet werden können.
[2] http://documentation.circuitmaker.com/display/CMAK/ From+Idea+to+Manufacture+-+Driving+a+PCB+Design+through+CircuitMaker
ª
[1] http://documentation.circuitmaker.com
ª
Gerber- und STEP-Dateien
Nach dem Routing muss man die für die Produktion der Platine erforderlichen Dateien generieren. Diese sind zwar durch den Platinen-Fertiger bedingt, doch meistens wird das Gerber-Format unterstützt. Gerber-Dateien haben ein recht einfaches Format, bei dem für jeden Layer der Platine eine Datei erzeugt wird, die alle notwendigen Daten für die Belichtung und die Bohrungen enthalten. Bild 3. Interaktives Routing.
Doch bevor man diese Dateien exportiert, empfiehlt sich ein Lauf des DRC via Outputs Reports Design Rule Check , weil der Echtzeit-DRC während des Routings aus Geschwindigkeitsgründen nur eine Teilmenge der Design-Regeln prüft. Der anschließende Batch-Lauf beim Klick auf Run Design Rule Check ist viel sorgfältiger. Nach der Überprüfung werden die Fehler in einer HTML-Datei ausgegeben. Klickt man einen Fehler bei den Messages an, wird die entsprechende Stelle auf der Platine markiert und eine Fehlerbeschreibung erscheint. Hat man eventuelle Fehler behoben, kann man die Gerber-Dateien via Output Fabrication Gerber exportieren. Jetzt erscheint das Gerber-Setup-Fenster, in dem man die Einheiten, die Präzision und die zu konvertierenden Layer angeben kann. Man kann hier auch die Bohrungen und deren Durchmesser konfigurieren. CircuitMaker generiert als Standard Dateien im RS274X-Format, bei dem diese Angaben in jeder Gerber-Datei zusätzlich enthalten sind, statt sie in einer eigenen Datei zu bündeln. Ein Klick auf Ok erzeugt alle Gerber-Dateien und verpackt sie in einem ZIP-Archiv, das man dann sichern kann. Was jetzt noch zu tun bleibt ist die Inspektion dieser Dateien mit einem Gerber-Viewer. Man kann mit Outputs Export Step auch STEP-Daten der Platine generieren. Diese enthalten alle relevanten Bauteile-STEP-Daten der CircuitMaker-Library, weshalb man so mit Hilfe eines MCAD-Programms zum Beispiel testen kann, ob die Platine gut in ein bestimmtes Gehäuse passt. Außerdem kann man mit dem integrierten 3D-Viewer per View View Switch to 3D das Aussehen der Platine wie in Bild 5 betrachten. ª
ª
ª
ª
ª
ª
ª
Bild 4. Editor für Design-Regeln.
ª
Mehr CircuitMaker
Diese dreiteilige Serie zu CircuitMaker konnte natürlich nur die Oberfläche streifen. Sehr hilfreich ist die Dokumentation unter [1] und dort speziell der Platinen-Kurs von [2], der sehr viel mehr ins Detail geht. Die Lektüre lohnt sich. Viel Erfolg mit CircuitMaker! (160017)
Advertor ial
Bild 5. Integrierte 3D-Ansicht von Platinen.
www.elektormagazine.de
Juli/August 2016
31
�����
������
�����
Niederspannung, EMV und R&TTE Was gibt‘s Neues? Elektronische Geräte entwickeln sich stets weiter. Sie sind, wie zum Beispiel Geräte mit Fernbedienungen, nicht nur miteinander verbunden, sondern gleichzeitig auch Sender und Empfänger von Daten - eine Tatsache, die den Gesetzgeber permanent vor neue Anforderungen stellt und ein Grund, warum sich im Jahre 2016 die Niederspannungsrichtlinie, die Richtlinie zur elektromagnetischen Verträglichkeit EMV sowie die Richtlinie für Funkanlagen und TK-Endeinrichtungen ändern. Von Mariline Thiebaut-Brodier
EU Konformitätsdeklaration Zur Erinnerung: Wenn Sie Güter innerhalb des europäischen Marktes verkaufen möchten, sind Sie für die Prüfung der Konformität der Produkte verantwortlich und unter anderem auch einer Reihe von Verpflichtungen unterworfen, zu der auch die Anforderungen hinsichtlich der Rückverfolgbarkeit gehören – ganz gleich, ob Sie außerhalb der EU oder innerhalb eines Mitgliedsstaates ansässig sind. Vor dem Vertrieb eines Produktes muss dessen Hersteller … 1. … eine Konformitätsbewertung durchführen oder durchführen lassen und das Produkt gegebenenfalls einer Überprüfung seitens Dritter überlassen. In der Regel handelt es sich dabei um eine sogenannte Notifizierte Stelle (oder Benannte Stelle). Letztendlich übernimmt der Hersteller die volle Verantwortung für das Produkt. 2. … eine technische Dokumentation erstellen.
32
Juli/August 2016
www.elektormagazine.de
3. … eine EU-Konformitätsdeklaration zur Verfügung stellen. 4. … dafür sorgen, dass das Produkt mit den entsprechenden Sicherheitshinweisen ausgeliefert wird, die in einer für den Konsumenten und für weitere Endverbraucher leicht verständlichen Sprache verfasst sind. 5. … die technische Dokumentation und die EU-Deklaration gemäß den Rückverfolgungsanforderungen für 10 Jahre aufbewahren und eine Serienbzw. Typennummer auf dem Produkt anbringen – zusammen mit dem eingetragenen Warenzeichen und der Firmenbezeichnung. 6. … das Konformitätszeichen anbringen (CE = Den Richtlinien der Europäischen Gemeinschaft [Communauté Européenne] entsprechend) 7. … sicherstellen, dass die Serienproduktion konform bleibt. 8. … gegebenenfalls die Zertifizierung des Produktes und/oder des Qualitätssystems selbst durchführen. Die EU-Konformitätsdeklaration ist das Dokument, das einem Produkt bestä-
tigt, den geltenden Erfordernissen einer oder mehrerer europäischen Richtlinien zu genügen. Diese Richtlinien definieren die grundlegenden Anforderungen hinsichtlich Sicherheit, Gesundheit und Umwelt. Auch die Bewertungsverfahren werden durch die Richtlinien definiert. Auch wenn ein Produkt mehreren Richtlinien unterworfen ist, muss nur eine einzige Erklärung erstellt werden, die Teil des Produktes ist. Die EU veröffentlicht regelmäßig eine Liste der anzuwendenden Normen, um den unterschiedlichen Anforderungen der einzelnen Richtlinien zu begegnen. Die Bezeichnung „CE“ für die EU-Konformitätserklärung wird übrigens in einigen europäischen Ländern nicht mehr verwendet, da sie irreführend auch für „China Export“ genutzt wird. In Frankreich wurde sie zum Beispiel in „UE“ umbenannt. Das CE-Zeichen ist ein Indikator (aber kein Beweis) dafür, dass sich ein Produkt mit der europäischen Gesetzgebung in Einklang befindet und innerhalb der Grenzen des europäischen Marktes frei
����
����������
bewegt werden darf – ganz gleich ob es innerhalb des europäischen Wirtschaftsraumes, in der Türkei oder in einem beliebigen anderen Land hergestellt wurde. Nähere Informationen finden Sie im Blauen Leitfaden unter dem Thema: Umsetzung der EU-Produktregulierung [1].
�
&
�
keit (EMV) und die Richtlinie für Funkanlagen und TK-Endeinrichtungen (R&TTE) sind für elektronische Produkte gedacht. Die unten stehende Tabelle gibt einen Überblick über die wichtigsten Änderungen seit Jahresbeginn. Die Niederspannungs- und EMV-Richtlinie wurden geändert. Die R&TTE-Richtlinie wurde revidiert und in RED umbenannt.
Niederspannung Die Niederspannungsrichtlinie, die Richtlinie zur elektromagnetischen Verträglich-
Die geänderte Niederspannungsrichtlinie enthält einige Paragrafen, die nicht
����� & ������
��������
ganz unproblematisch sind (wir fassen den Wortlaut sinngemäß zusammen, die Richtlinie kann man im Volltext unter [2] abrufen):
• (4) Die aktuelle Richtlinie bezieht sich auf elektrisch betriebene Produkte zur Anwendung innerhalb bestimmter Spannungsgrenzwerte, die seit ihrer Einführung neu auf dem EU-Markt sind. Mit anderen Worten: Es handelt sich entweder um ein Produkt mit
Richtlinie
Alte Richtlinie Revidierte Richtlinie
Niederspannung
Elektromagnetische Verträglichkeit (EMV)
Funk (R&TTE)
2006/95/CE
2004/108/CE
1999/5/CE (R&TTE)
annulliert 19.04.2016
annulliert 19.04.2016
gültig bis: 13.06.2016
2014/35/EU
2014/30/EU
2014/53/EU (RED)
Pflicht ab: 20.04.2016
Pflicht ab: 20.04.2016
Pflicht ab: 13.06.2016
Die EMV-Konformitätsdeklaration wurde umbenannt, zum Beispiel in Frankreich von CE in UE. Die Importeure müssen ihren Namen auf den Produkten bzw. der Verpackung angeben. Die Verantwortlichkeiten bezüglich der Vermarktung von Produkten (vor allem die Forderung der Rückverfolgung und der Überwachung) wurden für die Hersteller, Importeure und Händler präzisiert und weiter ausgebaut.
Wichtigste Änderungen
Telekommunikations-Endgeräte gehören nicht mehr zum Anwendungsbereich der RED-Richtlinie. Rundfunk- und Fernsehgeräte werden in den Anwendungsbereich der RED-Richtlinie aufgenommen.
Was wurde nicht verändert
Folgen
CE-Zeichen Anwendungsbereich und grundlegende Anforderungen an Gesundheit und Sicherheit
Da die EU-Konformitätserklärungen der überarbeiteten Richtlinie die CE-Konformitätserklärungen ersetzen, müssen sie auch in allen Lagern der Hersteller bei allen Produkten vor dem 20.04.2016 ersetzt werden.
Beide Richtlinien sind für ein Jahr lang für Produkte gültig, die unter die Richtlinie R&TTE fielen und die weiterhin zur Richtlinie RED gehören. Seit dem 13.06.2016 muss auch gelagertes Material den REDAnforderungen genügen.
Das bei einem Händler oder Anwender gelagerte Material ist so zu betrachten, als wäre es schon auf dem Markt: Die revidierte Richtlinie gilt hier nicht.
Übergangsperiode
Es gibt keinen Übergangszeitraum, in welchem die alten und die revidierten Richtlinien gleichzeitig anwendbar sind. Die Umstellung fand am 20.04.2016 statt.
Es gibt eine Übergangsperiode während der die beiden Richtlinien R&TT sowie RED gleichzeitig angewendet werden dürfen. Diese Übergangszeit endet am 13.06.2017.
www.elektormagazine.de
Juli/August 2016
33
�����
������
neuen elektrischen Komponenten, dessen Hersteller in der EU ansässig ist, oder um ein Produkt, das neu oder gebraucht sein kann und aus einem Drittland importiert wurde.
• (5) Die vorliegende Richtlinie sollte sich auf alle Arten von Lieferungen beziehen, auch auf den globalen Verkauf . Die Unterscheidung zwischen neu und gebraucht tauchte zuvor nicht auf – auch nichts, was den Versand eines Produkts betrifft: Wenn Sie ein elektronisches Gerät kaufen, das vom anderen Ende dieses Planeten stammt, muss der Verkäufer eine EU-Konformitätserklärung anbieten. Das wird kompliziert werden.
�����
tation sollte eine Analyse und eine entsprechende Bewertung der Risiken enthalten. Das ist neu und macht die Arbeit nicht gerade leichter. Wird es wirklich gelingen, dabei an alle Möglichkeiten einer falschen Anwendung zu denken – ganz gleich, ob Behinderte oder Nicht-Behinderte im Spiel sind? Enden wir schließlich bei einem Dokument, das an einen Medikamenten-Beipackzettel mit seiner endlosen Liste unerwünschter Nebeneffekte erinnert?
EU Declar aton of W e
C onf or mity (DoC )
C ompany name: Postal addr ess: Postcode and C ity : T elephone number : E-Mail addr ess: declar e that the DoC is
issued under our so le r esponsibility and belong s to th e f ollow ing pr oduct :
Appar atus model / Pr oduct: T yp e: Batch: Ser ial number :
Ob ject of the decla r aton (identficaton of appar atus allo sufficient clar ity w w ing tr aceability ; her e necessar y f o it may include a colo r the identficaton o ur image of f the appar atus):
of
ibed
in
T he f ollow ing har monised standar d s and technical spe cificatons hav e been applied:
T itle
:
• (9) Der Hersteller ist auf Grund seiner detaillierten Kenntnisse bezüglich der Konzeption und des Verlaufs der Produktion am besten geeignet, das Bewertungsverfahren umzusetzen. Die Konformitätsbewertung sollte daher auch weiterhin die ausschließliche Verpflichtung des Herstellers bleiben. Diese Richtlinie sieht kein Bewertungsverfahren vor, das den Eingriff einer notifizierten Stelle erfordert. Die notifizierten Stellen (solch eine notifizierte Stelle [bzw. ein Labor] ist ein Gremium, das nach gewünschten Vorgaben durch die öffentlichen Behörden eines EU-Mitgliedsstaates dazu bestimmt wurde, die Konformitätsbewertungen von Produkten durchzuführen) scheinen langsam aus der Liste der möglichen Institutionen, die Konformitätsbewertungen durchführen können, zu verschwinden. Ein Risiko besteht hier eindeutig beim Vermarkten nicht konformer Produkte.
• (18) Die relevanten, harmonisierten Normen für die existierende Richtlinie sollten auch die die UN-Konventionen bezüglich der Rechte Behinderter beachten. • Im Anhang zur internen Fertigungskontrolle: Die technische Dokumen-
• Artikel 6 – Verpflichtungen der Hersteller
(8) Hersteller, die a 4 dig it ed body number Kenntnisse darü: ber oder Grund zur Annahme haben, dass Sig ned f or and on behalf of : ein von ihnen auf den Place of issue Markt gebrachtes ProDate of issue Name, f unc on, signatur e dukt für den Elektrobereich nicht der aktuellen Richtlinie entspricht, unterEin Importeur muss zum Beispiel die nehmen, wenn notwendig, unverzüglich die notwendigen Maßnahmen zur technische Dokumentation eines ProHerstellung der Konformität oder zur duktes 10 Jahre lang aufbewahren, seiRücknahme bzw. zum Rückruf. nen Namen und seine Adresse auf dem Produkt anbringen, sich vergewissern, dass das Produkt mit einem Handbuch Die Verantwortlichkeit der Hersteller wurde erhöht: Sie müssen nachweisen und den entsprechenden Sicherheits-Hinkönnen, dass sie auf die vom Kunden- weisen versehen ist – und er muss mit service aufgezeigten Probleme reagieren. den Behörden kooperieren. Außerdem Der nachfolgende Artikel 7 zeigt, dass muss er kontrollieren, dass seine Prosie mit den Behörden zusammenarbei- dukte vorschriftsmäßig gelagert sind und ten müssen, um die Konformität ihres Lithium-Ionen-Akkus zum Beispiel nicht Produktes zu belegen. monatelang hinter großen Glasfenstern In diesem Zusammenhang gibt es eine aufbewahrt werden. weitere, große Neuigkeit: Die Importeure Schließlich gibt es auch einige Produkte, und ganz allgemein alle im Handel täti- die nicht unter die Niederspannungsrichtgen Personen (Händler, Bevollmächtigter) linie fallen. Dazu zählen in erster Linie die unterliegen denselben Verpflichtungen sogenannten Evaluation-Kits zum auswie der Hersteller, wenn es um die Konschließlichen Einsatz in Forschungs- und formität geht. Auch wenn dies schlüssig Entwicklungseinrichtungen. klingt, war dies in der vorhergehenden Version der Richtlinie nicht klar definiert. (160094)
Links:
[1] Blue Guide (Blauer Leitfaden), http://ec.europa.eu/DocsRoom/documents/16210?locale=de [2] Richtlinien im Volltext: http://eur-lex.europa.eu/homepage.html?locale=de In Suchmaske eingeben: 2014/35/EU bzw. 2014/30/EU bzw. 2014/53/EU.
34
Juli/August 2016
www.elektormagazine.de
notfi
t
LEARN
DESIGN
SHARE
lektor PCB Service Powered by
Platinen – Prototypen – Multilayer – Kleinserien Kostengünstig!
Top-Qualität!
Zuverlässig!
• PCB proto: Ideal für Privatleute, die schnell und günstig maximal 2 Leiterplatten nach vordefinierten Spezifikationen benötigen.
• STANDARD pool: Diese Option ist für Firmen konzipiert, die i hre Kleinserie nach den am häufigsten verwendeten Spezifikationen produzieren lassen wollen.
• RF pool: Wenn Ihre Entwicklung sehr anspruchsvolle Spezifikationen erfordert, ist 100-µm-Technologie die beste Wahl.
• IMS pool: Bei dieser Option werden Aluminiumkern-Leiterplatten verwendet, um eine hohe Wärmeabfuhr zu gewährleisten.
Bestellen Sie Ihre Platinen jetzt unter:
www.elektorPCBservice.de
�����
������
�����
Assembler Crashkurs 2.2 Indirekte Adressierung In der letzten Folge unserer zweiten Assembler-Crashkurs-Serie haben wir die Ansteuerung eines LEDDisplays im Multiplexverfahren behandelt. Dank eines modernen Mikrocontrollers mit fortgeschrittenen Adressierungsarten vereinfacht sich dabei die Programmierung. In dieser zweiten Folge werden wir zusätzlich die indirekte Adressierung kennenlernen. Von Miroslav Cina
[email protected]
Die modernere PIC-Mikrocontroller-Familie PIC1xF18xx bietet mit der indirekten Adressierung ein Feature, das sich sehr gut nutzen lässt. Großer Vorteil ist, dass man so völlig linear auf Speicher zugreifen kann und die zum Teil umständliche Behandlung segmentierter Blöcke umgangen wird. Damit sind diese Mikrocontroller ähnlich einfach zu handhaben, wie es bei „richtigen“ 8-bit-Mikroprozessoren wie etwa dem in den 1980ern populären Z80 möglich war.
Register INDFx In der letzten Folge wurde die direkte Adressierung mit Hilfe des Registers BSR beschrieben. Alle Mikrocontroller der PIC1xF18xx-Serie beinhalten mit INDF0 und INDF1 zwei wei-
Bild 1. Speicherorganisation von Mikrocontrollern der Serie PIC12F18xx.
36
Juli/August 2016
www.elektormagazine.de
tere Spezial-Register, mit denen linear auf den Arbeitsspeicher zugegriffen werden kann. Noch besser: Man erhält so auch einen linearen Zugriff auf den Programmspeicher. Bei dieser Zugriffsmethode wird der Gesamtspeicher aus RAM und Flash (aber nicht EEPROM!) des Mikrocontrollers als ein einziger Speicherblock mit 64 KB dargestellt. Für einen Adressraum von 64 KB sind Adressen mit 16 bit erforderlich. Solche Adressen sind in den Registerpaaren FSR0 (FSR0H | FSR0L) und FSR1 (FSR1H | FSR1L) enthalten. Diese Register-Paare wurden schon als Bestandteil der Core-Register beleuchtet. Was jetzt noch für die indirekte Adressierung nötig ist, sind zwei weitere Assembler-Befehle. Bei der Beschreibung wird dann auch klar, zu welchen Zwecken sich die Register INDF0 und INDF1 eignen. Das RAM befindet sich gleich zweifach im 64-KB-Adressraum. Zunächst liegt es im Bereich 0000h bis 0FFFh als herkömmlicher Arbeitsspeicher. Der Zugriff auf diese Adressen mittels FSRx entspricht weitgehend der direkten Adressierung via BSR . Das RAM ist dann nochmals im Adressbereich 2000h bis 29AFh verfügbar – hier aber linear. Dies ist dann relevant, wenn man beispielsweise elegant auf ein Datenfeld bzw. eine Tabelle zugreifen möchte. Doch warum endet der Adressbereich bei 29AF und nicht bei 2FFF? In diesem Speicherbereich werden die Blöcke zu je 80 Byte aus den einzelnen Speicherbänken gespiegelt. Die Bank0 mit dem Adressbereich 020h bis 06Fh findet man hier im Bereich 2000h bis 204Fh, Bank1 entsprechend bei 2050h bis 20AFh usw. Die letzte gespiegelte Bank (Bank30) endet daher bei der Adresse 29AFh. Der Zugriff auf den Flash-Programmspeicher erfolgt über die Adressen 8000h bis FFFFh. Es ist evident, dass nicht alle Speicherplätze tatsächlich belegt sind. Zum Beispiel stecken die 8 KWords Flash des PIC16F1829 im Bereich 8000h bis 9FFFh. Die lediglich 2 KWords des PIC12F1822 hingegen passen in den Bereich 8000h bis 87FFh. Der nicht genutzte Rest ist zwar adressierbar, doch macht dies keinen Sinn.
����������
�
����
Typisch für diese PIC-Mikrocontroller sind 8 bit breite RAM-Zellen, doch der Programmspeicher ist in 14-bit-Worten organisiert. Die Frage ist nun, wie diese 14-bit-Worte in den Adressbereich gepackt wurden. Die Lösung ist verblüffend einfach: Man kann direkt nur auf das Byte mit den acht LSBs (Least Significant Bits) zugreifen. Vor der Beschreibung des Zugriffs mit dem Befehl MOVIW empfiehlt sich zunächst ein Blick auf die Speicherorganisation von Bild 1. Hier ist zu sehen, dass der Programmspeicher eine Breite von 14 bit hat. Auf dessen höherwertige sechs Bits hat man keinen Zugriff, weswegen dieser Bereich grau dargestellt ist. Der Befehl MOVIW kopiert den Inhalt der Speicherzelle der im Registerpaar FSR0 stehenden Adresse in das W-Register. Dabei werden lediglich die acht niederwertigen Bits kopiert.
&
�
Tabelle 1. Syntax moviw ++FSRn moviw --FSRn moviw FSRn++ moviw FSRn--
����� & ������
��������
Bedeutung Preincrement
Inkrementierung vor Lesezugriff Predecrement
Dekrementierung vor Lesezugriff Postincrement
Inkrementierung nach Lesezugriff Postdecrement
Dekrementierung nach Lesezugriff
MOVIW Der Befehl dient prinzipiell zum Transport des Inhalts von Register INDFn in das W-Register (MOVe Indfn to W). INDFn kann entweder INDF0 oder INDF1 sein. Und jetzt der Trick: Das Register INDFn existiert nicht. Beim Zugriff auf INDF0 wird immer auf die Speicherposition mit der in FSR0 enthaltenen Adresse zugegriffen (bei INDF1 gilt entsprechend die Adresse von FSR1). Es gibt zwei Verwendungsvarianten: Bei einer Variante wird auch der Pointer angepasst (inkrementiert oder dekrementiert) und bei der anderen nicht. Hier geht es um die erste Variante, da sie oft bei Zugriffen auf Datenfelder verwendet wird. Für die erste Variante gibt es noch die vier Subtypen nach Tabelle 1, die sich darin unterscheiden, ob der Pointer vor oder nach dem Zugriff geändert und ob er inkrementiert oder dekrementiert wird. Außerdem kann „n“ die Werte „0“ oder „1“ (Verwendung von Register FSR0 oder FSR1) haben. Außer dem beschriebenen Befehl MOVIW gibt es mit MOVWI auch dessen Gegenteil: Mit diesem Befehl wird der Inhalt des W-Registers in die jeweils adressierte Speicherzelle geschrieben. Das funktioniert natürlich nur in dem Bereich, in dem sich RAM befindet. Wenn man den Inhalt des Flash-Speichers ändern will, so benötigt man andere Techniken. Dies sollte außerdem mit Vorsicht genossen werden, da sich selbst modifizierender Code so seine Tücken hat.
Programmspeicher anzeigen Da mit dem LED-Display aus der letzten Folge schon eine Hardware zur Anzeige von Werten zur Verfügung steht, wird sie nun dazu benutzt, nach und nach den Inhalt des Flash-Speichers ab der Adresse 1000h anzuzeigen. Dazu muss lediglich das Hauptprogramm der Software des Mikrocontrollers geändert werden. Ansonsten wird der Display-Treiber aus der letzten Folge leicht modifiziert weiterverwendet. In der Hauptroutine steckt diesmal kein Zähler, sondern der Code zum Auslesen der Daten des Programmspeichers. Das Prinzip: In einer Schleife werden Daten aus dem ProListing 1. ;------------------------;old decimal character set ;------------------------wm_char_set brw
Bild 2. Anzeige eines Bytes in hexadezimaler Form auf dem LED-Display von Folge 1.
grammspeicher gelesen und auf dem Display angezeigt. Das Programm liest hierzu byteweise Daten ab der Adresse 1000h. Jedes gelesene Byte wird für eine kurze Zeit angezeigt, und dann ist das nächste an der Reihe. Die Schleife wird beendet, wenn der Wert FFh aus dem Speicher gelesen wurde. Alles beginnt dann wieder neu mit der Adresse 1000h. Da es sich hierbei um Bytes handelt, benötigt man zur Darstellung nicht nur normale numerische, sondern hexadezimale Zeichen. Die Anzeige eines Bytes im Hex-Format benötigt auf dem Display lediglich zwei Stellen. Genutzt werden hierfür die beiden linken Display-Stellen LD0 und LD1. LD2 bleibt leer und auf der vierten Position LD3 steht dauerhaft ein „h“. Der dezimale Wert 122 wird dann wie in Bild 2 zu sehen als „7A h“ angezeigt
Änderung am Display-Treiber Wie schon erwähnt, muss das Display nun hexadezimale Zeichen darstellen können. Anders als beim Code von Folge 1 genügt es nicht mehr, nur die Ziffern „0“... „9“ und das Zeichen „-“ darzustellen. Jetzt sind auch noch die Buchstaben „ A“... „F“, das Leerzeichen und das kleine „h“ erforderlich. Das erfordert Änderungen am Display-Treiber. Damit kann man dann alle dezimalen Werte von 0 bis 255 hübsch hexadezimal darstellen. Der Zeichensatzgenerator in der Routine „wm_char_set“ muss also etwas wachsen. Der Unterschied zwischen der alten dezimalen Version von Listing 1 zur neuen hexadezimalen Version in Listing 2 hält sich allerdings in Grenzen. Dieses Beispiel zeigt zudem, wie einfach es ist, den Display-Treiber zu erweitern, falls dies erforderlich ist. Ein Zeichen wird in einer Assembler-Zeile definiert. Damit sind alle erforderlichen Änderungen an der Anzeige selbst schon erledigt.
retlw B'00111111' ;00h -> 0
retlw B'01111101' ;06h -> 6
retlw B'00000110' ;01h -> 1
retlw B'00100111' ;07h -> 7
retlw B'01011011' ;02h -> 2
retlw B'01111111' ;08h -> 8
retlw B'01001111' ;03h -> 3
retlw B'01101111' ;09h -> 9
retlw B'01100110' ;04h -> 4
retlw B'01000000' ;0Ah -> minus
retlw B'01101101' ;05h -> 5
www.elektormagazine.de
Juli/August 2016
37
�����
������
�����
Hauptprogramm
Error[118]
Jetzt geht es weiter mit dem Hauptprogramm, das aus den folgenden drei Teilen besteht: • Auslesen der Daten aus dem Flash-Speicher mit Subroutine f_get_data. • Konvertierung der Bytes in zweistelliges Hex-Format mit Subroutine calc_hex_disp. • Struktur der endlosen Hauptschleife.
Flash auslesen In diesem Programmteil wird der Einsatz der indirekten Adressierung demonstriert. Die komplette Konstanten-Deklaration als Daten für den Flash-Speicher und der zugehörige Lesezugriff kann sehr einfach implementiert werden, wie Listing 3 zeigt. Die auszulesenden Daten sollen im Programmspeicher ab Adresse 1000h abgelegt werden. Dies wird mit der Direktive ORG 1000 erzwungen (siehe step 3). Außerdem wird der Anfang der Daten als „c_data1“ gekennzeichnet. Prinzipiell könnte man auch andere Speicherbereiche verwenden. Dabei gibt es zwei Einschränkungen: Der Speicherbereich muss sich beim verwendeten Mikrocontroller auf physikalisch vorhandenen Flash-Speicher beziehen, und die Deklaration darf nicht „aus Versehen“ mit dem eigentlichen Programm-Code kollidi eren. Der hier verwendete Mikrocontroller PIC16F1829 hat 8 KWords Programmspeicher, weshalb die höchstmögliche Speicherzelle die Adresse 1FFFh hat. Falls man also fehlerhafterweise die Adresse 2000h verwendet, wird auf Adresse 0000h zugegriffen, was nicht klug ist. Deklariert man den Speicherbereich für die Daten mit der ORG-Direktive auf eine zu niedrige Adresse, gibt es beim Assemblerlauf Fehlermeldungen. Diese hängen davon ab, wo man im Programmspeicher landet. Für jedes regelwidrig überschriebene Byte hagelt es gleich zwei Fehlermeldungen, wie das folgende Beispiel zeigt:
Listing 2. ;----------------------------;new hexadecimal character set ;----------------------------wm_char_set brw retlw B'00111111' ;00h -> 0 retlw B'00000110' ;01h -> 1 retlw B'01011011' ;02h -> 2
Listing 3.
Overwriting previous address contents (0051) Error[118]
;declare and read data
Overwriting previous address contents (0051)
Warum gleich zwei Meldungen pro Byte? Weil der Programmspeicher Worte zu 14 bit enthält. Folglich ist also eine Deklaration H’AB’ identisch mit H’00AB’ . Eine solche Deklaration überschreibt also eigentlich gleich zwei Bytes – deswegen zwei Meldungen. Der erste Teil des Worts kann nur Werte von 00h bis 3Fh haben. Da man aber auf die ersten sechs Bits mit dieser Methode sowieso nicht zugreifen kann, kann man hier die Deklaration auch gleich in Kurzform vornehmen. Man hätte die Direktive ORG 1000 auch komplett weglassen können, doch dann wären die Daten gleich nach der Subroutine f_get_data im Flashspeicher abgelegt worden. Gelegentlich ist es aber wichtig, den exakten Speicherort zu kennen, denn ohne ORG-Direktive ändert sich die Position sonst ja mit dem Code. Die Routine f_get_data (step 2) liest ein Byte aus dem Flash-Speicher und benötigt hierfür nur vier Zeilen Code. Wie zuvor beschrieben kopiert der Befehl MOVIW den Wert in das W-Register. Anschließend wird der Wert noch in die Puffer-Variable v_value für eine spätere Verwendung gesichert, und das war‘s auch schon. Da hier die Postincrement-Variante des Befehls zum Einsatz kommt, wird der zugehörige Pointer nach dem Lesen inkrementiert. Beim nächsten Aufruf der Subroutine wird daher automatisch das nächste Byte ausgelesen. Noch ein Wort zur Initialisierung der Pointer – in diesem Fall zum Registerpaar FSR1: Um die Daten von der richtigen Stelle zu lesen, muss hier die jeweilige Adresse stehen. Dies erledigt die Subroutine f_get_add (step 1). Dabei wird die Adresse mit den Direktiven „LOW“ und „HIGH“ aufgeteilt und in die passenden Registerhälften geschrieben. Die Zeile movlw
;step 1 clrf
BSR
movlw LOW c_data1 movwf FSR1L movlw HIGH c_data1 movwf FSR1H
38
LOW c_data1
retlw B'01001111' ;03h -> 3
retlw B'01111100' ;0Bh -> b
retlw B'01100110' ;04h -> 4
retlw B'00111001' ;0Ch -> C
retlw B'01101101' ;05h -> 5
retlw B'01011110' ;0Dh -> d
retlw B'01111101' ;06h -> 6
retlw B'01111001' ;0Eh -> E
retlw B'00100111' ;07h -> 7
retlw B'01110001' ;0Fh -> F
retlw B'01111111' ;08h -> 8
retlw B'01000000' ;10h -> minus
retlw B'01101111' ;09h -> 9
retlw B'00000000' ;11h -> space
retlw B'01110111' ;0Ah -> A
retlw B'01110100' ;12h -> h
;step 2 f_get_data
BSR
movwf v_value
return
; ;step 3 ORG 1000 c_data1
da H'01', H'02', H'03', H'04'
da H'AB', H'CD', H'EF'
return
Juli/August 2016
clrf
moviw FSR1++
;---------------------
C:\...\05_TEST.ASM 339 :
;
;---------------------
f_get_add
C:\...\05_TEST.ASM 339 :
da H'FF'
www.elektormagazine.de
����������
����
kopiert zunächst das niederwertige Byte der Adresse von c_ data1 in das W-Register – hier also der Wert 00h (von 1000h). Anschließend kopiert die Zeile movlw
HIGH c_data1
�
&
�
����� & ������
0
��������
register f
C
Bild 3. Die Vorgänge beim Bit-Shifting durch den Assembler-Befehl LSRF.
das höherwertige Byte 10h (von 1000h) in das W-Register. Eigentlich ist das nicht ganz richtig, denn aufgrund der indirekten Adressierung ist der Flash-Speicher ja erst ab Adresse 8000h zu finden. Der Speicherplatz 0000h befindet sich deswegen im FSR-Adressraum auf Adresse 8000h. Das Datum von c_data1 ist also an der Adresse 9000h zu finden. Deswegen landet bei der vorigen Code-Zeile der Wert 90h im W-Register und nicht 10h. 1 Byte in 2 Nibbles
Diese Routine hat zwar nichts mit der indirekten Adressierung zu tun, ist aber notwendig, wenn man ein Byte hexadezimal ausgeben möchte. Zum besseren Verständnis wird zunächst mit LSRF (Logical Shift Right) ein neuer Befehl beschrieben. Der Befehl gehört in die Kategorie „Byte-Oriented File Register Operations“ und schiebt einfach alle Bits im Register nach rechts. Die Syntax ist: lsrf
Bild 4. Beim Bit-Shifting mit LSRF wird der Inhalt nach rechts verschoben. Das vorherige LSB landet im Status-Register und links wird mit einer „0“ als MSB aufgefüllt.
f
wobei „f“ das behandelte Register ist. Das Bit ganz rechts bzw. das sogenannte LSB landet im Orkus, der hier durch das CarryBit des Status-Registers repräsentiert wird, denn hier wird es aufgehoben. Ganz links kommt eine binäre „0“ als MSB (Most Significant Bit) ins Register. Bild 3 veranschaulicht das Geschehen. Steckt im F-Register zunächst der Wert 7Ah, ändert sich dieser durch die Anwendung von LSRF in 3Dh (siehe Bild 4). Der Vollständigkeit halber sei erwähnt, dass es mit LSLF einen Befehl mit entgegengesetzter Wirkung gibt. Der Code zur Aufteilung eines Bytes in seine höherwertigen und niederwertigen vier Bits (4 bit = 1 Nibble = 1 Halbbyte) steht in Listing 4. Zunächst wird das gelesene Byte ins W-Register kopiert (step 1) und dank AND-Befehl mit 1111b werden die vier MSBs auf 0000b gesetzt. Das Resultat wird in Variable v_lsb geschrieben. Dann wird das Byte nochmals ins W-Register kopiert (step 2) und mit der vierfachen Anwendung des Shift-Befehls LSRF werden die vier LS Bs entfernt. Die daraus folgenden vier LSBs enthalten dann den Wert der vier vorigen MSBs. Bild 5 veranschaulicht das Verhalten dieses Codestücks. Die beiden Variablen v_lsb und v_msb enthalten anschließend die Werte, die direkt für die Anzeige des Bytes in hexadezimaler Form verwendet werden können.
Ausblick Mit dem Auslesen eines Bytes und der Aufbereitung seiner hexadezimalen Anzeige ist nun die zweite Folge der zweiten Serie des Assembler-Crashkurses zu Ende. Der komplette Code steht auf der Webseite zu diesem Artikel [1] zum Download bereit. In der nächsten Folge wird es um die serielle Kommunikation via I2C bzw. SPI gehen, der bei Mikrocontrollern und ihren Peripherie-Chips besondere Bedeutung gleichkommt. Anschließend wird demonstriert, wie man über eine solche serielle Schnittstelle sehr einfach einen Port-Expander ansteuern kann. Darüber hinaus geht es noch um den Einsatz des LED-Displays als
Bild 5. Byte-Split in zwei Nibbles, die dann hexadezimal angezeigt werden.
Uhr oder U/I-Messgerät, wozu jeweils ein externer Chip und etwas Firmware erforderlich ist. Für Fragen zum Code und diesem Beispiel stehe ich Ihnen über meine E-Mail-Adresse [email protected] gerne zur Verfügung. (160018)
Weblinks
[1] Download: www.elektormagazine.de/160018
Listing 4. ;step 2
;-----------------
movf
;byte in 2 nibbles ;----------------;step 1 calc_hex_disp movf
v_value,0
andlw B'00001111' movwf v_lsb
v_value,0
movwf v_msb
lsrf
v_msb,1
lsrf
v_msb,1
lsrf
v_msb,1
lsrf
v_msb,1
return
www.elektormagazine.de
Juli/August 2016
39
Wir sind auf der Suche nach den innovativsten Ideen, Projekten und Start-ups weltweit! Der „electronica fast forward Start-up Award powered by Elektor“ verbindet erstmalig den weltweiten Elektronikmarkt, innovative Technologien sowie eine internationale Medienpräsenz und ist damit Garant, dass Ihre Start-up-Idee in den richtigen Köpfen das Meiste bewirkt. Start-ups und kreative Entwickler aus der ganzen Welt sind aufgerufen, sich bis zum 15. Juli 2016 über die Webseite www.elektor.com/ electronica-startup-award mit ihrer Idee zu bewerben. Eine Jury, bestehend aus Redakteuren des Magazins Elektor und Ingenieuren des Elektor-Labors, wird Ihre Einsendung sichten und bewerten. Die besten Ideen, Projekte und Start-ups dürfen sich auf der electronica 2016 – die Weltleitmesse für Komponenten, Systeme und Anwendungen der Elektronik in München – präsentieren und final messen. Als Teilnehmer in einer der Award-Kategorien „Idee“, „Prototyp“ und „Start-up“ haben Sie die einmalige Möglichkeit, Teil der electronica fast forward Start-up Platform powered by Elektor zu sein und so weltweite Kontakte zu knüpfen. Profitieren Sie auf der electronica von persönlicher Beratung, Kontaktvermittlung und einer Vielzahl von Messe-Events. Wir nehmen uns Ihrer Start-up-Idee an und beraten Sie auf der Messe zu Business-Plänen. Wir ermöglichen Ihnen die Präsentation Ihrer kreativen Idee vor
Intelligentes IoTGateway-Starter-Kit Von ADLINK gibt es jetzt mit dem XE-202i eine echtzeitfähige M2M-Automatisierungslösung auf der Basis von Intels IoT-Gateway-Technologie und der DDS (Data Distribution Services) von Vortex. Motion-Tracking triggert einen an MXE-202i angeschlossenen Bewegungssensor, wodurch dann die via DDS an die Robotik verteilten Daten übernommen werden um die entsprechenden Arme zu aktivieren. Die MXE-200iSerie ist ein intelligentes und robustes Embedded-System, das die Anwendungs-Entwicklung und einen einfachen Service in der Industrie-Automation unterstützt. Die intelligente Platt-
40
Juli/August 2016
www.elektormagazine.de
internationalen, strategischen Partnern und zukünftigen Kunden. Unter den Finalisten auf der Messe wird eine internationale Jury drei Gewinner aussuchen. Seien Sie einer dieser drei Gewinner des „electronica fast forward Start-up Awards“, der im Rahmen der electronica am 11. November 2016 verliehen wird. Prämiert werden die Gewinner mit internationaler PR, Consulting und Marketing im Gesamtwert von 150.000 Euro sowie einem nachhaltigen Zugang zum internationalen Elektor-Netzwerk mit über 250.000 Mitgliedern weltweit. Der Gesamt-Sieger wird mit einer internationalen Elektor Cross-Over-Marketing-Kampagne im Wert von 75.000 € sowie einem Messestand auf der electronica 2018 ausgezeichnet, Platz 2 erhält eine Elektor Media-Kampagne im Wert von 50.000 € und der Drittplatzierte darf sich über eine Elektor Medienpräsenz im Wert von 25.000 € freuen. Neugierig? Weitere Informationen zu den Teilnahmebedingungen und den Bewerbungsunterlagen finden Sie unter
www.elektor.com/electronica-startup-award
form zur Datenverteilung von Vortex ermöglicht eine einfache Distribution der Daten zwischen Geräten an sich sowie zwischen Geräten und der Cloud. Das zugehörige IoT-Gateway-Starter-Kit dient als komplette Lösung zur Verkürzung von Entwicklungszeiten und der schnellen Anwendung in jeder Anw endung sum gebung. Das Starter-Kit enthält das intelligente IoT-Gateway MXE-202i, EdgePro für das IoT-Device- und –Sensor-Management, einen Licht-Sensor, einen Sirenen-Ausgang, ein Modbus-TCP-Modul sowie Zubehör. Das IoT-Gateway-Starter-Kit und EdgePro erlauben die einfache Konfiguration mit einem benutzerfreundlichen Interface und Dashboard. www.adlinktech.com
ADVERTORIA L
Advertorial
Die Rubrik ElektorBusiness in Elektor ist der Ort für Artikel, Neuigkeiten und andere Beiträge von Firmen und Institutionen, die im Bereich Elektronik tätig sind. Redaktion ElektorBusiness: Jan Buiting Beiträge nimmt er gerne entgegen unter [email protected].
Wie die Mailbox von Prinz Philip gehackt wurde Unterlagen zu einem Hack, der in die Rechtsgeschichte in Großbritannien einging, wurden jetzt von Robert Schifreen, einem sogenannten „white hat“ im Zentrum der Kontroverse der 1980er Jahre, dem TNMOC (The National Museum of Computing) übergeben. Das Archiv enthält die Geschichte von Schifreens zwei Jahre dauerndem Leidensweg, der seinem Hack von Prestel, dem Online-System der British Telecom aus der Prä-Internet-Ära, folgte. Er demonstrierte damals die Möglichkeiten, Zugriff auf die Prestel-Mailbox von Prinz Philip zu erlangen. Zu dieser Zeit gab es noch keine Gesetze, die das Hacken betrafen. Das Archiv enthält die Details der Folgen dieses Tests, der über drei Gerichte schließlich 1987 zum Freispruch durch das House of Lords führte. Ebenfalls enthalten ist das Hacker-PasswortBuch von Schifreen aus den 1980ern sowie Transkripte seiner Verhöre durch die Polizei,
juristischer Schriftwechsel, Akten und etliches Pressematerial. Mit diesem Archiv erläutert Robert Schifreen für TNMOC-Interessierte den Kontext der 1980er-Hacks. Im Jahre 1985 gab es ja noch kein Internet und selbst die damals so genannten Heim-Computer waren noch am Anfang. Es gab die ersten öffentlichen OnlineDienste, doch noch kein Bewusstsein bezüglich Computer-Sicherheit und auch kein Gesetz, welches explizit das Hacken unter Strafe gestellt hätte. Schifreen war damals erst 22 Jahre alt und Teil einer talentierten Hacker-Gruppe, die Benutzernamen und Passwörter aus Datenbanken klaubte, die nicht für die Öffentlichkeit bestimmt waren. Er erklärte: „Hacker haben damals nie vor 18:00 Uhr losgelegt, denn tagsüber waren die Wählverbindungen für die verwendeten Modems einfach zu teuer. Außerdem war 18:00 Uhr ein guter Start, da um diese Zeit die Sicherheits-Crew von Prestel schon
nach Hause gegangen war. Die automatischen Meldungen, dass es gerade drei erfolglose Versuche gegeben hatte, sich bei Prestel einzuloggen, blieben also ohne Folgen. Ich habe die Meldungen aber gelesen und dann gelöscht, um meine Spuren vor dem Auftauchen des Sicherheits-Teams am nächsten Morgen zu verbergen. Ich hatte effektiv die Rechte eines System-Managers von Prestel. Mir gelang sogar der Zugriff auf die Mailbox von Prinz Philip und es war mir auch möglich sie zu öffnen.“ www.tnmoc.org
5 A aus nur 2 mm hohem Power-Modul Mit den Abmessungen von 10 x 6 x 2 mm ist das Gehäuse von Microchips neuem Schaltregler MIC45404 besonders platzsparend. Es bietet eine „point-of-load“-Wandlung für Anwendungen in der Telekommunikation, der Industrie und SSDs. Das thermisch optimierte Gehäuse enthält einen Controller, MOSFETs, Feedback und einen PWM-Schaltregler. In diesem Modul ist eine besonders dünne Spule sowie Bootstrap- plus HF-Eingangs-Kondensator auf einem thermisch optimierten Träger montiert. Dadurch wer-
den störende EMI und externe Bauteile vermieden, was das Layout der Platine erleichtert. Mit dem Evaluations-Kit MIC45404YMP-EV kann ein DC/ DC-Konverter realisiert werden. www.microchip.com/EUMIC45404
Dreikanal PMIC für Low-Power-FPGAs und -SoCs Beim XR77103 handelt es sich um ein universelles PMIC (Power Management IC) mit drei integrierten synchronen MOSFET-Leistungsstufen. Trotz des nur 4 x 4 mm großen ICs stellt es eine einfach anzuwendende Power-Management-Lösung für viele FPGAs, SoCs, DSPs und Video-Prozessoren dar. Das PMIC XR77103 verfügt über ein I2C-Interface zur Steuerung der Ausgangsspannung (0,8 bis 6 V), der Schaltfrequenz (0,3 bis 2,2 MHz), des Power-Sequencing und der Strombegrenzung. Es unterstützt eine neue Ver-
ADVERTORIA L
sion der Design- und Konfigurations-Software PowerArchitect 4. Das XR77103 arbeitet mit Versorgungsspannungen von 4,5 bis 14 V. Alle drei Ausgänge sind für einen Laststrom von 2 A mit Spitzenwerten bis zu 3 A ausgelegt. Da der Chip über eine Strom-Steuerungsarchitektur verfügt, können mehrere davon einfach parallel für Ausgangsströme bis 5 A geschaltet werden, wodurch man damit Low-Power-Prozessoren versorgen kann. Ein schaltbarer PSM (Pulse Skipping Mode) ermöglicht einen erhöhten Wirkungsgrad bei geringer Last, was für effektives Standby-Management und eine möglichst große Batterielaufzeit unerlässlich ist. Die Typen XR77103ELB, XR77103ELB-A0R5 und XR77103ELB-A1R0 sind im platzsparenden 4x4-QFN-Gehäuse (RoHS compliant und Halogen-frei) erhältlich. www.exar.com/products/power-management/universal-pmics
www.elektormagazine.de
Juli/August 2016
41
ElektorBusiness Report
Futuristischfantastische Akkus Geladen in Sekunden – Energie für Monate Aus allen Universitäten drängen sie und aus allen Forschungseinrichtungen kommen sie: neuartige Akkukonzepte. Technologiefirmen und Autohersteller pumpen aktuell sehr viel Geld in die Entwicklung neuer Akkutypen. Dennoch steckt leider noch nichts „Neues“ in unseren Mobilgeräten und die Welt wartet noch immer auf den großen Wurf zum Ersatz bekannter Lithium-Technik. Zusammenstellung von Jan Buiting
Trotz all der Unsicherheiten: Der Wunderakku der Zukunft könnte schneller kommen, als man vermuten würde. Viele der in diesem Artikel vorgestellten Technologien hätten das Zeug dazu, und
außerdem blüht uns sicher auch noch die eine oder andere Überraschung. Daher immer schön das MIT und die Fraunhofer Gesellschaft im Auge behalten! Zwar haben einige der hier beschriebenen Kon-
zepte durchaus etwas (Science-)Fiktionales, doch wurden manche davon schon in Beiträgen von Elektors wöchentlichem E-Zine vorgestellt.
Oberöko: „Bioo“ – Akkulader rein pflanzlich
Bioo existiert tatsächlich und kann sogar schon gekauft werden [1]. Im Prinzip ist das ein Blumentopf, der Tablets oder Smartphones per Fotosynthese laden kann (siehe Bild 1). Bioo kann im Laufe eines Tages bis zu drei Ladungen produzieren und liefert 3,5 V bei 0,5 A durch einen als Stein getarnten USB-Lader. Der Topf nutzt organisches Material der Fotosynthese betreibenden Pflanze, das mit Wasser reagiert. Utopische Pläne gehen sogar soweit, dass Bioo-Wälder ganze Städte zu 100% mit grüner Energie beliefern und so den besten Grund darstellen, Pflanzen und Wälder zu schützen. Bild 1. Bioo: Strom aus Fotosynthese.
Goldig: Nanowire-Akkus
Entwickelt von der University of California @ Irvine können Nanowire-Akkus extrem viele Ladezyklen überstehen. Eigentlich wurde hier der „ewige Akku“ entwickelt. Tausendmal dünner als ein menschliches Haar haben diese Nanodrähte wohl ein großes Potential für die Akkus der Zukunft. Ein Problem war, dass sie beim Entladen kaputtgehen, doch Drähtchen aus Gold in einem gelförmigen Elektrolyten verhindern das jetzt. Prototypen wurden in drei Monaten schon über 200.000 Mal geladen und zeigten auch dann noch keine Erschöpfung. Das sieht nicht nur perfekt für Elektroautos aus, sondern auch Smartphones brauchen damit nie mehr wieder neue Akkus.
42
Juli/August 2016
www.elektormagazine.de
Leicht: Brennstoffzellen für Handys & Drohnen
Leichtgewichte von Brennstoffzellen könnten dazu führen, dass man sein Smartphone nur noch einmal pro Woche „betanken“ muss. Drohnen würden damit über eine Stunde in der Luft bleiben (siehe Bild 2). Poröser, rostfreier Stahl mit DünnfilmElektrolyt und Elektroden mit kleiner Wärmekapazität sind die Zutaten. Das Ergebnis ist ein Akku-Ersatz, der länger hält als alles aus Lithium. Demnächst wird es neue Modelle für Smartphones, Drohnen und vielleicht sogar Elektroautos geben, und dank der Forschungsanstrengungen in Südkorea werden wir diese Technik demnächst wohl in einem Samsung Galaxy S8 entdecken. Bild 2. Drohne mit Brennstoffzellen-Versorgung (BBC).
Lasergefertigt: Mikrosupercaps
Aus der Rice University kommt eine Meldung über einen Durchbruch in Sachen sehr kleine Superkondensatoren (siehe Bild 3). Momentan ist die Herstellung noch sehr teuer, doch das könnte sich blitzartig ändern. Werden bei den Mikrosupercaps Elektrodenmuster per Laser in die Kunststofffolien gebrannt, senkt das die Fertigungskosten und den Aufwand massiv. Das Ergebnis ist ein Energiespeicher, der 50 Mal schneller als aktuelle Akkus geladen werden kann und eine geringere Selbstentladung als moderne Supercaps hat. Außerdem: Selbst nach über 10.000 Biegungen funktionieren die Prototypen noch. Bild 3. Mikrosupercap (Rice University).
Pöros: Schaum-Akku
Mit 3D-Strukturen im Sinn hat die Firma Prieto einen funktionsfähigen Akku auf der Basis von Kupferschaum entwickelt (siehe Bild 5). Diese Akkus sind dank nicht entzündlichem Elektrolyt nicht nur sicher, sondern leben länger und lassen sich schneller laden. Bild 5. Kupferschaumsubstrat bei Akkus von Prieto (Prieto). Weitere Vorteile sind die fünffache Energiedichte, geringe Fertigungskosten und letztlich kleinere Abmessungen als konventionelle Produkte. Daher sollen die Prieto-Akkus zunächst sogar in Wearables eingesetzt werden. Sie sind auch für Smartphones und möglicherweise sogar für Elektroautos hochskalierbar.
Die Härte: Festkörper-Akkus
Forscher des MIT und von Samsung MIT haben Festkörper-Akkus entwickelt, die LiIonTypen schlagen. Diese Akkus (siehe Bild 6) sollen sicherer sein, länger l eben und mehr Leistung bieten. Konventionelle Lithium-Akkus basieren auf dem Ionentransport durch einen flüssigen Elektrolyten. Letzteres macht den Akku nicht nur entflammbar, sondern sorgt auch für die Kapazitätsabnahme und so für eine begrenzte Lebensdauer.
Bild 6. Nichts schwappt, nichts fließt: Festkörper-Akkus sind sehr haltbar (MIT).
Laut MIT halten die neuen Akkus hunderttausende Ladezyklen durch, bevor die Kapazität merklich abnimmt. Außerdem haben sie eine 20...30 % höhere Leistungsdichte und sind aufgrund ihrer Sicherheit sehr gut für Elektroautos geeignet.
Eieiei: Nano-Eier mit dreifacher Kapazität
Ebenfalls aus dem MIT stammt die Meldung über einen Akku, der bei dreifacher Kapazität schon in sechs Minuten voll geladen ist – was etwa der durchschnittlichen Aufmerksamkeitsspanne eines Teenagers entspricht. Außerdem altert so ein Akku nicht so schnell, was ihn recht stabil macht.Besonders interessant sind die niedrigen Herstellungskosten und die einfache Skalierbarkeit. Bild 7 zeigt das Prinzip. Alles klar? Bild 7. Nano-Eier-Akku (MIT).
www.elektormagazine.de
Juli/August 2016
43
ElektorBusiness Report Schneller: Aluminium-Graphit
Vermutlich in Konkurrenz zum MIT haben die Wissenschaftler der Stanford University einen Aluminium-Graphit-Akku entwickelt, mit dem man ein Smartphone in nur einer einzigen Minute laden könnte (siehe Bild 8). Dieser Akku lädt nicht nur unglaublich schnell, sondern ist auch flexibel und langlebig. Ein bisschen störend ist, dass seine Energiedichte nur etwa halb so groß wie bei einem Lithium-Akku ist. Man kann nicht alles haben: Dafür ist er wirklich extrem fix geladen. Bild 8. Aluminium-Graphit-Akku: Kann angeblich in 1 Minute geladen werden (Stanford University).
Durstig: Alfa-Batterie braucht alle 14 Tage Wasser
Die Alfa-Batterie bietet die 40-fache Kapazität eines LiIon-Akkus und stellt wohl einen Durchbruch in der Alu/Luft-Technologie dar. Alle zwei Wochen muss frisches Wasser nachgefüllt werden, das aber auch Salzwasser sein kann. Die neue Batterie von Bild 9 soll laut Hersteller Fuji Pigment mit einer Wasserfüllung bis zu 14 Tage lang Strom liefern können. Sie soll wohl zunächst in Elektroautos eingesetzt werden und schon Ende des Jahres lieferbar sein. Das Alu-Luft-Konzept ist mit seinen 8,1 kW/kg die theoretisch zweitbeste Lösung (Lithium-Luft kommt auf 11,4 kWh/kg), braucht aber kein teures Lithium. Dennoch leistet sie sehr viel mehr als die kläglichen 120...200 Wh/kg konventioneller LiIon-Technik.
Bild 9. Die Alfa-Batterie basiert auf der AluLuft-Technik (Fuji Pigment).
Anschmiegsam: Flexibler Akku
Forscher der Arizona State University haben ein flexibles Lithium-Akkukonzept entwickelt, das an die japanische Kunst des Kirigami erinnert. Ein flexibler StreifenAkku wie in Bild 10 würde kleinere Smartwatches ermöglichen, die zudem länger mit einer Ladung laufen. Zum Test wurde ein Samsung Gear 2 damit ausgestattet. Der Akku ist so flexibel, dass er sogar ins Armband eingebaut werden kann und trotzdem stabil funktioniert. Dies wird in Zukunft den Bau von dünneren und damit für viele Nutzer akzeptablere „smarte“ Uhren ermöglichen. Bild 10. Der flexible Akku der Arizona State University erinnert an Kirigami.
Dünn & fest: Faltbarer Akku
Die biegbaren Akkus J.Flex von Jenax (siehe Bild 11) sind sogar papierdünn, wasserfest und lassen sich falten. Diese Eigenschaften macht diese Akku-Variante ideal für Wearables. Außerdem sind mit der entsprechenden Display-Technik dann Tablets denkbar, die man nach Gebrauch zusammenfalten und in die Hosentasche stecken kann. Die Akkus gibt es schon und getestet wurden sie auch: Nach über 200.000 Faltungen haben sie immer noch keine Bild 11. Der faltbare Akku von Jenax eignet sich super für Wearables. Kapazitätseinbußen.
Feucht: Energie aus Tau
Vom MIT, aber noch im Embryonalstadium: Spezielle Metallplatten produzieren aus dem Tau der Luft Energie (siehe Bild 12). Erste Tests brachten immerhin schon messbare Leistungen von 15 pW. Dies soll angeblich bald auf mindestens 1 �W gesteigert werden. Das scheint wenig zu sein, doch koffergroße Anordnungen können mit reichlich Zeit dann immerhin 2 Smartphones/Tag aufladen.
Bild 12. Tau am Morgen befreit von Akkusorgen.
44
Juli/August 2016
www.elektormagazine.de
Ausdauernd: Aluminium-Luft für Elektroautos
Bei einem Test erzielte das kleine Auto von Bild 13 die beeindruckende Reichweite von 1800 km dank einer Hochleistungs-Alu-Luft-Batterie. Da hier der Luftsauerstoff die Rolle der Kathode übernimmt, ist so eine Primärzelle auch besonders leicht. Bei der Entladung wird das Aluminium zu Aluminiumhydroxid umgewandelt, das nach erschöpfter Batterie wieder zu neuem Batteriematerial recycelt werden kann. Dafür muss man beim Auto dann alle paar Wochen die Batterie wechseln. Dafür ist die Batterie aber auch viel preiswerter als Lithium-Technik. Bild 13. Die Alu-Luft-Batterie hat vor allem bei Elektroautos großes Potential. Ein Prototyp erzielte eine Reichweite von 1800 km.
Non olet: Stromerzeugung mit Urin
Mit Unterstützung der Bill Gates Foundation hat das Bristol Robotic Laboratory eine Batterie entwickelt, die mit Urin betrieben wird ( Bild 14). Ihre Leistung reicht aus, ein Smartphone zu l aden. In dieser mikrobiologischen Brennstoffzelle spalten Kleinstlebewesen vereinfacht gesagt den Harnstoff und produzieren daraus Strom. Für ein Smartphone benötigt man mehrere Zellen, denen man den Urin in Schläuchen zuführt. Eine prima Zweitverwertung von schon Verwertetem... Bild 14. Eine mikrobiologische Brennstoffzelle verwandelt Urin in Elektrizität. Vespasian hätte daran seine Freude gehabt.
Nachwachsend: Organische Flusszelle
Laut einer Entdeckung des MIT kann man demnächst ein weiteres organisches Verfahren zur Stromerzeugung nutzen, das wahrhaft nachhaltig und also voll ökorrekt ist. Die getestete organische Flusszelle (siehe Bild 15) ist mit 27 $/kWh gegenüber Metallausführungen mit bis zu 700 $/kWh sehr preiswert. Man spart damit potentiell also 97 % der Kosten ein. Verwendet wurden Chinon-Moleküle, wie sie etwa in Rhabarber vorkommen. Das Resultat ist nicht nur ähnlich leistungsfähig wie metallene Ausführungen, sondern ebenfalls hoch skalierbar. Bild 15. Falls Sie noch nichts von Chinonen gehört haben: Man kann sie zur nachhaltigen Stromerzeugung nutzen.
Preiswert: Natrium ist das neue Lithium
Japanische Wissenschaftler prognostizieren für Natrium-Akkus eine siebenfache Effizienz verglichen mit konventioneller Technik. Dazu ist Natrium überall verfügbar und sehr preiswert. Beim Versuch das teure Lithium zu ersetzen wird schon seit den 1980er Jahren am NaIon-Akku geforscht. Bild 16 zeigt die Vorstellung eines Künstlers. Salz ist der sechsthäufigste Stoff auf der Erde und wird niemals knapp werden. Bei zunehmender Elektrifizierung von Autos gehen Experten von einer deutlichen Verknappung des eh schon teuren Lithiums aus. Deshalb werden wohl in den nächsten 5...10 Jahren sowohl Smartphones als auch Autos mit Natrium-Akkus ausgestattet sein. Bild 16. Irgendwann wird die Natrium-Technik bei Akkus das Lithium verdrängen.
Fazit
Diese Auflistung bietet eine Auswahl an Akku- und Batterietechniken, die sich in unterschiedlichen Stadien der Entwicklung befinden. Darunter sind auch bereits greifbare und sogar schon fertige Produkte wie zum Beispiel Upp [2]. Letztere erfreuen sich aber noch keiner großen Akzeptanz durch Kunden. In den Warteräumen von Flughäfen oder im Zug
wird man kaum eine Brennstoffzelle, sondern normale Steckerlader und höchstens gelegentlich externe Akku-Packs sehen. In der nächsten Zeit wird Lithium also kaum aussterben. Dennoch ist bei Akkus gerade sehr viel los und auch das nichttechnische Publikum ist aufmerksam, da das Thema Energie wichtig ist und man dank seiner Gewinnung aus Kartoffeln, der mensch-
lichen Haut, Muskelkraft, Straßenlärm, Zwiebeln, Peptiden oder Gedankenkraft (okay: weniger) durchaus Ungewöhnliches zu Gesicht bekommt. (160013)
Weblinks
[1] Bioo: www.bioo.tech/ [2] Upp: www.beupp.com/
www.elektormagazine.de
Juli/August 2016
45
Offen für alle und zu jeder Zeit Jeder Besucher von elektormagazine.de/ labs kann nicht nur die Projekt-Beschreibungen lesen, sondern auch Dateien herunterladen, an den Projekten teilnehmen, Kommentare veröffentlichen und sogar neue Projekte erstellen. Die einzige Voraussetzung ist eine (kostenlose) Elektor-ID, die man selbst anlegen kann. Das Elektor-Archiv mit dem Download von Elektor-Artikeln bleibt Elektor-GREEN- und GOLD-Mitgliedern vorbehalten. Ihr Profil verbindet! Die Elektor-ID mit ihrem eindeutigen Login (einer einzigartigen Kombination von E-Mail-Adresse und Passwort) stellt eine Verbindung zwischen elektormagazine. de/labs und Ihren anderen Elektor-Accounts her. Von Ihrer Profilseite aus haben Sie Zugriff auf alle Dienste, die mit Ihrer ID verbunden sind. Nach einem Klick auf „Meine Projekte“ wird eine Liste aller Pro jekte angezeigt, die Sie verwalten und/ oder denen Sie folgen. Von hier aus können Sie ein Projekt öffnen, um es zu betrachten oder zu bearbeiten. Anpassen eines Projekts Ein Projekt wird nun über „Projekt aktualisieren“ aktualisiert. Damit wird jede Aktualisierung oder Änderung eines Projekts übersichtlich dargestellt, so dass alle Projektmitglieder stets auf dem Laufenden bleiben. Die Hauptprojektseite (Beschreibung) kann nur im Entwurfsmodus (draft mode) bearbeitet werden. Sobald das Projekt veröffentlicht ist, kann
es nicht länger modifiziert werden. Nur als „Projektinhaber“ können Sie Projekt-Updates hinzufügen, die in chronologischer Reihenfolge rechts neben der Hauptprojektseite angezeigt werden. Beiträge von Followern und anderen Lesern werden als einfache Kommentare angezeigt.
Ein neues Projekt starten... ... ist ganz einfach. Sie beginnen mit dem roten „Neues Pro jekt“-Button (oben auf der elektormagazine.de/labs -Homepage) und geben dann einen aussagekräftigen (!) Titel ein, einen Teaser und eine Beschreibung. Der Teaser ist das, was später auf den Projektübersichtsseiten erscheint, also halten Sie ihn klar, prägnant und auf 150 Zeichen beschränkt. Das Hochladen einer Projektillustration ist sehr zu empfehlen. Wenn Sie noch keine haben, keine Sorge, man kann sie auch später hinzufügen. Es ist auch möglich, herunterladbare Dateien (Fotos, Software, CAD-Dateien, und so weiter) zum Projekt anzufügen, indem Sie den „Downloads“-Knopf drücken. Man kann die Anhänge einem Typ zuordnen, so dass sie in bestimmten Bereichen der Seite angezeigt werden.
Entwürfe im Draft-Modus Projekte im „draft mode“ sind für den Rest der Menschheit nicht sichtbar und können beliebig oft geändert und auch gelöscht werden. Dieser Entwurfsmodus ist nützlich, wenn Sie ein abgeschlossenes Projekt in einem einzigen Beitrag präsentieren möchten. Basteln Sie so lange an der Projektbeschreibung, bis Sie zufrieden sind, und veröffentlichen Sie das Projekt erst dann. Aber Vorsicht, es gibt keinen Weg zurück. Ihr Projekt ist nach der Veröffentlichung für alle Welt sichtbar! Suchen und Filtern Viele Projekte und Informationen zu haben, ist zwar schön, aber wenn man sie nicht auf effiziente Weise durchsuchen kann, ist alles ziemlich nutzlos. Deshalb stehen auf elektormagazine.de/labs mehrere Such- und Filterwerkzeuge zur Verfügung. Die Suchfunktion ist mit Tags und mehrfachen Sortieroptionen versehen, so dass Sie blitzschnell finden können, was Sie suchen. (150818)
www.elektormagazine.de/labs
www.elektormagazine.de
Juli/August 2016
47
Willkommen bei DESIGN
E R A H S
N G I S E D
N R A E L
Von Clemens Valens, Elektor-Labor
André-Marie Ampère (1775 – 1836) André-Marie Ampère ist nie zur Schule gegangen. Geboren in Lyon, Frankreich, lernte André-Marie, von seinen Freunden nur AM genannt, alles über die gut ausgestattete Familienbibliothek. Im Alter von zwölf Jahren interessierte er sich für Mathematik und gab schon ein Jahr später sein erstes Werk heraus. Während der Französischen Revolution, als er 16 Jahre alt war, machte er sich für ein neues Dezimal-Messsystem stark. Mit 18 verlor er seinen Vater, weil dieser seinen Kopf unter der Guillotine verlor. Die Familie war ruiniert. AM widmete sich dem Studium der Botanik, er erfand wissenschaftliche Instrumente und beobachtete die Sterne; er lernte Griechisch und Italienisch und schaffte eine universelle Sprache. Er studierte lateinische Dichtung und schrieb sogar eine Tragödie, in der er Christopher Columbus kritisierte. Man könnte annehmen, dass er seine Aufmerksamkeit nicht auf ein Gebiet konzentrieren konnte, aber als echtes Universalgenie entdeckte er daraufhin die Chemie im Allgemeinen und die Kohlenstoffoxide im Besonderen. Im Alter von etwa 25 Jahren besuchte er nun endlich die Schule, aber nicht als Schüler, sondern als Lehrer. Im Jahr 1820 entdeckte der dänische Physiker Hans Christian Ørsted, dass eine Magnetnadel durch einen nahebei fließenden elektrischen Strom abgelenkt wird. Zu dieser Zeit lebte AM in Paris und arbeitete an spekulativer Philosophie und ihrer Anwendung auf andere Gebiete der Wissenschaft. Auch ohne Twitter verbreitete sich die Nachricht von Ørsteds Entdeckung schnell und kam AM Anfang September 1820 zu Ohren. Aufgrund dieser aufregenden Nachrichten ließ er alles andere stehen und liegen und machte sich daran, Ørsteds Experimente zu wiederholen. Er erkannte schnell, dass ein stromdurchflossener Draht sich wie ein Magnet verhält. Daraus schloss er, dass zwei parallele Drähte sich anziehen oder abstoßen sollten, je nachdem, ob die Ströme in der gleichen Richtung fließen oder nicht. Er schlussfolgerte, dass ein solcher Draht auch durch das Magnetfeld der Erde beeinflusst werden würde, genau wie eine Kompassnadel. Schon eine Woche später präsentierte er seine ersten Ergebnisse. AM war jetzt so richtig in Fahrt, denn nach einer weiteren Woche hektischer Arbeit gab er ein zweites Papier heraus, in dem er den Begriff electrical current prägte. In den folgenden Wochen erfand er Techniken zur Messung solcher Ströme und zur Magnetisierung von Stahl. Ende des Jahres 1820 hat er all seine Erkenntnisse zu Papier gebracht und das Forschungsgebiet der Elektrodynamik war geboren. In den folgenden Jahren setzte AM seine Experimente mit Elektrizität und Magnetismus fort und entwickelte die Hypothese, dass elektrischer Strom aus einer Art von Elektro-Molekülen besteht, die durch einen Leiter geschoben werden. Im Jahr 1827 veröffentlichte er sein Hauptwerk, Memoir on the Mathematical Theory of Electrodynamic Phenomena, Uniquely Deduced from Experience als erste grundsätzliche Abhandlung zum Thema der Elektrodynamik. Als SI-Basiseinheit ist Ampères Name heute hauptsächlich mit dem elektrischen Strom verbunden, sein wissenschaftliches Werk geht aber weit darüber hinaus. Er hat wichtige Beiträge zur Mathematik und Physik geleistet und eine wichtige Rolle bei der Entdeckung von Chlor, Fluor und Jod gespielt. André-Marie Ampère war einer dieser wirklich großen Geister, die der Wissenschaft einen großen Schub nach vorne gaben. (160015)
48
Juli/August 2016
www.elektormagazine.de
�����-�������
�����-�������
Wetterstation für
BBC micro:bit Doppel mit einem Erweiterungsboard Von Clemens Valens (Elektor-Labor)
Das BBC micro:bit ist ein kleines Kraftpaket voller toller Funktionen und wird von einer Reihe ausgezeichneter Entwicklungstools und Bibliotheken unterstützt. Sein Platinensteckverbinder gewährt Zugang zu allen Features wie GPIO, analoge Eingänge, I²C und SPI. Wir haben mit dem micro:bit eine kleine Wetterstation gebaut.
Menschen lieben es zu messen. Gib einem Kind ein Lineal und schon wird es alles in seinem Blickfeld vermessen. BBCs micro:bit, ursprünglich für Kinder ausgedacht, besitzt zwei Sensoren, einen 3D-Beschleunigungssensor (MMA8653), der Beschleunigungen auf drei Achsen ermittelt, und ein 3D-Magnetometer (MAG3110), das ebenfalls auf drei Achsen Magnetfeldstärken misst. Letzteres erfasst auch die Temperatur und gibt sie als weiteres Messergebnis aus. Diese Sensoren dienen der Orientierung, Bewegung und Gestenerkennung. Um die Sensorik zu komplettieren, fügten wir den kombinierten Feuchte-, Druck- und Temperatursensor BME280 von Bosch Sensortec hinzu. Typische Anwendungen dieses Sensors sind die Oberflächenerkennung und die vertikale Navigation, aber er lässt sich auch prima als Wettersensor einsetzen. Er liefert sehr präzise Werte für Feuchtigkeit, Luftdruck und Temperatur über einen I²C- oder SPI-Bus. Die Leistungsfähigkeit dieses Sensors verwandelt den micro:bit in eine hochgenaue Umwelt-Messeinheit (IMU). Oder eine Funkwetterstation, wenn Sie zusätzlich die Bluetooth-Fähigkeit des micro:bit verwenden. Hardware
Die Schaltung des Add-on-Boards ist ziemlich einfach (Bild 1): ein Sensor (IC1, Bild 2), eine LED, drei Widerstände und ein Kondensator. Die einzige Schwierigkeit ist die Beschaffung des Verbinders K1 zum micro:bit. Im Übrigen gibt es nicht viel über eine so einfache Schaltung zu erzählen.
Wir haben das CSB-Signal von IC1 (Pin 2) mit VIO verbunden (der Pin ist an VCC angeschlossen). Damit ist die I²C-Schnittstelle ausgewählt. Wäre CSB Low, würde das IC nach dem Abtasten des Pegels im Drei- oder Vierdraht-SPI-Modus arbeiten. Wenn Sie aus irgendeinem Grund die I 2C-Schnittstelle mit einem externen Signal anwählen wollen, muss dieses Signal schon vor dem Zurücksetzen des ICs auf V -Pegel sein. IO Die SPI-Schnittstelle ist kompatibel mit SPI-Modus „00“ (CPOL = CPHA = 0) und Modus „11“ (CPOL = CPHA = 1). Die Modus-Auswahl erfolgt automatisch und wird vom Pegel des SCK-Pins nach der fallenden CSB-Flanke bestimmt. Ob Drei- oder Vierdraht-Betrieb, darüber entscheidet das Bit SPI3W_EN in der Software. SDI ist die Datenleitung in Dreidrahtmodus, SDO wird in diesem Fall nicht verwendet. Da wir das Gerät im I²C-Modus verwenden, haben wir die Möglichkeit vorgesehen, die Pullup-Widerstände (R2, R3) an den Bus zu schalten. Wenn Sie die Erweiterungskarte ausschließlich mit dem micro:bit verwenden, können Sie auf diese Widerstände verzichten, da Pullups bereits auf dem Controllerboard vorhanden sind. Wenn sich der BME280 in I²C-Modus befindet, bestimmt SDO (Pin 5) die Slave-Adresse, bei GND ist dies 0x76 und bei High 0x77. SDO darf nicht schweben! LED1 ist die Power-Anzeige, hilfreich, weil die LED auf dem micro:bit verdeckt wird, wenn das Controllerboard in Stecker K1 eingesetzt ist. LED1 bleibt dagegen immer sichtbar.
www.elektormagazine.de
Juli/August 2016
49
�����
������
�����
BBC
micro:bit A T U B / 4 5
3
6 7
0
8
B T U B / 0 1 2 9 1 1 1
1
I S O M / 3 1
O S I M / 4 1
L C S / 8 9 1 1
K C S / 5 6 7 1 1 1
2
A D S / 0 1 2 2
2 2
3V
GND
K1 1
K2 P0 / analog in P1 / analog in P2 / analog in P3 / analog in / LED col 1 P4 / button A P5 / analog in / LED col 2 P6 / LED row 1 P7 / LED row 2 P8 P9 /LED row 3 P10 / analog in /LED col 3 P11 / button B P12 P13 / MOSI P14 / MISO P15 / SCK P16 3V GND P19 / SCL P20 / SDA
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
34 35 36 37 38 39 40
1 2
VCC
3
VCC
4 5
R1
6
R 0 8 6
7 8
LED1
9 10 11
VCC
12
VCC
13
C1
14 15
* R2
16 17
k 0 1
18
100n
* R3 k 0 1
8 VDD
19 20
4
21
3
IC1
SCK SDI
CSB VIO SDO
2 6 5
BME280
copyright
GND
GND
1
7
VCC 150652 - 11
Bild 1. Schaltung der Wetterstations-Erweiterung für den BBC micro:bit.
K2 ist eine (optionale) Stiftleiste, die für eine Verbindung zu einem Steckbrett sorgen kann. Die Reihenfolge der Pins von K2 ist die folgende: Die Anschlüsse 0, 1 und 2 entsprechen den breiten Bananenstecker-Anschlusslöchern, die anderen den Anschlussnummern 3...21 des micro:bit (LED-Matrix oben, Randverbinder an der Unterseite). Software
Damit der Mikrocontroller mit dem BME280 kommunizieren
Bild 2. In der Mitte der Platine thront IC1, ein Metallgehäuse mit drei hochpräzisen Sensoren.
50
Juli/August 2016
www.elektormagazine.de
kann, haben wir einen Treiber dafür geschrieben. Als wir damit beschäftigt waren, war der micro:bit noch nicht „unters Volk gebracht“ und all die netten Bibliotheken noch nicht verfügbar. Allerdings war das Board schon bei mbed [1] als Plattform bekannt, und so wurde der Treiber als mbed-Projekt geschrieben. Mittlerweile haben wir auch einen Arduino-Sketch erstellt, so dass Sie den Sensor auch mit einem Arduino-kompatiblen Board betreiben können. Die Downloads finden Sie unter [2] und [3]. Bosch Sensortec bietet zwar auch einen Treiber für den BME280 auf GitHub [4] an, aber dieser ist ziemlich kompliziert, nicht nur, weil er angeblich auf allen Arten von Plattformen arbeiten kann (64-bit, 32-bit, 16-bit, mit oder ohne Fließkommaunterstützung FPU), sondern auch, weil er jedes kleine Detail des Chips unterstützt. Für unsere einfache Anwendung einer Wetterstation brauchen wir das alles nicht, und da es ziemlich lehrreich ist, einen Treiber selbst zu schreiben, haben wir das auch getan. Unser Treiber [2] kann zwar auch das allerhinterste Bit im Sensor aufspüren, aber Sie müssen das Datenblatt studieren, um herauszufinden, was wohin geschrieben und woher gelesen werden kann. Und da C++ es uns erlaubt, ein API im Arduino-Stil zu schreiben, haben wir genau diese Programmiersprache verwendet. Die Anwendung unseres Treibers ist kinderleicht. Er beginnt mit dem BME280-Objekt und ruft dann seine begin-Funktion
�����-�������
�����-�������
auf, so wie es üblich geworden ist, seit Arduino die Welt regiert:
#define BME280_ALLOW_FLOAT
BME280 bme280;
Dies macht die ausführbare Datei größer und langsamer, aber es hängt von Ihrer Anwendung ab, ob dies ein Problem darstellt oder nicht. Die Fließkomma-Versionen der Unterfunktionen temperature und humidity benötigen keine Skalierung, die Angabe bei pressure ist wieder in Pascal. Unser Treiber kann sowohl mit dem SPI- als auch dem I²C-Bus umgehen (obwohl wir SPI nicht getestet haben) und es liegt in Ihrer Entscheidung, welche Funktionen Sie verwenden. Der Treiber ruft
bme280.begin(0x77);
Die Funktion (oder Methode, wenn Ihnen das lieber ist) begin nimmt die I²C-Adresse als Argument, die auf unserem Board fest auf 0x77 verdrahtet ist. Wenn Sie keine Adresse vorgeben, stellt der Treiber standardmäßig den SPI-Bus ein. Die Funktion liefert 0, wenn der Sensor am Bus gefunden und seine Kalibrierungsdaten gelesen werden konnten. Dann wird der Sensor konfiguriert:
(1)
i2cWrite(…) & i2cRead(…) spiWrite(…) & spiRead(…)
bme280.writeConfigRegister(BME280_STANDBY_500_ US,BME280_FILTER_OFF,0); bme280.writeControlRegisters(BME280_ OVERSAMPLING_1X,BME280_OVERSAMPLING_1X, BME280_OVERSAMPLING_1X,BME280_MODE_NORMAL);
Wir haben hier die Grundeinstellungen verwendeten – keine Spielereien, kein High-speed, keine Filterung. Nun können Daten gesammelt werde, indem zunächst die Funktion read aufgerufen wird, um die Daten vom Sensor in den Treiber zu laden. Dann folgt eine der Unterfunktionen temperature , pressure and humidity . Normalerweise geschieht dies in einer Schleife, Pflicht ist das allerdings nicht: bme280.read(); printf("T=%d degrees C, ", bme280.temperature()/100); printf("P=%d mbar, ", bme280.pressure()/100); printf("RH=%d%%\n", bme280.humidity()>>10);
Beachten Sie, wie die erhaltenen Werte skaliert werden. Die Temperature wird durch 100 geteilt, um Grad Celsius zu erhalten. Pressure wird in Pascal ausgedrückt, aber, damit die Werte handhabbar sind, werden sie ebenfalls durch 100 geteilt, so dass die Ausgabe in Millibar erfolgt. Humidity muss durch 1024 geteilt werden (als wenn man den Wert zehn Bits nach rechts schiebt), um ein prozentuales Ergebnis zu erzielen. Wenn man im Treiber (oben in der Datei bme280.h) BME280_ALLOW_FLOAT ungleich 0 setzt, aktiviert man damit die Fließkommaarithmetik:
auf, je nachdem, was eingerichtet wurde. Alle vier Funktionen müssen zur Verfügung stehen, auch wenn Sie leer bleiben. Wenn Sie I²C verwenden, l assen Sie die SPI-Stubs leer, gebrauchen Sie dagegen SPI, dann bleiben die I²C-Stubs frei. Beachten Sie, dass in mbed die I²C-Adressen 8 bit breit sind, weil das Lese/Schreib-Bit in Bit 0 enthalten ist, was bedeutet, dass sich 0x77 in 0xEE verwandelt. Beim Arduino bleibt die Adresse 0x77.
Weitere Entwicklungen
Für K2 kann eine Stiftleiste eingesetzt werden, aber es steht Ihnen frei, mit den Anschlüssen anzufangen, was Sie wollen. Mit einer Stift- oder Buchsenleiste kann man das Board einfach mit einem Steckbrett verbinden, besonders, wenn Sie einige dieser sehr praktischen Breadboard-Drähte verwenden. Wenn Sie eine horizontale oder vertikale Stiftleiste verwenden, sind Sie bestens für unser nächstes micro:bit-Projekt ausgerüstet! Bleiben Sie am Ball! (150652)
Weblinks
[1] https://developer.mbed.org/platforms/Microbit/ [2] https://github.com/ElektorLabs/bme280-driver [3] www.elektormagazine.de/150652 [4] https://github.com/BoschSensortec/BME280_driver
Stückliste Widerstände: 5%, 50 V, 0,1 W, 0603 R1 = 680 Ω R2, R3 = 10 k
www.elektor-labs.com
Kondensator: C1 = 100 n, 0603 Halbleiter: IC1 = BME280 LED1 = LED, grün, 0603 Außerdem: K1 = 2x40-poliger Platinensteckverbinder (PCBto-PCB), Raster 0,05’’ (1,27 mm) K2 = 1x21-polige Stiftleiste, Raster 0,1“ Platine 150652-1 v2.1
www.elektormagazine.de
Juli/August 2016
51
�����
������
�����
Stromtastkopf für Oszilloskope Potentialfreies Messen des Spannungsabfalls über Shunt-Widerständen Von Alfred Rosenkränzer (D)
Das Oszilloskop folgt ohne Frage gleich nach dem Multime ter auf Platz 2 der Skala wichtiger Messgeräte für Elektroniker. Es ist nicht nur universell, sondern auch flexibel einsetzbar und imponiert mit der optischen Anzeige dynamischer Signale bzw. von Spannungsverläufen. Und genau da liegt das Problem: Gegenüber einem Multimeter ist ein Oszilloskop eben nicht von Hause aus auf die Messung von Strömen vorbereitet. Das kann man mit diesem Tastkopf ändern! Setzt man ein Multimeter zur Strommessung ein, so wird dabei bekanntlich nicht etwa der Strom direkt, sondern der Spannungsabfall über einem (niederohmigen) Widerstand gemessen, der sich im Multimeter befindet und je nach Messbereich umschaltbar ist. Das klappt prima, denn ein Multimeter wird praktisch immer von Batterien versorgt und ist damit nicht nur potentialfrei, sondern auch durch sein Plastikgehäuse gut isoliert. Eine noch besser isolierte Variante bieten sogenannte Stromzangen, bei denen man einen aufklappbaren metallischen Ringkern um einen Leiter legt und das entstehende Magnetfeld mittels Hallsensor (oder bei reinen Wechselströmen auch über einer Wicklung) misst. Beide Methoden haben aber so ihre Nachteile: Sie erfassen leider nicht den dynamischen Aspekt von sich ändernden Strömen, und gerade Stromzangen eignen sich eher für größere Ströme durch Kabel und Litzen - außerdem ist ihr nutzbarer Frequenzbereich nicht sonderlich groß. In Schaltungen dynamische Signale zu erfassen ist die Domäne von Oszilloskopen - doch sind sie für diesen Einsatzzweck nicht wirklich vorbereitet. Hier muss man also etwas nachhelfen...
Shunt & Oszilloskop Oszilloskope fremdeln also bei der Messung von Strömen. In der Regel geht es bei dynamischen Strömen eher um welche im einstelligen Ampere-Bereich oder
52
Juli/August 2016
www.elektormagazine.de
darunter, und interessant sind vor allem die Stromverläufe in Schaltungen. Man möchte in der Regel also sehen, wie sich der Strom durch ein Bauteil in Abhängigkeit z.B. von einer Spannung an einer anderen Stelle verhält – oder umgekehrt. Stromzangen sind hierzu verständlicherweise nicht ganz so einfach einzusetzen. Man nutzt daher gerne einen eh schon vorhandenen Widerstand als Shunt und misst schlicht den Spannungsabfall an ihm als Maß für den Strom, oder man lötet ein Bauteil einseitig aus bzw. trennt die Verbindung zu einem Teil einer Schaltung auf und platziert hier einen Shunt mit geeignetem Widerstandswert und ausreichender Belastung. Also alles ganz einfach, oder? Leider aber haben Oszilloskope ein paar Einschränkungen. Etliche Exemplare sind nicht voll potentialfrei, was den Trick ver-
hindert, den Strom an einem Widerstand einfach als Differenz der Signale zweier normaler Oszilloskop-Tastköpfe zu messen. Noch weit problematischer ist es, wenn man mit Hilfe eines Oszilloskops mit „nur“ zwei Kanälen gleichzeitig eine auf die Masse der untersuchten Schaltung bezogene Spannung messen möchte, denn dann müsste ebenfalls der Shunt bzw. der stromdurchflossene Widerstand einseitig an dieser Masse liegen. Irgendwie kommt man also um eine potentialbefreite und differentielle Messung kleiner Spannungen nicht herum und genau das kann man mit der folgenden Schaltung nachrüsten.
Differentiell & potentialfrei Dem aufmerksamen Elektroniker ist das Prinzip einer möglichen Lösung klar: Man nehme einen sogenannten Instru-
Technische Daten: • Stromtastkopf für Oszilloskope • Gleichtaktspannungen: - min. ±200 V bei ±5 V für IC1 - bis zu ±600 V bei ±15 V für IC1 • Gleichtaktunterdrückung: min. 90 dB • Messspannungen: - bis ±4,7 V bei ±5 V für IC1 - bis ±14,7 V bei ±15 V für IC1 • Eingangsimpedanz: - 2 MΩ für Spannung über Shunt
- 500 kΩ für Gleichtaktspannung • Bandbreite: 0...130 kHz (-3 dB) • Verstärkungsfaktor: x 1 • Verstärkung: - max. 0,001 % Fehler - max. 5 ppm Nichtlinearität - max. 5 ppm Drift
• Offset-Spannung: max. 1 mV • Rauschen: - max. 35 �VSS bei 0,01...10 Hz - typ. 1,6 �V/√Hz bei ≥100 Hz
�����-�������
mentenverstärker. Er misst (in der Regel hochohmig) einen Spannungsunterschied unabhängig vom Massepotential. Gängige Schaltungen haben allerdings einen beschränkten Gleichtaktspannungsbereich. Da man es aber bei Messungen an elektronischen Schaltungen durchaus auch mit höheren Versorgungsspannungen als den üblichen ±15 V von Opamps zu tun hat, muss man sich etwas anderes einfallen lassen. Analog Devices bietet als bekannter Hersteller analoger ICs hierfür eine perfekte Lösung in Form eines speziellen Operationsverstärkers mit der Typennummer AD8479 an. Dieser Spezialtyp hat integrierte und per Laser getrimmte Widerstände. Bild 1 zeigt die Prinzipschaltung
�����-�������
seines Innenlebens. Die Sache funktioniert folgendermaßen: Vom negativen und positiven Gehäuseeingang führt je ein 1-MΩ-Widerstand zum jeweiligen invertierenden und nichtinvertierenden Eingang des internen Opamps. Anders als bei normalen Instrumentenverstärkern ist der Widerstand vom nichtinvertierenden Eingang auf Masse (Pin 5) sehr niederohmig und teilt die Eingangsspannung und damit auch das Gleichtaktsignal auf 1/60 herunter. Der Widerstand zwischen invertierendem Eingang und Masse (Pin 1) ist ebenfalls niederohmig und so getrimmt, dass das Gleichtaktsignal sehr gut - laut Datenblatt [1] um 90 dB - unterdrückt wird. Resultat ist, dass die Differenzspannung genau einfach verstärkt wird und
der Gleichtaktbereich theoretisch auf den 60-fachen Wert steigt. Es ergibt sich also ein erweiterter Gleichtaktbereich, wie er in der Grafik von Bild 2 visualisiert wird: Eine Versorgung mit ±5 V erlaubt einen Gleichtaktbereich von deutlich über ±200 V (roter Bereich). Das dürfte für praktische Messzwecke völlig ausreichend sein, denn Tastköpfe und Oszilloskope sind normalerweise für ähnlich hohe Spannungen ausgelegt. Bei einer Versorgung mit ±15 V erweitert sich der zulässige Gleichtaktbereich auf bis zu ±600 V (blauer Bereich) und ist auf diese Spannung nicht durch die Spannungsteiler im IC, sondern durch den Pin-Abstand und das IC-Gehäuse limitiert.
Tastkopf-Schaltung Dass im Prinzip schon fast alles im AD8479 enthalten ist, macht die Schaltung von Bild 3 sehr einfach. IC1 wird lediglich noch mit den nötigen Kondensatoren zur Entkopplung versehen (C1... C4), und am Ausgang ist mit R1 für den Anschluss an ein 50-Ω-Koaxialkabel noch ein Serienwiderstand von 50 Ω eingefügt – fertig.
Bild 1. Blockschaltbild des AD8479 mit integrierten Widerständen.
Bild 2. Gleichtaktbereich bei Versorgung mit ±5 V (rot) und ±15 V (blau).
Damit sich die guten Eigenschaften des Opamps auch in der Praxis zeigen, sollte man für eine saubere und ungestörte Ver-
www.elektormagazine.de
Juli/August 2016
53
�����
������
�����
+5V
copyright C4
C2
100n
10u 10V
IC2 +9V
D1
+5V
78L05F D5
IC1
1N4148
C7
C5
330n 25V
GND
100n
D3
3
R2 R 0 6 5
C8
C6
D4
330n 25V
100n
1N4148
5
8
1N4148
7 V+
IN+
IN–
(Coax)
1
R 0 6 5
V–
GND
D6
79L05F
49R9
2
R3
AD8479
4
GND
D3
–9V 1N4148
OUT
R1
6
COMP
–5V
C3
C1
100n
10u 10V
IC3 150182 - 11
–5V
Bild 3. Die Schaltung des Stromtastkopfs samt Spannungsstabilisierung.
mäßig abfallen und dabei die Verpolung eines Ausgangs droht. Wenn die knapp über ±200 V Gleichtaktbereich gegenüber Masse nicht reichen sollten, kann man IC1 auch mit höheren Spannungen versorgen. Schon mit ±9 V kommt man auf einen Gleichtaktbereich von ±400 V und bei ±15 V ist der maximale Bereich von ±600 V erreicht. Man muss dann allerdings auch sicherstellen, dass die unstabilisierte Versorgungsspannung jeweils 4 V über bzw. unter der Ausgangsspannung der Spannungsregler ist. Außerdem müssen dann für C1 und C2 Exemplare mit einer Spannungsfestigkeit von 25 V verbaut werden. Bei unstabilisierten Spannungen über 25 V sollte die Spannungsfestigkeit von C7 und C8 auf 35 V angehoben werden.
Realisierung sorgungsspannung die Stabilisierungs-ICs mit im Tastkopf unterbringen – möglichst nahe am AD8479 versteht sich. Die beiden Spannungsregler-ICs sorgen dafür, dass man die Schaltung dann mit unstabilisierten ±9...25 V betreiben kann. Die
Stromaufnahme von IC1 ist minimal, weshalb SMD-Versionen für IC2 und IC3 genügen. D1/D2 dienen dem Verpolungsschutz und D3/D4 verhindern einen sogenannten Latchup der Spannungsregler, falls die beiden Spannungen ungleich-
Stückliste Widerstände:
C2
-
Alle SMD 0603 R1 = 50 Ω R2,R3 = 560 Ω
1 C I
in
C3
+ C1
Kondensatoren: Alle keramisch C1,C2 = 10 � / 10 V*, SMD 1206 C3..C6 = 100 n / 50 V, SMD 0603 C7,C8 = 330 n / 25 V*, SMD 1206
Halbleiter: D1..D4 = 1N4148, DO214AA D5 = LED, rot, SMD 0805 D6 = LED, blau, SMD 0805 IC1 = AD8479, SOIC-8 IC2 = 78L05F*, SOT89 IC3 = 79L05F*, SOT89
Bild 5. So ist das Platinen-Ende des KoaxialKabels korrekt abisoliert und verzinnt.
54
Juli/August 2016
www.elektormagazine.de
R1
out
R2
C7
C4
fixing holes
COAX GND
D4 D5 C5 D3
2 C I
C6 D6
3 C I
R3
D1
9 + 9 -
D2 C8
D N G
Bild 4. Bestückungsplan der Platine. Die zwei Lochpaare rechts dienen zur Fixierung der Anschlusskabel mittels Kabelbindern.
Außerdem: Koaxial-Kabel* Mikrofonkabel*, zweiadrig, geschirmt Prüfspitzen* Platine * siehe Text
Bild 6. Ein früher Prototyp des Stromtastkopfs, eingebaut in ein kleines Plastikgehäuse. Hier ist lediglich das Koaxial-Kabel mit Kabelbinder fixiert.
Mit SMD-ICs ist der Aufbau auf einem Stück Lochrasterplatine schwierig, auch wenn die Schaltung selbst in ihrer Einfachheit sehr gut dafür geeignet wäre. Also wurde vom Autor eine geeignete Platine entwickelt (siehe Bild 4), deren Layout-Dateien kostenlos auf der Elektor-Webseite zu diesem Artikel [2] zum Download zur Verfügung stehen. Und wenn schon der Opamp im SMD-Gehäuse daherkommt, können auch die anderen Bauteile als SMDs verwendet werden, was der Kleinheit der Platine und somit ihrer Praktikabilität als Shunt-Tastkopf zugute kommt. Auch wenn die Schaltung wenig komplex ist und nicht so viele Bauteile der Bestückung harren: Beim Löten sollte man sich Zeit lassen und eine Lupe ist durchaus hilfreich, denn ein paar Kondensatoren und Widerstände gehören in die winzige Kategorie 0603. Betrachtet man die Platine, so fallen die zwei Kreise oben auf der rechten Seite auf. Sie sind Anhaltspunkte für Bohrungen, mit denen man mittels schmalen Kabelbindern das Ausgangs-Koaxialkabel fixiert. Zwar hat der Stromtastkopf durch das IC AD8479 nur eine beschränkte Bandbreite von 130 kHz, doch ein Koaxialkabel ist zwecks guter Signalqualität und Haltbarkeit durchaus sinnvoll. Dank der begrenzten Bandbreite muss der Oszilloskop-Eingang dafür nicht mit 50 Ω abgeschlossen sein, sondern kann mit den gewohnten 1 MΩ hochohmig bleiben, wodurch das Signal dann auch nicht halbiert wird. Für das Verlöten des Koaxial-Kabels direkt auf der Platine geht man wie folgt vor: Beim freien Ende werden zunächst 11 mm
�����-�������
�����-�������
der äußeren Isolierung entfernt sowie danach das jetzt sichtbare Schirmgeflecht auf 6 mm gekürzt und verzinnt. Die innere Isolierung wird soweit entfernt, dass der blanke Innenleiter 3 mm herausragt. Bild 5 zeigt, wie das gemeint ist. Das vorbereitete Kabelende wird nun auf die passende Stelle der Platine gelegt und zunächst der Innenleiter angelötet. Danach kommt der Schirm mit reichlich Zinn an die beiden länglichen Masse-Pads. Für die Stromversorgung eignet sich ein flexibles Mikrofonkabel gut, das aus zwei Innenleitern plus Abschirmung besteht. Dies wird mit den drei Pads rechts unten verlötet. Am Eingang schließt man handelsübliche Prüfspitzen an, die bei kurzen Leitungen nicht zwingend abgeschirmt sein müssen, da die Impedanzen der Quellen für gewöhnlich recht niederohmig sind. Man kann auch die Prüfspitzen steckbar machen, z.B. mit Kelchfassungen im 5,08-mm-Raster. Nachdem die Platine in ein passendes kleines Kunststoffgehäuse eingebaut ist und die Kabel durch die entsprechenden Löcher geführt wurden, braucht das freie Ende des Koaxial-Kabels noch einen BNC-Stecker. Die Steckverbindung für die Stromversorgung hängt von der vorgesehenen Spannungsquelle ab. Viel Leistung muss diese nicht liefern, denn einige mA genügen vollauf.
Sonstiges Bild 6 zeigt einen frühen Prototypen des Stromtastkopfs. Einmal auf- und in ein Gehäuse eingebaut steht der Verwendung nichts mehr entgegen. Man muss nichts einstellen und auch nichts konfigurieren. Man muss nur beachten, dass man bei einer Versorgung von IC1 mit ±5 V bei der einfachen Verstärkung nur Spannungen über Shunts von bis zu ±4,7 V messen kann, da der Ausgangsspannungsbereich genau so groß ist. Braucht man für Spezialfälle einen größeren Spannungshub (was bei Strommessungen kaum zu erwarten ist), so muss man die Versorgungsspannung von IC1 wie beschrieben erhöhen und dabei die Spannungsfestigkeit von C1 und C2 im Blick behalten.
e g i e z n A
mouser.de Die neuesten Produkte für Ihre neuesten Designs TM
Die größte Auswahl der neuesten Produkte Mehr als 4 Millionen Produkte von über 600 Herstellern
Alles in allem ist der Tastkopf eine Ergänzung für jedes Oszilloskop, die dessen Anwendbarkeit um eine unproblematische Strommessung erweitert. Für die relativ geringen Kosten erhält man also einen vergleichsweise hohen Nutzen. (150182)
Über den Autor Alfred Rosenkränzer arbeitet seit 32 Jahren als Entwicklungsingenieur, zu Anfang im Bereich der professionellen Fernsehtechnik. Seit Ende der 1990er Jahre entwickelt er digit ale High-Speed-und Analogschaltungen für IC-Tester.
Weblinks [1] Datenblatt AD8479: www.analog.com/static/imported-files/data_sheets/AD8479.PDF
Autorisierter Distributor für Halbleiter und elektronische Komponenten
[2] Elektor-Webseite mit Layout-Dateien zur Platine: www.elektormagazine.de/150182
www.elektormagazine.de
Juli/August 2016
55
�����
������
�����
FledermausPLUS Detektor Auf dem Balkon meiner Wohnung in Zypern kann ich jeden Abend Fledermäuse vorbeifliegen sehen, die sich auf dem Weg zu ihren Jagdgründen befinden. Deshalb wollte ich sie gerne bei ihren Unterhaltungen im Vorüberhuschen belauschen. Aus diesem Wunsch heraus entstand dann ein ausgebuffter FledermausDetektor, wie es ihn in der Form noch nicht in Elektor gegeben hat. Von Kenneth
Horton
(UK)
Bekanntlich nutzen Fledermäuse sowohl zum Jagen als auch zur Kommunikation Ultraschallsignale. Ultraschall ist normaler Schall, nur eben hochfrequenter. Kinder nehmen noch Frequenzen zwischen 20 Hz und 20 kHz wahr. Die obere Frequenzgrenze sinkt mit dem Alter deutlich. Fledermäuse hingegen nutzen mit 20...100 kHz quasi einen anderen akustischen Kanal.
56
Juli/August 2016
www.elektormagazine.de
Es gibt viele Fledermaus-Arten und jede davon hat einen speziellen Ruf. Diese Rufe bestehen aus einer Serie kurzer Klicklaute. In deren Pausen wird das Echo ausgewertet, um z.B. Beute zu lokalisieren. Manche Fledermäuse senden auf einer festen Frequenz, während andere z.B. Sweeps von hohen zu tiefen Frequenzen produzieren. Auch die Dauer und die Wiederholrate sind artspezifisch. Die meisten Fledermäuse erzeugen Signale im Bereich von 30...70 kHz, doch es
gibt Ausnahmen: Der „Große Abendsegler“ (Nyctalus noctula) z.B. singt „Bass“ bis hinab zu 18 kHz, wogegen die „Kleine Hufeisennase“ (Rhinolophus hipposideros) immerhin bis 100 kHz klickt. Beispiele gibt es auf dieser Fledermaus-Webseite [1]. Doch Fledermäuse sind nicht die einzigen Tiere, die hochfrequent kommunizieren. Viele kleine Tiere und Insekten geben Laute von sich, die oberhalb des menschlichen Hörvermögens liegen. Der beschriebene Detektor erlaubt natürlich
�����-�������
�����-�������
Frequenzteilung + Amplitudenerhaltung
auch da Erkenntnisse über diese sonst verborgene Welt.
Überlagerung oder Frequenzteilung? Um Fledermäuse zu belauschen benötigt man einen Detektor, der ihre Rufe in für Menschen hörbare Töne umwandelt. Die Ergebnisse einer Internetfahndung lassen sich in zwei Kategorien einteilen: Eine Gruppe fungiert nach dem Überlagerungsprinzip, ganz wie in einem Radio-
empfänger zur Erzeugung der ZF. Der Nachteil ist, dass man solch einen Detektor abstimmen muss und dass man damit nur ein kleines US-Spektrum zugleich hörbar machen kann. Die zweite Gruppe teilt die Frequenz des US-Signals; oft durch den Divisor 16. Auch wenn so ein großer US-Bereich erfasst wird, gehen dabei die Informationen über Amplitude bzw. Lautstärke des Signals verloren. Mehr zu den verschiedenen Konzepten (genauer: vier) findet sich im Kasten Detektortypen.
Ich konnte nur eine einzige Schaltung finden, welche die Nachteile beider Prinzipien vermeidet. Dieses Konzept von J. L. Errington und S. Frenehard nutzt zunächst Frequenzteilung, erfasst aber gleichzeitig die Amplitude des Rufes und steuert damit die Audio-Ausgabe. Leider beließen es die beiden Autoren dabei, jeden Teil einz eln auf Funktio n zu testen. Ein funktionierender Prototyp fehlte. Dies hat mich aber nicht abgeschreckt, und so überarbeitete ich Teile der origi-
www.elektormagazine.de
Juli/August 2016
57
�����
������
�����
Eigenschaften & Daten • • • • • • • • • • •
Hybride Analog- und Digitalschaltung Stromverbrauch: <5 mA im Standby-Modus Wählbarer Teiler: 16, 17, 23 und 31 Wählbare untere Grenzfrequenz: 8, 15, 18 und 25 kHz Verbesserte Amplitudenrekonstruktion Sinusförmige Ausgangssignale Stummschaltung des Verstärkers ohne Signal LEDs für Stummschaltung und Signalerkennung Testmodus für Hard-und Software MEMS- oder Elektret-Mikrofon Nur 1 SMD
nalen Schaltung und baute daraus einen prima funktionierenden Detektor. Details finden sich auf der Webseite von J. L. Errington [2]. Auch wenn mein Prototyp funktionierte, so hatte er doch noch einige Probleme: • Der Ruhestrom betrug immerhin 15 mA. • Der harmonische Teiler von 16 sorgte für unerwünschte Rückkoppelungen. • Am Ausgang lag ein simples, nicht gut klingendes Rechtecksignal. • Der Detektor war nicht selektiv genug und reagierte auch auf hohe Stimmen. Aus diesen Gründen entwickelte ich einen neuen Detektor, der diese Schwächen nicht mehr aufweisen sollte. Was er kann findet sich im Kasten Eigenschaften und Daten.
Schaltungsbeschreibung Das Blockschaltbild von Bild 1 zeigt insgesamt sechs Funktionsmodule. Das Netzteil stellt nicht nur die symmetrische Versorgung der Opamps, sondern auch den Betrieb des PIC-Controllers mit den üblichen 5 V sicher. Der Pegel des Mikrofonsignals wird durch einen dreistufigen
Verstärker angehoben. Sein Ausgangssignal gelangt dann zur Amplituden- und Frequenzverarbeitung. Die Amplitude wird mittels eines Präzisionsgleichrichters erfasst. Mit einem Schmitt-Trigger erfolgt die Signalformung zwecks digitaler Weiterverarbeitung. Amplitudeninformation und das signalgeformte Rechtecksignal werden dann von einem Mikrocontroller verarbeitet. Aus dem Rechtecksignal wird ein Sinussignal generiert, dessen Frequenz im menschlichen Hörbereich liegt. Anschließend wird noch die Amplitude des Sinussignals moduliert, so dass der Amplitudenverlauf des Fledermausrufs erhalten bleibt. Zum Schluss wird das resultierende Signal verstärkt und kann dann in einen Kopfhörer oder Lautsprecher eingespeist werden. Um Energie zu sparen, wird der Verstärker stumm getastet, wenn keine Fledermaus zu hören ist. Nach den Grundfunktionen folgt nun die Beschreibung der konkreten Schaltung in Bild 2, Abschnitt für Abschnitt.
Netzteil Die Schaltung ist so ausgelegt, dass sie mit einer einzigen 9-V-Batterie betrieben werden kann. Um eine symmetrische Ver-
Bild 1. Die einzelnen Funktionsmodule des Detektors im Blockschaltbild.
58
Juli/August 2016
www.elektormagazine.de
sorgung der Opamps zu realisieren, werden die 9 V mit R1 und R2 halbiert und via Opamp IC1 stromverstärkt zum Nullpunkt (TP1 = 0 V). C1...C10 entkoppeln dabei die Spannungsschienen für höhere Frequenzen. C9 und C10 sind zur Unterdrückung von Schwingungen unerlässlich, die bei der originalen Schaltung aus dem Internet auftraten. Der PIC-Mikrocontroller wird mit 5 V versorgt, die vom Spannungsregler IC5 bereitgestellt und mit C22...C24 entkoppelt werden. Der Massepunkt des Mikrocontrollers liegt nicht beim Nullpunkt der Opamps, sondern bei -4,5 V.
Mikrofon-Vorverstärker Das Mikrofon wird an K1 angeschlossen. R3, C11 und D3 bieten Optionen, auf die später noch eingegangen wird. Das Mikrofonsignal wird über das CR-Glied C12 und R4 hochpassgefiltert (f g ca. 20 kHz)
�����
������
�����
Listing 1. Auszug des PIC-Source-Codes ; We have a valid signal Mainloop_20 btfss Switch_7
; Switch 7 - Amplifier inhibit
goto Mainloop_30 Amp_on ; Switch on Amp Mainloop_30 Set_timer_0 Signal_LED_on
; Timer 0 is used for low frequency cut-off timing
; NOTE the timing of the remainder of this code is critical ; Do not add to the overall size of the loop. ; The loop will handle input frequencies up to about 150 KHz. Mainloop_40 movfw Division_ratio ; Number of steps in the sinewave movwf Count ; Used as sinewave table offset ; Wait for interrupt - PORTB 0 to go High Mainloop_50 btfsc INTCON,TMR0IF ; Test for Timer 0 timeout goto Mainloop_10 ; Frequency too low - reject btfss INTCON,INTF goto Mainloop_50
; Wait for next input INT pin (B0) (Schmitt trigger in) ; Go back and wait
movfw Low_cutoff
; Timer 0 is used for low frequency cut-off timing
movwf TMR0
; Reset timer 0
bcf INTCON,INTF movfw Count
; clear interrupt on INT pin (B0) (Schmitt trigger in) ; Use count to select entry in sinewave table
addwf Table_pointer,w ; Add in the base of the table callw ; Get the sign wave amplitude value movwf INDF0
; Write to D to A. ; Use indirect addressing so don’t need banksel!
decfsz Count,f goto Mainloop_50
; The sinewave is read end to beginning to save time ; by having end of loop = 0
goto
; Count expired, need to reload
Mainloop_40
schallsignal der Fledermaus. Über einen 16-kHz-Hochpass aus C21 und R21 gelangt es an IC3B. Dieser Opamp ist als Schmitt-Trigger geschaltet; seine Hysterese kann mit Trimmpoti P2 eingestellt werden. Auf diese Weise werden aus den Fledermaus-Signalen rechteckförmige Signale mit steilen Flanken generiert. Durch die Hysterese wird verhindert, dass kleinste Störsignale und Rauschen zu großen Ausgangssignalen werden, was falsche Signale provozieren würde. Mit T2 wird dann noch dafür gesorgt, dass die entstehenden Rechtecksignale sich lediglich zwischen -4,5 V bzw. VCC von IC6 und dessen positiver Versorgung VDD bewegen können, denn auch hier gelangen diese Signale direkt an den Mikro-
60
Juli/August 2016
www.elektormagazine.de
controller-Eingang RB0. Ab hier sind alle Signale dann sowieso auf -4,5 V bezogen.
Mikrocontroller IC6, der mit 16 MHz getaktete PIC16F1827, ist natürlich das zentrale Bauteil. Seine wichtigsten Aufgaben sind: • Unterdrückung von Signalfrequenzen unterhalb einer gewissen Schwelle. • Synthese von Sinus-Signalen mit passender Frequenz und Amplitude. • Stummschalten des Verstärkers ohne Eingangssignal. • Ansteuerung von zwei LEDs als Statusanzeige. Der Mikrocontroller verarbeitet hierzu zwei Eingangssignale. Am analogen Ein-
Bild 3. Extrem vereinfachtes Flussdiagramm der Firmware.
gang RA3 liegt die Hüllkurveninformation des Amplitudenverlaufs und am digitalen Eingang RB0 liegt ein aus dem Fledermausruf geformtes Rechtecksignal an. Über RB1...RB7 kann der Status von sieben DIP-Schaltern ausgelesen werden. Damit kann man die Verarbeitung der Signale beeinflussen. Am analogen Ausgang RA2 erscheint dann ein Sinus-Signal im für Menschen wahrnehmbaren Audiobereich, dessen Frequenz dem frequenzgeteilten Eingangssignal entspricht, und dessen Amplitude vom Signal an Eingang RA3 abhängt. Der Ausgang RA1 steuert über T5 den Mute-Eingang des Audioverstärkers IC7 und schaltet ihn so stumm, wenn gerade keine Fledermaus klickt. Die beiden Sta-
�����-�������
tus-Indikatoren LED1 (SIGNAL) und LED2 (MUTE) werden von den Ausgängen RA6 und RA7 gesteuert.
Audioverstärker Der analoge Ausgang für das Audiosignal RA2 von IC6 kann keine großen Lasten treiben und muss deshalb erst noch gepuffert werden. Der Pegel der negativen Halbwellen liegt immer bei knapp über VSS (-4,5 V). Die positiven Halbwellen erreichen bei leisen Fledermäusen lediglich einige hundert Millivolt darüber, während sie bei lauten Exemplaren durchaus fast bis VDD kommen können. T3, T4, R29 und R30 bild en hierfür eine Pufferstufe, bei der sich die Emitterspannungen der beiden Transistoren gegenseitig aufheben. Am Emitter von T4 hängt dann der Spannungsteiler aus R31 und dem Lautstärke-Poti P3. C25 fungiert als Glättungskondensator für die digitale Signal-Synthese. Das so erzeugte Audio-Signal gelangt dann über den Hochpass C26 und R33 an IC7 und wird dort knapp fünffach verstärkt. Das IC TDA8541 ist für Batteriebetrieb
�����-�������
ausgelegt und verfügt deshalb über einen Standby-Modus, über den die Stromaufnahme gesenkt wird, wenn kein Audiosignal erforderlich ist. Sein Mute-Eingang wird von RA1 von IC6 über R32 und T5 angesteuert.
Software Die Firmware des PIC ist linear, mit nur ein paar Sprüngen geschrieben. Der Source-Code nutzt zur besseren Übersicht einige Makros und kann wie immer kostenlos von der Elektor-Webseite zu diesem Artikel [3] heruntergeladen werden. Auch die bei der Konfiguration gerne zu Stirnrunzeln führenden PIC-Fuses sind im Zip-Archiv enthalten. Zum besseren Verständnis dieser Beschreibung sollte der Code vor dem Weiterlesen heruntergeladen und entpackt werden. Ein Ausschnitt des Codes ist in Listing 1 abgedruckt. Wem PIC-Code Kopfschmerzen bereitet, der kann stattdessen auch das Flussdiagramm in Bild 3 zu Rate ziehen. Im ersten Programmabschnitt wird die Mikrocontroller-Peripherie initialisiert. Darauf folgen die Vorverarbeitung der DIP-Schalter-Einstellungen und das Speichern des Resultats im RAM, um die nachfolgende Programmausführung nicht zu bremsen.
Das Programm wartet auf ein Signal an RB0. Dieses wird verarbeitet und danach wird geprüft, ob es auch über der eingestellten Grenzfrequenz liegt. Falls ja wird der Verstärker freigeschaltet und zur Erzeugung der sinusförmigen Audiosignale verzweigt. Solange an RB0 ein akzeptiertes, über der Grenzfrequenz liegendes Signal anliegt, wird mit der Erzeugung der vom Eingangssignal abhängigen Sinussignale fortgefahren. Sobald das Eingangssignal aber aufhört, wird die Kontrolle wieder an die Routine übergeben, die auf ein gültiges Eingangssignal wartet. Falls innerhalb einer kurzen Wartezeit kein neues Eingangssignal kommen sollte, wird der Verstärker wieder stummgeschaltet. Der Teil zur Erzeugung der Sinussignale verarbeitet Eingangsfrequenzen bis zu 150 kHz. Die untere Grenzfrequenz wird mit Timer 0 realisiert. Timer 1 wird zur Steuerung der Wartezeit für den Verstärker eingesetzt. In der Nähe der unteren Grenzfrequenz können sich Jitter-ähnliche Phänomene bemerkbar machen. Wenn die Frequenz des Eingangssignals in der Nähe dieser Grenzfrequenz liegt, können einzelne Impulse verlorengehen, da die Eingangsimpulse asynchron auf die Timing-Schleife
Detektortypen Prinzipiell gibt es vier verschiedene Arten, einen Fledermausruf zu detektieren: Überlagerungs-Detektoren mischen das Ultraschallsignal mit einem zweiten Signal, dessen Frequenzunterschied nur gering ist. Dadurch entstehen ein Summen- und ein Differenzsignal. Das im für Menschen hörbaren Bereich liegende Differenzsignal wird dann verstärkt. Das Prinzip ähnelt einem Radioempfänger nach dem Super-Prinzip. Der große Vorteil des Verfahrens ist die Erhaltung von Amplitude und anderen Signalcharakteristika. Der Nachteil ist, dass man damit nur einen kleinen Teil des für Fledermäuse relevanten Spektrums auf einmal überwachen kann. Man muss diesen Empfangsbereich wie bei einem Radio abstimmen. Bei falscher Bereichswahl hört man gar nichts. Frequenzteiler-Detektoren teilen die Frequenz des digitalisierten Signals in der Regel durch den Divisor 16. Damit wird das Fledermaus-Signal in den für Menschen zugänglichen Hörbereich transponiert. Man kann damit sowohl die höchsten als auch tiefsten Ultraschallsignale von Fledermäusen gleichzeitig hören. Nachteilig ist, dass die Amplitudencharakteristik des Rufs verloren geht. Ohne weitere Signalformung hat man am Ausgang ein unangenehm klingendes Rechtecksignal. Zeitexpansions-Detektoren zeichnen kurze Episoden der Rufe auf und geben sie dann langsamer (etwa um den Faktor
10 gestreckt) wieder. Auch hier bleibt die Rufcharakteristik voll erhalten, doch während der Wiedergabe kann man nicht aufzeichnen. Deshalb hört man nur, was etwa in einem 1/10 der Zeit los ist.
Das letzte Verfahren funktioniert nicht in Echtzeit: Moderne Digitalrekorder wie etwa entsprechende Software auf Laptops oder Tablets können mit einem geeigneten Mikrofon durchaus Ultraschall aufzeichnen. Allerdings weiß man da erst hinterher, ob man etwas aufgezeichnet hat. Wenn die Fledermäuse dann weg sind, kann man sich die Aufzeichnung zeitlich gedehnt in Ruhe anhören.
www.elektormagazine.de
Juli/August 2016
61
�����
������
des Programms treffen. Daher kann es kleine, unterschiedliche Verzögerungen geben, bevor dann jeder Impuls erkannt wird. In der Praxis ist das allerdings kein Problem, denn man kann ja diese Grenzfrequenz niedriger setzen, um die Rufe der jeweiligen Fledermaus sicher zu detektieren. Wie schon erwähnt, lassen sich mit Hilfe der sieben DIP-Schalter einige Optionen der Software einstellen. Ihre Funktionen sind
�����
im Kasten DIP-Schalter aufgelistet. Die Standard-Einstellung mit durchweg offenen Schaltern eignet sich für die meisten Fälle. Man kann die DIP-SchalDIP-Schalter also auch weglassen oder die gewünschten Optionen einfach mit einer Drahtbrücke auf der Platine „hart“ codieren. Wichtig zu wissen ist, dass die Einstellung der DIP-Schalter nur einmal beim Start des Programms abgefragt wird. Bei Änderungen sollte man den Detektor zur Übernahme der neuen Einstellungen also kurz aus- und dann wieder einschalten.
Aufbau Bild 4 zeigt die vom Elektor-Labor entwickelte Platine nebst der Stückliste.
Die Platine ist an den Ecken so geformt, dass sie genau in ein BIM-Gehäuse von Camdenboss passt. In das Gehäuse passen auch das Mikrofon und selbstverständlich auch die Lautstärke-Einstellung (P3), die zwei LEDs, die 9-V-Batterie 9-V-Batterie und ein kleiner 8-Ω-Lautsprecher. All diese Teile werden mit kurzen Litzen an die Platine angeschlossen. Bild 5 zeigt den Labor-Prototypen, der prima funktioniert. Für den Anschluss des Mikrofons eignet sich ein dünnes Kabel mit Abschirmung am besten. Falls erforderlich kann man auch noch einen NF-Ausgang (Line out) zum Anschluss eines externen Audio-Rekorders (z.B. Laptop oder Smartphone etc.) mit Hilfe einer 3,5-mm-Klinkenbuchse (K2) realisieren. Diese Buchse erhält ihr Signal vom heißen Ende von P3 über den Koppelkondensator C28. Wer lieber mit Kopfhörer lauscht, kann hierfür ebenfalls eine passende Buchse vorsehen, deren
DIP-Schalter Der Bat-DetektorPLUS enthält mit S1 insgesamt sieben wirksame DIP-Schalter, mit denen er konfiguriert werden kann. Die Standard-Einstellung Standard-Einstellung ist, dass alle Schalter offen (aus) sind. Die Schalterstellungen werden nur einmal bei Start der Software eingelesen.
Schalter 1: Amplitudenrekonstruktion Amplitudenrekonstruktion • Ein = aktiv • Aus = inaktiv Schalter 2 & 3: • 2 aus | 3 aus • 2 aus | 3 ein • 2 ein | 3 aus • 2 ein | 3 ein
Teiler = 23 = 17 = 16 = 31
Schalter 4 & 5: • 4 aus aus | 5 aus • 4 aus | 5 ein • 4 ein | 5 aus • 4 ein | 5 ein
Untere Grenzfrequenz = 25 kHz = 18 kHz = 15 kHz = 8 kHz
Schalter 6 & 7: Modi • 6 aus | 7 aus = Mute nach 1 s & lange Signal-Validitätsprüfung Signal-Validitätsprüfung • 6 ein | 7 aus = Mute nach 1 s & kurze Signal-Validitätsprüfung Signal-Validitätsp rüfung • 6 aus | 7 ein = Mute dauerhaft (für Aufzeichnung via Line out) • 6 ein | 7 ein = Hardware- und Software-T Softw are-Test est Mit Schalter 1 kann man die Amplitudenrekonstruktion Amplitudenrekonstruktion deaktivieren und alle Rufe haben dann die gleiche hohe Amplitude. Die Schalter 2 und 3 stellen den gewünschten Teiler und die Anzahl der Schritte bei der Erzeugung des Sinussignals
62
Juli/August 2016
www.elektormagazine.de
ein. Je größer der Teiler desto niedriger die resultierende Audio-Frequenz Audio-Frequenz und desto genauer die Sinusgenerierung. Sinusgenerierung. Mit höheren Teilern ergeben ergeben sich mehr Stützstellen bei der Sinus-Synthese. Der Teiler 16 erhält die Kompatibilität mit anderen frequenzteilenden frequenzteilenden Detektoren. Besser sind die anderen Teiler Teiler mit Primzahlen, denn sie reduzieren die Gefahr von Rückkopplungen. Die Schalter 4 und 5 stellen die untere Frequenzgrenze ein, ab der Rufe erkannt werden. Schalter 6 erlaubt bei offenem Schalter 7 die Wahl zwischen zwei Empfindlichkeiten. Ist Schalter 6 offen, wird der Verstärker Verstärker nach 1 s ohne Signal stummgeschaltet. Es müssen fünf Zyklen eines neuen Rufs erfasst werden, damit der Verstärker Verstärker wieder aktiv wird. Das IC TDA8541 verzögert die Wiedergabe beim Einschalten etwas, um Einschaltgeräusche zu unterdrücken. Aus diesem Grund können einige Rufe verloren gehen. Bei geschlossenem Schalter 6 bleibt der Verstärker für 5 s aktiv und es sind nur drei Zyklen eines Rufs erforderlich, um ihn wieder einzuschalten. Der Detektor bleibt also länger im Bereitschaftsmodus, Bereitschaftsmodus, was den Stromverbrauch erhöht und auch eher zu Fehlalarmen führt. Ist Schalter 7 geschlossen, ergeben sich mit Schalter 6 verschiedene Modi: Bei offenem Schalter 6 bleibt der Verstärker Verstärker dauerhaft stummgeschaltet. Dieser Modus eignet sich für eine stille Aufzeichnung via externem Rekorder über Line out. Hier wird der Lautsprecher nicht benötigt. Wenn Schalter 6 und 7 geschlossen sind, dann wird der Test-Modus Test-Modus aktiviert. Hierbei blinken beide LEDs und es wird abhängig von Schalter 1 entweder ein Dauerton ausgegeben oder aber dieser wird vom Eingangssignal amplitudenmoduliert.
�����-�������
�����-�������
Stückliste Hauptplatine Widerstände: (Standard: 5%, 0,25 W, 250 V) R1,R2,R24,R29,R34 = 47 k R3,R30,R32 = 4k7 k R4,R7,R10 = 7k5, 1%, 0,6 W R5,R8,R11,R13,R14,R16..R18,R20,R21,R25.. R28,R33 = 10 k RR6,R9,R22 = 100 k R12 = 82 k R15 = 30 k R19 = 36 k R23 = 1 M R31 = 39 k R35 = 100 Ω P1 = Trimmpoti 50 k, 10 %, 23-Gang P2 = Trimmpoti 100 k, 10 %, 23-Gang P3 = Poti 10 k, 20 %, mono, logarithmisch, mit Schalter
Kondensatoren: C1 = 220 � / 50 V, 20 %, RM 5 mm, 10x16 mm C2,C3,C6..C8,C11,C22,C23 = 100 n / 50 V, 10 %, X7R, RM 0,2’’ C4 = 100 � / 50 V, 20 %, RM 3,5 mm, 8x11 mm C5,C9,C10,C24 = 10�F 20 %, 50 V, RM 2 mm, 5x11 mm C12,C14,C16,C21 = 1 n / 100 V, 5 %, C0G/ NP0, RM 0,2’’ C13,C15,C17 = 4p7 ±2p5 / 500 V, NP0, RM 0,2’’ C18 = 470 p / 100 V, 5 %, C0G/NP0, RM 0,2’’ C19,C20,C25,C26,C28 = 10 n /100 V, 10 %, X7R, RM 0,2’’ C27 = 47 � / 50 V, RM 2,5 mm, 6,3 x 11 mm Halbleiter: D1,D2 = BAT43, DO-35 D3 = BZX79-C3V0, 3-V-Z-Diode, 0,5 W, DO-35 LED1 = blau, 3 mm, high intensity LED2 = rot, 3 mm, high intensity T1,T2,T4,T5 = BC548B T3 = BC558B IC1 = TL061CP T L061CP,, DIP-8 IC2,IC3,IC4 = TL062CP, TL062CP, DIP-8 IC5 = LP2950ACZ-5.0, LDO, 5 V, 0,1 A, TO-92 IC6 = PIC16F1827-I/P, DIP-18, programmiert, Elektor-Shop 150346-41 IC7 = TDA8541T/N1, SMD SOIC-8, Newark/ Farnell # 1854043
Schaltkontakt dann bei eingestecktem Kopfhörer den Lautsprecher abschaltet. Diese Buchsen sind optional. Wie immer beginnt man bei der Bestückung mit den kleinen Bauteilen, Also erst Widerstände und Dioden, dann Kondensatoren und so weiter. Für die ICs empfiehlt sich die Verwendung von Sockeln. Lediglich IC7 ist als SMD im SO-8-Gehäuse zum direkten Auflöten vorgesehen. Besondere Sorgfalt sollte man beim Einlöten von Dioden, Elkos und Transistoren (Polung) walten lassen. Auch die ICs müssen richtig herum in die Fassungen. P1 und P2 sind vertikale Mehrgang-Trimmpotis.
Bild 4. Die vom Elektor-Labor entwickelte Detektor-Platine.
Außerdem: K1 = 4-pol. Stiftleiste, stehend, RM 0,1’’ K2,LED1,LED2,LS1 = 2-pol. Stiftleiste, stehend, RM 0,1’’ BT1 = 2-pol. Schraubklemme, Platinenmontage, RM 0,2’’ TP1,TP2,TP3 = 1-pol. Stiftleiste, stehend S1 = 8-pol. DIP-Schalter BT1 = Batterie-Clip für 9-V-Batterien mit Litzen
Mikrofone und Verstärkung Verstärkung Die Auswahl des geeigneten Mikrofons erfordert Überlegung. MEMS- und dreipolige Elektret-Mikrofone haben einen extra Anschluss für die Stromversorgung, Stromversorgung, während die zweipoligen Elektret-Typen über den Audio-Eingang phantomgespeist werden. Der Anschluss der unterschiedlichen Typen ist in Bild 6 dargestellt. Das Mikrofon der Wahl ist sicherlich ein MEMS-Typ (Bild 6a), auch wenn dieses sehr klein ausfällt und die Montage nicht so einfach ist. MEMS ist das Akronym von Micro Electro-Mechanical System. Der Typ SPU0410HR5H–PB von Knowles hat bei Experimenten überzeugt. Doch auch
ABS-Gehäuse, 40x65x120 mm, Camdenboss BIM2004/14-BLK/BLK, Newark/Farnell # 2445837 LS1 = Kleinlautsprecher, 8 Ω, ≥0,5 W MIC. = Klinkenbuchse, 3,5 mm, stereo, Frontplattenmontage Platine = Elektor-Shop 150346-1 Oder Bausatz mit Platine, Bauteilen, Gehäuse und MEMS-Platine: Elektor-Shop 150346-71
viele andere MEMS-Mikrofone sollten gut funktionieren, da sie auch bei Ultraschall noch sehr empfindlich sind. Knowles hat mit dem Typ SPH0641LU4H-1 kürzlich sogar ein speziell für Ultraschall gedachtes MEMS-Mikrofon herausgebracht. Leider war es nicht rechtzeitig für die Entwicklung verfügbar. verfügbar. Auch Elektret-Kondensator-Mikrofone Elektret-Kondensator-Mikrofone (Bilder 6b und 6c) eignen sich gut. Die Typen MCE-4000 und EK3132 funktionierten bei Tests ganz ordentlich. Selbst ein aus einem alten Handy ausgebautes Exemplar funktionierte zufriedenstellend. Allerdings zeigte sich bei Tests, Tests, dass viele Elektret-Typen Elektret-Typen Probleme mit Ultraschall
www.elektormagazine.de
Juli/August 2016
63
�����
������
�����
Bild 5. Im geöffneten Gehäuse ist zu sehen, wie die Teile Teile verkabelt sind.
a
7 k 4
1
D3
MIC. 3V0 0W5
1
+
R4
R4 7k5
3
4
4
MIC.
100n
C12 1n
2
7k5
3
C11
R3 k 0 1
K1 C12 1n
2
7k5
3 4
k 0 1
1 R4
+4V5
3-wire electret microphone
R3
K1 C12 1n
2
c
+4V5
2-wire electret microphone
R3
K1 +
b
+4V5
MEMS microphone
MIC.
- 4V5
- 4V5
150346 - 16
- 4V5
Bild 6. Drei Mikrofon-Alternativen: Der empfohlene MEMS-Typ MEMS-Typ (a) sowie ein zweipoliges (b) oder dreipoliges (c) Elektret-Exemplar. Elektret-Exemplar.
Audio Precis ion +3
10k
+0 -3
5k
-6 -9 -12
2k
-15
d B -18 r
1k
-21
A
H z
-24 500
-27 -30 -33
200
-36 -39 -42 10k
100 20k
30k
40k
50k
60k
70k
80k
100k
hatten. Man kommt wohl um das Ausprobieren nicht herum. Die getesteten Elektret-Typen hatten bei diesen Tests niedrigere Ausgangsspannungen bei Ultraschall als MEMS-Mikrofone, weshalb bei ihnen eventuell die Verstärkung durch größere Werte für R6, R9 und R12 (120 kΩ oder gar 150 kΩ) erhöht werden muss. So eine Maßnahme reduziert aber auch die nutzbare Bandbreite der TL062-Opamps auf etwa 60 kHz bzw. 50 kHz. Für einige Fledermausarten kann das zu gering sein. Falls das ein Problem sein sollte, kann man IC2 durch den pin-kompatiblen Typ LF353 ersetzen. Dank dessen höherem Verstärkungs-Bandbreitenprodukt von 4 MHz übertrifft die höchste übertragene Frequenz der ersten beiden Verstärkerstufen dann jede Fledermaus bei weitem. IC3A schwächt dann immer noch die höchsten Frequenzen, Frequenzen, doch ein Tiefpass alleine ist weniger schlimm als drei hintereinander. Der Nachteil des Dual-Opamps LF353 ist sein höherer Stromverbrauch. Der Frequenzgang von Bild 7 wurde im Elektor-Labor mit einem Audio Precision Analyzer aufgenommen. Es zeigt den Unterschied zwischen einem Typ TL062CP (blau) und einem LF353 (grün) für IC2. Das Testsignal wurde dabei direkt am Eingang der Schaltung eingespeist und berücksichtigt daher nicht den Frequenzgang des Mikrofons. Die für Elektret-Mikrofone notwendige höhere Verstärkung kann bei höheren Amplituden zu Rückkoppelungen führen, die das resultierende Ausgangssignal modulieren. Das passiert vor allem dann eher, wenn für R6, R9 und R12 150-kΩ-Exemplare bestückt werden. Bei solch einem Mikrofon sollte daher entweder die Lautstärke gering gehalten oder ein Kopfhörer verwendet werden. Das Mikrofon wird über eine vierpolige Stiftleiste angeschlossen, wodurch alle Typen einfach mit der Platine verbunden werden können.
Hz
MEMS-Mikrofon-Platine Bild 7. Frequenzgang mit TL062CP (blau) oder LF353 (grün) für IC2. Der 100-kHz-Bereich ist lediglich für spezielle HF-Fledermäuse interessant.
64
Juli/August 2016
www.elektormagazine.de
Speziell für den Einsatz von MEMS-Mikrofonen wurde eine kleine Platine entwickelt.
�����-�������
Bild 8 zeigt die Schaltung und Bild 9 das Layout. Dank der Platine werden Streukapazitäten vermieden. Die Mikrofon-Platine gibt es als fertig bestücktes Modul im Elektor-Shop (150346-91). Sie ist so winzig, dass man sie in den Griff eines 3,5-mm-Klinkensteckers einbauen kann (siehe Bild 10).
Abgleich Nachdem man die Bestückung geprüft und die Platine auf Lötbrücken etc. untersucht hat, werden alle DIP-Schalter auf „aus“ gestellt, eine 9-V-Batterie angeschlossen und der Detektor eingeschaltet. Mit einem Multimeter zwischen den Testpunkten TP1 und TP2 sollte man etwa die Hälfte der Batteriespannung messen können. Außerdem sollten eine oder beide LEDs leuchten. Angeschlagene Metallobjekte sollten ein hörbares Signal im Lautsprecher zur Folge haben. Ein geschüttelter Schlüsselbund ist eine prima Ultraschallquelle. Nun zu den Trimmpotis P1 und P2. Ihre Einstellung sollte in einer ruhigen Umgebung (ohne Ultraschall) vorgenommen werden. Man sollte wissen, dass viele elektronische Geräte (z.B. wegen Schaltnetzteilen) Ultraschall von sich geben. Zunächst zu P1, mit dem man den Pegel für die leisesten Fledermaus-Signale einstellt. Hierzu schalte man ein Multimeter zwischen -4,5 V und TP3 (Mod.). P1 wird so eingestellt, dass 0,3 V zu messen sind. Diese Einstellung sollte mit einer schon gebrauchten, aber noch guten Batterie erfolgen, denn diese Messung ändert sich etwas, wenn die Batteriespannung nachlässt. Dies ist eine erste Einstellung. Später kann der Abgleich mit P1 an individuelle Erfordernisse angepasst werden. Mit P2 wird die Hysterese des Schmitt-Triggers eingestellt. Dazu sollte DIP-Schalter Nr. 6 ausgeschaltet sein. P2 wird so eingestellt, dass die blaue SIGNAL-LED gerade ausgeht. Wenn die LED1 gelegentlich aufblitzt, ist das nicht problematisch. Testet man den Detektor nun mit einem Schlüsselbund, sollte die rote MUTE-LED erlöschen und die blaue SIGNAL-LED aufleuchten. Wenn der Schlüsselbund nicht mehr geschüttelt wird, sollte die MUTE-LED nach etwa einer Sekunde wieder aufleuchten, da der Verstärker dann wieder stummgeschaltet wird. Jetzt wird P2 so eingestellt, bis das
�����-�������
K1
MIC1 1 C1
4
+
100n 2
3
SPU0410HR5H
Bild 8. Simple Beschaltung des MEMS-Mikrofons SPU0410HR5H.
Bild 10. Die winzige Mikrofon-Platine passt in den Griff eines 3,5-mm-Klinkensteckers.
Stückliste MEMS-Mikrofon-Platine Kondensator: C1 = 100 n / 25 V, 5%, C0G/NP0, SMD 1206, optional
Außerdem: MIC1 = MEMS-Mikrofon SPU0410HR5H-PB (Knowles), Mouser # 721-SPU0410HR5H-PB K1 = Litzenstücke oder 3-pol. Stiftleiste Klinkenstecker, 3,5 mm, stereo, Kabelmontage
wiederholbar gut funktioniert. Damit ist der Abgleich abgeschlossen.
Test-Modus Wen die DIP-Schalter 6 und 7 geschlossen sind, geht die Software beim Einschalten des Detektors in den Test-Modus. Nun blinken beide LEDs und bei einem eingestellten Teiler von 23 kann man ein 1-kHz Audiosignal hören. Andere Teiler haben andere Tonhöhen zur Folge. Wenn Schalter 1 (Amplitude Recovery) offen ist, wird der Ton vom Mikrofoneingang moduliert. Ohne Eingangssignal wird der Ton also nur sehr schwach zu hören sein. Jetzt kann man P1 so nachregeln, dass auch sehr leise Fledermausrufe gerade noch detektiert werden. Wenn das Mikrofon Ultraschall hört, wird die Lautstärke des Audiosignals zunehmen. Bei geschlossenem Schalter 1 ist der Ton am Ausgang in voller Lautstärke zu hören.
Betrieb Die Inbetriebnahme ist einfach: Man stelle die DIP-Schalter nach Bedarf ein. Nach dem Einschalten mit P3 (Poti mit Schalter) kann man dann noch die Lautstärke einstellen – das war‘s auch schon. Rückkopplungen vom Lautsprecher zum Mikrofon sind ein allgemeines Problem von Fledermaus-Detektoren. Mit dem empfohlenen MEMS-Mikrofon sollte das kaum auftreten, doch wie schon erwähnt kann das mit anderen Mikrofonen bei höheren Verstärkungen und großen Pegeln durchaus passieren, und dann
Bild 9. Kleine Platine für das MEMS-Mikrofon.
Platine Elektor-Shop 150346-2 Bestückte MEMS-Mikrofonplatine Elektor-Shop 150346-91
hört man besser leise oder mit Kopfhörer. Bei eingeschaltetem Detektor leuchtet immer mindestens eine LED. Daher weiß man auch immer, ob der Detektor wirklich eingeschaltet ist. Die LEDs haben folgende Bedeutung:
Mute an / Signal aus Der Detektor befindet sich im Standby-Modus und wartet auf ein Signal. Der Verstärker ist zum Stromsparen stummgeschaltet. Mute an / Signal an oder blinkend Es wird zwar ein Signal registriert, aber dieses wird nicht als Fledermaus-Signal gewertet. Für geringen Stromverbrauch wird der Verstärker stummgeschaltet. Mute aus / Signal an Jetzt wurde der Ruf einer Fledermaus detektiert. Man sollte ihren Ruf im Lautsprecher hören können. Die Signal-LED leuchtet weiter, wenn der Ruf verstummt ist. Sie erlöscht erst, wenn der Verstärker stummgeschaltet wird. Wenn eine Buchse für den optionalen Line-Ausgang vorgesehen wurde und der Detektor mit einem Rekorder verbunden ist, kann der Verstärker auch permanent stummgeschaltet werden, indem Schalter 6 offen und Schalter 7 geschlossen sind. Hier nochmals der Hinweis, dass die Schalterstellungen nur beim Einschalten eingelesen werden und für die Über-
www.elektormagazine.de
Juli/August 2016
65
�����
������
�����
nahme von Änderungen der Detektor aus- und wieder eingeschaltet werden muss. Das Amplituden-Zeit-Diagramm im Kasten Detektortypen zeigt typische Rufe einer Fledermaus. Die erste Kurve enthält die typische Abfolge von Klicks. Die zweite Kurve zeigt eine zeitliche Dehnung eines Klicks.
allerdings nicht empfohlen. In der Software können einige Parameter geändert werden. Dazu gehören die untere Grenzfrequenz, die Teiler und die Schwelle, ab der ein Signal als von einer Fledermaus stammend erkannt wird. Diese Parameter sind alle als #define-Statements zusammengefasst. Die Software enthält auch schon die Tabellen für Sinuswerte der Teiler 13, 19, 29 und 37. Experimenten steht also nichts entgegen. Speziell die Timing-Loop wurde sehr sorgsam gestrickt und sollte daher möglichst nicht geändert werden (Listing 2). Bild 11 zeigt, wie man das Gehäuse des Fledermaus-Detektors grafisch gestalten könnte.
Modifikationen Wie schon angesprochen kann es notwendig sein, die Verstärkung an das verwendete Mikrofon anzupassen. Auch für MEMS-Mikrofone kann eine Anhebung der Verstärkung durch einen höheren Wert als 100 kΩ für R12 oder eine Abschwächung z.B. durch einen Wert von 82 kΩ (gegebenenfalls auch für R6 und R9) erforderlich sein. Bei einem Elektret-Mikrofon wird man höchstwahrscheinlich alle drei Widerstände R6, R9 und R12 vergrößern müssen. Man sollte die Werte allerdings möglichst klein lassen. Größere Werte als 150 kΩ sind nicht empfehlenswert und reduzieren die Bandbreite zu stark. Dann hilft u.U. der schon erwähnte Ersatz von IC2 durch ein LF353. Für minimalen Stromverbrauch werden die LEDs über 10-kΩ-Vorwiderstände versorgt. Für mehr Helligkeit kann man ihren Wert erniedrigen, doch man sollte daran denken, dass man den Detektor eher in der Dunkelheit der Dämmerung einsetzt. Mit R19 kann man noch die Amplitude der Hüllkurve anpassen. Die Verstärkung ist proportional zu seinem Widerstand. Eine Änderung wird
An dieser Stelle möchte ich John Errington für sein Konzept danken und auch dafür, dass er mich bei den Überarbeitungen so gut unterstützt hat. (150346)
Weblinks [1] Fledermausrufe: www.fledermausschutz.ch/ Fledermaeuse/Rufe.html [2] Detektortypen: www.skillbank.co.uk/bat_detectors/ tech.html Bild 11. Gestaltungsvorschlag der Frontplatte des DetektorGehäuses. Die Abmessungen betragen 152 x 72 mm.
[3] Artikel-Webseite: www.elektormagazine.de/150346
Listing 2. #defines der Timing-Loop. #define Quick_amp_off .10 #define Slow_amp_off .50
; Delay before switching off amp in 1/10 seconds - switch 6 high ; Delay before switching off amp in 1/10 seconds - switch 6 low
#define #define
Long_Valid_count Short_Valid_count
.5 .3
; Number of valid input triggers before taking action - switch 6 high ; Number of valid input triggers before taking action - switch 6 low
#define
ratio_a .23
; Division ratio - switch 2 high & 3 high (13,16,17,19,23,29,3 1,37)
#define #define #define
ratio_b .17 ratio_c .16 ratio_d .31
; Division ratio - switch 2 high & 3 low (13,16,17,19,23,2 9,31,37) ; Division ratio - switch 2 low & 3 high (13,16,17,19,23,2 9,31,37) ; Division ratio - switch 2 low & 3 low (13,16,17,19,23,29 ,31,37)
#define
LF_cutoff_a
.25000
; Low frequency cut off - switch 4 high & 5 high
#define LF_cutoff_b .18000 ; Low frequency cut off - switch 4 high & 5 low #define LF_cutoff_c .15000 ; Low frequency cut off - switch 4 low & 5 high #define
66
LF_cutoff_d
Juli/August 2016
null
; Preset at approximately 8 kHz - switch 4 low & 5 low
www.elektormagazine.de
�����-�������
�����-�������
Filter auf dem Red Pitaya Teil 1: FIR-Filter
Von Martin Ossmann (D)
Wenn man FPGAs zur digitalen Signalverarbeitung einsetzt, gehören digitale Filter zu den wichtigen Standardfunktionen. In Elektor haben wir bereits relativ „einfache“ CIC-Filter zur Dezimation und Interpolation vorgestellt [1]. Nun sollen Filter an die Reihe kommen, bei denen man das Verhalten genauer spezifizieren kann. In diesem ersten Teil werden sogenannte FIR-Filter (Finite Impulse Response, endliche Stoßantwort) vorgestellt, im zweiten werden IIR-Filter (Infinite Impulse Response, Unendliche Stoßantwort) behandelt. Bei beiden Filtertypen gilt es zwei Probleme zu lösen: • Wie implementiert man so ein Filter mit einem FPGA? • Wie bestimmt man die Parameter des Filters so, dass die
gewünschte Funktion (etwa Tiefpass oder Bandpass) realisiert wird?
addieren. Diese werden in den FPGAs natürlich als Addierwerke realisiert, wobei die FPGAs oft über spezielle Blöcke verfügen, damit diese Addierer sehr schnell sind. Als letztes gibt es Multiplizierer, die in unserem Fall ein Signal mit einer Konstanten multiplizieren. Wir werden diese Konstante ebenfalls in ein Register legen, damit man zur Laufzeit mit Hilfe der ARM-CPU die Filterkoeffizienten ändern kann. Für schnelle Multiplikationen haben FPGAs ebenfalls oft spezielle Blöcke. Im Falle unseres Red Pitaya Bo ards werden die zur Signalverarbeitung sehr gut geeigneten DSP48E1-Blöcke [2] verwendet.
Bei der zweiten Aufgabe hilft uns die ARM-CPU des Red Pitaya Boards, auf der man gut eine einfache Filterdesign-Software laufen lassen kann. So kann man auf dem Red Pitaya autark Filter entwerfen (ARM-CPU) und mit hoher Abtastrate (125 Megasamples/s) laufen lassen (FPGA). FIR-Filter
FIR-Filter sind so wie in Bild 1 aufgebaut. Sie bestehen aus drei „Zutaten“: Die mit Z −1 beschrifteten Blöcke speichern und verzögern ein Signal jeweils um eine Abtastzeit T S (T S = 1 /F S mit F S=Abtastrate). In FPGAs entspricht diesen Blöcken üblicherweise ein Register, das so viele Bits wie das zu verzögernde Signal breit ist, in unserem Fall das Eingangssignal. Dann gibt es Addierer (Kreise mit Pluszeichen), welche Signale
1 Sample Delay
Bild 1. Schematischer Aufbau eines FIR-Filters.
www.elektormagazine.de
Juli/August 2016
67
�����
������
Listing 1. Direkte Implementation in Verilog. 1 parameter sumSize = 38 ; 2 parameter sigSize = 14 ; 3 parameter coeffSize = 18 ; 4 parameter nTaps =32 ;
�����
Xilinx DSP-Slices DSP48E1
Im FPGA des Red Pitaya gibt es DSP-Blöcke, die besonders für Aufgaben der digitalen Signalverarbeitung geeignet sind. Ihr Aufbau ist (vereinfacht) in Bild 2 dargestellt. Im Zynq des Red Pitaya gibt es davon 80 Stück, in größeren FPGAs können es schon mal fast 10.000 sein.
5 reg signed [coeffSize-1: 0] bk[nTaps-1:0] ; 6 wire signed [sumSize-1: 0] sk[nTaps-1:0] ; 7 reg signed [sigSize-1: 0] xk[nTaps-1:0] ; 8 assign sk[0] = bk[0]*xk[0] ; 9 generate genvar m; 10 11
for(m=1 ; m
Zuerst einmal sieht man in den Signalpfaden eine Reihe Register. Diese benutzt man zum Beispiel, wenn man Operationen mit „Pipelining“ beschleunigen will. Man kann all diese Register aber auch einzeln deaktivieren. Abg esehen von diesen Registern gibt es Recheneinheiten. Man kann beispielsweise die Eingangsgrößen A und D (je 25 bit breit) addieren. Dieser sogenannte „Pre-Adder“ wurde eingebaut, damit man symmetrische FIR-Filter effizient realisieren kann.
12 endgenerate 13 integer k ; 14 always @(posedge adc_clk_i) begin 15
if ( firStrobe ) begin
16
xk[0] <= filterIn ;
17
for(k=1 ; k
18 19 20
xk[k] <= xk[k-1] ; filterOut <= sk[nTaps-1] ; end
21 end
Dann gibt es einen Multiplizierer, der 18-bit-Zahlen mit 25-bit-Zahlen zu 43-bit-Zahlen multiplizieren kann. Dieser Multiplizierer lässt sich natürlich gut zur Koeffizientenmultiplikation in FIR-Filtern heranziehen. Hinter dem Multiplizi erer ist noch ein 48-bit-Summierer angeordnet, dessen erster Summand üblicherweise das Produkt aus dem Multiplizierer ist. Als zweiter Operand fungiert entweder das C-Eingangssignal oder der Wert aus dem Ausgangsregister (Preg, 48 bit breit) hinter dem Multiplizierer. Statt des Addierers kann dieser Block auch logische Verknüpfungen realisieren. DSP-Slice Benutzung via Inferenz
Mit diesem DSP48-Slice kann man also eine Reihe arithmetischer Operationen ausführen, zum Beispiel: P = A*B Preg <= Preg+A*B P = (A+D)*B+C P = A+C Preg <= Preg + A Preg <= Preg+Mreg , Mreg<=Breg*Areg , Breg<=B , Areg<=A (Verilog Notation)
Bild 2. Aufbau der DSP-Slices im FPGA des Red Pitaya.
Mit den Registern kann man auch mehrere Operationen gleichzeitig ausführen; die Trennung erfolgt durch Kommas. Bei der Implementation eines FPGA-Designs versucht das Entwicklungstool (hier VIVADO) im Quellcode (Verilog oder VHDL) entsprechende Operationen zu entdecken. Werden solche Operationen entdeckt, wird versucht, diese mit einem DSP-Slice zu realisieren, da dies meistens die effizienteste Realisierung ist. Hier wird die Anwendbarkeit des DSP-Slices also aus dem Quelltext hergeleitet, daher spricht man von Inferenz. Der Benutzer muss sich gar nicht um die effiziente Realisierung von Additionen oder Multiplikationen kümmern, das geht automatisch. Alternativ kann man auch ein DSP48-Makro explizit benutzen, dann spricht man von einer Realisierung per Instanziierung, weil man explizit eine Instanz des DSP48-Slices anfordert. Damit kann man unter Umständen noch bessere Resultate erzielen, wenn die automatische Inferenz nicht die optimale Lösung für ein Design findet. Direkte Implementation
Bild 3. Aufbau des Filters im FPGA (Ausschnitt).
68
Juli/August 2016
www.elektormagazine.de
Als erstes wollen wir ein FIR-Filter wie in Bild 1 realisieren. Der Verilog-Quellcode dazu ist in Listing 1 zu sehen.
�����-�������
�����-�������
Bild 4. „Frequenzgang“ des defekten Filters.
Bild 5. Frequenzgang bei langsamem Betrieb.
Die in Zeile 11 beschriebene Operation wird durch ein DSP48Slice umgesetzt, wobei auch die Register xk (Zeile 7 und Zeile 18) der Verzögerungskette in d ie DSP-Slices absorbiert werden. Die Koeffizientenregister bk werden durch Flipflops realisiert. Wenn wir ein FIR-Register mit 32 Koeffizienten (Taps) realisieren, wird ingesamt benötigt: 406 LUTs, 786 FFs, 32 DSPs. Für die 32 Koeffzienten bk alleine mit je 18 bit Genauigkeit benötigen wir 32*18=576 Flipflops. 32 DSP-Slices brauchen wir für Multiplizierer, Addierer und x k -Register. Die anderen Flipflops und Lookup-Tables (LUTs) werden für weitere Funktionen gebraucht, die in dem Modul untergebracht sind. Lässt man sich den Schaltplan des FIR-Filtermoduls anzeigen, sieht er aus wie in Bild 3 (Ausschnitt).
klassische Ripple-Carry-Adder: zu viele Stufen hintereinander. Um diese Tatsache zu verifizieren, lassen wir das Filter einmal mit 125 MHz/8 laufen, indem wir das Signal firStrobe (Listing 1) alle acht Taktimpulse für einen Takt aktivieren (bei der Rate von 125 MHz war es immer aktiviert). Der sich ergebende Frequenzgang ist in Bild 5 dargestellt.
Die großen Rechtecke sind die DSP48-Slices, die kaskadiert werden. In ihnen ist im Wesentlichen das gesamte Filter untergebracht. Unter den DSP-Slices sieht man die Flipflops, welche die Koeffizienten bk speichern. Benutzt man diese Implementation bei 125 MHz Abtastrate zusammen mit den Koeffizienten eines Tiefpassfilters, so ergibt sich ein Frequenzgang wie in Bild 4 dargestellt. Dies sieht nun überhaupt nicht nach dem erwarteten Frequenzgang aus, es muss irgendein Fehler vorliegen. Hätten wir vorher die Informationen der VIVADO-IDE aufmerksam studiert, wäre uns aufgefallen, dass unser Design „timing violations“ verursacht, das heißt, dass die Logik nicht schnell genug ist. Mit Hilfe der Timing-Analyse kann man den kritischen Pfad ermitteln, der eine „Länge“ von 56 ns hat. Die Verzögerung darf bei einer Taktfrequenz von 125 MHz natürlich maximal 8 ns = 1/125 MHz betragen. Unsere Schaltung ist schlichtweg viel zu langsam für diese Taktfrequenz. Das Problem liegt darin, dass alle Summierer hintereinandergeschaltet sind. So muss das Signal vor dem ersten Verzögerer alle 31 Summierer durchlaufen, und das dauert schlichtweg zu lange. Dabei hat ein einzelner Addierer vermutlich eine Verzögerung von etwa 56 ns/32 = 1,75 ns, ist an sich also schon sehr schnell. Die vorliegende Implementation hat das gleiche Problem wie der
Bei der Interpretation des Bildes müssen wir aufpassen: Die Abtastrate des Filters ist jetzt 125 MHz/8=15,625 MHz, der Filterfrequenzgang wiederholt sich daher alle 15,625 MHz. Im unteren Frequenzbereich (unter 10 MHz) sieht man gut den Frequenzgang eines Tiefpasses mit einer Grenzfrequenz von ungefähr 2 MHz und einer Dämpfung von 50 dB im Sperrbereich. Bei 15,625 MHz und 31,25 MHz sieht man wieder die Durchlassbereiche, allerdings modifiziert durch die Übertragungsfunktion des DAC-Registers, das als Halteglied für acht Takte fungiert. Nun soll gezeigt werden, wie man schnellere Filter realisiert. Die erste Technik entspricht dem „Pipelining“ bei Rechenwerken. Man kann den kritischen Pfad aufbrechen, indem man zwischen die Stufen zusätzliche Register einfügt, wie in Bild 6 dargestellt. Nun muss ein Signal zwischen zwei Taktflanken maximal einen Multiplizierer und einen Addierer durchlaufen. Das ist sicher problemlos mit den DSP48-Slices möglich. Man braucht aber
Bild 6. Pipelining durch Einbau von Zwischenregistern.
www.elektormagazine.de
Juli/August 2016
69
�����
������
�����
1 Sample Delay Multiply-Accumulate (MAC) Block
Bild 7. Transponierte Form eines FIR Filters.
Bild 8. Toleranzschema eines Tiefpassfilters.
zusätzlich 2x32 = 64 Register für die Zwischenergebnisse. Das Signal kommt zwar 32 Taktzyklen später aus dem Filter, aber das ist bei vielen Anwendungen kein Problem, weil der Frequenzgang als solcher erhalten bleibt. Diese Form nennt man oft auch systolisches FIR-Filter oder auch schlichtweg Pipelining. Es gibt aber eine noch bessere Möglichkeit.
Slices mehr verfügbar, werden Multiplizierer und Addierer mit gewöhnlichen Logikblöcken realisiert, und davon werden dann schnell sehr, sehr viele benötigt. Bei unserem Filter werden die Koeffizienten in Registern gespeichert und können von der ARM-CPU des Red Pitaya gesetzt werden. Nun soll besprochen werden, wie man zu den Koeffizienten kommt.
FIR-Filter: Transponierte Form
Mit „intelligentem Hinsehen“ oder etwas Mathematik kann man einsehen, dass das in Bild 7 dargestellte Filter zu dem aus Bild 1 äquivalent ist. Man nennt es gemeinhin die transponierte Form des FIR-Filters. Hier führt der kritische Pfad vom Eingang durch eine Multiplikation und einen Addierer, ist also sehr kurz. Diese Form ist daher besonders geeignet für die Realisierung mit einem FPGA. Der Verilog-Code dazu sieht aus wie in Listing 2 dargestellt. Die Xilinx-Entwicklungssoftware VIVADO erkennt wieder, dass Zeile 9 komplett durch einen DSP48-Slice realisiert werden kann. Eine solche Operation (a¡=a+b*c) wird auch als MAC (Multiply-Accumulate) bezeichnet. Alle modernen FPGAs stellen effiziente Funktionsblöcke dafür zur Verfügung, weil man damit zahlreiche DSP-Funktionalitäten (Filter, FFT, Gleichungssysteme,...) effizient bearbeiten kann. Die gerade behandelte Form des Filters mit 64 Taps (Abzweigungen) werden wir im Folgenden benutzen. Man kann auch höhere Tap-Zahlen realisieren. Sind allerdings keine DSP48-
Listing 2. Umsetzung der transponierten Form in Verilog. 1 parameter accuSize = 38 ; 2 parameter coeffSize = 18 ; 3 parameter nTaps =64 ; 4 reg signed [coeffSize-1: 0] bk[nTaps-1:0] ; 5 reg signed [accuSize-1: 0] sumk[nTaps-1:0] ; 6 integer k ; 7 always @(posedge adc_clk_i) begin 8
for(k=0 ; k
9
sumk[k] <= sumk[k+1] + filterIn * bk[k] ;
10
sumk[nTaps-1] <= filterIn * bk[nTaps-1] ;
11
filterOut <= sumk[0] ;
12
end
70
Juli/August 2016
www.elektormagazine.de
Filterdesign
Üblicherweise fängt man beim Filterdesign mit einem Toleranzschema an, in dem die Anforderungen an den Frequenzgang zusammengefasst sind. In Bild 8 ist ein solches Schema beispielhaft für ein Tiefpassfilter dargestellt. Die Frequenzachse ist in drei Bereiche A, B und C eingeteilt. Der Durchlassbereich ist mit A bezeichnet, der Sperrbereich mit C und dazwischen liegt der B benannte Übergangsbereich (Transition Region). Die Sollverstärkung im Durchlassbereich ist mit D vorgegeben, die Mindestdämpfung im Sperrbereich mit E. Im Durchlassbereich darf der Frequenzgang eine gewisse Welligkeit (Passband Ripple) aufweisen, sie ist im Bild mit F bezeichnet. Die Aufgabe besteht nun darin, das Filter so zu entwickeln, dass der Frequenzgang (schwarze Kurve) sich immer innerhalb der Toleranzen des Toleranzschemas befindet. Man sucht dann ein Filter mit möglichst geringer Ordnung (Tap-Anzahl), das gerade noch die Anforderungen erfüllt. Manchmal gibt man auch die Ordnung vor und versucht ein Filter mit möglichst hoher Dämpfung zu designen. Auch andere Aufgaben sind denkbar. Bei FIR-Filtern mit hoher Ordnung kann man die Designaufgabe nicht mehr von Hand lösen, sondern man braucht Filterdesignprogramme, die zu gegebener Anforderung ein passendes Filter (also seine Koeffizienten bk ) berechnen. Iowa Hills FIR-Designer auf dem PC
Ein freies Filter-Designtool gibt es von Iowa Hills. In Bild 9 ist die Oberfläche zu sehen, auf der man einen FIR-Tiefpass entwerfen kann. Das Filter hat eine Eckfrequenz von 9,5 MHz bei 125 MHz Abtastrate und es sollen 32 Taps verwendet werden. Man sieht, dass sich eine Dämpfung von 40 dB erreichen lässt. Die „Nullstellen“ des Filters werden so gelegt, dass der Frequenzgang im Sperrbereich immer wieder die „schlechteste Dämpfung“ berührt. Solche Designs nennt man auch Equi-Ripple-Designs, bei denen man oft auch im Durchlassbereich eine
�����-�������
�����-�������
gleichmäßige Welligkeit erhält. Diese Equi-Ripple-Filter sind oft das Beste, was man mit gegebener Ordnung erreichen kann. Wenn man den Übergangsbereich vergrößert, lässt sich oft die Sperrdämpfung weiter verbessern. Der Iowa-Hills-Designer bietet eine ganze Reihe von Mö glichkeiten, um Filter fein abzustimmen. Die Filterkoeffizienten kann man in eine Datei ausgeben und diese auf die Red-Pitaya-CPU übertragen. Unser Filtersteuerprogramm kann diese Datei lesen und die Koeffizientenwerte im FPGA entsprechend setzen. Dieser Umweg, dass man zuerst den PC fürs Design b enutzt, ist natürlich unpraktisch. Es gibt aber ein einfaches Filterdesignprogramm, das autark auf dem Red Pitaya läuft. Parks-McClellan-Filterdesign auf dem Red Pitaya
Es gibt eine Reihe von Quellen für Equi-Ripple-Designs. Die meisten gehen auf die Originalarbeit mit Fortran-Code [3] zurück. Wir haben das Java-Programm aus [4] adaptiert, so dass es auf dem Red Pitaya läuft. Damit kann man Hoch- und Tiefpässe, Bandpass- und Bandstopp- (Notch-) Filter entwerfen. In Bild 10 sieht man beispielhaft die Durchlasskurve eines Bandpasses. Gut erkennbar ist der Ripple im Sperr- und im Durchlassbereich. Bei dem Filterdesignprogramm kann man die notwendigen Parameter in der Kommandozeile angeben. Das Programm entwirft dann das entsprechende Filter und lädt die Koeffizienten ins FPGA. Dabei wird gleichzeitig durch Skalierung dafür gesorgt, dass möglichst viele der 18 Koeffizientenbits auch wirklich genutzt werden.
Bild 9. Oberfläche des IOWA Hills Filter-Designers.
für den Anwender auch die Möglichkeit, IIR-Filter einzusetzen. Wie man diese auf dem Red Pitaya realisiert, wird Gegenstand des zweiten Teils dieses Artikels sein. (150706)
Weblinks und Literatur
In Bild 11 sieht man den Frequenzgang eines Bandstoppfilters. Der Amplitudenabfall zu höheren Frequenzen hin wird durch das analoge Ausgangsfilter hinter dem DAC des Red Pitaya verursacht. Damit haben wir gezeigt, wie man FIR-Filter auf dem Red-Pitaya entwirft und laufen lässt. Die bisher besprochenen Filter waren immer symmetrisch und deshalb linearphasig. Lässt man auch Filter mit nichtlinearem Phasengang zu, dann gibt es
Bild 10. Frequenzgang des Bandpass-FIR-Filters.
[1] Red Pitaya als UKW-Stereo-Radio, Elektor 10/2015, www.elektormagazine.de/150326 [2] 7 Series DSP48E1 Slice User Guide, Xilinx [3] T. W. Parks and J. H. McClellan. Chebyshev approximation for nonrecursive digital Filters with linear phase. IEEE Trans. on Circuit Theory , 19:18994, March 1972 und http://michaelgellis.tripod.com/dsp/pgm21.html [4] http://afni.nimh.nih.gov/pub/dist/src/FIRdesign.c
Bild 11. Frequenzgang des Notch-FIR-Filters.
www.elektormagazine.de
Juli/August 2016
71
�����
������
�����
iBaxandall Variationen von Klangeinstellern Von Dr. Thomas Scherer (D)
Das kann dabei herauskommen, wenn man als Elektroniker „eben mal schnell“ einen Klangeinsteller aufbauen möchte: 1. googelt man nach der Standardschaltung, 2. fällt einem daran etwas auf und 3. will man es besser machen und entwickelt folglich eine neue Schaltungsvariante. Noch schlimmer: Man geht der Sache auf den Grund und kommt so auf mehrere neuartige Varianten. Have fun!
72
Juli/August 2016
www.elektormagazine.de
�����-�������
�����-�������
www.elektormagazine.de
Juli/August 2016
73
�����
������
�����
Standard-Klangeinstellung C1
330n R3
R1
R2
2k7
2k7 10k
standard
R7
BASS
7 k 2
IN
OUT A1 C2
10n
ideal TREBLE R4
R6
R5
1k
1k 10k
C1
L1 150mH
330n
IN
R3
R1
R2
2k7
R6
R4 2k7
R5
2k7
10k
2k7 10k
BASS
TREBLE A2 A1
OUT A3
150788 - 12
Google liefert mit den Suchbegriffen „Klangeinstellung Schaltung“ rund eine Viertelmillion Treffer. Mit den anglifizierten Suchbegriffen sind es gleich mehrere Millionen. Sehr beliebt im Netz ist dabei die rein passive Standardschaltung, die ich aufgrund der damit verbundenen Schwächen nicht mal ignorierte. Also aktiv. Mittelt man die vielen aktiven, sich nur marginal unterscheidenden Schaltungsvarianten, kommt in etwa so etwas dabei heraus, wie es in der oberen Hälfte von Bild 1 zu sehen ist. Pro Kanal genügen neben den beiden Potis für Höhen und Tiefen ein Opamp, zwei Kondensatoren und fünf Widerstände. Für eine Klangeinstellung in Stereoausführung würde also ein Dual-Opamp voll ausreichen. Opamps mit besonders audiophilen Daten wie z.B. der DualOpamp NE5532 [1] oder die Quad-Ausführung LM837 [2] gibt es heute recht günstig. Wenn man nun noch berücksichtigt, dass solche Opamps für niedrigste Rauschpegel möglichst niederohmig, aber für geringste Verzerrungen eher hochohmig beschaltet werden sollen, ergibt sich ein optimaler Kompromiss für die Belastung des Opamp-Ausgangs im Bereich von etwa 2 kΩ bis 10 kΩ. Mit einem angepeilten Einstellbereich von rund ±12 dB und -6-dB-Eckpunkten von 100 Hz für den Bass sowie 5 kHz für die Höhen ergeben sich die in Bild 1 aufgeführten Bauteilwerte. Soweit, so gut. Ungereimtheiten
Bild 1. Standardschaltung (oben) und idealisierte Variante (unten) eines Klangeinstellers samt Frequenz- und Phasengang.
Kürzlich wollte ich für eine simple und preiswerte Digitalendstufe – ich weiß: des Teufels! – eine ebenso simple Klangeinstellung bauen. Das lässt sich heutzutage leicht ebenfalls digi tal erledigen, doch für die Aufgabe war das nicht nur zu aufwändig, sondern gewichtiger war, dass ich die nötigen ICs nicht in meinen Kleinteile-Magazinen „auf Lager“ hatte. Also analog. Da braucht man schließlich selbst für einen Stereo-Verstärker nur einen Dual-Opamp und ein paar passive Bauteile plus Potis. Die Standardschaltung hatte ich zwar irgendwo im Hinterkopf, doch zur Sicherheit habe ich natürlich Google zu Rate gezogen. Was dabei heraus kam, war wenig überraschend, denn so ähnlich haben nicht nur Sie sich, sondern auch ich mir das gedacht. Übrigens lautet die Antwort auf die Frage „Wer hat‘s erfunden?“ diesmal nicht „ein Schweizer“, denn die Schaltung wurde schon 1950 von Peter Baxandall, einem Engländer, präsentiert. Hierfür erhielt er vom Vorläufer der AES (Audio Engineering Society) immerhin eine Uhr im Wert von 25 $ als Preis. Also alles in Butter? Hier meldet sich Radio Eriwan mit „Im Prinzip ja, aber...“
Eigentlich wäre die Geschichte damit zu Ende gewesen, bevor sie richtig angefangen hat. Die Bauteile waren schon berechnet und ausgewählt, und mit einem Quad-Opamp hätte man einen rausch- und verzerrungsarmen Stereo-Klangeinsteller plus Volumen-Poti bekommen. Doch vor der Realisierung einer Schaltung mit physikalischen Bauteilen legt der moderne Elektroniker einen virtuellen Zwischengang ein: Ich simulierte die Standard-Schaltung mit verschiedenen Widerstandswerten für beide Potis. Für ein solch einfaches Vorhaben habe ich mich für den kostenlosen und sehr simpel zu bedienenden Online-Simulator „PartSim“ entschieden, der vom Distributor Digikey vorgehalten wird. Enthalten sind ein einfacher Schaltplan-Editor und ein konfigurierbarer Simulator. In der unteren Hälfte von Bild 1 ist der Frequenz- und Phasengang der Standardschaltung zu sehen. Die Signalquelle hat hier und in allen weiteren Plots eine Amplitude von 1 V. Die Simulationen mit verschiedenen Stellungen der Potis ergaben, dass sich die beiden Einsteller für Bass und Höhen gegenseitig leicht beeinflussen. Dies ist kein Wunder, wenn man bedenkt, dass der invertierende Eingang des Opamps an einem RC-Glied liegt, dessen Frequenzgang ja nicht so scharf zwischen Höhen und Tiefen trennen kann. Dieses Verhalten ist zwar nicht wirklich toll, doch für den Hausgebrauch dürfte der genannte Aspekt eine untergeordnete Rolle spielen. Schwerwiegender ist, dass sich die Lastimpedanz des Opamps nicht wirklich in den Bereich von 2...10 kΩ legen lässt. Entweder werden nämlich die Potis zu hochohmig oder aber die Last sinkt deutlich unter 2 kΩ. Letzteres gilt übrigens auch für den Eingang, falls dieser von einem als Puffer oder als Lautstärkesteller geschalteten weiteren Opamp versorgt wird. Die angegebenen Werte sind also ein wohl hinnehmbarer, aber doch leicht fauler Kompromiss. Die Frage ist: Geht es auch anders? Verbesserungen
Wenn man einmal über Verbesserungen nachdenkt, dann führt
74
Juli/August 2016
www.elektormagazine.de
�����-�������
�����-�������
eines zum anderen. Und ganz wie man bei der Software-Entwicklung irgendwann an den Punkt kommt, das Programm komplett neu zu schreiben, drängen sich radikal neue Schaltungen auf. Dem Impedanzproblem und der gegenseitigen Beeinflussung der beiden Klangeinsteller könnte man z.B. begegnen, indem man die Einstellung von Höhen und Tiefen separiert. Die sich daraus ergebende „ideale“ Variante in der unteren Hälfte von Bild 1 verfügt mit A2 noch über einen Puffer, der den Ausgang von A1 entlastet. Wenn man den radikalen Ansatz noch weiter treibt, dann entledigt man sich speziell bei den Höhen dieser Krücke in Form eines CR-Hochpasses und macht die Sache – wenn schon, denn schon – bezogen auf die Frequenz symmetrisch: Man setzt mit L1 eine Spule dort ein, wo bei den Tiefen mit C1 ein Kondensator platziert ist. Schaltungstechnisch ist das super elegant. Doch leider macht hier die Realität der schönen Idee einen fetten Strich durch die Rechnung: Der sich ergebende Wert von 150 mH für L1 ist dermaßen praxisfern, dass man die schöne Symmetrie eigentlich gleich wieder beerdigen sollte. Spulen mit solchen Werten sind Monster bezüglich der Abmessungen. Und überhaupt Spulen! Diese elektromagnetischen Bauteile sind wirklich alles andere als ideal. Sie sind nicht nur groß, sondern haben nichtideale Serienwiderstände, fangen magnetische Einstreuungen auf und sind in der Variante mit Kern leider nicht so verzerrungsarm, wie sie für anspruchsvolle
Audiozwecke sein sollten. Modernen Kondensatoren können sie nicht das Wasser reichen. Gyrator
Was tun? Idee beerdigen? Nicht so schnell: Elektronik bietet für (fast) alles eine Lösung! In diesem Fall hört sie auf den schönen Namen Gyrator. Dabei handelt es sich um einen Impedanz-Konverter [4], der quasi das Verhalten eines Kondensators in das einer Spule transformieren kann. Das Schöne daran ist, dass man für einen Gyrator im Wesentlichen nur einen (weiteren) Opamp benötigt. Gedacht - simuliert: Links in Bild 2 ist rund um A1 ein Gyrator aufgebaut, der zusammen mit R3 ein RL-Glied, also einen Hochpass, bildet. Die Schaltung ist sehr simpel und die Berechnung ebenfalls. Mit den angegebenen Werten für C1, R1 und R2 kommt man auf eine Induktivität von 100 mH, was voll im angepeilten Bereich liegt. Auch die Impedanzen von C1 und R2 sind im idealen Bereich. Der niederohmige Wert von R1 stört nicht, denn die Belastung des Opamp-Ausgangs setzt sich aus R1 + R3 || (C1 + R2) zusammen. Mit den 2,7 kΩ für R3 ergibt sich ein schöner Hochpass mit einer Grenzfrequenz f g = R / (2 π L) = 4,3 kHz. Doch die Probleme hören nicht auf: Die mit dem Gyrator realisierte Induktivität weist einen Serienwiderstand auf, der exakt R1 entspricht. Das ist noch nicht schlimm, denn angesichts des
iGyrator
equivalent
R3 Rx3
Gyrator
real
R3 7 k 2
ideal
Rx3
L = C1 * R1 * R2
7 k 2
7 k 2
7 k 2
R1
Rx3i
7 k 2
L = C1 * R1 * R2
L
100R
Lx
R1
L
100R
A2 Lx
Lxi Rx1
C1
Rx1i
100n
R 0 0 1
R 0 0 1
100n
A1 R2
Rx1
Cx1 R 0 0 1
C1
Lx1
Rx2
Lx1i
100n
A1
k 0 1
k 0 1
100mH
100mH
R2
Lx1
k 0 1
150788 - 13
100mH
150788 - 14
Bild 2. Der klassische Gyrator im Einsatz als RL-Hochpass (links) nebst realer (Mitte) und idealisierter Ersatzschaltung (rechts) sowie Frequenzund Phasengängen.
Bild 3. Der verbesserte iGyrator im Einsatz als RL-Hochpass (links) mit äquivalenter Ersatzschaltung sowie Frequenz- und Phasengängen.
www.elektormagazine.de
Juli/August 2016
75
�����
������
�����
großen Wertes der sich ergebenden Spule sind 100 Ω zu vernachlässigen, und relativ zur Schaltungsimpedanz bzw. dem Wert von R3 ergeben sich nur vernachlässigbare Fehler im Frequenzgang. Viel schlimmer ist, dass parallel zur gedachten idealen Spule zwischen dem Punkt „L“ und Masse noch das RC-Glied aus C1 und R2 geschaltet ist. Und dies wirkt sich durchaus merklich auf den Frequenzgang etc. aus. Um die Verhältnisse zu veranschaulichen, wurde mit PartSim nicht nur der Frequenz- und Phasengang des RL-Glieds mit Gyrator, sondern auch die Plots seiner real wirkenden (in der Mitte) und der idealisierten Ersatzschaltung ohne dieses RC-Glied (rechts) generiert. Wie man sieht, sind Gyrator- und reale Ersatzschaltung fast identisch. Die Abweichung der Phase bei hohen Frequenzen ist lediglich dem begrenzten Frequenzgang des in der Simulation verwendeten Opamps geschuldet und audiomäßig nicht ganz so wichtig. Man sieht ebenfalls, dass sich nur die idealisierte Ersatzschaltung so verhält, wie sie soll. Auch dass R1 vernachlässigt werden kann, wird bestätigt.
iGyrator, fGyrator & fGyrator2
Für das neu aufgetretene Problem des störenden RC-Glieds aus C1 und R2 gibt es ebenfalls eine (elektronische) Lösung. Man kann das RC-Glied nämlich recht simpel mit Hilfe eines weiteren als Puffer geschalteten Opamps impedanzmäßig vom Punkt „L“ abtrennen. Resultat ist die Schaltung von Bild 3 . Da es sich um einen „improved Gyrator“ handelt, habe ich ihn kurzerhand iGyrator getauft. Wie man sieht, entspricht die äquivalente Ersatzschaltung völlig der idealisierten Ersatzschaltung von Bild 2. Frequenz- und Phasengänge von iGyrator und Ersatzschaltung sind hier im Audiofrequenzbereich weitgehend deckungsgleich und nähern sich mit schnellen Opamps weiter an. Doch auch jetzt sind noch nicht alle Probleme gelöst, denn der Gyrator funktioniert ja an seinem Punkt „L“ leider nur auf Masse bezogen. Wenn man sich aber die idealisierte Schaltung von Bild 1 anschaut, so sieht man, dass die Induktivität L1 potentialfrei sein muss, wenn man sie wirklich durch einen Gyrator ersetzen will. Und das kann man tatsächlich machen, denn
fGyrator2 fGyrator 7 k 2
R3a
equivalent 7 k 2
L = C1 * R1 * R2
7 k 2
Rx3a
10k
Rx1
100R
R 0 0 1
A1.B
Rx1 100n
200n C1b
3
100n
Rx2
R 0 0 2
50n
k 0 1
k 5
R1b
Lx1
100R
100mH
R2a 10k
Cx1
A1.A
R2 Lx1
A1.A
Lxa
C1a
Cx1
C1a
100R
Lxa
R1a
100n
Rx3a 7 k 2
L = C1 * R1 * R2 R1a
La
R2b
La
equivalent
R3a
7 k 2
C1b
Lxb
Lb
Rx2 k 0 1
A1.B 100mH
R3b
7 k 2
Lxb
100n
Rx3b
R1b
Lb 150788 - 15
100R R3b
Rx3b
7 k 2
7 k 2
150788 - 16
Bild 4. Schaltet man zwei Gyratoren antiparallel, ergibt sich der potentialfreie fGyrator, den man wie eine echte Spule beliebig in einer Schaltung verwenden kann. Leider erhöht sich dadurch die Belastung des parasitären RC-Glieds gegenüber der einfachen Gyrator-Schaltung.
76
Juli/August 2016
www.elektormagazine.de
Bild 5. Die zweite Variante fGyrator2 arbeitet mit antiseriellen Gyratoren. Die Belastung durch das RC-Glied sinkt wieder, dafür steigt der Serienwiderstand der virtuellen Induktivität.
�����-�������
�����-�������
eine recht simple Lösung besteht darin, einfach zwei gleiche Gyratoren antiparallel zu schalten. Die Schaltung fGyrator von Bild 4 ist ein „floating Gyrator“ und funktioniert tatsächlich, wie die Simulation zeigt. Die beiden RC-Glieder aus C1a und R2a sowie C1b und R2b liegen jetzt zwischen den Anschlüssen der virtuellen Induktivität „La“ und „Lb“. Daraus folgt aber auch, dass die beiden RC-Glieder parallel zur virtuellen Induktivität geschaltet sind. Die Ersatzschaltung berücksichtigt dies, indem Cx1 den doppelten und Rx2 den halben Wert aufweist. Gegenüber iGyrator bietet fGyrator jetzt zwar den Vorteil, dass die Induktivität potentialfrei ist, do ch dies muss man mit dem Nachteil bezahlen, dass der Einfluss der beiden RC-Glieder insgesamt doppelt so stark ist wie beim ursprünglichen Gyrator. Könnte man die Potentialfreiheit nicht auch noch anders erreichen? Selbstverständlich geht das, denn statt antiparallel könnte man die beiden Gyratoren auch schlicht antiseriell schalten. Bild 5 zeigt die resultierende Variante fGyrator2, die sogar mit einem Bauteil weniger auskommt, da R2 von beiden Gyratoren
ifGyrator
zugleich verwendet wird. Das Interessante daran ist, dass sich dadurch die wirksame Kapazität von Cx1 bei der Ersatzschaltung gegenüber fGyrator viertelt und Rx1 immerhin verdoppelt. Dafür verdoppelt sich auch der Serienwiderstand der Induktivität Rx1, was aber nicht so ins Gewicht fällt. Insgesamt ist fGyrator2 also etwas besser, aber das zur Induktivität parallel geschaltete RC-Glied ist leider nicht verschwunden. ifGyrator, fGyrator2 & iTreble
Um einen potentalfreien Gyrator ohne das Problem des störenden RC-Glieds zu erhalten, muss man beide Prinzipien verheiraten und schon hat man mit dem ifGyrator die Schaltung eines „improved floating Gyrators“ (Bild 6) vor sich. Gegenüber seinem nicht verbesserten Vorläufer ist tatsächlich der Einfluss der parasitären RC-Glieder verschwunden und somit verschiebt sich auch die Kurve des Frequenzgangs nach rechts in Richtung idealer Werte. Der Preis für diesen nahezu idealen und potentialfreien Gyrator ist, dass mit zwei weiteren Puffern nun ganze vier Opamps erforderlich sind. Das sieht zwar nach
equivalent
R3a
Rx3a
L = C1 * R1 * R2 7 k 2
7 k 2
ifGyrator2
R1a
La
100R
R3a
Lxa
equivalent Rx3a
L = C1 * R1 * R2
7 k 2
7 k 2
R1a
La
A2.A
100R
Lxa
A2.A R2b C1a
Rx1
k 0 1
100n
R 0 0 2
A1.A
Rx1
A1.A
C1a
100n Lx1 R2a C1b
R 0 0 2
R2 k 0 1
A1.B
C1b
k 0 1
Lx1
100mH
100n
100n
A1.B 100mH
A2.B
A2.B
R1b
R1b
Lb
100R R3b
Lb
Lxb Rx3b
7 k 2
7 k 2
150788 - 17
Bild 6. Durch Kombination von iGyrator und fGyrator ergibt sich mit dem ifGyrator eine Schaltung, die als potentialfreier Gyrator fungiert, der nicht durch ein parasitäres RC-Glied belastet wird.
100R R3b
Lxb Rx3b
7 k 2
7 k 2
150788 - 18
Bild 7. Kombiniert man den antiseriellen fGyrator2 mit dem iGyrator, erhält man folgerichtig einen ifGyrator2. Einen Widerstand weniger als beim ifGyrator erkauft man sich mit einem erhöhtem Serienwiderstand.
www.elektormagazine.de
Juli/August 2016
77
�����
������
ifGyroBaxandall
R3a
�����
equivalent
R1a
2k7
100R
A2.A
100R 150mH
100n
P1
R2a k 5 1
10k
Rx1
Lx1 C1a
Px1
Rx3a
A2.C
Rx3b
2k7
2k7 10k
R2b k 5 1
Ax1i A2.B
OUT
A2.D
C1.b
100n
R1b 100R R3b 7 k 2
A1
OUT
150788 - 19
Sie ahnten es sicher schon: Auch vom ifGyrator gibt es eine zweite Variante mit antiserieller Grundschaltung. Bild 7 zeigt den ifGyrator2 , dessen größter Vorteil gegenüber dem if Gyrator ist, dass nur ein einziger R2 erforderlich ist. Dies erkauft man allerdings durch einen verdoppelten Serienwiderstand, weshalb sich diese Sparmaßnahme kaum rechnet. Wenn man also die Spule L1 in der idealen Schaltung von Bild 1 durch einen Gyrator ersetzen möchte, dann wird man – wenn schon, denn schon – eher zum ifGyrator tendieren, denn auf den einen Widerstand kommt es jetzt auch nicht mehr an. Wenn man nun also den ifGyrator dazu verwendet, die Induktivität der Höheneinstellung zu ersetzen, kommt mit iTreble die verbesserte Höheneinstellung in Bild 8 dabei heraus. Wie man sieht, ist der Frequenzgang bei angehobenen und abgesenkten Höhen im Audiofrequenzbereich weitgehend deckungsgleich mit dem der Ersatzschaltung mit „echter“ Spule. Dies ist der Beweis, dass eine Baxandall-Klangeinstellung mit rein elektronischen Mitteln und ganz ohne reale Induktivitäten voll-symmetrisch machbar ist. Auch beim Phasengang halten sich die Unterschiede bei hohen Frequenzen noch in Grenzen, was sich mit schnelleren Opamps noch verbessern ließe, denn für die Simulation wurden Standardexemplare mit einer Bandbreite von 10 MHz verwendet. iBaxandall
Bild 8. Ersetzt man die Induktivität im idealisierten Höheneinsteller durch den ifGyrator, so ergibt sich die Schaltung „improved Treble“. Etwas Aufwand, aber es klappt.
viel Aufwand aus, aber hey: Vier Opamps haben in einem einzigen kleinen Quad-Opamp-IC Platz und bei Verwendung von SMDs fällt auch der Flächenbedarf für so einen Gyrator relativ bescheiden aus.
R13
R7 R5 LI
C1 R1 C5 C6
R2
RI
R9
R24
C2
C19
C21
3 C I
R8 6 R
R15
R11 IC2
4 1 R
4 1 C
V 0
V 0 2 -
C20 *
8 1 R
C12 R10
R12
e l b e r t
C4
O R R26
R25
0 2 R
P2
s s a b
IC6 C22
C10
2 2 R
IC4 R16
IC5
R19
C8
R4
P1
1 2 R
C11
R23
t u p n i
C9
C13
R3
V 0 2 +
C7
7 1 R
IC1
P3
C3
e m u l o v
Bild 10. Die Platine zu iBaxandall bietet die Möglichkeit, der vielen Theorie praktische Experimente folgen zu lassen.
78
Juli/August 2016
www.elektormagazine.de
O L
Fasst man die bisher gewonnen schaltungstechnischen Erkenntnisse zusammen, führt das zur Synthese der verbesserten Klangeinstellung iBaxandall von Bild 9, bei der sich die Einstellungen von Höhen und Tiefen nicht gegenseitig beeinflussen. Die Schaltung in Stereoausführung samt Volumeneinsteller kommt mit Puffer-Opamps (IC1A und IC1C plus IC2A und IC2C) auf die stolze Zahl von 16 Opamps! So extrem ist das aber auch wieder nicht, denn mit Quad-Opamps kommt man gerade einmal auf vier ICs (plus die beiden Spannungsregler). Ob sich der Aufwand lohnt? Diese Frage muss jeder selbst beantworten. Auf jeden Fall wurde der Beleg erbracht, dass es auch bei analoger Schaltungstechnik immer noch Überraschungen gibt. Ich selbst war sehr erstaunt, wohin mich die Reise führte, als ich versuchte, eine alte Grundschaltung zu verbessern. Wer möchte, der kann das einfach einmal praktisch ausprobieren, denn auch eine Platine ( Bild 10) wurde konzipiert. Mit 92 x 50 mm samt Potis fällt sie recht klein aus. Mit den angegebenen Bauteilewerten ergibt sich ein Einstellbereich von ±12 dB bei 40 Hz bzw. 10 kHz. Die Gesamtverstärkung liegt beim Faktor 2 und kann mit den Verhältnissen (R3+R5)/R3 bzw. (R4+R6)/R4 angepasst werden. Bei zweifacher Verstärkung ist auch bei voll angehobenen Tiefen und Höhen beim Normpegel (0 dBm = 775 mV) und einer Versorgung mit ±15 V genug Luft zur Vermeidung von Signalbegrenzungen, und die Verzerrungen bleiben gering – falls die nachgeschalteten Endstufen und die Lautsprecher das überhaupt mitmachen. R15...R18 wurden zu 15 kΩ gewählt - das ist immer noch eine rauscharme Auslegung, da jeweils C7...C10 wechselspannungsmäßig parallel liegen. Diese Werte führen zu einer Induktivität der Gyratoren von 150 mH. Übrigens wurde vorsätzlich auf einen Balance-Einsteller verzichtet. Wenn man Musik in guter Qualität hören möchte, dann sollten Sitzposition und Boxenanordnung schon einigermaßen stimmen. Schließlich schaut man auch nicht in einem Winkel von 45° auf einen Fernseher. Wer die besondere Klangeinstellung
�����-�������
�����-�������
bauen möchte, der sollte bei den frequenzbestimmenden Kondensatoren C7...C12 auf gute Qualität achten. Normale Keramik-SMDs altern ordentlich und ihre Kapazität ist deshalb nicht sehr stabil. Wer hierfür große Folientypen einsetzen möchte, kann die auf der Elektor-Webseite zu diesem Artikel [5] kostenlos zur Verfügung stehenden Layout-Dateien im Eagle-Format entsprechend anpassen. Viel Spaß beim Experimentieren!
Weblinks & Referenzen:
[1] NE5532: www.ti.com/product/ne5532 [2] LM837: www.ti.com/product/LM837 [3] PartSim: www.partsim.com [4] Gyrator: https://de.wikipedia.org/wiki/Gyrator [5] Elektor-Webseite: www.elektormagazine.de/150788
(150788)
R19
IC5
100R
+15V
R7
1u
4
C17
4
IC1
IC3
11
11
3
C7
P1.A
100n R15
10k
k 5 1
–15V
8
IC3.C
2
k 2 2
L GND
IC3.B
C9
13
14
IC3.D
13
R21 BASS P2.A
9
6
R 7 4
5
IC1.B
7
10
IC1.C
8
R11
10k
C11
C13
330n
220p
R GND
R4
R6
4k7
P
IC2.B
7
RI
C2
10 R10 9
4k7
100p 3
IC2.A
IC2.C
8
C12
R12
C14
2k7 330n
7 k 2
10k
+15V
C10
5
IC4.B
7
12
C16
C18
k 5 1
4
IC4
11
11
10k TREBLE
R8 1u
7 k 2
IC2.D
IC4.D
14
GND
k 5 1
10
P1.B
C8 3
2
9
P
IC4.C
8 C22
100n
IC4.A
0V
P
R18
C20
1u
1
1u
5 2 3
–15V IC2 = LM873 IC4 = LM873
14
13
100n R16
4
1u VOLUME P3.B
13
12
RO
C4
10k
2k7
BASS
100R
6
IC2
220p R14
P2.B
R22
1
1u
1u
R GND
R26 47R
2
k 2 2
L GND
R25 47R
R2 C6
1u
2k7
5
6
LO
2k7
R24 R 7 4
VOLUME C3
R13 10k
7 k 2
4k7
14
IC1.D
P3.A
100R
R23
1u
12
1
R5
4k7
C19
12 7
R9
100p R3
7
k 5 1
3
IC1.A
6
P
C1
C5
3
1u
100n
R1
2
R17
5
6
C21
9
10
IC1 = LM873 IC3 = LM873
+15V
1
1
IC3.A
1u
1u
8
2
7 k 2
TREBLE
LI
78L15SMD
+20V
C15
1
6
–20V R20 100R
7
79L15SMD IC6
–15V 150788 - 11
Bild 9. Langer Überlegung kurzes Resultat: Die Schaltung einer verbesserten Klangeinstellung nach dem Motto „improved Baxandall“. Die 16 Opamps stecken in vier Quad-Opamp-ICs.
www.elektormagazine.de
Juli/August 2016
79
�����
������
�����
Elektor SDR Reloaded SDR-Shield für Arduino Von Burkhard Kainka (Deutschland)
Ein Software Defined Radio ist ein universelles Werkzeug in der HF-Technik, das auch für Messungen einsetzbar ist. Die Eigenschaften des Empfängers werden durch Software definiert. In unserer heutigen Zeit bietet es sich an, das Frontend als Arduino-Shield zu realisieren.
Eigenschaften • Betriebsspannung: 5 V und 3,3 V vom Arduino • Frequenzbereich: 150 kHz bis 30 MHz • Empfindlichkeit: 1 �V • Gesamtverstärkung: 40 dB • Maximaler Antennenpegel: 10 mV • Dynamikumfang: 80 dB
Auch wenn immer mehr Rundfunkdienste die AM-Bereiche Lang-, Mittel- und Kurzwelle verlassen, bleibt es interessant, mit eigenen Empfängern auf die Wellenjagd zu gehen. Jetzt erst recht, könnte man sagen, denn viele weit entfernte Stationen treten nun erst deutlich hervor, weil sie nicht mehr von deutlich stärkeren Signalen verdrängt werden. Oft ist es auf der Kurzwelle so still, das man meinen möchte, der Empfänger wäre taub. In manchen Bereichen produzieren dann die Funkamateure die stärksten Signale. Und man findet immer wieder Neues, von Piratensendern über SSB-Sprechfunk bis zu den neuen digitalen Betriebsarten. Das macht neugierig! Elektor hat schon viele Radios und Empfänger gebaut. Ein Software Defined Radio mit USB-Schnittstelle wurde schon in 2007 [1] vorgestellt. In der
80
Juli/August 2016
www.elektormagazine.de
Zwischenzeit gab es immer mal wieder Überlegungen zu einer Neuauflage. Aber der damals verwendete PLLChip wird nicht mehr gebaut. Deshalb musste eine neue Lösung her. Sie kam in Form des Silicon Lab Chips SI5351, eines CMOS-Clock-Generators von 8 kHz bis 160 MHz mit I2C-Bus. Die ersten Versuche gelangen mit einem Breakout-Board von Adafruit. Die vorhandenen Software-Beispiele waren für den Arduino geschrieben. Und deshalb wurden auch die ersten Gehversuche mit dem Arduino unternommen. Der neue VFO wurde einfach an die alte SDR-Platine angeklemmt und konnte seine Tauglichkeit beweisen (Bild 1). Und so entstand die Idee: Warum nicht gleich den ganzen Empfänger als Arduino-Shield bauen? Dann ist schon mal die Stromversorgung geklärt und die
USB-Schnittstelle vom PC vorhanden. Der Arduino übernimmt die Ansteuerung des VFO und kann sozusagen im Klartext angesprochen werden (bitte einmal 6030 kHz). Und was vielleicht noch wichtiger ist, so hat man sogar eine reelle Chance, einen Stand-Alone-Empfänger zu bauen. Die Bedienung könnte relativ leicht vom PC auf den Arduino wandern. Und wer weiß, vielleicht auch eines Tages die Dekodierung des IQ-Signals? Wie funktioniert‘s?
Aber jetzt noch mal ganz von vorn. Was ist überhaupt ein Software Defined Radio? Von der Entwicklung der digitalen Elektronik blieben die Radios lange Zeit völlig unberührt. Als es schon Homecomputer gab, waren die meisten Radios noch
�����-�������
�����-�������
ANT
IMixer
L
QMixer
R
Bild 1. Der erste Vorversuch für einen SDR2: Ein SI5351 PLL-Chip angeschlossen an einen Arduino Uno und den „alten“ SDR-Empfänger.
Bild 2. Prinzipschaltbild: Das Frontend besteht aus einem doppelten Direktmischer mit um 90 Grad phasenverschobenen Signalen.
analog. Dann setzte allmählich eine Entwicklung ein, zumindest die Abstimmung zu digitalisieren. Heutige Radios sind oft mit einem PLL-Synthesizer ausgestattet, denn das vereinfacht die Abstimmung und garantiert ein genaues Einhalten der Kanalraster. Der Rest der Schaltung ist aber nach wie vor analog. Inzwischen ist die digitale Elektronik in der kommerziellen HF-Technik und im Amateurfunk angekommen. Immer mehr analoge Funktionen der Geräte werden durch Software ersetzt. Meist arbeitet ein Digitaler Signal-Prozessor (DSP) mit der passenden Software weitgehend unsichtbar für den Benutzer und sorgt für optimale Filterkurven, variable Bandbreite, Signaldekodierung, Entstörung und vieles mehr. Die Geräte werden damit insgesamt besser bei weniger Hardware-Aufwand. Andere Beispiele für diese Entwicklung sind Smartphones und andere mobile Endgeräte. Da sieht man gleich, da kann kein Hobby-Elektroniker mehr mithalten. Aber eigentlich muss es gar nicht so aufwendig sein. Man braucht nur einen schnellen AD-Wandler direkt an der Antenne. Das ganze Spektrum wird digitalisiert und dann digital weiter verarbeitet. So etwas gibt es tatsächlich schon für den ganzen Bereich von 0 bis 30 MHz. Erst die Software filtert bestimmte Frequenzen heraus und demoduliert das gewünschte Signal. Ganz egal, ob es um AM- oder DRM-Rundfunksender geht oder ob SSB-Signale, CW-Morsesender, Fernschreiber, Wetterfax oder anderes empfangen werden soll, alles ist möglich, und für alles gibt es die passende Software. Allerdings ist die Hardware bei einer so großen Bandbreite recht teuer, und die Weiterverarbeitung des breiten Spekt-
ein einfacher Direktmischer mit einem Dioden-Ringmischer oder dem bekannten NE612. Nur ein stabiler variabler Oszillator (VFO) wird zusätzlich gebraucht. Für spezielle Anwendungen nimmt man einen Quarzoszillator. Aber wenn man den ganzen Bereich abstimmen können möchte, sollte es ein DDS-Generator oder ein PLL-Baustein ein. Bei einem IQ-Mischer handelt sich vereinfacht gesagt um einen doppelten Direktmischer mit zwei um 90 Grad phasenverschobenen Signalen. Das Oszillatorsignal liegt immer nahe bei der Empfangsfrequenz. Die Ausgangssignale liegen daher im NF-Bereich, meist zwischen 0 kHz und 24 kHz. Die beiden Signale werden mit I und Q bezeichnet (siehe Bild 2). Man gibt
rums stellt hohe Anforderungen. Einen Ausweg bietet die Soundkarte moderner PCs. Bei einer heute üblichen Abtastrate von 96 kHz kann man bereits den ganzen Bereich bis 48 kHz empfangen. Statt eines Mikrofons schließt man einfach eine große Spule als Antenne an, und schon kann man den VLF-Bereich empfangen. Da gibt es viele interessante Signale bis hin zum U-Boot-Sender. Wenn man die Soundkarte für höhere Frequenzen verwenden will, muss man die Signale zuerst heruntermischen. Der Aufbau entspricht dann einem Superhet mit einer niedrigen Zwischenfrequenz. Die ZF-Stufen, Filterung, automatische Verstärkungsregelung und die Demodulation übernimmt der PC. Im Prinzip reicht dafür
Bild 3. Das Programm SDR# beim Empfang eines AM-Signals.
www.elektormagazine.de
Juli/August 2016
81
�����
������
3V3
�����
5V
5V R5 100R
C1
10
C2 12
4u7 16V
100n
1 VDD
R1 7 k 4
2
R2
X1
7
K3 10 9
SDA
8
AREF
SDA
R3 330R R4 330R
3
4
5
14
14
IC2
IC3
7
7
IC2 = 74AC74
IC1
C3
9
CLK2
6
2
SDA
D
S
3
5
C
1
8
IC3B
5
IO5 IO4 IO3 IO2 IO1 IO0
R9
R10
3
10
100k
9
100n
1
6
100n
IC3A
R13
C5
13
IC4B
5
2n2
C9
7
8 IC3C
D1
D2
L1
R6
1
2200uH
2x 1N4148
8 100n
K1
k 0 1
R14
R15
3
100k
100n 2
2n2 R8
K4
100n 1 2
100n
IC3D C11 2n2
3
R16
100R
12
1
100k C12
10
C14
IC4A
R17
9
R 0 7 4
2
IC4C
100n
C10
ANT
BF545B
VIN
C7
7 k 4
10k T1
GND
100k
6
GND
GND
C8
R11
2
4
5V
3
1
C6
7
5
3V3
4
R12
C19
6
RESET
5
5V
100n
L2
8
IOREF
6
100R
3V3
K5
IO6
IC4 = TS914
2n2
100uH
IO7
7
3V3
4
R7
1
IO8
4u7 16V
C4
6
R
GND
2
IO9
11
10k
IC2A
3
3
IO10
100n
8
2
4
IO11
C18
10
5
IO12
C17
IC4 100n
4
SI5351A SCL
4
C16
IC3 = 74HC4066
XB
6
IO13
100n
8
C
13
7
GND
C15
R
CLK0
SCL
K2 9
IC2B
11
VDDO
CLK1
SCL
S
XA
7 k 4
25MHz
D
4
13
R18 12 7 k 4
11
IC4D
14
k 0 1
5 6
C13
AD0 AD1 AD2 AD3 AD4 AD5
100n 150515 - 11
Bild 4. Schaltplan des neuen SDR-Empfängers.
sie direkt auf den linken und den rechten Kanal eines Soundkarten-Eingangs. Der Rest wird dann per Software erledigt. Ein einfacher Mischer würde den Bereich
unterhalb und oberhalb der Oszillatorfrequenz in denselben Bereich mischen. Es gäbe also ein Spiegelfrequenz-Problem. Durch die doppelte Mischung mit
einer Phasenverschiebung kann jedoch die Software die Spiegelfrequenz herausrechnen. So kann ein Bereich zwischen –24 kHz und +24 kHz empfangen wer-
Stückliste Widerstände: R1,R2,R13,R18 = 4k7, 1 %/100 mW, SMD 0603 R3,R4 = 330 Ω, 1 %/100 mW, SMD 0603 R5,R7,R8 = 100 Ω, 1 %/100 mW, SMD 0603 R6 = 470 Ω, 1 %/100 mW, SMD 0603 R9,R11,R14,R16 = 10 k, 1 %/100 mW, SMD 0603 R10,R12,R15,R17 = 100 k, 100 mW, SMD 0603
Außerdem: K1 = Stereo-Klinkenbuchse 3,5 mm für Platinenmontage K2,K3,K4,K5 = 1 Satz Steckverbinder, Arduino-kompatibel (1·6 Pins, 2·8 Pins, 1·10 Pins)
X1 = 25-MHz-Quarz (Abracon ABM7) Platine 150515-1 Oder Platine mit vormontierten SMDs: 150515-91
Kondensatoren: C1,C18 = 4�7/16 V, SMD case B C2,C3,C6,C7,C8,C9,C12,C13,C14,C15,C16,C17 ,C19 = 100 n/50 V, X7R, SMD 0603 C4,C5,C10,C11 = 2n2/50 V, X7R, SMD 0603 Induktivitäten: L1 = 2200 �H (Fastron L-1812AF) L2 = 100 �H (Murata LQH32CN101K23L) Halbleiter: D1,D2 = 1N4148WS, SOD-323 T1 = BF545B, SOT-23 IC1 = SI5351A-B-GT, MSOP-10 IC2 = SN74AC74PW, TSSOP-14 IC3 = 74HC4066, SOIC-14 IC4 = TI914IDT, SOIC-14
82
Juli/August 2016
www.elektormagazine.de
Bild 5. Die doppelseitige Platine für den SDR3-Empfänger ist als Arduino-Shield ausgeführt.
�����-�������
den, wenn die Soundkarte eine Abtastrate von 48 kHz hat. Bild 3 zeigt, was ein Programm wie SDR# daraus macht (siehe auch Textkasten „SDR-Software“). Schaltplan
Ein Blick auf den Schaltplan in Bild 4 zeigt die einzelnen Baugruppen. Der PLL-Generator SI5351 (IC1) liefert das Oszillatorsignal mit der vierfachen Empfangsfrequenz an den Teiler 74AC74 (IC2B). Dieser teilt die Frequenz durch vier und liefert die um 90 Grad phasenverschobenen Signale an den Mischer 74HC4066 (IC3). Dieser Analogschalter ist wie ein Umschalter verdrahtet und legt das HF-Signal abwechselnd an den invertierenden und den nicht-invertierenden Eingang des Operationsverstärkers TS914 (IC4B/IC4D). Damit wird das Signal in den NF-Bereich heruntergemischt. Nach einer geringen Filterung und Verstärkung (IC4C/IC4A) gelangt das Signal an den Audio-Ausgang. Die HF-Eingangsstufe bildet ein Source-Folger mit dem JFET BF545B (T1), das SMD-Äquivalent des BF245B. Wer den alten Elektor-SDR kennt, sieht eine gewisse Vereinfachung im Signalzweig. Am HF-Eingang gab es damals mehrere umschaltbare Tiefpassfilter. Jetzt ist der Eingang breitbandig und mit zwei Dioden gegen Überspannung geschützt. Das reicht für den Kurzwellenempfang mit einer Drahtantenne völlig aus. Der Überspannungsschutz ist der Erfahrung mit dem ersten SDR geschuldet; bei einem Gewitter können die Eingangsstufen beschädigt werden. Für besondere Aufgaben kann man noch externe Filter und Vorverstärker verwenden. Und die NF-Verstärkung konnte beim alten Entwurf in drei Stufen eingestellt werden. Diesmal gibt es nur die mittlere Verstärkung, die sich als allgemein nützlich erwiesen hat. So ist alles etwas einfacher geworden und passt nun problemlos auf das Shield. Für die ersten Versuche muss man einfach nur eine Drahtantenne anschließen. Ideal ist ein frei abgespannter Antennendraht mit einer Länge ab drei Metern. Wenn das nicht möglich ist, bringt auch schon ein längerer Draht etwas, der einfach nur irgendwie im Zimmer liegt. Allerdings zeigen Innenantennen meist einen schlechteren Störabstand. Der Bau optimierter Antennen wird noch ein Thema in Elektor sein.
�����-�������
Aufbau
Die Platine (Bild 5) ist als Arduino-Shield ausgeführt, so dass man sie direkt auf einen Arduino Uno stecken kann. Da der Si5351 nur in einem sehr kleinen 10-poligen SMD-Gehäuse erhältlich ist, haben wir uns entschlossen die ganze Schaltung mit SMDs aufzubauen und die Platine bestückt im Elektor-Shop anzubieten [3]. Man braucht nur noch die vier Arduino-kompatiblen Steckverbinder auf die Platine zu löten. Wer die Platine lieber komplett selbst aufbauen möchte, kann von [3] das Platinen-Layout downloaden oder eine separate Platine im Elektor-Shop kaufen. Frequenz einstellen
Der Arduino dient hier zusammen mit dem SDR-Shield als Interface zwischen Antenne und PC. Seine Aufgabe besteht allein darin, den VFO abzustimmen. Und dazu sagt ihm ein PC-Programm, welche Frequenz gerade gewünscht ist. Vom PC zum Arduino gelangen Informationen über die USB-Leitung. Das heruntergemischte Nutzsignal geht dann zur weiteren Verarbeitung über ein Stereokabel an den Soundkarten-Eingang. Zwar könnte man versuchen, auch die Bedienung auf den Arduino zu verlagern und vielleicht sogar eine einfache Signalverarbeitung, aber das wären große Aufgaben für ein kleines System. Erstmal reicht
es, wenn der Arduino Kommandos vom PC empfängt und den VFO einstellt. Wie man mit dem Arduino umgeht, soll nicht Thema dieses Beitrags sein. Der Umgang mit der Arduino-IDE wird vorausgesetzt. Denn zuerst muss ein passendes Arduino-Programm geladen werden. Was genau in der Software passiert, wird im Folgenden erläutert. Wer aber lieber schnell zu den ersten Empfangsergebnissen kommen möchte, kann diese Informationen überspringen und einfach die Software laden [3]. Die entscheidende Aufgabe besteht darin, den SI5351 zu überreden, eine passende Frequenz zu generieren. Das IC hat zwei interne PLLs und drei Ausgänge (siehe Blockschaltbild, Bild 6). Verwendet wird hier nur die PLLA und der Ausgang CLK1. Der Sketch verwendet die Library von Adafruit, was die ganze Sache erfreulich einfach macht. Bevor man loslegen kann, muss die Library von [1] geladen und eingebunden werden. Der SI5351 hat einen Quarzoszillator mit 25 MHz und zwei PLLs, die zwischen 600 MHz und 900 MHz eingestellt werden können. Die PLL-Teiler arbeiten mit gebrochenen Teilerverhältnissen, so dass tatsächlich eine fast beliebige Auflösung möglich ist. Der folgende MultiSynth-Teiler verwendet ebenfalls gebrochene Teilerverhältnisse.
www.elektormagazine.de
Juli/August 2016
83
�����
������
VDD
XA
�����
Si5351A 3-Output
VDDO
PLL A
MultiSynth 0
R0
CLK0
PLL B
MultiSynth 1
R1
CLK1
MultiSynth 2
R2
OSC XB
SDA
I2C Interface
SCL
GND
CLK2
10-MSOP
Bild 6. Blockschaltbild aus dem Datenblatt des Si5351A.
Bild 7. Ansteuerung des Clock-Generators mit dem Arduino-Terminal.
Damit hat man zwei Möglichkeiten, die Wunschfrequenz zu erzeugen: • Man kann die PLL fest auf z.B. 900 MHz einstellen und dann mit gebrochenen Zahlen herunterteilen. • Man kann die PLL kleinschrittig einstellen und dann ganzzahlig auf die
zen. Um 3500 kHz zu empfangen muss der Si5351 eine Ausgangsfrequenz von 4 · (3500 - 12) kHz = 13952 kHz am Ausgang 1 erzeugen. Der PLL-Teiler wird auf 36 gestellt (25 MHz · 36 = 900 MHz), der Multisynth-Teiler auf 900000/13952 = 64,506. Mit dieser Methode kommt
Endfrequenz teilen. Hier zunächst die Methode A. Die VFO-Frequenz liegt beim Vierfachen der Mischerfrequenz, die 12 kHz unterhalb der Empfangsfrequenz steht. Das Programm soll die Empfangsfrequenz in kHz im Textformat empfangen und umset-
Listing 1. Programm für fest eingestellte PLL. //SI5351_vfo
PLL fixed at 900 MHz (si5351vfo2.zip)
unsigned int Divider2; unsigned int rdiv;
#include #include
if (freq > 0) { f2=(freq-12)*4; if (f2<1000) {
#include Adafruit_SI5351 clockgen = Adafruit_SI5351();
rdiv = 16; f2 = f2 * 16;
void setup(void)
} else
{ Serial.begin(9600); Serial.println("Si53 51 Clockgen"); Serial.println("");
/* Initialise the sensor */ if (clockgen.begin() != ERROR_NONE) {
Serial.print("Error");
while(1);
} div2 = 900000000/f2; f4 = div2/1000; f5=div2-(f4*1000);
clockgen.setupMultis ynth(1, SI5351_PLL_A, f4, f5, 1000); if (rdiv == 16) { clockgen.setupRdiv (1, SI5351_R_DIV_16); }
} Serial.println("OK"); clockgen.enableOutputs(true); clockgen.setupPLL(SI 5351_PLL_A, 36, 0, 1000); MHz setfreq (6000);
{
rdiv = 1;
if (rdiv == 1) { clockgen.setupRdiv (1, SI5351_R_DIV_1); //900
} } }
} void loop(void) void setfreq (unsigned long freq)
{
{
unsigned long freq; if (Serial.available() ) {
unsigned long f2; unsigned long f3;
freq = Serial.parseInt(); setfreq (freq);
unsigned long f4; unsigned long f5; unsigned long div2;
84
Juli/August 2016
www.elektormagazine.de
} }
�����-�������
man runter bis 1 MHz. Für noch kleinere Frequenzen wird der zusätzliche R_DIV-Teiler durch 16 eingesetzt. Listing 1 zeigt die zugehörige Software für den Arduino, Bild 7 die Ansteuerung mit dem Arduino-Terminal. Die Methode A hat den Vorteil, d ass der VFO quasi kontinuierlich abgestimmt werden kann, d.h. es gibt keine Unterbrechung bei einem Frequenzwechsel. Frequenzwechsel. Die Methode B verspricht dagegen eine größere Phasenreinheit, Phasenreinheit, die auch für DRM ausreicht. Allerdings wird jeder Frequenzwechsel mit einer kurzen Unterbrechung von etwa einer Millisekunde begleitet, die als Störsignal im SDR erscheint. Die Methode erfordert eine Berechnung des optimalen Nachteilers (Listing 2), damit die PLL immer im Bereich 600 MHz bis 900 MHz bleibt. Beide Programme können aus einem beliebigen Terminal heraus angesteuert werden. Für eine bequemere Bedienung wurde jedoch in Visual Studio 2015 ein VB-Programm geschrieben (SDRshield. zip, Download unter [3]). Es sendet die Wunschfrequenz mit 9600 Baud im Textformat (z.B. 3500) an den Arduino. Der Schieberegler (siehe Bild 8) verwendet im Bereich bis 1,6 MHz Schritte von 9 kHz und darüber das Raster 5 kHz. Zusätzlich kann man eine Wunschfrequenz direkt eingeben oder mit den Bänder-Schaltflächen auf den Anfang der einzelnen Rundfunkoder Amateurfunkbänder klicken. Achten Sie darauf, dass beim ersten Gebrauch der richtige COM-Port gewählt wird. SDR-Software
Hier ein Überblick der verwendbaren SDR-Software. Praktisch alle Programme, die mit dem alten Elektor-SDR verwendet wurden, funktionieren auch jetzt noch. • SDRadio ist immer noch eine gute
Wahl • SoDoRa kann auch DRM dekodieren • DREAM funktioniert noch, verwendet aber nicht das IQ-Signal und nutzt den Empfänger wie einen Direktmischer • HDSDR ist eine aktuelle und sehr mächtige Software • SDRSharp (SDR#) zeichnet sich durch einfache Bedienung und gute Darstellung aus In einem weiteren Artikel werden wir die einzelnen Programme und ihre Möglichkeiten detailliert besprechen.
�����-�������
Bild 8. Ein kleines VB-Programm sorgt für eine bequeme Bedienung.
Erste Empfangserfahrungen
Wenn keine bessere Antenne in Reichweite ist, kann man für die ersten Versuche einfach einen Draht von ein bis drei Metern Länge an den Antenneneingang anschließen. Damit empfängt man problemlos Rundfunksender auf allen Kurzwellenbändern. Die Erfahrung zeigt, dass am Abend mehr los ist als am Tage. Und der Schwerpunkt wandert am Abend hin zu den tieferen Bändern 75 m bis 41 m. Auch Amateurfunkstationen lassen sich
bereits mit einer kurzen Drahtantenne empfangen. Meist hat man im 40-m-Band am meisten Glück und kann einige CWund SSB-Stationen hören. Die passende Betriebsart wählt man in der SDR-Software aus, dazu Lautstärke, Bandbreite, ALC-Einstellungen und vieles mehr. Oft lässt sich mit den richtigen Einstellungen mehr herausholen als mit einem teuren analogen Empfänger älterer Bauart. Eine grundlegende Eigenschaft aller schaltenden Mischer ist es, das sie auch Sig-
SDR-Software
Die aktuellen Sterne am Himmel der SDR-Software SDR-Software heißen SDR# [4] und HDSDR [5]. Beide Programme folgen dem neuen Trend zu immer höheren Frequenzen und lassen sich auch mit einfachen DVBT-Dongeln DVBT-Dongeln betreiben. Das ist eine gute Wahl, wenn man sich im VHF-und UHF-Bereich UHF-Bereich umsehen will. Es gibt auch Versuche, solche Hardware unterhalb 30 MHz einzusetzen. Man kann z.B. einen Up-Mischer verwenden, der alles um 50 MHz nach oben setzt. Dann hat man allerdings einen Mehrfach-Super Mehrfach-Super mit den bekannten Problemen wie zahlreiche Phantomsignale und Nebenempfangsstellen sowie eine eingeschränkte Dynamik. Ein SDR speziell für den Bereich bis 30 MHz mischt jedoch nur einmal und liefert daher einen sehr sauberen Empfang ohne Pfeifstellen. Am PC laufen zwei Programme, nämlich das Abstimm-Programm und die SDRSoftware. Jedes SDR-Programm hat seine eigene Bedienung. Die ersten Schritte sind aber immer ähnlich. Zuerst muss man sicherstellen, dass der richtige Eingang verwendet wird. Dazu muss die Soundkarte gewählt werden, und deren verwendeter Eingang (Line In) aktiviert werden. Dann startet man die SDRSoftware. Dass man den richtigen Eingang ausgewählt hat, sieht man an einem deutlichen Anstieg des Grundrauschens, das mit dem Anschluss der Antenne noch einmal deutlich ansteigen sollte. Meist müssen die Soundkarten-Regler auf eine reduzierte Lautstärke eingestellt werden, weil der Empfänger Signale bis z u einem Volt liefern kann.
www.elektormagazine.de
Juli/August 2016
85
�����
������
�����
Listing 2. Programm für variable PLL. //SI5351_vfo, variable PLL (si5351vfo3.zip)
Divider2 = 18; }
#include
if (f2 < 45000) { Divider2 = 20;
#include
}
#include
if (f2 < 30000) { Divider2 = 30;
Adafruit_SI5351 clockgen = Adafruit_SI5351();
}
void setup(void)
if (f2 < 20000) { Divider2 = 45;
{
}
Serial.begin(9600);
if (f2 < 15000) {
Serial.println("Si53 51 VFO"); Serial.println("");
Divider2 = 60; }
if (clockgen.begin() != ERROR_NONE)
if (f2 < 10000) {
{
Divider2 = 90;
Serial.print("Error");
}
while(1);
if (f2 < 6000) {
}
Divider2 = 150;
Serial.println("OK");
}
clockgen.enableOutputs(true);
if (f2 < 4000) {
setfreq (6000);
Divider2 = 220;
}
} if (f2 < 2700) {
void setfreq (unsigned long freq)
Divider2 = 330;
{
}
unsigned long f2;
if (f2 < 1800) {
unsigned long f3;
Divider2 = 500;
unsigned long f4;
}
unsigned long f5;
if (f2 < 1500) {
unsigned int Divider2;
Divider2 = 600;
unsigned int rdiv;
} if (f2 < 1000) {
if (freq > 0)
Divider2 = 900;
{
}
f2=(freq-12)*4;
f2=f2*Divider2;
// f2=freq;
f2=f2*1000/25;
if (f2>120000) {
f3=f2 /1000;
f2=120000;
f4 = f3/1000;
} if (f2<800) {
f5=f3-(f4*1000);
rdiv = 16;
clockgen.setupPLL(SI 5351_PLL_A, f4, f5, 1000);
f2 = f2 * 16;
clockgen.setupMultis ynth(1, SI5351_PLL_A, Divider2, 0, 2);
} else
if (rdiv == 16) {
{
clockgen.setupRdiv (1, SI5351_R_DIV_16);
clockgen.setupRdiv( 1, SI5351_R_DIV_1); }
rdiv = 1; }
} if (f2 >= 100000) {
}
Divider2 = 6; }
void loop(void)
if (f2 < 90000) {
{ unsigned long freq;
Divider2 = 10;
if (Serial.available() ) {
}
freq = Serial.parseInt();
if (f2 < 60000) { Divider2 = 15;
setfreq (freq);
}
}
if (f2 < 50000) {
86
Juli/August 2016
www.elektormagazine.de
}
�����-�������
nale auf ungeraden Vielfachen der Grundfrequenz heruntermischen. Wenn man ein Signal bei 1 MHz empfangen möchte, könnten Signale auf 3 MHz, 5 MHz, 7 MHz usw. den Empfang stören. Aus diesem Grunde verwendet man oft umschaltbare Tiefpassfilter. Das SDRShield verzichtet darauf, sodass der Einsatz selektiver Antennen sinnvoll ist. Trotzdem funktioniert es auch mit einer breitbandigen Drahtantenne erstaunlich gut. Das liegt daran, dass zu bestimmten Tageszeiten starke Signale auf unterschiedlichen Bändern dominieren und sich deshalb nicht in die Quere kommen. Eine Ausnahme ist der Empfang auf Lang- und Mittelwelle, der durch Signale aus dem Kurzwellenbereich beeinträchtigt wird. Aber man kann einfach eine Ferritantenne mit einem Drehkondensator anschließen, dann ist das Problem beseitigt. Das Thema Antennen, Filter und Vorverstärker soll noch genauer behandelt werden. Dabei geht es nicht nur um möglichst große Signalspannungen, sondern besonders um den erreichbaren Störabstand. Es geht nichts über eine möglichst weit weg vom Haus aufgehängte, lange Drahtantenne. Aber weil das nicht überall möglich ist, muss man nach Kompromissen suchen. Und da gehört die magnetische Loop-Antenne zu den klaren Gewinnern. So lassen sich relativ kleine und unauffällige Antennen auch in Innenräumen betreiben. Aber dazu später mehr. Bei den ersten Versuchen mit diesem Empfänger wird vermutlich eine Frage besonders interessieren: Sollte nicht der Arduino selbst Empfangsstörungen verursachen? Immerhin ist er ja ganz nah dabei. Beim Entwurf der Platine wurde große Aufmerksamkeit auf eine gute Entkopplung gelegt. Es gibt eine durchgehende Massefläche auf der Unterseite der Platine; die Betriebsspannungen 5 V und 3,3 V werden über LC-Filter entkoppelt. Und tatsächlich waren diese Maßnahmen sehr erfolgreich. Im Normalfall merkt man nichts vom Arduino.
�����-�������
breite FM-Modulation und eine weitere Verstimmung, Verstimmung, die zeigt dass der Resonator eine gewisse Temperaturabhängigkeit hat. Da musste erst ein SDR her, um dem Arduino einmal so genau auf den Zahn zu fühlen!
Arduino belauscht
Aber wenigstens den Taktoszillator bei 16 MHz sollte man doch „empfangen“ können. Das geht tatsächlich schon, wenn man überhaupt keine Antenne anschließt. Das Shield kann dann gleich mal seine Fähigkeiten als Messgerät zeigen. Tatsächlich findet man gleich zwei Oszillatoren. Der eine ist der 16-MHz-Quarzoszillator am USB-Chip des Uno mit einer Abweichung unter 1 kHz. Wenn man von unten die Uno-Platine an der Stelle berührt, wo der Quarz eingelötet ist, gibt es eine kleine Verstimmung. Dann weiß man, dass es das besagte Signal war. Mit einem Stückchen Draht am Antenneneingang wird das Signal stärker, stärker, aber auch das Grundrauschen. Und bei der Gelegenheit sieht man noch eine Besonderheit. Signale, die über den Antenneneingang reinkommen, haben eine gute Spiegelfrequenzunterdrückung. quenzunterdrückung. Aber bei Signalen, die sich über die Betriebsspannung Betriebsspannung in den Signalweg schleichen, ist das anders. Sie erscheinen doppelt, wenn auch wesentlich schwächer. Das Taktsignal des Mega328 muss man erstmal suchen. Er arbeitet nämlich mit einem Keramik-Oszillator, der Abweichungen bis 50 kHz zeigen kann. Und tatsächlich, bei 15950 kHz war ein schwaches Signal zu finden, gleich mit einigen Seitenbandsignalen, die der Controller beisteuert. Und wenn man die Arduino-Platine an der Stelle des Keramik-Resonators berührt, gibt es zusätzlich noch eine
Wenn keine Antenne angeschlossen ist, dreht ein SDR im Normalfall seine Verstärkung so weit auf, dass auch kleinste Störsignale sichtbar werden. Dann sieht man vor allem um die Mittenfrequenz herum schwache Störungen, die vom USB und vom Arduino erzeugt werden. Wenn man unterscheiden möchte, welche Signale von Arduino und welche vom USB kommen, kann man einmal ein Netzteil an den Arduino anschließen und nach der Abstimmung auf eine Wunschfrequenz im laufenden Betrieb das USB-Kabel abziehen. Alle internen Störsignale sind sehr schwach. Sobald eine Antenne angeschlossen wird, steigt das Grundrauschen Grundrauschen soweit an, dass diese Störungen völlig überdeckt werden. Das zeigt die hohe Empfindlichkeit des SDR. Auch Signale mit nur einem Mikrovolt können empfangen werden. Meist ist so viel Empfindlichkeit aber gar nicht nötig, weil der Rauschpegel an der Antenne wesentlich höher liegt. Bei langen Antennen kann es sogar zu einer Übersteuerung des Empfängers kommen. Dann muss man bereits über einen Eingangs-Abschwächer nachdenken. (150515)
Weblinks
[1] www.elektormagazine.de/070039 [2] https://github.com/adafruit/ Adafruit_Si5351_Library [3] www.elektormagazine.de/150515 [4] http://airspy.com/download [5] http://www.hdsdr http://www.hdsdr.de .de
www.elektormagazine.de
Juli/August 2016
87
�����
������
�����
Skip! Drahtlose „Next Track“-Taste für den Media-Player Von Luc Lemmens (Elektor-Labor)
Es ist immer schön und lehrreich, wenn man ein vergangenes (Elektor-) Projekt mit einer tollen und interessanten Idee zu einer neuen Anwendung kombinieren kann. Hier nutzen wir den Sender aus dem „Drahtlosen Quiz“ zusammen mit der cleveren Hoodloader-Software für den Arduino, um mit einer Taste einen Media-Player auf dem PC fernzusteuern. Bild 1. Skip! Die dicke Not-Aus-Taste steuert den Media-Player.
Zu Hause haben wir alle unsere Audio-CDs auf ein NAS gerippt und lassen die meiste Zeit den Windows Media Player oder den VLC-Player (wir sind uns immer noch nicht einig, welcher der beste ist) die Songs in zufälliger Reihenfolge abspielen, um Hintergrundmusik in unserer Werkstatt zu haben. Aber bei der riesigen Auswahl an Künstlern und verschiedenen Musikstilen kommt es vor, dass manchmal ein Song „zur falschen Zeit“ gespielt wird. Das nervt, und man verspürt den Drang, sofort zum Computer zu stürzen und den Song zu überspringen. Natürlich ist dies nicht immer einfach oder möglich, wenn man etwa gerade mit etwas beschäftigt ist. Und erreicht man dann endlich die „Next Track“-Taste am Computer, ist das Stück zu Ende und die Mühe war vergebens. Eine Fernbedienung wäre eine Option, aber solche Dinger haben die Angewohnheit, im entscheidenden Augenblick nicht auffindbar zu sein. Und wenn man sie doch aufspürt, drückt man in der Hektik den falschen Knopf. Arduino drahtlos
Wir haben eine Lösung für dieses Problem gefunden, und zwar in Form einer Not-Aus-Taste (Bild 1), wie man sie von industriellen Anlagen her kennt. Auf dem Flohmarkt haben wir die Taste, die man anders als eine gewöhnliche Fernbedienung schwerlich übersehen kann, für einen schlappen Euro erworben (ok, wenn man sie aus dem Katalog kauft, sind diese Tasten wirklich teuer). Die Taste habe ich zunächst mit einem kleinen ATtiny85-Board ausgestattet, das den Tastendruck in den USB-HID-Media-Control-Code für das Anspringen des nächsten Titels übersetzt.
88
Juli/August 2016
www.elektormagazine.de
Doch dann gab es immer noch dieses lange und umständliche Kabel zwischen der Taste und dem PC. So wartete ich auf die Zeit, die Stimmung und die Inspiration für den Entwurf einer praktischeren drahtlosen Verbindung. Die Inspiration kam, als ich im Elektor-Labor mit dem Projekt „Drahtloses Quiz“ [1] im Elektor-Labor beschäftigt war und an dessen batteriebetriebener Senderplatine mit dem nRF24L01-Funkmodul und seinen einfach zu handhabbaren Arduino-Bibliotheken arbeitete. Kurzerhand habe ich für den Sender die dicke rote Taste samt Schaltung aus dem „Drahtlosen Quiz“ 1:1 übernommen. Weder an der Hard- noch an der Software gibt es irgendwelche Änderungen. Der Sender macht nichts anderes, als den Textstring „RED“ über eine sogenannte Pipe (einen digitalen Kanal des nRF24L01) zu senden, wenn der große rote Knopf gedrückt wird. Dann kehrt der Controller in einen batterieschonenden Sleep-Modus zurück. Der Empfänger hört diesen Kanal ab und startet nach dem Empfang eines Zeichens „R“ eine Aktion. Das einzige, was fehlte, war die Verbindung zwischen dem nRF24L01-Empfänger und einem USB-HID (human interface device), um die Media-Player-Software anzuweisen, zum nächsten Titel zu springen. Etwa zur gleichen Zeit entdeckte ich Nico Hoods Arduino-Pro jekt „Hoodloader“ im Internet. Es schien mir geeignet, damit zu experimentieren und für die drahtlose SKIP!-Taste einzusetzen. In einer ersten Experimentierversion habe ich einen Arduino Uno mit einem ELPB-NG-basierten Prototyping-Shield kombiniert. Nicht die kleinste und eleganteste Lösung, aber es hat Spaß gemacht, es zu bauen und ein Verwendungszweck für einen Arduino Uno, der sonst nur im Labor verstauben würde, war auch gefunden.
�����-�������
�����-�������
Das zweite Herz
Über den Arduino Uno brauche ich Ihnen nichts zu erzählen. Sie wissen, dass es nach seiner Markteinführung im Jahre 2005 zahlreiche Nachfolger und Verbesserungen gegeben hat, aber das ursprüngliche Konzept besitzt einen USB-Anschluss, der eigentlich nur für die Programmierung, Stromversorgung und die UART-Verbindung zu einem Computer gedacht war, nicht für echte USB-basierte Anwendungen. Nur wenige Menschen wissen, dass es nun einen zweiten Mikrocontroller auf dem Board gibt, der in erster Linie als UART-USB-Brücke zwischen dem ATmega328 (und seinem Bootloader) und dem Windows/ Linux/Apple-Computer dient. Dieser Chip, bei den meisten Arduino Unos ein ATmega16U2 – kann ebenfalls mit speziellen Hilfsprogrammen wie Atmels „Flip“ über USB programmiert werden und verfügt sogar über einen eigenen On-Board-ISP-Verbinder, über den seine Firmware geflasht werden kann. Es gab bereits andere Firmware-Versionen für diesen Chip, um dem Uno USB- (meist HID-)Funktionalität zu verleihen, aber der Nachteil war, dass der Benutzer immer erst zur originalen Seriell-USB-Firmware zurückkehren musste, um in der Lage zu sein, einen Sketch über die Arduino-IDE zum 328 zu übertragen. Nico Hood entwickelte den Hoodloader, einen speziellen Bootloader für den 16U2, der einen USB-Stack enthält und auch zum „normalen Arduino-Modus“ umschalten kann. Kurz und einfach gesagt, verwandelt der Hoodloader einen originalen Arduino Uno in ein Board mit zwei unabhängigen Mikrocontrollern, die beide mit der gleichen IDE programmiert werden können. Der ATmega328 arbeitet als (normaler) I/O-Mikrocontroller, während der ATmega16U2 die USB-Funktionalität enthält. Beide laufen mit ihren eigenen Sketches mit der einzig möglichen Interaktion über die zweidrahtige UART-Verbindung zwischen ihnen. Das hört sich gut an und leicht, aber ich muss zugeben, dass es mir etwas Kopfzerbrechen bereitet hat, herauszufinden, wie man mit diesem erweiterten Arduino Uno in der Arduino IDE umzugehen hat. Darüber hinaus musste ich eine Art Protokoll implementieren, um die Sketches beider Mikrocontroller miteinander kommunizieren zu lassen. Der Sketch des ATmega328 „hört“ auf einen nRF24L01-Empfänger und sendet einfach ein Byte über die serielle On-Board-Verbindung zum 16U2, wenn ein gültiges Signal von der Wireless-Taste empfangen wird. Der 16U2 seinerseits lauscht an seinem seriellen Eingang und sendet das „Next Track“-USB-Paket zum Computer beziehungsweise zu der Media-Player-Software. Über das Hoodloader-Projekt gibt viel mehr zu erzählen als für diese einfache Anwendung erforderlich. Aber es ist der richtige Einstieg in die Materie. Für weitere Informationen besuchen Sie bitte die Github-Seite [2].
+3V3
USB
ARDUINO ARDUINO UNO UNO
SCL SDA AREF AREF GND GND
NC 13 13 IOREF 12 12 RESET RESET
11 ~ 11 10 ~ 10 ~9
3.3V 3.3V 5V
P GND O W E GND R VIN
AN0 AN1
A AN2 N A L AN3 O G I AN4 N AN5
D I G I T A L ( P W M ~
) )
8 7
~6 ~5
SCK
2
4
6
8
K5
MISO
MOD1
MOSI
nRF24L01+ 1
3
5
7
CSN CE
R1
4
~3
k 1
2 TX TX 11
LED1
C1
RX RX 00 100u 50V
150650 - 12
Bild 2. Ein paar Bauteile auf der ELPB-NG-Experimentierplatine als ArduinoShield.
ist doch viel zu sperrig (wie Bild 3 beweist) und es ist absolut übertrieben, zwei Prozessoren für eine solch simple Anwendung zu nutzen. Der ATmega16U2 ist aber in der Lage, den nRF24L01 im Alleingang und ohne Hilfestellung des ATmega328 zu steuern. Die 16U2-SPI-Pins sind sogar auf einem ISP-Header auf der Arduino-Platine zugänglich und einige zusätzliche I/O-Pins sind mit Lötpads gleich neben diesem Anschluss verbunden. Da der 16U2 die gewünschten Aufgaben (unter Umständen) auch alleine schafft, habe ich eine kleine Platine für den Controller und den nRF24L01 entworfen, die in ein übliches USBStick-Gehäuse passt. Die Schaltung in Bild 4 hat verblüffende Ähnlichkeit mit den entsprechenden Teilen der Arduino-Uno-Schaltung (never change a winning team): die USB-Schnittstelle, der Prozessor mit Oszillator, EMC- (L1), Überstrom- (F1) und ESD-Schutz (D1, D2). Die Stromversorgung wird von der USB-Schnittstelle übernommen, +5 V ist mit UVCC des Controllers ver-
Klein und bescheiden
Der Hardware-Aufwand für den Arduino-basierten Empfänger ist recht gering, wie man in Bild 2 und der Stückliste sehen kann. Auf einer ELPB-NG-Experimentierplatine sind die Steckverbinder und die drei Bauteile in wenigen Minuten bestückt. Nur noch die Sketches von der Elektor-Projektseite [3] herunterladen, per Arduino-IDE auf das Board übertragen und schon ist der Empfänger der Skip!-Taste fertig. Bisher war alles eine schöne Übung, um mit d em Hoodloader zu spielen und USB-HID-Geräte ohne umfangreiche Programmierung zu verwirklichen. Aber Hand aufs Herz, diese Lösung
Bild 3. Der Arduino Uno mit aufgestecktem Shield: funktional, aber sperrig.
www.elektormagazine.de
Juli/August 2016
89
�����
������
R1 27
k 0 1
UCAP
4
32
RESET
PB6 PB5
F1
K1 USB-A
31
IC1
UVCC
500mA
+5V D– D+ GND
1
PB4 PB3/MISO PB2/MOSI
R3 22R
30
D–
PB1/SCLK
2
PB0
3
R4
4
22R
29
ATMEGA16U2 D+
PD7 PD6
5
6
D2
D1
5
PC2
PD5 PD4
26
2x PGB1010604
25 23 22
L1
C2
1u
100n
VCC AVCC PB7
24
C1
�����
PC4
PD3
PC5
PD2
PC6
PD1
PC7
PD0
21 RESET
20 19 18
MOD1
17
2
4
6
8
1
3
5
7
16 15 14
12 11 10 9 8 7 6
R2 R 0 2 2
GND XTAL1 XTAL2 UGND 3 S1
BLM21
C3 22p
1
X1
16MHz
2
28 LED1
C4
C5 10u 16V
22p 150650 - 11
Bild 4. Die Schaltung der USB-Stick-Platine entspricht dem ArduinoOriginal.
bunden. Es ist kein zusätzlicher Spannungsregler erforderlich, da der 16U2 über einen internen 3,3-V-Regler verfügt. Der Ausgang dieses internen Reglers (UCAP) ist mit den VCC- und AVCC-Eingangspins verbunden, außerdem bezieht der nRF24L01
Stückliste USB-Stick-Empfänger Widerstände: R1 = 10 k, 100 mW, 0603 R2 = 220 Ω, 100 mW, 0603 R3,R4 = 22 Ω, 100 mW, 0603
D1,D2 = ESD-Suppressordiode (Littelfuse PGB1010603MR) IC1 = ATmega16U2-AU
Kondensatoren:
F1 = Rücksetzende PTCSicherung 500 mA, 15 V (Bourns MF-MSMF050-2) X1 = Quarz 16 MHz, 5x3,2 mm K1 = USB-A 2.0, gewinkelt (SMD) S1 = optionale Reset-Taste MOD1 = NRF24L01+ 2.4GHz Wireless-Transceiver-Modul (150499-91) USB-Stick-Gehäuse (Strabubox USB1SW) Platine 150650-1 v1.0
C1 = 1 �, 25 V, 0603 C2 = 100 n, 16 V, 0603 C3.C4 = 22 p, 50 V, 0603 (C0G/ NP0) C5 = 10 �, 16 V, 1206 Induktivitäten:
L1 = Ferrit (0,4 Ω, 200 mA, Murata BLM21BD102SN1D) Halbleiter:
LED1 = LED rot, 3 mm
Juli/August 2016
daraus seine 3,3-V-Versorgungsspannung. Beachten Si e den 10-�F-Kondensator C5 an der Stromversorgung des Funkmoduls. Er ist unbedingt notwendig, um einen ordnungsgemäßen Betrieb zu gewährleisten. Mit dem aktuellen Sketch blinkt LED1 dreimal beim Einschalten und zeigt damit an, dass die Applikation läuft, dann jeweils einmal, wenn ein gültiger Skip!-Befehl vom Sender eintrifft. Das ist alles, was wir zur Steuerung des Media-Players benötigen. Die Lösung ist deutlich eleganter als ein nRF24L01 auf einem Prototyping-Shield, aufgesteckt auf einem Arduino-Board. Wenn Sie den Bausatz (siehe Kasten) erwerben, ist die Hoodloader-Firmware schon im ATmega16U2 programmiert. Wir brauchen für eine funktionsfähige Skip!-Taste nur noch ein paar Zeilen Code in einem Arduino-Sketch. Vergessen Sie nicht das ursprüngliche Ziel dieses Projekts: eine große Taste, die nicht übersehen werden kann, um zum nächsten Musiktitel zu springen. Aber der Sketch kann geändert werden, um eine erweiterte Steuerung für den Media-Player zu realisieren. Zum Beispiel um einen anderen Befehl wie Mute oder Pause ausführen, wenn die Taste länger als - sagen wir – eine Sekunde gedrückt wird. Aber machen Sie doch, was Sie wollen! Und wenn Sie mit dem kleinen 16U2-Board ein anderes Wireless-USB-HID-Gerät entwickelt haben, berichten Sie auf elektormagazine.de/labs davon...
Außerdem:
Bild 5. Die kleine Platine des Empfänger-Boards.
90
Bild 6. Der Quarz des Funkmoduls wechselt die Fronten...
13
www.elektormagazine.de
Programmierung des Hoodloaders Wenn Sie das 16U2-Board (Bild 5) von Grund auf neu bauen,
werden Sie wahrscheinlich einen fabrikneuen 16U2-Controller verwenden, der werksseitig schon mit einem Bootloader ausgestattet ist. Diese Firmware erlaubt dem Anwender, mit einem PC-Programmiertool wie Atmel Flip eine eigene Anwendung über den USB-Anschluss zu programmieren. Dann steht man aber vor dem Problem, den Hoodloader im Controller unterbringen zu müssen. Das gleiche Problem taucht auf, wenn es ein wichtiges Update des Hoodloaders gibt oder Sie aus irgendeinem anderen Grund eine neue Firmware auf den Controller spielen wollen. Leider ist es nicht möglich, zur (Neu-)Programmierung der Firmware die USB-Schnittstelle des 16U2 zu verwenden. Dazu ist ein paralleler Programmer mit einer 32-Pin-ZIF-Fassung vonnöten (den Sie wahrscheinlich nicht haben) oder ein AVRISP-artiger Programmer, der viel preiswerter ist und wahrscheinlich in vielen (Heim-)Labors vorhanden ist. Allerdings war auf dem winzigen USB-Stick-Board kein Platz für einen gewöhnlichen sechspoligen AVRISP-Verbinder, diese Aufgabe übernimmt der Empfangsmodul-Anschluss MOD1, auf dem alle notwendigen Signale vorhanden sind mit Ausnahme der RESET-Leitung. Deshalb habe ich einen zusätzlichen Reset-Anschluss direkt neben
�����-�������
�����-�������
Oberseite der 16U2-Platine, so dass der Quarz auf der Oberfläche des Controllerboards liegt. Achten Sie darauf, dass die beiden Platinen parallel ausgerichtet sind und sich so nah beieinander wie möglich befinden, bevor Sie den Verbinder MOD1 anlöten. Verwenden Sie einen kleinen scharfen Seitenschneider, um so viel Material wie möglich von den Pins von MOD1 zu entfernen. Dann setzen Sie die bestückte Leiterplatte in das Strapubox-Gehäuse. Bild 7 zeigt, dass es passt! (150650)
Bild 7. ... damit alles in das USB-Stick-Gehäuse passt.
Weblinks
dem MOD1-Verbinder platziert. Sie können zur Programmierung statt des acht- einen zehnpoligen Verbinder einsetzen, das Board mit einer Experimentierplatine verbinden und von dort die Kabelverbindung zum AVRISP-Programmer aufnehmen. Vergessen Sie nicht, die richtigen Fuse-Einstellungen zu verwenden! Die HoodLoader2-Fuses lauten: low_fuses=0xEF, high_ fuses=0xD8 (booten zum Bootloader), extended_fuses=0xFC (kein HWBE), unlock_bits=0x3F, lock_bits=0x0F. Die Platine ist so gestaltet, dass sie in ein Strapubox-USB1-Gehäuse passt. Der zur Verfügung stehende Raum ist ein wenig beschränkt, so gibt es einige Dinge bei der Platinenmontage zu beachten. Zuerst werden alle Bauteile (außer für das Funkmodul verlötet) und dann - wenn notwendig – die Hoodloader-Firmware programmiert. Dazu müssen Sie einen Stiftverbinder oder einfach nur einige Stifte oder Drähte auf die Platine löten, um einer Verbindung zu einem AVRISP-Programmierer aufnehmen zu können. Denken Sie daran, dass diese Verbindungen nach der Programmierung entfernt werden müssen, um den nRF24L01-Empfänger anzuschließen, Stellen Sie deshalb sicher, dass sie leicht entfernt werden können. Die 5-V-Stromversorgung wird am USB-Anschluss K1 angeschlossen (verwenden Sie einfach den USB-Port Ihres Computers). Programmieren Sie die Firmware, trennen Sie das Programmiergerät, ziehen Sie den USB-Stecker und stecken ihn wieder ein. Wenn alles gut geht, werden Sie nun sehen, dass Windows den richtigen USB -Treiber installiert. Im Geräte-Manager erscheint der Stick als COM-Port mit dem Namen Hoodloader oder so ähnlich. Wenn nicht, überprüfen Sie die Fuse-Einstellungen und programmieren Sie den ATmega16U2 gegebenenfalls neu. Das Board verhält sich jetzt wie ein Arduino Uno (mit dem Hoodloader anstelle des Standard-Bootloaders), aber ohne den ATmega328-Mikrocontroller. Es wird von der Arduino-IDE problemlos erkannt, genau wie die ursprüngliche Version mit dem Arduino Uno. Aber jetzt muss nur ein Sketch programmiert werden: Skip_button_6u2_only.ino (enthalten in Download 150650-11.zip [3]). Dann ziehen Sie wieder den USB-Stecker. Das Board meldet sich selbst als „HID-konformes Gerät“ im Geräte-Manager. Jetzt sind Hoodloader und der Sketch für die Skip!-Taste geladen und laufen. Trennen Sie K1 und entfernen die Verdrahtung, die für den Anschluss des AVRISP-Programmers notwendig waren. Ein Quarz wechselt die Fronten
Nehmen Sie den nRF24L01-Empfänger, löten vorsichtig den (bedrahteten) Quarz von der Oberseite der Platine und bringen ihn auf der Unterseite des Funkmoduls an, wie es in Bild 6 zu sehen ist. Montieren Sie nun die Empfängerplatine auf die
[1] Drahtloses Quiz im RGB-Stil, Elektor Jan./Feb. 2016, www.elektormagazine.de/150499 [2] https://github.com/NicoHood/HoodLoader2 [3] www.elektormagazine.de/150650
Stückliste Sender Widerstände
Außerdem
Alle Kohlefilm, 5%, 0,25 W, 250 V R1 = 10 k R2 = 6k8
Bt1 = Batteriehalter für CR2032 K1 = 2x3-polige Stiftleiste S1 = Taster mit großer Kappe, (Sparkfun rot: COM-09181, grün: COM-11275, blau: COM-11274) Platine, Elektor-Shop 150499-2 v1.0 2x4-polige Stift- und Buchsenleiste, RM 0,1’’ (für MOD1) CR2032 Lithium-Batterie MOD1 = 2,4 GHz WirelessTransceiver-Modul NRF24L01+ (150499-91)
Kondensatoren
C1,C2 = 100 n, 50 V, X7R, RM 5 mm C3 = 100 µ, 50 V, RM 3,5 mm, 8x11 mm Halbleiter
IC1 = ATtiny85-20PU, programmiert, Elektor-Shop 150499-42
Stückliste Arduino-Shield Widerstand: R1 = 1 k Kondensator:
C1 = 100 �, 50 V, Raster 3,5 mm, Durchmesser 8 mm Halbleiter:
LED1 = LED grün, 3 mm Außerdem:
Wireless-Transceiver-Modul (150499-91) K1 = 1x6-polige Stiftleiste, Raster 2,54 mm K,K3 = 1x8-polige Stiftleiste, Raster 2,54 mm K4 = 1x10-polige Stiftleiste, Raster 2,54 mm K5 = 2x4-polige Buchsenleiste, Raster 2,54 mm Platine 150180-1 v1.0 (ELPB-NG)
MOD1 = NRF24L01+ 2.4 GHz
Im Elektor-Shop
Zu diesem Projekt sind folgende Produkte im Elektor-Shop und über die Projekt-Webseite [3] verfügbar • 150650-1 Empfänger-Platine in USB-Stick-Form • 150650-41 Controller Empfänger • 150650-71 Bausatz: Empfänger-Platine in USB-Stick-Form, Platine Sender (aus dem Projekt „Drahtloses Quiz“), alle Bauteile inklusive Funkmodule, Gehäuse • 150180-1 ELPB-NG-Platine zum Bau des ersten Empfänger-Prototypen • 150499-2 Platine Sender (Drahtloses Quiz) • 150499-42 Controller Sender (Drahtloses Quiz) • 150499-91 Funkmodul bestückt
Software: www.elektormagazine.de/150650
www.elektormagazine.de
Juli/August 2016
91
�����
������
�����
Foto-Türspion mit Raspberry Pi Besucher-Check über das Smartphone Von Luc Lemmens (Elektor-Labor)
Unerwarteter Besuch kann herzlich willkommen sein, doch manchmal stehen Menschen vor der Tür, die besser draußen bleiben sollten. Eine Sprechanlage mit Kamera, installiert an der Haustür, hilft angenehme und unangenehme Besucher zu unterscheiden. Doch was nützt Ihnen die Anlage, wenn Sie nicht zu Hause sind? Wie Sie mit den Personen vor der Tür an jedem Ort über Ihr Smartphone kommunizieren können und ihnen, wenn Sie wollen, sogar die Tür öffnen, das beschreiben wir hier.
Die Foto-Türsprechanlage, die wir Ihnen hier vorstellen, haben wir mit einem Raspberry Pi, einem zugehörigen Kamera-Modul und einem im Elektor-Labor entwickelten RPi GSM HAT-Board realisiert. Die Anlage schießt ein Foto von jedem Besucher, der vor Ihrer Tür steht und den Klingelknopf drückt. Das Foto wird in einer MMS auf Ihr Smartphone geschickt, so dass Sie den Besucher in Augenschein nehmen können. Nachdem Sie dies getan haben, können Sie Ihre Türsprechanlage anrufen. Die Anlage reagiert darauf, indem sie Mikrofon und Lautsprecher einschaltet, damit Sie mit dem Besucher sprechen können. Sie können an die Anlage eine SMS mit einem Passwort schicken. Wenn das Passwort korrekt ist und die Mobilfunknummer des SMS-Absenders mit Ihrer hinterlegten Mobilfunknummer übereinstimmt, wird
92
Juli/August 2016
www.elektormagazine.de
der elektrische Türöffner bedient. Unsere Foto-Türsprechanlage erweist nicht nur dann ihren Nutzen, wenn zwischen Ihnen und Ihrer Wohnung weite Distanzen liegen. Auch wenn Sie zu Hause sind, aber vielleicht gerade Körperpflege in der Badewanne betreiben, müssen Sie sich nicht erst bekleiden. Vielleicht möchten Sie für den Besucher, der gerade vor der Tür steht, auch lieber nicht zu Hause sein... Grundlage des Projekts war ursprünglich das GSM Breakout Board [1], auf dem ein GSM-Modul M95 von Quectel verbaut ist. Bei der Entwicklung dieses BoB hatten wir zwar schon das Projekt einer Smartphone-Türsprechanlage angedacht, doch das Board ist für diesen Zweck nicht maßgeschneidert. Deshalb hat das Elektor-Labor ein neues HAT-Board für den Raspberry Pi entworfen, auf dem auch
zusätzliche Hardware für die Sprechanlage ihren Platz hat. Schaltung
Der Schaltungsentwurf stützt sich größtenteils auf das Dokument „M95 Hardware Design“ von Quectel [2]. Die zentrale Komponente der Schaltung in Bild 1 ist das GSM-Modul M95 (MOD1) mit der Antenne (ANT1) und der SIM-Karten-Fassung (SIM1). Die Widerstände R15...R17, das Dioden-Array D7 und die Kondensatoren C19...C22 schützen die SIM-Karten-Leitungen vor ESD-Einflüssen. Für den Mikrofon-Eingang und den Audioverstärker-Ausgang des M95 haben die Kondensatoren C6...C17 und die Dioden D3...D6 vergleichbare Aufgaben. Der Raspberry Pi ist über K5 mit dem UART des GSM-Moduls verbunden, er steuert das Modul über AT-Befehle.
�����-�������
Der Spannungsteiler R6/R7 passt das Signal TxD an das Signalniveau 3,3 V des Raspberry Pi an. Es lag nahe, die Betriebsspannung des GSM-HAT-Boards generell auf 3,3 V zu legen, so dass die Niveau-Anpassung entfällt. Leider ist dies nicht möglich, weil dann ein Problem auftritt: Nach Herstellervorgaben darf die Betriebsspannung des M95 im
�����-�������
Bereich 3,3...4,6 V liegen. Sobald sich die Spannung den Grenzen auf etwa 100 mV nähert, gibt das Modul ungefragt und fortlaufend Warnmeldungen über den UART aus. Dadurch wird das Interpretieren erwünschter Meldungen gestört, außerdem kann das Modul unvermittelt abschalten. Die Betriebsspannung ist deshalb mit dem MIC29302 (IC1) auf 4,4 V
festgelegt, auch wenn dies kein häufig vorkommender logischer Signalpegel ist. Die Dokumentation des M95 gibt keine Auskunft über den Grund, weshalb die Betriebsspannung nach oben auf 4,6 V begrenzt ist. Sobald das GSM-Modul eingeschaltet ist, blinkt eine LED, hier LED2. Die Bezeichnung „netlight“, die Quectel dieser LED
V+
3V3 K5
4V4
V+ 1
EN
IC1
ADJ
IN
5
110k
S1
Bell Button
MIC29302
2
R1
OUT
4 LED1
TAB
GND 3
6
POWER R2
C1
C2
1000u 10V
JP1 1
R3 C3
k 3 4
100n
C4
100n
C5
R 0 7 4
2
3
4
5
6
7
8
9
10
K2 D1
R6 1k5
R4
2
3 k 3
1
TXD
Door Opener
T4
1N4148
EE2-5NU
R10
R7
100R
R5
k 1
RE2
RXD
Raspberry Pi
2 k 2
R11
2N7002
2 k 2
100u 16V
100n
V+
1
R W P
K1 1
DTXD
2
DRXD
3
STAT
4
EMOFF
5
PWR
6
AGND
7
MIC1P
8
MIC1N
9
SPK1N
10
SPK1P
V+ Y E K R W P
C20
T1
R8
PWR
R17
33p
100R
T S R _ 1 M I S
K L C _ 1 M I S
R9
C21
1
C18
Doorbell
1N4148
ANT1
4
5
6
K L C _ M I S
T E S E R _ M I S
D D V _ M I S
PGB1010603
2
33p
R 2 2
2N7002
4V4
K6
RE1
D2
R16
R 2 2 k 7 4
D D V _ 1 M I S
100n
T3 EE2-5NU
R13 100R
C22
2N7002
33p
SIM1
D3 C9
C6
C23
C24
C25
C26
10p
33p
100u 16V
100n
10p
33p
SIM Card Holder A T A D _ M I S
SMA MIC2N MIC1
C10
C7
10p
33p
3
32 33 34
D4 C8
10p
33p
2
PGB1010603 D5
1
C19
PGB1010603
AGND
1
MIC2P
2
MIC2N
3
MIC1P
4
MIC1N
5
AGND
C T T T A A R B B V V V
R 2 2
39
C15
R15 33p
33p
10p
C13
C16
LS1
33p
10p
8Ohm 1W5
LOUDSPKP
RF_ANT SIM1_GND
MIC2P
SIM1_CLK
MIC2N
SIM1_DATA
MIC1P
SIM1_RST
MIC1N
SIM1_VDD
K3
31 30
SIM1_CLK
29
SIM1_DATA
LOUDSPKN
28
SIM1_RST
27
SIM1_VDD
C14
C17
26
RI
33p
10p
25
DCD
24
RTS
23
CTS
D6
MOD1 1
CTS
SPK1N
6
2
RTS
SPK1P
7
3
DCD
LOUDSPKN
8
4
RI
LOUDSPKP
5
VRTC
6
9
PWRKEY
10
EMOFF
11
SIM2_DATA
16
SIM2_CLK
17
SIM2_VDD
18
SPK1N
RI/PCM_RST
SPK1P
DCD/SIM2_RST
LOUDSPKN
RTS
LOUDSPKP
CTS
PWRKEY
TXD
EMERG_OFF
RXD
7
V+
19
K4 7
TXD
6
RXD
5
C12
VRTC
MIC2P C11
D N G
SIM2_VDD
4
SIM2_CLK
3
SIM2_DATA
20
M95 GSM Module
SIM2_DATA
DBG_TXD
SIM2_CLK
DBG_RXD
SIM2_VDD
NETLIGHT
VDD_EXT
STATUS/PCM_SYNC
DTR/SIM1_PRESENCE
PCM_IN PCM_OUT
D D D D D N N N N N G G G G G
35 36 37 38 40
22
TXD
21
RXD
15
DTXD
14
DRXD
PGB1010603
4V4 LED2
13 12
STAT
NET R12
42 D7
41
1
3
4
5
6
k 1
R14 T2
R 0
NETLIGHT
2 2
1
copyright
SMF05CT2G
2N7002 150330 - 11
Bild 1. Das GSM-Modul M95 von Quectel baut selbständig die Mobilfunkverbindung mit dem Smartphone auf.
www.elektormagazine.de
Juli/August 2016
93
�����
������
gab, würde vermuten lassen, dass das Blinken den eingeloggten Zustand in ein Mobilfunknetz signalisiert. Doch das ist beim M95 nicht der Fall. Nach Einschalten der Betriebsspannung befindet sich das Modul im Standby-Modus, ein Impuls auf der Leitung „pwrkey“ schaltet es ein oder aus. Taster S1 ist der herkömmliche Klingeltaster an der Haustür. Hier steuert der Klingeltaster das Relais RE1, das die vorhandene, mit Wechselspannung arbeitende Türklingel schaltet. Wenn Jumper JP1 gesteckt ist (er kann gegen einen Schalter getauscht werden), gelangt der
�����
Ruf zum Raspberry Pi. Der Raspberry Pi löst die Aufnahme des Fotos aus und verschickt das Foto über das GSM-Modul als MMS. Mit JP1 ist diese Hauptfunktion abschaltbar, damit die Klingelanlage auch konventionell ohne kostenpflichtigen MMS-Versand funktionsfähig ist. Das Relais RE2, das den elektrischen Türöffner bedient, wird vom Raspberry Pi über MOSFET T4 gesteuert. Der Türöffner wird aktiviert, wenn der Raspberry Pi eine SMS empfängt, die das korrekte Passwort enthält und die SMS von dem dazu autorisierten Mobiltelefon abgeschickt wurde. Diese Sicherheitsmaßnahmen sind zwar
Stückliste Widerstände: (SMD 0603, 1 %/0,1 W) R1 = 110 k R2 = 43 k R3 = 470 Ω R4,R12 = 1 k R5,R11 = 2k2 R6 = 1k5 R7 = 3k3 R8,R10,R13 = 100 Ω R9 = 47 k R14 = 0 Ω R15,R16,R17 = 22 Ω Kondensatoren: C1 = 1000 �/10 V, SMD stehend C2,C3,C4,C18,C24 = 100 n, X7R, SMD 0805 C5,C23 = 100 �/16 V, SMD 2312 C6,C7,C8,C12,C13,C14,C19,C20,C21,C22,C26 = 33 p, X7R, SMD 0805 C9,C10,C11,C15,C16,C17,C25 = 10 p, X7R, SMD 0805 Halbleiter: D1,D2 = 1N4148, SOD-323 D3,D4,D5,D6 = PGB1010603MR, SMD 0603 D7 = SMF05CT2G, SC-88 LED1,LED2 = LED grün, 50 mcd, 2,1 V @ 20 mA, SMD 0805 T1,T2,T3,T4 = 2N7002, SOT-23 IC1 = MIC29302WU TR, TO-263
Außerdem: Mod1 = GSM-Modul Quectel M95 SIM1 = microSIM-Sockel Molex 78723-1001 ANT1 = SMA-Buchse für Platinenmontage (Molex 73391-0070) + SMA-Antenne, abgewinkelt (RF Solutions ANT-GHEL2R-SMA) K1 = Stiftleiste 10-polig, RM 2,54 mm (optional) K2,K6 = Stiftleiste 2-polig, RM 2,54 mm (optional) K3,K4 = Stiftleiste 7-polig, RM 2,54 mm (optional) K5 = Stiftleiste 2�5-polig, mit langen Pins (Samtec ESQ-105-14-G-D) S1 = Stiftleiste 2-polig, für den Anschluss des Klingeltasters (Schließer) JP1 = Stiftleiste 2-polig, mit Jumper LS1 = Stiftleiste 2-polig, für den Anschluss des Mini-Lautsprechers (8 �/1,5 W) Mic1 = Stiftleiste 2-polig, für den Anschluss des Electret-Mikrofons (ABM-715-RC) RE1,RE2 = Relais für SMT-Montage, DPDT, 2 A, 5 VDC (Kemet EE2-5NU) Raspberry Pi, Version B+, 2 B oder 3 B Raspberry Pi Camera Board (V1.3) Platine leer: 150400-1 oder Platine mit bestückten SMDs: 150400-71
wirksam, höchste Sicherheitsstandards für besonders gefährdete Bereiche werden jedoch nicht erfüllt. Absolut ausschließen lässt sich nicht, dass ein krimineller „Besucher“, der einen Einbruchsdiebstahl im Sinn hat, das Relais auf die eine oder andere Weise manipuliert. Die Verantwortung für das Türöffnen mit der SMS und die daraus entstehenden Folgen liegt immer beim Anwender! Platine In Bild 2 ist die Platine wiedergegeben,
die für dieses Projekt entworfen wurde. Da das GSM-Modul Quectel M95 für SMD-Montage konstruiert ist, haben die übrigen Komponenten ebenfalls SMDBauform. Nur die Kontaktleisten und die Antennenbuchse sind davon ausgenommen. Wie immer kann das Platinenlayout von der Projekt-Webseite [3] heruntergeladen werden, die unbestückte Platine ist im Elektor-Shop erhältlich. Für Leser, die mit der SMD-Montage nicht vertraut sind oder sich diese Mühe ersparen wollen, liefert der Elektor-Shop die Platine mit den bereits montierten Komponenten. Zur Montage in eigner Regie ist anzumerken, dass einige Kontaktleisten nicht immer benötigt werden, die Optionen sind in der Stückliste vermerkt. Der Fuß der Kontaktleiste K5 muss in die Platine gesteckt werden, danach werden die Kontakte, wie Bild 3 zeigt, mit der Platinenoberseite verlötet. Diese Kontaktleiste stellt die Verbindungen zum GPIOPort des Raspberry Pi her. Vor dem Anlöten ist zu prüfen, ob die Stifte von K5 gekürzt werden müssen, damit auf der Unterseite die nötigen Abstände zu den USB-Buchsen des Raspberry Pi gewahrt bleiben. Raspberry Pi vorbereiten
Mit der aktuellen Version des Betriebssystems Raspbian Jessie ist es nicht schwierig, den Raspberry Pi für den beabsichtigten Einsatzzweck vorzubereiten. Laden Sie die neueste Version von der Raspberry Pi Website [4] herunter, nehmen Sie den „Win 32 DiskImager“ oder ein vergleichbares Tool, um das Image auf die SD-Karte zu übertragen. Booten Sie den Raspberry Pi mit der SD-Karte, öffnen Sie ein Terminal-Fenster und ändern Sie die Start-Einstellungen, nachdem Sie das Kommando Bild 2. Die als Raspberry Pi HAT entworfene Platine ist mit SMD-Bauelementen bestückt.
sudo raspi-config
eingegeben haben. Unter Option 6 schal-
94
Juli/August 2016
www.elektormagazine.de
�����-�������
ten Sie die Kamera ein, indem Sie „Enable Camera“ wählen, und unter Option 9, den „Advanced Options“, setzen Sie „A7 Serial“ auf „No“, um den Zugang der Login-Shell über den seriellen Port abzuschalten. Nachdem Sie die Aktion mit „Finish” beendet haben, starten Sie den Raspberry Pi neu. In älteren Versionen von Raspbian ist die Kamera von Hand einzuschalten, und die serielle Konsole muss in den Startdateien deaktiviert werden. Orientierungshilfe für diese Modifikationen geben zahlreiche Beispiele im Web. Eine weitere wichtige Anpassung an ältere Versionen des Betriebssystems betrifft das PythonScript: In Zeile 45 muss das Zeichen „#“ vor „port open“ entfernt werden. Als wir unseren Prototyp nämlich noch einmal mit der neuesten Version von Raspbian getestet haben, erhielten wir die Fehlermeldung „Port already open“, bezogen auf Zeile 45. Offensichtlich ist mit dieser neuesten Version das Kommando „open“ wegen der davorstehenden Zeile entbehrlich. Hardware anschließen
Schließen Sie zuerst die Raspberry Pi Kamera an, das Flachkabel verlegen Sie entlang der Unterseite des auf dem Raspberry Pi montierten HAT-Boards. Vergewissern Sie sich, dass der Abstand zwischen der Board-Unterseite und den USB-Buchsen des Raspberry Pi ausreicht. Dies gilt insbesondere für die Antennenbuchse (ANT1), sie muss möglichst weiten Abstand zur Abschirmung der USB-Buchsen haben. Das Foto in Bild 4 zeigt, wie die Platinen über Abstandsrollen miteinander verschraubt werden. Verbinden Sie vorläufig einen beliebigen Taster mit den Anschlüssen von S1 und stecken Sie Jumper JP1 auf seine Kontakte. Das Mikrofon schließen Sie an MIC1 und den Lautsprecher an LS1 an. Nachdem Sie die Antenne auf die Buchse ANT1 gesteckt haben, fehlt nur noch die microSIM-Karte, die für Fassung SIM1 bestimmt ist. Doch bevor Sie eine microSIM-Karte bei einem Mobilfunk-Anbieter käuflich erwerben, lesen Sie bitte folgenden Abschnitt.
�����-�������
Bild 3. Die Stifte des Steckverbinders K5 (links, oben) werden auf der Platinenoberseite angelötet.
vorhanden sein. Wir empfehlen Ihnen dringend, vor der Entscheidung für einen bestimmten Anbieter die MMS-Tarife (Multimedia Messaging Service) zu vergleichen. Anscheinend hat dieser Dienst so wenige Nutzer, dass einige Anbieter vergessen haben, ihn in ihre Tariflisten aufzunehmen. Nach unseren Recherchen berechnen alle Anbieter für eine MMS einen festen Cent-Betrag, sofern der Anhang, in diesem Fall ein Foto im JPG-Format, das Volumen 300 KB nicht übersteigt. Mit den Einstellungen der Raspberry Pi Kamera, die im Script festgelegt sind, bleibt das Foto weit unter dieser Grenze. Der Grund ist nicht nur eine möglichst kurze Übertragungszeit im Mobilfunknetz, bedacht werden muss auch noch ein anderer Aspekt. Wenn die Zeit zu lang ist, die vom Betätigen des Klingelknopfs bis zum Reagieren der Türsprechanlage vergeht, ist der Besucher möglicherweise inzwischen wieder gegangen. Im Elektor-Labor lagen etwa 20 bis
30 Sekunden zwischen dem Auslösen des Fotos an der Tür und dem Eintreffen der MMS auf dem Smartphone. Hinzu kommt die Reaktionszeit des MMS-Empfängers, die bis zur Annahme der Sprechverbindung vergeht. Die Summe der Zeiten hat zur Konsequenz, dass eilige und ungeduldige Besucher nur bedingt eine Chance haben, die Kommunikation aufzubauen. Python-Script und erster Test
Nach Konfigurieren des Raspberry Pi und Installieren der Python-Bibliotheken sind die Voraussetzungen geschaffen, um das Python-Script auszuführen, das die Türsprechanlage steuert. Das Script ist Teil des Downloads von der Projekt-Webseite [3], es hat den Namen MMSautoSend.py. Bevor der erste Test beginnen kann, muss das Script mit einigen Daten ergänzt werden. Dazu werden an den Raspberry Pi ein Bildschirm, eine Tastatur und eventuell auch eine Maus angeschlossen. Wenn die Daten erst einmal korrekt eingetragen sind, kommt der
SIM-Karte und MMS
Unser Türspion-System kann natürlich nur arbeiten, wenn das GSM-Modul mit einer gültigen SIM-Karte ausgestattet ist. Wenn es sich um eine Prepaid-Karte handelt, muss ein genügend hohes Guthaben
Bild 4. Der Abstand der Platinen muss so bemessen sein, dass Kurzschlüsse zu den Abschirmungen der USB-Buchsen vermieden werden.
www.elektormagazine.de
Juli/August 2016
95
�����
������
�����
Ein Foto des Besuchers auf dem Smartphone, Sie können mit ihm sprechen und sogar die Tür öffnen!
Raspberry Pi ohne dieses Zubehör aus. Im Kopf des Scripts sind diverse Konstanten definiert, die geändert werden müssen: • ThisNumber: Mobilfunknummer der SIM-Karte, die das GSM-Modul nutzt. • ThatNumber: Mobilfunknummer des Smartphones, das die MMS empfangen soll. Damit MMS verschickt werden können, sind weitere Daten nötig, die vom Mobilfunkbetreiber der vom GSM-Modul genutzten SIM-Karte abhängen: • APN: Access Point Name • MMSC: Multimedia Messaging Service Centre • MMSproxy: Multimedia Messaging Service proxy server • MMSport: Multimedia Messaging Service port number Über diese Daten gibt die Website des Mobilfunkbetreibers Auskunft. Im Script sind die MMS-Parameter von zwei niederländischen Mobilfunknetzen eingetragen, die aus dem Elektor-Labor erreichbar waren. Wenn die Daten eingetragen sind, steht dem ersten Test nichts mehr im Weg. Öffnen Sie auf dem Raspberry Pi ein Terminal-Fenster und geben Sie folgendes Kommando ein: sudo su
Das Kommando räumt Ihnen die Rechte ein, die Sie brauchen, um die Python GPIO-Bibliothek zu nutzen und die I/O-Leitungen des Raspberry Pi zu steuern. Anschließend starten Sie das Script mit diesem Kommando: python MMSautoSend.py
Das Script ist weitgehend linear programmiert. Der Raspberry Pi sendet AT-Befehle zum GSM-Modul, zwischengefügte Pausen geben dem GSM-Modul Zeit, die Befehle zu verarbeiten. Am Beginn stehen diverse Konstanten, darunter die Einstel-
lungen der Kamera, der Mikrofon-Empfindlichkeit und der Empfangslautstärke. Diese Parameter müssen später eventuell angepasst werden. Die PIN-Eingabe unserer SIM-Karten haben wir deaktiviert. Wir haben die Karten einzeln in ein Mobiltelefon eingelegt und die PIN-Code-Abfrage auf „Aus“ gesetzt. Das Script enthält vier auskommentierte Zeilen, dort können gegebenenfalls die PIN-Codes für gesicherte SIM-Karten eingetragen werden. Die Zeichen „#“ vor den Zeilen port. write und time.sleep müssen entfernt werden. Das Script verzweigt in eine Endlosschleife, die nur mit CTRL-C abgebrochen werden kann. Im regulären Betrieb prüft der Raspberry Pi fortlaufend, ob der Klingelknopf betätigt wurde oder eine SMS mit dem Kommando eingegangen ist, den Türöffner zu bedienen. Falls eine SMS angekommen ist, wird zuerst die Mobilfunknummer des Absenders geprüft. Nur wenn die Nummer mit der unter „ThatNumber“ hinterlegten Nummer übereinstimmt, wird auch das in der SMS stehende Passwort geprüft. Das Passwort ist in der Konstanten „Very_Secret“ gespeichert. Sind beide Bedingungen erfüllt, zieht für die Dauer einer Sekunde das Relais RE2 an, das den Türöffner einschaltet. Falls nötig, kann im Script eine längere Einschaltdauer vorgegeben werden. Der Empfang einer SMS auf dem Smartphone wird immer vom Einlass begehrenden Besucher ausgelöst. Der Raspberry Pi fotografiert den Besucher, erstellt die MMS mit dem Foto und schickt sie an das Smartphone. Außer dem Foto enthält die MMS auch Text, in dem die Mobilfunknum-
Weblinks
[1] www.elektormagazine.de/labs/gsm-breakout-board-150330 [2] www.quectel.com/UploadImage/Downlad/M95_Hardware_Design_V1.3.pdf [3] www.elektormagazine.de/150400 [4] www.raspberrypi.org/downloads/raspbian/
96
Juli/August 2016
www.elektormagazine.de
mer des absendenden GSM-Moduls als Link steht. Der Link ist dazu gedacht, möglichst schnell die Sprechverbindung mit dem Besucher aufzubauen. Ankommende Anrufe werden vom GSM-Modul der Türsprechanlage selbständig angenommen. Wird das Gespräch vom Smartphone aus beendet, baut auch das GSM-Modul die Verbindung ab. Die Türsprechanlage ist dann wieder im Zustand der Bereitschaft. Installieren
Beim Einbau der Foto-Türsprechanlage an der Haus- oder Wohnungstür muss der Schutz gegen nicht autorisierte Besucher an vorderster Stelle stehen. Eine vergleichsweise sichere Lösung ist die Montage von Klingeltaster, Kamera, Mikrofon und Lautsprecher auf der Außenseite, die übrige Elektronik wird innen im Haus oder in der Wohnung untergebracht. Wenn die räumlichen Voraussetzungen gegeben sind, kann die Kamera die Eingangstür auch durch ein Fenster beobachten. Wie bereits beschrieben, sind im Script einige Parameter der Kamera einstellbar, beispielsweise ist die Helligkeit der Umgebung vom Ort der Montage abhängig. Die Auflösung des Fotos bestimmt die Schärfe, gleichzeitig hat sie Einfluss auf den Umfang der Datei, die über das Mobilfunknetz übertragen werden muss. Die Dateigröße soll möglichst niedrig sein, damit die Übertragungszeiten in zumutbaren Grenzen bleiben. Beim Testen der Einstellungen und Parameter kann der Versand der MMS über das Mobilfunknetz im Script blockiert werden. Das Foto wird dann im Raspberry Pi als „test1.jpg“ gespeichert, so dass sich die Qualität offline beurteilen lässt. (150400)gd
�����-�������
�����-�������
PC-Watchdog Automatischer Reset für durchdrehende PCs Von Willem den Hollander (NL)
Moderne PCs sind durchaus zuverlässig, aber manchmal hängen sie sich doch auf, und nichts geht mehr. Dann hilft nur noch ein sogenannter „hard reset“. Die hier vorgestellte Elektronik erledigt das automatisch. Das ist insbesondere für entfernt platzierte PCs nützlich.
Viele PCs - in besonderem Maße Server - verrichten ohne Aufsicht und oft an an entfernten Orten ihre Arbeit. Von daher wäre es prima, wenn man diese bezüglich Fehlfunktionen überwachen und notfalls neu starten könnte. Die Übertragung der von Mikrocontrollern bekannten Watchdog-Funktion auf PCs ist eigentlich simpel: Man installiert auf dem PC ein kleines Programm, das in regelmäßigen Abständen ein Signal an eine externe Schaltung liefert. Wenn dieses Signal ausbleibt, bemerkt diese Schaltung, dass der PC nicht mehr regulär arbeitet. Sie betätigt dann quasi den Taster für einen Hardware-Reset und der PC bootet neu. Die Schaltung Bild 1 zeigt, dass der Einsatz eines klei-
nen Mikrocontrollers mit eingebautem USB-Interface viel Hardware einspart. Der ausgewählte Typ PIC16F1455 wird vom
PC als HID-Device bzw. Eingabegerät erkannt. Die Elektronik wird direkt via USB versorgt. Wenn der PC ordnungsgemäß läuft, erhält der Mikrocontroller in regelmäßigen Abständen ein Signal via USB. Während des normalen Betriebs des PCs lässt der Mikrocontroller die zweifarbige LED grün blinken. Falls der PC aber hängt, und die Software folglich keine Signale mehr senden kann, erzeugt die Elektronik einen Reset und LED1 leuchtet rot. Während des anschließenden Bootens leuchtet LED1 durchgehend grün. Wenn der Boot-Vorgang abgeschlossen ist und die Software wieder Signale sendet, blinkt LED1 wieder grün. Normalerweise wird der Reset-Eingang eines PCs mit einem Taster auf Masse gezogen. Bei den meisten PCs hat die USB-Masse das gleiche Potential wie die Masse für den Reset-Taster, und dann genügt das Verlegen einer einzigen Leitung für den Reset. Der Mikrocontroller zieht dann den Reset-Pin über T1 und den Schutzwiderstand R4 auf Masse. Falls die Masse-Potentiale unklar sind,
kann man auch die Variante mit dem kleinen Reed-Relais verwenden. An K3 liegt ein potentialfreier Kontakt, den man einfach zum Reset-Taster des PCs parallelschalten kann. Bei Verwendung des Relais ist die Polung der beiden Anschlüsse dank der Isolation egal. Ein kleiner Klecks Lötzinn auf JP1 aktiviert das Relais. Wenn es aktiv ist, sollte man den Ausgang K4 nicht mehr benutzen. Das Relais könnte man natürlich auch für andere Zwecke verwenden, doch sollte man dabei die maximale Last beachten: Es verträgt nicht mehr als max. 170 V und 0,5 A (Gleichstrom und Spitzenwert des Wechselstroms). Es eignet sich also definitiv nicht für den Betrieb am 230-V-Netz! MCU-Firmware
Die meisten Mikroprozessoren haben schon eine Watchdog-Funktion implementiert. Dabei zählt ein interner Zähler herunter; er wird entweder von einem extra Takt oder vom MCU-Takt getriggert. Falls der Zähler 0 erreicht, wird ein Reset ausgelöst. Normalerweise wird das durch einen regelmäßig in der Sof tware der MCU ausgeführten Befehl verhindert, denn diese Instruktion setzt den Watch-
www.elektormagazine.de
Juli/August 2016
97
�����
������
�����
+5V R3 47R R1 C1
IC1
1
k 0 1
VDD
100n
RA5
K1 USB-A
RA4 MCLR/VPP/RA3 1
5
RC5
2
12
3
13
4
11
D-/RA1
RC4
D+/RA0
RC3
VUSB3V3
RC2
ICSPCLK/RC1
6 C2 470n
D1
ICSPDAT/RC0
K3
RE1
TS4148 RY
2 3 4 5
JP1 R2 1k
6
R4
7
22R
LED1
8 9
K4
T1
RESET
10
2N7002
VSS
PIC16F1455 14
+5V K2
copyright
140344 - 11
ICSP
Bild 1. Schaltplan des Projekts. Ein PIC16F1455-Mikrocontroller mit integrierter USB-Schnittstelle spart eine Menge Bauteile ein.
a
b
den Hund auslösen kann, bringt ein Fenster mit den Einstellungen (Bild 3) zum Vorschein. Hier können unterschiedliche Verzögerungszeiten eingestellt werden, die dann in der MCU der externen Hardware gespeichert werden. Die Option Delay after reset legt die Anzahl an Sekunden fest, nach der ohne Signal vom PC ein Reset ausgelöst wird. Mögliche Werte sind 10...255 s. Wenn hier eine 0 eingegeben wird, löst die Schaltung keinen Reset mehr aus, und das erste Signal vom PC versetzt die Elektronik wieder in den Normalbetrieb. Der PC schickt das Signal via USB an die Watchdog-Elektronik. Mit der Option Transmitter interval legt man die Sende-Intervalle fest. Dieser Wert sollte unter dem für den Empfänger (Receiver interval ) liegen. Der Schaltfläche Update speichert die neuen Werte in der MCU. Die Option Standby hat die gleiche Funktion wie zuvor beschrieben. Ein Klick auf Close schließt das Fenster. Das Programm selbst kann durch Klick auf das rote Kreuz rechts oben beendet werden. Wenn für die in Receiver interval angegebene Zeit nach dem letzten Signal vom PC kein neues kommt, wird über T1 bzw. RE1 ein Reset ausgelöst. Aufbau
c
d
Bild 2. Das Icon mit dem kleinen schwarzen Hund in der Windows-Taskleiste signalisiert den Status der Watchdog-Software.
dog-Zähler immer rechtzeitig zurück. Die für diese Schaltung nötige PIC-Firmware steht unter [1] zum kostenlosen Download zur Verfügung. PC-Software
Unbedingt erforderlich ist auch ein PC-Programm, das sofort nach dem
Bild 3. Die Verzögerungszeiten können individuell eingestellt werden.
98
Juli/August 2016
www.elektormagazine.de
Abschluss des Boot-Vorgangs auf dem PC starten muss. Hierzu platziert man das Programm oder ein Alias davon im Autostart-Bereich. Dies passiert bei der normalen Installation des von uns bereitgestellten Programms automatisch. Wenn das Programm läuft und die externe Schaltung angeschlossen ist, erscheint ein Icon mit einem kleinen Hund in der Taskbar (siehe Bild 2a). Andernfalls sieht das Icon aus wie in Bild 2d. Ein Rechtsklick auf den kleinen Hund zeigt mehrere Optionen (Bild 2b). Die Auswahl von Standby versetzt die externe Hardware in den Standby-Modus (Bild 2c), sodass bei fehlendem Signal kein Reset ausgelöst wird. Mit Activate gelangt man wieder in den Normalbetrieb. Die Funktion Open, die man auch durch einen Doppelklick auf
Ursprünglich war die Schaltung für den Anschluss an den PC mit einem MiniUSB-Kabel ausgelegt. Da die Schaltung aber sowieso auch mit dem Reset-Anschluss des PCs Verbindung aufnehmen muss, wurde eine Platine entwickelt, die direkt in einen freien USB-Port auf der Rückseite des PCs gesteckt werden kann. Dadurch kann die Leitung zum Anschluss des Reset-Tasters (oder des Motherboard-Headers) kurz ausfallen, und es hängt nicht noch ein Kabel hinten am PC herum. Die Platine passt in ein kleines USB-Gehäuse, das aussieht wie ein größerer USB-Stick (siehe Stückliste). Einer der beiden Ausgänge K3 oder K4 muss zusätzlich parallel zum Reset-Taster des PCs angeschlossen werden. Der einfachste Weg ist sicherlich, einfach die Litzen zum Taster anzuzapfen. Das Relais ist nicht so einfach zu verlöten. Gut geht es mit Heißluft oder wenn man die Platine sowieso in einen Lötofen steckt. Alle anderen Bauteile außer dem Relais sind aber gut von Hand zu verlöten. Die Platine von Bild 4 ist im Elektor-Shop unter der Nummer 140344-1 erhältlich [2].
�����-�������
Setzt man kein Relais ein, können die Bauteile D1, R3 und K3 entfallen. Falls für K3 oder K4 eine Stiftleiste bestückt wird, sollte man diese auf maximal 5,5 mm über der Platine kürzen, da sonst die Platine nicht mehr in das vorgesehene Gehäuse passt. Die Lötpads für K3 und K4 sind groß genug, um direkt Litzen anzulöten. Wo diese Litze(n) das Gehäuse verlassen, ist freigestellt. Der ICSP-Header K2 wird zur Programmierung der MCU verwendet. Er eignet sich z.B. für das PICkit 2 – falls hier die MCU nicht erkannt wird, sollte ein Update durchgeführt werden. Der horizontale Header K2 ist so ausgelegt, dass die Platine mitsamt Header exakt in das vorgesehene Gehäuse passt. Testlauf
Im ersten Testlauf bestand die Watchdog-Elektronik darauf, den PC nur wenige Sekunden nach Erscheinen des Windows-Logos in einer Endlosschleife zu resetten. Die Schaltung wurde an einem ausrangierten PC unter Windows XP getestet (!). Bei einem harten Reset können Dateien fehlerhaft werden (und scan disk läuft dann nach dem Booten). Selbst im Elektor-Labor wollten wir so etwas keinem PC antun. Mit Änderung der Einstellungen auf 0, 25 und 10 verschwand das zyklische Booten. Bei noch langsameren Systemen sollte der Unterschied der Intervalle von Empfänger und Sender noch größer ausfallen. Doch selbst bei modernen PCs kann Software das Watchdog-Programm am rechtzeitigen Absetzen seines Signals hindern. Hier hilft nur Ausprobieren.
�����-�������
Stückliste Widerstände: Standard: SMD 0805, 5 % R1 = 10 k R2 = 1 k R3 = 47 Ω R4 = 22 Ω, 0,5 W, SMD 1206
Platine 140344-1 v1.1
Kondensatoren: C1 = 100 n / 50 V, X7R, SMD 0805 C2 = 470 n / 50 V, X7R, SMD 0805 Halbleiter: LED1 = zweifarbig (rot/grün), SMLLX1210IGC-TR, 160°, SMD 2,7x2 mm D1 = TS4148 RY, SMD 0805 T1 = 2N7002, SMD SOT-23 IC1 = PIC16F1455, SMD SOIC-14 Außerdem: K1 = USB-Stecker, 2.0 Type A, abgewinkelt, SMD (2410 07, Lumberg) K2 = 5x1-pol. Stiftleiste, horizontal (4103323-1, TE-Connectivity) K3,K4 = 2x1-pol. Stiftleiste, vertikal (nur einer von beiden oder keiner, siehe Text) RE1 = 1-pol. Reed-Relais, Schließer, CRR03-1A (Standex Meder), 3 V / 70 Ω, 170 V / 0,5 A Gehäuse = Strapubox USB 1, transparent, 56x20x12 mm (Conrad 531276)
Wie testet man so eine Schaltung? Ganz einfach: Man lasse seinen PC abstürzen! Im Labor versuchten wir das mit einer Batch-Datei, die endlos unendlich viele Befehls-Fenster öffnete. Doch das funktionierte nicht. Also suchten wir und wurden im Internet fündig: Das Programm StartBlueScreen [3] hält, was es verspricht: Es erzeugt zuverlässig den sonst gefürchteten BSOD (Blue Screen of Death). Damit es einen BSOD erzeugen kann, muss dieses fiese Stück Software noch mit fünf Parametern gefüttert werden.
Bild 4. Die kleine Platine passt in ein Gehäuse, das aussieht wie ein großer USB-Stick.
Hierzu erstellt man eine Batch-Datei mit der Zeile: StartBlueScreen.exe 0x12 0 0 0 0
Das crasht prima! Der „blue screen“ kommt und kurze Zeit später (abhängig von der Position des BSOD im Intervall) wird von der Elektronik ein Reset generiert. Die PC-Software wurde mit Delphi XE4 geschrieben. Der Sourcecode der Software für den PC und die MCU stehen auf der Elektor-Webseite zu diesem Artikel [1] zum kostenlosen Download zur Verfügung. Um die Software auf dem PC zu installieren, muss man lediglich die Datei Watchdog setup.exe ausführen. (140344)
Weblinks
[1] www.elektormagazine.de/140344 [2] www.elektor.de [3] http://nirsoft.net/utils/start_blue_ screen.html
Bild 5. Beim Test dieser Schaltung ist der BSOD a usnahmsweise einmal hilfreich.
www.elektormagazine.de
Juli/August 2016
99
�����
������
�����
My Tiny Radio Ein Radio - drei Plattformen Entwurf: Gerd Detlef Ritter, Niek Laskarzewski und Roy Aarts Text: Rolf Gerstendorf
Mit einem winzigen UKW-Empfangsmodul lässt sich ein Mini-Radio aufbauen, das von einem ATtiny- oder – komfortabler – von einem ATmega-Mikrocontroller gesteuert wird.
Manchmal erreicht uns wahrlich spannende Elektronik aus dem Reich der Mitte. Ein Spezialist für all die kleinen Dinge, die unser Entwicklerherz begehrt, ist die Firma Seeed Studio [1], die ihren Sitz im chinesischen Silicon Valley, in Shenzhen in der Provinz Guangdong hat, die nördlich an Hongkong grenzt. Schon der erste Blick auf die Website der Firma zeigt, dass wir hier goldrichtig sind: Es geht um Raspberry Pi, Arduino, BeagleBone, Shields, IoT, ARMmbed, Wearables et cetera et cetera.
Unser Leser Gerd Detlef Ritter hat unter dem Button „Grove“ einen FM-Empfänger mit I2C-Schnittstelle entdeckt und war von seiner Winzigkeit beeindruckt. Das kleine UKW-Empfangsmodul, dessen Funktionen sich vollständig über I2C steuern lassen, empfängt im Frequenzband von 50...115 MHz, unterstützt RDS (und das amerikanische Pendant RBDS) und ermöglicht den direkten Anschluss eines Kopfhörers. Es arbeitet mit einer Versorgungsspannung von 3,3...5 V und verbraucht dabei so wenig Strom, dass es
Eigenschaften • • • • • • • •
100
UKW-Empfangsbereich 50...115 MHz Single-Chip-Stereo-FM-Tuner mit I 2C-Schnittstelle Kompaktes Break-out-Board RDS-Unterstützung Automatischer Sendersuchlauf Anschluss für >32-Ω-Kopfhörer Betriebsspannung 3,3...5 V, Stromaufnahme <100 mA Steuerung mit ATtiny, ATmega oder Arduino
Juli/August 2016
www.elektormagazine.de
gut mit Batterien betrieben werden kann (vor allem, wenn auch ein stromsparender Controller zur Steuerung eingesetzt wird). Seeed Studio bietet seine Produkte nicht als Blackboxes an, sondern legt Soft- und Hardware (inklusive Eagle-Platinenlayout) offen und unterstützt so die Entwicklung eigener Projekte. Kein Wunder, dass Herr Ritter das Modul sofort an seinen Arduino Uno anschloss und mit dem leicht geänderten Beispielcode dem Modul zuallererst den berühmten Queen-Song „Radio GaGa“ entlockte. Ein vollständig integrierter FM-Tuner
Das Modul basiert auf dem integrierten FM-Stereo-Tuner RDA5807M der Firma RDA Microelectronics aus Shanghai. Das Datenblatt [2] zeigt (auch wenn ein dickes pinkes „Confidential“ über den Seiten prangt), das Innere des ICs (Bild 1). Der Beschreibung kann man die Funktionen entnehmen:
�����-�������
Der Empfänger besitzt einen Abstimmbereich von 50 MHz bis 115 MHz und ist damit für den UKW-Empfang in aller Herren Länder geeignet. Er enthält einen Low-Noise-Verstärker (LNA), eine programmierbare VerstärkungssteueVerstärkungssteuerung (PGA), AD- und DA-Wandler mit hoher Auflösung und dazwischen einen Audio-DSP. Der mit 32,768 kHz als Referenz getakgetaktete Synthesizer generiert das lokale Oszillatorsignal (VCO) für den Mischer. Der mehrphasige Mischer unterdrückt wirkungsvoll die Spiegelempfangsfrequenz. Spiegelempfangsfrequenz. Ein Limiter verhindert Überlastungen und begrenzt Intermodulationsprodukte starker benachbarter Kanäle. Der DSP-Kern sorgt für Kanalauswahl (im Register CHAN), FM-Demodulation, Stereo-MPX-Dekodierung Stereo-MPX-Dekodierung und extrahiert ein digitales Audio-Ausgangssignal. Der MPX-Decoder kann automatisch von Stereo auf Mono umschalten, um Ausgangsrauschen zu begrenzen. Das digitale Stereo-Audiosignal wird von zwei DA-Wandlern DA-Wandlern in eine analoge Form gebracht und über die Anschlüsse LOUT und ROUT ausgegeben, an die unmittelbar ein Kopfhörer (>32 Ω) angeschlossen werden kann. Die DA-Wandler stellen die Lautstärke ein und filtern die Signale mit einer Tiefpass-Eckfrequenz von 30 kHz. Im RDA5807M ist ein Low-drop-Spannungsregler integriert, der für die Stromversorgung des Chips zuständig ist. Der Versorgungsspannungsbereich beträgt 2,7...3,3 V. Der Chip besitzt eine Auto-Reset-Funktion beim Einschalten und einen Soft-Reset über den I2C-Bus.
�����-�������
I PGA
L DAC
I ADC Audio DSP Core
FMIN
2
LNA
Q
Limiter
PGA
Q ADC
digital filter MPX decoder stereo/mono audio
RCLK
VDD
2.7-3.3V
7
Synthesizer
ROUT
R DAC
9
Interface Bus
4
RDS /RBDS
32.768kHz
6
LOUT
10
VCO
RSSI
LDO
RDA5807M
SCLK
MCU
SDIO
5
Bild 1. Innenleben des integrierten FM-Tuners FM-Tuners (Quelle: RDA Microelectronics).
Antenna
Level Shifter SCL
FM Tuner
SDA
Headphones
+5V GND
Voltage Regulator
Bild 2. Die Blockschaltung des FM-Moduls um den integrierten FM-Tuner. FM-Tuner.
FM-Modul als Break-out-Board Break-out-Board
Auf der kleinen Platine des FM-Empfangsmoduls, die wenig mehr als al s ein Break-outBoard des RDA5807M ist, befindet sich, wie in der Blockschaltung des Moduls in Bild 2 zu sehen, neben dem RDA5807M ein Vierfach-Pfostenverbinder. Die Belegung ist bei allen Grove-Erweiterungsboards für die I2C-Schnittstelle gleich: Masse an Pin 1, Plus an Pin 2, SDA an Pin 3 und SCL an Pin 4. Die Versorgungsspannung wird von einem Festspannungsregler auf 2,8 V stabilisiert. Der Festspannungsregler im Chip verträgt nur Eingangsspannungen von 2,7...3,3 V. Durch den externen Regler können auch +5-V-Controllersysteme +5-V-Controllersysteme problemlos angeschlossen werden. Natürlich werden auch 5-V-I2C-Signale auf der Modulplatine durch eine Pegelwandlerstufe auf 2,8 V
angepasst. Die Kopfhörer-Buchse ist über Koppelkondensatoren und UKW-Dämpfungsinduktivitäten (L1, L3) angeschlossen, ganz wie es die Datenblattapplikation vorschlägt. An Pin RCLK des ICs befindet sich der Quarz samt Lastkondensatoren, der Antennenanschluss ist auf ein Lötpad herausgeführt. Von Arduino nach Tiny nach Mega
Zum ersten Ausprobieren war der Arduino schön und gut, aber die „riesige“ Arduino-Uno-Platine ist wenig für den mobilen Betrieb geeignet. Was also tun; ein kleineres Arduino-Board verwenden? Ja,
das wäre möglich, aber auch teuer und viel Strom wird obendrein verbraucht! Zum Tiny-Radiomodul passt doch prima ein kleiner ATtiny85-Mikrocontroller. Er kostet beinahe nichts, steckt in einem handhabbaren DIL8-Gehäuse und verfügt auch über ein I2C-Interface (oder besser gesagt, ein Universal Serial Interface USI, das als I2C genutzt werden kann). Darüber hinaus sind noch zwei I/O-Portpins für zwei Taster frei, die zur I2C-Registereinstellung (Up/Down) genutzt werden können. Am ADC-Eingang PB3 lässt sich ein Lautstärkepoti anschließen. Und ausreichend Flash-Speicher (8 k) für den Code hat der Kleine auch! Die wenigen (Durchsteck-)Bauteile, die
www.elektormagazine.de
Juli/August 2016
101
�����
������
�����
+5V
R1
R2
7 k 4
7 k 4
IC1
K1 e l u d o M o i d a R
8 VCC
5
4
PB0(MOSI)
7
2
P1
6
PB1(MISO)
3
PB2(SCK/ADC1) 2
PB3(ADC)
1
100k
3
PB4(ADC2) 1
PB5(RESET) S1
GND 4
S2
TINY85-20 150587 - 12
Bild 3. Ein Nichts an Elektronik! Neben dem achtbeinigen Controller gibt es nur zwei PullupWiderstände und das „Frontend“, bestehend aus zwei Tastern und einem Trimmpoti.
Stückliste für ATtiny-Version Widerstände: R1,R2 = 4k7 P1 = Trimmpoti 100 k Halbleiter:
IC1 = ATTINY85-20PU Außerdem:
S1,S2 = Taster (6x6 mm) K1 = 1x4-polige Buchsenleiste, RM 2 mm IC1 = IC-Fassung DIP8 I2C-FM-Radiomodul (Seeed Studio) Halterung für 3 AAA-Batterien
Bild 4. Fast mikroskopisch: Die Controllerplatine mit dem ATtiny ist ja noc h kleiner als das FM-Modul!
LCD1
LC DISPLAY 2 x 8 0 1 2 3 4 5 6 7 S D E W B B B B B B B B S D E S / V V V R R E D D D D D D D D A
+5V
1
2
3
4
5
6
7
8
9
C
10 11 12 13 14 15 16
R1 k 0 1
1
K1 e l u d o M o i d a R
4
28
3
27
7
AVCC
VCC
PC6(RESET)
PD0(RXC)
PC5(ADC5/SCL)
PD1(TXD)
PC4(ADC4/SDA)
2 1
4 5
26 R3
R2
k 0 1
k 0 1
25 24 23
SW1
P1
20
PD4(XCK/T0) PD5(T1)
IC1 PD2(INT0)
PD6(AIN0)
PD3(INT1)
PD7(AIN1)
ATMEGA328P PC3(ADC3)
PB0(ICP)
PC2(ADC2)
PB1(OC1A)
PC1(ADC1)
PB3(MOSI/OC2)
PC0(ADC0)
PB4(MISO) PB5(SCK)
16 21
C2
C1
100n
100n
PB2(SS/OC1B)
PB6(XTAL1)
AREF
PB7(XTAL2) GND
GND
8
22
2 3
10k
6 11 12 13
14 15 17 18
IC2
19
10
K2 1N4001 C3
C4
330n
10n
Rotary Encoder
Bild 5. Schaltung der großen ATmega-Ausführung ATmega-Ausführung mit Drehenkoder und LC-Display. LC-Display.
102
Juli/August 2016
www.elektormagazine.de
+5V
78L05
D1
9
150587 - 11
die Schaltung in Bild 3 zeigt, lassen sich schön auf einem winzigen Stück Lochrasterplatine aufbauen, das man huckepack auf das Radiomodul stecken kann. Bild 4 beweist, dass der Aufbau der Schaltung tatsächlich eine Sache von wenigen Minuten ist. Eine besondere Antenne ist nicht notwendig, weil der Kopfhörer als Antenne fungiert. Das portable „Tiny Radio“ erblickt das Licht der Elektronik-Welt! Versorgen kann man es mit einer 3-V-Batterie oder einer kleinen Solarzelle. Der Strombedarf liegt bei maximal 100 mA. Schön klein, das Tiny Radio, aber zugegebenermaßen auch recht puristisch und wenig bedienerfreundlich. Ein kleines LC-Display (mit 2x8 Zeichen) wäre doch recht informativ beim Programmieren des Radios. Und für die Bedienung könnte ein Drehenkoder (statt Taster und Poti) eingesetzt werden. Dies überfordert aber den ATtiny85 in punkto I/O und Speicherplatz. Im Elektor-Labor haben sich daher zwei unserer Praktikanten darangemacht, den kleinen Tiny-Controller durch einen ATmega328 ATmega328 zu ersetzen, der mit deutlich deutli ch mehr I/O-Anschlüssen ausgestattet ist. Doch keine Bange, auch dieser Controller ist in einem klassischen DIP28-Gehäuse erhältlich. Zu dem Controller gesellt sich in der Schaltung (Bild 5) neben dem obligatorischen Grove-Interface (K1), dem Display (mit P1 zur z ur Kontrasteinstellung)
�����-�������
und dem Drehenkoder mit Schalter (samt den erforderlichen Bauteilen zur Entprellung) eine Niederspannungsbuchse (K2), gefolgt vom 5-V-Festspannungsregler IC2 und den Entkopplungskondensatoren C3 und C4. Die Diode D1 soll verhindern, dass eine an K2 verpolt angelegte Spannung Schaden in der Schaltung anrichtet. Auch bei dieser „Luxus“-Version des Tiny Radios kommt eine Lochrasterplatine zum Einsatz, allerdings keine gewöhnliche, sondern die New-generation-Version New-generation-Version ELPB-NG aus dem Hause Elektor. Wie sie in Bild 6 sehen können, macht sie einen viel aufgeräumteren Eindruck, als dies bei einer traditionellen Lochrasterplatine zu erwarten wäre. Das FM-Modul wird kopfüber auf die Buchsenleiste K1 gesteckt. Rechts neben dem Modul befindet sich die Stromversorgung, darüber der Drehenkoder. Das Kontrast-Trimmpoti Kontrast-Trimmpoti für das LC-Display ist links zu erkennen, der ATmega328P lugt dazwischen unter dem Display hervor. Bild 7 macht deutlich, wo die Bauteile und die Lötbrücken platziert sind. Die Lötund anderen mechanischen Arbeiten sind tatsächlich ein Klacks! Beim Einschalten des Radios wird der aktuelle Sender wiedergegeben. Der Sender lässt sich durch Drehen am Drehenkoder verändern. Drückt man auf den Taster des Enkoders, so erscheinen Menüs im Display, in denen man mit dem Drehenkoder die Lautstärke einstellen oder stummschalten sowie einen Sendersuchlauf starten kann. Beim Sendersuchlauf findet das FM-Modul den ersten starken Sender in der (Frequenz-)Richtung, (Frequenz-)Richtung, in der der Enkoder gedreht wurde. Die Einstellungen und die Senderwahl werden im EEPROM des Controllers gespeichert und beim nächsten Einschalten des Radios wieder geladen.
�����-�������
Stückliste für ATmega-Version Widerstände: R1...R3 = 10 k P1 = Trimmpoti 10 k Kondensatoren: C1,C2 = 100 n, RM 2,5 mm C3 = 330 n, RM 7,5 mm C4 = 10 n, RM 2,54 mm Halbleiter: D1 = 1N4001 IC1 = ATMEGA328P-PDIP IC2 = 78L05
Außerdem: Außerdem: K1 = 1x4-polige Buchsenleiste, RM 2 mm LCD1 = LC-Display (2x8) mit 2x8-poliger Buchsenleiste, RM 2,54 mm IC1 = IC-Fassung DIP28-narrow SW1 = Drehenkoder (Alps EC12E2424407) K2 = Niederspannungsbuchse 2,5 mm (Lumberg NEB21R) I2C-FM-Radiomodul (Seeed Studio) Lochrasterplatine ELPB-NG (Elektor-Shop 150180-1)
Software für Arduino, Tiny und Mega
Über eines haben wir noch gar nicht gesprochen, nämlich über die Software. Wenn Sie keine Lust haben, sich mit der Software auseinanderzusetzen, können Sie beide Controller fertig programmiert
Bild 6. Die Luxusausführung: Das FM-Modul wird kopfüber auf die ELPB-NG gesteckt, links oben befindet sich der Drehenkoder. Drehenkoder.
Bild 7. Bestückung und Verdrahtung der ELPB-NG im Überblick.
www.elektormagazine.de
Juli/August 2016
103
�����
������
zusammen mit anderem Material im Elektor-Shop erstehen (siehe Kasten) und sich das Video [6] ansehen, in dem Clemens Valens, Technischer Manager im Elektor-Labor, die Anwendung beider Controllersteuerungen erläutert. Interessanter ist natürlich die Auseinandersetzung mit der Demosoftware, die Seeed Studio bei Github [3] zur Verfügung stellt. Sie geht wie das ATtiny-Radio von einem Poti zur Lautstärkeeinstellung und zwei Tastern zur Sendereinstellung aus, ist aber auf die Arduino-IDE zugeschnitten und muss für „unsere“ Atmel-Controller angepasst werden. Der Kern jedoch bleibt weitgehend gleich, egal, welchen Controller man zur Steuerung des FM-Moduls verwendet. Für die Kommunikation mit dem Radio-IC wird in der Demo die Bibliothek Wire.h eingesetzt. Der ATtiny85 besitzt aber, wie erwähnt, keine „echte“ I2C-Schnittstelle, sondern ein USI. Deshalb funktioniert die Wire-Bibliothek hier nicht. Auf dem Arduino-Playground finden sich glücklicherweise Codeschnipsel [4] für eine I2C-Schnittstelle am ATtiny85. Im Vergleich zum Demo-Code müssen neben der neuen Bibliothek natürlich auch die Portpins geändert werden. Ansonsten lassen sich wenige Unterschiede zwischen der ATtiny- (unter [5]) und der Arduino-Software [1] ausmachen. Jetzt aber zur Software für den ATmega! Wenn Sie den folgenden Erläuterungen folgen wollen, laden Sie am besten die „große“ Softwareversion von der Projektseite [5] herunter; der Sourcecode ist ausführlich kommentiert. Bei der ATmega-Software kann zwar wieder die Wire-Bibliothek genutzt werden, allerdings muss zusätzlich LiquidCrystal.h für das LCD eingebunden werden. Nach der Definition und Initialisierung der Variablen für das FM-Modul (minimale Signalstärke, Frequenzstufe für den Sendersuchlauf, BassBoost, Mono/Stereo...) werden auch etliche Variablen für die verschiedenen LCD-Menüs und für die
104
Juli/August 2016
www.elektormagazine.de
�����
Steuerung durch den Drehenkoder (und dessen Taste) eingeführt und initialisiert. Nach den ganzen Einbindungen, Definitionen und Initialisierungen folgt eine Reihe von Funktionen. Im Setup werden die Drehenkoder-Pins definiert, das LC-Display gestartet und die Einstellungen zum FM-Tuner geschrieben. In der Loop-Funktion werden die Frequenz auf dem Display dargestellt, die Drehenkodertaste abgetastet und das Volume-Menü gestartet beziehungsweise die Autoscanund Mute-Bits in der Settings-Variablen in das EEPROM geschrieben. Bei aktivem Autoscan wird nach einem anderen Sender gesucht.
lung ändert. Die letzte Funktion löscht das LCD, indem sie acht Leerzeichen auf das Display schreibt. Die Funktionen setVolume und fmSeek beider Softwareversionen unterscheiden sich wegen des Drehenkoders und des LCDs geringfügig. Auf die beiden Funktionen showRadioStation und showSignalStrength folgen (nach // FM functions) die Funktionen für den Betrieb des FM-Moduls, die die Demo von Seeed Studio bereitstellt. In diesem Demo-Teil werden nur die grundlegenden Register im RDA5807P gelesen und beschrieben. Das Datenblatt enthüllt weitere Funktionen in den I2C-Registern.
Zwei weitere Funktionen für das Hauptmenü und das Volume-Menü folgen, dann schließt der „Vorspann“ des Programms mit einer Interrupt-Service-Routine ab, die das Drehen am Drehenkoder und die Drehrichtung erfasst, und, je nach aktivem Menü, die Senderfrequenz, die Cursorposition oder die Lautstärkeeinstel-
Mit etwas zusätzlichem Softwareaufwand (Platz im Programmspeicher des ATmega ist ausreichend vorhanden) könnten zum Beispiel RDS-Mitteilungen auf das LC-Display gezaubert werden. (150587)
Weblinks
[1] Grove I2C-FM-Modul: www.seeedstudio.com/depot/ [2] Vertrauliches Datenblatt RDA5807M: www.seeedstudio.com/wiki/ File:RDA5807M_datasheet_v1.1.pdf [3] Demosoftware für Arduino: https://github.com/Seeed-Studio/I2C_FM_Receiver [4] Codeschnipsel für I2C/USI beim ATtiny85: http://playground.arduino.cc/Code/ USIi2c [5] Elektor-Projektseite: www.elektormagazine.de/150578 [6] Tiny Radio im Video: https://youtu.be/c2T2jd9OFVg Im Elektor-Shop
Auf der Projekt-Webseite und im Elektor-Shop sind zu diesem Projekt folgende Produkte erhältlich: • 150587-11: Software • 150587-41: programmierter Controller ATmega • 150587-42: programmierter Controller ATtiny • 150180-1: Experimentierplatine ELPB-NG • 150587-71: Kit aus Experimentierplatine, programmiertem ATmega und Radio-Modul
�����-�������
�����-�������
MAXQ rettet Philips PM2535 Multimeter vor dem Verschrotten bewahrt
Flohmärkte sind faszinierende Welten. Kürzlich erstand ich ein betagtes System-Multimeter von Philips, der ausgehandelte Preis war nicht nennenswert. Das Display sah zwar altersschwach aus, doch ich traute mir zu, den Fehler zu beheben. Diese Zuversicht erfüllte sich nicht, das Display erwies sich als resistent gegen jeden Reparaturversuch. Die Alternative war der Austausch gegen ein Standard-Display aus neuer Produktion.
Von Fons Janssen (Maxim Integrated, NL)
Messgeräte aus den 1980er und 1990er Jahren haben den Vorzug, dass damals größtenteils Standard-Komponenten verbaut wurden, und mit etwas Glück ist die Geräte- Dokumentation aus dem Netz abrufbar. Nach dem Studium des Ser-
vice-Manuals meines Multimeters, Typenbezeichnung Philips PM2535 [1], kam ich zu dem Schluss, dass der Austausch des Displays möglich sein müsste. Das Original
Das LC-Display des Multimeters wird von einem LCD-Treiber-Baustein PCF8576
gesteuert. Zum LCD-Treiber gelangen die Steuerkommandos und Daten über einen I2C-Bus. Ich entschloss mich, die Informationen auf dem I2C-Bus abzugreifen und zu transkodieren, um damit das Ersatz-Display zu steuern. Der PCF8576 kann bis zu 160 Segmente eines LC-Displays steuern. Im Ser-
Bild 1. Der Datenstrom gelangt über einen I 2C-Bus zum LCD-Treiber PCF8576.
www.elektormagazine.de
Juli/August 2016
105
�����
������
�����
um das Ersatz-Display im 4-bit-Modus zu steuern. Bild 2 zeigt eine vereinfachte Schaltung der Hardware, sie befindet sich auf einem Entwicklungsboard, das von Maxim für den Mikrocontroller MAXQ615 vorgesehen ist. Die hier zusätzlich notwendigen Bauelemente sind auf der Lötpunkt-Rasterfläche des Boards montiert.
Bild 2. Die Hardware steuert das Ersatz-Display (4 · 20 Zeichen, HD44780). Zum Multimeter führen vier Leitungen: Masse, +5 V sowie SDA und SCL des I 2C-Busses.
LC-Display mit Controller HD44780 ersetzt defektes LC-Display
vice-Manual ist dokumentiert, wie die Display-Segmente den Speicherplätzen des PCF8576 zugeordnet sind. Die Speicherbelegung hat die Struktur einer Matrix, bestehend aus 40 Reihen mal vier Bit (Nibble). Vom Wert jedes Bits hängt ab, ob das zugehörige Display-Segment hell oder dunkel gesteuert wird. Das Datenblatt des PCF8576 [2] stellt den Informationsfluss über den I2C-Bus dar. Am Anfang stehen ein oder mehrere Kommando-Bytes, dann folgt die Übertragung der Daten-Bytes. Mit einem Logik-Analyser hatte ich herausgefunden, dass die Daten zum Display-Treiber in zwei Gruppen übertragen werden: Die erste Gruppe besteht aus den Nibbles 6...39, die zweite Gruppe aus den Nibbles 0...5. Die Datenübertragung findet in einer Endlosschleife statt, so dass das Display fortlaufend aktualisiert wird. In Bild 1 ist der Datenstrom schematisch dargestellt.
106
Juli/August 2016
www.elektormagazine.de
Die stets gleich bleibenden Kommandos , , und