RDS-Decoder
 
Mit Atmega8 und TDA7330

 

Counter

 
RDS-Decoder 1

Dieses ist ein RDS-Decoder mit einem 2 * 16 Zeichen Display.
In der ersten Zeile wird die Gruppe 0A mit ihren 8 Zeichen, die Uhrzeit angezeigt.
In der zweiten Zeile läuft die Gruppe 2A mit ihren 64 Zeichen als Lauftext durch.
Der Nachteil liegt in der begrenzten Anzeige. (Hier gibt es den Schaltplan)

Den Source-Code in Basic (BASCOM), passend zu diesem Modul, gibt es am ende dieser Seite.

Er zeigt in der oberen Zeile den 8stelligen RDS-Code der auch bei den meisten Autoradios angezeigt wird, danach kommt die Sender Kennung: D368 = FFH, D363 = HR3, am ende der Zeile wird dann noch durch einen * angezeigt ob RDS-Daten empfangen werden und in der unteren Zeile läuft der 64stellige RDS-Text durch.

Wir sind keine Profis und freuen uns auch über jede Hilfe und Anregung.
Sollte Sie Fehler oder Verbesserungen finden, dann teilen Sie es uns bitte mit.

Fragen oder Anregungen oder Interesse an einem Nachbau?
Einfach E-Mail an den Autor senden.



 
Anschluss

Der Anschluss des RDS-Decoders kann, wenn man den gewissen Punkt findet sehr einfach sein.
Bei diesem Radio war das benötigte Signal an Pin2 des PLL FM MPX Stereodemodulator LA3401.
Da im Eingang des RDS-Decoders ein 270pF Kondensator sitzt, kann man durch versuchen den richtigen Pin des ICs finden, dabei sollte man natürlich keinen Kurzschluss zu einem anderen Pin herstellen, dieses könnte zur Beschädigung des Radios führen.

Da die Drahtbrücke bei diesem Radio  zu dem Pin 2 des LA3401 führt, wurde dort der Abgriff für den RDS-Decoder angelötet.


 
RDS-Decoder 2

Dieses ist ein RDS-Decoder mit einem 4 * 20 Zeichen Display.
In den Zeilen 1 bis 3 und etwas noch in Zeile 4 wird die Gruppe 2A mit den 64 Zeichen angezeigt.

In der Zeile 4 wird noch die Gruppe 0A mit ihren 8 Zeichen, die Uhrzeit angezeigt.



 
RDS-Decoder 3

Dieses ist ein RDS-Decoder mit einem 2 * 40 Zeichen Display.
In der ersten Zeile wird die Gruppe 0A mit ihren 8 Zeichen, das Datum, die Uhrzeit, die Art des Senders, die Senderkennung, ob es ein Verkehrsfunksender ist und ob gerade eine Verkehrsfunkdurchsage läuft angezeigt.
In der zweiten Zeile läuft die Gruppe 2A mit den 64 Zeichen als Lauftext durch.
Der Nachteil liegt bei dem Durchlaufenden Text der Gruppe 2A und das dieses Display keine Hintergrundbeleuchtung hat



 
RDS-Decoder 4

Dieses ist ein RDS-Decoder mit einem 4 * 27 Zeichen Display.
Der Vorteil liegt darin, dass die Gruppe 2A, bei der 64 Zeichen übertragen werden, komplett angezeigt werden kann.
In der ersten Zeile wird die Gruppe 0A mit ihren 8 Zeichen, das Datum und die Uhrzeit angezeigt.
In den Zeilen 2, 3 und auch noch etwas in Zeile 4 wird die Gruppe 2A mit den 64 Zeichen angezeigt.
In der Zeile 4 wird zusätzlich noch Art des Senders, die Senderkennung TP, ob es ein Verkehrsfunksender ist und ob gerade eine Verkehrsfunkdurchsage läuft angezeigt.



  ' **************************************
' *    Projekt: RDS-Modul              *
' *    Date:    28.02.2010             *
' *    Autor:   DL4FBZ & DL1ZAX        *
' *    Atmega:  8                      *
' *    LCD:     2 * 16                 *
' *    Version: 1.1                    *
' *    Fuse-Bit: LOW= 0xFF High= 0xD9  *
' **************************************

$regfile = "m8def.dat"
$crystal = 4332000
$hwstack = 32
$swstack = 10
$framesize = 20

Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portc., Db5 = Portc., Db6 = Portc., Db7 = Portc., E = Portc., Rs = Portc.5
Config Lcd = 16 * 2
Initlcd

Cls
Cursor Off

Dim Checksume(26)as Word

Checksume(1) = &B1100011011
Checksume(2) = &B1110001111
Checksume(3) = &B1010100111
Checksume(4) = &B0011110111
Checksume(5) = &B0111101110
Checksume(6) = &B1111011100
Checksume(7) = &B1000000001
Checksume(8) = &B0110111011
Checksume(9) = &B1101110110
Checksume(10) = &B1101010101
Checksume(11) = &B1100010011
Checksume(12) = &B1110011111
Checksume(13) = &B1010000111
Checksume(14) = &B0010110111
Checksume(15) = &B0101101110
Checksume(16) = &B1011011100
Checksume(17) = &B0000000001
Checksume(18) = &B0000000010
Checksume(19) = &B0000000100
Checksume(20) = &B0000001000
Checksume(21) = &B0000010000
Checksume(22) = &B0000100000
Checksume(23) = &B0001000000
Checksume(24) = &B0010000000
Checksume(25) = &B0100000000
Checksume(26) = &B1000000000

Const Banka = &B1111011000
Const Bankb = &B1111010100
Const Bankc = &B1001011100
Const Bankc1 = &B1111001100
Const Bankd = &B1001011000

Dim Empfang As Long
Dim Empfang_neu As Long
Dim Ergebnis As Word
Dim Neue_daten As Bit
Dim I As Byte
Dim E As Byte
Dim T As Byte

Dim Txt2a As String * 17

Dim Txt As String * 2
Dim Txt0a As String * 8
Dim N0a As Byte
Dim N0p As Byte

Dim N2a As Byte
Dim N2b As Byte
Dim Blk As Byte

Dim M As Byte
Dim L As Byte
Dim Rds As Long

Dim Bit_zaehler As Byte
Dim Synchron As Bit
Dim Berechnen As Bit

Config Portd.= Input                                      ' Interrupt
Set Portd.2
Config Port
d.= Input                                      ' Daten Input
Set Port
d.3
Rdsdata Alias Pin
d.3

Locate 1 , 5
Lcd "RDS-Modul"
Locate 2 , 4
Lcd "Version 1.1"
Wait 1
Cls

On Int0 Int2_isr
Enable Int0
Enable Interrupts

Config Int0 = Falling

N2a = 0
N2b = 0

Do
   If Synchron = 0 Then
     Empfang = Rds
     Bit_zaehler = 0
     Berechnen = 1
   Else
     Empfang = Empfang_neu
     Neue_daten = 0
   End If
   If Berechnen = 1 Then
     For I = 0 To 25
       If Empfang.= 1 Then
         E = I + 1
         Ergebnis = Ergebnis Xor Checksume(e)
       End If
     Next I

     M.= Empfang.10
     M.= Empfang.11
     M.= Empfang.12
     M.= Empfang.13
     M.= Empfang.14
     M.= Empfang.15
     M.= Empfang.16
     M.= Empfang.17
     L.= Empfang.18
     L.= Empfang.19
     L.= Empfang.20
     L.= Empfang.21
     L.= Empfang.22
     L.= Empfang.23
     L.= Empfang.24
     L.= Empfang.25

     Select Case Ergebnis
       Case Banka                                           ' Sender Kennung
         Locate 1 , 11
         Lcd Hex(l) ; Hex(m)
         Synchron = 1
       Case Bankb
         Synchron = 1
         Blk = &H00
         Blk.= L.3
         Blk.= L.4
         Blk.= L.5
         Blk.= L.6
         Blk.= L.7
         Select Case Blk
           Case &B00100000                                  'Type 2A
             N2a = 1
           Case &B00000000                                  'Type 0A
             N0a = 1
             Blk = &H00
             Blk.= M.0
             Blk.= M.1
             Select Case Blk
               Case &B00000000
                 N0p = 1
               Case &B00000001
                 N0p = 3
               Case &B00000010
                 N0p = 5
               Case &B00000011
                 N0p = 7
             End Select

           Case &B01000000                                  'Type 4A
         End Select
       Case Bankc
         Synchron = 1
         If N2a = 1 Then
           Txt2a = Txt2a + Chr(l) + Chr(m)
           If Len(txt2a) > 16 Then Txt2a = Right(txt2a , 16)
         End If
       Case Bankc1
         Synchron = 1
         N0a = 0
         N2a = 0
         N2b = 0
       Case Bankd
         Synchron = 1
         If N2a = 1 Then
           Txt2a = Txt2a + Chr(l) + Chr(m)
           If Len(txt2a) > 16 Then Txt2a = Right(txt2a , 16)
           Locate 2 , 1
           Lcd Txt2a
           N2a = 0
         End If
         If N0a = 1 Then
           Txt = Chr(l) + Chr(m)
           Mid(txt0a , N0p , 2) = Txt
           Locate 1 , 1
           Lcd Txt0a
           N0a = 0
         End If
         If N2b = 1 Then N2b = 0
       Case Else
         Synchron = 0
         N0a = 0
         N2a = 0
         N2b = 0
     End Select
     Ergebnis = &B0000000000000000
     If Neue_daten = 0 Then Berechnen = 0
   End If

   Locate 1 , 16
   If Synchron = 1 Then Lcd "*" Else Lcd "-"
Loop
End

Int2_isr:
   Shift Rds , Left
   If Rdsdata = 1 Then Rds.= 1 Else Rds.= 0

   Incr Bit_zaehler
   If Synchron = 1 Then
     If Bit_zaehler = 26 Then
       Empfang_neu = Rds
       Neue_daten = 1
       Berechnen = 1
       Bit_zaehler = 0
     End If
   End If
   If Bit_zaehler = 27 Then Bit_zaehler = 1
Return