Wie schon in anderen Beiträgen beschrieben hab auch ich es nun endlich
nach einigen grauen Haaren geschafft mittels des RFM01 und RFM02 eine
Funkstrecke aufzubauen. Ich möchte euch den Code dazu auch nicht
vorenthalten.
SENDER MODUL:
Bis jetzt nur ein Modul mit einem LM92 als Temperatursensor, ATtiny2313
als µC und dem RFM02 als Sender. Der LM92 ist ein Temperatursensor mit
einer Genauigkeit von 0.33°C bei 3.3V Vcc. Angesprochen wird dieser über
I2C die im µC als Software Schnittstelle zur Verfügung steht. Der RFM02
wird über nIRQ, SDI, SCK und nSEL angesprochen. Um Strom zu sparen,
werden der RFM02 und der tiny2313 in den Sleepmodus versetzt. Der
interne Wakeup-Timer des RFM02 ist auf 60.12s eingestellt und weckt per
Interrupt (INT0) den tiny2313 wieder auf. Nun wird eine neuer Messwert
erfasst und eine neue Datenübertragung ausgeführt.
Pinbelegung RFM02: (änderbar in Definitionen.inc)
1 | ; ATtiny2313 RFM02
|
2 | ; PD2 [INT0] <-- RFM02 [nIRQ]
|
3 | ; PD3 --> RFM02 [nSEL]
|
4 | ; PD4 --> RFM02 [SCK]
|
5 | ; PD5 <-> RFM02 [SDI]
|
6 |
|
7 | ; FSK: Pullup 10k -> Vcc
|
8 |
|
9 | ; PD1 --> TX UART ; Debug Schnittstelle
|
Pinbelegung LM92: (änderbar in LM92.inc)
1 | ; I2C-Ein-/Ausgänge:
|
2 | .equ I2C_PORT = PORTA
|
3 | .equ SDA = PA0 ; SDA = PortA/Bit0
|
4 | .equ SCL = PA1 ; SCL = PortA/Bit1
|
5 |
|
6 | ; I2C-Slave-Adressen:
|
7 | .equ LM92_addr = 0x4B ; Adresse des Temperatursensors
|
EMPFÄNGER MODUL:
Hier dient ebenfalls ein ATtiny2313 als µC. Da der RFM01 ein
konfigurierbaren FIFO hat, wird hier mit dem INT0 gearbeitet und die
einzelnen Bytes empfangen und ausgewertet. Da das Sende Paket mit einem
CRC versehen ist kann hier auch überprüft werden, ob die Daten korrekt
übertragen wurden. Ist dies der Fall wird das empfangene Paket
entsprechend der Sensor-Nr gespeichert und über den UART ausgegeben.
Pinbelegung RFM01: (änderbar in Definitionen.inc)
1 | ; Belegungen der Atmel-Ports:
|
2 | ;*****************************************************************
|
3 | ; ATtiny2313 RFM01
|
4 | ; PD2 [INT0] <-- RFM01 [SDO]
|
5 | ; PD3 --> RFM01 [nSEL]
|
6 | ; PD4 --> RFM01 [SCK]
|
7 | ; PD5 <-> RFM01 [SDI]
|
8 |
|
9 | ; PD1 --> TX UART ; Sensor String Ausgabe
|
10 |
|
11 | ; nFFS: Pullup (10k)
|
Ein Sendepaket kann aus einer beliebige Anzahl an Datenpaketen bestehen
wobei ein Datenpaket eine fast beliebige Länge haben kann. (beides
begrenzt durch RAM-Größe) Also man kann auch mehrere Sensoren pro Sender
vergeben.
AUFBAU SENDE PAKET:
1 | ; SOT = Start Of Transmission
|
2 | ; EOT = End Of Transmission
|
3 | ; LF = Line Feed
|
4 | ; [ 1 ][ 2 ][ 1][ beliebig ][ 1][ beliebig ][ 1][ 2 ][ 1 ] ; BYTES
|
5 | ; [SOT][hiNibble Sensornummer][loNibble Sensornummer][LF][ STRING Temperatur ][LF][STRING BattLevel][LF][hiNibble CRC][loNibble CRC][EOT] ; AUFBAU
|
6 | ; [ 01][ 30 ][ 36 ][0A][2B,32,34,2C,35,27,43][0A][ 35,2C,31,56 ][0A][ 30 ][ 45 ][ 04] ; HEX
|
7 | ; [Â][0][6][\n][+][2][3][,][5]['][C][\n][5][,][1][V][\n][0][E][^D] ; Beispiel
|
Der Code ist eigentlich ziemlich gut Kommentiert. Die Software ist sehr
an Benedikts RFM01 und RFM02 Software angelegt.
>>Ein dickes D A N K E hier nochmal an Benedikt
..der hier hervoragende Pionierarbeit geleistet hat.
Ich hoffe es kann jemand gebrauchen.
LG Steffen