Forum: Mikrocontroller und Digitale Elektronik RFM12 und LCD - Problem


von Dennis S. (dennnis)


Lesenswert?

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

von Kurt (Gast)


Lesenswert?

Dennis Scholz schrieb:

> 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

Hallo Dennis, sind deine Daten in "ASCII" gewandelt bevor du sie ans 
Display schickst!


Gruss Kurt

von Kurt (Gast)


Lesenswert?

Hallo Leute, weils gerade passt.

Ich möchte auch diese HF-Module nutzen, habe aber von C keine Ahnung.
BASCOM wäre das richtige!

Gibt es irgendwo eine Sammlung von Tips und Sonstigem wo die RFM12 und 
AVR's unter BASCOM für Abundzuprogrammierer wie mich dargelegt werden?


Kurt

von Dennis S. (dennnis)


Lesenswert?

>
> Hallo Dennis, sind deine Daten in "ASCII" gewandelt bevor du sie ans
> Display schickst!


Hallo Kurt,
meines Erachtens brauche ich das bei der Funktion LCD_data nicht, die 
erledigt das, ähnlich wie die uart_putc.

Ich glaube es liegt an was anderem, denn wenn ich innerhalb der 
for-Schleife das gleiche: lcd_string("Test"); sende, dann kommt 
ebenfalls nur Datenmüll auf dem Display raus....hmm....



Viel schlimmer ist eigentlich das das Funkmodul regelmäßig abstürzt und 
nur über einen Hardware-Reset wieder zu aktivieren ist, nicht mal Strom 
abstellen hilft. Aber das nur by-the-way...

von Kurt (Gast)


Lesenswert?

Dennis Scholz schrieb:

Vielleicht bist du auch nur zu schnell mit der Ausgabe ans Display und 
den HF-Teil.
Sende mal nur Daten die dem (sichtbarem) SACII-Satz entsprechen.
Z.B 49, 50, 51
Wenn dann die Zahlen 123 sichtbar werden dann ists eine 
Darstellungssache.

Für Hänger gibts viele Ursachen, sind deine Bausteine/Baugruppen 
untereinander ausreichend entkoppelt?


Kurt

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.