Ansteuerung von Funkmodul RFM12
Hallo,
ich habe eine Frage zur Ansteuerung der RFM12 Funkmodule von Pollin.
Igendwo hab ich mal gelesen (ich weiß nicht mehr wo), dass man die Pin nIRQ am Funkmodul mit dem Anschluss INT0 am Microcontroller verbinden soll. Ich weiß aber nicht was das bringen soll. Wird ein Interrupt ausgelöst, wenn Daten empfangen werden? Oder wenn nicht, was muss ich machen, das dann ein Interrupt ausgelöst wird und zu was soll ich dann nIRQ mit INT0 verbinden?
Ich bedanke mich schom mal im voraus für eure Hilfe.
mfg _R2D2
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Grandalf,
ich habe mal irgendwo im Internet diese Datei gefunden (waren eigentlich mehere, hab sie aber zusammengefügt und noch ein bisschen bearbeitet):
RFM12.h
Die def.h Datei braucht man, wenn der Compiller die Makros sbi und cbi nicht kennt (zb. AVR-GCC). Sie werden in dieser Datei definiert.
Code:
#include <avr/io.h>
#ifdef _C_
#define true 1
#define false 0
#endif
#ifndef cbi
#define cbi(sfr, bit) sfr &= ~(1 << bit)
#endif
#ifndef sbi
#define sbi(sfr, bit) sfr |= (1 << bit)
#endif
#ifndef bit_is_set
#define bit_is_set(sfr, bit) sfr & (1 << bit)
#endif
#ifndef bit_is_clear
#define bit_is_clear(sfr, bit) !(sfr & (1 << bit))
#endif
#ifndef loop_until_bit_is_set
#define loop_until_bit_is_set(sfr, bit) while(sfr & (1 << bit))
#endif
#ifndef loop_until_bit_is_clear
#define loop_until_bit_is_clear(sfr, bit) while(!(sfr & (1 << bit)))
#endif
#ifndef BV
#define BV(bit) (1 << bit)
#endif
Um das Modul nun zu initialisieren muss man folgende Funktionen aufrufen:
Code:
rf12_init(); // ein paar Register setzen (z.B. CLK auf 10MHz)
rf12_setfreq(RF12FREQ(433.92)); // Sende/Empfangsfrequenz auf 433,92MHz einstellen
rf12_setbandwidth(4, 1, 4); // 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
rf12_setbaud(19200); // 19200 baud
rf12_setpower(0, 6); // 1mW Ausgangangsleistung, 120kHz Frequenzshift
(Vielleicht vor und nach den Funktionen noch ein paar ms warten.)
Es stehen insgesamt folgende Funktionen zur Verfügung:
Code:
extern unsigned short rf12_trans(unsigned short wert); // transfer 1 word to/from module
extern void rf12_init(void); // initialize module
extern void rf12_setfreq(unsigned short freq); // set center frequency
extern void rf12_setbaud(unsigned short baud); // set baudrate
extern void rf12_setpower(unsigned char power, unsigned char mod); // set transmission settings
extern void rf12_setbandwidth(unsigned char bandwidth, unsigned char gain, unsigned char drssi); // set receiver settings
extern void rf12_txdata(unsigned char *data, unsigned char number); // transmit number of bytes from array
extern void rf12_rxdata(unsigned char *data, unsigned char number); // receive number of bytes into array
extern void rf12_ready(void); // wait until FIFO ready (to transmit/read data)
mfg _R2D2