- 3D-Druck Einstieg und Tipps         
Seite 21 von 23 ErsteErste ... 111920212223 LetzteLetzte
Ergebnis 201 bis 210 von 229

Thema: Grafik LCD mit Touch

  1. #201
    Anzeige

    Praxistest und DIY Projekte
    Guten Tag zusammen,
    ich habe ein Problem mit dem Display!

    Ich betreibe das Display (noch) im Charaktermodus weil ich zunächst erstmal einfach testen wollte wie es so funktioniert und es funktioniert gut auch das Touchscreen arbeitet gut ABER ich kann einfach ums verrecken nicht in die Zeilen unterhalb von 7! Siehe Foto!

    (Normalerweise soll genau so weiter geschrieben werden 8,9,10)

    Bild hier  

    Ich verstehe es nicht. Oberhalb der 8 Zeile kann ich wunderbar springen sowohl horizontal als auch vertikal. Ein zweites Display habe ich auch schon getestet, das selbe Verhalten!

    So initialisiere ich das Display:

    Code:
    void GLCD_Init_C(void)
    {
      GLCD_RES=0;
      Delay10KTCYx(1);
      GLCD_RES=1;
    
      GLCD_writecom(0x00);  // Mode Con
      GLCD_writedata(0x3C);  // Character Mode, Cursor blink  
      
      GLCD_writecom(0x01);  // Character Pitch
      GLCD_writedata(0x77);  // 8x8 Chars  
    
      GLCD_writecom(0x02);  // Number of Characters
      GLCD_writedata(19);  // 19 Zeichen <--->
    
      GLCD_writecom(0x03);  // Set Duty
      GLCD_writedata(0x4F);  // 80-1
    
      GLCD_writecom(0x04);  // Cursor Position
      GLCD_writedata(0x07);  // Line 1
    
      GLCD_writecom(0x08);  // Start Adresse Low
      GLCD_writedata(0x00);  // 0
    
      GLCD_writecom(0x09);  // Start Adresse High
      GLCD_writedata(0x00);  // 0
    
      GLCD_writecom(0x0A);  // Cursor lower adress
      GLCD_writedata(0x00);  // 1
    
      GLCD_writecom(0x0B);  // Cursor upper adress
      GLCD_writedata(0x00);  // 1
    }

    So stelle ich die Adresse ein:

    Code:
    void GLCD_SetAdress(unsigned char x, unsigned char y)
    {
      unsigned short adress;
      adress=y*20+x;
      GLCD_writecom(0x0A);        // write adress low
      GLCD_writedata(adress&255);
      GLCD_writecom(0x0B);        // write adress high
      GLCD_writedata(adress/256);    
    }
    Die Routinen zum Schreiben auf dem Display:

    Code:
    void GLCD_writedata(unsigned char info)
    {
    	GLCD_RS=0;
    	GLCD_write(info);
    }
    
    void GLCD_writecom(unsigned char info)
    {
    	GLCD_Busy();
    	GLCD_RS=1;
    	GLCD_write(info);
    }
    
    void GLCD_write(unsigned char info)
    {
    	GLCD_RW=0;
    	GLCD_Data=info;
    	Delay10TCYx(1);
    	GLCD_Enable();		
    }
    
    void GLCD_Busy(void)
    {
    	GLCD_RW=1;
    	GLCD_RS=1;
    	GLCD_Enable();
    	TRISD=0x80;	
    	while(LATDbits.LATD7){}	
    	TRISD=0x00;
    }
    
    void GLCD_Enable(void)
    {
    	GLCD_E=1;
    	Delay10TCYx(1);
    	GLCD_E=0;
    }
    Ich hoffe sehr, dass mir irgendwer von euch helfen kann ich verstehe es einfach nicht..

    LG Nico

  2. #202
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2009
    Beiträge
    118
    Hey,
    ich hab mal auf der Lib von Sebatian aufbauend eine Funktionsbibliothek geschrieben, um einfache Steuerelemente zu realisieren.

    Man kann mit der Lib momentan Buttons, Checkboxes und Slider (Vertikal) erstellen. Eine Progressbar mach ich demnächst noch.

    Ebenso beinhaltet die Lib Funktionen zum zeichnen von Vierecken, Kreisen und Linien.

    Ich denke die Befehle erklären sich größtenteils von selbst, nur:
    RefreshCheck und RefreshSlider müssen immer wieder aufgerufen werden (interrupt?), damit sich der Status der Checkbox bzw. des Sliders beim Berühren ändert.
    Der Wert einer Checkbox kann aus der Variable Checked[id] gelesen werden. Der Slider muss mit GetSlider(id) gelesen und mit SetSlider(id,val) gesetzt werden. Der gültige Bereich ist von 0-100

    Ein Button wird mit GetButtonPressed(id) abgefragt.

    Der Rest funktioniert eigentlich wies im Headerfile steht. Create zum Erstellen Delete zum Löschen etc.


    Wenn jemand diese Lib testet wäre ich über Rückmeldungen dankbar.

    MfG C_Classic
    Angehängte Dateien Angehängte Dateien

  3. #203
    Erfahrener Benutzer Begeisterter Techniker Avatar von .:Sebastian:.
    Registriert seit
    07.01.2006
    Ort
    Arkon I
    Beiträge
    203
    Moin Moin

    So jetzt bin ich wieder zurück aus dem Angelurlaub.

    C_Classic:
    Ich würde deine Lib gerne testen doch mir fehlt die Hartware.
    Sobald ich wieder Zeit habe wert ich mal was frickeln.


    Was mir auffällt ist das du relativ viel über lcd_plot_pixel machst.
    Das is an sich kein Problem nur ist es inperformant (in oder im ?) ohne Gande.
    Du weißt das du für JEDES Pixel 2 byte an das Display schickst ?
    Es wäre eventuell geschickter wenn du direkt den Display speicher lesen + schreiben würdest. (1Byte lesen, Pixel die zur Linie gehören setzen, Byte wieder schreiben)
    Eine horizontale Linie mit 8 Pixel Länge lässt sich so im günstigsten Fall mit 4byte (2 lesen + 2 schreiben) realisieren.
    Im Moment verschickst du dafür 16 Byte (2 pro Pixel) sprich du könntest das um Faktor 4 beschleunigen.
    (Weil ein paar bitshifts im AVR sind schneller als die Kommunikation mit dem Display)

    Aber ich werde mir deine lib demnächst mal ansehen, kann sogar sein dass ich sie in meinem nächsten Projekt verbaue.

    mfg
    Sebastian

    PS: Ich würd mal noch meinen Name + E-mail Adresse in den Sourcen hinzufügen.
    Und vllt. eine Lizenz (z.b. MPL , BSD oder zur not auch GPL) damit die Leute die es verwenden wollen das auch dürfen.

  4. #204
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2009
    Beiträge
    118
    Die Sache mit dem PlotPixel ist so, weil ich nicht genau weiß, wie es anderst geht. Da müsste ich mich erstmal einarbeiten.
    Zu der Sache mit den Lizenzen: Ich denke da wär die MPL gut, darunter steht ja auch der Rest der Lib.

    MfG
    C_Classic

  5. #205
    Erfahrener Benutzer Begeisterter Techniker Avatar von .:Sebastian:.
    Registriert seit
    07.01.2006
    Ort
    Arkon I
    Beiträge
    203
    Moin Moin

    Also ich hab den ganzen Morgen Und Mittag damit meine Display-Testplatine nach einem Jahr in der Karbbelkiste ohne Controller wieder zu beleben.
    Nach dem ich das Display tauschen musste weil der Folienleiter vom Touchteil rissig und wackelkontaktig war scheint jetzt alles wieder zu gehen (nur is auf dem Display die Touchfolie anderes herum drauf als auf den vorher).

    Jedenfalls kann ich bestätigen das deine Lib tut.


    Gruß
    Sebastian

  6. #206
    Neuer Benutzer Öfters hier
    Registriert seit
    06.10.2007
    Beiträge
    7
    Hallo hier im Forum,

    @Alle: Habe immer noch das Problem, dass ich keinen engen Text (viel Infos auf wenig Raum) darstellen kann. Gibt es jemanden, der 26 Zeichen pro Zeile (fehlerfrei) darstellen kann, dann sagt mir bitte wie!!!

    @ Sebastian: Du bist vom Angeln zurück und baust eine Testplatine, das lässt hoffen. Evtl. kannst du ja meine Probleme (siehe Bilder oben) 1) im Textmodus mit 26 Zeichen pro Zeile das Problem in der Mitte des LCDs 2) im Grafikmodus z.B. mit deinem Zeichensatz 8x8 bei den Buchstaben „h“ und „r“ nachvollziehen und hast evtl. eine Lösung dafür.
    Manchmal beschleicht mich die Idee, dass ich eine unfertige Version deiner Lib benutze – neulich fand ich auf einer deiner Seiten eine andere Version ohne Touchkalibrierung – die zwar etwas bereinigt aussah, die ich allerdings nicht zum Laufen bekommen habe (könnte ein Timing Problem sein).

    @C_classic: Danke für die „functions“. Habe sie mal kurz eingebunden und es lief soweit. Einen slider finde ich sehr interessant. Abfrage und Verschieben habe ich auf Anhieb nicht hinbekommen – evtl. ist ein kleines Demoprogramm ganz schönJ Ein sehr gute Linienfunktion gab es ja schon bei Sebestian.

    @Alle: Ich bin ein bildlicher Mensch und habe deshalb für mich ein kleines Zeichensatz-Tool programmiert. Wer will kann es hier downloaden. Es ist zum privaten gebrauch, erfüllt den Zweck für den ich es entwickelt habe und ist auf keinen Fall perfekt. Man kann damit GLCD-Zeichensätze (maximal 8x erkunden und auf die eigenen Bedürfnisse anpassen. Im linken Fenster muss man etwas markieren, dann kann man die Zeichen einzeln anzeigen lassen, rotieren, spiegeln, verschieben und als neuen Quelltext im rechten Fenster erstellen lassen. Ich gehe nicht den Weg, dass man MSB und horizontal/ vertikal oder was auch immer einstellen muss, sondern jedes Zeichen wird entsprechend der Anzahl von Manipulationen verschoben/ rotiert/ gespiegelt und dann als Hex-Code gespeichert. Man kann auch in den Festern rechts und links Markieren und Einfügen oder Editieren, so dass man jederzeit auch mal eine Ausgabe von rechts nach links verschieben kann, markieren und anzeigen. Es ergeben sich bei geschickter Handhabung recht vielfältige Arbeitsmethoden.
    Ich wollte zuerst noch TrueType Fonts einladen lassen, mache das aber z.Zt. mit GLCD Fontcreator 1.0.1 von http://www.pocketmt.com/ (Export nach Basic, dann in mein Programm einladen und weiter beareiten). Eine Weiterentwicklung plane ich nicht.
    Angehängte Dateien Angehängte Dateien

  7. #207
    Erfahrener Benutzer Begeisterter Techniker Avatar von .:Sebastian:.
    Registriert seit
    07.01.2006
    Ort
    Arkon I
    Beiträge
    203
    Manchmal beschleicht mich die Idee, dass ich eine unfertige Version deiner Lib benutze
    Kann durchaus sein, die neuste Version ist 0.6 beta.
    Die Version steht über der Lizenz in der lc7891.c oder der lc7891.h.

    neulich fand ich auf einer deiner Seiten eine andere Version ohne Touchkalibrierung – die zwar etwas bereinigt aussah, die ich allerdings nicht zum Laufen bekommen habe (könnte ein Timing Problem sein).
    Das kann allerdings überhaupt nicht sein.
    Erstens ich hatte nie eine Touch Kalibrierung.
    Die mitgelieferte touch.c enthält Durchschnittswerte von 2 Displays.
    Die habe ich gemessen, als ADC Werte und dann mit Papier, Bleistift und meinem fx991-ES die Umrechnungsfunktionen ADC wert in Koordinate aufgestellt.
    Die soll auch nur so pi mal Daumen passen, als prove of concept.
    Zweitens wenn ich alle Änderungen der letzten paar Monate durchgehe, waren es zu 90% Dokusachen und 1-2 Zeilen Code.

    Sicher das du meine Lib erwischt hast ?
    http://sebastians-site.de/homepage/e...or-lc7981.html

    Ein sehr gute Linienfunktion gab es ja schon bei Sebestian.
    Jetzt bin ich vollkommen verwirrt.
    Weil keine Version meiner lib hatte bis jetzt eine Linienfunktion.
    Für die Version 0.7 ist einen geplant (seit gestern auch funktionsfähig) aber da 0.7 noch nicht fertig is hat davon noch nichts mein NAS verlassen.

    Ist das jetzt meine lib die du benutzt oder nicht ?

    Sebastian

    //Edit1 :
    Die komischen Pixelfehler bei einigen Buchstaben kann ich mittlerweile bestätigen.
    Ich weiß nur nicht woher die kommen.

    //Edit2:
    Ich glaube meine Fontroutine kann in derzeitiger Form gar nicht so funktionieren wie ich es gerne hätte.
    An sich müsste ich die lcd_plot_char neu schreiben.
    Und die Fonts an sich anders im Flash organisieren.
    Der Plan is das man dann diese Quasi-standart als Array abgelegte Fonts nutzen kann.
    Ich melde mich wenn das fertig ist (irgendwann nächste Woche).

  8. #208
    Neuer Benutzer Öfters hier
    Registriert seit
    06.10.2007
    Beiträge
    7
    Hi Sebastian,
    jetzt habe ich also deine richtige Lib V0.6

    Meine andere Version ist auch deine Lib, die offenbar jemand erweitert hat, eine Versionsnummer steht nicht drin. Da ich am Anfang so einiges zum Display gesammelt habe, kann ich nicht mehr sagen, woher ich das habe. Die Linienfunktion sieht ganz so aus wie die aus der Lib von Benedikt (mikrocontroller.net) line + bresenham_line sinnvoll ergänzt. Eine touchkalibrierung ist in writingdemo eingearbeitet, die Werte werden im Eeprom gespeichert, die Überprüfung, ob kalibriert ist, erfolgt recht simpel, mit der Abfrage eines Klicks in einem Buttonbereich.

    Mit der Lib von Benedikt habe ich jetzt endlich eine Textdarstellung von 26 Zeichen pro Zeile hinbekommen. Allerdings ist diese Lib zunächst auf einen Zeichensatz beschränkt, wobei du das variabel gestaltet hast. Selbst bei Zeichensätzen, die nur 3 Byte pro Zeichen haben und nur 5 Bit tief sind, lassen sich die Abstände zwischen den Zeichen nicht so klein wie möglich wählen. Mit schmalen Zeichensätzen von 3 Pixeln Breite + 1 Leerpixel müsste man ja 160/4 = 40 Zeichen pro Zeile darstellen können.

    Wie sieht es mit dem Textmodus aus, kannst du mit internem Zeichensatz 26/ Zeile fehlerfrei darstellen?

    Grüße Tom.

  9. #209
    Erfahrener Benutzer Begeisterter Techniker Avatar von .:Sebastian:.
    Registriert seit
    07.01.2006
    Ort
    Arkon I
    Beiträge
    203
    Moin Moin ...

    Ich war mal wieder für ein paar Tage abgetaucht.

    Zunächst einmal die gute Nachricht.
    Mein Rewrite der Fontfunktionen geht ganz gut voran.
    Ich hab einen neuen Code zum anzeigen von Bitmaps, der jetzt byteweise statt bitweise durch die Bitmaps iteriert.
    Der ist erstens schneller und zweiten in jeden Fall kompatibel mit dem was gängige Konverter ausspucken.
    Nur leider läuft er noch nicht auf Avr, sondern nur in meiner schnell zusammengehackten Display Simulation am PC.

    Die nächste schlechte Nachricht ist, dass ich im Moment einfach nicht dazu komme da mit so viel Zeitaufwand weiter zu arbeiten, wie nötig wäre.
    Und weil meinen bisherige Version aus genau diesem Grund so viele kleine Bugs hat, werde ich versuchen dieses mal etwas gründlicher zu arbeiten.

    Was das Problem dem Textmodus angeht, bin ich leider noch nicht wirklich weiter gekommen.
    Allerdings äußert sich das Problem bei mir komplett anders.
    Anstatt fehlerder Pixel bekomme ich einen dicken schwarzen Balken am rechten Bildrand.

    //Edit1: Ich glaub ich habs.
    Is zwar aus der Kategorie dirty hack, aber es scheint zu funktionieren.
    Und zwar kommt der schwarze Balken daher das der Controller die überzählen Pixel am ende der Zeile nicht ansteuert.
    Aber im Graphicmodus kann ich die ausschalten.
    Also mit folgendem Code und meiner aktuellen lib geht es bei mir :
    Code:
    	lcd_init(LCD_GRAPHIC); //erstmal alle Pixel aus.
    	lcd_init(LCD_TEXT); // Texmodus
    	lcd_write_text("12345678901234567890123456"); ///Tada  !
    Nur um vor zu beugen :
    Mein Display wird so initialisiert :
    Code:
    	if(mode == LCD_TEXT) {
    
    		lcd_mode = LCD_TEXT;
    
    		lcd_write_command(0x00,0x3C);
    		lcd_write_command(0x01,0x75);
    		lcd_write_command(0x02,LCD_TEXT_COLUMNS -1);
    		lcd_write_command(0x03,0x4F);
    		lcd_write_command(0x04,0x07);
    		lcd_write_command(0x08,0x00);
    		lcd_write_command(0x09,0x00);
    		lcd_write_command(0x0A,0x00);
    		lcd_write_command(0x0B,0x00);
    
    	}
    	else {
    
    		lcd_mode = LCD_GRAPHIC;
    
    		lcd_write_command(0x00,0x32);
    		lcd_write_command(0x01,0x07);
    		lcd_write_command(0x02,(LCD_GRAPHIC_WIDTH / 8)-1);
    		lcd_write_command(0x03,0x4F);
    		lcd_write_command(0x08,0x00);
    		lcd_write_command(0x09,0x00);
    		lcd_write_command(0x0A,0x00);
    		lcd_write_command(0x0B,0x00);
    	}
    Bitte vorher wirklich checken, ob das auch wirklich so in der lib steht oder ob das wieder eine andere ist. (In meiner stand NIE etwas anderes, das kann ich garantieren.)
    Wär schön wenn jemand das mal jemand testen könnte.


    Und für alle die auf die neue Version meiner Lib warten :
    Sie wird definitiv kommen, nur wann kann ich nicht sagen. (In 1-2 Monate vllt.)
    Ich brauche meine Lib nämlich selbst für ein Projekt, aber bevor ich soweit bin, muss ich erst ein paar andere Dinge fertig bekommen.
    Put first things first wie is auf Englisch so schön heißt.

    Gruß
    Sebastian

  10. #210
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.05.2009
    Beiträge
    118
    Noch ne Frage zu meiner Lib: Ich hab da immer, wenn ich nur 8-Bit Zahlen speichere, den Typ char verwendet. Jedoch gibts da Probleme. (Wegen binärer 0 am Ende?)
    Deshalb: Welchen Datentyp, der nur 1 Byte Speicher belegt, kann ich als Array verwenden?

Seite 21 von 23 ErsteErste ... 111920212223 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress