Hallo,
ich glaube ich stehe auf'm Schlauch. Ich habe eine Funkstrecke mit der
Routine von Benedikt aufgebaut und sie funktioniert auch soweit. Jetzt
möchte ich die empfangenen Daten aber nicht per UART ausgeben, sondern
sie auf einem LCD-Modul anzeigen lassen. Hier mein Code:
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | #include <avr/pgmspace.h>
|
4 | #include <avr/eeprom.h>
|
5 | #include <stdlib.h>
|
6 | #include "portbits.h"
|
7 | #include "global.h"
|
8 | #include "uart.h"
|
9 | #include "rf12.h"
|
10 | #include "lcd-routines.h"
|
11 | #define F_CPU 10000000UL
|
12 | #include <util/delay.h>
|
13 |
|
14 | #define RF_BAUDRATE 15000 // Baudrate des RFM12
|
15 |
|
16 | unsigned char data[128];
|
17 | unsigned char tdiv=30;
|
18 |
|
19 | int main(void)
|
20 | { PORTB=1;
|
21 | PORTD=31;
|
22 | DDRC=63;
|
23 | DDRD=238;
|
24 |
|
25 | sei();
|
26 |
|
27 | lcd_init();
|
28 | rf12_init(); // RF12 + IO Ports initialisieren
|
29 | uart_init(UART_BAUD_SELECT(9600, F_CPU));
|
30 | rf12_config(RF_BAUDRATE, RF12FREQ(433.92), 0, QUIET); // Baudrate, Frequenz, Leistung (0=max, 7=min), Umgebungsbedingungen (QUIET, NORMAL, NOISY)
|
31 | rf12_rxmode(); // Empfang starten
|
32 | uart_puts("123");
|
33 | lcd_string("test");
|
34 | for (;;)
|
35 | {
|
36 |
|
37 | check_rx_packet(); // interne Empfangsroutine, muss periodisch aufgerufen werden
|
38 |
|
39 | if (rx_data_in_buffer()) // Daten empfangen?
|
40 | { unsigned char count, i;
|
41 | count=rx_data(data);
|
42 | for (i=0; i<count; i++) // Empfangs Beispiel
|
43 |
|
44 | {
|
45 | uart_putc(data[i]);
|
46 | lcd_data(data[i]);
|
47 | }
|
48 |
|
49 |
|
50 | }
|
51 |
|
52 |
|
53 | if (uart_data()) // Sende Beispiel 1: UART Daten senden
|
54 | { data[0]=uart_getchar();
|
55 | uart_putc(tx_data(data,1)); // 1Byte Daten senden, Rückantwort ob Daten zugestellt wurden (0 = OK, 1 = Fehlgeschlagen)
|
56 |
|
57 | }
|
58 |
|
59 | if (secflag) // 1Hz
|
60 | { secflag=0;
|
61 | if (!--tdiv) // Sende Beispiel 2: Daten im 30s Takt senden
|
62 | { tdiv=30;
|
63 | data[0]=123;
|
64 | tx_data(data,1); // 1Byte Daten senden
|
65 | }
|
66 | }
|
67 | }
|
68 | }
|
Wenn ich wie am Anfang 'lcd_string("test");' sende wird es auf dem
Display auch wunderbar angezeigt, jedoch kommt über den Befehl:
'lcd_data(data[i]);' nur wirres zeug auf dem Display an und nicht die
übertragenen Daten.
Kann mir bitte mal Jemand einen Stups geben?
Danke