Hallo zusammen, zu später Stunde wollte ich mich ein wenig mit einem Grafik LCD auseinander setzen welches ich vor kurzem auch hier im Forum internen Markt gekauft hab. Es handelt sich um ein 320 * 240 Display. Die Bezeichnung lautet: WG320240BX. Das ist nun das erste mal, dass ich mich mit Grafik LCDs beschäftige, habe allerdings schon Erfahrung mit LCDs mit HD44780 Controller gemacht. Bevor ich etwas auf dem Display ausgeben kann will ich aber erst mal ein wenig die Ansteuerung verstehen, nicht unbedingt eine Library kopieren und einfügen. Also nun konkret zu meinen Fragen: 1. Laut Datenblatt des Displays (siehe Anhang) lässt sich das Display mit einem 6800 und 8080 Interface ansprechen. Ein wenig habe ich nun gegooglet und festgestellt, dass dies nur unterschiedliche Controller sind. Allerdings wird unterschiedlich bei der Ansteuerung verfahren. Ist es grundsätzlich egal mit welchem Interface ich verfahre? Weiterhin ist in der Spalte "Level" nichts dazu angegeben. Es steht lediglich 1:68, 0:80 in der Zeile Beschreibung. Soll das nun bedeuten bei einer 1 ist das 6800 Interface zu benutzen und bei einer 0 das 8080 Interface? Ist es egal wann dieser Zustand vor dem senden von Befehlen erreicht wird? 2. Pin 15 steht für Chip select. Dieser ist bei 0 Aktiv. Allerdings ist nur ein s1d13700 verbaut. Heißt das, ich kann den Pin dauerhaft auf 0 lassen, da ich keinen anderen Chip ansprechen will? 3. Im Datenblatt des s1d13700 ist von "System Address pins 1 - 15" die Rede. Diese werden im Datenblatt des Displays selber nicht erwähnt. Auf der Platine selber sind diese auch mit Vss verbunden. Das bedeutet nun, es ist "nur" eine indirekte Adressierung möglich richtig? Wie funktioniert diese Adressierung nun? Was sind die unterscheide zur direkten? Kann ich einfach, ähnlich wie bei dem HD44780 Controller einen Pin (hier A0) auf den Zustand für Befehle setzen, einen Befehl durch die Anschlüsse "Data bus line" schicken und mit "Enable" ist die Sache dann soweit gegessen? (würde dem 6800 Interface entsprechen richtig?) 4. Um ein LCD mit dem HD44780 Controller zu Initialisieren braucht es ja einige Unterschiedliche Bytes als Ausgabe. Im Datenblatt des s1d13700 Controllers steht nun nur: "SYSTEM SET - Initializes device and display - Control Byte Value (40h) - No. of Bytes (8)" Was soll nun ausgegeben werden um das Display zu Initialisieren? Was ist 40h für eine Schreibweise und wofür steht es? Und was hat die Anzahl der Bytes damit zu tun? Leider kann ich hier gerade nicht besonders viel rein interpretieren. 5. Kurze Frage zum Schluss: Am Anfang des Datenblattes steht" Version: B - Page 6 - Modify Vdd-Vss 5V". Ich nehme mal an die gesamte Logik kann nun mi 5V betrieben werden richtig? Ich möchte ja nicht direkt das schöne Display grillen. MfG
Ganz spontan, allgemein und unkonkret: 1. Im 8080-Modus sind die Steuerleitungen "Read" und "Write", im 6800-Modus sind sie "Direction" und "Enable". Wenn du die Ansteuerung per Hand machst, ist es egal, ansonsten solltest du das auswählen, was zu deinem verwendeten Controller passt - und dann den Modus-Auswahlpin entsprechend mit Vcc oder GND fest verdrahten. 2. Ja, du kannst Chip-Select dauerhaft aktivieren. Sinnvoller ist es aber, diesen Pin anzusteuern. Damit verhinderst du, dass der Baustein sich irgendwelche Störungen einfängt, wenn irgendwelche Pins gerade floaten oder so. 3. Ja, scheint als ob die Adresspins (außer A0) nicht rausgeführt sind. Wie man das indirekte Interface benutzt, steht in den Kapiteln 11 und 14 der Epson-Dokumentation. 4. Die Darstellung 40h ist dasselbe wie 0x40 und du sollst, wenn du dieses Register mit indirekter Adressierung beschreibst, die acht Bytes für Register 0x00 bis 0x07 gleich als Parameter mitschicken. Zitat: "The SYSTEM SET command is used to configure the S1D13700F01 for the display used and to exit power save mode when indirect addressing is used. The values from REG[00h] through REG[07h] are passed as parameters when the SYSTEM SET command is issued." 5. Ich würde Kapitel 5 (Electrical Characteristics) beachten, ehe ich da doof rumrate. Da steht, dass du 5V für die Logik benutzen sollst, und 23.8V für das Display.
S. R. schrieb: > 23.8V für das Display. Die macht das Board selbst. Man braucht nur das übliche Kontrast Poti.
Hallo. Danke euch soweit. Ich habe mir einen kleinen Adapter gebastelt und das ganze mal angeschlossen. Soweit funkrioniert die Hintergrundbeleuchtung. Außerdem bekomme ich auch die Kontrastspannung von -23.8V. Zu Punkt 4 hätte ich aber noch Fragen. Auf der Seite 70 steht wie man das LCD initialisiert. Allerdings verstehe ich die Tabelle nicht ganz. So wie ich das verstehe muss ich 9 Bytes ausgeben. Die Bytes selber werde auf Seite 103 erklärt. Auf seite 69 steht, dass das Register 8 Bytes besitzt. Diese sind irgendwie durch nummeriert. Von C bis P8. Sind C bis P8 nun Register womit ich parameter für die Initialisierung setzte? Wie kann ich ein bestimmtes Register (C bis P8) ansprechen? Oder bin ich auf dem Holzweg? MfG
:
Bearbeitet durch User
K. M. schrieb: > Zu Punkt 4 hätte ich aber noch Fragen. > Auf der Seite 70 steht wie man das LCD initialisiert. Allerdings > verstehe ich die Tabelle nicht ganz. Hallo, lade Dir das mal und schaue es Dir an sollte alles drin sein was Du brauchst. http://www.winstar.com.tw/service.php?lang=de&EID=7&ProID=83#inquiry http://www.winstar.com.tw/download.php?DID=12 Gruß Ronny
Ronny S. schrieb: > K. M. schrieb: >> Zu Punkt 4 hätte ich aber noch Fragen. >> Auf der Seite 70 steht wie man das LCD initialisiert. Allerdings >> verstehe ich die Tabelle nicht ganz. > > Hallo, > > lade Dir das mal und schaue es Dir an sollte alles drin sein was Du > brauchst. > > http://www.winstar.com.tw/service.php?lang=de&EID=... > > http://www.winstar.com.tw/download.php?DID=12 > > Gruß Ronny Ah es gibt also doch Beispiel Code. Danke für den Hinweis! Leider ist der Code für 8051 Controller. Zum Glück Aber in Assembler, sollte also halbwegs gut für AVR Controller übernommen/umgeschrieben werden können.
Also ich habe mal heute versucht auf dem Display was auszugeben. Das funktioniert leider nicht. Also prinzipiell habe ich ab Seite 103 des Datenblattes die Tabelle bis zu der Ausgabe von "E" und "P" versucht in Code umzusetzen. Leider bekomme ich weder E oder P noch Cursor angezeigt. Ich habe die Pins 7-14 mit den Pins 0 - 7 von PORTD verbunden. Die Leitungen Enable, A0 etc. liegen auf PORTB. (siehe code) Kann mir jemand sagen ob ich irgendwelche offensichtlichen Fehler drin habe? Das Kontrast Poti ist mit dem wiper auf V0, die anderen Seiten sind auf +5V und -23,8V.
1 | .equ E = 0 |
2 | .equ A0 = 1 |
3 | .equ W_R = 4 |
4 | .equ CS = 3 |
5 | .equ RST = 5 |
6 | .equ SEL = 2 |
7 | |
8 | .def temp = r16 |
9 | |
10 | ldi temp, 0xFF |
11 | out DDRD, temp |
12 | out DDRB, temp |
13 | |
14 | sbi PORTB, SEL |
15 | cbi PORTB, RST |
16 | nop |
17 | nop |
18 | nop |
19 | sbi PORTB, RST |
20 | |
21 | |
22 | ;------------------------------------------ initialisieren |
23 | |
24 | ldi temp, 0x40 |
25 | out PORTD, temp |
26 | rcall cmd |
27 | |
28 | ldi temp, 0x38 |
29 | out PORTD, temp |
30 | rcall dta |
31 | |
32 | ldi temp, 0x87 |
33 | out PORTD, temp |
34 | rcall dta |
35 | |
36 | ldi temp, 0x07 |
37 | out PORTD, temp |
38 | rcall dta |
39 | |
40 | ldi temp, 0x3f |
41 | out PORTD, temp |
42 | rcall dta |
43 | |
44 | ldi temp, 0x49 |
45 | out PORTD, temp |
46 | rcall dta |
47 | |
48 | ldi temp, 0x7f |
49 | out PORTD, temp |
50 | rcall dta |
51 | |
52 | ldi temp, 0x80 |
53 | out PORTD, temp |
54 | rcall dta |
55 | |
56 | ldi temp, 0x00 |
57 | out PORTD, temp |
58 | rcall dta |
59 | ;----------------------------------- scroll |
60 | |
61 | ldi temp, 0x44 |
62 | out PORTD, temp |
63 | rcall cmd |
64 | |
65 | ldi temp, 0x00 |
66 | out PORTD, temp |
67 | rcall dta |
68 | |
69 | ldi temp, 0x00 |
70 | out PORTD, temp |
71 | rcall dta |
72 | |
73 | ldi temp, 0x40 |
74 | out PORTD, temp |
75 | rcall dta |
76 | |
77 | ldi temp, 0x00 |
78 | out PORTD, temp |
79 | rcall dta |
80 | |
81 | ldi temp, 0x10 |
82 | out PORTD, temp |
83 | rcall dta |
84 | |
85 | ldi temp, 0x40 |
86 | out PORTD, temp |
87 | rcall dta |
88 | |
89 | ldi temp, 0x00 |
90 | out PORTD, temp |
91 | rcall dta |
92 | |
93 | ldi temp, 0x04 |
94 | out PORTD, temp |
95 | rcall dta |
96 | |
97 | ldi temp, 0x00 |
98 | out PORTD, temp |
99 | rcall dta |
100 | |
101 | ldi temp, 0x30 |
102 | out PORTD, temp |
103 | rcall dta |
104 | ;----------------------------------- HDOT SCR |
105 | |
106 | ldi temp, 0x5a |
107 | out PORTD, temp |
108 | rcall cmd |
109 | |
110 | ldi temp, 0x00 |
111 | out PORTD, temp |
112 | rcall dta |
113 | |
114 | ;------------------------------------ OVLAY |
115 | |
116 | ldi temp, 0x5b |
117 | out PORTD, temp |
118 | rcall cmd |
119 | |
120 | ldi temp, 0x01 |
121 | out PORTD, temp |
122 | rcall dta |
123 | |
124 | ;------------------------------------ Disp on/off |
125 | |
126 | ldi temp, 0x58 |
127 | out PORTD, temp |
128 | rcall cmd |
129 | |
130 | ldi temp, 0x56 |
131 | out PORTD, temp |
132 | rcall dta |
133 | |
134 | |
135 | ;----------------------------------- CSRW |
136 | ldi temp, 0x46 |
137 | out PORTD, temp |
138 | rcall cmd |
139 | |
140 | |
141 | ldi temp, 0x00 |
142 | out PORTD, temp |
143 | rcall dta |
144 | |
145 | |
146 | ldi temp, 0x00 |
147 | out PORTD, temp |
148 | rcall dta |
149 | |
150 | ;------------------------------- CSR Form |
151 | |
152 | ldi temp, 0x5d |
153 | out PORTD, temp |
154 | rcall cmd |
155 | |
156 | ldi temp, 0x04 |
157 | out PORTD, temp |
158 | rcall dta |
159 | |
160 | ldi temp, 0x86 |
161 | out PORTD, temp |
162 | rcall dta |
163 | |
164 | ;------------------------------- Disp on off |
165 | |
166 | ldi temp, 0x59 |
167 | out PORTD, temp |
168 | rcall cmd |
169 | |
170 | |
171 | ;------------------------------- CSR Dir |
172 | |
173 | ldi temp, 0x4c |
174 | out PORTD, temp |
175 | rcall cmd |
176 | |
177 | ;----------------------------- MWrite |
178 | |
179 | ldi temp, 0x42 |
180 | out PORTD, temp |
181 | rcall cmd |
182 | |
183 | ldi temp, 0x45 |
184 | out PORTD, temp |
185 | rcall dta |
186 | |
187 | ldi temp, 0x50 |
188 | out PORTD, temp |
189 | rcall dta |
190 | |
191 | |
192 | |
193 | loop:rjmp loop |
194 | |
195 | |
196 | |
197 | cmd: |
198 | cbi PORTB, W_R |
199 | cbi PORTB, CS |
200 | sbi PORTB, A0 |
201 | sbi PORTB, E |
202 | nop |
203 | nop |
204 | nop |
205 | nop |
206 | nop |
207 | cbi PORTB, E |
208 | ret |
209 | |
210 | dta: |
211 | cbi PORTB, W_R |
212 | cbi PORTB, A0 |
213 | cbi PORTB, CS |
214 | sbi PORTB, E |
215 | nop |
216 | nop |
217 | nop |
218 | nop |
219 | nop |
220 | cbi PORTB, E |
221 | ret |
//////////////////////////////////////////////////////////////////////// // So hier nun auch nochmal in C ist selbst erklärend // // nicht schön aber er macht was er soll // // Viel Spaß damit ! //////////////////////////////////////////////////////////////////////// /// #ifndef SED133x #define SED133x #ifndef GLCD_WIDTH #define GLCD_WIDTH 320 #endif #ifndef GLCD_HEIGHT #define GLCD_HEIGHT 240 #endif #ifndef GLCD_CHAR_WIDTH #define GLCD_CHAR_WIDTH 8 #endif #ifndef GLCD_CHAR_HEIGHT #define GLCD_CHAR_HEIGHT 8 #endif #ifndef GLCD_RST #define GLCD_RST PIN_C3 #endif #ifndef GLCD_RD #define GLCD_RD PIN_B5 #endif #ifndef GLCD_WR #define GLCD_WR PIN_B1 #endif #ifndef GLCD_CS #define GLCD_CS PIN_B2 #endif #ifndef GLCD_A0 #define GLCD_A0 PIN_B4 #endif #ifndef ON #define ON 1 #endif #ifndef OFF #define OFF 0 #endif #define GLCD_TEXT_ADDR 0x0000 #define GLCD_GRAPHICS_ADDR GLCD_WIDTH * GLCD_HEIGHT / 64 #define GLCD_GRAPHICS_ADDR_END GLCD_GRAPHICS_ADDR + (GLCD_WIDTH * GLCD_HEIGHT / 8) #if GLCD_CHAR_WIDTH < 9 #define GLCD_CR (GLCD_WIDTH/8 - 1) #else #define GLCD_CR (GLCD_WIDTH/4 - 2) #endif #define TGLCD_COMMAND output_high(GLCD_A0); #define TGLCD_DATA output_low(GLCD_A0); int8 glcd_readByte(); void glcd_sendByte(int8 data); void glcd_fillScreen(int1 color); void glcd_fillScreenText(char c); void setCursorAddress(int16 addr); void glcd_pixel(int16 x, int16 y, int1 color); int8 getData(int16 addr); void glcd_sendCMD(int8 cmd); void glcd_systemSetup(); void glcd_scrollSetup(); void glcd_overlaySetup(); void glcd_power(int1 mode); void glcd_cursorDirection(int8 dir); void glcd_cursorForm(int8 width, int8 height); void setData(int16 addr, int8 data); #define GLCD_CMD_SYSTEM 0x40 // General system settings #define GLCD_CMD_SLEEP 0x53 // Enter into standy mode #define GLCD_CMD_DISP_OFF 0x58 // Turn the display off #define GLCD_CMD_DISP_ON 0x59 // Turn the display on #define GLCD_CMD_SCROLL 0x44 // Setup text and graphics address regions #define GLCD_CMD_CSR_FORM 0x5D // Set cursor size #define GLCD_CMD_CSRDIR_RIGHT 0x4C // Cursor moves right after write to display memory #define GLCD_CMD_CSRDIR_LEFT 0x4D // Cursor moves left after write to display memory #define GLCD_CMD_CSRDIR_UP 0x4E // Cursor moves up after write to display memory #define GLCD_CMD_CSRDIR_DN 0x4F // Cursor moves down after write to display memory #define GLCD_CMD_CGRAM_ADDR 0x5C // Configure character generator RAM address #define GLCD_CMD_HDOT_SCR 0x5A // Set horizontal scroll rate #define GLCD_CMD_OVERLAY 0x5B // Configure how layers overlay #define GLCD_CMD_SET_CSR_ADDR 0x46 // Set the cursor address #define GLCD_CMD_GET_CSR_ADDR 0x47 // Read the cursor address #define GLCD_CMD_DISPLAY_WRITE 0x42 // Write to display memory #define GLCD_CMD_DISPLAY_READ 0x43 // Read from display memory void glcd_init(int1 mode) { // Initialze some pins output_high(GLCD_RST); output_high(GLCD_CS); output_high(GLCD_RD); output_high(GLCD_WR); glcd_systemSetup(); glcd_scrollSetup(); glcd_overlaySetup(); glcd_power(OFF); glcd_cursorForm(4, 6); glcd_fillScreen(OFF); glcd_fillScreenText(' '); glcd_power(mode); glcd_cursorDirection(GLCD_CMD_CSRDIR_RIGHT); } void glcd_pixel(int16 x, int16 y, int1 color) { int8 data; int16 addr; // Calculate the byte address containing the pixel addr = GLCD_GRAPHICS_ADDR + (GLCD_WIDTH/8 * y + x/8); // Read the byte of data at the address data = getData(addr); // Turn the pixel on or off if(color == ON) bit_set(data, 7 - x%8); else bit_clear(data, 7 - x%8); // Write the new data byte to display memory setData(addr, data); } // Purpose: Initialize the display environment void glcd_systemSetup() { glcd_sendCMD(GLCD_CMD_SYSTEM); // Setup the system TGLCD_DATA // Set for data glcd_sendByte(0x30); // No offset glcd_sendByte(0x7F + GLCD_CHAR_WIDTH); // Set character width glcd_sendByte(GLCD_CHAR_HEIGHT - 1); // Set character height glcd_sendByte(GLCD_CR); // Display line address range glcd_sendByte(0x2F); // TC/R glcd_sendByte(GLCD_HEIGHT - 1); // Number of lines per frame glcd_sendByte(GLCD_CR + 1); // Horizontal address range LSB (APL) glcd_sendByte((GLCD_CR + 1) / 0xFF); // Horizontal address range MSB (APH) } void glcd_scrollSetup() { // Currently setup for a text and graphics layer glcd_sendCMD(GLCD_CMD_SCROLL); // Setup scrolling TGLCD_DATA // Set for data glcd_sendByte(GLCD_TEXT_ADDR); // SAD1L glcd_sendByte(GLCD_TEXT_ADDR / 0xFF); // SAD1H glcd_sendByte(GLCD_HEIGHT - 1); // SL1 glcd_sendByte(GLCD_GRAPHICS_ADDR); // SAD2L glcd_sendByte(GLCD_GRAPHICS_ADDR / 0xFF); // SAD2H glcd_sendByte(GLCD_HEIGHT - 1); // SL2 glcd_sendByte(0x00); // SAD3L glcd_sendByte(0x00); // SAD3H glcd_sendByte(0x00); // SAD4L glcd_sendByte(0x00); // SAD4H glcd_sendCMD(GLCD_CMD_HDOT_SCR); // Horizontal scroll rate TGLCD_DATA // Set for data glcd_sendByte(0x00); // Horizontal pixel shift is 0 } void glcd_overlaySetup() { // Currently setup for a single graphics layer glcd_sendCMD(GLCD_CMD_OVERLAY); // Text / graphic overlay mode TGLCD_DATA // Set for data glcd_sendByte(0x09); // Area 1 text, others graphics // Text XOR Graphics } void glcd_power(int1 mode) { if(mode == ON) { glcd_sendCMD(GLCD_CMD_DISP_ON); // Turn the display on } else { glcd_sendCMD(GLCD_CMD_DISP_OFF); // Turn the display off } TGLCD_DATA // Set for data glcd_sendByte(0x14); } void glcd_cursorDirection(int8 dir) { glcd_sendCMD(dir); } void glcd_cursorForm(int8 width, int8 height) { glcd_sendCMD(GLCD_CMD_CSR_FORM); // Cursor form and size TGLCD_DATA // Set for data glcd_sendByte(width); glcd_sendByte(0x80 + height); } screen void glcd_fillScreen(int1 color) { int16 i; setCursorAddress(GLCD_GRAPHICS_ADDR); glcd_sendCMD(GLCD_CMD_DISPLAY_WRITE); TGLCD_DATA for(i = GLCD_GRAPHICS_ADDR; i < GLCD_GRAPHICS_ADDR_END; ++i) { glcd_sendByte(0xFF * color); } } screen void glcd_fillScreenText(char c) { int16 i; setCursorAddress(GLCD_TEXT_ADDR); glcd_sendCMD(GLCD_CMD_DISPLAY_WRITE); TGLCD_DATA for(i = GLCD_TEXT_ADDR; i < GLCD_GRAPHICS_ADDR; ++i) { glcd_sendByte(c); } } void glcd_sendByte(byte data) { output_d((data)); output_low(GLCD_CS); delay_cycles(1); output_low(GLCD_WR); delay_cycles(2); output_high(GLCD_WR); output_high(GLCD_CS); } int8 glcd_readByte() { byte data; set_tris_d(0xFF); output_low(GLCD_CS); delay_cycles(1); output_low(GLCD_RD); delay_cycles(2); data = input_d(); output_high(GLCD_RD); output_high(GLCD_CS); return data; } int8 getStatus() { int8 status; TGLCD_DATA output_low(GLCD_CS); output_low(GLCD_RD); delay_us(1); status = input_d(); output_high(GLCD_RD); output_high(GLCD_CS); return status; } int16 getCursorAddress() { int16 addr; glcd_sendCMD(GLCD_CMD_GET_CSR_ADDR); TGLCD_DATA *(int8*)(&addr ) = glcd_readByte(); // Read low part *(int8*)(&addr + 1) = glcd_readByte(); // Read high part return addr; } void setCursorAddress(int16 addr) { glcd_sendCMD(GLCD_CMD_SET_CSR_ADDR); TGLCD_DATA glcd_sendByte(*(int8*)(&addr )); glcd_sendByte(*(int8*)(&addr + 1)); } int8 getData(int16 addr) { setCursorAddress(addr); glcd_sendCMD(GLCD_CMD_DISPLAY_READ); TGLCD_DATA return glcd_readByte(); } void setData(int16 addr, int8 data) { setCursorAddress(addr); glcd_sendCMD(GLCD_CMD_DISPLAY_WRITE); TGLCD_DATA glcd_sendByte(data); } void glcd_sendCMD(int8 cmd) { TGLCD_COMMAND glcd_sendByte(cmd); } #endif
Sorry wollte das eigentlich noch ändern und den Code anhägen. Eventuell könnte das bitte mal ein Mod machen, Danke. Gruß Ronny
Ronny S. schrieb: > Sorry wollte das eigentlich noch ändern und den Code anhägen. > Eventuell könnte das bitte mal ein Mod machen, Danke. > Gruß Ronny Leider nicht ganz für jemanden der kaum C kann. Kannst du mir evtl. sagen an welche Pins die Datenleitungen angeschlossen werden? Irgendwie finde ich die Info nirgends. Bei meinem Assembler Code habe ich noch den Stackpointer richtig gesetzt, da sonst das Programm gar nichts gemacht hat. Allerdings bekomme ich immer noch nichts angezeigt.
Hallo, also habe dann auch mal extra die Boardsuche genutzt um Dir hier weiter zu helfen. Beitrag "[v] LCDs 320x240 s/w, 6 Zoll, Touch, inkl Controller" Gruß Ronny
Ich bin leider nicht wirklich fit in C deshalb verstehe ich den Code nur teilweise. Außerdem wollte ich erst nur ein oder zwei Zeichen ausgeben. Kann mir evtl sagen wieso mein ASM Code nicht funktioniert? Ich habe am Anfang noch den Stackpointer gesetzt und einen kleinen Delay eingefügt. Etwa 500µs. Mir ist außerdem aufgefallen, dass der Pegel am SEL Pin auf wenige mV abfällt wenn dieser mit dem Display verbunden ist? Kann das so stimmen? Es fließen 77mA! MfG
:
Bearbeitet durch User
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.