Forum: Mikrocontroller und Digitale Elektronik LCD MSP430 Problem


von Freak (Gast)


Lesenswert?

Hallo!

Ich habe auf der Seite mathar.com mir das LCD Tutorial angeschaut.

Zum testen habe ich einfach mal den kompletten Quellcode kopiert und 
lediglich die Tasten angepasst (statt Port 6 auf Port 1).

Allerdings erscheinen auf meinem 2*16 LCD mit HD44780 Controller nur 
schwarze Kästchen und das auch nur in der ersten Reihe.

Ich habe die Verkabelung schon zweimal kontrolliert und neu gemacht, 
aber das Problem ist das gleiche. Durchgemessen habe ich die Leitungen 
auch, daran sollte es eigentlich nicht liegen. Hat jmd eine Idee, was 
ich falsch gemacht haben köntte?

Danke

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Der Code (*) hängt ganz essentiell davon ab, dass die Wartefunktion wie 
vorgesehen funktioniert und damit die Mindesttimings aus dem LCD 
Datenblatt eingehalten werden!

Werden die Timings nicht eingehalten, kann der µC das LCD nicht 
initialisieren (Softreset ausführen) und es kommt zu den typ. 
einzeiligen Klötzchen.

1
void wait(unsigned int i) // delay function
2
{
3
  unsigned int j;
4
  for(j=0;j<i;j++);
5
}

Anm. aus dem Tutorial

[zitat]
void wait(unsigned int i)
Diese Funktion wird benötigt, da das LCD-Display eine gewisse Zeit 
braucht, bis es die angelegten Befehle ausgeführt hat. Die genauen 
Zeiten hängen von der Taktrate des MSP430 ab und sind auf Seite 191 des 
Datenblattes zu finden.
[/zitat]

Es gibt Compiler z.B. den GCC, die optimieren Code wie obiges leeres 
for gnadenlos weg. Da würde ein volatile unsigned int j; helfen bzw. 
eine bessere Wartefunktion.

*
Hardware: http://mathar.com/msp_lcd1.html
Software: http://mathar.com/msp_lcd2.html
C-Source: http://mathar.com/lcd_code.c

von Freak (Gast)


Lesenswert?

Leider weiß ich nicht von welchem Datenblatt er redet. Ich habe einen 
32kHz und 8Mhz Quarz am MSP430.

Als Compiler nutze ich IAR Workbench. Ich versuche trotzdem mal das 
volatile

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Da ist das Datenblatt des verwendeten MSP430 gemeint: MSP430F149.

Soweit ich dort im Text lese, wird der mit "Uhrenquarz mit 32,768 KHz" 
betrieben. Vergleicht man das Headerboard bei Olimex mit dem Foto im 
Tutorial, findet man aber keinen Uhrenquarz auf dem Tutorialboard, 
sondern man sieht einen installierten Quarz im "optional high frequency 
crystal (socket)". Leider ohne Frequenzangabe.

Im Endeffekt hilft wohl nix. Du musst dir eine zuverlässige 
Wartefunktion schreiben oder beschaffen und austesten.

von Freak (Gast)


Lesenswert?

was ist denn eine zuverlässige Wartefunktion?
das mit dem volatile funktioniert auch nicht, und die Zeiten hab ich 
verdoppelt, aber bringt irgendwie auch kein Erfolg.

Ich wäre schon glücklich mal ein einzelnes Zeichen zu sehn :)

von Peter D. (peda)


Lesenswert?

Freak schrieb:
> was ist denn eine zuverlässige Wartefunktion?

Schau mal in die Doku zu Deinem Compiler, ob da Wartefunktionen bei 
sind, z.B. delay_us(), delay_ms().


Beim AVR-GCC gibt es eine delay.h, damit ist das LCD ansteuern ein 
Kinderspiel:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296


Peter

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ich würde einen Zwischenschritt machen und mich dabei nur auf die 
Aufgabe Wartefunktion konzentrieren. Das LCD ist dabei als 
Erfolgskontrolle bescheiden: Es kann nur 'geht' oder 'geht nicht'

Es hängt von deinen Möglichkeiten ab, wie du mehr Infos bei der 
Entwicklung bekommst. Oszi wäre super, aber das ist bei Einsteigern 
selten vorhanden. Aber eine simple LED und ein passender Vorwiderstand 
ist meistens vorhanden oder kann aus irgendeinem Teil gemopst werden. 
Und Uhren hat man viele...

Also schreibt man sich ein Blinkprogramm mit dem 
Wartefunktion-Kandidaten. Laut Code oben soll wait(20000) 10ms warten. 
Damit kann man sich eine Funktion schreiben, die z.B. 0,5 s wartet (50 
Aufrufe wait(20000)). 0,5s LDE an, 0,5s LED aus und dein Projekt sollte 
einen Puls um 60 Schläge pro Minute haben...

Beim Launchpad gibt es ein Beispiel bei dem ähnliche Funktionen wie von 
Peter angesprochen benutzt werden. Sie stützen sich auf eine Build-In 
(intrinsic) Funktion __delay_cycles(). Dort ist auch die Verlängerung 
per Wartezeit zu sehen: 
http://processors.wiki.ti.com/index.php/Playing_The_Imperial_March

von Freak (Gast)


Lesenswert?

Hallo und danke für den tollen Tipp!

Ich habe folgende Compiler-Funktion gefunden
1
__delay_cycles
2
3
Syntax
4
void __delay_cycles(unsigned long cycles);
5
6
Parameters 
7
cycles     The time delay in number of cycles. This must be a constant. 
8
9
Description
10
Inserts assembler instructions that delay the execution the number of specified clock cycles, with a minimum of code

Angenommen ich möchte 1 ms warten und der Chip läuft mit 8 MHz, dann 
brauch ich doch nur:
1
__delay_cycles(8000];

oder?

von Freak (Gast)


Lesenswert?

ich hab jetzt eine delay funktion geschrieben, die auch bestens 
funktioniert, was meine blinkende led ja auch beweist.

Allerdings habe ich immer noch das gleiche Problem mit dem Display. Ich 
hab die geforderte Zeit abgewartet, aber die erste Reihe bleibt mit 
Blöcken gefüllt.

Hat vielleicht noch jmd eine idee, was ich falsch gemacht haben könnte?

von Peter D. (peda)


Lesenswert?

Welche LCD-Lib benutzt Du denn?

Das HD44780 Datenblatt ist etwas irreführend. Alle Kommandos bis 
einschließlich des 4Bit-Mode Kommandos müssen von einem Delay gefolgt 
werden!

Wenn Du ein Zyklus-Delay hast, ist das schonmal gut. Dann kannst Du Dir 
delay_us und delay_ms selber schreiben, indem Du einmal die Taktfrequenz 
definierst (F_CPU) und dann die Umrechnungformel als Argument 
reinschreibst. Konstanten rechnet der Compiler ja selber aus.


Peter

von Freak (Gast)


Lesenswert?

Ich schreib mal meinen Code hier rein, der im Prinizp der von der 
mathar.com Seite ist
1
int main(void)
2
{
3
  WDTCTL = WDTPW + WDTHOLD;  // watchdog aus
4
  
5
  BCSCTL1 &= ~XT2OFF;                       // XT2= HF XTAL
6
 
7
  do
8
  {
9
    IFG1 &= ~OFIFG;                         // Clear OSCFault flag
10
    for (i = 0xFF; i > 0; i--);             // Time for flag to set
11
  }
12
  while ((IFG1 & OFIFG));                   // OSCFault flag still set?
13
14
  BCSCTL2 |= (SELM_2 | SELS);               // SMCLK = MCLK= XT2 (safe)
15
  
16
  P4SEL = 0x00;                    // GPIO
17
  P4DIR = 0xFF;                    // Output
18
  P4OUT = 0x00;                    // init mit 0
19
    
20
  P5SEL = 0x00;                    // GPIO
21
  P5DIR = 0xFF;                    // Output
22
  P5OUT = 0x04;             // initial nur E (clock) auf high, RS und R/W auf low
23
24
  delay_ms(2000);
25
  LCDInit();              // LCD initialisieren ...
26
  LCDClear();             // ... und dann noch loeschen und cursor an den anfang zurueck
27
28
  for(;;)
29
  {
30
      LCDClear();
31
      LCDOuts(alphabet[n++]); // alle buchstaben des alphabetes durchtoggeln
32
      P4OUT=0x10;         // cursor ein feld nach links bewegen (zurueck auf den buchstaben)
33
      P5OUT=0x04;         // RS und R/W low, E high
34
      LCDClock();         // befehl ausfuehren
35
      chars--;            // chars wieder kleiner machen, weil wir ja zurueck gehen mit dem cursor
36
      delay_ms(10000);
37
  }
38
 }
39
40
void LCDClock(void)
41
{
42
  delay_ms(15);
43
  P5OUT|=0x04;            // clock-bit erst mal sicherheitshalber auf high
44
  delay_ms(15);
45
  P5OUT&=~0x04;           // und jetzt auf low
46
  delay_ms(15);
47
}
48
49
void LCDClear(void)
50
{
51
  row=0;                  // zeilen- und zeichencounter resetten
52
  chars=0;
53
  P4OUT=0x01;             // clear display
54
  P5OUT=0x04;             // RS und R/W low, E high
55
  LCDClock();             // befehl ausfuehren
56
  delay_ms(500);              // clear display braucht was laenger
57
}
58
59
void LCDOutc(char str)
60
{
61
  P4OUT=str;              // str einfach an den port schicken
62
  P5OUT=0x05;             // RS und E high, R/W low
63
  LCDClock();             // befehl ausfuehren
64
  chars++;                // zaehlvar. eins erhoehen
65
  if (chars==20)          // zeile voll?
66
  {
67
    row^=1;               // toggle row
68
    chars=0;              // reset chars
69
    if (row==1)
70
    {
71
      P4OUT=0xC0;         // in die zweite zeile springen
72
      P5OUT=0x04;         // RS und R/W low, E high
73
      LCDClock();         // befehl ausfuehren
74
    }
75
    else
76
    {
77
      LCDClear();         // wieder zurueck in die erste zeile springen
78
    }
79
  }
80
}
81
82
void LCDOuts(char* str)
83
{
84
  while (*str != 0) {LCDOutc(*str++);}
85
}
86
87
void LCDInit(void)
88
{
89
  P4OUT=0x38;             // 8 bit operation, 2-zeilen-display, 5*8 dot font
90
  P5OUT=0x04;             // RS und R/W low, E high
91
  LCDClock();             // befehl ausfuehren
92
  P4OUT=0x0E;             // display anschalten, cursor an, cursor blinkt nicht
93
  P5OUT=0x04;             // RS und R/W low, E high
94
  LCDClock();             // befehl ausfuehren
95
  P4OUT=0x06;             // cursorrichtung: nach rechts; kein display-shift
96
  P5OUT=0x04;             // RS und R/W low, E high
97
  LCDClock();             // befehl ausfuehren
98
}

delay ms(1) ist eine Millisekunde, habe extra lange wartezeiten 
eingefügt.

Ich weiß wirklich nicht was da falsch sein könnte.

von Peter D. (peda)


Lesenswert?

Was soll das werden?

Der E-Puls muß minimal 0,45µs sein, 15000µs ist also reiner Blödsinn.
Der E-Pin ist immer low und wird nur kurz gepulst, nachdem alle 
anderen eingestellt sind.

Lies das Datenblatt, nimm die Minimalzeiten vielleicht zur Sicherheit *2 
aber nicht *30000.


Peter

von Freak (Gast)


Lesenswert?

hab den code jetzt angepasst.
1
void LCDClock(void)
2
{
3
  delay_us(6);
4
  P5OUT|=0x04;            // clock-bit erst mal sicherheitshalber auf high
5
  delay_us(6);
6
  P5OUT&=~0x04;           // und jetzt auf low
7
  delay_us(6);
8
}
9
10
void LCDClear(void)
11
{
12
  row=0;                  // zeilen- und zeichencounter resetten
13
  chars=0;
14
  P4OUT=0x01;             // clear display
15
  P5OUT=0x04;             // RS und R/W low, E high
16
  LCDClock();             // befehl ausfuehren
17
  delay_us(500);          // clear display braucht was laenger
18
}

Dennoch ändert sich bei meinem Display nichts.

von Freak (Gast)


Lesenswert?

hoppla hatte 4,5 us im Sinn. darum die 6 us bei der überarbeiteten 
Version, aber auch mit 1 us in der LCDClock passiert hier nichts.

von Peter D. (peda)


Lesenswert?

Freak schrieb:
> delay_us(500);          // clear display braucht was laenger

Seit wann sind 500µs >= 1.52ms ???

Und E darf erst high gehen 60ns nach RS setzen, nicht gleichzeitig!

Lies doch bitte endlich mal das Datenblatt.


Peter

von Freak (Gast)


Lesenswert?

ich glaub ich habe die Seite gefunden, die du meinst.

Meinst du mit dem E erst nach R/S setzten an den stellen wo P5OUT=0x04 
steht?

von Hallo (Gast)


Lesenswert?

Freak schrieb:
> Meinst du mit dem E erst nach R/S setzten

Ja, auf jeden Fall erst danach - das R/S gehört ja mit zum Befehl.

von Freak (Gast)


Lesenswert?

ich komme immer noch nicht klar. irgendwie scheint dieser mathar code 
nicht zu funktionieren. Ich werde wohl oder übel mir alles selber 
programmieren müssen.

von Freak (Gast)


Lesenswert?

hi, ich habs immer noch nicht hinbekommen...
kann man die LCD library for HD44870 based LCD's von Peter Fleury 
umschreiben für einen MSP430?

Wenn ja könnte mir jmd. einen Hinweiß geben, was man da wie ändern 
müsste?
Ich kenne mich mit Atmel leider nicht aus.

Danke!

von holger (Gast)


Lesenswert?

Versuch mal so:

void LCDInit(void)
{
  P4OUT=0x30;
  P5OUT=0x04;             // RS und R/W low, E high
  LCDClock();             // befehl ausfuehren
  P4OUT=0x30;
  P5OUT=0x04;             // RS und R/W low, E high
  LCDClock();             // befehl ausfuehren
  P4OUT=0x30;
  P5OUT=0x04;             // RS und R/W low, E high
  LCDClock();             // befehl ausfuehren

  P4OUT=0x38;             // 8 bit operation, 2-zeilen-display, 5*8 dot 
font
  P5OUT=0x04;             // RS und R/W low, E high
  LCDClock();             // befehl ausfuehren
  P4OUT=0x0E;             // display anschalten, cursor an, cursor 
blinkt nicht
  P5OUT=0x04;             // RS und R/W low, E high
  LCDClock();             // befehl ausfuehren
  P4OUT=0x06;             // cursorrichtung: nach rechts; kein 
display-shift
  P5OUT=0x04;             // RS und R/W low, E high
  LCDClock();             // befehl ausfuehren
}

von Peter D. (peda)


Lesenswert?

Kann Dein Compiler denn keine Bitvariablen?
Dann könntest Du mein Beispiel einfach mal ausprobieren (RW muß auf 0V 
sein).

Freak schrieb:
> Allerdings erscheinen auf meinem 2*16 LCD mit HD44780 Controller nur
> schwarze Kästchen und das auch nur in der ersten Reihe.

Dann stimmt noch nichtmal das LCD-Init.


Peter

von Christian R. (supachris)


Angehängte Dateien:

Lesenswert?

Hier mal aus einem alten Projekt die Ansteuerung eines HD44780 Displays 
im 8-Bit Modus mit dem MSP430.

Init:
1
LCD_Command(0x38);          //2 Zeilen, 8 Bit Datenbreite, 5x7 Font an Display
2
wait(1000);
3
LCD_Command(0x0C);          //Display an, Cursor aus
4
wait(1000);
5
LCD_Command(0x01);          //Home Position, alles löschen
6
wait(1000);
7
LCD_Command(0x06);          //Cursor Auto-Increment
8
wait(1000);

von Freak (Gast)


Lesenswert?

Ja das LCD_init ist falsch nur weiß ich nicht wie es richtig geht.
Der Code von oben funktioniert nicht. Auch mit den passenden Wartezeiten 
Nach datenblatt tut sich nichts.

Was ist denn dein Beispiel und was ist mit einer Bitvariable gemeint?
Mein Compiler beherscht das sicher auch, ich weiß nur nichts damit 
anzufangen.

von Freak (Gast)


Lesenswert?

Danke Christian, ich probiere deinen Code mal aus!

von Freak (Gast)


Lesenswert?

Bei mir gibt es einen Fehler im Compiler, P5OUT und P4OUT sind 
undefiniert.

Wo muss ich sie festlegen?
Bin für jeden Tipp dankbar!

von Freak (Gast)


Lesenswert?

Compilerfehler sind weg, aber ich hab wohl wieder was falsch gemacht...
Klötzchen :(

von Freak (Gast)


Lesenswert?

ich probiers weiter der code sollte eingentlich funzen, wenn bei dir 
schon lief :)

von Christian R. (supachris)


Lesenswert?

Der Code passt. Sag mal hast du eventuell den Kontrast viel zu weit 
aufgedreht? Dann sieht man auch nur schwarze Klötzchen.....
P4OUT und P5OUT sowie die Bits in der Header Datei musst du natürlich an 
deine Beschaltung anpassen. Daher hab ich das ja in einer Header Datei, 
da muss man nur dort einmal die Ports/Pins angeben.

von Freak (Gast)


Lesenswert?

ja hab alles angepasst, habe auch etwas den Kontrast runter gedreht ist 
bei ca 0,9 V
die Klötzchen sind dann weg

zum Test:

  for(;;)
  {
    LCD_Char('a');
  }

sollte mir ja ein a ausgeben, aber ich seh da leider nichts.

von Freak (Gast)


Lesenswert?

ich weiß auch nicht, werde mal nen anderen Port vom msp430 nehm. 
Vielleicht ist ja der Wurm in einem drin...

von Freak (Gast)


Lesenswert?

hab mir die Ports im Debugger angeguckt, sieht alles richtig aus

von Freak (Gast)


Lesenswert?

kann es sein, dass die 3 V Flanken vom MSP430 doch nicht ausreichen für 
manche HD44780 ?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Dazu sollte im Datenblatt deines LCD und deines MSP430 etwas stehen.

Du willst die HIGH Pegelspannung des MSP430 bei einem Ausgangspin mit 
der HIGH Pegelspannung des LCD bei einem Eingangspin vergleichen.

Wenn da keine Überlappung vorhanden ist, brauchst du einen 
Pegelwandler.

von Freak (Gast)


Lesenswert?

Wenn das stimmt was in den Datenblättern steht, gibs kein Problem.

Der MSP macht zw. 3 und 3.3V und das LCD soll ab 2.7 V gehen. Naja tuts 
aber nich :(

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Hast du inwischen einen besseren Code als den vom 22.01.2011 17:27?  Mit 
den korrekten Wartezeiten nach jeden Befehl gemäß LCD Controller 
Datenblatt nach jedem LCDClock(). Bisher hast du typ. delay_us(6); plus 
+- paar zerquetschte für den Rücksprung aus LCDClock(), Setzen des 
nächsten Kommandos und Aufruf des nächsten LCD-Kommandos - viel zu 
wenig!

Sind folgende Befehle aus der Init für den LCD Controller bereits mit 
dem Datenblatt abgeklärt? Hast du einen Link auf das Datenblatt oder ein 
PDF?

  P4OUT=0x38; // 8 bit operation, 2-zeilen-display, 5*8 dot font
  P4OUT=0x0E; // display anschalten, cursor an, cursor blinkt nicht
  P4OUT=0x06; // cursorrichtung: nach rechts; kein display-shift

Bist du sicher, dass dein LCD nicht die übliche Reset-Sequenz zu Beginn 
der LCDInit braucht und du direkt mit dem 'Funktion Set' (0x38) los 
legen kannst?

LCDs können zickig sein, wenn die Initialisierung per Software schief 
geht. Machst du einen einen kompletten Power-Up-Zyklus (Schaltung 
AUS-AN) nach dem Flashen vor dem Testen (gut) oder nicht (schlecht)?

von Freak (Gast)


Lesenswert?

Habe den Code von Christian R. versucht. Das Datenblatt 
http://www.mikrocontroller.net/part/HD44780 Seite 45 so hab ich es 
versucht.

Christian sagt ja der Code funktioniert, das glaube ich ihm auch. 
Verkabelt hab ich alles zum x-ten mal, durchgemessen auch. Ich bin mir 
sicher das die LCDs zickig sind :)

Ich mache immer alles aus und debugge neu und hoffe jedes mal etwas zu 
sehn :)

von Dennis (Gast)


Lesenswert?

Freak schrieb:
> kann es sein, dass die 3 V Flanken vom MSP430 doch nicht ausreichen für
> manche HD44780 ?

Gute Frage - also mit 3,3V klappt es definitiv - hatte noch nie ein 
Display, das darauf nicht reagiert hat.

von Dennis (Gast)


Lesenswert?

Eins muss ich mal loswerden...auch wenn nicht hilfreich für den TO.

Ich wunder mich jedesmal, wenn die ganzen HD44780 LCDs bei so vielen 
nicht funktionieren. Ich hatte bis jetzt noch kein einziges, was nicht 
geklappt hat.

Als ich damals mein erstes zum Leben erwecken wollte, lief es auf 
Anhieb. Und das ohne 3-maliges initialisieren und OHNE Wartezeiten 
zwischen den einzelnen Befehlen (diese mache ich selbst jetzt nicht 
immer rein, sofern es im Test ordentlich läuft). Ansonsten begnüge ich 
mich mittlerweile dann eher mit den Timern, um die Anforderungen 
einzuhalten.

Wichtig dabei wäre aber noch, dass ich meine MSPs damals mit dem 
internen DCO betrieben habe, welcher ja nur auf ~1MHz läuft ohne 
Initialisierung. Vielleicht hätte es bei 8MHz auch anders ausgesehen....

Freak schrieb:
> Ich habe einen
> 32kHz und 8Mhz Quarz am MSP430

Aber wenn du einen 32kHz-Quarz dran hast, dann ist das doch optimal für 
einen exakten Timer bezüglich der ms-Timings beim Display.

von Freak (Gast)


Lesenswert?

ich nehm keinen Timer, ich benutze die Wartefunktion des Compilers. Die 
funktioniert, habs am Oszi nachgemessen.
BTW:
Läuft der DCO eigentlich immer mit den rund 1MHz von Haus aus, wenn man 
nichts anderes einstellt? der ist ja auch die Quelle für den MCLK und 
SMCLK, wenn mich nicht alles täuscht.

von Dennis (Gast)


Lesenswert?

Freak schrieb:
> Läuft der DCO eigentlich immer mit den rund 1MHz von Haus aus, wenn man
> nichts anderes einstellt?

Ja, eigentlich schon. Ich weiß nur nicht, wie es bei älteren Derivaten 
ist...

von Freak (Gast)


Lesenswert?

hmm, hab nen anderen MSP verwendet nun sind die Klötzchen weg, aber 
einen Buchstaben sehe ich trotzdem noch nicht. Aber das bekomm ich noch 
hin :)

von gut so!!! (Gast)


Lesenswert?

nicht aufgeben!!!

von Christian R. (supachris)


Lesenswert?

Das einzige Display, was ich mal hatte, und was gezickt hat, was so ein 
komisches 4x20 von LCD-Module.de. Das hatte ich am MSP430 SPI und hab 
erst später gemerkt, dass das gerne die Bitorder per SPI gedreht haben 
will. Der alte MSP430F149 konnte das aber noch nicht. Ansonsten liefen 
alle Module anstandslos. Der Code funktioniert definitiv, war aus 
unserer Projektarbeit im 7. Semester. Da war ein MSP430F169 am Stino 
Reichelt 4x20 Display.

von Freak (Gast)


Lesenswert?

So ersteinmal ein großes Danke an Helfer. Das hier ist das mit Abstand 
beste Forum, dass ich kenne. Es funktioniert endlich! Ich habe meine 
Krempel zu einem Bastlerfreund geschleppt und nach einiger Zeit ist ihm 
aufgefallen, dass die Massen von LCD und dem MSP430 verbunden werden 
müssen! Es hat also eigentlich der Code schon mehr oder weniger die 
ganze Zeit gestimmt. Tja aber 0V sind halt nicht immer 0V und so hat im 
Debugger und logisch alles gestimmt, aber das hat nicht viel genützt.

Ein gutes hat die Sache dann doch noch gehabt, ich kenn die Befehle und 
die Timings des HD44780 sogut wie auswendig und ich werde sicherlich 
nicht noch einmal den Potentialausgleich vergessen.

Von daher kann das Problem als "gelöst" markiert werden :)

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.