Ich habe aktuelle ein Problem mit meiner RS-232 Schnittstelle. Ich verwende die Usart- Libary von peter Fleury, die in der Vergangenheit gut funktioniert hat. Neues Board, neues Glück. Diesmal ziert sich das Ganze ziemlich. Ich bekomme nur kryptische Zeichen im HTerm angezeigt. Frequenz und Baudrate stimmen wahrscheinlich. 16 Mhz(Quarz) und Baudrate 9600 erzeugen wohl nur einen Fehler von 0,2% lt. Datenblatt. #define F_CPU 16000000UL #define UART_BAUD_RATE 9600 Da ich ja Zeichen empfange schliesse ich mal einen Kabelfehler aus, wobei ich mir hier nicht sicher bin, ob GND verbunden werden muss, oder ob TX und RX reichen. Ich verwende den Atmega 128 und hier das Interface 1 an den Ports D.2 und D.3 uart1_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); uart1_puts("Test"); Was kann falsch sein? bzw wo fang ich mit der Fehlersuche an?
Daniel F. schrieb: > wobei ich mir hier nicht sicher bin, ob GND verbunden werden muss, oder > ob TX und RX reichen. Auf jeden Fall mit verbinden. GND ist das Bezugspotential.
naja egal obs dranhängt oder nicht, die ausgabe im terminal ist immer die gleiche. Ich hab jetzt auch schon die Baudraten varriiert, aber keine Änderung.
Fuses ist auf Ext Crystal/resonator High Freq Stat-up Time 16K CK + 64 ms gestellt. Um den RS232 auf meinem Borad nutzen zu können, musste ich zwei Lötbrücken schliessen, das habe ich getan. Und da ja irgendwas übertragen wird, kann ich doch davon ausgehen, dass das alles korrekt läuft. Yo?????<\0>V??<26>???<23>!<27>57?-#?Y[}e?Y<23><27>-#1?<25><23>!<27>57?-# ?sg}Yo?????<\0> Das ist die Ausgabe des Fleury Testprogramms.
1 | /*************************************************************************
|
2 | Title: example program for the Interrupt controlled UART library
|
3 | Author: Peter Fleury <pfleury@gmx.ch> http://jump.to/fleury
|
4 | File: $Id: test_uart.c,v 1.4 2005/07/10 11:46:30 Peter Exp $
|
5 | Software: AVR-GCC 3.3
|
6 | Hardware: any AVR with built-in UART, tested on AT90S8515 at 4 Mhz
|
7 | |
8 | DESCRIPTION:
|
9 | This example shows how to use the UART library uart.c
|
10 | |
11 | *************************************************************************/
|
12 | #include <stdlib.h> |
13 | #include <avr/io.h> |
14 | #include <avr/interrupt.h> |
15 | #include <avr/signal.h> |
16 | #include <util/delay.h> |
17 | #include <avr/pgmspace.h> |
18 | #include "glcd-Display3000-211.h" |
19 | |
20 | #include "uart.h" |
21 | |
22 | |
23 | /* define CPU frequency in Mhz here if not defined in Makefile */
|
24 | #ifndef F_CPU
|
25 | #define F_CPU 16000000UL
|
26 | #endif
|
27 | |
28 | /* 9600 baud */
|
29 | #define UART_BAUD_RATE 9600
|
30 | |
31 | |
32 | int main(void) |
33 | {
|
34 | unsigned int c; |
35 | char buffer[7]; |
36 | int num=134; |
37 | |
38 | LCD_Init(); // caution: this also defines SPI for the display and also PortB (all ports but MISO are output) |
39 | Orientation = Portrait180; |
40 | LCD_Cls(black); |
41 | |
42 | /*
|
43 | * Initialize UART library, pass baudrate and AVR cpu clock
|
44 | * with the macro
|
45 | * UART_BAUD_SELECT() (normal speed mode )
|
46 | * or
|
47 | * UART_BAUD_SELECT_DOUBLE_SPEED() ( double speed mode)
|
48 | */
|
49 | uart1_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); |
50 | |
51 | /*
|
52 | * now enable interrupt, since UART library is interrupt controlled
|
53 | */
|
54 | sei(); |
55 | |
56 | /*
|
57 | * Transmit string to UART
|
58 | * The string is buffered by the uart library in a circular buffer
|
59 | * and one character at a time is transmitted to the UART using interrupts.
|
60 | * uart_puts() blocks if it can not write the whole string to the circular
|
61 | * buffer
|
62 | */
|
63 | uart1_puts("String stored in SRAM\n"); |
64 | |
65 | /*
|
66 | * Transmit string from program memory to UART
|
67 | */
|
68 | uart1_puts_P("String stored in FLASH\n"); |
69 | |
70 | |
71 | /*
|
72 | * Use standard avr-libc functions to convert numbers into string
|
73 | * before transmitting via UART
|
74 | */
|
75 | itoa( num, buffer, 10); // convert interger into string (decimal format) |
76 | uart1_puts(buffer); // and transmit string to UART |
77 | |
78 | |
79 | /*
|
80 | * Transmit single character to UART
|
81 | */
|
82 | uart1_putc('\r'); |
83 | LCD_Print("Höhe:", 1, 160, 2, 1, 1, green, black); |
84 | for(;;) |
85 | {
|
86 | /*
|
87 | * Get received character from ringbuffer
|
88 | * uart_getc() returns in the lower byte the received character and
|
89 | * in the higher byte (bitmask) the last receive error
|
90 | * UART_NO_DATA is returned when no data is available.
|
91 | *
|
92 | */
|
93 | c = uart1_getc(); |
94 | if ( c & UART_NO_DATA ) |
95 | {
|
96 | /*
|
97 | * no data available from UART
|
98 | */
|
99 | }
|
100 | else
|
101 | {
|
102 | /*
|
103 | * new data available from UART
|
104 | * check for Frame or Overrun error
|
105 | */
|
106 | if ( c & UART_FRAME_ERROR ) |
107 | {
|
108 | /* Framing Error detected, i.e no stop bit detected */
|
109 | uart_puts_P("UART Frame Error: "); |
110 | }
|
111 | if ( c & UART_OVERRUN_ERROR ) |
112 | {
|
113 | /*
|
114 | * Overrun, a character already present in the UART UDR register was
|
115 | * not read by the interrupt handler before the next character arrived,
|
116 | * one or more received characters have been dropped
|
117 | */
|
118 | uart1_puts_P("UART Overrun Error: "); |
119 | }
|
120 | if ( c & UART_BUFFER_OVERFLOW ) |
121 | {
|
122 | /*
|
123 | * We are not reading the receive buffer fast enough,
|
124 | * one or more received character have been dropped
|
125 | */
|
126 | uart1_puts_P("Buffer overflow error: "); |
127 | }
|
128 | /*
|
129 | * send received character back
|
130 | */
|
131 | uart1_putc( (unsigned char)c ); |
132 | }
|
133 | }
|
134 | |
135 | }
|
136 | |
137 | // Enhanced delay-routine (wait) as as the standard delay routine (_delay_ms) is not able to delay
|
138 | // more than 17 ms maximum as of the used 8-bit-timer (depending on used crystal)
|
139 | void delay_ms(uint16_t period) //delay routine (milliseconds) |
140 | {
|
141 | for(unsigned int i=0; i<=period; i++) |
142 | _delay_ms(1); |
143 | }
|
#include "uart.h" /* define CPU frequency in Mhz here if not defined in Makefile */ #ifndef F_CPU #define F_CPU 16000000UL #endif Und woher bekommt uart.h seine F_CPU? Hoffentlich aus dem makefile.
UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu)/((baudRate)*16l)-1)
Dieses Makro wird an die Init Methode übergeben.
und wenn ich das richtig deute, dann ist
>uart1_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
völlig in Ordnung.
Abgesehen davon steht im Makefile auch eine Baudrate von 16 Mhz
1 | ###############################################################################
|
2 | # Makefile for the project uarttest
|
3 | ###############################################################################
|
4 | |
5 | ## General Flags
|
6 | PROJECT = uarttest |
7 | MCU = atmega128 |
8 | TARGET = uarttest.elf |
9 | CC = avr-gcc |
10 | |
11 | ## Options common to compile, link and assembly rules
|
12 | COMMON = -mmcu=$(MCU) |
13 | |
14 | ## Compile options common for all C compilation units.
|
15 | CFLAGS = $(COMMON) |
16 | CFLAGS += -Wall -gdwarf-2 -std=gnu99 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums |
17 | CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d |
18 | |
19 | ## Assembly specific flags
|
20 | ASMFLAGS = $(COMMON) |
21 | ASMFLAGS += $(CFLAGS) |
22 | ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2 |
23 | |
24 | ## Linker flags
|
25 | LDFLAGS = $(COMMON) |
26 | LDFLAGS += -Wl,-Map=uarttest.map |
27 | |
28 | |
29 | ## Intel Hex file production flags
|
30 | HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature |
31 | |
32 | HEX_EEPROM_FLAGS = -j .eeprom |
33 | HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load" |
34 | HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings |
35 | |
36 | |
37 | ## Objects that must be built in order to link
|
38 | OBJECTS = uarttest.o uart.o glcd-Display3000-211.o font_f-5x8.o font_f-8x14.o |
39 | |
40 | ## Objects explicitly added by the user
|
41 | LINKONLYOBJECTS = |
42 | |
43 | ## Build
|
44 | all: $(TARGET) uarttest.hex uarttest.eep uarttest.lss size |
45 | |
46 | ## Compile
|
47 | uarttest.o: ../uarttest.c |
48 | $(CC) $(INCLUDES) $(CFLAGS) -c $< |
49 | |
50 | uart.o: ../uart.c |
51 | $(CC) $(INCLUDES) $(CFLAGS) -c $< |
52 | |
53 | glcd-Display3000-211.o: ../glcd-Display3000-211.c |
54 | $(CC) $(INCLUDES) $(CFLAGS) -c $< |
55 | |
56 | font_f-5x8.o: ../font_f-5x8.c |
57 | $(CC) $(INCLUDES) $(CFLAGS) -c $< |
58 | |
59 | font_f-8x14.o: ../font_f-8x14.c |
60 | $(CC) $(INCLUDES) $(CFLAGS) -c $< |
61 | |
62 | ##Link
|
63 | $(TARGET): $(OBJECTS) |
64 | $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) |
65 | |
66 | %.hex: $(TARGET) |
67 | avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@ |
68 | |
69 | %.eep: $(TARGET) |
70 | -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0 |
71 | |
72 | %.lss: $(TARGET) |
73 | avr-objdump -h -S $< > $@ |
74 | |
75 | size: ${TARGET} |
76 | @echo |
77 | @avr-size -C --mcu=${MCU} ${TARGET} |
78 | |
79 | ## Clean target
|
80 | .PHONY: clean |
81 | clean: |
82 | -rm -rf $(OBJECTS) uarttest.elf dep/* uarttest.hex uarttest.eep uarttest.lss uarttest.map |
83 | |
84 | |
85 | ## Other dependencies
|
86 | -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*) |
Sind beide nicht aktiv ... ich habe so wenig wie möglich dort geändert, da ich mir schon einmal das Board verfused habe :)
M103C ist neu für mich, und ich darf das auf keinen Fall einstellen. Ich brauche TWI den Port C teilweise als Eingang und ganz wichtig Uart Interface 1. 0 ist wohl mit der ISP Schnittstelle belegt. CKOpt klingt nach der Lösung des Problems, aber ich bin nicht sicher, ob ich nicht irgendwas kaputt mache, wenn ich dieses Fuse Bit setze. Ich glaube meine Nerfen ertragen keinen verfusten µC.
>M103C ist neu für mich, und ich darf das auf keinen Fall einstellen. Ich wollte ja nur sichergehen das du die NICHT aktiviert hast. >CKOpt klingt nach der Lösung des Problems, aber ich bin nicht sicher, ob >ich nicht irgendwas kaputt mache, wenn ich dieses Fuse Bit setze. Nö, warum?
naja grundsätzliche Angst dort was zu ändern... zu oft in diese Steckdose gefasst :) ich habs mal probiert (CKOpt), und es bringt keinerlei Änderungen. Alles bleibt beim Alten. Exakt die selben Ausgaben.
>ich habs mal probiert (CKOpt), und es bringt keinerlei Änderungen. Alles >bleibt beim Alten. Exakt die selben Ausgaben. Auch wenn du die Baudrate änderst? Bist du sicher das du das richtige Hexfile brennst?
Das hab ich schon überprüft.... Auch wenn ich die Baudrate ändere sieht die Ausgabe im Terminal gleich aus. Sollte sie ja auch, da ja das gleiche ankommt. ?::<\n><\0> Das ist mein String "Hallo".
>Auch wenn ich die Baudrate ändere sieht >die Ausgabe im Terminal gleich aus. Sollte sie ja auch, da ja das >gleiche ankommt. Sag mal hast du üerhaupt einen MAX232 Pegelwandler auf deinem Board?
Ich zitiere mal aus der Anleitung des Boards. Ich denke ja, es gibt diesen Pegelwandler. Alles andere würde hier keinen Sinn machen. Jedenfalls wenn ich folgenden Text richtig verstehe. Das Interface 1 steht an den Ports D.2 und D.3 zur Verfügung. Diese beiden Ports sind mit dem RS-232-Interface-Chip auf dem Board verbunden, denn der Mikrocontroller kennt nur den Pegel von 5 Volt und wie Sie oben lesen konnten, sind für RS-232 Spannungen notwendig, die nicht Mikrocontroller-tauglich sind. Wenn Sie die RS-232 Leitung des PCs direkt an den Mikrocontroller anschließen würden, würde dieser vermutlich zerstört werden. Achtung: Um RS232 nutzen zu können, müssen Sie zuerst 2 Lötbrücken schließen. Mehr dazu auf Seite 31. Da der RS232-Transceiver an die Ports D2 und D3 angeschlossen ist (Rx1 und Tx1 des Mikrocontrollers),würde der Transceiver diese Ports beeinflussen, selbst wenn kein RS232- Empfang oder Sendebetrieb stattfindet. Wenn Sie also eine „echte“ RS232-Verbindung (über die beiden Anschlüsse RX und TX) nutzen möchten, können Sie nicht auch gleichzeitig die Ports D.2 und D.3 nutzen. Daher wurde der Transceiver durch diese beiden Brücken abgekoppelt. Das bedeutet,wenn Sie RS232 nutzen möchten, so müssen Sie J6 und J7 zuerst schließen. D.2 und D.3 stehen trotzdem immer an der Pfostenleiste zur Verfügung, lediglich die Verbindung zum RS232 Chip wird durch die Brücken geschlossen.
Brenn mal diese HEX Datei. Es wird dauernd ein U gesendet. ATMega128, 16MHz, 9600Baud
>Da kommt gar nix an
Kann ja auch nicht, war für UART0 und nicht UART1.
Gibts noch nen Anschluss für UART0 wo du mal nachsehen kannst?
Was für ein Board ist das überhaupt?
kann es sein, dass die Libary von Peter Fleury mit dem Atmega128 gar nicht funktioniert. Ich sehe hier in der init Methode eine Variable URSEL1 im UCSR1C Register. Die gibt es laut Datenblatt gar nicht.
holger schrieb: >>Da kommt gar nix an > > Kann ja auch nicht, war für UART0 und nicht UART1. > Gibts noch nen Anschluss für UART0 wo du mal nachsehen kannst? > > Was für ein Board ist das überhaupt? Es steht ausdrücklich im Handbuch meines Boards, dass Interface 1 zu verwenden ist, da Interface 0 schon genutzt wird. Zitat: das andere ist das Interface 0 – wir nutzen es hier nicht, da die Ports dieser Schnittstelle gleichzeitig auch für die ISP-Programmierung genutzt werden – mehr dazu im ATMega128-Datenblatt Es ist das D072 von Display3000.
Das kann doch nicht angehen. Es folgt mein neuer Code. Ich habe mich jetzt exakt ans Datenblatt gehalten und immer noch sendet der µC nur Mist. Ich denke der Code stimmt so, also muss es vielleicht doch entweder an den Fuses liegen oder an der Hardware. Die Fuses hab ich nochmals überprüft und es auch mit CKOpt versucht. Keine Veränderung. Das Board selbst hat keine Jumper und läuft ziemlich sicher mit 16 Mhz. Sowohl I2C als auch ADC und so weiter laufen korrekt. (hier in diesem Beispiel nicht aktiviert.) Fuses sind wie folgt: Extended 0xFF High 0xC1 Low 0xBF Ausgabe im Terminal ASCII USt<\0> HEX 55 53 74 00
1 | /* Programmkopf mit Headerdateien*/
|
2 | #include <stdlib.h> |
3 | #include <avr/io.h> |
4 | #include <avr/interrupt.h> |
5 | #include <avr/pgmspace.h> |
6 | #include <util/delay.h> |
7 | #include <string.h> |
8 | #include <stdio.h> |
9 | #define F_CPU 16000000UL //Quarzfrequenz
|
10 | #define BAUD 38400UL //Baudrate für UART Übertragung
|
11 | #define MYUBRR F_CPU/16/BAUD-1
|
12 | |
13 | //****************************** UART
|
14 | // UART Einstellung
|
15 | |
16 | void uart_init(unsigned int ubrr) |
17 | {
|
18 | |
19 | UBRR1H = (unsigned char)(ubrr>>8); |
20 | UBRR1L = (unsigned char)ubrr; |
21 | UCSR1B = (1<<RXEN1)|(1<<TXEN1); //UART TX einschalten |
22 | //UCSR1C = (1<<USBS1)|(3<<UCSZ10);
|
23 | UCSR0C = (0<<UMSEL1)|(0<<USBS1)|(3<<UCSZ11); //Asynchron 8N1 |
24 | }
|
25 | void USART_Transmit( unsigned char data ) |
26 | {
|
27 | /* Wait for empty transmit buffer */
|
28 | while ( !( UCSR1A & (1<<UDRE1)) ) |
29 | ;
|
30 | /* Put data into buffer, sends the data */
|
31 | UDR1 = data; |
32 | }
|
33 | |
34 | void put_s(const char *s ) |
35 | {
|
36 | while (*s) |
37 | USART_Transmit(*s++); |
38 | |
39 | }/* uart1_puts */ |
40 | |
41 | int main(void) |
42 | {
|
43 | uart_init( MYUBRR); |
44 | |
45 | sei(); |
46 | |
47 | |
48 | for(;;) |
49 | {
|
50 | delay_ms(1000); |
51 | put_s("Test"); |
52 | |
53 | |
54 | }
|
55 | |
56 | }
|
57 | |
58 | // Enhanced delay-routine (wait) as as the standard delay routine (_delay_ms) is not able to delay
|
59 | // more than 17 ms maximum as of the used 8-bit-timer (depending on used crystal)
|
60 | void delay_ms(uint16_t period) //delay routine (milliseconds) |
61 | {
|
62 | for(unsigned int i=0; i<=period; i++) |
63 | _delay_ms(1); |
64 | }
|
for(;;) { delay_ms(1000); USART_Transmit('D'); } Wenn ich das hier Sende, kommt <\0> oder in Hex 0x00 an. Hilft das eventuell weiter? Langsam verzweifle ich wirklich.
>Das Board >selbst hat keine Jumper und läuft ziemlich sicher mit 16 Mhz. Laut Datenblatt mit 8MHz. Hast du den Quarz nachgerüstet oder ist da einer drauf? Ohne würde es mit deinen Fuses aber gar nicht laufen. RS232 Kabel selber gebaut? Dann könntest du einen Dreher bei GND und TxD haben.
Ja es ist ein Quarz nachgerüstet... Wenn ich TX und RX vertausche bekomm ich keine ausgabe im Terminal. Wird also stimmen. GND ist auch verbunden. Ich habe grade ein LED Blinkprogramm geschrieben, und die LED blinkt fein im Sekundentakt. Also ist 1Mhz und 8Mhz ausgeschlossen. (Mal abgesehen von der richtig gesetzten Fuse) An was kann es denn liegen dass es nicht geht? Kann Interface 0 stören, da hier SPI verbunden ist?
UCSR0C = (0<<UMSEL1)|(0<<USBS1)|(3<<UCSZ11); //Asynchron 8N1 ^ | | Fällt dir da was auf?
Jop ... ändert die Sache ein wenig ECp<\0> ist jetzt die Ausgabe... nicht wirklich besser. Ich habe das ganze grade auf dem Interface0 versucht. Da ist die Ausgabe genau die Gleiche wie jetzt auf Interface1.
>Ich habe das >ganze grade auf dem Interface0 versucht. Da ist die Ausgabe genau die >Gleiche wie jetzt auf Interface1. Könnte es sein das du tatsächlich die Pins D2, D3 benutzt statt RX und TX?
hmmm wie stell ich das fest? Ich habe die Anleitung befolgt, und diese sagte mir: Schliesse die Lötbrücken J6 und J7 um RS232 zu verwenden. Damit soll laut Handbuch die Verwendung von D2 und D3 unterbunden sein. Also gehe ich davon aus, dass ich wirklich TX und RX verwende. Ich habe grade etwas versucht. Ich habe einen Char gesendet und das terminal immer wieder verbunden, und getrennt... Folge: Das was ankommt ist inner was anderes (bekomme son 3-4 verschiedene Ausgaben die sich immer wieder wiederholen.) Habe ich in meiner while schliefe nen Delay ist die Ausgabe hier immer 00. Ich bin jetzt völlig ratlos. Dachte ich hätte es verstanden, aber dem ist wohl nicht so. Ich mach das ja nicht zum ersten Mal. Auf meinem STK 500 habe ich nen Atmega 644 und da klappt es alles prima. Wobei ich eben nicht weiss, was mir das STK500 alles abnimmt. Vielleicht ist wirklich der MAX232 (Pegelwandler?) gar nicht vorhanden auf dem Board D072. Aber ich finde keinen Hinweis darauf im Handbuch.
>hmmm wie stell ich das fest?
Auf das Board schauen? Neben den Pins für PORTF
sieht man doch deutlich ein RX und ein TX aufgedruckt.
Hallo, hast Du das Signal schon mal mit dem Oszi angeschaut, so vorhanden? Bernhard
das ist doch für Uart Interface 0 oder?
>Das Interface 1 steht an den Ports D.2 und D.3 zur Verfügung.
Das steht so im Handbuch.
Ich habs mal umgesteckt... und naja das ergebnis ist genau das
Gleiche..... also ob D2 und D3 oder TX RX Pins... kein Unterschied.
Bernhard schrieb: > Hallo, > hast Du das Signal schon mal mit dem Oszi angeschaut, so vorhanden? > > Bernhard Hab ich leider keines zur Verfügung. Leider ...
>Ich habs mal umgesteckt... und naja das ergebnis ist genau das >Gleiche..... also ob D2 und D3 oder TX RX Pins... kein Unterschied. Dann ist irgendwas kaputt. Laut dem Handbuch liegen auf RX/TX RS232 Signale mit mehr als 5V. Da musst du ran und nirgendwo anders. GND muss natürlich auch verbunden werden. Wenn du dann die richtige Baudrate beim uC UND beim PC einstellst dann sollte es auch passen.
6,7 V etwa ... schwankt etwas. Kaputt... darf nicht sein, kann nicht sein :) Hab ich oft gedacht, dann wars wieder irgendwas anderes ... Kann es ein Fehler sein bei der Baudratenberechnung ? Oder doch der Takt ? Würde mein µC denn überhaupt funktionieren wennd er Takt falsch wäre ? Ich meien nach den Fuses muss es stimmen.
DANKE DANKE DANKE !!! ich habe grade die Fleury Lib wieder eingebunden. Und siehe da... es tut. Ich bekomme der verfluchten Text übersendet. Es lag tatsächlich an den doofen Pins. Da wär ich wahrscheinlich nieee drauf gekommen. 3 Tage Horror haben nun ein Ende :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.