EA eDIPTFT43-ATP per RS-232 an Atmega32

Gast #2125419
Lesenswert?

Hi

>gibt es vll ein Tutorial oder ähnliches dafür ?

Datenblatt. An deiner Stelle würde ich erst mal einen RS232-Wandler 
(DAtenblatt S.23) dranhängen und die ersten Versuche vom PC aus machen.

MfG Spess
Gast #2125453
Lesenswert?

Hi

>Geht ohne probleme direkt am µC.
>Einfach TX -> RX und RX -> TX verbinden und Befehle mit der Uart senden.

Das weiss ich. Ich schrieb aber PC . Mir ging es darum, das er die 
ersten Ansteuerversuche mit dem PC macht. Und wenn er es verstanden hat 
mit dem ATMega weiter macht.

MfG Spess
(Firma: FHL) #2125553
Lesenswert?

für den PC hab ich das USB-Board.
Im Datenblatt steht als sende Beispiel:

1
voidSendData (unsingned char *buf, unsigned char len)
2
{
3
 unsigned char i, bcc;
4

5
 Sendbyte(0x11);                      //Send DC1
6
 bcc = 0x11;
7

8
 SendByte(len);                     // Send data length
9
 bcc = bcc + len;
10

11
 for(i=0; i < len; i++)             //Send buf
12
 { SendByte (buf[i]);
13
   bcc= bcc + buf[i];
14
  }
15

16
 Sendbyte (bcc);                  //Send checksum
17
}

Das hilft mir irgendwie nich ganz

len = ist die Datenlänge ?
bcc = ist die Prüfsumme?

was ist DC1?
Wo sind die eigentlichen Datenbytes?
#2132799
Lesenswert?

Hallo
Ich spreche das Teil über COM oder USB to Seriell Adapter an.
Mit meinem Primitivprogramm kann ich Strichgrafiken zeichnen und Buttons
Positionieren.
Befehle testen und senden.
Kleine Versuche speichern.
Für meine Zwecke reicht es.
Ich glaube nicht das du USB Ansteuerung und RS232 gleichzeitig nutzen 
kannst.
USB  ist in diesem Falle auch nur ein USB to seriell Adapter,..oder
MfG
Gast #2133107
Lesenswert?

Hi

>Willst du den Controller mit dem TFT direkt Verbinden,ohne Max232?

Wie sonst?

Datenblatt:

'Die Leitungen RxD und TxD führen 5V CMOS-Pegel zur direkten Anbindung 
an
z.B. einen Mikrokontoller.'

MfG Spess
Gast #2153078
Lesenswert?

Ich komme einfach nicht weiter, es passiert nix hier mal code:
1
#include <avr/io.h>           
2
#include <stdint.h>     
3
#include <stdio.h> 
4
#include <util/delay.h> 
5
      
6
 
7
void USART_init(void)    // Manual S. 148
8
  {
9
  
10

11
#ifndef F_CPU
12

13
#define F_CPU 4000000UL  // Systemtakt in Hz - Definition als unsigned long beachten 
14
                         // Ohne ergeben sich unten Fehler in der Berechnung
15
#endif
16
 
17
#define BAUD 115200UL      // Baudrate
18
 
19
// Berechnungen
20
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
21
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
22
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
23
 
24
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
25
  
26
#endif 
27
 
28
void uart_init(void)
29
{
30
  UCSRB = (1<<RXEN) | (1<<TXEN);  // UART TX einschalten
31
  UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
32
 
33
  UBRRH = UBRR_VAL >> 8;
34
  UBRRL = UBRR_VAL & 0xFF;
35
}
36
  /* enable Receiver und Transmitter:  */
37
  UCSRB = (1<<RXEN) | (1<<TXEN);
38
  // set frame format: 8 Dat - 2 Stopbits  
39
  UCSRC = (1<<URSEL) | (1<<USBS) | (1<<UCSZ1) | (1<<UCSZ0); 
40
  }
41

42

43
void USART_transmit (unsigned char data ) // Senden 
44
  {
45
  /* warte auf leeren Transmit-Puffer */
46
  while (! (UCSRA & (1<<UDRE)))        // wartet ewig?
47
  ;
48
  /* put date in the buffer, send the data */
49
  UDR = data;
50
  return;
51
  }
52

53
  
54
int main(void)
55
  {
56
  unsigned char data = 0x11;
57
   USART_init();
58
  USART_transmit(data);
59

60
  data = 0x01;
61
  USART_transmit(data);
62
  
63
  data = 'a';
64
  USART_transmit(data);
65
  
66

67
  return 0; 
68
  }
Gast #2153186
Lesenswert?

jetzt mit 9600 baud
1
#include <avr/io.h>           
2
#include <stdint.h>     
3
#include <stdio.h> 
4
#include <util/delay.h> 
5
      
6
 
7
void USART_init(void)    // Manual S. 148
8
  {
9

10
#ifndef F_CPU
11
/* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann
12
   F_CPU im Makefile definiert werden, eine nochmalige Definition
13
   hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch
14
   #ifndef/#endif 
15
 
16
   Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio 
17
   verwendet wird und dort eine andere, nicht zur Hardware passende 
18
   Taktrate eingestellt ist: Dann wird die folgende Definition 
19
   nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?) 
20
   von AVRStudio - daher Ausgabe einer Warnung falls F_CPU
21
   noch nicht definiert: */
22
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 8000000"
23
#define F_CPU 4000000UL  // Systemtakt in Hz - Definition als unsigned long beachten 
24
                         // Ohne ergeben sich unten Fehler in der Berechnung
25
#endif
26
 
27
#define BAUD 9600UL      // Baudrate
28
 
29
// Berechnungen
30
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
31
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
32
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
33
 
34
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
35
  
36
#endif 
37

38

39

40

41
/* UART-Init Bsp. ATmega16 */
42
 
43
void uart_init(void)
44
{
45
  UCSRB = (1<<RXEN) | (1<<TXEN);  // UART TX einschalten
46
  UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
47
 
48
  UBRRH = UBRR_VAL >> 8;
49
  UBRRL = UBRR_VAL & 0xFF;
50
}
51
  /* enable Receiver und Transmitter:  */
52
  UCSRB = (1<<RXEN) | (1<<TXEN);
53
  // set frame format: 8 Dat - 2 Stopbits  (wie N u. nur 1 Stopbit?
54
  UCSRC = (1<<URSEL) | (1<<USBS) | (1<<UCSZ1) | (1<<UCSZ0); 
55
  }
56

57

58
void USART_transmit (unsigned char data ) // Senden (Manual S. 149)
59
  {
60
  /* warte auf leeren Transmit-Puffer */
61
  while (! (UCSRA & (1<<UDRE)))        // wartet ewig?
62
  ;
63
  /* put date in the buffer, send the data */
64
  UDR = data;
65
  return;
66
  }
67

68
  
69
int main(unsigned char *buf, unsigned char len)
70
  {
71
   unsigned char data, i, bcc;
72
  data= 0x11;
73
  bcc= 0x11;
74
  USART_init();
75
  USART_transmit(data);
76

77
  data = 0x04;
78
  bcc=bcc+data;
79
  USART_transmit(data);
80
  
81
  data = '#';
82
  USART_transmit(data);
83
  
84
  
85
  data = 'Z';
86
  USART_transmit(data);
87
  
88

89
  data = 'T';
90
  USART_transmit(data);
91
  
92
  data = 'a';
93
  USART_transmit(data);
94

95
  for(i=0; i < len; i++) // Send buf
96
{ data=(buf[i]);
97
  USART_transmit(data);
98

99
bcc= bcc + buf[i];
100

101
}
102
  
103
data = bcc;
104
USART_transmit(data);
105
  
106
  return 0; 
107
  }
#2153498
Lesenswert?

Hallo

Ich weiss nicht genau, wo die Unterschiede zu meinem eDIPTFT43-A liegen,
aber Du kannst es sonst mal mit meinem Code versuchen.

ACHTUNG: Die Library ist für einen Luminary Cortex-M3 und benutzt deren 
Library. Du musst alle UART... Befehle und die Include Statements auf 
den ATmega anpassen. Mein Display läuft am UART1 des Cortex-M3 mit 
115200 Baud.

Nun hast zu zwei Varianten, entweder Du arbeitest im sog. Terminalmode
d.h. Du schreibst deinen Output einfach mit ediptft43_puts() an das
Display. Oder Du verwendest die Grafikbefehle und plazierst deinen
Text irgendwo auf dem Display.

main():
1
.... UART initialisieren....
2
ediptft43_puts("Entering Main-Loop....\r\n");
3
ediptft43_puts("Initializing UDP-get....\r\n");
4
....

oder über die Grafikbefehle:
1
.... UART initialisieren....
2
ediptft43_fontsel(4);
3
ediptft43_fontzoom(2,2);
4
ediptft43_fontcolor(6,0);
5
ediptft43_printxy(240,1,'C', "Text1");
6
ediptft43_fontcolor(8,0);
7
ediptft43_printxy(1,50,'L', "Text2:      Text3");
8
.....

Die Library ist noch sehr jung und unausgetestet. Sporadisch ändert sich 
der Font oder die Grösse, aber das liegt ev. am Rest meines Programs und 
nicht der Library ;-)

Daniel
Angehängte Dateien:
Gast #2159720
Lesenswert?

Hier nochmal der Code
das Display befindet sich im Terminal Mode mit einer Baudrate von 115200 
und das small Protokoll ist deaktiviert.
Ich möchte nur ein a Ausgeben.

1
#include <avr/io.h>           
2
#include <stdint.h>     
3
#include <stdio.h> 
4
#include <util/delay.h> 
5
      
6
 
7
void USART_init(void)   
8
  {
9
  
10

11
#ifndef F_CPU
12
/* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann
13
   F_CPU im Makefile definiert werden, eine nochmalige Definition
14
   hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch
15
   #ifndef/#endif 
16
 
17
   Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio 
18
   verwendet wird und dort eine andere, nicht zur Hardware passende 
19
   Taktrate eingestellt ist: Dann wird die folgende Definition 
20
   nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?) 
21
   von AVRStudio - daher Ausgabe einer Warnung falls F_CPU
22
   noch nicht definiert: */
23

24
#define F_CPU 4000000UL  // Systemtakt in Hz - Definition als unsigned long beachten 
25
                         // Ohne ergeben sich unten Fehler in der Berechnung
26
#endif
27
 
28
#define BAUD 115200L      // Baudrate
29
 
30
// Berechnungen
31
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
32
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
33

34

35

36

37
/* UART-Init Bsp. ATmega16 */
38
 
39
void uart_init(void)
40
{
41
  UCSRB = (1<<RXEN) | (1<<TXEN);  // UART TX einschalten
42
  UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
43
 
44
  UBRRH = UBRR_VAL >> 8;
45
  UBRRL = UBRR_VAL & 0xFF;
46
}
47
  /* enable Receiver und Transmitter:  */
48
  UCSRB = (1<<RXEN) | (1<<TXEN);
49
  // set frame format: 8 Dat - 2 Stopbits  (wie N u. nur 1 Stopbit?
50
  UCSRC = (1<<URSEL) | (1<<USBS) | (1<<UCSZ1) | (1<<UCSZ0); 
51
  }
52

53

54
  
55
int main(unsigned char *buf, unsigned char len)
56
  {
57
   unsigned char data, i, bcc;
58

59
  USART_init();
60
  data = '#';
61
  USART_transmit(data);
62
  
63
  
64
  data = 'Z';
65
  USART_transmit(data);
66
  
67

68
  data = 'T';
69
  USART_transmit(data);
70
  
71
  data = 'a';
72
  USART_transmit(data);
73

74

75
}


void USART_transmit (unsigned char data ) // Senden (Manual S. 149)
  {
  /* warte auf leeren Transmit-Puffer */
//  while (! (UCSRA & (1<<UDRE)))       // wartet ewig?
  ;
  /* put date in the buffer, send the data */
  UDR = data;
  return;
  }
#2160527
Lesenswert?

Du scheinst ziemlich renitent gegenüber jedwelchen Vorschlägen zu sein.

Hast Du Deine Schaltung (wie sieht die eigentlich aus ?) über einen 
Pegelwandler (max232 o.ä) auf die serielle Schnittstelle gehängt, und 
über ein Terminalprogram kontrolliert, ob der Code läuft ?

Beim Code bin ich auch nicht so sicher. Verschachtelte Funktionen 
( uart_init() innerhalb von USAR_init() ) finde ich nicht sehr 
übersichtlich. Bin nicht der C-Crack, aber mir ist das suspekt.

Habe mal mein Display an einen ATMega128 gehängt.
Einen ATMega32 habe ich nicht. Die Ports 17 und 8 am Display auf GND. 
Damit läuft das Ding mit 9600 Baud und ohne SmallProtocol. Mit 115200 
ist es auch bei mir nicht gelaufen, mein 16Mhz erzeugt dabei wohl zuviel 
Abweichung.

Für die UART Schnittstelle gibts die Library von Peter Fleury. Wenn das 
Ding mal läuft, kannst Du dir die Schnittstellenkonfiguration immer noch
rauspullen, und ohne die Library arbeiten.

Nach dem flashen erscheint bei mir auf dem Display:
1
EA eDIPTFT43-A V1.1 Rev.E TP+
2
a

Habe Dir die main.c und das Makefile für einen ATMega32 angepasst. 
Sollte so laufen.
1
// Includes 
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5

6
#define F_CPU 16000000L
7
#include <util/delay.h>
8

9
#include "uart.h" 
10

11
// Serielle Schnittstelle
12

13
#define UART1_BAUD 9600
14

15
int main(void)
16
{
17
  // Init UART1 with 9600 for Input 
18

19
  uart_init( UART_BAUD_SELECT(UART1_BAUD, F_CPU));
20

21
  // enable interrupts 
22

23
  sei();
24
  _delay_ms(1000);
25

26
  // Den Versionstring ausgeben
27
  uart_putc('#');
28
  uart_putc('T');
29
  uart_putc('V');
30

31
  // Linefeed und Carriagereturn
32
  uart_putc(0xa);
33
  uart_putc(0xd);
34

35
  // Den Buchstaben a
36
  uart_putc('#');
37
  uart_putc('Z');
38
  uart_putc('T');
39
  uart_putc('a');
40

41
  while(1)
42
  {
43
  }
44
}

Daniel
Gast #2161080
Lesenswert?

Danke!

ich habe das problem mit das ich garnix versende habe dein programm mit 
baud 9600 jetzt so übernommen und das stk500 board an die com 
schnitstelle gehängt um per hyperterminal zu gucken ob ich was versende 
doch leider bekomme ich nix.

mach ich da schonwieder etwas falsch?

das sende vom hyperterminal zum display funktioniert aber schonmal.
Gast #2161202
Lesenswert?

Also Ich hab ja einen Atmega8 mit 4Mhz
Die Baudrate ist auf 9600
Dann ist am RS232 Spare vom Stk500 ein RS232 auf USB adapter dran und 
über Hyperterminal ruf ich den (com3) auf.

nun sollte er mir das doch eigentlich auf dem Bildschirm auswerfen oder 
nicht?


1
// Includes 
2

3

4

5
#include <avr/io.h>
6

7
#include <avr/interrupt.h>
8

9

10

11
#define F_CPU 4000000L
12

13
#include <util/delay.h>
14

15

16

17
#include "uart.h" 
18

19

20

21
// Serielle Schnittstelle
22

23

24

25
#define UART1_BAUD 9600
26

27

28

29
int main(void)
30

31
{
32

33
  // Init UART1 with 9600 for Input 
34

35

36

37
  uart_init( UART_BAUD_SELECT(UART1_BAUD, F_CPU));
38

39

40

41
  // enable interrupts 
42

43

44

45
 sei();
46

47
  _delay_ms(1000);
48

49

50

51
  // Den Versionstring ausgeben
52

53
  uart_putc('#');
54

55
  uart_putc('T');
56

57
  uart_putc('V');
58

59

60

61
  // Linefeed und Carriagereturn
62

63
  uart_putc(0xa);
64

65
  uart_putc(0xd);
66

67

68

69
  // Den Buchstaben a
70

71
  uart_putc('#');
72

73
  uart_putc('Z');
74

75
  uart_putc('T');
76

77
  
78
  uart_putc('b');
79

80

81

82
  while(1)
83

84
  {
85

86
  }
87

88
}
Gast #2161217
Lesenswert?

Hi

>Also Ich hab ja einen Atmega8 mit 4Mhz

Hoffentlich mit einem Quarz.

>Dann ist am RS232 Spare vom Stk500 ein RS232 auf USB adapter dran und
>über Hyperterminal ruf ich den (com3) auf.

Und Spare auch am Controller (PD0/PD1) angeschlossen?

MfG Spess
Gast #2161224
Lesenswert?

spess53 schrieb:
> Hi
>
>>Also Ich hab ja einen Atmega8 mit 4Mhz
>
> Hoffentlich mit einem Quarz.
>
ja


>>Dann ist am RS232 Spare vom Stk500 ein RS232 auf USB adapter dran und
>>über Hyperterminal ruf ich den (com3) auf.
>
> Und Spare auch am Controller (PD0/PD1) angeschlossen?
>
ja
Gast #2164029
Lesenswert?

So da bin ich wieder...
es funktioniert die Verbindung von STK500 zu PC (Hyperterminal)

und es funktioniert die verbindung von PC (Hyperterminal) zum Display

ich bekomme auf dem hyperterminal momentan #TV (Linefeed und 
Carriagereturn) a angezeit

und wenn ich das so vom pc zum display sende zeigt er mir das die 
displayversion (Linefeed und Carriagereturn) und ein a an.

nur wenn ich das display an den RS232 Spare vom STK500 hänge bekomme ich 
irgendwelche kryptischen zeichen.

es funzt sowohl der code von Daniel B. (danke nochmal) als auch der 
hier:
1
#include <avr/io.h>           
2
#include <stdint.h>     
3
#include <stdio.h> 
4
#include <util/delay.h> 
5
      
6
  
7

8
#ifndef F_CPU
9
/* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann
10
   F_CPU im Makefile definiert werden, eine nochmalige Definition
11
   hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch
12
   #ifndef/#endif 
13
 
14
   Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio 
15
   verwendet wird und dort eine andere, nicht zur Hardware passende 
16
   Taktrate eingestellt ist: Dann wird die folgende Definition 
17
   nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?) 
18
   von AVRStudio - daher Ausgabe einer Warnung falls F_CPU
19
   noch nicht definiert: */
20
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 8000000"
21
#define F_CPU 4000000UL  // Systemtakt in Hz - Definition als unsigned long beachten 
22
                         // Ohne ergeben sich unten Fehler in der Berechnung
23
#endif
24
 
25
#define BAUD 2400UL      // Baudrate
26
 
27
// Berechnungen
28
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
29
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
30
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
31
 
32
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
33
  
34
#endif 
35

36
void uart_init(void);
37
void USART_transmit (unsigned char data );
38

39
/* UART-Init Bsp. ATmega16 */
40
 
41
void uart_init(void)
42
{
43
  UCSRB = (1<<RXEN) | (1<<TXEN);  // UART TX einschalten
44
  UCSRC |= (1<<URSEL)|(1<<USBS) | (1<<UCSZ1) | (1<<UCSZ0);  // Asynchron 8N1 
45
 
46
  UBRRH = UBRR_VAL >> 8;
47
  UBRRL = UBRR_VAL & 0xFF;
48
}
49
  /* enable Receiver und Transmitter:  */
50
 // UCSRB = (1<<RXEN) | (1<<TXEN);
51
  // set frame format: 8 Dat - 2 Stopbits  (wie N u. nur 1 Stopbit?
52
  //UCSRC = (1<<URSEL) | (1<<USBS) | (1<<UCSZ1) | (1<<UCSZ0); 
53
 // }
54
  
55
int main(void)
56
{
57
  unsigned char data;
58
  int i=0;
59

60
  if(i<5)
61
  {
62
    //  data= 0x11;
63
    //  bcc= 0x11;
64
    uart_init();
65
    //  USART_transmit(data);
66

67
    //  data = 0x04;
68
    //  bcc=bcc+data;
69
    //  USART_transmit(data);
70

71

72
     data = '#';
73
    USART_transmit(data);
74

75
    data = 'T';
76
    USART_transmit(data);
77

78

79
    data = 'V';
80
    USART_transmit(data);
81

82
  
83
    data = 0xa;
84
    USART_transmit(data);
85

86
    data = 0xa;
87
    USART_transmit(data);  
88

89
    data = 'a';
90
    USART_transmit(data);
91

92
    i++;
93
  }
94
  //  for(i=0; i < len; i++) // Send buf
95
  //  { data=(buf[i]);
96
  //  USART_transmit(data);
97

98
  //  bcc= bcc + buf[i];
99

100
}
101

102
//  data = bcc;
103
//  USART_transmit(data);
104

105
//  return 0; 
106
//  }
107

108

109
void USART_transmit (unsigned char data ) // Senden (Manual S. 149)
110
  {
111
  /* warte auf leeren Transmit-Puffer */
112
     while (! (UCSRA & (1<<UDRE)));    // wartet ewig?
113
  
114
  /* put date in the buffer, send the data */
115
  UDR = data;
116
  return;
117
  }
Gast #2164265
Lesenswert?

Juppi J. schrieb:
> shibbyx schrieb:
>> aber wenn ich von pc über rs232 sende geht es ja.
>>
>> liefert der denn nen TTL pegel?
>
> Hast du einen usb to ser. Wandler am PC.
> Viele liefern 0/5 V.

ja ich hab nen usb zu rs232 wandler dran


>>ich habe das display auch direkt an rxd txd vom atmega angeschlossen,
>>das ging auch nicht.
>
> Das sollte aber gehen,wenn du Rx nicht auf Rx und Tx nicht auf Tx
> geschaltet hast.(5V Pegel)

ne rx is auf tx und tx auf rx
Gast #2169008
Lesenswert?

ja das hyperterminal-> display funzt!
wenn ich da einfach nur ein T eingebe zeigt er mir auch ein T an

Wenn ich vom STK500->Hyperterminal das T sende geht es auch

nur Wenn ich von STK500-> Display T sende bekomme ich mal ne 5 oder ein 
S (unregelmäßig)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren