Hi erstmal, bin noch ganz neu im Forum und auch Anfänger in Sachen Mikrocontroller, leider hab ich gemerkt dass dieses Forum scheinbar seine Sensibilität für Anfänger verloren hat, ich stell euch trotzdem mein Anliegen. Ich hab mir für die RFM12 Module den Code von Julian Portik auf http://www.julian-portik.de geholt und hab versucht ihn auf meine 868 Mhz Module umzuschreiben. Generell hab ich mich an den Aufbauplan im Anhang gehalten, außer dem ISP zum Pc, stattdessen wollte ich ein einfaches Signal schicken, der anstatt einer grün leuchtenden LED eine rote leuchten lässt. Hab versucht mir den Code so weit ich konnte zu kommentieren, aber bin leider an einem Punkt wo ich nicht weiter komme. Beide Schaltungen habe ich mit getrennten Spannungsversorgungen aufgebaut, die uC´s laufen mit 5 V, die RFMs mit 3,3V. Leider funktioniert es bei mir nicht, ich kann aber auch nicht sagen woran es liegt, möglich wäre: 1. Falsche Initialisierung der RFMs (868, anstatt 433 MHZ) weiß leider nicht genau, auf was es alles ankommt, hab mit Funk keine Erfahrung 2. Code ist falsch für den uC ausgelegt, im Bspl.Code wurde ein ATmega8 verwendet, ich versuch es mit einem ATmega16 3. Mein Code ist einfach falsch aufgebaut. Ich hab die RFM12_send Funktion verändert, in ein int, weiß nicht ob das richtig ist, weiß auch gar nicht ob der Code prinzipiell richtig aufgebaut ist für das Umschalten auf die rote LED... Ich verstehe auch nicht ganz was der main.h Header macht .. Ich hoffe es könnte sich jemand die Zeit nehmen sich mein Problem vielleicht mal anzuschauen. Vielen Dank im Vorraus! Ursprungscode stammt von Julian Portik RFM12.h
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_ */ |
main.h
1 | #ifndef MAIN_H_
|
2 | #define MAIN_H_
|
3 | |
4 | #define set_bit(var, bit) ((var) |= (1 << (bit)))
|
5 | #define clear_bit(var, bit) ((var) &= (unsigned)~(1 << (bit)))
|
6 | |
7 | //#define loop_until_bit_is_set(sfr, bit) do { } while (!check_bit(sfr, bit))
|
8 | //#define loop_until_bit_is_clear(sfr, bit) do { } while (check_bit(sfr, bit))
|
9 | |
10 | int check_bit (unsigned int Port_Pin, unsigned int Port_Bit) |
11 | |
12 | {
|
13 | |
14 | if ( Port_Pin & ( 1 << Port_Bit ) ) |
15 | {
|
16 | return 1; |
17 | }
|
18 | |
19 | else
|
20 | |
21 | {
|
22 | return 0; |
23 | }
|
24 | |
25 | }
|
26 | |
27 | |
28 | #endif /* MAIN_H_ */ |
Code fuer Sender
1 | #define F_CPU 4000000L
|
2 | |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | #include "RFM12.h" |
6 | #include "main.h" |
7 | |
8 | // CODE FUER TESTSENDER
|
9 | |
10 | void RFM12_init () // Modul initialisieren |
11 | {
|
12 | RFM12_SEL_off (); |
13 | RFM12_SDI_on (); |
14 | RFM12_SCK_off (); |
15 | |
16 | set_bit (RFM12_SEL_dir, RFM12_SEL_bit); // SEL = Output ;; (DDRD , 3) |
17 | set_bit (RFM12_SDI_dir, RFM12_SDI_bit); // SDI = Output ;; (DDRC , 5) |
18 | clear_bit (RFM12_SDO_dir, RFM12_SDO_bit); // SDO = Input ;; (DDRC , 2) |
19 | set_bit (RFM12_SCK_dir, RFM12_SCK_bit); // SCK = Output ;; (DDRD , 2) |
20 | |
21 | clear_bit (RFM12_IRQ_dir, RFM12_IRQ_bit); // IRQ = Input ;; (DDRC , 3) |
22 | |
23 | RFM12_PWR_off; //Deaktiviert die Ausgabe des Taktes auf dem CLK Ausgang (1 = LOW) |
24 | |
25 | RFM12_command (RFM12_command_FREQ | 400); // Frequenzsteuerbyte ;; Frequenz festgelegt auf 862 MHZ (siehe Formel) |
26 | RFM12_command (RFM12_command_DTRT | 36); // Datenrate 9600 kbps |
27 | RFM12_command (RFM12_command_CONF | 0b11101000); // Modul initialisieren ;; Latch ein ;; Puffer ein ;; 868 MHZ ;; Ballastkondensator 12,5pF |
28 | RFM12_command (RFM12_command_RXCT | 0b10010100000); // Empfänger konfigurieren |
29 | RFM12_command (RFM12_command_DFLT | 0b10101100); // Empfangsdatenrekonstruktion |
30 | RFM12_command (RFM12_command_TXCC | 0b001010000); // Sender konfigurieren |
31 | RFM12_command (RFM12_command_PWR | 0b11111000); // Komponentenauswahl |
32 | |
33 | RFM12_FIFO_on; //FIFO einschalten |
34 | RFM12_AFC_on; //Automatische Frequenzkontrolle einschalten |
35 | RFM12_command (RFM12_command_STAT); //Statusregister einmal abfragen (bei manchen Revisionen wohl notwendig) |
36 | }
|
37 | |
38 | unsigned int RFM12_command (unsigned int command) |
39 | {
|
40 | unsigned int serial_data = 0; |
41 | |
42 | RFM12_SEL_on (); //SELECT-Leitung für das Modul einschalten |
43 | |
44 | for (unsigned char i = 0; i < 16; i++) //Jedes Bit mit dieser Schleife übertragen |
45 | {
|
46 | if (command & 0x8000) //Alle Bits bis auf das Vorderste ausblenden und bei 1 SDI einschalten |
47 | |
48 | RFM12_SDI_on (); |
49 | |
50 | else
|
51 | |
52 | RFM12_SDI_off (); |
53 | |
54 | command <<= 1; //Alle Bits nach links schieben |
55 | |
56 | RFM12_SCK_on (); //SCK ein |
57 | |
58 | serial_data <<= 1; |
59 | if (check_bit(RFM12_SDO_pin, RFM12_SDO_bit)) //Kommen Daten vom Modul zurück? (z.B. bei Statusregister oder Empfängerabfrage) |
60 | |
61 | serial_data |= 0x0001; |
62 | _delay_us(1); |
63 | |
64 | RFM12_SCK_off (); //SCK aus |
65 | }
|
66 | |
67 | RFM12_SEL_off (); //Alle 16 bit übertragen / empfangen, SELECT Leitung ausschalten |
68 | |
69 | return serial_data; //Falls etwas vom Modul zurück gegeben wurde, liefert die Funktion die Daten zurück |
70 | }
|
71 | |
72 | void RFM12_send (unsigned int senden) //geändert von char senden |
73 | {
|
74 | loop_until_bit_is_clear (RFM12_IRQ_pin, RFM12_IRQ_bit); //Warten, bis Sender bereit |
75 | RFM12_command (RFM12_command_TXRW | senden); //Daten an das Modul senden |
76 | }
|
77 | |
78 | unsigned int RFM12_receive () //geändert von char |
79 | {
|
80 | loop_until_bit_is_clear (RFM12_IRQ_pin, RFM12_IRQ_bit); //Auf Daten warten |
81 | RFM12_command (RFM12_command_STAT); //Daten auslesen |
82 | return RFM12_command (RFM12_command_RXFR) & 0x00FF; //Daten zurückgeben |
83 | }
|
84 | |
85 | int main(void) |
86 | {
|
87 | _delay_ms(250); //Kurz warten mind. 100 ms laut Datenblatt bis uC bereit |
88 | RFM12_init(); //Modul initialisieren |
89 | _delay_ms(250); |
90 | RFM12_init(); // Doppelt initialisieren |
91 | |
92 | uint8_t led = 0xFF; |
93 | while(1) |
94 | {
|
95 | RFM12_command (RFM12_command_STAT); //Kurz Statusregister abfragen |
96 | RFM12_TX_on; //Sendetrakt einschalten |
97 | |
98 | RFM12_send (0xAA); //Taktregenerierung erleichtern 0xAA entspricht 10101010 damit hoher Flankenwechsel |
99 | RFM12_send (0xAA); //Taktregenerierung erleichtern |
100 | RFM12_send (0xAA); //Taktregenerierung erleichtern |
101 | RFM12_send (0x2D); //Synchronmuster (0x2DD4) |
102 | RFM12_send (0xD4); //Synchronmuster .. |
103 | |
104 | //######################## Test ###############################
|
105 | |
106 | |
107 | RFM12_send (led) ; |
108 | |
109 | // led = (led << 1) ;
|
110 | |
111 | // if (led == 0xFF)
|
112 | // led = 0x01;
|
113 | loop_until_bit_is_clear (RFM12_IRQ_pin, RFM12_IRQ_bit); |
114 | |
115 | //######################## Ende ###############################
|
116 | |
117 | /* Eigentlicher Programmcode
|
118 | RFM12_send (0x41); //Eigentliches Datenbyte
|
119 | loop_until_bit_is_clear (RFM12_IRQ_pin, RFM12_IRQ_bit); //Warten, bis der Sendevorgang abgeschlossen ist
|
120 | //loop_until.. vor neuem Sendevorgang abgeben
|
121 | Ende
|
122 | */
|
123 | |
124 | _delay_ms(10); //Nochmal kurz warten |
125 | RFM12_TX_off; //Sendetrakt ausschalten |
126 | _delay_ms (1000); |
127 | }
|
128 | }
|
Code fuer Empfaenger
1 | #define F_CPU 4000000L
|
2 | |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | #include "RFM12.h" |
6 | #include "main.h" |
7 | |
8 | // CODE FÜR TESTEMPFÄNGER
|
9 | |
10 | #define BAUD 9600L
|
11 | |
12 | #define UBRR_VAL ((F_CPU+BAUD * 8)/(BAUD*16)-1) //clever runden
|
13 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) //reale Baudrate
|
14 | |
15 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) //Fehler in Promille
|
16 | |
17 | #if ((BAUD_ERROR>10)||(BAUD_ERROR<-10))
|
18 | #error Systematischer Fehler in der Baudrate größer 1% und damit zu hoch!
|
19 | #endif
|
20 | |
21 | |
22 | |
23 | void RFM12_init () |
24 | {
|
25 | RFM12_SEL_off (); |
26 | RFM12_SDI_on (); |
27 | RFM12_SCK_off (); |
28 | |
29 | set_bit (RFM12_SEL_dir, RFM12_SEL_bit); // SEL = Output |
30 | set_bit (RFM12_SDI_dir, RFM12_SDI_bit); // SDI = Output |
31 | clear_bit (RFM12_SDO_dir, RFM12_SDO_bit); // SDO = Input |
32 | set_bit (RFM12_SCK_dir, RFM12_SCK_bit); // SCK = Output |
33 | |
34 | clear_bit (RFM12_IRQ_dir, RFM12_IRQ_bit); // IRQ = Input |
35 | |
36 | RFM12_PWR_off; //Deaktiviert die Ausgabe des Taktes auf dem CLK Ausgang (1 = LOW) |
37 | RFM12_command (RFM12_command_FREQ | 400); // Frequenzsteuerbyte ;; Frequenz festgelegt auf 862 MHZ (siehe Formel) |
38 | RFM12_command (RFM12_command_DTRT | 36); // Datenrate 9600 kbps |
39 | RFM12_command (RFM12_command_CONF | 0b11101000); // Modul initialisieren ;; Latch ein ;; Puffer ein ;; 868 MHZ ;; Ballastkondensator 12,5pF |
40 | RFM12_command (RFM12_command_RXCT | 0b10010100000); // Empfänger konfigurieren |
41 | RFM12_command (RFM12_command_DFLT | 0b10101100); // Empfangsdatenrekonstruktion |
42 | RFM12_command (RFM12_command_TXCC | 0b001010000); // Sender konfigurieren |
43 | RFM12_command (RFM12_command_PWR | 0b11111000); // Komponentenauswahl |
44 | |
45 | RFM12_FIFO_on; //FIFO einschalten |
46 | RFM12_AFC_on; //Automatische Frequenzkontrolle einschalten |
47 | RFM12_command (RFM12_command_STAT); //Statusregister einmal abfragen (bei manchen Revisionen wohl notwendig) |
48 | }
|
49 | |
50 | unsigned int RFM12_command (unsigned int command) |
51 | {
|
52 | unsigned int serial_data = 0; |
53 | |
54 | RFM12_SEL_on (); |
55 | |
56 | for (unsigned char i = 0; i < 16; i++) |
57 | {
|
58 | |
59 | if (command & 0x8000) RFM12_SDI_on (); else RFM12_SDI_off (); |
60 | command <<= 1; |
61 | |
62 | RFM12_SCK_on (); |
63 | |
64 | serial_data <<= 1; |
65 | if (check_bit(RFM12_SDO_pin, RFM12_SDO_bit)) serial_data |= 0x0001; |
66 | _delay_us(1); |
67 | RFM12_SCK_off (); |
68 | }
|
69 | |
70 | RFM12_SEL_off (); |
71 | |
72 | return serial_data; |
73 | }
|
74 | |
75 | void RFM12_send (unsigned int senden) //geändert von char |
76 | {
|
77 | loop_until_bit_is_clear (RFM12_IRQ_pin, RFM12_IRQ_bit); //wait for previously TX over |
78 | RFM12_command (RFM12_command_TXRW | senden); |
79 | }
|
80 | |
81 | unsigned int RFM12_receive () // geändert von Char |
82 | {
|
83 | loop_until_bit_is_clear (RFM12_IRQ_pin, RFM12_IRQ_bit); //wait for data |
84 | RFM12_command (RFM12_command_STAT); |
85 | return RFM12_command (RFM12_command_RXFR) & 0x00FF; |
86 | }
|
87 | |
88 | int main(void) |
89 | {
|
90 | int Puffer_led = 0x00 ; |
91 | |
92 | UBRRH = UBRR_VAL >> 8; |
93 | UBRRL = UBRR_VAL & 0xFF; |
94 | UCSRB = (1<<RXEN)|(1<<TXEN); //UART TX einschalten |
95 | UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); //Asynchron 8N1 |
96 | |
97 | _delay_ms(250); |
98 | RFM12_init(); |
99 | _delay_ms(250); |
100 | RFM12_init(); |
101 | |
102 | // Von mir verschoben
|
103 | /*
|
104 | RFM12_RX_on;
|
105 | RFM12_FIFO_off;
|
106 | RFM12_FIFO_on;
|
107 | */
|
108 | // ende
|
109 | |
110 | //PORTA Ausgang und Ausgeschaltet
|
111 | DDRA = 0xFF; |
112 | PORTA = 0x00; |
113 | |
114 | while(1) |
115 | {
|
116 | while (!(UCSRA & (1<<UDRE))){} //warten bis Senden möglich ###### Ausgabe an serieller schnittstelle ###### |
117 | |
118 | |
119 | // ursprünglich hier
|
120 | RFM12_RX_on; |
121 | RFM12_FIFO_off; |
122 | RFM12_FIFO_on; |
123 | //
|
124 | Puffer_led = RFM12_receive(); |
125 | |
126 | if (Puffer_led < 15) |
127 | {
|
128 | PORTA = 0b00000001; |
129 | }
|
130 | else
|
131 | {
|
132 | PORTA = 0b00000010; |
133 | }
|
134 | |
135 | // UDR = RFM12_receive(); //Empfangenes Bit auf die Schnittstelle schreiben
|
136 | |
137 | RFM12_FIFO_off; |
138 | RFM12_RX_off; |
139 | |
140 | }
|
141 | }
|