EA DOG-M162 Curserposition jedes X0 mal an falscher Stelle?

OP #2110943
Lesenswert?

Hallo,

ich hab ein kleines Problem mit dem oben genannten LCD Display... es 
funktioniert erstmal alles... sogar die Curserposition... aber spradisch 
eben nicht... Ich betreibe das Display mit SPI (1MHZ) und erstmal mit 
20cm Flachbandkabel... obwohl ich dachte, es könnte zu Problemen kommen, 
war noch kein falsches Zeichen dabei... deswegen schließe ich auch aus, 
dass ein Übertragungsfehler bei der Curserposition entsteht... 
jedenfalls würde ich das sehr merkwürdig finden...
Außerdem kann man beobachten das die untere Zeile immer an die selben 
zwei Stellen des Displays falsch springt...
Manchmal ist es öfter, manchmal gar nicht... kann mir das nicht 
erklären...

Hab mit zusätzlichen Delayzeiten versucht, aber keine Besserung...

Ich hoffe es hatte schonmal jemand das selbe Problem... hier mal etwas 
Code...
1
        clear_home();
2
  fprintf(stderr, "Umin:     %5.2fV",(float)Spannung_Min*(*SU));
3
  set_cursor(40); //auf neue Zeile springen
4
  fprintf(stderr, "Imax:     %5.1fA",(float)Strom_Max*(*SI));

hier springt das Imax manchmal auf Umin oder auch auf Position 48...

hier die wichtigen funktionen:
1
void set_cursor (unsigned char pos)  // Cursor an Position setzen
2
  {
3
    CONTROLPORT &= ~_BV(CTRL_RS);
4
    SPDR = 128+pos;  
5
                
6
    _delay_ms(0.2);  
7
    ctoggle_RS ();
8
  }  
9

10
void clear_home (void)  // Display löschen, Cursor an Position home setzen
11
  {
12
    CONTROLPORT &= ~_BV(CTRL_RS);
13
    SPDR = 0b00000001;  
14
    _delay_ms(1.2);
15
    ctoggle_RS ();
16
  }


mfg basti
#2111044
Lesenswert?

ich habe deinen code nochmal gelesen. also dein display heißt DOG-M162, 
das bedeutet 16 zeichen / Zeile mit 2 Zeilen. Sprich du hast maximal 32 
Positionen. Du springst aber auf Pos 40, das ist dann wohl falsch, oder?

Ich mach das so:

#define CHARACTER_BUFFER_BASE_ADDRESS 128
#define CHARACTERS_PER_ROW 16

void set_cursor_DOGM163 (char row, char column)
{
    write_instruction_DOGM163 (CHARACTER_BUFFER_BASE_ADDRESS + row * 
CHARACTERS_PER_ROW + column);
}

und das funzt. Gib mal rückmeldung
Tino
OP #2111225
Lesenswert?

ahh, ihr habt recht...

0x40 muss ich der Funktion übergeben...

Hatte keine Infos über die Position der nächsten Zeile im Datenblatt 
gefunden. Habs dann durch probieren herrausgefunden... oder eben auch 
nicht...
Aber schon blöd wenns dann zu 98% funktioniert und man nicht mehr dran 
glaubt das die Position evtl. doch falsch sein könnte...

Ich danke euch

mfg basti
Gast #2111284
Lesenswert?

Die 128 ist nur die 1 im msb die man angeben muss um zu sagen das man 
jetzt in den ddram schreibt... Also das passt soweit...

Funktioniert also nun alles bestens... Toller display mal sehen wie er 
mit den extremen temperaturen im kfz klar kommt....

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