EA T123A-i2c mit PIC18 css
Dienstag, 22. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  CCS Compiler  |  LCD (CCS)  |  EA T123A-i2c mit PIC18 css « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: EA T123A-i2c mit PIC18 css  (Gelesen 2555 mal)
 
Michael
Newbie
*
Offline Offline

Beiträge: 18


Profil anzeigen
« am: September 16, 2009, 13:52:23 »

hiho,
also ich habe folgendes Problem.
Ich habe ein 3x12 i2c display (Datenblatt EAT123A-i2c)an meinen PIC18F458 angeschlossen.
Hardware mässig ist alles 100% richtig angeschlossen.

Was ich bis jetz erreicht habe:
- display geht an ^^
- cursor blinkt
- 3 zeilen
alles kein "großes" problem...

Nun hier meine Problem:

Ich benutze einen LCD treiber, welcher für ein anderes Display geschrieben wurde. Habe ihn aber so modifiziert, das er für dieses "funktioniert"...
Allerdings habe ich ein paar probleme mit der Darstellung Traurig
Meine Buchstaben werden 1. von Rechts nach Links geschrieben und 2. stehen auf dem Kopf. Ich habe schon mit der konfig des displays rumgespielt (increment decrement cursor, zeile bewegen statt cursor usw). Aber nichts hat geholfen.
Zum verständnis:
Ich benutze eine float vatriable um meine werte in das display zu schreiben, indem ich mit einer Schleife immer eine stelle weiter gehe und das Zeichen an das display sende. hier der code dazu
Code:
void display(char *line)
{
   int i = 0;
   i2c_start();
   i2c_write(display_adresse);
   i2c_write(0b01000000); //schreiben ankündigen*/

   while(line[i] != '\0')
   {

      if(i2c_write(line[i]))
      {
         i2c_start();
         i2c_write(display_adresse);
         i2c_write(0b01000000); //schreiben ankündigen
      }
      else i++;
   }
   i2c_stop();
}

Hat vlt schon jemand erfahrungen mit diesem lcd?
Insbesondere, wie ich meinen text+zeichen auf das display bekomme ...
Vielen dank für Eure Zeit :|
« Letzte Änderung: September 18, 2009, 08:31:18 von Michael » Gespeichert
Coltfisch
Sr. Member
****
Offline Offline

Beiträge: 496



Profil anzeigen WWW
« Antworten #1 am: September 16, 2009, 15:07:27 »

Hallo,

eigentlich wollte ich Dir zuerst raten, das Display einfach umzudrehen, denn dann sollte es doch genau das tun, was Du möchstest: Buchstaben richtig herum und Text von links nach rechts  Zwinkernd

Aber:
Wie mir scheint hast Du den Zeichensatz für den "gedrehten Einbau" erwischt. Wie Du auch in der Zeichentabelle (S. 7 im Datenblatt) siehst, verfügt der Displaycontroller über 2 Zeichensätze, einmal für 6 Uhr und einmal für 12 Uhr Einbaulage. Der Zeichensatz für 12 Uhr besteht aber nur aus Großbuchstaben+Ziffern.

Wenn Du also Groß- und Kleinbuchstaben auf dem Display siehst, die vermeintlich "auf dem Kopf stehen"... dann hälst Du das Display wohl wirklich falsch herum  Zwinkernd
Eine Möglichkeit, die Abbildung der Zeichen auf dem Display per Software zu drehen gibt es meines Wissens nach jedenfalls nicht.

Gruß
Daniel

P.S: hier ein funktionierender Link zum Datenblatt: http://www.lcd-module.de/pdf/doma/t123-i2c.pdf
Gespeichert
Coltfisch
Sr. Member
****
Offline Offline

Beiträge: 496



Profil anzeigen WWW
« Antworten #2 am: September 18, 2009, 12:54:52 »

falls jemand eine lösung oder einen ansatz hat, immer her damit
Ähm, was genau erwartest Du denn jetzt? Das Display hat einen festen Zeichensatz, der Displaycontroller bietet nicht die Möglichkeit, die einzelnen Zeichen per Software zu drehen/spiegeln und Du hast das Display falsch herum eingebaut. Da bleibt nicht mehr viel übrig, als dann entsprechend die Hardware zu drehen  Zwinkernd

Letzte Chance, die ich noch sehe: der Displaycontroller bietet die Möglichkeit, eine begrenzte Anzahl von benutzerdefinierten Zeichen zu speichern. Du könntest schauen, ob Du damit einen Zeichensatz von Hand "auf Kopf" erzeugen kannst.

Gruß
Daniel
Gespeichert
Coltfisch
Sr. Member
****
Offline Offline

Beiträge: 496



Profil anzeigen WWW
« Antworten #3 am: September 18, 2009, 13:30:42 »

Vielleicht solltest Du einfach mal ein Foto von der Displayausgabe machen, damit man nachvollziehen kann, was nun überhaupt Dein Problem ist. Deine Beschreibungen jedenfalls sind nicht besonders aussagekräftig und offensichtlich reden wir hier aneinander vorbei.
Gespeichert
Coltfisch
Sr. Member
****
Offline Offline

Beiträge: 496



Profil anzeigen WWW
« Antworten #4 am: September 18, 2009, 15:55:29 »

Aha! Und die Anschlüsse sind bei Deinen Skizzen unten rechts?

Ich vermute der controler auf dem display weiss nicht das er ein 12 zeichen display hat, sondern ein 20 zeichen display.
Möglich. Aber dies wird dem Displaykontroller eigentlich im Rahmen der Initialisierung mit Hilfe des "Function Set"-Befehls mitgeteilt. Ich kenne Deinen Initialisierungscode aber nicht.

Das display "kann" auch nur Grossbuchstaben und zahlen, aber das reicht mir.
Also es stellt diese ohne das ich was machen muss einfach dar.
Nein, das Display kann auch noch kleine Buchstaben und jede Menge Sonderzeichen.

Ich habe auch keine ahnung, wie ich auf den zeichensatz zugreifen sollte...
Also zumindest ohne grossen aufwand...
Das geht bestimmt ohne großen Aufwand, eigentlich muss man nur ein Offset zu den Zeichen addieren, die Du ohnehin schon sendest.
Aktuell scheinst Du z.B. 0x50 zu senden, wenn Du ein großes 'P' anzeigst. Wenn Du den "gedrehten" Zeichensatz verwenden möchtest, addierst Du 128 zu allen Zeichen. Ein "gedrehtes" 'P' entspräche damit dem Wert 0xD0.

(siehe code oben, übergeben wird eine float variable die mit sprintf "gefüllt" wurde).
Du meinst hoffentlich, dass Du ein char-Array mit sprintf befüllst...


Gespeichert
Coltfisch
Sr. Member
****
Offline Offline

Beiträge: 496



Profil anzeigen WWW
« Antworten #5 am: September 21, 2009, 08:53:39 »

Ich weiss das das display noch andere Zeichen kann, aber wenn ich via sprintf mein char array fülle, dann werden nur zahlen und grossbuchstaben dargestellt, bei kleinbuchstaben kommt "murks" raus, weil in dem einprogrammierten zeichensatz für ein von mir geschicktes 'a' ein sonderzeichen steht...

Das ist auch zu erwarten. Schau Dir mal die ASCII-Tabelle (z.B. hier: http://www.torsten-horn.de/techdocs/ascii.htm) an. Ein kleines 'a' hat den dezimalen Wert 97 (binär: 0110 0001). Schaut man bei diesem Wert in der Zeichensatztabelle des Displaycontrollers nach (Datenblatt), findet man ein Balkendiagramm-Sonderzeichen. Das kleine 'a', welches Du haben möchtest, hat aber den dez. Wert 225, also genau 97 + 128.

Wie Du das Offset in Deinen Code hineinbekommst, ist eigentlich ziemlich einfach:

Code: (c)
void display(char *line)
{
   int i = 0;
   i2c_start();
   i2c_write(display_adresse);
   i2c_write(0b01000000); //schreiben ankündigen

   while(line[i] != '\0')
   {

      if(i2c_write(line[i] + 128))  // hier das Offset addieren
      {
         i2c_start();
         i2c_write(display_adresse);
         i2c_write(0b01000000); //schreiben ankündigen
      }
      else i++;
   }
   i2c_stop();
}


Gruß
Daniel
Gespeichert
Michael
Newbie
*
Offline Offline

Beiträge: 18


Profil anzeigen
« Antworten #6 am: September 23, 2009, 10:05:36 »

BÄM
Alles gelöst!!!

Code:
void display(char *line) // vor schreiben kontrolleitung auf 1, wenn auf 0 fällt übernimmt das lcd
{

   int i=0;
   i2c_start();
   i2c_write(0b01110100);
   i2c_write(0b01000000);
   while (i <= 11)
   {
   i2c_write(line[i]+128);
   //delay_ms(1);
   //i2c_write(0b01110101);
   //i2c_stop();
   i++;
   }
   i2c_write(0b00000010);
   i2c_write(0b01100000);
   i2c_stop();

}

Thema erledigt Smiley
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.044 Sekunden mit 19 Zugriffen.
 
Top! Top!