Eletechsup Original Factory Official Store
ASK AM HF-Superheterodyn-Fernempfänger-RX-Modul 433 MHz -112 dBm RX TX
ASK AM HF-Superheterodyn-Fernempfänger-RX-Modul 433 MHz -112 dBm RX TX
SKU:BX005*1+BX003*1
1008 auf Lager
Verfügbarkeit für Abholungen konnte nicht geladen werden
Teilen
Artikelbeschreibung :
Technische Daten:
Betriebsfrequenz (MHz): 433.92MHz ;
Artikelbeschreibung :
Betriebsspannung (V): DC 3-12V
niedriger statischer Stromverbrauch beim Senden : 10 mA ( Kein Senden Kein Stromverbrauch);
Datenübertragungsrate : 3 kb/s
Manchmal möchte man in der Embedded-Entwicklung drahtlos arbeiten. Vielleicht möchte man verschiedene Messwerte von entfernt platzierten Sensoren aufzeichnen oder einfach eine Fernbedienung für ein Roboter- oder Autoalarmsystem bauen.
Ich habe zwei separate Schaltungen für Tests auf Atmega8-Mikrocontrollern konstruiert.
Sender
Wie Sie sehen können, habe ich eine LED zur Anzeige der Funkaktivität verwendet. Gut, genug von der Hardware – eigentlich gibt es dazu nichts mehr zu sagen – die Schaltungen sind einfach.
Kommen wir nun zum Softwareteil. Die Funkübertragung ist etwas komplizierter als die kabelgebundene Kommunikation, weil man nie weiß, welche Funksignale in der Luft vorhanden sind. Daher ist es wichtig, wie das übertragene Signal kodiert ist. Und hier gibt es viele Möglichkeiten: die Hardware-Kodierung wie USART verwenden oder eine eigene auf Basis einer der vielen Kodierungsverfahren wie NRZ, Manchester usw. schreiben. In meinem Beispiel habe ich das AVR-USART-Modul verwendet, um Datenpakete zu bilden. Hardware-Encoder lösen viele Probleme wie Synchronisation, Start und Stopp sowie verschiedene Signalprüfungen. Aber solange ich mich damit beschäftigte, konnte man sich nicht auf ein reines USART-Signal verlassen. Hier kann man tatsächlich improvisieren, indem man verschiedene Prüfungen usw. hinzufügt.
Ich habe beschlossen, 4-Byte-Datenpakete zu bilden, um ein Byte an Informationen zu senden. Diese beinhalten:
-
ein Dummy Synchronisationsbyte (10101010);
-
ein Adressbyte – falls es weitere Empfänger (oder Sender) gibt;
-
ein Datenbyte;
-
und Prüfsumme, die eigentlich die Summe aus Adresse und Daten ist (Adresse+Daten).
Warum habe ich ein Dummy-Byte am Anfang des Pakets verwendet? Ganz einfach: Mir ist aufgefallen, dass der Empfänger verschiedene Störgeräusche aus der Stromversorgung oder anderen Quellen aufnimmt, wenn der Sender keine Daten überträgt, weil der Empfänger seine Eingangsgewinnung je nach Eingangssignallpegel anpasst. Das erste Byte stimmt den Empfänger ein, damit er danach das Adressbyte, die Daten und die Prüfsumme zuverlässiger lesen kann. Bei anderen Übertragungsmodulen kann man dieses Dummy-Byte möglicherweise weglassen.
S-Senderprogramm für AVR Atmega8:
#include
#include
#ifndef F_CPU
//Taktfrequenz des Prozessors definieren, falls nicht definiert
#define F_CPU 8000000
#endif
//Gewünschte Baudrate festlegen
#define BAUDRATE 1200
//UBRR-Wert berechnen
#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1)
//Empfängerparameter definieren
#define SYNC 0XAA// Synchronisationssignal
#define RADDR 0x44
#define LEDON 0x11//Befehl zum Einschalten der LED
#define LEDOFF 0x22//Befehl zum Ausschalten der LED
void USART_Init(void)
{
//Baudrate festlegen
UBRRL=(uint8_t)UBRRVAL; //unteres Byte
UBRRH=(UBRRVAL>>8); //oberes Byte
//Datenrahmenformat festlegen: asynchron, keine Parität, 1 Stoppbit, 8 Bit
UCSRC=(1<
(0<
//Sender und Empfänger aktivieren sowie Interrupt bei vollständigem Empfang
UCSRB=(1<
}
void USART_vSendByte(uint8_t u8Data)
{
//Warten, wenn ein Byte übertragen wird
while((UCSRA&(1<
//Daten übertragen
UDR = u8Data;
}
void Send_Packet(uint8_t addr, uint8_t cmd)
{
USART_vSendByte(SYNC);//Synchronisationsbyte senden
USART_vSendByte(addr);//Empfängeradresse senden
USART_vSendByte(cmd);//Inkrementbefehl senden
USART_vSendByte((addr+cmd));//Prüfsumme senden
}
void delayms(uint8_t t)//Verzögerung in ms
{
uint8_t i;
for(i=0;i
_delay_ms(1);
}
int main(void)
{
USART_Init();
while(1)
{//Endlossendung
//Befehl zum Einschalten der LED senden
Send_Packet(RADDR, LEDON);
delayms(100);
//Befehl zum Einschalten der LED senden
Send_Packet(RADDR, LEDOFF);
delayms(100);
}
return 0;
}
In meinem Fall habe ich eine Baudrate von 1200 verwendet. Sie kann je nach Entfernung und Umgebung erhöht oder verringert werden. Bei größeren Entfernungen funktionieren niedrigere Baudraten besser, da die Wahrscheinlichkeit für Übertragungsfehler größer ist. Die maximale Bitrate des Senders beträgt 8kbits/s, was etwa 2400 Baud entspricht. Aber was in der Theorie funktioniert, tut es in der Praxis meistens nicht. Daher ist 1200 Baud das Maximum, was ich zuverlässig zum Laufen bekommen habe.
<
