sloti
28.01.2013, 20:23
Moin moin,
ich versuche gerade eine Funkverbindung mit RFM12 Modulen aufzubauen. Ich verwende dazu einen ATmega8 und einen ATmega640. Beim stöbern bin ich auf eine Bibliothek von der Seite http://www.das-labor.org/wiki/RFM12_library gestoßen. Die macht echt nen sehr vernünftigen Eindruch. Hat echt viele schöne Funktionen. Nur irgendwie will sie nicht so recht. Ich hab die Module angeschlossen wie in der Doku angegeben:
/*
Connect the RFM12 to the AVR as follows:
RFM12 | AVR
----------------+------------
SDO | MISO
nIRQ | INT0
FSK/DATA/nFFS | VCC
DCLK/CFIL/FFIT | -
CLK | -
nRES | -
GND | GND
ANT | -
VDD | VCC
GND | GND
nINT/VDI | -
SDI | MOSI
SCK | SCK
nSEL | Slave select pin defined below
*/
Das Senden scheint wohl irgendwie zu klappen. Ich kann zumindest meine Funksteckdosen nicht mehr ein-oder ausschalten, wenn der Sender funkt. Allerdings kommt beim Empfänger wohl nichts an. Ich hab eigentlich fürs erste nur den Code aus dem Beispiel übernommen. Hier der Empfänger Code :
#include <avr/io.h>
#include <avr/interrupt.h>
#include "rfm12.h"
int main(void)
{
DDRC=0xff;
uint8_t *bufcontents;
char data[10];
int i=0;
PORTC|=(1<<PINC0);
rfm12_init();
sei();
while(1)
{
if (rfm12_rx_status() == STATUS_COMPLETE)
{
PORTC&=~(1<<PINC0);
bufcontents = rfm12_rx_buffer();
// dump buffer contents to uart
for (i=0;i<rfm12_rx_len();i++)
{
data[i]=bufcontents[i];
}
// tell the implementation that the buffer
// can be reused for the next data.
rfm12_rx_clear();
}
rfm12_tick();
}
}
Und hier der Sender:
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include <avr/interrupt.h>
#include "rfm12.h"
int main(void)
{
uint8_t teststring = 12;
uint8_t packettype = 0;
DDRL=0xff;
PORTL=0xff;
_delay_ms(100);
rfm12_init();
sei();
PORTL=0;
while(1)
{
rfm12_tx (sizeof(teststring), packettype, teststring);
rfm12_tick(); /* periodic tick function - call that one once in a while */
}
}
Hat vielleicht jemand schon Erfahrungen mit der Bibliothek oder gibt es beim RFM12 noch irgendwelche Tücken die es zu beachten gibt?
ich versuche gerade eine Funkverbindung mit RFM12 Modulen aufzubauen. Ich verwende dazu einen ATmega8 und einen ATmega640. Beim stöbern bin ich auf eine Bibliothek von der Seite http://www.das-labor.org/wiki/RFM12_library gestoßen. Die macht echt nen sehr vernünftigen Eindruch. Hat echt viele schöne Funktionen. Nur irgendwie will sie nicht so recht. Ich hab die Module angeschlossen wie in der Doku angegeben:
/*
Connect the RFM12 to the AVR as follows:
RFM12 | AVR
----------------+------------
SDO | MISO
nIRQ | INT0
FSK/DATA/nFFS | VCC
DCLK/CFIL/FFIT | -
CLK | -
nRES | -
GND | GND
ANT | -
VDD | VCC
GND | GND
nINT/VDI | -
SDI | MOSI
SCK | SCK
nSEL | Slave select pin defined below
*/
Das Senden scheint wohl irgendwie zu klappen. Ich kann zumindest meine Funksteckdosen nicht mehr ein-oder ausschalten, wenn der Sender funkt. Allerdings kommt beim Empfänger wohl nichts an. Ich hab eigentlich fürs erste nur den Code aus dem Beispiel übernommen. Hier der Empfänger Code :
#include <avr/io.h>
#include <avr/interrupt.h>
#include "rfm12.h"
int main(void)
{
DDRC=0xff;
uint8_t *bufcontents;
char data[10];
int i=0;
PORTC|=(1<<PINC0);
rfm12_init();
sei();
while(1)
{
if (rfm12_rx_status() == STATUS_COMPLETE)
{
PORTC&=~(1<<PINC0);
bufcontents = rfm12_rx_buffer();
// dump buffer contents to uart
for (i=0;i<rfm12_rx_len();i++)
{
data[i]=bufcontents[i];
}
// tell the implementation that the buffer
// can be reused for the next data.
rfm12_rx_clear();
}
rfm12_tick();
}
}
Und hier der Sender:
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include <avr/interrupt.h>
#include "rfm12.h"
int main(void)
{
uint8_t teststring = 12;
uint8_t packettype = 0;
DDRL=0xff;
PORTL=0xff;
_delay_ms(100);
rfm12_init();
sei();
PORTL=0;
while(1)
{
rfm12_tx (sizeof(teststring), packettype, teststring);
rfm12_tick(); /* periodic tick function - call that one once in a while */
}
}
Hat vielleicht jemand schon Erfahrungen mit der Bibliothek oder gibt es beim RFM12 noch irgendwelche Tücken die es zu beachten gibt?