FM-Sender MMR-70 mit Bascom steuern
Herzlichen
Dank an Thomas Baum, der mir zwei von diesen Mini-Sendern geschickt hat und
mich auf eine interessante Entwicklung aufmerksam gemacht hat. Diese Teile sind
dafür gedacht Musik auf kurze Entfernung an ein ULW-Radio zu übertragen. Seit
einiger Zeit gibt es eine Erlaubnis für solche Sender mit sehr geringer
Senderleistung und Reichweite. Anscheinend wurden aber zu viele produziert und
sind daher jetzt extrem billig. Und außerdem enthalten Sie einen ATMega32, den
man prima selbst programmieren kann. Und das beste ist: Alles wurde schon im
mikrocontroller.net ausführlich untersucht und dokumentiert. Mit
Anschlussbelegungen und Ansteuerung in C. Was will man mehr.
Alle nötigen Informationen findet man hier: http://www.mikrocontroller.net/topic/252124
Das Gerät
ließ sich leicht öffnen. Auf der Platine sieht man das Sendemodul und den
Mikrocontroller. Auf der Rückseite finden sich einige Testpunkte. Und im
Mikrocontroller.net hat Oliver genau dokumentiert, wo sie angeschlossen sind.
Alles was man braucht um den Controller zu programmieren liegt ganz bequem an
diesen Testpunkten. Damit war es auch nicht schwer einen sechspoligen
ISP-Stecker anzubringen. Und das STK500 hat nun tatsächlich vollen Zugriff auf
den Mega32. Wichtig ist nur, dass man die Spannung auf 3,3 V einstellt.
Was die
Software zur Ansteuerung des Sendemoduls angeht hat Silvan das einfaches C-Programme
transmitter_test.zip entwickelt. Ich habe es
ausprobiert, indem ich das Hexfile in den Controller geladen habe. Sie stellte
den Sender auf 88,6 MHz ein. Direkt nebenan auf 88,8 MHz steht hier der WDR5
mit hoher Feldstärke. Da war die Motivation groß, die Frequenz zu ändern. Weil
ich mehr auf Basic stehe, habe ich das wichtigste in Bascom umgeschrieben. Und
damit benutze ich jetzt eine freie Frequenz: 89,8 MHz.
Zusätzlich kann man über die serielle Schnittstelle mit 9600 Baud eine neue
Sollfrequenz übertragen. Diese wird auch im EEPROM abgelegt und ist beim
nächsten Start wieder aktiv.
Download: mmr70_89_8.zip
Bitte beachten Sie die Bestimmungen bezüglich Frequenz und Signalpegel!
'MMR70 89,8 MHz
'Serielle Übergabe der Sollfreqeunz in 10-kHz-Einheiten
'8800 für 88 MHz, 9600 Baud
'Nach dem C-Programm transmitter_test.zip von Silvan
'http://www.mikrocontroller.net/topic/252124
$regfile = "m32def.dat"
$crystal = 3680000
$hwstack = 16
$swstack = 32
$framesize = 32
Baud = 9600
Echo Off
Dim Fx As Word
Dim Fkhz As Long
Dim Ff As Long
Dim F As Word
Dim H As Byte
Dim L As Byte
Declare Sub Twi_send(byval Dat As Byte , Byval Addr As Byte)
Declare Sub Init_fm
Declare Sub Freq_fm
Config Sda = Portc.1
Config Scl = Portc.0
I2cinit
Readeeprom Fx , 0
If Fx > 10800 Then 'Eeprom leer?
Fkhz = 89800 '89,8 MHz
Else
Fkhz = Fx * 10
End If
Init_fm
Freq_fm 'Modul aktivieren
Waitms 1000
Do
Input Fx
Writeeeprom Fx , 0
Fkhz = Fx * 10
Freq_fm
Loop
'Do
' For Fx = 8800 To 10800 Step 100
' Fkhz = Fx * 10
' Freq_fm
' Waitms 1000
' Next Fx
'Loop
Sub Init_fm
Call Twi_send(0 , 0) ' Init)
Call Twi_send(&H02 , &H00)
Call Twi_send(&H81 , &H01)
Call Twi_send(&H0a , &H02)
Call Twi_send(&H00 , &H03)
Call Twi_send(&H00 , &H04)
Call Twi_send(&H00 , &H05)
Call Twi_send(&H00 , &H06)
Call Twi_send(&H7e , &H07)
Call Twi_send(&H0e , &H08)
Call Twi_send(&H08 , &H09)
Call Twi_send(&Hd0 , &H0A) 'Test
Call Twi_send(&H2a , &H0B) 'Test
Call Twi_send(&H0c , &H0C)
Call Twi_send(&He6 , &H0D)
Call Twi_send(&H3f , &H0E)
Call Twi_send(&H70 , &H0F)
Call Twi_send(&H0a , &H10)
Call Twi_send(&He4 , &H11)
Call Twi_send(&H00 , &H12)
Call Twi_send(&H42 , &H13)
Call Twi_send(&Hc0 , &H14)
Call Twi_send(&H41 , &H15)
Call Twi_send(&Hf4 , &H16)
End Sub
Sub Freq_fm
Call Twi_send(&H0b , &H02)
Call Twi_send(&H11 , &H15)
Call Twi_send(&He0 , &H10)
Call Twi_send(&H0b , &H02)
Ff = Fkhz * 1000
Ff = Ff / 8192
F = Ff
L = Low(f)
H = High(f)
Call Twi_send(l , &H0A) 'freq low
Call Twi_send(h , &H0B) 'freq high
Call Twi_send(&H7e , &H07)
Call Twi_send(&H0e , &H08)
Call Twi_send(&H0a , &H02)
Call Twi_send(&H81 , &H01)
Call Twi_send(&H03 , &H00)
End Sub
Sub Twi_send(byval Dat As Byte , Byval Addr As Byte)
I2cstart
I2cwbyte 204 '&H66 * 2
I2cwbyte Addr
I2cwbyte Dat
I2cstop
Waitms 1
End Sub
End