Forum: Projekte & Code [ASM] RFM02 sendet an RFM01 Sensor Daten


von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

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

von Steffen H. (avrsteffen)


Lesenswert?

Hier mal ein link zu ein paar Bildern der Module:
[Beitrag "Re: Luftdruck-Modul HP03S mit Atmega8"]

von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

Hallo,

Hier mal die Schaltungen und die Layouts zum Temperatur- und 
Luftdruckmodul.


Gruß Steffen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.