Daszu gehören die Einstellung der Frequenz, Sendeleistungs, Lautstärke, Mute, RDS und andere. Mit RDS kann man, ein entsprechndes Radio vorausgesetzt, den Namen mit 8 Stellen und Radiotext mit 64 Zeichen übertragen. Gedacht war es mal um einen Musik-/Infoplayer mit Infotext zu basteln. Und so brauch ich meine alten Radios nicht zu entsorgen wenn ich Musik aus dem Netz hören will. So wie das Projekt FM-Berry das macht. Nur bei mir am Linuxrechner mit serieller Schnittstelle.
Soweit klappt auch alles wunderbar, nur einen kleinen Schönheitsfehler gibt es. Beim Anlegen der Versorgungspannung startet die RDS Übertragung nicht. Der FM-Chip löst keine Interrupts aus. Mach ich dann allerdings einen Reset auf dem Mega und er initialisert neu, dann legt er los. Die Interruptaufrufe werden übrigens durch Flackern der LED auf dem Modul angezeigt. Ich habe diesen Fehler noch nicht gefunden, scheint irgendwie mit der Initialisierung zu tun zu haben. Aber der Rest klappt soweit. Also wenn jemand solche Module hat, hier ist die Library dazu. Ach ja, die serielle Schnittstelle ist auf dem Modul etwas seltsam verschaltet. Ich habe die Zusatzbauteile ausgelötet, mit mit einem RS232-USB-TTL-Wandler dann direkt an TXD und RXD des Prozessors gehangen. ISP sind über Testpins zugänglich.
Folgende Kommandos sind implementiert:
'# Frequenz berechnen und in Register abspeichern Sub Calc_frequenz() '# Initialisieren Sub Ns741_init() '# Chip ON/OFF Sub Ns741_on(byval Onoff As Byte) '# Sendeleistung 0-3 = 0,5mW, 0,8mW, 1mW, 2mW Sub Ns741_hfpower(byval Level As Byte) '# Frequenz einstellen Sub Ns741_set_frequenz(byval Frequenz As Word) '# Audio gain 0-6 = -9dB - +9db in 3dB Schritten Sub Ns741_volume(byval Gain As Byte) '# ALC Sub Ns741_alc(byval Onoff As Byte) '# Input gain -9dB on/off Sub Ns741_input_gain(byval Onoff As Byte) '# Stereo on/off Sub Ns741_stereo(byval Onoff As Byte) '# Mute on/off Sub Ns741_mute(byval Onoff As Byte) '# RDS on/off Sub Ns741_rds_enable(byval Onoff As Byte) '# RDS-Name setzen Sub Ns741_rds_set_progname(byval Rds_name As String) '# Radiotext formatieren Sub Ns741_rds_set_radiotext(byval Rds_text As String) '# Routine zum Schreiben aller Register in NS741 Sub Ns741_write_a(byval Adresse As Byte , Byval Anzahl As Byte) '# Routine zum Schreiben von zwei Bytes an Adresse in NS741, für RDS_int Sub Ns741_write2(byval Adresse As Byte , Byref Wert1 As Byte , Byref Wert2 As Byte) '# Routine zum Schreiben eines Bytes an Adresse in NS741 '# Schreiben darf nicht durch Interrupt unterbrochen werden, daher '# werden die für den Zeitraum deaktiviert Sub Ns741_write(byval Adresse As Byte , Byval Wert As Byte) '# Speichern der Register im EEPROM Sub Save_regs '# Lesen der Register aus EEPROM Sub Read_regs '### Interrupt-Routine zur Übertragung der RDS-Daten Sub Rds_intUnd wenn ich den Fehler gefunden hab, gibts Nachschlag.
MMR70 FM-Sender
