Forum: Mikrocontroller und Digitale Elektronik Einzelne Pixel mit S1D13305 (SED1335) setzen


von Wolfgang-G (Gast)


Lesenswert?

Wie kann man einzelne Bildpunkte mit dem oben genannten Controller 
setzen?
z.B. soll auf einer Flüssigkristallanzeige mit 320x240 Bildpunkten bei
x =100
y =100
ein Punkt gesetzt werden.
Durch laufende Erhöhung des x-Wertes um 1 soll dann mal eine Linie 
entstehen.
Eine Abwandlung des Programms einer funktionierenden 240x128 Anzeige mit 
dem Controller T6973c ist mir leider nicht gelungen.
MfG
Wolfgang

von Benedikt K. (benedikt)


Lesenswert?

Der 13305 kann nur Byteweise schreiben/lesen. Du musst also ein Byte 
lesen, das entsprechende Bit in dem Byte setzen und dann das Byte 
zurückschreiben.

von Wolfgang-G (Gast)


Lesenswert?

Danke,
leider hab ich  es nicht so richtig verstanden mit dem schreiben/lesen.
Vielleicht hilft mir ein Programmschnipsel mit etwas Kommentar. Hast Du 
zufällig  ein Beispiel in 'C', welches Du mir zur Verfügung stellen 
kannst?
MfG
Wolfgang

von Olaf (Gast)


Lesenswert?

> leider hab ich  es nicht so richtig verstanden mit dem schreiben/lesen.

Ist doch ganz einfach, du liesst ein Byte aus dem Displayram und
kannst dann mir or/and ein Pixel setzen oder loeschen.

Olaf

von Wolfgang-G (Gast)


Lesenswert?

>Ist doch ganz einfach, du liesst ein Byte aus dem Displayram und
>kannst dann mir or/and ein Pixel setzen oder loeschen.
Wenn es für mich soo einfach wäre, dann hätte ich nicht gefragt.
Meine Anzeige hat 320 x 240 Bildpunkte
oder bei einer Zeichengröße von 8 x 8 Bildpunkten 40 Zeichen pro Spalte 
und 30 Zeilen.
Mit dem Steuerbefehl 46h (Ao=H), gefolgt von 2 Bytes (Ao=L), schreibe 
ich die Cursoradresse, an dem mit dem Steuerbefehl 42h dann ein Zeichen 
geschrieben wird. (funktioniert)
Um wieder zur Ausgangsfrage zu kommen: welches Byte muss ich 
schreiben/lesen, um z. B. an der Stelle x=100, y=100 einen Punkt zu 
erzeugen?
Muss man die Anzeige speziell initialisieren? Vielleicht hat doch noch 
jemand ein Programmschnipsel für mich.
MfG
Wolfgang

von Benedikt K. (benedikt)


Lesenswert?

Wolfgang-G wrote:
> Um wieder zur Ausgangsfrage zu kommen: welches Byte muss ich
> schreiben/lesen, um z. B. an der Stelle x=100, y=100 einen Punkt zu
> erzeugen?

Habe ich doch schon gesagt: Das geht nicht so einfach !
Du kannst immer nur 8 Pixel auf einmal schreiben.

von Wolfgang-G (Gast)


Lesenswert?

Man möchte ja nicht unhöflich sein, aber einmal sagt
Olaf: "Ist doch ganz einfach"
dann heißt es: "Das geht nicht so einfach!"
Vielleicht hat Olaf  ein "einfaches" Programmschnipsel.

Wie ist das mit dem zu schreibenden Byte (8 Pixel) gemeint? Ein Byte 
besteht doch aus 8 Bit und stellt in dezimaler Wertigkeit die Werte
0...255 dar. Man kann aber auch jedem Wert irgendetwas zuordnen.

MfG
Wolfgang

von Benedikt K. (benedikt)


Lesenswert?

Wolfgang-G wrote:
> Man möchte ja nicht unhöflich sein, aber einmal sagt
> Olaf: "Ist doch ganz einfach"
> dann heißt es: "Das geht nicht so einfach!"

Es ist einfach, aber du stellst dir das zu einfach vor: Es sind ein paar 
Befehle notwendig, einer alleine reicht nicht.

> Wie ist das mit dem zu schreibenden Byte (8 Pixel) gemeint? Ein Byte
> besteht doch aus 8 Bit und stellt in dezimaler Wertigkeit die Werte
> 0...255 dar. Man kann aber auch jedem Wert irgendetwas zuordnen.

Jedes Byte hat 8bit, und jedes Bit ist ein Pixel. In einem Byte stecken 
also 8 nebeneinander liegende Pixel. Bisher alles soweit klar ?
OK, dann weiter:
Um jetzt 1 Pixel (=1bit) zu setzen, musst du die anderen Bits 
beibehalten und nur dieses eine setzen. Dies geschieht durch eine ODER 
Operation.
Du musst also das entsprechende Byte lesen, das eine Bit setzen und das 
ganze zurückschreiben.

Einen fertigen Code habe ich dazu leider nicht, da ich mit dem 13305 
recht wenig arbeite.

von Olaf (Gast)


Lesenswert?

> Bisher alles soweit klar ?

Und sollte es aus irgendeinem Grund nicht klar sein, so kann man ja
einfach mal 0xaa, 0xf0 oder 0x0f ins Display schreiben. Wenn man
dann die Ausgabe auf dem LCD sieht sollte es nun aber allerspaetens
klar sein....

Olaf

von Wolfgang-G (Gast)


Lesenswert?

>Bisher alles soweit klar ?
Ja, ich sag mal so: es dämmert.
Aber irgendwo muss bestimmt noch etwas eingestellt werden.
Entweder erhalte ich Textzeichen oder, wenn tatsächlich die gewünschten 
Bildpunkte erscheinen, dann enthält der Bildschirm noch irgendwelche 
Striche und Punkte. Aber das ist bei mir nur Probieren ohne richtiges 
Wissen.
Vielleicht hat noch jemand einen Tipp.
MfG
Wolfgang

von Olaf (Gast)


Lesenswert?

> Aber das ist bei mir nur Probieren ohne richtiges Wissen.

Also das DAtenblatt muss man schon noch selber lesen und verstehen.
Wenn man dazu nicht in der Lage ist dann wird das nie was.

Und es bringt auch nichts mit der ueblichen Abschreibmentalitaet
zu arbeiten weil der gerade dieser Displaycontroller wirklich
jede Menge Dinge einstellbar hat. (z.B mehrere Pages, position im
Displayram, Text-Mode, Grafik-Mode, Beides usw)

Ausserdem sollte man DRINGENST das Datenblatt vom Hersteller des LCDs 
gelesen haben und schauen was der als Initialisierung vorschreibt. Da 
gibt es naemlich unabhaengig vom Displaycontroller verschiedene 
Moeglichkeiten.
Wenn man da was falsches reinschreibt weil man es von jemand anderem
abkupfert der ein anderes Display mit SED1335 benutzt dann kann man 
damit
sein LCD zerstoeren.

Olaf

von Wolfgang-G (Gast)


Lesenswert?

@Olaf
Leider bringt mich Dein belehrender Beitrag nicht weiter. Schade um die 
Zeit, die Du dafür geopfert hast.
>Also das DAtenblatt muss man schon noch selber lesen und verstehen.
>Wenn man dazu nicht in der Lage ist dann wird das nie was.
Ich gebe mir zwar Mühe, ein Datenblatt zu verstehen, aber zu meiner 
Schulzeit gab kein Englisch. (nur Russisch)
>Wenn man da was falsches reinschreibt ...dann kann man damit sein LCD 
>zerstoeren.
Deshalb wollte ich ja auch nicht soviel probieren und suche hier 
zusätzliche Hilfe bei Leuten, die sich damit besser auskennen.
>Text-Mode, Grafik-Mode, Beides usw
Vielleicht kannst Du mir hierzu doch einen Tipp geben, wo ich dazu im 
Datenblatt etwas finde oder noch besser: was muss ich wie und wo 
einstellen.

Wolfgang

von Olaf (Gast)


Lesenswert?

> Leider bringt mich Dein belehrender Beitrag nicht weiter.

Das ist dann aber nicht zu aendern. Die Dinger sind zu kompliziert
als das man sie mal eben so erklaeren kann.

> Schulzeit gab kein Englisch. (nur Russisch)

Das ist zwar sicherlich aergerlich, aber fuer Elektronik ziemlich 
unpraktisch. Vielleicht solltest du dann ein anderes Display in 
erwaegung
ziehen. Der SED1335 ist wirklich ein eher schwerer Fall.

> Vielleicht kannst Du mir hierzu doch einen Tipp geben, wo ich dazu im
> Datenblatt etwas finde oder noch besser: was muss ich wie und wo
> einstellen.

Eigentlich ueberrall. Man muss das lesen und sich dann immer Werte zu 
den Timings anhand des Panels ausrechen. Und weil das so problematisch 
ist haben viele Hersteller die Initialisierungsequenz oft in ihrem 
Datenblatt zum Panel stehen.

Es gab vom Hersteller des SED1335 auch eine Software wo du diese Werte 
eintippen konntest und die hat dir dann einen C-Code generiert der das 
Display initialisert hat.

Noch ein Tip, wenn du irgendwas rumprobierst schalte das Display immer 
aus wenn du nicht draufschaust. Es kann dir sonst passieren das du mal 
kurz aufs Klo gehst, oder 10min im Datenblatt liesst und wenn du wieder 
auf dein Display blickst ist es verstorben weil das Timing nicht 
gestimmt hat. Sobald die Pixel anfangen irgendwie komisch auszusehen, 
abschalten!

Olaf

von Wolfgang-G (Gast)


Lesenswert?

>mit der ueblichen Abschreibmentalitaet zu arbeiten
Na, na, das hat hier m. E. mit Abschreiben nichts zu tun, sondern mit 
der Vermeidung von "uneffektiver" Lernarbeit, da die Programmierung von 
LCD- Controllern nicht unbedingt zu den Grundlagen der Elektronik (wie 
z.B. Operationverstärker-Technik oder Transistorschaltungen) gehört.
Nimm Dir mal ein Beispiel an Benedikt: immer konkrete Antwort
>Die Dinger sind zu kompliziert als das man sie mal eben so erklaeren kann.
Nun mach die Sache nicht schwerer als sie ist. Mit einigen konkreten 
Hinweisen kann man auch hier Hilfe geben.
Falls jemand vor dem gleichen Problem (einzelne Bildpunkte setzen) 
steht, dann kann er bei mir nachfragen. Man muss ja das Fahrrad nicht 
noch einmal erfinden, denn so ein spezieller Controller und die 
Bitschubserei gehört nicht zu den Grundlagen der Elektronik.

Ein Problem konnte ich allerdings noch nicht lösen: mir gelingt es 
nicht, Text und das Zeichnen von Linien (Grafik) zusammen auf den 
Bildschirm zu bringen.
Vielleicht hat jemand einen Tipp.
MfG
Wolfgang

von Ulf (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Ohne Abschreiben hätte wohl Keiner eine Chance zu lernen. Also hier das, 
was ich mal zum SED1335 fand und nach langer Probiererei zum laufen 
brachte(s.Anhang, *.h folgt). Dem Schreiber sei Dank!
Das Timing und die ewige INIT- Befehlskette, welche notwendig ist, um 
dem Display überhaupt eine Reaktion abzuverlangen, ist ziemlich 
entmutigend gewesen. Sich DAS alles aus Datenblättern selbst zu 
erarbeiten, ist wirklich harte Arbeit.
Ich benutze das OPTREX 128*128, was vor einiger Zeit mal bei Pollin 
rumgeisterte.
Damit habe ich mal einen lahmen Oszi gebastelt, liegt halbbeendet auf 
dem Schreibtisch...

Viel Spaß!

ulf.

von Ulf (Gast)


Angehängte Dateien:

Lesenswert?

s.o.

von Wolfgang-G (Gast)


Lesenswert?

Danke Ulf,
schade, dass Du erst jetzt mir Deine Hilfe anbieten konntest. Ich hätte 
mir viel Zeit und
> wirklich harte Arbeit < sparen können.
Es war  "nur eine Kleinigkeit", die ich ändern musste. Es lag an der 
Größe des Bildspeichers für Text. Da hatte ich nur 40x30=1200 Adressen 
vorgesehen. Es ist mir zwar noch nicht klar, warum der Bildspeicher erst 
bei 4096 beginnen muss, aber das ist mir erst einmal egal.
Im Wesentlichen läuft die Anzeige jetzt zu meiner Zufriedenheit.
>Damit habe ich mal einen lahmen Oszi gebastelt, liegt halbbeendet auf
>dem Schreibtisch...
nicht unbedingt liegen lassen, aber Verwendungszweck ändern.(evtl. 
Temperaturverlauf aufnehmen, Wetterdaten schreiben; ich schreibe
EKG-kurven -Text ist für Anzeige der Pulsfrequenz)
MfG
Wolfgang

von Olaf (Gast)


Lesenswert?

> Ein Problem konnte ich allerdings noch nicht lösen: mir gelingt es
> nicht, Text und das Zeichnen von Linien (Grafik) zusammen auf den
> Bildschirm zu bringen.

Es gibt da irgendwo ein Register wo du einschalten kannst was es
zu Darstellung bringen soll. Allerdings bin ich der Meinung das man
sich die Muehe sparen kann. Zum einen sieht der Zeichensatz im
Textmodus nicht so schoen aus, zum anderen mangelt es ihm an
Deutschen Sonderzeichen.

> Das Timing und die ewige INIT- Befehlskette, welche notwendig ist,
> um dem Display überhaupt eine Reaktion abzuverlangen, ist ziemlich
> entmutigend gewesen. Sich DAS alles aus Datenblättern selbst zu
> erarbeiten, ist wirklich harte Arbeit.

Dies steht im Datenblatt des LCDs immer drin, ausserdem muss man danach
immer nochmal alles durchgehen weil man die Parameter ja seinen
Beduerfnissen anspassen muss. Und wenn bereits das Lesen eines 
Datenblatt
harte Arbeit sein soll....

> EKG-kurven -Text ist für Anzeige der Pulsfrequenz)

Wenn du nicht immer nur den ganzen Bildschirm vollschreiben willst, 
sondern
lediglich hier und da mal einen Satz ausgeben, so ist es viel besser
einen eigenen Zeichensatz zu verwenden. Zumal du ja dann sogar 
entscheiden
kannst wie gross der sein kann.

Olaf

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
Noch kein Account? Hier anmelden.