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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.