Immerhin gibt der Händler folgenden Daten:
Receiver module parameters
1. Product Model: MX-05V
2. Operating voltage: DC5V
3. Quiescent Current: 4mA
4. Receiving frequency: 315MHZ/433MHZ
5. Receiver sensitivity:-105DB
6. Size: 30 * 14 * 7 mm
Technical parameters of the transmitter head
1. Product Model: MX-FS-03V
2. Launch distance :20-200 meters (different voltage, different results)
3. Operating voltage :3.5-12V
4. Dimensions: 19 * 19 mm
5. Operating mode: AM
6. Transfer rate: 4KB / S
7. Transmitting power: 10mW
8. Transmitting frequency: 315MHZ/433MHZ
9. Pinout from left to right: (DATA; VCC; GND)
Hier und da findet man in Foren vereinzelte Hinweise zu diesen oder ähnlichen Bausteinen. Ich will hier versuchen, die wichtigsten Informationen zu diesen Bausteinen zusammenzufassen.
Sowohl Sender als auch Empfänger arbeiten mit einer Betriebsspannung von 5 V; sie können also direkt an die Buchsenleiste der Attiny-2.0-Platine angeschlossen werden. Die Versorgungsspannung des Senders kann auch bis auf 12 V angehoben werden; seine Sendeleistung soll dann höher werden. Bei einer Versorgungsspannung von 5 V habe ich aber schon über 2 Betondecken hinweg Daten übertragen können. Dazu habe ich allerdings die 433-MHz-Module jeweils mit einer Antenne von 17 cm versehen.
Der Sender sendet nur dann sein hochfrequentes Signal, wenn der Daten-Eingang auf High gelegt wird. Der Empfänger zeigt dieses durch ein High-Signal an seinem Ausgang an. (Welchen der beiden Ausgänge man benutzt, scheint egal zu sein.) Der Empfänger verstärkt das empfangene Signal automatisch um so mehr, je schwächer es ist. Das hat folgende unangenehme Konsequenz: Wenn der Sender schweigt, registriert der Empfänger sämtliche elektromagnetischen Umgebungssignale und gibt sie entsprechend verstärkt als "Daten" aus. Ein wesentliches Problem bei der Konzeption und Programmierung eines Übertagungsprotokolls besteht demnach darin, diese Rauschsignale von echten Datensignalen zu unterscheiden.
Hinzu kommt: Der Empfänger kann keine statischen Signale empfangen; das bedeutet: Wenn der Sender längere Zeit auf High oder Low gesetzt wird, zeigt der Empfänger nur noch das verstärkte Umgebungsrauschen an. Das Übertragungsprotokoll muss derart konzipiert sein, dass das Sendesignal sich häufig genug ändert - selbst wenn z. B. nur 0-Bytes übertragen werden. Ein Protokoll, welches dieses leistet, ist die Manchester- oder Biphasenkodierung.
Bei dieser Kodierung werden die Bits 0 und 1 jeweils durch Flanken dargestellt, z. B. 0 durch eine fallende Flanke und 1 durch eine steigende Flanke. Gehen wir z. B. davon aus, dass die beiden Phasen, die ein Bit repräsentieren, jeweils 1 ms dauern, dann muss das Signal spätestens nach 2 ms seinen Zustand ändern, egal welche Bitfolge übertragen wird.
Die folgenden beiden Programme dienen zur Übertragung von kurzen Texten. Der zu sendende Text wird über ein Terminal-Programm an die Sendeeinheit übertragen. An der Empfängereinheit ist ein kleines Display angeschlossen, welches den empfangenen Text anzeigt. Damit der Empfänger den Anfang einer Übertragung erkennt, schicken wir dem Text eine "Präambel" voraus. Diese wird vom Empfänger genau analysiert; hat sie das korrekte Zeitverhalten, dann werden die folgenden Bit-Signale ausgewertet, indem jeweils der Zustand in der Mitte der ersten Phase gemessen wird.
Die Analyse der Präambel könnte auch zu einer Synchronisation des Empfängers genutzt werden, wenn der Empfänger nicht die genaue Zeitdauer der Phasen beim Sendesignal kennt.
Zunächst das Sendeprogramm:
Code: Alles auswählen
' Datei für Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' 433 MHz Sender FS1000A an Attiny-Platine 2.0
' 5 V -Versorgung
' Datenleitung an PB0
' Empfänger: empfaenger3.bas
'
'----------------------------------------------------------------------------
$regfile = "attiny2313.dat" 'Attiny2313
$crystal = 4000000 '4 MHz
$baud = 9600
'**********************************************************
'******************* Deklarationen ************************
Dim Text As String * 10
Dim I As Byte
Dim J As Byte
Dim Praeambel As Byte
Dim Buchstabe As String * 1
Dim Asciicode As Byte
Dim Null As Byte
Declare Sub Sendehf(b As Byte)
'****************** Initialisierung ***********************
Ddrb = &B11111111 'Port B als Ausgangsport
Ddrd = &B01110000 'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge auf high legen
Waitms 50 'zum Laden des Kondensators bei Ta0
Praeambel = &B10101010
Null = 0
'**********************************************************
'******************** Hauptprogramm ***********************
Do
Input Text , Noecho
Portb.0 = 0
Call Sendehf(praeambel)
For I = 1 To Len(text)
Buchstabe = Mid(text , I , 1)
Asciicode = Asc(buchstabe)
Call Sendehf(asciicode)
Next I
Call Sendehf(null)
Loop
'**********************************************************
'******************* Unterprogramme ***********************
Sub Sendehf(b As Byte)
' Manchesterkodierung
For J = 0 To 7
If B.j = 1 Then
Portb.0 = 0
Waitus 1000
Portb.0 = 1
Waitus 1000
Else
Portb.0 = 1
Waitus 1000
Portb.0 = 0
Waitus 1000
End If
Next J
End Sub
Code: Alles auswählen
' Datei für Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' Empfänger für Datei sender3.bas zum Funkmodul FS1000A
' Empfänger-Signal an PortD.6
' Sender und Empfänger können keine (quasi-)statischen Signale übertragen; im Mittel sollen
' die Low- und High-Anteile des Signals etwa gleich sein. Dann kommt der Empfänger
' nämlich mit einer relativ kleinen Verstärkung aus. Ansonsten regelt der Empfänger die
' Verstärkung hoch; dann ist das Signal aber relativ stark verrauscht.
' Als Kodierung benutzen wir deswegen die Biphasen- bzw. Manchester-Kodierung. Bei ihr
' werden die einzelnen Bits durch Flanken kodiert; insbesondere ist der Low- und der High-Anteil bei jedem
' Bit gleich groß, und zwar hier jeweils genau 1 ms = 1000 us.
'
' Pollin-LCD (8 Zeichen) an PortB
'
'----------------------------------------------------------------------------
$regfile = "attiny2313.dat" 'Attiny2313
$crystal = 4000000 '4 MHz
'**********************************************************
'******************* Deklarationen ************************
Dim Pulsdauer As Word
Dim Text As String * 8
Dim I As Byte
Dim J As Byte
Dim K As Byte
Dim Pegel As Bit
Declare Sub Wait_for_praeambel
Dim Buchstabe As String * 1
Dim Asciicode As Byte
Declare Function Empfange_hf() As Byte
Dim Ergebnis As Byte
'****************** Initialisierung ***********************
Ddrb = &B01111111 'Port B als Ausgangsport, außer B.7
Ddrd = &B00110000 'D4, D5 als Ausgang; Rest als Eingang
Portd = &B10001111 'Eingänge auf high legen
Waitms 50 'zum Laden des Kondensators bei Ta0
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
Cls
'**********************************************************
'******************** Hauptprogramm ***********************
Do
Call Wait_for_praeambel()
Text = ""
For I = 1 To 10
Asciicode = Empfange_hf()
If Asciicode = 0 Then Goto Ausgabe
Buchstabe = Chr(asciicode)
Text = Text + Buchstabe
Next I
Ausgabe:
Cls
Lcd Text '
Loop
'**********************************************************
'******************* Unterprogramme ***********************
Function Empfange_hf() As Byte
Waitus 500
For J = 0 To 7
If Pind.6 = 1 Then
Ergebnis.j = 0
Do
Loop Until Pind.6 = 0
Else
Ergebnis.j = 1
Do
Loop Until Pind.6 = 1
End If
If J < 7 Then Waitus 1500
Next J
Waitus 1000
Empfange_hf = Ergebnis
End Function
Sub Wait_for_praeambel()
Tccr1b = &B00000001 'Timer1 starten mit prescale 1 (1 Timertick = 0,25 us)
Anfang:
' Bit 0
Do
Loop Until Pind.6 = 1
Do
Loop Until Pind.6 = 0
Timer1 = 0
Pegel = 1
For K = 1 To 7
' Bit 1 - 7
Do
Loop Until Pind.6 = Pegel
Pulsdauer = Timer1
Timer1 = 0
If Pulsdauer < 7000 Then Goto Anfang ' kleiner als 1,75 ms
If Pulsdauer > 9000 Then Goto Anfang ' größer als 2,25 ms
Toggle Pegel
Next K
Tccr1b = 0 ' Timer1 anhalten
Waitus 1000 ' Ende der Präambel
End Sub
- Wie hoch ist die Reichweite?
- Hängt die Reichweite von der Phasendauer ab?
- Welches sind die minimale bzw. maximale Phasendauer für eine korrekte Übertragung?
- Wie kann man die Präambel zum Synchronisieren des Empfängers benutzen?