Forum: Mikrocontroller und Digitale Elektronik ATmega32 und RFM12


von Jens K. (mister232)


Lesenswert?

Hallo Leute,

ich habe mir mal zwei Funkmodule (RFM12) von Pollin gekauft (433 MHz 
Variante) und wollte nun Daten zwischen zwei ATmega32 austauschen 
lassen. Ich habe folgenden Programmcode:

Für den Sender:
1
/*
2
 * RFM12_Transmitter.c
3
 *
4
 * Created: 10.02.2014 15:15:02
5
 *  Author: Jens
6
 */
7
8
#define F_CPU 8000000UL
9
10
#include <avr/io.h>
11
#include <util/delay.h>
12
13
void init_SPI(void)
14
{
15
  // Outputs: SSn, MOSI, SCK; Rest: inputs
16
  DDRB |= (1<<PB4) | (1<<PB5) | (1<<PB7);
17
    
18
  // Configure microcontroller as SPI-Master
19
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
20
}
21
22
// Function to write a command to the RFM12
23
unsigned int RF12_WRT_CMD(unsigned int aCmd)
24
{
25
  unsigned int temp;
26
  
27
  PORTB &= ~(1<<PB4);
28
  
29
  // Write high byte
30
  SPDR = (aCmd >> 8) & 0xff;
31
  while(!(SPSR & (1<<SPIF)));
32
  
33
  // Read high byte
34
  temp = SPDR;
35
  
36
  // Write low byte
37
  SPDR = aCmd & 0xff;
38
  while(!(SPSR & (1<<SPIF)));
39
  
40
  // Read low byte
41
  temp = (temp << 8) | SPDR;
42
  
43
  PORTB |= (1<<PB4);
44
  
45
  return(temp);
46
}
47
48
void init_RFM12(void)
49
{
50
  RF12_WRT_CMD(0x80D7); // EL, EF, 12.0 pF
51
  RF12_WRT_CMD(0x8239); // !er, !ebb, ET, ES, EX, !eb, !ew, DC
52
  RF12_WRT_CMD(0xA640); // A140 = 430.8 MHz
53
  RF12_WRT_CMD(0xC647); // 19.2 kbps
54
  RF12_WRT_CMD(0x94A0); // VDI, FAST, 134 kHz, 0 dBm, -103 dBm
55
  RF12_WRT_CMD(0xC2AC); // AL, !ml, DIG, DQD4
56
  RF12_WRT_CMD(0xCA81); // FIFO8, SYNC, !ff, DR
57
  RF12_WRT_CMD(0xC483); // @PWR, NO RSTRIC, !st, !fi, OE, EN
58
  RF12_WRT_CMD(0x9850); // !mp, 9810 = 30 kHz, MAX OUT
59
  RF12_WRT_CMD(0xE000); // Wakeup timer not used
60
  RF12_WRT_CMD(0xC800); // Duty-cyle not used
61
  RF12_WRT_CMD(0xC400); // 1.66 MHz CLK-Pin, 2.2 V Battery
62
}
63
64
int main(void)
65
{
66
  unsigned int result;
67
  unsigned int i;
68
  
69
  // Initialize LED-Pin as output
70
  DDRC |= (1<<PC0);
71
  // Initialize SPI-Port
72
  init_SPI();
73
  // Initialize RFM12
74
  init_RFM12();
75
  
76
    while(1)
77
    {
78
    // Check if the switch is pushed
79
        if(!(PIND & (1<<PD7)))
80
    {  
81
      // Start data-transmission to RFM12:
82
      result = 0x0000;
83
      // Read status register
84
      result = RF12_WRT_CMD(0x0000);
85
      
86
      if(result == 0x4000)
87
      {
88
        for(i = 0; i < 3; i++)
89
        {
90
          // Turn on LED
91
          PORTC |= (1<<PC0);
92
          _delay_ms(500);
93
          // Turn off LED
94
          PORTC &= ~(1<<PC0);
95
        }
96
        // !er, !ebb, ET, ES, EX, !eb, !ew, DC
97
        RF12_WRT_CMD(0x8239);
98
        _delay_ms(500);
99
        // Transmit preamble 3x
100
        SPDR = 0xAA;
101
        SPDR = 0xAA;
102
        SPDR = 0xAA;
103
        // Transmit high byte for frame detection
104
        SPDR = 0x2D;
105
        // Transmit low byte for frame detection
106
        SPDR = 0xD4;
107
      
108
        // Transmit user data
109
        RF12_WRT_CMD(0xB802);
110
      
111
        // Wait
112
        _delay_ms(500);
113
        // Stop transmission
114
        RF12_WRT_CMD(0x8201);
115
        // Wait
116
        _delay_ms(500);
117
      }
118
    }
119
    }
120
}

Für den Empfänger:
1
/*
2
 * RFM12_Test.c
3
 *
4
 * Created: 09.02.2014 15:55:08
5
 *  Author: Jens
6
 */ 
7
8
#define F_CPU 8000000UL
9
10
#include <avr/io.h>
11
#include <avr/interrupt.h>
12
#include <util/delay.h>
13
14
uint8_t start;
15
16
void init_SPI_Port(void)
17
{
18
19
  // Outputs: SSn, MOSI, SCK; Rest: inputs
20
  DDRB |= (1<<PB4) | (1<<PB5) | (1<<PB7);
21
  
22
  // Configure microcontroller as SPI-Master
23
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
24
}
25
26
unsigned int RF12_WRT_CMD(unsigned int aCmd)
27
{
28
  unsigned int temp;
29
  
30
  // SSn low
31
  PORTB &= ~(1<<PB4);
32
  
33
  // Write high byte
34
  SPDR = (aCmd >> 8) & 0xff;
35
  while(!(SPSR & (1<<SPIF)));
36
  
37
  // Read high byte
38
  temp = SPDR;
39
  
40
  // Write low byte
41
  SPDR = aCmd & 0xff;
42
  while(!(SPSR & (1<<SPIF)));
43
  
44
   // Read low byte
45
   temp = (temp << 8) | SPDR;
46
  
47
  // SSn high
48
  PORTB |= (1<<PB4);
49
  
50
  return(temp);
51
}
52
53
void RF12_INIT(void)
54
{
55
  RF12_WRT_CMD(0x80D7);//EL,EF,11.5pF
56
  RF12_WRT_CMD(0x82D9);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
57
  RF12_WRT_CMD(0xA640);//434MHz
58
  RF12_WRT_CMD(0xC647);//4.8kbps
59
  RF12_WRT_CMD(0x94A0);//VDI,FAST,134kHz,0dBm,-103dBm
60
  RF12_WRT_CMD(0xC2AC);//AL,!ml,DIG,DQD4
61
  RF12_WRT_CMD(0xCA81);//FIFO8,SYNC,!ff,DR
62
  RF12_WRT_CMD(0xC483);//@PWR,NO RSTRIC,!st,!fi,OE,EN
63
  RF12_WRT_CMD(0x9850);//!mp,9810=30kHz,MAX OUT
64
  RF12_WRT_CMD(0xE000);//NOT USE
65
  RF12_WRT_CMD(0xC800);//NOT USE
66
  RF12_WRT_CMD(0xC400);//1.66MHz,2.2V
67
  
68
  // Wait, so the RFM12 can start
69
  _delay_ms(3000);
70
}
71
72
unsigned char RF12_RECV(void)
73
{
74
  unsigned int FIFO_data;
75
  
76
  // Read status register
77
  RF12_WRT_CMD(0x0000);
78
  
79
  // Read data
80
  FIFO_data = RF12_WRT_CMD(0xB000);
81
  
82
  return(FIFO_data & 0x00FF);
83
}
84
85
int main(void)
86
{
87
  //Initialize command port
88
  init_SPI_Port();
89
  //Initialize RF12 chip
90
  RF12_INIT();
91
  // Init LED
92
  DDRD |= (1<<PD7);
93
  
94
  // Enable INT0
95
  GICR = (1<<INT0);
96
  // Triger INT0 on rising edge
97
  MCUCR = (1<<ISC01) | (1<<ISC00);
98
  
99
  // Global enable interrupts
100
  sei();
101
  
102
  start = 0;
103
  
104
  while(1)
105
  {
106
    if(start == 0)
107
    {
108
      RF12_WRT_CMD(0xCA81);//Initialize FIFO
109
      RF12_WRT_CMD(0xCA83);//Start FIFO
110
      start = 1;
111
    }
112
  }
113
}
114
115
ISR(INT0_vect)
116
{
117
  uint8_t i;
118
  
119
  for(i = 0; i < 3; i++)
120
  {
121
    // Turn on LED
122
    PORTD |= (1<<PD7);
123
    _delay_ms(300);
124
    // Turn off LED
125
    PORTD &= ~(1<<PD7);
126
  }
127
  
128
  // Receive data
129
  RF12_RECV();
130
  
131
  _delay_ms(1000);
132
  start = 0;
133
}

Ich wollte zunächst mal den Empfänger einfach nur blinken lassen wenn 
überhaupt irgendein Interrupt ausgelöst wird, es kommt also erstmal gar 
nicht darauf an was gesendet wird. Leider tut sich garnichts.

Könnt ihr mir weiterhelfen? Achja, die Atmegas's laufen mit 8 MHz 
externem Quarz.

von Jens K. (mister232)


Lesenswert?

Hat sich noch keiner mit dem RFM12 beschäfftigt?

von René K. (cyprius)


Lesenswert?

Jens K. schrieb:
> Hat sich noch keiner mit dem RFM12 beschäfftigt?

Nein, ich habe mich auch schon total darüber geärgert, dass man hier 
über die Suche absolut nichts zum RFM12 findet.

von Jens K. (mister232)


Lesenswert?

Ich wollt ja nur das mal jemand über den Code schaut. Die Beispiele im 
Forum hab ich mir ja auch schon angeschaut.

von Conny G. (conny_g)


Lesenswert?

Ist das mit dem INT bei Rising Edge richtig?
Ich bastle gerade an Assemblercode für RFM12 und habe im Kopf, dass das 
Falling gewesen sein könnte.

Und verkabelt ist es richtig? Schaltplan? Foto?

: Bearbeitet durch User
von Jens K. (mister232)


Lesenswert?

Verkabelt ist alles richtig

ATmega       RFM12
MOSI ------ SDI
MISO ------ SDO
SCK   ------ SCK
SSn   ------ nSEL
INT0 ------  nIRQ

Auf dem Oszi sehe ich auch das Daten ausgetauscht werden, doch leider 
ist mein Oszi schon ziemlich alt und hat Probleme mit der Triggerung, 
sodass ich die Packete nicht anschauen kann.

von Jens K. (mister232)


Lesenswert?

Bei Falling Edge ändert sich auch nichts.

von Jens K. (mister232)


Lesenswert?

Hat sonst noch jemand ne Idee?

von Conny G. (conny_g)


Lesenswert?

Ich habe jetzt die Initsequenzen etc. nicht genauer durchgearbeitet, 
suche gerade eher nach ersten offensichtlichen Dingen.

Und mir sind noch zwei Dinge aufgefallen:

1)
Nach Power On muss man dem RFM 150ms (?) Zeit geben zur Initialisierung 
bevor man SPI-Daten schickt.
Also vor dem InitRFM erstmal ein Delay einfügen.

2)
Ich erinnere mich, dass man unbedingt nach der Initsequenz das 
Statusregister lesen muss.

von Jens K. (mister232)


Lesenswert?

Okay, das mit dem Warten pribiere ich morgen mal aus. Nach dem init 
sende ich doch immer zunächst 0x0000 oder muss das sofort passieren?

von Conny G. (conny_g)


Lesenswert?

Ich glaube das muss sofort geschehen.

von Jens K. (mister232)


Lesenswert?

Ich habe mich hier im Forum noch ein wenig umgeschaut und festgestellt, 
dass das Datenblatt von Pollin scheinbar ziemlich falsch ist. Ich habe 
mir nun einen Programming Guide von Hope RF heruntergeladen und dort 
sind tatsächlich bei der Initialisierung einige Befehle anders. Der 
Programming Guide ist nun allerdings für einen RFM12B und nicht für 
einen RFM12, kann ich den Guide trotzdem verwenden?

von Christian P. (peterfrosta)


Lesenswert?

ich weiß nicht ob zu 100 % aber ja!
ich glaube die unterscheiden sich nur was die Betriebsspannung angeht.
Vllt dem entsprechend sind die Sende und Empfangsleitungen anders.
Ich hatte damals aber auch in dem Hope dingen gestöbert.
(allerdings 8xx MHz)

Ich weiß nicht wie du debuggst... ich hatte damals alle möglichen 
printf-ausgaben um zu sehen wo ich wann bin und wo es hängt...
das hat da für gesorgt, dass ich erst ein Jahr später mit dem erworbenen 
logic analyser bemerkte dass diese Zeitfresser schuld waren das nichts 
ging.
damals musste ich nur die printf alle entfernen und es funkte ^^

von Jens K. (mister232)


Lesenswert?

printf()'s habe ich nicht drin, aber ich habe nun einen Programming 
Guide für den RFM12 gefunden.
Leider funktioniert die Kommunikation immer noch nicht. Beim Empfänger 
wird einfach kein Interrupt ausgelöst, welcher signalisieren würde das 
Daten da sind. Nun weiß ich natürlich nicht ob überhaupt etwas gesendet 
wird und der Empfänger noch nicht richtig funktioniert oder ob der 
Sender schon nicht richtig arbeitet.

Ich poste hier nochmal meinen überarbeiteten Code, programmiert nach dem 
Guide von Hope:

Sender:
1
/*
2
 * RFM12_Transmitter.c
3
 *
4
 * Created: 10.02.2014 15:15:02
5
 *  Author: Jens
6
 */
7
8
#define F_CPU 8000000UL
9
10
#include <avr/io.h>
11
#include <util/delay.h>
12
13
void init_SPI(void)
14
{
15
  // Outputs: SSn, MOSI, SCK; Rest: inputs
16
  DDRB |= (1<<PB4) | (1<<PB5) | (1<<PB7);
17
    
18
  // Configure microcontroller as SPI-Master
19
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
20
}
21
22
// Function to write a command to the RFM12
23
unsigned int RF12_WRT_CMD(unsigned int aCmd)
24
{
25
  unsigned int temp;
26
  
27
  // SSn low
28
  PORTB &= ~(1<<PB4);
29
  
30
  // Write high byte
31
  SPDR = (aCmd >> 8) & 0xff;
32
  while(!(SPSR & (1<<SPIF)));
33
  
34
  // Read high byte
35
  temp = SPDR;
36
  
37
  // Write low byte
38
  SPDR = aCmd & 0xff;
39
  while(!(SPSR & (1<<SPIF)));
40
  
41
  // Read low byte
42
  temp = (temp << 8) | SPDR;
43
  
44
  // SSn high
45
  PORTB |= (1<<PB4);
46
  
47
  return(temp);
48
}
49
50
void init_RFM12(void)
51
{
52
  RF12_WRT_CMD(0x80D7); // EL, EF, 12.0 pF
53
  RF12_WRT_CMD(0x8239); // !er, !ebb, ET, ES, EX, !eb, !ew, DC
54
  RF12_WRT_CMD(0xA640); // A140 = 430.8 MHz
55
  RF12_WRT_CMD(0xC647); // 19.2 kbps
56
  RF12_WRT_CMD(0x94A0); // VDI, FAST, 134 kHz, 0 dBm, -103 dBm
57
  RF12_WRT_CMD(0xC2AC); // AL, !ml, DIG, DQD4
58
  RF12_WRT_CMD(0xCA81); // FIFO8, SYNC, !ff, DR
59
  RF12_WRT_CMD(0xC483); // @PWR, NO RSTRIC, !st, !fi, OE, EN
60
  RF12_WRT_CMD(0x9850); // !mp, 9810 = 30 kHz, MAX OUT
61
  RF12_WRT_CMD(0xE000); // Wakeup timer not used
62
  RF12_WRT_CMD(0xC800); // Duty-cyle not used
63
  RF12_WRT_CMD(0xC400); // 1.66 MHz CLK-Pin, 2.2 V Battery
64
}
65
66
int main(void)
67
{
68
  unsigned int i;
69
  
70
  // Initialize LED-Pin as output
71
  DDRC |= (1<<PC0);
72
  
73
  // Toggle LED 3 times
74
  for(i = 0; i < 3; i++)
75
  {
76
    // LED on
77
    PORTC |= (1<<PC0);
78
    // Wait
79
    _delay_ms(200);
80
    // LED off
81
    PORTC &= ~(1<<PC0);
82
    // Wait
83
    _delay_ms(200);
84
  }
85
  
86
  // Port for nIRQ (INT0)
87
  DDRD &= ~(1<<PD2);
88
  // Initialize SPI-Port
89
  init_SPI();
90
  // Initialize RFM12
91
  init_RFM12();
92
  
93
    while(1)
94
    {
95
    // Read status register
96
    RF12_WRT_CMD(0x0000);  
97
    // !er, !ebb, ET, ES, EX, !eb, !ew, DC
98
    RF12_WRT_CMD(0x8239);
99
      
100
    // Transmit preamble 3x
101
    // Wait for Tx done
102
    while(PIND & (1<<PD2));
103
    RF12_WRT_CMD(0xB8AA);
104
    // Wait for Tx done
105
    while(PIND & (1<<PD2));
106
    RF12_WRT_CMD(0xB8AA);
107
    // Wait for Tx done
108
    while(PIND & (1<<PD2));
109
    RF12_WRT_CMD(0xB8AA);
110
    
111
    // Transmit high byte for frame detection
112
    // Wait for Tx done
113
    while(PIND & (1<<PD2));
114
    RF12_WRT_CMD(0xB82D);
115
    // Transmit low byte for frame detection
116
    // Wait for Tx done
117
    while(PIND & (1<<PD2));
118
    RF12_WRT_CMD(0xB8D4);
119
    
120
    // Transmit user data
121
    // Wait for Tx done
122
    while(PIND & (1<<PD2));
123
    RF12_WRT_CMD(0xB802);
124
    
125
    // Transmit preamble 3x
126
    // Wait for Tx done
127
    while(PIND & (1<<PD2));
128
    RF12_WRT_CMD(0xB8AA);
129
    // Wait for Tx done
130
    while(PIND & (1<<PD2));
131
    RF12_WRT_CMD(0xB8AA);
132
    // Wait for Tx done
133
    while(PIND & (1<<PD2));
134
    RF12_WRT_CMD(0xB8AA);
135
      
136
    // Stop FIFO
137
    RF12_WRT_CMD(0x8201);
138
    // While waiting toggle LED
139
    for(i = 0; i < 5; i++)
140
    {
141
      // LED on
142
      PORTC |= (1<<PC0);
143
      // Wait
144
      _delay_ms(100);
145
      // LED off
146
      PORTC &= ~(1<<PC0);
147
      // Wait
148
      _delay_ms(100);
149
    }
150
    }
151
}

Empfänger:
1
/*
2
 * RFM12_Test.c
3
 *
4
 * Created: 09.02.2014 15:55:08
5
 *  Author: Jens
6
 */ 
7
8
#define F_CPU 8000000UL
9
10
#include <avr/io.h>
11
#include <avr/interrupt.h>
12
#include <util/delay.h>
13
14
uint8_t start;
15
16
void init_SPI_Port(void)
17
{
18
  // Outputs: SSn, MOSI, SCK; Rest: inputs
19
  DDRB |= (1<<PB4) | (1<<PB5) | (1<<PB7);
20
    
21
  // Configure microcontroller as SPI-Master
22
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
23
}
24
25
// Function to write a command to the RFM12
26
unsigned int RF12_WRT_CMD(unsigned int aCmd)
27
{
28
  unsigned int temp;
29
  
30
  // SSn low
31
  PORTB &= ~(1<<PB4);
32
  
33
  // Write high byte
34
  SPDR = (aCmd >> 8) & 0xff;
35
  while(!(SPSR & (1<<SPIF)));
36
  
37
  // Read high byte
38
  temp = SPDR;
39
  
40
  // Write low byte
41
  SPDR = aCmd & 0xff;
42
  while(!(SPSR & (1<<SPIF)));
43
  
44
  // Read low byte
45
  temp = (temp << 8) | SPDR;
46
  
47
  // SSn high
48
  PORTB |= (1<<PB4);
49
  
50
  return(temp);
51
}
52
53
void RF12_INIT(void)
54
{
55
  RF12_WRT_CMD(0x80D7);//EL,EF,11.5pF
56
  RF12_WRT_CMD(0x82D9);//!er,!ebb,ET,ES,EX,!eb,!ew,DC
57
  RF12_WRT_CMD(0xA640);//434MHz
58
  RF12_WRT_CMD(0xC647);//4.8kbps
59
  RF12_WRT_CMD(0x94A0);//VDI,FAST,134kHz,0dBm,-103dBm
60
  RF12_WRT_CMD(0xC2AC);//AL,!ml,DIG,DQD4
61
  RF12_WRT_CMD(0xCA81);//FIFO8,SYNC,!ff,DR
62
  RF12_WRT_CMD(0xC483);//@PWR,NO RSTRIC,!st,!fi,OE,EN
63
  RF12_WRT_CMD(0x9850);//!mp,9810=30kHz,MAX OUT
64
  RF12_WRT_CMD(0xE000);//NOT USE
65
  RF12_WRT_CMD(0xC800);//NOT USE
66
  RF12_WRT_CMD(0xC400);//1.66MHz,2.2V
67
}
68
69
unsigned char RF12_RECV(void)
70
{
71
  unsigned int FIFO_data;
72
  
73
  // Wait for IRQ
74
  while(PIND & (1<<PD2));
75
  
76
  // Read status register
77
  RF12_WRT_CMD(0x0000);
78
  
79
  // Read data
80
  FIFO_data = RF12_WRT_CMD(0xB000);
81
  
82
  return(FIFO_data & 0x00FF);
83
}
84
85
int main(void)
86
{
87
  uint8_t i;
88
  unsigned char data;
89
  
90
  // Init LED
91
  DDRD |= (1<<PD7);
92
  // Toggle LED 3 times
93
  for(i = 0; i < 3; i++)
94
  {
95
    // LED on
96
    PORTD |= (1<<PD7);
97
    // Wait
98
    _delay_ms(200);
99
    // LED off
100
    PORTD &= ~(1<<PD7);
101
    // Wait
102
    _delay_ms(200);
103
  }
104
  
105
  //Initialize command port
106
  init_SPI_Port();
107
  //Initialize RF12 chip
108
  RF12_INIT();
109
  
110
  // Input nIRQ (INT0)
111
  DDRD &= ~(1<<PD2);
112
  
113
  // Init FIFO
114
  RF12_WRT_CMD(0xCA81);
115
116
  while(1)
117
  {
118
    // Enable FIFO
119
    RF12_WRT_CMD(0xCA83);
120
    
121
    data = 0x00;
122
    
123
    // Receive data
124
    data = RF12_RECV();
125
    
126
    if(data != 0x00)
127
    {
128
      // Toggle LED 3 times
129
      for(i = 0; i < 3; i++)
130
      {
131
        // LED on
132
        PORTD |= (1<<PD7);
133
        // Wait
134
        _delay_ms(200);
135
        // LED off
136
        PORTD &= ~(1<<PD7);
137
        // Wait
138
        _delay_ms(200);
139
      }
140
    }
141
    
142
    // Disable FIFO
143
    RF12_WRT_CMD(0xCA81);
144
    
145
    _delay_ms(200);
146
  }
147
}

Ich habe nun schon so viele Beiträge zu diesem Thema hier im Forum 
gefunden, die mir aber leider nicht weitergeholfen habe. Es muss aber 
doch jemanden hier geben der mir weiterhelfen kann?

von Martin (Gast)


Lesenswert?

Hallo Jens,

hier ein paar Dinge, die mir beim Sender in der main() Funktion 
aufgefallen sind:
Wieso versendest du 2x 3 Preambles? Es reicht, wenn du 3 Preambles, dann 
das lower und higher Byte für frame detection sendest (also genau so wie 
du es auch am Anfang machst). Anschließend kommen die Datenbytes.
Die FIFO brauchst du hier nicht deaktivieren, da sie nur für das 
Empfangen benötigt wird.

Die Initialisierung scheint mir in Ordnung zu sein (ich habe an manchen 
Stellen andere Werte verwendet, aber die Befehle sind alle da :)

Beim Empfänger solltest du hier

// Read status register
  RF12_WRT_CMD(0x0000);

  // Read data
  FIFO_data = RF12_WRT_CMD(0xB000);

noch ein while(PIND & (1<<PD2)); schreiben bevor du die FIFO liest, 
ansonsten scheint hier alles in Ordnung zu sein.

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.