www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller


Autor: Adnane El yadari (simsim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Adnane El yadari (simsim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich hab noch keine Funktion, die einzelne Pixel setzt!!!
> Wie soll das funktionieren bitte??

Dann wirds Zeit das Datenblatt zum Display zu studieren.

Autor: Adnane El yadari (simsim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Zeichensatz sieht schon mal nicht schlecht aus.

Also was ist nun: kannst Du gezielt ein Pixel setzen oder nicht?

Autor: Adnane El yadari (simsim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Adnane El yadari (simsim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)

Autor: Adnane El yadari (simsim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Black Friday (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Adnane El yadari (simsim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Adnane El yadari (simsim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Karl :-) Ich werd's versuchen, falls ich Probleme habe melde ich
mich nochmals!
bis dann

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.