Start

Experimente

Grundlagen

Produkte
- SI4735
- - 4 MHz
- - Software
- - Antennen
- - Hilfeseite  
- - RDS  
- - ES-M32  
- - Heimradio 
- - PCradio2

Neues

Impressum

SI4735

Radio Data System, RDS



Der SI4735 enthält ein RDS-System, dessen Daten man mit geeigneter Software auslesen kann. Während viele FM-Radios nur den Stationsnamen zeigen, können nun auch der vollständige Radiotext, angebotene Ersatzfrequenzen und die Uhrzeit angezeigt werden. Die RDS-Daten werden von den Stationen in einem rotierenden System übertragen. Sehr schnell erscheint der Stationsname, seltener ein neuer Radiotext-Block. Nur einmal pro Minute wird eine neue Urzeit übertragen. Deshalb dauert es etwas länger bis dieses Feld gefüllt ist. Übertragen wird die Weltzeit UTC und die aktuelle Zeitverschiebung, womit die lokale Zeit berechnet werden kann.



Download Si4735Radio4.exe (update 2.6.09: Si4735Radio4.zip, 331 KB incl. Quelltext)
(Änderung: Software startet ohne RDS, Prozessorbelastung verringert)

Für die Realisierung des RDS-Empfangs war es nötig die USB-Datenübertragung noch einmal zu verbessern. Sie ist jetzt schneller und zuverlässiger geworden. Die Geschwindigkeit ist wichtig, weil die empfangenen Daten mindestens so schnell ausgelesen werden sollten wie sie empfangen werden. 

Die Programmierung des RDS-Empfangs erscheint auf den ersten Blick kompliziert. Sie ist jedoch für diesen Chip einfacher als für andere Systeme, weil Synchronisation, Fehlerbehandlung und die Einteilung in Datenpakete bereits im Chip erfolgen. Man muss daher nur noch die einzelnen Daten aus je acht Bytes lesen und die Nutzbytes interpretieren. Der folgende Ausschnitt aus dem Delphi-Quelltext zeigt die Verarbeitung für den Radiotext und für die Uhrzeit. Im RDS-System gibt es noch viele andere Dienste wie Verkehrsmeldungen, Alarm- und Ruf-Systme, wobei teilweise nicht-öffentliche Daten übertragen werden.


procedure TForm1.RDSClick(Sender: TObject);
var n,i,pos, max, : Integer;
var h1, h2, m1, m2: String;
begin
for n := 1 to 20 do begin
if GET_INT_STATUS() then begin
FM_RDS_STATUS;
if R[3] > 0 then begin //neue Daten?
if (R[6] and 248)= 32 then begin // 2A Radiotext
pos := R[7] and 15;
Codearray[pos*4] := R[8];
Codearray[pos*4+1] := R[9];
Codearray[pos*4+2] := R[10];
Codearray[pos*4+3] := R[11];
end;
if (R[6] and 248)= 64 then begin // 4A, Time
UTCoffset := (R[11] and 31) div 2;
if R[11] and 32 = 32 then UTCoffset := UTCoffset* -1;
Minuten := R[11] div 64 + 4 * (R[10] and 15);
Stunden := R[10] div 16 + 16* (R[9] and 1);
Zeit := 1;
end;
Edit8.text := '';
for i:= 0 to 63 do begin
Edit8.Text := Edit8.Text + chr(Codearray[i]);
end;
if Zeit = 1 then begin
h1 := IntToStr(Stunden);
if Stunden < 10 then h1 := '0'+h1;
h2 := IntToStr(Stunden + UTCoffset);
if (Stunden + UTCoffset) < 10 then h2 := '0'+h2;
m1 := IntToStr(Minuten);
if Minuten < 10 then m1 := '0'+m1;
Edit11.text := h2+':'+ m1 + ' '+'UTC: '+h1+':'+m1;
end;
end;
end;


Bild: Wolfgang Hartmann