FM-Sender MMR-70 mit Bascom steuern          


Elektronik-Labor  Projekte  AVR 

  
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



Elektronik-Labor  Projekte  AVR