Hallo Leute, Möchte einen Graphik display mit dem ATmega32 steuern! Das Display hat aber kein integrierter Zeichensatz, also hab ich in einer header Datei die gesamte Ascii tabelle gegeben! Meine Frage ist: wie kann ich kann ich jetzt ein zeichen oder satz auf dem Display ausgeben???? ich programmiere in C!!! Danke
Indem Du Dir aus der Doku raussuchst, wie Du auf dem Display ein einzelnes Pixel setzen kannst. Danach schreibst Du eine Funktion die ein einzelnes Zeichen ausgibt. Die wird in deine 'ASCII-Tabelle' (wie auch immer die aussehen mag) reingehen und aus den dort vorhandenen Informationen raussuchen, welche Pixel (relativ zu einer bestimmten Bildschirmposition) gesetzt werden muessen. Wie man einzelne Pixel setzt weist Du ja schon. Hast Du diese Funktion, schreibst Du eine weitere Funktion, die einen kompletten String entgegennimmt und diesen Zeichen fuer Zeichen mit der vorhergehenden Funktion ausgibt. Wenn Dir das als Auskunft nicht reicht, dann musst Du schon genauer werden: * Kannst Du ein einzelnes Pixel setzen oder nicht. Sprich: Hast Du bereits eine Funktion dafuer? * Wie ist der exakte Aufbau der Zeichensatztabelle? * Wo genau hast Du Schwierigkeiten
Einzelne Pixel zu setzen funktioniert, wird aber in der Geschwindigkeit keinen berauschen. Besser ist es byte-weise den Garfikspeicher zu beschreiben; dabei ist zu beachten, ob aufsteigende Bytes von links nach rechts, von oben nach unten, oder aber auch genau anders herum im Controller angeordnet sind. In der Regel paßt ein Zeichen nicht auf Byte-Grenzen, sodaß auch noch die auszugebende Zeile oder Spalte rotiert und auf zwei Byte verteilt werden muß. Nebeneinander, untereinander, vorwärts, rückwärts, .... Ein Blatt Papier nehmen, nachdenken und fleißig sein :-)
> Einzelne Pixel zu setzen funktioniert, wird aber in der > Geschwindigkeit keinen berauschen. Meine volle Zustimmung. Allerdings gibt es ein Sprichwort: Mach's zuerst korrekt und dann erst schnell. Ein schnelles Programm das nicht funktioniert, hat keinen Wert.
Hallo Karl, ich hab noch keine Funktion, die einzelne Pixel setzt!!! Wie soll das funktionieren bitte?? hier ist ein Abschnitt zu meiner ASCII deklaration: unsigned char Zeichensatz[128][5]; //Zahlen Zeichensatz[48][0]=0b01111100; //0 Zeichensatz[48][1]=0b10100010; Zeichensatz[48][2]=0b10010010; Zeichensatz[48][3]=0b10001010; Zeichensatz[48][4]=0b01111100; ......//für weiter zeichen und Zahlen dieser Deklaration habe ich in einer Header Datei und dann zum .c Programm zugefügt!! Um genauer zu sein, weiss nicht wie soll ich jetzt zum Beispiel eine 0 auf meinem Display raus geben :-(( Bin ganz ganz neu in diesem Bereich Danke
> ich hab noch keine Funktion, die einzelne Pixel setzt!!! > Wie soll das funktionieren bitte?? Dann wirds Zeit das Datenblatt zum Display zu studieren.
Hi Karl, das Display ist schon initialisiert, geht schon an und aus softwaremässig. Ich kann dadrin auch shcon 1 und 0 über die Datenleitungen schreiben. Weiss jetzt aber nicht wie ist das mit den Buchstaben und Sätze...... Ist überhaupt meine Zeichensatzdeklaration richtig?? Danke
Dein Zeichensatz sieht schon mal nicht schlecht aus. Also was ist nun: kannst Du gezielt ein Pixel setzen oder nicht?
Karl, hab vorhin schon gesagt, daß ich ganz ganz neu in diesem Bereich :-)) Also, wenn ich über die Datenports eine 1010 zum bsp. eingebe kann das Display diese Daten schon lesen! Aber wie soll das für A, B, C.....und Sätze funktionieren?? Danke
simsim, jedes display hat einen satz von Kommandos die mit Datenparametern versehen als Einsen und Nullen ueber die Datenleitung gehen. Ohne Datenblatt zum Display kannst du nicht wissen welche Kommandos/Daten du senden musst, um auch nur einen einzigen Pixel zu setzen. Damit ist die Aufgabe fuer dich nicht zu loesen. Es gibt keine allgemein gueltiges Verhalten von LC Displays.
Also Datenblatt zum Display habe ich schon und ich hab auch alles schon initialisiert, funktioniert auch schon! De Frage ist nur wie man dann Zeichen auf einem Display, der kein interiertes Zeichensatz besitzt, ausgeben kann?? und wie kann ich auf die selber erstellte Zeichensatz softwaremässig zugreifen?? Danke :-)
Hallo Karl, also einzelne Pixel kann ich auf jeden Fall schon setzen, hab gerade nochmal geschaut! Kannst du mir bitte nur erklären wie das dann für Zeichen(a, b,...) über mein eigenen Zeichensatz oder für sätze zu schreiben funktioniert?? Danke
Das ist auch von Display zu Display verschieden. Wie es jetzt genau bei deinem Display geht, steht in deinem Datenblatt. wie ist denn die Typenbezeichnung zu dem Display?
das ist ein grphisches Display mit KS0108 kontroller! Er hat kein integriertes Zeichensatz! Möchte nur den Prinzip zur Programmierung verstehen!! Könntet Ihr mir bitte helfen?
Das Prinzip ist, dass wenn Du ein 'A' ausgeben willst, du dafuer sorgen musst, dass die entsprechenden Pixel gesetzt werden. In Deiner Zeichzensatztabelle stehen die entsprechenden Pixel drin. Jedes Zeichen hat einen bestimmten Code (zb. den ASCII Code, es gibt auch andere Codierungen aber meist hat man es mit ASCII zu tun). Diesen Code kannst du als Index in die Zeichensatztabelle nehmen und Dir da erst mal die 5 Bytes rausholen in denen steht, welche Pixel gesetzt werden muessen, damit du als Mensch diese Pixelansammlung als 'A' wahrnimmst. (Weder der µC noch das Display wissen irgendwas von einem 'A'. Fuer die geht es nur darum Pixel gesetzt oder nicht gesetzt. zB. enthaelt deine Fonttabelle Zeichensatz[48][0]=0b01111100; //0 Zeichensatz[48][1]=0b10100010; Zeichensatz[48][2]=0b10010010; Zeichensatz[48][3]=0b10001010; Zeichensatz[48][4]=0b01111100; und 'zufaelligerweise' sollst Du nun genau das Zeichen '0' an die LCD Position 12/15 ausgeben (12 ist die Spalte, 15 ist die Zeile und wir vereinbaren, dass dort genau das linke obere Eck des Zeichens zu liegen kommen soll) Zeichensatz[48][0] und dort das rechteste Bit: das ist 0 also wird an 12/15 kein Pixel gesetzt Zeichensatz[48][1] und dort das rechteste Bit: das ist 0 also wird an 13/15 kein Pixel gesetzt Zeichensatz[48][2] und dort das rechteste Bit: 0 also wird an 14/15 kein Pixel gesetzt Zeichensatz[48][3] und dort das rechteste Bit: 0 also wird an 15/15 kein Pixel gesetzt Zeichensatz[48][4] und dort das rechteste Bit: 0 also wird an 16/15 kein Pixel gesetzt damit ist die erste Zeile abgearbeitet, weiter gehts zur naechsten Zeile: Zeichensatz[48][0] und dort das zweite bit von rechts: das ist 0 also wird an 12/16 kein Pixel gesetzt Zeichensatz[48][1] und dort das zweite bit von rechts: das ist 1 also wird an 13/16 ein Pixel gesetzt Zeichensatz[48][2] und dort das zweite bit von rechts: das ist 1 also wird an 14/16 ein Pixel gesetzt Zeichensatz[48][3] und dort das zweite bit von rechts: das ist 1 also wird an 15/16 ein Pixel gesetzt Zeichensatz[48][4] und dort das zweite bit von rechts: das ist 0 also wird an 16/16 kein Pixel gesetzt Naechste Zeile Zeichensatz[48][0] und dort das dritte bit von rechts: das ist 1 also wird an 12/17 ein Pixel gesetzt Zeichensatz[48][1] und dort das dritte bit von rechts: das ist 0 also wird an 13/17 kein Pixel gesetzt ... usw. usw. bis die 8.te Zeile ausgegeben worden ist. (die kommt dann in die Pixel 12/22 bis 16/22) (Jetzt musst Du das ganze nur noch in Schleifen verpacken. Schau dir einfach mal die Zahlen genauer an und du wirst sehen wie die Schleifen aussehen muessen). Das ist zwar, wie bereits gesagt, ziemlich langsam es so zu machen, funktioniert aber unter allen Umstaenden, solange Du nur ein Pixel gezielt ein und ausschalten kannst. Wenn Du's so hinkriegst, dann hast Du bereits verstanden wie's geht und kannst Dich damit beschaeftigen das ganze schneller zu machen.
Danke Karl :-) Ich werd's versuchen, falls ich Probleme habe melde ich mich nochmals! bis dann
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.