Arduino Radio mit dem SI4735Shield

Der hier verwendete hochintegrierte SiliconLabs DSP Chip in der inzwischen veralteten Revision SI4735C40 ist vormontiert auf einem zwischenzeitlich leider abgekündigten SI4735_Sparkfun_ShieldjpgSI4735_Sparkfun_AM_FM_Shield

Der Controller Chip deckt folgende Rundfunkbänder ab:
FM:     64MHz            –          108MHz
LW:     153kHz           –          279kHz
MW:    520kHz           –          1710kHz
KW:    2,3MHz           –          26,1MHz

Aufbau der Hardware

Das Shield hat einen analogen Audioausgang in Stereo über einen 3,5mm Klinkenstecker, der dazu verleitet einen Kopfhörer direkt damit zu versorgen. Allerdings reicht die NF-Leistung bei weitem nicht aus einen niederohmigen Kopfhörer direkt zu betreiben. Ohne einen weiteren empfindlichen NF-Verstärker wird also so oder so nichts zu hören sein!! Weiterhin wird eine vernünftig angepasste Antenne für einen rauscharmen Stereo-Empfang benötigt! Gleiches gilt für den AM-Empfang auf Lang-, Mittel- und Kurzwelle, der hauptsächlich nur in den Abendstunden halbwegs befriedigend funktionieren wird.

An den Antenneneingang „FM-Ant“ löten wir einen etwa 75cm langen isolierten Draht oder eine handelsübliche Teleskopantenne an. Sofern eine passende Ferritantenne vorhanden ist, wird diese an den anderen beiden Antennenanschlüssen „Ferrite Loop Ant“ verlötet. Diese Ferritantenne wird nur für den Lang- und Mittelwellenbereich benötigt. Sollte gerade keine passende Ferritantenne zur Hand sein, genügt hier auch erst einmal eine Langdrahtantenne von einigen Metern Länge, die an dem äußeren der beiden Antennenkontakte angeschlossen wird. Auf dem Shield befindet sich außerdem noch ein kleiner Schiebeschalter mit Aufdruck „AM/LW“ bzw. „FM/SW“ bezeichnet. Im Kurzwellenband kann hier die gleiche Teleskopantenne für FM (Frequency Modulation=UKW) und SW (Short Wave = Kurzwelle) verwendet werden.

In der Application Note 383 sind ab der Seite 39 noch weitere Hinweise zur Ferritantenne gegeben. Nachfolgend ein kurzer Auszug:

Durchmesser Länge             Wicklungen
8 mm                   50 mm             70
4 mm                   30 mm             100
5 x 7 mm           100 mm           70

Das SI4735 Shield wird nun auf einen Arduino Uno oder Duemilanove gesteckt. An der 3,5mm Klinkenbuchse wird testweise eine Aktivbox angeschlossen. Die Stromversorgung erfolgt über Steckernetzteile. Der Betrieb an einem Arduino Mega 2560 funktionierte bei mir erst einmal nicht. Da ich noch einen Duemilanove hatte, bin ich der Frage nach dem „Warum“ nicht weiter nachgegangen, da es vorerst noch genügend andere Baustellen in diesem Projekt gibt. Ich vermute jedoch, dass in der Library nur die benutzten SPI Pins vom Uno (10 SS, 11 MOSI, 12 MISO, 13 CLK) auf die geänderte Belegung beim Mega (50 MISO, 51 MOSI, 52 CLK, 53 SS) angepasst werden muss  Die notwendigen Anpassungen an den Mega werde ich ggf. zu einem späteren Zeitpunkt nachholen und nachreichen.

Der Hersteller Sparkfun hat das von mir verwendete Shield abgekündigt. Den nur 3*3mm großen SMD Chip gibt es allerdings weiterhin in der aktuellen Revision D60 zu kaufen. Da es nicht jedermanns Sache sein dürfte, den winzigen Controller per Hand zu löten, war es SI4735_ELV_0_BoBmir wichtig nach weiteren Lösungen zu schauen. Bei ELV habe ich unter der Artikel-Nummer 68-10 34 39 eine fertig bestückte Adapterplatine als Breakoutboard gefunden. Diese ist direkt zu den 3,3V Arduinos kompatibel ist. Weiterhin hat sich in der Arduino Community http://forum.arduino.cc/index.php?topic=145187.15 wohl jemand gefunden, der ein Radio-Shield mit dem SI4735 ähnlich dem Sparkfun Shield gebaut hat und offensichtlich auch willens ist dieses weiterzuverkaufen. Mit etwas Geduld wird sich aber sicher noch der eine oder andere Online-Händler finden, der dieses Sparkfun Shield noch ab Lager anbieten kann.

Materialstückliste 1:

  • SI4735_Sparkfun_AM_FM_Shield (DEV-10342)
  •  Arduino Duemilanove oder Uno
  • 7V bis 12V Steckernetzteil für Arduino und Shield
  • Teleskopantenne oder ca. 75cm isolierter Klingeldraht
  • Optionale Ferritantenne mit 80uH bis 450uH oder alternativ eine Langdrahtantenne
  • Aktiv-Lautsprecher mit 3,5mm Klinkenstecker und Stromversorgung

Modifikationen am Sparkfun SI4735 Shield

Drei Modifikationen sind vor der ersten Inbetriebnahme mit einem Uno oder Duemilanove am SI4735_Sparkfun_AM_FM_Shield unbedingt vorzunehmen:

  1. Der ARef Pin vom Shield muss entfernt werden, da dieser Pin wegen eines Designfehlers auf dem SI4735_Sparkfun_AM_FM_Shield leider mit GND verbunden ist. Ich habe hier die Stiftleiste vom Shield einfach vorsichtig weggebogen. Alternativ kann dieser auch mit einem Seitenschneider abgeschnitten werden.
  2. Der SI 4735 Chip ist als 3,3V Chip an seinen Eingängen zwar 5V tolerant und das Shield bringt auch zum Teil zumindest einen Levelshifter (Pegelwandler) mit, der Atmega 328 vom Arduino Board kommt jedoch  nicht mit den direkt verbundenen 3,3V Ausgangspegeln des SI4735 zurecht! Die Verbindung auf der Lötseite vom SI4735 zum Pin 12 muss mit einem scharfen Cuttermesser aufgetrennt werden. Auf der Bestückungsseite muss stattdessen eine Diode z. B. eine 1N4148 eingelötet werden, die Anode der Diode an Pin 12.
  3. Ein PullUp-Widerstand im Bereich von 10k bis etwa 20k muss von Pin12 zum +5V-Anschluß gelötet werden.

Die in PunkSi4735_1_Cut_Connection_smallt 1 beschriebene Modifikation des SI4735 Sparkfun Shields ist nur notwendig, um weiterhin die Analogeingänge A0 bis A5 des Arduino Boards nutzen zu können. Werden die Analogeingänge nicht benötigt, kann diese Änderung entfallen. Auf dem Foto links sind die ersten beiden Modifikationen recht gut zu sehen.  Direkt links vom Lochrasterfeld ist die zum Pin 12 aufgetrennte Leiterbahn zu erkennen.

SI4735_2_Diode_Pullup_smallObige Änderungen von Punkt 2 und 3 sind nur beim Betrieb des Sparkfun Shields an einem Standard 5V Arduino Board notwendig. Bei einem 3,3V Arduino Board sollte die Kommunikation des Shields funktionieren.

Die erste Inbetriebnahme des SI4735_Sparkfun_AM_FM_Shield

Der Ordner SI4735-SPI aus der heruntergeladenen Library muss in SI4735 umbenannt werden und in das eigene Arduino Library Verzeichnis umkopiert werden. Danach muss unbedingt die Arduino IDE neu gestartet werden, damit diese die neuen Dateien finden kann.

Das jetzige Library Release R4 unterstützt neben dem alten von mir hier verwendeten DSP-Controller SI4735C40 auch das neue Release SI4735D60. Mit der Library werden auch 3 Beispielsketche mitgeliefert, die im Menü der Arduino IDE unter „Bespiele/SI4735“ zu finden sind. In der Zeile 60 des Sketches SI4735_Example ändern wir erst einmal in der Zeile

radio.tuneFrequency(9730);              //Set the FM Frequency to 97.3 MHz

die Frequenz von 9730 auf 9620 (NDR2 entspricht 96,20MHz) oder einer anderen bekannten UKW Sendefrequenz aus dem Großraum. 9620 entspricht dabei der gewünschten Frequenz multipliziert mit 10kHz. Also 9620*10kHz=96200kHz=96,20MHz. Bei z. B. 104,90Mhz ist synonym 10490 einzutragen. Anschließend muss der Sketch in den Arduino geladen werden. Wird der Sketch fehlerfrei übersetzt, sollte nach einigen Sekunden aus den angeschlossenen Lautsprechern der eingestellte Sender zu hören sein, zumindest jedoch ein deutliches Rauschen. Rauscht es weiterhin nur auch nach weiteren Sekunden des Wartens, half bei mir die Reset Taste einmal zu betätigen. Der eingestellte Sender wurde sofort empfangen. Ansonsten sollte der Antennenanschluss überprüft werden, ggf. auch die korrekte Eingabe der Empfangsfrequenz. Eine Plausibilitätsprüfung findet in diesem einfachen Sketch nicht statt.

Für einen ersten Funktionstest ist dieser Sketch völlig ausreichend. Er war mir auch sehr hilfreich bei der Einarbeitung in die weiteren Funktionen und der zur Verfügung gestellten Methoden der Library. Die Bedienung erfolgt über den seriellen Monitor der Arduino IDE mit 9600bps. Folgende Kommandos werden in diesem Sketch unterstützt:

8          –          Lautstärke +
2          –          Lautstärke –
4          –          Suchlauf runter
6          –          Suchlauf rauf
m         –          Stummschaltung (Mute)
u          –          Stummschaltung aus (Unmute)
s          –          Einzelstatus abrufen
r           –          Registerstatus abrufen

Hindernisse

Bis die ersten Töne aus dem Lautsprecher zu hören waren, gab es allerdings erst noch einige größere Hürden zu umschiffen, da ich offensichtlich auch etwas zu Blauäugig an das Thema herangegangen bin. Normalerweise nehme ich ein Shield, stecke es auf einen Arduino Uno oder Duemilanove, lade vom Verkäufer die Libraries und Beispiele herunter und lege umgehend los. Das hat hier aus verschiedenen Gründen nicht funktioniert.

  1. Da es auf dem Shield keine LED gibt, die irgendein Lebenszeichen von sich gibt, bleibt nur der offensichtliche Audioausgang. Leider ist jedoch die Leistung des hochohmigen Ausganges so gering, dass ein handelsüblicher Ohrhörer nicht daran betrieben werden kann. Viele Tage später und ein etwas längerer Blick in das Datenblatt ergab bei diesem Punkt dann endlich Klarheit. Eine Typische NF-Ausgangsspannung von 80mV ist einfach viel zu wenig für einen Kopfhörer. Eine an der Klinkenbuchse angeschlossene Aktivbox brachte dann endlich das erste Rauschen.
  2. Die Steuerung über die vorhandenen Beispielsketche funktionierte anfangs nur tlw. oder war sehr hakelig und unpräzise. Mal klappte es, viel öfter jedoch nicht. Von mir eingebrachte Anpassungen und Ergänzungen der Beispielsketche funktionierten oftmals gar nicht. Erst nach vielen weiteren Versuchen ist mir der auf dem Shield verbaute Levelshifter aufgefallen, der die Signale vom 3,3V Shield an den 5V Arduino anpasst. Eine Leitung davon führt jedoch direkt vom General Purpose Pin GP 01 des DSP an den Arduino Digital Pin 12, hier als SPI-Port MISO benutzt! Nun dämmerte es langsam. Aus anderen Projekten kannte ich für solche Fälle der Pegelanpassung einen simplen Trick mittels Pullup-Widerstand und einer Diode. Also habe ich die Leitung zum Pin 12 des Arduinos mit einem Cuttermesser aufgetrennt, eine Diode so angelötet, dass die Kathode an Pin 12 liegt. Zum Abschluss dann noch einen gerade vorhandenen 27kOhm Widerstand von Pin 12 zum +5V Anschluss gesteckt. Nun klappte endlich die Kommunikation zwischen dem Shield und dem Board. Geht der GP 01 Pin auf L-Pegel, so bekommt der Arduino jetzt max. noch die Durchlass-Spannung der Diode von 0,8V, die er ebenfalls einwandfrei als Low interpretiert. Wird der GP 01 High, theoretisch auf max. 3,3V, in der Praxis eher unterhalb von 3V so addiert sich nun auf jeden Fall wieder die Durchlass-Spannung der Diode mit im schlechtesten Fall 0,7 V dazu. Somit erreichen wir auf jeden Fall mindestens 3,5V, die der Atmega auf dem Arduino Board einwandfrei als H-Pegel (0,7*Vdd = 5V*0,7=3,5V) erkennen sollte und auch macht.
  3. Bei obigen Versuchen war ich mir bezüglich der Kommunikation über SPI oder I2C nicht sicher und habe beides versucht. Der Default Mode des Chips ist I2C. I2C hat bei mir jedoch gar nicht funktioniert. Erst meine SPI-Versuche waren dann sukzessive erfolgreicher. Wie sich später herausstellte, ist das Shield für den SPI-Betrieb bereits fest vorkonfiguriert ist. Um in den SPI-Mode umzuschalten muss während des  Einschaltvorganges, der GP02 Pin über einen PullUp mit H-Pegel verbunden sein. Das wird auf dem Shield über den Pullup-Widerstand R1 erreicht.
  4. Um Pins am Arduino zu sparen, war die Idee, die zukünftigen Bedienungselemente nicht über die wenigen noch vorhandenen Digital Pins durchzuführen, sondern über einen Analogeingang die Taster anzuschließen. Ja, das geht wirklich sehr schön über Spannungsteilerwiderstände, wie z. B. auch bei vielen LCD_Keypad Shields bereits angewandt. Leider ließen sich die erwarteten Spannungswerte über den 10-bit AD-Wandler des Arduinos nicht abfragen. Nach einigen weiteren Untersuchungen stellte sich dann heraus, dass der ARef Pin auf dem Shield mit Masse verbunden ist. Dadurch wird die Referenzspannung auf 0V gezogen und die Wandler können keine Messwerte mehr ausgeben.
  5. Da ich mich zwangsweise etwas intensiver mit der Schaltung des Shields auseinandersetzen durfte, ist mir noch eine weitere Ungereimtheit im Bereich der Antenneneingänge aufgefallen. In der Application Note AN383 sind u. a. auch Schaltungs- und Layout Hinweise zu den HF-Eingängen des Chips zu finden. In dem Referenzdesign auf der Seite 46 der Rev. 06 der AN383 ist die Eingangsbeschaltung zu sehen. Hier wird bei AM-Betrieb der 33pF Kondensator C3 überbrückt und über C8 mit 0,47uF in den Antenneneingang gespeist. Im ansonsten identischen Sparkfun Design wird der Kondensator jedoch nicht überbrückt. Dieses dürfte der Grund für den mäßigen AM-Empfang sein.

Soweit erst einmal meine Zusammenfassung. Weiteres folgt.

Werbeanzeigen

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s