Mikrocontroller

OP #279623
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
#279624
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
Gast #279625
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 :-)
OP #279627
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
OP #279629
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
Gast #279632
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.
OP #279633
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 :-)
#279637
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren