Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
SI4703 und Arduino Nano, zweite Generation mit RDS
#1
erstmals konnte ich dem SI4703 RDS-Informationen entlocken. Vorher hatte ich sehr viele libraries und sketche durchprobiert. Alle ohne Erfolg. Bis ich auf diese Bauanleitung gestossen bin:

Si4703-FM-Radio-Arduino-Uno-Schield

die dafür notwendig library <Si4703_Breakout.h>

Die wichtigste Erkenntnis war das ich die Verdrahtung des SI4703 ändern musste. GPIO2 des Empfängers löst über D3 des Arduino den RDSInterrupt aus und wird demzufolge auch mit bei den Variablen deklariert:

/*SI4703 - Pins*/
int resetPin = 2;
int SDIO = A4;
int SCLK = A5;
int RDSInterruptPin = 3; // GPIO2 for RDS Interrupt

sowie in der Objektdefinition mit als Parameter übergeben:

/*Init SI4703 Driver*/
Si4703_Breakout radio(resetPin, SDIO, SCLK, RDSInterruptPin);

Nun arbeitete ich ja schon länger mit der Bibliothek Si4703_Breakout von Simon Monk, aber die notwendige zusätzliche Verdrahtung hatte in meinem Kopf nie einen "Klick" ausgelöst.

Ich arbeite jetzt daran den RDS-fähigen Sketch auf meine Bedürfnisse anzupassen. Dazu hatte ich den funktionierenden "Kern" mit den RDS-Funktionen weitgehend freigelegt und meine I/O Funktionen dazugebaut.

Dazu gehörte erst mal die Bedienung per Drehencoder, welcher für die Sendereinstellung einen scan ausführt. Bewährte Routinen mit ISR benutze ich schon seit Jahren. Der einzige freie interruptfähige Pin D3 ist aber jetzt an den RDSInterrupt vergeben. Also bleiben für die Encoderabfrage nur 2 Möglichkeiten. Einfaches polling oder Pin Change Interrupts. Dabei lieferte das polling mit einem einfachen Encoderbauteil ohne breakboard, und damit auch ohne Tiefpass, so präzise Ergebnisse, das ich es dabei belies.

Der nächste Schritt war eine Umstellung der Ausgabe von OLED 128x64 auf LCD 16x2. Das war erst mal kein großes Problem, und ich bekam auch alle Informationen unter die ich anzeigen lassen wollte: Frequenz, RSSI, Stereo/Mono/Tuning, RDS sowie Lautstärke (VOL). Da aber jede Änderung nur eines Wertes jedesmal die ganze Anzeige neu aufbaute war im Display ein ständiges Flimmern zu erkennen, das mich störte. Deshalb zerlegte ich die Unterfunktion zur Displayaktualisierung auf mehrere kleine Unterfunktionen, um einzelne Wertänderungen partiziell zu aktualisieren. Die Aufrufe wurden dann direkt den Ereignissen zugeordnet und auf diese Weise eine stabile, flimmerfreie Ausgabe erzeugt.

Die Anzeige Mono/Stereo/Tune konnte ich mit nur einem Zeichen realisieren. Ein Charakter zeigt während des Suchlaufes die Suchrichtung '<' bzw. '>', und nach erfolgreichem Suchlauf ein 'S' für Stereo bzw. 'M' für Mono.

Die Formatierung für die Frequenzanzeige unterscheidet zwischen 2 und 3 Stellen vor dem Komma und passt dementsprechend den string "frequency" an.

Ein aktiver Suchlauf sollte nicht nur per Suchrichtung angezeigt werden, sondern die grade behandelte Frequenz sollte auch ausgegeben werden. Das erforderte Anpassungen in der Standard SI4703_seekUpAuto / SI4703_seekDnAuto - Funktion.

Sämtliche seriellen Ein/Ausgaben entfernte ich aus dem sketch, da inzwischen der Compiler durch zuviel Speicherbedarf Instabilitäten vermeldete. Es gab zwar einen Schalter:

#define DEBUG 1  // change from 0 to 1 if you want debug (serial monitor)

der das gleiche bewirkt hätte. Aber mir wurde der sketch aufgrund der ganzen Unterprogramme einfach zu unübersichtlich. Eine serielle Bedienung des Radios macht auch insofern keinen Sinn weil es dann über den USB-Port des PC gespeist werden muss und die peek's auf dem USB-Kabel einen guten Empfang sowie eine RDS-Ausgabe ruinieren.

Lautstärke per zweiten encoder ist jetzt auch integriert.

Für die Zukunft sind weitere Varianten für andere Displays, Servo-Ausgabe und LED-Stripes geplant. Auch muss ich meine Platine neu entwickeln. Einmal wegen der RDSInterrupt-Verdrahtung und einmal um mehr GPIOS's über Pfostenstecker erreichen zu können, sowie direkte Kontakte für I2C-Displays mit wahlweise 3,3V und 5V, also auf beiden Seiten des Level Converter.

ein kleines Demo:



und so sieht meine Entwicklungsumgebung aus:

   

   

   

   

   

Stand der Dinge:


.zip   Si4703_Radio_rssi_LCD_V2.zip (Größe: 2,57 KB / Downloads: 115)
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#2
Hallo,

mit großem Respekt und auch ein wenig neidisch habe ich dieses Post gelesen.

Das ist mindestens 3 Nummern zu groß.

Dennoch danke für die Mühe bei der Erstellung dieses Post.

Gruß V.


P.S.
Die Hardware ist zum Teil vorhanden, auch der Bordhalter, so einen genialen Schraubstock besitze ich auch. Huh Smiley47
Zitieren
#3
lass dich nicht verwirren. Die Verdrahtung ist nicht kompliziert, und der sketch kann fertig übernommen werden von mir oder sonstwo aus dem Internet. Oder ein Beispielsketch von denen die bei den libraries mitgeliefert werden.
Die obige zip ist nicht mehr ganz aktuell. Ich habe eine millis-Funktion dazugesetzt die mir alle 2 Sekunden die RSSI Ausgabe aktualisiert. Dies geschah sonst nur einmalig beim Senderwechsel.
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#4
Hallo Jupp,

ganz große klasse ,wie du das so gemacht hast .Habe mein Gehäuse fertig ,danach kommt der Einbau mit den SI4703 und Nano .


Gruß Harald Smiley14
Zitieren
#5
danke Harald, dein Päckchen mit den Platinen ging eben zur Post.
Gruß,
Jupp
-----------------------------

was du baust ist immer mit dir verbunden
(Lego)

Einsamkeit ist nur ein Mangel an Technologie
(@beetlebum)
Zitieren
#6
Jupp, Du bist einfach unglaublich! Respekt!!!
Gruß,
Ivan
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
Video Ilmenau_Teile, Teil 3. Ein UKW Ilmenau mit Arduino Nano navi 0 416 25.06.2023, 22:21
Letzter Beitrag: navi
  DDS AM Modulator mit Arduino Semir 74 42.624 20.01.2021, 16:18
Letzter Beitrag: Merlin_681
  Das zweite UKW Radio- Projekt mit DDR Chip radio-volker 18 7.803 20.05.2020, 23:26
Letzter Beitrag: Schraubnix
  AM-Modulator mit Arduino klammi † 1 2.557 29.03.2018, 20:49
Letzter Beitrag: Semir
  Arduino-Radio mit Leuchtbandanzeige saarfranzose 4 5.609 09.09.2017, 11:46
Letzter Beitrag: saarfranzose

Gehe zu: