Stereo-Radio für 1,50 Euro
Verfasst: Fr 13. Jun 2014, 19:57
Zugegeben, die Überschrift stimmt nicht ganz; denn für 1,50 Euro erhält man nicht ein vollständiges Radio, sondern nur das Radiomodul TEA5767.
Die Anschluss-Belegung dieses Moduls ist einfach: Bei A wird eine Antenne angeschlossen. Der Stereo-Kopfhörer wird an die Ausgänge L(inks) und R(echts) sowie GND angeschlossen. Die Anschlüsse auf der linken Seite müssen mit einem Mikrocontroller verbunden werden (Vcc = 5 V).
Um damit wirklich Radiosendungen zu hören, benötigt man zusätzlich:
- eine Mikrocontroller-Platine, z. B. unsere Attiny-Platine,
- ein Stück Antennendraht (ca. 80 cm)
- einen hochohmigen(!) Kopfhörer
- optional ein LCDisplay
Wir haben das Modul zusammen mit einer Kopfhörer-Buchse auf eine Lochstreifenraster-Platine mit einer Winkelsteckerleiste montiert; diese kann dann ganz einfach an unsere Attiny-Platine angeschlossen werden.
Der Mikrocontroller kommuniziert mit dem Radiomodul über das I2C-Protokoll. So kann der Mikrocontroller z. B. einen Sendersuchlauf einleiten oder die Stärke des empfangenen Radiosignals ermitteln. Die I2C-Adresse ist $C0 (Schreiben) bzw. $C1 (Lesen). Grundsätzlich werden immer Pakete von 5 Bytes ausgetauscht. Beim Schreiben sind es:
1. Byte: Frequenz (Highbyte); Bit 6 und 7 haben Steuerfunktion
2. Byte: Frequenz (Lowbyte)
3. Byte - 5. Byte: Steuer- und Kontrollbits
Beim Lesen ist es ganz ähnlich: Auch hier haben Bit 6 und 7 des ersten Bytes Kontrollfunktionen. Näheres findet man auf den Seiten 14ff des Datenblatts und den Kommentaren des Beispielprogramms weiter unten. Zu beachten ist ferner, dass die im 1. und 2. Byte stehenden Zahlen die Frequenz nicht direkt, sondern in kodierter Form anzeigen.
Das Programm ist bewusst einfach gehalten; es hat folgende Struktur:
Startfrequenz 87,5 MHz einstellen
Suchlauf nach oben
kurz warten
Status auf Display anzeigen (Frequenz in MHz, Mono/Stereo, Signalstärke)
Schleife:
Wenn Ta0 betätigt, dann Frequenz etwas höher, Suchlauf nach oben, kurz warten, Status
Wenn Ta1 betätigt, dann Frequenz etwas niedriger, Suchlauf nach unten, kurz warten, Status
Schleifenende
Zu Beginn wird also beginnend mit der Frequenz 87,5 MHz ein erster Sendersuchlauf (nach oben) vorgenommen. Sobald das Radiomodul einen Sender gefunden hat, behält es die zugehörige Frequenz bei. Mit den Tasten Ta0 und Ta1 kann man weitere Suchläufe nach oben bzw. Unten herbeiführen. Wenn kein Taster betätigt ist, dann wird die Schleife ohne Aktivität durchlaufen und das Radiomodul setzt seinen Empfang ungestört fort.
Übrigens: Für ein paar Euro mehr kann man im Internet auch eine auf dem TEA5767-Modul basierende fertig montierte Platine inklusive einem kleinen Verstärker finden; damit können dann auch niederohmige Kopfhörer zum Tönen gebracht werden.
Die Anschluss-Belegung dieses Moduls ist einfach: Bei A wird eine Antenne angeschlossen. Der Stereo-Kopfhörer wird an die Ausgänge L(inks) und R(echts) sowie GND angeschlossen. Die Anschlüsse auf der linken Seite müssen mit einem Mikrocontroller verbunden werden (Vcc = 5 V).
Um damit wirklich Radiosendungen zu hören, benötigt man zusätzlich:
- eine Mikrocontroller-Platine, z. B. unsere Attiny-Platine,
- ein Stück Antennendraht (ca. 80 cm)
- einen hochohmigen(!) Kopfhörer
- optional ein LCDisplay
Wir haben das Modul zusammen mit einer Kopfhörer-Buchse auf eine Lochstreifenraster-Platine mit einer Winkelsteckerleiste montiert; diese kann dann ganz einfach an unsere Attiny-Platine angeschlossen werden.
Der Mikrocontroller kommuniziert mit dem Radiomodul über das I2C-Protokoll. So kann der Mikrocontroller z. B. einen Sendersuchlauf einleiten oder die Stärke des empfangenen Radiosignals ermitteln. Die I2C-Adresse ist $C0 (Schreiben) bzw. $C1 (Lesen). Grundsätzlich werden immer Pakete von 5 Bytes ausgetauscht. Beim Schreiben sind es:
1. Byte: Frequenz (Highbyte); Bit 6 und 7 haben Steuerfunktion
2. Byte: Frequenz (Lowbyte)
3. Byte - 5. Byte: Steuer- und Kontrollbits
Beim Lesen ist es ganz ähnlich: Auch hier haben Bit 6 und 7 des ersten Bytes Kontrollfunktionen. Näheres findet man auf den Seiten 14ff des Datenblatts und den Kommentaren des Beispielprogramms weiter unten. Zu beachten ist ferner, dass die im 1. und 2. Byte stehenden Zahlen die Frequenz nicht direkt, sondern in kodierter Form anzeigen.
Das Programm ist bewusst einfach gehalten; es hat folgende Struktur:
Startfrequenz 87,5 MHz einstellen
Suchlauf nach oben
kurz warten
Status auf Display anzeigen (Frequenz in MHz, Mono/Stereo, Signalstärke)
Schleife:
Wenn Ta0 betätigt, dann Frequenz etwas höher, Suchlauf nach oben, kurz warten, Status
Wenn Ta1 betätigt, dann Frequenz etwas niedriger, Suchlauf nach unten, kurz warten, Status
Schleifenende
Zu Beginn wird also beginnend mit der Frequenz 87,5 MHz ein erster Sendersuchlauf (nach oben) vorgenommen. Sobald das Radiomodul einen Sender gefunden hat, behält es die zugehörige Frequenz bei. Mit den Tasten Ta0 und Ta1 kann man weitere Suchläufe nach oben bzw. Unten herbeiführen. Wenn kein Taster betätigt ist, dann wird die Schleife ohne Aktivität durchlaufen und das Radiomodul setzt seinen Empfang ungestört fort.
Code: Alles auswählen
' Datei für Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' Radio mit TEA5767-Baustein
' up/down-Suche über Ta0 und Ta1
' Frequenz-Anzeige über LCD
' zusätzlich Anzeige S)tereo / M)ono und Signalstärke "S=..." in zweiter Zeile
'----------------------------------------------------------------------------
$regfile = "attiny2313.dat"
$crystal = 4000000
'**********************************************************
'******************* Deklarationen ************************
Dim I As Byte
Dim I2cadresse_w As Byte
Dim I2cadresse_r As Byte
Dim R As Byte
Dim F_low As Byte
Dim F_high As Byte
Dim Frequenz As Word
Dim Frequenz_mhz As Word
Dim S As Byte
Dim Stereo As Byte
Dim Signalstaerke As Byte
Dim Statuswerte(5) As Byte
Declare Sub Suche(richtung As Byte)
Declare Sub Frequenz_berechnen
Declare Sub Frequenz_anzeigen
Declare Sub Status_anzeigen
Declare Sub Status_lesen
Declare Sub Status
'****************** Initialisierung ***********************
Ddrb = &B11111111
Ddrd = &B01110000
Portd = &B10001111
Waitms 50
Config Lcd = 16 * 2 'LCD konfigurieren
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.6
Cursor Off
Config Sda = Portb.5
Config Scl = Portb.7
I2cadresse_w = &HC0
I2cadresse_r = &HC1
Const Zeit = 500
Const Offset = 6 '6
'**********************************************************
'******************** Hauptprogramm ***********************
R = 1 'Suchrichtung aufwärts
Frequenz = 10709 'Startfrequenz 87,5 MHz
Call Suche(r)
Waitms Zeit
Call Status
Do
If Pind.2 = 0 Then
R = 1 'Suche aufwärts
Frequenz = Frequenz + Offset
Call Suche(r)
Waitms Zeit
Call Status
End If
If Pind.3 = 0 Then
R = 0 'Suche abwärts
Frequenz = Frequenz - Offset
Call Suche(r)
Waitms Zeit
Call Status
End If
Loop
'**********************************************************
'******************* Unterprogramme ***********************
Sub Suche(richtung As Byte)
F_low = Low(frequenz)
F_high = High(frequenz)
F_high = F_high Or &B01000000 'Search-Modus, kein Mute
I2cstart
I2cwbyte I2cadresse_w
I2cwbyte F_high
I2cwbyte F_low
If Richtung = 1 Then I2cwbyte &B11000000 Else I2cwbyte &B00100000 'bit 7 -> up/down; bit 5 und 6 Empfindlichkeit, vgl. S. 14 vom Manual
I2cwbyte &H10 'Standardeinstellung nach Manual
I2cwbyte &H0 'Standardeinstellung nach Manual
I2cstop
End Sub
Sub Frequenz_berechnen
Frequenz = Statuswerte(1) And &B00111111
Shift Frequenz , Left , 8
Frequenz = Frequenz + Statuswerte(2)
Frequenz_mhz = Frequenz / 100
Frequenz_mhz = Frequenz_mhz * 82 '82/100 ungefähr gleich 32768/(4*10000) ; Ergebnis in der Einheit 10 kHz
Frequenz_mhz = Frequenz_mhz + 23 'Zwischenfrequenz 22,5 mal 10 kHz
Frequenz_mhz = Frequenz_mhz + 50 'Abschneiden -> Runden beim nächsten Schritt
Frequenz_mhz = Frequenz_mhz / 100 'Ergebnis in der Einheit MHz
End Sub
Sub Frequenz_anzeigen 'Näherungswert auf MHz gerundet
Locate 1 , 1
Lcd Frequenz_mhz : Lcd " MHz "
End Sub
Sub Status_lesen
I2cstart
I2cwbyte I2cadresse_r
For I = 1 To 4
I2crbyte S , Ack
Statuswerte(i) = S
Next I
I2crbyte S , Nack
Statuswerte(5) = S
I2cstop
End Sub
Sub Status_anzeigen
S = Statuswerte(3)
Stereo = S.7
Signalstaerke = Statuswerte(4)
Shift Signalstaerke , Right , 4
Locate 2 , 1
If Stereo = 1 Then Lcd "Ste" Else Lcd "Mon"
Lcd " S="
Lcd Signalstaerke
End Sub
Sub Status
Call Status_lesen
Call Frequenz_berechnen
Cls
Call Frequenz_anzeigen
Call Status_anzeigen
End Sub