1 | #ifndef RFM12_H_
|
2 | #define RFM12_H_
|
3 |
|
4 |
|
5 | #define RFM12_SEL_port PORTD
|
6 | #define RFM12_SEL_pin PIND
|
7 | #define RFM12_SEL_dir DDRD
|
8 | #define RFM12_SEL_bit 3
|
9 | #define RFM12_SEL_on() clear_bit (RFM12_SEL_port, RFM12_SEL_bit)
|
10 | #define RFM12_SEL_off() set_bit (RFM12_SEL_port, RFM12_SEL_bit)
|
11 |
|
12 | #define RFM12_SCK_port PORTD
|
13 | #define RFM12_SCK_pin PIND
|
14 | #define RFM12_SCK_dir DDRD
|
15 | #define RFM12_SCK_bit 2
|
16 | #define RFM12_SCK_on() set_bit (RFM12_SCK_port, RFM12_SCK_bit)
|
17 | #define RFM12_SCK_off() clear_bit (RFM12_SCK_port, RFM12_SCK_bit)
|
18 |
|
19 | #define RFM12_SDI_port PORTC
|
20 | #define RFM12_SDI_pin PINC
|
21 | #define RFM12_SDI_dir DDRC
|
22 | #define RFM12_SDI_bit 5
|
23 | #define RFM12_SDI_on() set_bit (RFM12_SDI_port, RFM12_SDI_bit)
|
24 | #define RFM12_SDI_off() clear_bit (RFM12_SDI_port, RFM12_SDI_bit)
|
25 |
|
26 | #define RFM12_SDO_port PORTC
|
27 | #define RFM12_SDO_pin PINC
|
28 | #define RFM12_SDO_dir DDRC
|
29 | #define RFM12_SDO_bit 2
|
30 |
|
31 | #define RFM12_IRQ_port PORTC
|
32 | #define RFM12_IRQ_pin PINC
|
33 | #define RFM12_IRQ_dir DDRC
|
34 | #define RFM12_IRQ_bit 3
|
35 |
|
36 | #define RFM12_command_CONF 0b1000000000000000 // Grundkonfiguration ;; LATCH ;; FIFO ;; BAND ;; BALLASTKONDESATOR FÜR QUARTZ
|
37 | #define RFM12_command_PWR 0b1000001000000000 // Komponentenauswahl ;; Empfängertrakt ein/ausschalten ;; Basisband ;; Transmitter ;; synth ;; Quartz-Oszi ;; Betriebsspannungsüberwachung ;; Wake-Up ;; Clock
|
38 | #define RFM12_command_FREQ 0b1010000000000000 // Frequenzeinstellung
|
39 | #define RFM12_command_PLL 0b1100110000000000 // Taktgenerator-Einstellungen ;; Treiberstärke ;; Low-Power Mode für Quarz ;; delay ;; dithering ;; Bandbreite
|
40 | #define RFM12_command_DTRT 0b1100011000000000 // Bitrate ;; Vorteiler ;; Bitratenteilerfaktor
|
41 | #define RFM12_command_RXCT 0b1001000000000000 // Empfängersteuerung ;; pin int/vdi ;; Definiert Geschwindigkeit ;; Bestimmt die Bandbreite des Empfängers ;; Verstärkungsfaktor des UHF-Verstärkers ;; Relative Empfangsfeldstärke
|
42 | #define RFM12_command_DFLT 0b1100001000000000 // Empfangsdatenrekonstruktion ;; Bittakt-Rekonstruktion ;; Typ des Datenfilters(dig/ana) ;; Bestimmt den Schwellwert, ab dem ein Signal als gut befunden wird
|
43 | #define RFM12_command_FFRM 0b1100101000000000 // FIFO-Steuerung ;; Füllstand interrupt steuerung ;; Länge des Synchronmusters ; Legt fest ab wann FIFO füllt ;; Freigabe FIFO ;; Power-On-Reset
|
44 | #define RFM12_command_RXFR 0b1011000000000000 // Empfänger-FIFO lesen
|
45 | /*
|
46 | Empfänger FIFO lesen
|
47 | Byte MSB LSB Vorgabe
|
48 | Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
49 | ? 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0xB000
|
50 |
|
51 | ___ _ __
|
52 | SEL \________________________________________________________________________________/ \___|?|__________________
|
53 | _ _ _ _ _ _ _ _ __ __ __ __ __ __ __ __ _ _ _ _
|
54 | SCK ___/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_______|?|__/ \_/ \_/ \_/ \_
|
55 | _____ _______ ggf. reduzierte Schiebetaktfrequenz _______ ____ _______
|
56 | SDI _/ \___/ 0xB0 \_______________________________________________________________/_______|?|/ \___/ 0xB0 \_
|
57 | ________________________________ _____ _____ _____ _____ _____ _____ _____ _____ _ ____________________
|
58 | SDO -________________________________X_____X_____X_____X_____X_____X_____X_____X_____X_---___/?
|
59 | FFIT (sollte HIGH sein) D7 D6 D5 D4 D3 D2 D1 D0 D? ??Interrupt
|
60 |
|
61 | D? = FIFO ist vom Fall-Through-Typ; ungültig oder nächstes Datenbit wenn nicht leer
|
62 | |?| = warten bis SDO = HIGH (nicht auf die L-H-Flanke, diese könnte ausbleiben!)
|
63 | --- = Tristate, der Bus-Holder hält den Ausgang auf den letzten Pegel fest
|
64 | */
|
65 | #define RFM12_command_AFC 0b1100010000000000 // Automatische Frequenznachregelung ;; Modus der AFC-Schaltung ;; Ziehfrequenzbegrenzung ;; Genauer Berechnungsmodus ;; AFC-Offset freischalten ;; AFC-Berechnung aktivieren
|
66 | #define RFM12_command_TXCC 0b1001100000000000 // TX Senderkonfiguration ;; Richtung der FSK-Erzeugung ;; Frequenzhub ;; relative Ausgangsleistung des Senders
|
67 | #define RFM12_command_TXRW 0b1011100000000000 // Senderegister schreiben
|
68 | /*
|
69 | Senderegister schreiben
|
70 | ___ _ _
|
71 | SEL \_________________________________________________________________|?|_________________________________|?|________________________________/
|
72 | _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|
73 | SCK __/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \__/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_|?|_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_|?|_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \__
|
74 | __ ___________ ___ ___ ___ ___ ___ ___ ___ _____ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
|
75 | SDI _/ \___/ = B 8 \____________/___X___X___X___X___X___X___X_____|?|X___X___X___X___X___X___X___X___X|?|X___X___X___X___X___X___X___X___\_
|
76 | __________________________________________ ___________ ___________
|
77 | SDO - = RGIT \\\\\____________________/ \\\\\___________________/ \\\\\__________________-
|
78 |
|
79 | |?| = warten bis SDO ? wieder HIGH wird, bspw. per Interrupt
|
80 | */
|
81 | #define RFM12_command_WAKE 0b1110000000000000 // Zeitgeber für Wake-Up ;; radix ;; mantissa
|
82 | #define RFM12_command_LDC 0b1100100000000000 // Automatisch zyklischer Empfänger ;; Einschaltdauer während der zyklischen Einschaltung ;; Zyklische Einschaltung aktivieren
|
83 | #define RFM12_command_BDCD 0b1100000000000000 // Unterspannungs-Detektor und Taktausgangsteiler ;; Bestimmt den Teilungsfaktor für die Taktausgabe am CLK-Anschluss ;; Bestimmt die Betriebsspannung, bei der der RFM12 einen Unterspannungs-Interrupt auslöst.
|
84 | #define RFM12_command_STAT 0b0000000000000000 // Status lesen ;;
|
85 |
|
86 | #define RFM12_PWR_off RFM12_command (RFM12_command_PWR | 0b00000001); //Deaktiviert die Ausgabe des Taktes auf dem CLK Ausgang (1 = LOW)
|
87 | #define RFM12_TX_on RFM12_command (RFM12_command_PWR | 0b00111001); //Sendertrakt komplett einschalten ;; PLL-Synthesizer einschalten ;; Quarz-Oszillator ein
|
88 | #define RFM12_TX_off RFM12_command (RFM12_command_PWR | 0b00000001);
|
89 | #define RFM12_RX_on RFM12_command (RFM12_command_PWR | 0b11011001); //Empfänger-Trakt komplett einschalten ;;Basisband-Empfangsteil einschalten ;; Synth ;; quartz
|
90 | #define RFM12_RX_off RFM12_command (RFM12_command_PWR | 0b00011001);
|
91 | #define RFM12_FIFO_on RFM12_command (RFM12_command_FFRM | 0b10000011); //8 Bit Füllstand (Interrupt bei vollem Byte) ;; FIFO freigeben ;; Abschalten des Power-On-Resets
|
92 | #define RFM12_FIFO_off RFM12_command (RFM12_command_FFRM | 0b10000001); //8 Bit Füllstand ;; Abschalten Power-On-Reset
|
93 | #define RFM12_AFC_on RFM12_command (RFM12_command_AFC | 0b01000011); //Automatische Frequenznachregelung ;; Modus der AFC-Schaltung ( 10 = Solange VDI low ist) ;; AFC-Offset freischalten ;; AFC-Berechnung aktivieren
|
94 | #define RFM12_AFC_off RFM12_command (RFM12_command_AFC | 0b01000010); //Automatische Frequenznachregelung ;; Modus der AFC-Schaltung ( 10 = Solange VDI low ist) ;; AFC-Offset freischalten
|
95 |
|
96 | void RFM12_init (); // Modul initialisieren
|
97 | unsigned int RFM12_command (unsigned int cmd); //
|
98 | void RFM12_send (unsigned int byte); // Senden
|
99 | unsigned int RFM12_receive (); // Empfangen
|
100 |
|
101 | /* Ursprungscode
|
102 | void RFM12_send (unsigned char byte); // Senden
|
103 | unsigned char RFM12_receive (); // Empfangen
|
104 | */
|
105 |
|
106 | #endif /* RFM12_H_ */
|