Forum: Projekte & Code Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen


von Benedikt K. (benedikt)


Lesenswert?

Christian J. schrieb:
> 38400 ist die, die bei mir im dauerfeuer funzt ohne dass es zu Verlusten
> führt. 56700 klappte nicht, der Busy Pin reagiert einfach nicht, ich
> frage den immer vor jedem Byte ab was ich sende.

Deine Probleme mit 57600Baud gehen mir nicht aus dem Kopf.
Momentan streame ich gerade ein Video mit 500kBaud auf das Display. Das 
sind im Graustufenmodus leider nur 2fps, aber egal.
Jedenfalls schafft der Controller die Verarbeitung von so vielen 
Graustufendaten nicht und aktiviert Busy, was mit CTS vom UART des PCs 
verbunden ist. So wird der Datentransfer ausgebremst (auf ca 310kBit/s).
Das funktioniert wunderbar, ich habe zumindest schon >50MByte ans 
Display gesendet, ohne Probleme.
Die einzigen Probleme die ich mir vorstellen kann, sind eine nicht ganz 
exakte Baudrate von deinem ARM:
Bei mir sind 57600 Baud in Wirklichkeit 58823 Baud. Das sind 2,1% zu 
viel.
Das sollte aber kein Problem sein, denn erst ab >4% treten Probleme auf. 
Außer deine Baudrate ist auch nicht genau und weicht in die 
entgegengesetzte Richtung ab. Schau mal nach ob das vielleicht zutreffen 
kann.
Ansonsten kannst du auch einen 18,432MHz Quarz einbauen, dieses minimale 
Übertakten schafft der mega8515 meist problemlos. Damit sollten die 
ganzen Standardbaudraten ohne Fehler möglich sein.

Die maximale Baudrate die möglich ist, ist übrigens 500kBaud. Alles 
darüber (was nur 666kBaud, 1MBaud und 2MBaud wären), schafft der 
Controller nicht weil der UART Hardwarepuffer überläuft, da der 
Interrupt zur Datenausgabe ans LCD zu lange braucht.

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Oder probier mal diese Version aus:
Ich habe die UART Routinen nun erweitert, dass automatisch ab einem 
Fehler von >1,5% in den 2X Modus umgeschaltet wird. Dadurch reduziert 
sich der Fehler auf 0,7%.
Die Version ist auf 2bpp, 57600Baud eingestellt.

von Christian J. (elektroniker1968)


Lesenswert?

Naja, es funktioniert ja, also lasse ich es mal wie es ist :-) Never 
touch a running system.

von Sebastian (Gast)


Lesenswert?

Hallo Benedikt,

ich hätte mal rein interessehalber eine Frage (der Aufwand würde sich 
wohl nicht lohnen):

Ziel der Überlegung ist es, einen höheren Pixeltakt zu erreichen ohne 
die Prozessorlast zu vergrößern bzw. eben den AVR zu entlasten.
Man hängt zwischen Pin5 des 74HC02 (Das Gatter von der CP-erzeugung) und 
das RD-Signal einen Flankendifferenzierer. Also bei jedem Flankenwechsel 
von RD gibts einen kurzen Puls auf CP. Auf diese Weise könnte man mit 
jedem ld Befehl des AVR ein ganzes Byte zum Display schicken, da das 
Display mit steigender und mit fallender Flanke von RD Daten übernimmt. 
Der Multiplexer ist ja über das Flipflop auch von CP gesteuert. Bzw. 
wäre zu überlegen, ob man A\/B dann nicht direkt an RD hängen könnte. 
Der Flankendifferenzierer müsste etwa 100ns lange Pulse rausgeben, damit 
es zum Display passt. Zwischen die I/O des SRAM und den Multiplexer 
müsste wohl noch ein Latch, da ja das zweite Nibble erst ans Display 
gelegt wird, wenn RD wieder High geht. Dann sind aber auch die I/Os auf 
High-Impedance. Also einen Latch der die Daten bei einer steigenden 
Flanke von RD latcht.

Wie gesagt, man müsste dann mit einem ld-Befehl pro Byte statt einem pro 
nibble auskommen und hätte fast die Hälfte der Prozessorlast gespart. 
Dann sollten auch höhere Frameraten beim Video streamen möglich sein, 
oder?
An sich müsste es dann doch sogar gehen, 8 Graustufen darzustellen, 
oder? Macht das Display (zb. die hier zuerst genannten von Pollin) das 
mit? Der SRAM reicht ja für 3 Monochrombilder aus, also auch für ein 
3-Bit-Bild.


Würde mich mal interessieren, was der Experte zu diesen Überlegungen 
sagt.

Gruß, Sebastian

von Benedikt K. (benedikt)


Lesenswert?

Sebastian schrieb:

> Man hängt zwischen Pin5 des 74HC02 (Das Gatter von der CP-erzeugung) und
> das RD-Signal einen Flankendifferenzierer. Also bei jedem Flankenwechsel
> von RD gibts einen kurzen Puls auf CP. Auf diese Weise könnte man mit
> jedem ld Befehl des AVR ein ganzes Byte zum Display schicken, da das
> Display mit steigender und mit fallender Flanke von RD Daten übernimmt.

So eine ähnliche Schaltung gab es mal in der Elektor für einen 
Displaycontroller für einen 8051. Da dieser langsamer ist, bleibt mehr 
Zeit, so dass dies richtig sinn macht. Da wurde das ganze mittels 
Monoflop gelöst.

> Der Flankendifferenzierer müsste etwa 100ns lange Pulse rausgeben, damit
> es zum Display passt.

Das Problem ist, dass der RD Impuls gerade mal etwa 62ns lang ist. 
Streng genommen bin ich momentan sogar außerhalb der Specs, denn das 
Pollin Display verlangt mindestens 65ns high Zeit. Und das ist ein recht 
modernes Display, ältere sind da noch langsamer. Bei dem Pollin Display 
ist der maximale Takt mit etwa 6,5MHz spezifiziert. Da ein Zugriff auf 
das SRAM 3 takt dauert, sind so theoretisch 5,33MHz möglich. Eine 
Verdopplung ist daher nicht möglich, außer man baut Waitstates ein. 
Wirklich viel ist also nicht zu gewinnen.

> Zwischen die I/O des SRAM und den Multiplexer
> müsste wohl noch ein Latch, da ja das zweite Nibble erst ans Display
> gelegt wird, wenn RD wieder High geht. Dann sind aber auch die I/Os auf
> High-Impedance. Also einen Latch der die Daten bei einer steigenden
> Flanke von RD latcht.

Jain. Ein Latch braucht man, aber aus einem anderen Grund: Momentan gebe 
ich die Daten mit der steigenden Flanke von RD\ aus, und verletze damit 
eigentlich auch die Hold Zeit des Displays.
Bei der fallenden Flanke von RD\ liegen die Daten noch nicht an, erst 
nach einer gewissen Zeit. Man müsste also den ersten Impuls verzögern.

> Wie gesagt, man müsste dann mit einem ld-Befehl pro Byte statt einem pro
> nibble auskommen und hätte fast die Hälfte der Prozessorlast gespart.
> Dann sollten auch höhere Frameraten beim Video streamen möglich sein,
> oder?

Es würde minimal etwas bringen, aber den Hardwareaufwand enorm erhöhen:
Man müsste die Daten bei der steigenden Flanke von RD\ 
zwischenspeichern, könnte die ersten Daten direkt mit übertragen. Dann 
müsste man entweder mittels eines Zählers aus dem Prozessortakt oder 
mittels Monoflops einen weiteren kompletten Takt (also >65ns high, >65ns 
low, >65ns high und nochmal >65ns low erzeugen.
Wenn man die 16MHz Prozessortakt verwendet um die Takte zu erzeugen, 
dann bräuchte man etwa 5 Takte für ein Byte (momentan sind es 6  + 
0,75Takte).

Ich hatte mir diese Lösung anfangs auch überlegt, habe diese dann aber 
verworfen, da die Lösung möglichst leicht nachzubauen sein sollte.

An der Software könnte man etwas auf kosten des Programmspeichers 
optimieren:
Momentan gebe ich in einer Schleife 4 Takte aus, danach kommt der 
Schleifenzähler + Rücksprung. Also für 12 Takte kommt ein Overhead von 3 
Takten dazu. Diese Schleife könnte man entrollen, so dass der Overhead 
weg fällt. Das würde etwa 15% mehr Geschwindigkeit bringen.

von Sebastian (Gast)


Lesenswert?

Ah, Dankeschön. Wie gesagt, ich wollte einfach nur wissen, obs möglich 
wäre. Ich hätte aber doch einen größeren Nutzen erwartet. Aber so würde 
es sich ja garnicht lohnen.
Die Schleife zu entrollen hatte ich auch schon überlegt. Habs aber 
erstmal auf später verschoben.

Gruß, Sebastian

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Im Anhang eine neue Version mit einer etwas auf Geschwindigkeit 
optimierten Datenausgabe und einem optimierten UART (ein paar Details 
beim X2 Mode korrigiert, etwas optimiert).

Bisherige Version bei 16MHz, 75Hz: 40% CPU Load.
Neue Version: 1/3, also 33,3% CPU Load
Dauer des Interrupts: 18,5µs

Die benötigte "Rechenleistung" liegt damit bei etwa 5,35MIPs.
Da der UART Hardware Puffer 2 Bytes umfasst, darf die Baudate damit bei 
maximal etwa 850kBaud liegen. Der nächst niedrigere, mögliche Wert liegt 
bei 666,6kBaud (16MHz/8/3). Das ist somit die maximale Baudrate bei 
16MHz.
Die damit erreichbare Datenrate bei Graustufendaten sind etwas unter 
200kPixel/s, bei SW sind es >400kPixel/s.
Wenn die Graustufen komplett deaktiviert werden, sind irgendwas 
>500kPixel/s möglich. Das sind rund 7fps Vollbilder.

Eine weitere "Optimierung" wäre das Übertakten auf 18,432 oder 20MHz. 
Die meisten mega8515 machen das mit. Damit liegt die Auslastung bei rund 
27%. Und man trifft eventuell eine bestimmte Baudrate besser.

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Hier mal noch ein paar Messungen:
Rot ist die Dauer des kompletten Interrupts, grün die XSCL Impulse zum 
LCD.
Man sieht einen deutlichen Overhead der vor allem durch das Sichern der 
Register im Interrupt und das berechnen der Adressen und Graustufen 
drumherum entsteht.

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Und die XSCL Impulse vergrößert.
Die Frequenz beträgt exakt 5,33MHz, und die high Zeit exakt 62ns, also 
1/16MHz. Die Lowzeit beträgt 125ns, also 2x 1/16MHz, exakt wie erwartet.

von Christian J. (elektroniker1968)


Lesenswert?

Verstehe ich nicht ganz. Die Baudrate ist doch 57600 auf der Uart, oder? 
Damit kann man aber nicht soviele Bilder pro Sekunde übertragen. Mein 
Arm nach macht maximal 115kbaud mit.

Ist es ok, wenn ich vor jedem Byte an die Uart den Busy Pin auf Low 
(=Busy) abfrage?

Graue Rechtecke sind bei mir übrigens immer noch nicht möglich. Sehr 
seltsam, der Farbwerte wird ignoriert.

Christian

von Benedikt K. (benedikt)


Lesenswert?

Christian J. schrieb:
> Verstehe ich nicht ganz. Die Baudrate ist doch 57600 auf der Uart, oder?
> Damit kann man aber nicht soviele Bilder pro Sekunde übertragen. Mein
> Arm nach macht maximal 115kbaud mit.

Die Werte waren bei 666,6kBaud, also dem maximalen was geht.
Durch das Busy werden die Daten aber auf bis zu 400kBit/s ausgebremst.

> Ist es ok, wenn ich vor jedem Byte an die Uart den Busy Pin auf Low
> (=Busy) abfrage?

Ja. Theoretisch würde sogar jedes 64. Byte ausreichen, denn Busy/CTS 
wird auf high gesetzt, sobald der Puffer zu 75% (=192 von 256 Bytes) 
voll ist.

von Gerhard S. (gerhard99)


Lesenswert?

Hallo,
ich habe es endlich geschafft meine Platine ist funktionsfähig. Nur habe 
ich jetzt ein Problem mit den Fusebit. Nachdem ich mit Ponyprog diese 
auf "CKOPT, Boden und Bodlevel" ausgewählt habe kann ich den Prozessor 
nicht mehr ansprechen. Welche Einstellungen sind richtig?

Viele Grüße
Gerhard

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hast du die Fuses vorher gelesen?

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Hier noch das letze Bild der Messung:
Setup und Hold Zeiten.
rot ist der XSCL Impuls, grün eine Datenleitung die gerade den Pegel 
wechselt.
Die Setupzeit dürfte irgendwo bei um die 55ns liegen, also gerade noch 
innerhalb der Specs. Die Holdzeit liegt irgendwo bei um die 9ns. Laut 
Datenblatt sollten es 40ns sein.
Da das LCD aber auch für 3,3V spezifiziert ist, kann man bei 5V diesen 
Wert wohl großzügig unterschreiten.

@Gerhard
Schau mal in die pdf die bei der Software dabei ist. Da ist seit ein 
paar Versionen ein Bild zu den Fusebits drin.

von Gerhard S. (gerhard99)


Lesenswert?

ja, es war ein neuer Baustein! Der war noch auf interner Takt gestellt. 
Er lief jedenfalls auch ohne Quarz.

von Sebastian (Gast)


Lesenswert?

Benedikt, du bist einfach Spitze! Nicht nur das tolle Projekt, sondern 
auch die Dokumentation dazu. Und jetzt die Updates sowieso. Einfach 
klasse!

Sebastian

von Horst-Dieter L. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Bernhard,

zunächst einmal viele Dank für dein interessantes Projekt. Ich habe 
bereits eine 640x480-Displaysteuerung von dir im Einsatz. Diese und auch 
die aktuelle Variante funktionieren einwandfrei.
Da ich ein vertikal angeordnetes Display benötige habe ich deine 
Software vom 10.05.2008 etwas bearbeitet (spätere Aktualisierungen sind 
somit nicht berücksichtigt) und möchte diesen Programmcode hier zur 
Verfügung stellen. Da ich C nicht mag ist die Version als avr-Studio 
compatibles Assemblerprogramm angehängt, wobei nicht alle von C 
produzierten Einzelheiten geändert sind.
Die Befehle sind etwas modifiziert, aber hoffentlich gut dokumentiert. 
Die Übertragung von Bildern und benutzerdefinierten Zeichen erfordert 
eine vertikale Bildabtastung. Ich werde mal mit dem vor kurzem hier 
veröffentlichten Bild experimentieren. Bisher habe ich diesen Befehl nur 
mit selbst hergestellten Bilddaten getestet.
Ich hoffe, dass ich keine Anpassungen übersehen habe.
Viel Spaß beim ausprobieren.

Horst-Dieter

von Christian J. (elektroniker1968)


Lesenswert?

Hallo,

die letzt gepostete Version läuft bei mir nur im Textmode, Grafik wird 
verhackstückelt, die Koordinaten stimmen nicht, ein Rechteck um den 
ganzen Bildschirm wird in der Mitte abgeschnitten, quasi nach links 
verschoben. Busy geht auch nicht, 56700 sendet der Arm7 sauber raus, der 
PC versteht es einwandfrei, trotzdem werden Zeichen verschluckt, fehlen 
einfach. Busy rührt sich gar nicht.

Habe daher wieder auf vorherige Version umgesattelt.

von Benedikt K. (benedikt)


Lesenswert?

Könnte mal jemand anders die letze Version ausprobieren und die 
Ergebnisse von Christian J. bestätigen? Ansonsten schiebe ich die Schuld 
mal auf den ARM bzw. die Baudrate von diesem, bei mir läuft die nämlich 
wunderbar und die Baudrate sollte jetzt auch sehr gut passen. Zumindest 
kann ich problemlos Bilder laden und Text anzeigen.

von Christian J. (elektroniker1968)


Lesenswert?

Also, am Arm liegt es sicher nicht, der tuts ja auch mit einem PC 
zusammen. Habe testweise ein delay nach jedem Byte eingefügt, bis 100us. 
Gleiches Resultat. Wie gesagt, Text einwandfrei, nur bei den beiden 
Rechtecken um den Bildschirm hapert es, die sind einfach 50% nach links 
verschoben aus dem Bild raus.

Schlimm ist es nicht, die eine Version läuft ja und reicht mir auch. 
Durch die Kapselung der Basis-Funktionen in meinen eigenen Code lässt 
sich de facto alles machen, was nur denkbar ist solange es keine 
bewegten Grafiken werden sollen.

Liesse sich diese Platine für dieses Display umstricken:

Beitrag "Re: LCD Controller für 640x480 LCD mit mega8515"

Davon habe ich etliche hier. Wenn man das genauso komfortabel machen 
kann (ohne S1D...) würde ich glatt noch Platinen machen.

von Benedikt K. (benedikt)


Lesenswert?

Christian J. schrieb:
> Also, am Arm liegt es sicher nicht, der tuts ja auch mit einem PC
> zusammen. Habe testweise ein delay nach jedem Byte eingefügt, bis 100us.
> Gleiches Resultat. Wie gesagt, Text einwandfrei, nur bei den beiden
> Rechtecken um den Bildschirm hapert es, die sind einfach 50% nach links
> verschoben aus dem Bild raus.

Läuft die andere Version denn mit 57600 Baud? Ich dachte bisher 
funktionieren nur 28800 Baud.

> Liesse sich diese Platine für dieses Display umstricken:
>
> Beitrag "Re: LCD Controller für 640x480 LCD mit mega8515"

Theoretisch ja:
Man benötigt einen zweiten SRAM. Zwischen beiden wird über die noch 
freie Adressleitung umgeschaltet. Dann muss der Umschalter raus, so dass 
man einen 8bit Bus hat.

von Christian J. (elektroniker1968)


Lesenswert?

Die andere läuft bis 38400 baud, darüber werden Zeichen verloren. Grafik 
aber ok.

Da ich den Brenner nicht hier habe kann ich das leider nicht besser 
testen.

von Benedikt K. (benedikt)


Lesenswert?

Das klingt mir fast danach, als wenn irgendwie Busy bei dir nicht 
funktionieren würde.
Busy funktioniert aber, habe ich extra probiert. Sende einfach mal >1000 
lange (etwas schräge) Linien Befehle, oder auch Blöcke oder Kreise 
direkt hintereinander und schau was passiert (natürlich inkl. des Busy 
Checks).
Wenn Busy funktioniert, müsste der Busy Pin dann auf high gehen und 
deinen ARM ausbremsen.
Wenn nicht, dann wird Müll auf dem Display ankommen.

von Sebastian (Gast)


Lesenswert?

So, ich bin jetzt endlich mal dazu gekommen auf die aktuelle Firmware 
upzudaten.
Bei mir läuft sie einwandfrei. Text geht, Grafik geht. Alles bei 
500kBaud und 4 Graustufen. Den Busy-Pin hab ich jetzt nicht angeschaut, 
aber nehme mal an, dass der sich rühren sollte. Mein Sende-AVR fragt ihn 
jedenfalls ab. Sende ein 160*200 Graustufenbild und 4 40*40-Rechtecke. 
Das kommt alles wunderbar an.

Sebastian

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Servus,

ich hab wollte mal fragen, ob hier Interesse an einer 
8-Graustufen-Version besteht. Hab die Software etwas aufgebohrt, sodass 
jetzt auch 3-bit Bilder angezeigt werden. Text- und Grafikfunktionen 
sollten auch auf 8 Graustufen laufen, hab sie aber noch nicht gänzlich 
getestet. Mir kam's mehr auf die Darstellung von Bildern an.

Wenn interesse besteht dokumentier ich mal meine erweiterungen und stell 
sie hier rein.

Das Bild im Anhang ist von einem Normally Black display (das von 
Pollin). Angesteuert mit 3 bit. Links werden nur 2 bit genutzt, rechts 
3.


@Benedikt:

An deinem Graustufen-Mod (der gegens Flackern) versteh ich eine Sache 
nicht ganz: Reicht es nicht, am Ende eines Bildes GrayCntMod um eins zu 
erhöhen und wieder abzuspeicher? 240 ist ja durch 3 Teilbar, daher hat 
GrayCntMod am Ende eines Bildes ja erstmal den gleichen Wert wie am 
Anfang. Also um eins erhöhen, und das nächste Bild wird angezeigt. Man 
würde sich dadurch halt 1 Byte und etwas Rechenzeit im Interrupt sparen. 
Oder hab ich da was übersehen?

Gruß, Sebastian

von Benedikt K. (benedikt)


Lesenswert?

Sebastian schrieb:
> An deinem Graustufen-Mod (der gegens Flackern) versteh ich eine Sache
> nicht ganz: Reicht es nicht, am Ende eines Bildes GrayCntMod um eins zu
> erhöhen und wieder abzuspeicher? 240 ist ja durch 3 Teilbar, daher hat
> GrayCntMod am Ende eines Bildes ja erstmal den gleichen Wert wie am
> Anfang. Also um eins erhöhen, und das nächste Bild wird angezeigt. Man
> würde sich dadurch halt 1 Byte und etwas Rechenzeit im Interrupt sparen.
> Oder hab ich da was übersehen?

Das ist genau der Trick an der Sache:
Ohne diese Modifikation läuft das ganze genau so.
Allerdings kann es dann sein, dass bei einer dunklen Graustufe die viele 
Pixel beinhaltet, die gesamte Fläche z.B. nur jedes 3. Bild aufleuchtet, 
die restlichen 2 Bilder aus ist.
Um das zu vermeiden, werden die eingeschalteten Pixel über die 3 Frames 
verteilt indem zusätzlich GrayCntMod in jeder Zeile erhöht wird.
Am Ende des Bildes muss zusätzlich nochmal erhöht werden, damit sich in 
jedem Bild der Wert ändert, also jede Zeile mal jeden Wert sieht.

PS: Schöne Erweiterung. Ich hätte nicht gedacht, dass 8 Graustufen so 
gut aussehen.

von Sebastian (Gast)


Lesenswert?

Danke, bin auch total begeistert :-)
Geht aber nur mit dem normally Black so schön. Auf dem normally White 
bringts zwar auch was, aber der Kontrast reicht für 8 Graustufen nicht 
wirklich ganz aus.

Das wegen GrayCnMod hab ich wohl etwas ungünstig vormuliert: Ich würde 
weiterhin GrayCntMod in jeder Zeile eins hochzählen. Am Ende des Bildes 
dann aber nicht GrayCnt hochzähen und nach GrayCntMod kopieren, sondern 
einfach GrayCntMod nochmal um eins erhöhen. Auf die Weise startet man 
auch bei jedem Frame mit einem anderen Wert und wechselt trotzdem bei 
jeder Zeilen durch.
Die Einsparungen sind minimal, ich weiß. Ich wunder mich nur halt, warum 
du es nicht so gemacht hast.

Sebastian

von Benedikt K. (benedikt)


Lesenswert?

Da die Bildgröße an sich einstellbar ist, funktioniert das nur bei 
320x240 so gut. Um auch andere Displaygrößen zu unterstützen (z.B. 
320x200 oder auch manche Displays die 241 Zeilen benötigen), habe ich 
halt die eine Zusatzzeile mit eingebaut. Geschwindigkeitsmäßig ist der 
Einfluss ja minimal.

PS: Wenn man die Bezeichnung des LCDs (LTBE9T372G1K) aufschlüsselt, 
erhält man folgendes:
LT Bezeichnung
B  CCFL Backlight
T  Transparent
G  Normally Black
1K Hoher Kontrast, Version 1

Dieser vergleichsweise hohen Kontrast, den sieht man auch deutlich.

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Ok, die Software allgemein zu halten ist ein guter Grund. Wobei man das 
aber auch über den Präprozessor erledigen könnte. So in der Art halt:


#define YSIZE    240

#if(lines%3==0)
GrayCntMod++;
#endif

Dann würde man sich immernoch ein Byte, und eine Hand voll Takte sparen.
Aber das ist nun wirklich erbsenzählerei. Mit 4 Graustufen reicht die 
Rechenleistung ja sowieso. Nur bei 8 ist man halt um jeden Takt froh. 
Andererseits läuft mein AVR jetzt eh auf 20Mhz, da gehts auch wieder 
recht flott. Das ganze übrigens mit dem 80ns SRAM vom Reichelt. 
Natürlich weit jenseits der Specs, aber es solange es läuft...


Hab mal noch nen Bild vom Normally White mit 8 Graustufen angehängt. Da 
sieht man schön, dass der Kontrast einfach nicht reicht.

Sebastian

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Mit welchem Verfahren rechnest du den die Graustufen um? 4 Grauwerte 
gibt bei mir eigentlich schon ein schickes Bild, 8 Grauwerte sind 
natürlich echt Luxus!
Ich hoffe ja das ich irgenwann mal mein 640x480 Display ans laufen 
kriege, aber irgenwie kommt immer was dazwischen :)
Besonders das Layouten des SRAMs ist immer ne schreckliche Sache :)

von kay (Gast)


Lesenswert?

hallo Sebastian,
mit welchen programm hast du eine bilder erzeugt.

mfg
kay

von Sebastian (Gast)


Lesenswert?

Hmmm, SRAM routet sich doch normalerweise recht einfach. Du kannst ja 
Adress- und Datenleitungen beliebig verdrehen. Ok, hier gehts nicht ganz 
beliebig wegen dem Display, aber prinzipiell kann man da schon den 
Schaltplan etwas anpassen.

Die Bilder erzeuge ich mit "Grafik Converter". Ist ein kleines 
Javaprogramm hier aus dem Forum, das dir aus farbigen Bildern welche in 
Grau erzeugt. Kannst dann auswählen, ob sie als Bild, oder als 
include-datei für C oder ASM gespeichert werden sollen.
Das Bild was ich oben gepostet habe wurde mit Floyd-Steinberg 
umgerechnet. Mit einfachen Schwellenwerten bilden sich bei Farbverläufen 
immer so doofe Bögen zwischen zwei Grauwerten.

Sebastian

von kay (Gast)


Lesenswert?

hallo,
esrtmal danke für die info,mich würde noch interressieren was ich beim 
speichern einstellen muss,also bei ausgabeposition

mfg
kay

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ja das stimmt wohl hab nur leider 32K Cache SRAMs und daher brauch ich 
min 3 Stück für 640x480... bin schon fast soweit die einfach 
übereinander zu stapeln ^^

Das Programm ist übrigens von mir, ggf erreichst du ein besseres 
Ergebnis wenn du die Farbraumangleichung deaktivierst und die Graustufen 
etwas justierst.

von kay (Gast)


Lesenswert?

ich wollte nur wissen was ich bei der Ausgabe Optionen einstellen 
muss,bei Farbtabelle habe ich 2Farben eingestellt,
vielleicht könnte mir da nochmal jemand helfen

kay

von Sebastian (Gast)


Lesenswert?

3*32KByte für 640*480? Das stimmt aber nur für Graustufen. Und da wär 
ich mir nicht sicher, ob das noch vernünftig aus nem AVR zu holen ist. 
Lass mich aber auch gerne vom gegenteil überzeugen.

Wieso nicht stapeln? Wenn's etwas professioneller aussehen soll kannst 
du ja jeden Ram auf ein kleines Stückchen Platine löten und die Platinen 
übereinander anordnen. Lässt sich dann auch schön einfach 
durchverbinden. Bin mir bloß nicht sicher, ob die Signalqualität davon 
so begeistert ist ;-)

An sonsten würde ich halt durch die Pins durchrouten. Bei drei 
hintereinander sollte man sogar auf nem einlagigen Board noch an die 
CS-leitungen rankommen.

Was macht eigentlich die Farbraumangleichung? Ist das nur, damit ich die 
Farbtabelle besser auf das jeweilige Bild einstellen kann? Mein Display 
hat am Ende ja eh nur Graustufen...


@kay
So schwer ist's eigentlich nicht mit den Bildern. Du machst erst alle 
Einstellungen (Größe, Farbtabelle, Zoom,...). Dann suchst du dir aus obs 
Floyd-Steinberg oder Schwellenwert Verfahren werden soll.
Dann speichern: Die Einstellungen da sollten für Benedikts 
Displaycontroller schon passen. Also Horizontal, MSB First und 
Bytegrenzen bewahren. Dann noch auswählen, ob du es als Bild, header für 
.asm oder für .c haben willst. Bild (also .bmp,...) macht hier aber 
eigentlich keinen sinn, also .asm oder .c

Dem Controller sendest du dann der Reihe nach:
-15   (Startwert)
-0xAA (Kontrollbyte)
-X    (Startposition X, für den ersten Versuch am besten 0)
-Y    (Startposition Y, auch am besten 0)
-xs   (breite des Bildes in Byte. xs=1 heißt 8 Pixel, bei 40Pixel wäre 
xs 5)
-ys   (Höhe in Pixeln)
-1    (Modus, bei 1 bit ist das "eins")
- und jetzt die Daten.


Viel Erfolg
Sebastian

von Benedikt K. (benedikt)


Lesenswert?

Sebastian schrieb:
> 3*32KByte für 640*480? Das stimmt aber nur für Graustufen. Und da wär
> ich mir nicht sicher, ob das noch vernünftig aus nem AVR zu holen ist.
> Lass mich aber auch gerne vom gegenteil überzeugen.

Müsste man halt irgendwie in Bänke unterteilen. 640x480 benötigen 38400 
Byte. Das ist ein dummer Wert, man müsste vermutlich irgendwo mitten in 
einem Bild umschalten.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Benedikt K. schrieb:
> Sebastian schrieb:
>> 3*32KByte für 640*480? Das stimmt aber nur für Graustufen. Und da wär
>> ich mir nicht sicher, ob das noch vernünftig aus nem AVR zu holen ist.
>> Lass mich aber auch gerne vom gegenteil überzeugen.
>
> Müsste man halt irgendwie in Bänke unterteilen. 640x480 benötigen 38400
> Byte. Das ist ein dummer Wert, man müsste vermutlich irgendwo mitten in
> einem Bild umschalten.
Naja ich dachte halt dies wäre der "Nachfolger" der 640x480er Schaltung 
oder funktioniert das nur fpr 320x...?
Ich würde dann einfach 4x32k stapeln damit man kein "Loch" im 
Addressraum hat.

Geht anstelle des HC753 eigentlich auch ein HCT373? Scheinen mir beides 
nicht invertierende "transparente" Latches zu sein.

>Was macht eigentlich die Farbraumangleichung? Ist das nur, damit ich die
>Farbtabelle besser auf das jeweilige Bild einstellen kann? Mein Display
>hat am Ende ja eh nur Graustufen...
Ist vieleicht ein etwas blöder Begriff was besseres viel mir aber nicht 
ein. Die Farbraumangleichung ist nur für Grauwertbilder sinnvoll und 
bewirkt eigentlich nur das der volle Wertebereich genuzt wird.
Es wird einmal der Minimale Grauwert und einmal der Maximale Grauwert 
bestimmt, und dann alle Werte dementsprechen skaliert das sie im Bereich 
0...255 liegen.

von Benedikt K. (benedikt)


Lesenswert?

Läubi .. schrieb:
> Naja ich dachte halt dies wäre der "Nachfolger" der 640x480er Schaltung
> oder funktioniert das nur fpr 320x...?

Mit 640x480 funktioniert das auch, das Problem ist halt eben nur der 
ungünstige Speicherverbrauch.
Bei der 320x240 Version ist der Speicher streng genommen als 
256x256x4bit organisiert (da der Speicher aber 8bit breit ist, sind 
gerade und ungerade Adressen identisch).
Das LCD benötigt 80x4bit x 240. Reserviert sind 128x4bit x 240 für ein 
Bild, das gleich nochmal für das andere Teilbild der Graustufe. Ich 
denke mal Sebastian hat einfach noch einen weiteren Speicher hinzugefügt 
und so 2 weitere Teilbilder eingebaut. War bestimmt einiges an Arbeit, 
vor allem das umrechnen 2 bzw. 3bpp -> 2/4 Teilbilder.

> Ich würde dann einfach 4x32k stapeln damit man kein "Loch" im
> Addressraum hat.

Oder gleich einen 128kx8 SRAM verwenden.

> Geht anstelle des HC753 eigentlich auch ein HCT373? Scheinen mir beides
> nicht invertierende "transparente" Latches zu sein.

Ja, sollte egal sein, bei 0V/5V Pegeln sind beide geeignet.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ich hab halt ne altes Lapto SW Display was ich da gerne dranhängen würde 
hatte erst die "alte" 640x480 Version geplant aber Graustufen sind ja 
auch nicht schlecht daher wollt ich jetzt die "Modernere" Variante 
wählen.
Bei dem Display wir allerdings 8 bit auf einmal übertragen von daher 
wollte ich die "alte" Schaltung mit der "neue" Software aufbauen oder 
gibt es da Inkompatibilitäten?

>Oder gleich einen 128kx8 SRAM verwenden
ja okay... aber die Rams hab ich jezt hier und schnelle SRAMs kriegt man 
ja auch nicht an jeder Straßenecke...

von Benedikt K. (benedikt)


Lesenswert?

Läubi .. schrieb:
> Bei dem Display wir allerdings 8 bit auf einmal übertragen von daher
> wollte ich die "alte" Schaltung mit der "neue" Software aufbauen oder
> gibt es da Inkompatibilitäten?

Die SRAM Adressieren ist etwas anders. Bei der neuen habe ich den oben 
beschriebenen, etwas unkonventionellen Ansatz verwendet, A0 vom mega8515 
frei zu lassen. Es kann sein, dass ich auch ein paar Pins gedreht habe. 
Ansonsten sollte das ganze nahezu gleich sein.
Du kannst das SRAM (also 2x 32kB) so verdrahten wie bei der 640x480 
Version, und für die neue Software A0 vom mega8515 trennen und auf Masse 
legen.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Aber brauche ich nicht (640*480*2)/8 = 76800 bytes?
Das wären dann ja mind 3x32kb nötig.
Und verliert man nicht die Hälfte an Speicherplatz nochmal dadurch das 
A0 fest auf Masse liegt? Das verwirrt mich gerade etwas ;)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Läubi .. schrieb:
> Und verliert man nicht die Hälfte an Speicherplatz nochmal dadurch das
> A0 fest auf Masse liegt? Das verwirrt mich gerade etwas ;)
Ach ich seh gerade das du das manuell ansteuerst!
Die erste Frage bleibt aber ;)

von Benedikt K. (benedikt)


Lesenswert?

Läubi .. schrieb:
> Aber brauche ich nicht (640*480*2)/8 = 76800 bytes?

Für Graustufen, ja. Aber ob es die Version jemals geben wird, bezweifle 
ich noch.

> Und verliert man nicht die Hälfte an Speicherplatz nochmal dadurch das
> A0 fest auf Masse liegt? Das verwirrt mich gerade etwas ;)

Ja, aber das ist für die neue 320x240 Version notwendig, die mit 32kByte 
Speicher auskommt. Diese habe ich bewusst auf möglichst wenige Bauteile 
optimiert, damit man die leicht nachbauen kann.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Benedikt K. schrieb:
> Läubi .. schrieb:
>> Aber brauche ich nicht (640*480*2)/8 = 76800 bytes?
>
> Für Graustufen, ja. Aber ob es die Version jemals geben wird, bezweifle
> ich noch.

Mist ich dachte die gäbe es schon g
Wodran scheitert es denn?

Ich werd erstmal die 32kb Version aufbauen (Allerdings ohne die Sache 
zur Erzeugung des Frame Signales) dann sollte ja erstmal nix kaputtgehen 
und im zweifel hab ich halt nur SW :)

von Sebastian (Gast)


Lesenswert?

>Ich denke mal Sebastian hat einfach noch einen weiteren Speicher
>hinzugefügt und so 2 weitere Teilbilder eingebaut. War bestimmt einiges an
>Arbeit, vor allem das umrechnen 2 bzw. 3bpp -> 2/4 Teilbilder.

Nein, das ist ja grade das schöne. In den 32k-RAM passen ja 3 Teilbilder 
(hast du ja mit einführen der Virtuellen Bildgröße bewiesen). Bei mir 
liegen die 3 Teilbilder einfach nebeneinader im Ram, so wie bei dir 
schon die 2 bei 2bpp. Fenster verschieben geht dann natürlich nicht 
mehr, bringt aber (meiner Meinung nach) eh nur dann wirklich was, wenn 
man mindestens 2 Vollbilder im Speicher hat. Sobald man also Graustufen 
will, ist's eh egal. Aber die Hardware ist föllig unberührt. Quarz hab 
ich auf 20MHz getauscht, läuft aber auch mit 16 noch.

Ich häng das ganze jetzt doch mal an. Bringt ja nichts nur drüber zu 
reden...

Sebastian

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

So jetzt also:

8 Graustufen, hier im Anhang!

Die Hex im Anhang ist für 16MHz und 500000 Baud-Rate und natürlich 8 
Graustufen kompiliert.

Was ist neu:
#define GRAY8 aktiviert den 3-bit Modus, aber nur wenn GRAYSCALE auch 
aktiv ist.

Eine 3-bit-Grafik wird erstmal genauso gesendet, wie die anderen auch.
X und xs wird 8-Pixel-weise angegeben (also z.B. xs=5 bei 40 Pixel 
Bildbreite).
Y und Ys wird in Zeilen angegeben
Modus ist 2 für 3bpp
Die Daten muss MSB-First sein und ein kontinuierlicher Bitstream, also 
nicht Byte-aligned. Hab das so gewählt, um die zu übertragenden Daten 
klein zu halten. Bei Byte-aligned hätte man 2bit pro Byte umsonst 
gesendet.

1- und 2bit Grafiken werden gesendet wie bisher. Zur Farbraumerweiterung 
wird einfach das letzte Bit kopiert:
0->000   1->111
00->000   01->011   10->100   11->111
So krigt man immernoch schönes Schwarz und Weiß hin. Würde man das LSB 
einfach Null setzen wäre das ja nicht mehr gegeben.

Die Grafik und Textfunktionen sollten alle laufen wie Gewohnt. Für die 
Farben (auch Text- und Hintergrundfarbe) sind jetzt aber die obersten 
DREI bit relevant, sodass man auch hier 8 Graustufen nutzen kann.

Die Befehle für den virtuellen Bildbereich und das setzen des 
Textanfangs werden ignoriert. Da man das Bild nur um ein paar Pixel 
verschieben könnte hab ich das für 8 Graustufen deaktiviert. Vielleicht 
mach ich irgendwann mal ne Bankumschaltung draus, dann bräuchte man aber 
einen größeren RAM.

Performance hab ich bisher noch nicht gemessen, aber es liegt absolut im 
Bereich des Zumutbaren. Für ein Vollbild 3-bit Grafik grob geschätzt 
eine Sekunde.

Gruß, Sebastian

von Sebastian (Gast)


Lesenswert?

Sorry für tripple-post. Wollte die Software extra haben und hab jetzt 
erst bemerkt, dass ich weiter oben Mist geschrieben hab.


@kay:

Modus muss für Schwarz-Weiß auf 0 gestellt werden. 1 wären 4Graustufen.

Sebastian

von Benedikt K. (benedikt)


Lesenswert?

@ Sebastian
Ich habe mir die Software gerade angesehen und muss sagen: Respekt! Ich 
hätte es nicht besser gekonnt.

Hast du was dagegen wenn ich deine Erweiterung übernehme und diese 
Software als aktuellen Stand übernehme, darin also spätere Erweiterungen 
einbaue? Dann würde ich das ganze auch mal testen und die neuen 
Funktionen der Beschreibung hinzufügen.

von Sebastian (Gast)


Lesenswert?

Vielen vielen Dank. So ein Lob von dir zu hören ist schon was 
besonderes!

Zumal das das erste LCD ist, das ich je zum ansteuern in der Hand hatte! 
Nichtmal irgendein HD... kompatibles :-)
Würde mich sogar freuen, wenn du das übernimmst. Allein schon, weil ich 
dann auch weiterhin von änderungen profitieren kann, die du einfügst, 
ohne jedes mal wieder rumbasteln zu müssen.

Gruß, Sebastian

von Läubi .. (laeubi) Benutzerseite


Angehängte Dateien:

Lesenswert?

So jezt nochmal das ich alles richtig habe weil es ja 2 
Schaltplanversionen gibt...

AVR --> Display
13 --> XCLK = CP2
14 --> FLM = S
15 --> LP = CP1
31 --> OnOff  = DISP (Optopkopler kann wegfallen)

Zur Negativen Spannungserzeugung:
29 --> PWM Ausgang
Muß es ein BC327 sein? Ich hätte nen BC557 oder BSS84P hier.
In welchem Bereich kann die Spule liegen? Ich hätte hier 330µH einmal 
las L-PIS2408 und einmal SMCC (die Widerstandsvariante) und einmal ne 
MISC 100µH
Diode würde ich ne 1N914 nutzen.

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Ich habe mal alle Funktionen der 8 Graustufenversion von Sebastian 
geprüft: Laufen wunderbar.

Das einzige was mich stört ist die hohe Framerate die notwendig ist, um 
das ganze flimmerfrei anzuzeigen. Daher habe ich die Option GRAYMOD 
erweitert. Mit dem Wert dahinter kann man nun die Graustufenerzeugung 
etwas beeinflussen. Somit erreicht man bereits bei 100Hz recht gute 
Ergebnisse.
Da das ganze auch stark vom verwendeten LCD abhängt, kann man mit diesem 
Wert und der Framerate etwas spielen, bis das Ergebnis zufriedenstellend 
ist.

Eine weitere Neuerung ist nun, dass das LCD Zeilentiming nun 
hardwaremäßig erzeugt werden kann:
Durch den UART Interrupt wird der LCD Timer Interrupt ab und zu für eine 
kurze Zeit ausgebremst. Dadurch sind manche Zeilen länger, andere kürzer 
an. Das sieht man dann als Streifen im Bild. Mit steigender Framerate 
wird der relative Einfluss zunehmend größer. Nun wird der Latchpuls per 
Timer erzeugt und wird nun nicht mehr durch andere Interrupts 
beeinflusst. Da der Timer aber schon von der PWM belegt war, musste 
dieser etwas angepasst werden. Die PWM Frequenz ist nun gleich der 
Zeilenfrequenz des LCDs.

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Und hier der Beweis, dass alle Funktionen funktionieren.

von Benedikt K. (benedikt)


Lesenswert?

Läubi .. schrieb:
> So jezt nochmal das ich alles richtig habe weil es ja 2
> Schaltplanversionen gibt...

Welche Schaltung meinst du jetzt? Die neue 320x240 Version oder die alte 
640x480? Ich habe bei der neuen 320x240 Version bewusst den ganzen 
Ballast der alten Schaltung weg geworfen und alles neu entworfen, daher 
sind beide nicht 100%ig kompatibel.

> Muß es ein BC327 sein? Ich hätte nen BC557 oder BSS84P hier.

Ich sag mal ja. Es kann mit einem BC557 funktionieren, aber der dürfte 
am Rande der Specs betrieben werden. Der BSS84 ist viel zu hochohmig.

> In welchem Bereich kann die Spule liegen? Ich hätte hier 330µH einmal
> las L-PIS2408 und einmal SMCC (die Widerstandsvariante) und einmal ne
> MISC 100µH

Sollten eigentliche alle gehen (eventuell bis auf die MISC). Ich 
verwende meist die in Widerstandsbauform. Der Widerstand der Spule 
sollte etwa 5-10 Ohm allerdings nicht überschreiten.

> Diode würde ich ne 1N914 nutzen.

Da dies ein Vergleichstyp der 1N4148 ist, ist die ok.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Benedikt K. schrieb:
> Welche Schaltung meinst du jetzt? Die neue 320x240 Version oder die alte
> 640x480? Ich habe bei der neuen 320x240 Version bewusst den ganzen
> Ballast der alten Schaltung weg geworfen und alles neu entworfen, daher
> sind beide nicht 100%ig kompatibel.
Ich bau jezt einfach mal die neue 320x240 Version auf. Allerdings ohne
die 4bit Unterteilung.

> Ich sag mal ja. Es kann mit einem BC557 funktionieren, aber der dürfte
> am Rande der Specs betrieben werden. Der BSS84 ist viel zu hochohmig.
Okay dann muß ich mal sehen wo ich einen herbekomme.

> Sollten eigentliche alle gehen (eventuell bis auf die MISC). Ich
> verwende meist die in Widerstandsbauform. Der Widerstand der Spule
> sollte etwa 5-10 Ohm allerdings nicht überschreiten.
Kann ich das einfach mit dem MM messen oder bezieht sich der Wert auf
eine bestimmte Freuenz?

Zu deiner neuen "Demo": Sieht SUPER aus! Wenn ich doch nur schon
soweit wäre :D

von Benedikt K. (benedikt)


Lesenswert?

Läubi .. schrieb:
>> Benedikt K. schrieb:
>> Sollten eigentliche alle gehen (eventuell bis auf die MISC). Ich
>> verwende meist die in Widerstandsbauform. Der Widerstand der Spule
>> sollte etwa 5-10 Ohm allerdings nicht überschreiten.
>Kann ich das einfach mit dem MM messen oder bezieht sich der Wert auf
>eine bestimmte Freuenz?

Einfach messen. Da der Spitzenstrom irgendwo im Bereich von >100mA
liegt, sollten sich die Verluste im Drahtwiderstand in Grenzen halten:
Bei 100mA und 10 Ohm gehen 1V verloren. Das sind bei 5V Betriebsspannung
schon 20%. Es funktioniert zwar vermutlich auch, nur ist der
Wirkungsgrad schnell bei <50%. Daher auch der externe PNP Transistor:
Der interne NPN Darlington funktioniert auch (mehr oder weniger), da an
diesem aber >1V verloren gehen, reduziert sich der Wirkungsgrad noch
weiter.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wäre es den vom Vorteil den MC34063 mit einer Höheren Spannung zu 
betreiben? Für den Inverter fürs CCFL brauch ich eh 12V.

Ist den meine Verbindung uC--> LCD ansonsten korrekt?

von Benedikt K. (benedikt)


Lesenswert?

Ja, 12V würden Vorteile bringen, aber auch Gefahren:
Der MC34063 kann maximal 40V. Bei 12V und -20V sind das bereits 32V. 
Sehr viel höher darf man da also nicht gehen, etwa 16V würde ich als 
Maximum der Eingangsspannung betrachten.

Die Verdrahtung sollte so passen. Der Schaltplan in der PDF in dem Paket 
sollte passen.

von Kay (Gast)


Angehängte Dateien:

Lesenswert?

hallo,
ich würde das gerne mal in den 8Graustufen probieren,
nun hab ich noch ein paar Fragen
ich hab ein bild 96x62Pixel
1.was muss ich den bei dem oben genanten Programm von Läubi bei der 
Farbtabelle einstellen ich hab 2Farben
und beim abspeichern hab ich 16Bytes eingestellt
2.15,0xAA,0,0,12,62,2  =744byte an bilddaten,
aber die abgespeicherte datei hat aber knapp 5KB an daten?
vielleicht könnte mir nochmal kurz jemand helfen,
speziell bei der 3bpp,muss ich 96:8 oder 96:24 rechnen

mfg
kay

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

DIe Daten in der asm Datei liegen im ASCII / AVRStudio format vor, also 
keine Banege, du must wenn ich das richtig verstanden habe einfach nur 
die Daten aus diesem Feld senden. (Du kannst die Datei einfach mit 
notepad öffnen dann siehst du die entsprechenden Hexzahlen)

Versuchst du das ganze vom PC aus oder von nem uC?

von Kay (Gast)


Lesenswert?

hallo,
ich wollte die asm datei von einem atmega128 übertragen,
ich weis jetzt aber nicht ob ich den befehl 15 so richtig gerechnet 
habe,weil bei 1bpp muss ich ja 96:8=12 in X  und 62 in Y
das macht 12x62=744 Byte an bilddaten aber,
wie ist das jetzt in der 3bpp variante??

kay

von Benedikt K. (benedikt)


Lesenswert?

Es ist Befehl 16. Ansonsten passt deine Rechnung: Da 8Pixel gezählt 
werden, musst du 12x62 als Bildgröße senden. Da 8 Pixel 3 Bytes 
entsprechen, musst du 3x12 x 62 Bytes senden.

von Kay (Gast)


Lesenswert?

also würde das dann so passen,
16,0xAA,0,0,12,62,2

bilddaten:
//Datei: bild_1.bmp
//Größe: 91x62
#include <avr/pgmspace.h>
prog_uchar data_bild_1.bmp[] = {
  0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x0D, 0xDA, 0xFD, 0x55, 0x24,
  0x92, 0x49, 0x24, 0x92, 0xAA, 0xAA, 0xA8, 0xA5, 0x50, 0xAA, 0x55, 
0x55, 0x54, 0xAA, 0xAA, 0xAA,
  0xAA, 0xAA, 0x95, 0xAA, 0xD5, 0x55, 0x25, 0x24, 0xA9, 0x25, 0x54, 
0xAA, 0xAA, 0xA5, 0x4A, 0xA5,
  0x4A, 0x55, 0x2A, 0x49, 0x52, 0x92, 0x52, 0xAA, 0xB6, 0x56, 0xA9, 
0x52, 0x92, 0x49, 0x2A, 0x49,
  0x4A, 0xAA, 0xA5, 0x55, 0x15, 0x29, 0x49, 0x4A, 0xA4, 0x92, 0x54, 
0x94, 0x95, 0x2A, 0xAA, 0xA9,
  0x55, 0x4A, 0xA5, 0x21, 0x49, 0x24, 0x49, 0x2A, 0x4A, 0x52, 0xAA, 
0x25, 0x2A, 0x45, 0x12, 0x8A,
  0x52, 0x52, 0x91, 0x25, 0x25, 0x4A, 0xAA, 0x94, 0x95, 0x14, 0x8A, 
0x10, 0x88, 0x84, 0x92, 0x95,
  0x4A, 0x48, 0x54, 0x48, 0x48, 0x4A, 0x29, 0x4A, 0x4A, 0x54, 0x89, 
0x24, 0xAA, 0x12, 0x55, 0x52,
  0x52, 0x08, 0x84, 0x24, 0x90, 0x4A, 0x4A, 0xA9, 0x25, 0x24, 0x11, 
0x24, 0x94, 0x4A, 0x21, 0x09,
  0x44, 0x52, 0x24, 0x92, 0x4A, 0x54, 0x91, 0x04, 0x24, 0x09, 0x44, 
0x82, 0x51, 0x29, 0x2A, 0x84,
  0xA4, 0x49, 0x4A, 0x28, 0x2A, 0x02, 0x25, 0x21, 0x10, 0x90, 0x89, 
0x22, 0x24, 0x80, 0x08, 0x28,
  0x15, 0x10, 0x10, 0x94, 0xA4, 0xA4, 0x12, 0x29, 0x0A, 0xA8, 0x50, 
0x40, 0x08, 0xA8, 0xA0, 0x22,
  0x49, 0x49, 0x28, 0x84, 0x00, 0x20, 0x22, 0xA4, 0x40, 0x41, 0x51, 
0x24, 0x40, 0x90, 0x85, 0x2A,
  0xA1, 0x50, 0x00, 0x22, 0x82, 0x01, 0x11, 0x25, 0x09, 0x45, 0x00, 
0x00, 0x80, 0x24, 0x50, 0x05,
  0x2A, 0x88, 0x82, 0x00, 0x04, 0x0A, 0x49, 0x22, 0x20, 0x20, 0xA0, 
0x00, 0x04, 0x45, 0x14, 0xAA,
  0x14, 0x20, 0x00, 0x10, 0x90, 0x00, 0xA4, 0x92, 0x21, 0x04, 0x00, 
0x28, 0x01, 0x49, 0x20, 0x40,
  0x50, 0x80, 0x00, 0x81, 0x0A, 0x21, 0x50, 0x25, 0x00, 0x00, 0x40, 
0x40, 0x44, 0x4A, 0x42, 0x84,
  0x08, 0x00, 0x90, 0x08, 0x92, 0x41, 0x20, 0x00, 0x20, 0x01, 0x04, 
0x28, 0x49, 0x40, 0x48, 0x40,
  0x00, 0x00, 0x92, 0x40, 0x44, 0x82, 0x10, 0x20, 0x02, 0x40, 0x01, 
0x22, 0x48, 0x00, 0x02, 0x02,
  0x02, 0x10, 0x91, 0x09, 0x00, 0x92, 0x00, 0x00, 0x08, 0x88, 0x12, 
0x01, 0x02, 0x40, 0x00, 0x44,
  0x80, 0x10, 0x41, 0x10, 0x00, 0x40, 0x04, 0x84, 0x42, 0xA8, 0xA2, 
0x01, 0x10, 0x21, 0x00, 0x88,
  0x40, 0x02, 0x00, 0x29, 0x00, 0x00, 0x12, 0x08, 0x20, 0x02, 0x00, 
0x40, 0x92, 0x09, 0x21, 0x09,
  0x11, 0x10, 0x08, 0x10, 0x12, 0x10, 0x80, 0x40, 0x08, 0x00, 0x34, 
0x08, 0x08, 0x90, 0x00, 0x48,
  0x00, 0x00, 0x81, 0x20, 0x49, 0x24, 0x28, 0x08, 0x00, 0x4A, 0x40, 
0x04, 0x8A, 0x42, 0x01, 0x40,
  0x10, 0x90, 0x28, 0x52, 0x40, 0x02, 0x44, 0x04, 0x00, 0x11, 0x02, 
0x48, 0x94, 0xA8, 0xA0, 0x20,
  0x92, 0x02, 0x04, 0x24, 0x90, 0x81, 0x00, 0x0A, 0x42, 0x41, 0xA1, 
0x45, 0x24, 0x14, 0x20, 0x00,
  0x02, 0x0A, 0xA8, 0xD5, 0x7E, 0xAA, 0xA3, 0x7A, 0x28, 0x51, 0xED, 
0x5D, 0xB4, 0x6D, 0xFB, 0xF7,
  0x55, 0x7B, 0xB5, 0xF2, 0x45, 0x42, 0x14, 0x02, 0x50, 0x45, 0xDF, 
0xF9, 0xB5, 0xA9, 0x42, 0x95,
  0x26, 0xAD, 0x35, 0xA9, 0x52, 0xB5, 0x6D, 0x5B, 0xD4, 0xAB, 0x54, 
0xAA, 0x2A, 0x55, 0x24, 0xD7,
  0xFD, 0xFF, 0xE6, 0x8A, 0xAA, 0xA9, 0x52, 0x5A, 0x7B, 0x5B, 0x6F, 
0x6C, 0xED, 0x75, 0x5E, 0xD5,
  0x55, 0x4B, 0xBE, 0xFD, 0xAA, 0xB6, 0xBB, 0xFD, 0xBB, 0xBF, 0x77, 
0xED, 0xEE, 0xDE, 0xBA, 0xDF,
  0xAD, 0x5F, 0xFA, 0xFF, 0xF5, 0x7B, 0x2E, 0xD7, 0x76, 0xFD, 0xEE, 
0xAF, 0x7F, 0xEB, 0xFB, 0xF5,
  0xFE, 0xDF, 0x6F, 0x7B, 0xF6, 0xF7, 0xFF, 0xBB, 0x6F, 0xDA, 0xAA, 
0xD4, 0xAA, 0x2A, 0x22, 0x82,
  0x22, 0x00, 0x09, 0x2A, 0x2A, 0xB5, 0x6D, 0x6A, 0xAA, 0x12, 0x8A, 
0xAA, 0xAD, 0xB6, 0xAA, 0xB5,
  0x6B, 0x76, 0x49, 0x4A, 0xBA, 0xAA, 0x55, 0x55, 0x55, 0x2A, 0xAB, 
0x77, 0xB5, 0xAD, 0x5A, 0xA8,
  0xAA, 0xAA, 0xAA, 0xAA, 0xB6, 0xAD, 0xB5, 0xAD, 0x6D, 0x69, 0x55, 
0x6A, 0xAA, 0x5B, 0x55, 0xB5,
  0xBE, 0xDB, 0x5B, 0x77, 0x5A, 0xED, 0x55, 0xD5, 0xBA, 0x55, 0xA5, 
0xDA, 0xB5, 0xB6, 0xFB, 0xDE,
  0xD6, 0xEE, 0xEF, 0x55, 0xF7, 0x6F, 0xDE, 0xF7, 0xDF, 0xBD, 0xDE, 
0xAD, 0xD7, 0x6B, 0xB7, 0x6B,
  0xB7, 0xAD, 0x7B, 0xAF, 0xDD, 0xFF, 0x6A, 0x55, 0x9B, 0xDB, 0x57, 
0xFE, 0xDF, 0xFA, 0xFF, 0xBF,
  0xEE, 0xFB, 0xBB, 0xDD, 0x55, 0xF7, 0x5B, 0x6D, 0xAB, 0xED, 0x5E, 
0xFF, 0xFE, 0xAD, 0xAE, 0xDD,
  0xA7, 0x5B, 0xBF, 0xDF, 0xD7, 0x7E, 0xEB, 0xBB, 0xEB, 0x6D, 0x7D, 
0x6B, 0x2D, 0x6A, 0xAF, 0x67,
  0xBD, 0xDF, 0xFD, 0xF6, 0xAB, 0xF5, 0x5B, 0xBD, 0x6B, 0xDF, 0x5F, 
0xBD, 0x6E, 0xBF, 0xF7, 0x55,
  0x92, 0x96, 0xB5, 0x77, 0xEC, 0xB7, 0xEE, 0xD7, 0xFF, 0xDF, 0xB5, 
0x7D, 0xAE, 0xF7, 0xD3, 0x55,
  0xDF, 0x5F, 0x6D, 0xBD, 0xBE, 0xBD, 0x59, 0x46, 0x23, 0x55, 0x96, 
0xE5, 0x7D, 0xB6, 0xBE, 0xFE,
  0xFF, 0xC0
}
mein bild hat 12x62Pixel 744Byte


aber wie muss ich die >3x12< x 62 Bytes senden.

mfg kay

von Benedikt K. (benedikt)


Lesenswert?

Einfach den Befehl und hinterher die Daten. Also 16,0xAA,0,0,12,62,2, 
0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, usw.

von Kay (Gast)


Lesenswert?

erstmal vielen dank.
mfg
kay

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Du solltest mal nochmal deine Einstellungen beim Grafik Converter 
überprüfen, das passt glaub ich noch nicht ganz:
Das schwarz-weiß-bild im Anhabng wurde mit sicherheit über die "NULL 
Transformation" oder über "Graustufen Verfahren" erzeugt. Genau die 
beiden wandeln aber nur nach grau, ohne den Farbraum zu begrenzen.
Die ASM-Datei müsste auch größer sein. Du hast ja auch geschreiben, dass 
die Farbtabelle nur 2 Einträge hat. Danach schaut auch die .asm aus.

Ich hab mal zwei Screenshots gemacht. Wenn du die Einstellungen machst 
wie dort, sollte es auf jeden Fall funktionieren:
Die Farbtabelle muss 8 Farben enthalten, die Größe die angegeben wird 
musst du entsprechend dem Display senden und zum convertieren musst du 
entweder Floyd-Steinberg oder Schwellenwert-Verfahren auswählen.

Beim Speichern ist Horizontal und MSB-First wichtig und dass der Hacken 
bei "Bytegrenzen Bewahren" wegkommt.

Hoffe das hilft

Sebastian

von Kay (Gast)


Angehängte Dateien:

Lesenswert?

hallo Sebastian,

habe es mal so gemacht wie du es empholen hast,so mein Beispielbild
ist 74x50Pixel,
so wenn ich jetzt rechne 74x50=3700Byte
aber die tatzächliche Bilddaten grösse ist 1388Byte,
wie muss ich den das nun  mit dem befehl 16 das übertragen,
16,0,0,?,50,2

muss ich 74:8=9.25*50=462,5 ,x zählt ja nur in 8Pixel,
oder irre ich mich da.
vielleicht könnte mir da nochmal jemand weiterhelfen.

mfg kay

von Benedikt K. (benedikt)


Lesenswert?

Kay schrieb:
> habe es mal so gemacht wie du es empholen hast,so mein Beispielbild
> ist 74x50Pixel,
> so wenn ich jetzt rechne 74x50=3700Byte
> aber die tatzächliche Bilddaten grösse ist 1388Byte,
> wie muss ich den das nun  mit dem befehl 16 das übertragen,
> 16,0,0,?,50,2

Wie weiter oben schon geschrieben: Es werden 8 Pixel Schritte gezählt:
74/8=9,25 -> geht nicht.
Du musst also entweder 72 oder 80 Pixel senden.
Das wäre dann ein Wert von 9 oder 10.
Da pro Wert 3 Bytes gesendet werden müssen, macht das 3 x 9 x 50 bzw.
3 x 10 x 50. Insgesamt wären das 1200 oder 1500 Bytes.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

In deiner Beschreibung steht drinn das der MUX auch gleichzeitig als 
Buffer dient. Da ich den ja jezt weggelassen habe brauch ich dann auch 
einen Buffer (z.B. HC244).

von Benedikt K. (benedikt)


Angehängte Dateien:

Lesenswert?

Wenn das Kabel zum LCD nicht allzu lange ist, dann sollte es keine 
Probleme geben. Ein zusätzlicher Puffer ist nie verkehrt, denn er 
entkoppelt die Ausgangsleitungen von dem Adress/Datenbus, aber es 
funktioniert normalerweise auch ohne diesen Puffer.
Ein kritisches Timing ist das Adresslatch, das wie man im Anhang sieht 
in der Praxis sehr viel unkritischer ist als im Datenblatt (grün: ALE, 
rot: ADx Signal). Die fallende Flanke von ALE ist interessant, und rum 
um diese sind die Daten für >+/-20ns stabil (das Datenblatt garantiert 
z.B. nur 5ns Hold Time). Also mehr als ausreichend, selbst bei einer 
zusätzlichen Belastung.

Das Timing vom LCD ist da meist sogar noch etwas kritischer, aber auch 
hier ist das Timing in der Praxis sehr viel unkritischer als im 
Datenblatt:
Beitrag "Re: Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen"

von Sebastian (Gast)


Lesenswert?

Benedikt, du schreibst doch immer, dass du auf deinen Bildschirmen Filme 
vom PC aus anschaust. Was ist das denn für ein Programm, das du da immer 
nimmst?

Sebastian

von Kay (Gast)


Angehängte Dateien:

Lesenswert?

hallo,
so habe es eben mal versucht ein bild zu laden,aber es hat nicht 
funktioniert schade es wird nur müll angezeigt,
abgespeichert habe ich es als asm-datei und 16Bytes pro zeile.
hier ist meine routine zum senden:

;320X240Pixel
:320:8=40
locateGrafik320x240picture 0xAA,0,0,40,240,2
ldi ZL, low(2*bild_1)
ldi ZH, high(2*bild_1)

ldi WH, 240
YsLoop:;
ldi XL, 40
XsLoop:
  lpm WL, Z+;;
  call  USART_TX0      ;Zeichen senden
  dec XL
brne XsLoop
  dec WH
brne YsLoop


vielleicht könnte mir jemand weiterhelfen was ich da falsch mache
die bolddaten habe ich im anhang

mfg
kay

von Sebastian (Gast)


Lesenswert?

Lass mich raten: Das Display zeigt unter anderem Jede Menge Buchstaben 
an, aber nichts was irgendwie nach einem Bild ausschaut?

Du musst die Befehle (also 0xAA,0,0,40,240,2) schon auch zum Display 
schicken, damit dieses auch weiß, dass jetzt ein Bild kommt.

Ansonsten passen jetzt eigentlich alle werte. Wenn du das richtig 
sendest und dein Bild richtig umgewandelt ist müsstest du was sehen.

Wenns dann immernoch nicht geht meld dich mal nochmal. Dann such ich mal 
meinen LKW mit Startwerten raus. Damit MUSS es dann gehn.

Sebastian

von Kay (Gast)


Lesenswert?

hallo Sebastian ,
das ist ein Macro,hatte ich vergessen zuerwähnen
locateGrafik320x240picture 0xAA,0,0,40,240,2
.macro locateGrafik320x240picture
 push wl                ;Register sichern
 LDI WL,16
 call USART_TX0
 LDI WL,@0
 call USART_TX0         ;an LCD
 LDI WL,@1
 call USART_TX0         ;an LCD
 LDI WL,@2
 call USART_TX0         ;an LCD
 LDI WL,@3
 call USART_TX0         ;an LCD
 LDI WL,@4
 call USART_TX0         ;an LCD
 LDI WL,@5
 call USART_TX0         ;an LCD als Befehl ausgeben
 pop wl                 ;Register wiederherstellen
.endmacro

das bild ist 320x240
320x240=76800byte
320:8=40
3x40x240=28800byte an bilddaten
da benedikt sagt Da pro Wert 3 Bytes gesendet werden müssen,denke ich 
mal ich hab da irgendwo einen fehler in meinen aufruf,ich weiss nich wie 
ich 3x40 in meinen aufruf schreiben soll, da denke ich liegt der fehler.

;320X240Pixel
:320:8=40
locateGrafik320x240picture 0xAA,0,0,40,240,2
ldi ZL, low(2*bild_1)
ldi ZH, high(2*bild_1)

ldi WH, 240
YsLoop:;
ldi XL, 40
XsLoop:
  lpm WL, Z+;;
  call  USART_TX0      ;Zeichen senden
  dec XL
brne XsLoop
  dec WH
brne YsLoop


mfg
kay
das bild ausgeben aber am display wirds nur zu 1/4 mit wirren pixel 
gefüllt.
die anderen funktionen laufen prima.

von Benedikt K. (benedikt)


Lesenswert?

Sebastian schrieb:
> Benedikt, du schreibst doch immer, dass du auf deinen Bildschirmen Filme
> vom PC aus anschaust. Was ist das denn für ein Programm, das du da immer
> nimmst?

Irgendwo habe ich mal den Sourcecode von einem AVI Player aus dem Netz 
gezogen. Der liefert die einzelnen Frames als Bilder. Die schicke ich 
dann weiter ans Display, nachdem ich diese passend zurechtschneide und 
in das passende Format bringe.

Kay schrieb:

> da benedikt sagt Da pro Wert 3 Bytes gesendet werden müssen,denke ich
> mal ich hab da irgendwo einen fehler in meinen aufruf,ich weiss nich wie
> ich 3x40 in meinen aufruf schreiben soll, da denke ich liegt der fehler.
>
> ;320X240Pixel
> :320:8=40
> locateGrafik320x240picture 0xAA,0,0,40,240,2

Das sieht eigentlich alles richtig aus.

> ldi WH, 240
> YsLoop:;
> ldi XL, 40
> XsLoop:

Pro x Wert musst du 3 Bytes senden, dass wären dann 3*40 und nicht nur 
40 Bytes pro Zeile.

von Kay (Gast)


Lesenswert?

hallo,
so jetzt läufts
allerdings fährt immer son balken von unten nach oben

danke nochmals für die hilfe

mfg kay

von Wigbert P. (wigbert) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo Benedikt

irgendwie hab ich ein Bedienfehler

Rechteckübergabe
29;5;0;5;250;0;30;255;0
wenn ich die 250 durch 315 (Rechteck bis fast rechts) ist das Rechteck
weg.

Linie
18;0;0;230;255;0;230;255
die Linie soll unten horizontal durchgehen
wenn ich die mittlere 255 vergrössere, kommen schräge Linien raus.
Warum hat x eigentlich low und high

Wigbert

von Gast (Gast)


Lesenswert?

> Warum hat x eigentlich low und high
320 passen in 8Bit nicht rein, deshalb high und low.

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

achja,
dann werden > 255 zwei Werte benötigt
lang ists her

Wigbert

von Wigbert P. (wigbert) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi,
noch mal zur Bildübertragung:
Ich will ein Bild 1Bpp 64x64 Pixel übertragen
bei Pixel x = 80 ; y = 80 aufs Display.

Ich übertrage dann : 16 0xAA 10 80 8 64 0 und dann die Daten....

stimmt das soweit?

Ich hab hier convert.exe und LCD.Assistent.exe. Oder was kann ich 
nehmen?
 Wie war das mit den 3 Byte ?

Vielleicht könnte jemand mal die Datei einsehen.

Anbei Testbild + Datei h

Dank Euch mal schon

Wigbert

von Wigbert P. (wigbert) Benutzerseite


Angehängte Dateien:

Lesenswert?

und die *h

von Benedikt K. (benedikt)


Lesenswert?

Wigbert Picht-dl1atw schrieb:

> Ich übertrage dann : 16 0xAA 10 80 8 64 0 und dann die Daten....

Nicht ganz: Erst kommt die X/Y Position, dann die Größe:
16 0xAA 8 64 10 80 0

Das Bild in der .h sieht komisch aus: 455Bytes für 16384 Pixel passt 
nicht ganz zu dem 80x80 Bild.

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

schon der erste Konflikt
mal anders fragen...

Befehl:
16 0AA X Y XS YS Modus Daten...

16 ; 0AA; OK

Displaypixel 80 -> 80 :8 = 10 -> X = 10 ?
Displaypixel 80 -> 80         -> Y = 80 ?

Das Bild wird in 64 x 64 Pixel gesendet (rechts abschneiden)

das wären doch 64 : 8 = 8 x 3 = 24 Byte x 64 = 1536 Byte Testbild.

bis hier richtig gerechnet ?

Wigbert

von Benedikt K. (benedikt)


Lesenswert?

Äh Mist, deine Zeile oben war richtig. Ich hatte nur das x=80, y=80 
gelesen, ich bin heute nicht ganz ausgeschlafen...

Du überträgst die Daten im 1bit Modus, ein Bild ist also 64/8*64=512Byte 
groß. Dein angehängtes Bild ist aber 128 Pixel breit. Beschneide das 
mal, bevor du das durch die Software schickst.

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

&H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H00 , &H0F , &H00 , &H00 , &H00,
&H00 , &H00 , &H00 , &H00 , &H1F , &H80 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H00 , &H18 , &HC0 , &H00 , &H00,
&H00 , &H00 , &H00 , &H00 , &H0C , &H60 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H07 , &H06 , &H30 , &H00 , &H00,
&H00 , &H00 , &H00 , &H0F , &HC3 , &H18 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H0C , &HF1 , &H8C , &H00 , &H00,
&H00 , &H00 , &H00 , &H06 , &H3F , &H8C , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H07 , &H0F , &H06 , &H00 , &H00,
&H00 , &H00 , &H00 , &H03 , &HC0 , &H03 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H00 , &HE0 , &H01 , &H80 , &H00,
&H03 , &H80 , &H00 , &H00 , &H7E , &H01 , &H80 , &H00 , &H07 , &HC0 , 
&H00 , &H00 , &H1F , &H80 , &HC0 , &H00,
&H0c , &HC0 , &H00 , &H00 , &H01 , &HF0 , &H60 , &H00 , &H18 , &HC0 , 
&H00 , &H00 , &H00 , &H7C , &H38 , &H00,
&H30 , &HC0 , &H00 , &H00 , &H00 , &H0C , &H1F , &H00 , &H30 , &HC0 , 
&H00 , &H00 , &H00 , &H0C , &H07 , &H80,
&H70 , &HC0 , &H7F , &HC0 , &H00 , &H18 , &H00 , &HC0 , &H60 , &HC3 , 
&HFF , &HF0 , &H00 , &H30 , &H0C , &H60,
&H60 , &HC7 , &HC0 , &H38 , &H00 , &H60 , &H12 , &H30 , &H60 , &HDC , 
&H00 , &H1F , &H00 , &HC0 , &H12 , &H30,
&H30 , &HF8 , &H00 , &H03 , &H81 , &H80 , &H0C , &H18 , &H30 , &H60 , 
&H00 , &H01 , &HE3 , &H00 , &H00 , &H0C,
&H18 , &H00 , &H00 , &H00 , &H7E , &H00 , &H00 , &H0C , &H0C , &H00 , 
&H00 , &H00 , &H3C , &H00 , &H00 , &H0C,
&H1c , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H1C , &H18 , &H00 , 
&H00 , &H00 , &H00 , &H00 , &H00 , &H38,
&H18 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H30 , &H18 , &H00 , 
&H00 , &H00 , &H00 , &H00 , &H18 , &HE0,
&H18 , &H00 , &H00 , &H00 , &H00 , &H00 , &H3F , &HC0 , &H18 , &H00 , 
&H00 , &H00 , &H00 , &H00 , &H67 , &H80,
&H18 , &H00 , &H00 , &H00 , &H00 , &H00 , &HE0 , &H00 , &H18 , &H00 , 
&H00 , &H00 , &H00 , &H00 , &HC0 , &H00,
&H0c , &H00 , &H00 , &H00 , &H00 , &H01 , &H80 , &H00 , &H06 , &H00 , 
&H00 , &H00 , &H00 , &H03 , &H00 , &H00,
&H07 , &H00 , &H00 , &H00 , &H00 , &H03 , &H00 , &H00 , &H03 , &HF8 , 
&H03 , &HFF , &HFC , &H06 , &H00 , &H00,
&H00 , &HFE , &H03 , &HFF , &HFC , &H0C , &H00 , &H00 , &H00 , &H07 , 
&H03 , &H00 , &H0C , &H18 , &H00 , &H00,
&H00 , &H03 , &H03 , &H00 , &H0C , &H30 , &H00 , &H00 , &H00 , &H01 , 
&H83 , &H00 , &H0C , &H30 , &H00 , &H00,
&H00 , &H00 , &HC1 , &H80 , &H0C , &H60 , &H00 , &H00 , &H00 , &H00 , 
&H61 , &H80 , &H08 , &H60 , &H00 , &H00,
&H00 , &H00 , &H60 , &HC0 , &H18 , &H60 , &H00 , &H00 , &H00 , &H00 , 
&H30 , &H60 , &H30 , &HC0 , &H00 , &H00,
&H00 , &H00 , &H18 , &H7F , &HF0 , &HC0 , &H00 , &H00 , &H00 , &H00 , 
&H18 , &H1F , &HF0 , &HC0 , &H00 , &H00,
&H00 , &H00 , &H0C , &H00 , &H00 , &HE0 , &H00 , &H00 , &H00 , &H00 , 
&H07 , &H00 , &H00 , &H70 , &H00 , &H00,
&H00 , &H00 , &H03 , &HFF , &H00 , &H30 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &HFF , &H8F , &H18 , &H00 , &H00,
&H00 , &H00 , &H00 , &H03 , &H0F , &HF8 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H06 , &H18 , &HF0 , &H00 , &H00,
&H00 , &H00 , &H00 , &H0C , &H70 , &H00 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H0D , &HE0 , &H00 , &H00 , &H00,
&H00 , &H00 , &H00 , &H07 , &H80 , &H00 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H03 , &H00 , &H00 , &H00 , &H00,
&H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H00 , &H00 , &H00 , &H00 , &H00,
&H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H00 , &H0 , &H00 , &H00,
&H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , 
&H00 , &H00 , &H00 , &H00 , &H00 , &H00

würde das passen?
ich brauch doch jedes Byte nur 3x senden?

Wigbert

von Benedikt K. (benedikt)


Lesenswert?

Es sind zumindest 512 Bytes, könnte also passen. Die Daten musst du 
einfach nach dem Befehl senden, einfach alle Bytes so wie sie in der 
Tabelle stehen hinereinander, nicht 3x.

von Wigbert P. (wigbert) Benutzerseite


Angehängte Dateien:

Lesenswert?

hier würden die Pixelzahl wohl auch stimmen

Wigbert

von Benedikt K. (benedikt)


Lesenswert?

Ja, und man kann den Hasen auch einigermaßen erkennen.

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

>einigermaßen

nun bin ich traurig, was der schon an Zeit gekostet hat.....

Wigbert

von Wigbert P. (wigbert) Benutzerseite


Angehängte Dateien:

Lesenswert?

also die Darstellung aufs Display ist OK ,

hier mal als Menueunterstützung, und den Einsatz von ein paar Grautöne.

Wigbert

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

falls jemand Lust auf Bascom hat,
der Codeauszug

Sub Bild
Local Count As Word
Local B As Byte
Printbin 16 ; 170 ; 29 ; 70 ; 8 ; 64 ; 0    ' Bildplatz
If Wahl = 0 Then Restore Hase :
'if Wahl = 1 then Restore Testbild:
For Count = 1 To 512                        ' Byte müssen stimmen
Read B
Printbin B
Next Count
End Sub

Hase:                                       'von oben
Data ......


Wigbert

von Der F. (flins)


Lesenswert?

Hat eigentlich aktuell noch jemand eine oder sogar zwei Platinen übrig?


MfG
Flins

von Chrissi (Gast)


Lesenswert?

Würde mich auch interressieren ob das hier noch aktuel ist?
wie sieht es mit der 8 graustufen version aus?gibts da ne ZIB mit 
Beispielen???
würde mich auch freuen wenn es noch eine platine geben würde


lg
chrissi

von Chrissi (Gast)


Lesenswert?

ok die 8 Graustufen Version hab ich gefunden

von philipp (Gast)


Lesenswert?

Hallo Benedikt,
Wie schon oft bemerkt, tolles Projekt und vielen Dank auch fuer die 
Betreuung der Seite.
Meine Frage, bringt ein Mega162 Vorteile? - mehr s-ram, neuerer Chip, 
Architektur?
die Displayansteuerung ist ja wirklich ein Spezialgebiet. Mit avrs und 
Elektronik kenne ich mich ja etwas aus,
doch programmiere ich fast nur in gcc- c, und habe mich bisher nicht so 
sehr fuer die Speicherverwaltung
interessiert.
Was muesste man aendern, wo konkret Adressen umschreiben, - bringt das 
was?
vielen Dank philipp

von Benedikt K. (benedikt)


Lesenswert?

Wirklich viel bringt der Controller nicht, nur mehr Flash (z.B. für 
zusätzliche Schriftarten) und mehr SRAM (für einen größeren UART 
Empfangspuffer).
Geändert werden muss dazu nur die Zeile #define DDRAM 1024.
Diese muss auf den Ende des internen und Beginn des externen RAMs also 
auf 0x500 = 1280 gesetzt werden.

von Philipp (Gast)


Lesenswert?

Danke Benedikt für Deine schnelle und kompetente Antwort.
So ungefähr, hatte ich gehofft, konnte auch nur die #define... finden,
und mit den Wert hast Du mir auch geholfen.
War mir aber unsicher, ob sich in dem asm Code noch Adressen ergeben.
Da ich das Teil einlöten wollte, wäre es etwas nervig, es dann tauschen
zu müssen. Den mega162 gibt es auch mal günstiger.
Nochmal Danke, Danke.
philipp

von Sebastian .. (zahlenfreak)


Lesenswert?

Vielleicht noch zu beachten: Der interne Adressraum darf nicht größer 
als 2k sein (2k SRAM ist schon zu viel) wenn man 8 Graustufen nutzen 
will. Bei 4/2 Graustufen kann man mit mehr internem SRAM halt nicht mehr 
den gesamten virtuellen Bildbereich verwenden.
Aber der Mega162 hat ja nur 1kB

Sebastian

von Benedikt K. (benedikt)


Lesenswert?

Sebastian ... schrieb:
> Vielleicht noch zu beachten: Der interne Adressraum darf nicht größer
> als 2k sein

Nicht ganz: Die theoretische Grenze liegt bei 4kByte, denn es werden 
240x256 Bytes benötigt, also 61440 Bytes. Da allerdings der Wert 65536 
nicht mehr in in den 16bit Adresszähler passt, funktionieren in der 
Praxis nur max 3840 Bytes ohne Anpassungen am Code.
Mit den Graustufen sollte das wenig zu tun haben, denn die liegen alle 
in einer Zeile.

von Sebastian .. (zahlenfreak)


Lesenswert?

Du hast natürlich recht. Hab mich mit High- und Low- Byte und der ganzen 
Speicheraufteilung verhaun. Ist doch zu lang her, dass ich im Code 
rumgemacht hab. Im Endeffekt kann man dann halt Controller mit 2k SRAM 
noch nehmen, solche mit 4k nicht.

von Denis K. (denis_tbg)


Lesenswert?

Hallo.
Ich habe das Projekt nachgebaut, und nun das Problem, dass meine 
negative Spannung von etwa -21,8V auf -6,8V zusammenbricht, wenn ich das 
Display anschließe.
Ferner habe ich den RAM "W24257AK-15" verwendet. Ansonsten ist es die 
von Benedikt angegebene Schaltung.

Auf dem Display erscheint in der Mitte ein senkrecht unterbrochener 
"Block" (weiss) mit mehr oder weniger starker Pigmentierung. Kann dies 
ein Fehler der zu niedrigen Spannung sein?

Den AVR (MEGA8515-16PU) habe ich mit AVR DUDE geflasht; hierbei habe ich 
die Fuses : hFuse: DF ; lFuse: FF gesetzt. Sind diese korrekt?

Gibt es ein Funktionierendes *.hex, mit einem Beispielbild, um das Board 
ohne PC oder serielle Schnittstelle testen zu können?

MfG Denis

von Sebastian .. (zahlenfreak)


Lesenswert?

Hatte auch Probleme mit der Stabilität der Kontrastspannung. Bei mir 
hats geholfen die Versorgungsspannung des Schaltreglers mit 100n direkt 
am Chip zu puffern.
Gegen Masse gemessen sollte die Kontrastspannung im Betrieb bei ca. -17 
Volt liegen.

Die Software zeigt immer einen Startbildschirm an. Wenn du also nichts 
über die UART sendest solltest du was sehn (Ein paar Quadrate und ein 
kurzer Text).

Gleich vorsorglich noch: Die erste Zip enthält einen fehlerhaften 
Schaltplan. Nimm am besten immer die aktuelle Version. Auch bei der 
Software.



@Benedikt:
Wollte mal mit der aktuellen Version im 4-Farb-Modus den virtuellen 
Bildbereich ausprobieren. Irgendwie hats nicht funktioniert. Auch wenn 
ich direkt im Controller die ensprechende Funkion aufgerufen hab hat 
sich nichts getan. Muss aber zugeben, dass ich das Problem nicht weiter 
untersucht habe, weils reine Neugier war.

Gruß,
Sebastian

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

WIeviel "Power" hat den der uC etwa noch frei?
Könnte man noch eine Auswertung eines Touch und ein paar Tastern 
zusätzlich einbauen oder ist der Controller mit Bildausgaben vollauf 
beschäftigt?

von Sebastian .. (zahlenfreak)


Lesenswert?

Weiter oben hat Benedikt mal genaue Messungen und Berechnungen gepostet. 
Aber ich glaub, da gabs die 3-bit Version noch nicht.
Grob überschlagen liegt die CPU-Last bei 50%. Von daher ist noch einiges 
drin. Das größere Problem dürften die anderen Ressourcen sein. Ram ist 
ziemlich voll. Flash weiß ich nicht. Timer müsste in der aktuellen 
Version einer frei sein, anfangs waren alle belegt.
Wenn du signifikant CPU-Last hinzufügst musst du auch beachten, dass 
weniger Zeit für die Grafikberechnungen zur Verfügung steht. Bilder 
Laden, Rechtecke malen,... wird dann länger dauern.
Eine Version mit 2*4 Tastenmatrix hab ich weiter oben mal gepostet. 
Funktioniert bei mir einwandfrei.

Sebastian

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ich würde dann vieleicht auf den Mega162 umsteigen.
Meine Idee ist das ich ein "Bedienpanel baue mit:
 - LCD320x240 + Touchpad
 - Drehencoder
 - 4 Tasten
 - RGB Status LED
Alle Daten werden Zyklisch erfasst und ein weiterer AVR kann dann diese 
Daten abrufen und ggf. Sachen an das LCD zur Anzeige senden, die 3bit 
Variante wäre da schon nett :)

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

Cool,Touchpad und dann noch Tasten...

Besser wäre es wohl, den GLCD-AVR in Ruhe zu lassen, und einen 2.AVR
für den Rest zu nehmen.

Wigbert

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wigbert Picht-dl1atw schrieb:
> Cool,Touchpad und dann noch Tasten...
Jupp, die Bedeutung der Tasten kann man erlernen und dann auch im 
Blindflug treffen, das Ganze soll ein AVR basiertes Navi/Mp3 Player 
sein, und wenn man während der Fahrt einfach ein Lied weiterschalten 
will soll man nicht erst auf dem Display die richtige Postion suchen 
müssen und dann irgenwo rauf-touchen.

> Besser wäre es wohl, den GLCD-AVR in Ruhe zu lassen, und einen 2.AVR
> für den Rest zu nehmen.
Klar, aber dann muß ich schon mit mind. 2 AVRs kommunizieren, beide 
brauchen Ihre layouts und Außenbeschaltung ect...

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

>Jupp, die Bedeutung der Tasten kann man erlernen und dann auch im
>Blindflug treffen
na gut, mein Auto hat zusätzlich(vom Hersteller) auch zig Tasten am 
Lenkrad.

>Klar, aber dann muß ich schon mit mind. 2 AVRs kommunizieren, beide
>brauchen Ihre layouts und Außenbeschaltung ect...

auch richtig,
es gibt ja noch andere (leistungsstärkere usw.) Mikrocontroller.

Viel Spass.

Wigbert

von Sebastian .. (zahlenfreak)


Lesenswert?

Wie willst du das Touchpad auslesen? 8515 und 162 haben so weit ich das 
gesehen hab beide keinen ADC.
Ich bin mitlerweile auch auf einen zweiten AVR ausgewichen, weil mein 
Display-AVR die Pins für Ram-Paging braucht. Ist zwar noch nicht 
implementiert, aber ich freu mich schon drauf auch bei 8 Graustufen 
keine Ladezeiten zu sehen.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Mist, du hast Recht :(
Das war etwas zu kurz gedacht... naja.

von Denis K. (denis_tbg)


Lesenswert?

Moin.
Nachdem ich dann die Pins am hc74 von 8 auf 9 geändert habe hat das 
Signal am LCD anschluss schon besser ausgesehn. Nocheinmal die 
Verkabelung zum Display geprüft... siehe da... LOAD und CP vertauscht... 
. Jetzt klappt es. Die negative Spannung habe ich mit einer EF20.1 
(516597 - 62) vom großen C ,für ca. 2,30€, in den Griff bekommen. Wen's 
interresiert, ca. 20 bis 25 Windungen 0,2mm Kupferlackdraht aufgetragen, 
die Ferritte eingesteckt und angelötet.
Nun habe ich noch 2 Fragen;
  - Das Display hat horizontales Flimmern. Es sieht wie ein
    "Lauflicht" nach unten aus. Was kann das sein?
  - Die selbstgewickelte Spule Brummt sehr laut, hat damit jemand
    Erfahrung und würde mir bitte sagen, wie ich das etwas eindämmen
    kann?
    Versucht habe ich es schon mit etwas Abstand zwichen den Ferritten,
    leider ohne Erfolg.

MfG und vielen Dank schonmal für die Hilfe

von Sebastian .. (zahlenfreak)


Lesenswert?

Das Flimmern kommt durch die Graustufenerzeugung. Spiel mal mit dem Wert 
GRAYMOD etwas rum. Erlaubter Wertebereich steht im pdf aus der zip.
Außerdem hab ich gemerkt, dass das Flimmern mit mehr abstand und 
geringerer Hintergrundbeleuchtung schwächer wird. Kenne deine Anwendung 
nicht, aber vielleicht ist es dadurch dann nicht mehr relevant.
Wenn du keine großen gleichfarbigen Flächen hast wirst du das Flimmern 
auch nicht mehr merken.
Wenn garnichts hilft kannst du auch die Framerate erhöhen, aber dann 
erhöht sich die Rechenlast des AVR und es dauert Länger bis Bilder und 
Grafiken angezeigt werden.

Zu den Spulen hab ich mal gehort, man solle Sekundenkleber zwischen die 
Wicklungen ziehen lassen. Hab aber keine Ahnung, ob das hilft. Habs 
selbst nie probiert.

Gruß, Sebastian

von Denis K. (denis_tbg)


Lesenswert?

Mit GRAYMOD werd ich mal versuchen.
Der TIP mit dem Kleber, erstklassig... ich habe die Wicklungen und die 
Zwichenräume des Ferritkerns mit 2 Komponenten Kleber (hatte keinen 
Sekundenkleber) "behandelt"; kein Brummen, Pfeiffen oder Zischen mehr. 
DANKE

von bernd (Gast)


Lesenswert?

Hallo Benedikt,

Warum hast du CP2 mit dem /OE-Pin des RAMs und dem PD3-Pin des uCs mit 
einem NOR-Gate verbunden?

Gruss

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

bernd schrieb:
> Hallo Benedikt,
>
> Warum hast du CP2 mit dem /OE-Pin des RAMs und dem PD3-Pin des uCs mit
> einem NOR-Gate verbunden?
Das Frage ich mich auch gerade hat das eine Bewandtnis?

Die Funktion des MUX umschaltens ist mir auch etwas unklar:
Das invertierte LOAD Signal setzt das FF auf 0, und mit CLK setzt du es 
auf 1? Oder wird zwischendurch das FF auch mittels CLK getoggelt?

von bernd (Gast)


Lesenswert?

Hab es glaub rausgefunden:

wenn der /OE-Pin auf low gezogen wird und anschliessend wieder auf high 
geht, wird am CP Pin der inverse Signalverlauf sein. Wenn das Byte vom 
Ram gelesen ist, wird ein Puls erzeugt. Da das Display auf die fallende 
Flanke die Daten einshiftet, funktioniert das gerade prima. ver-"nor"-t 
wird das mit einem portpin. Mit diesem Portpin kann man nun festlegen, 
ob ein Shift-clock erzeugt werden soll oder nicht. Wenn man das Display 
akutalisieren möchte (also in der Interrupt-routine) muss man diesen 
Portpin auf low legen. Wenn man einfach wahlweise Daten vom Ram lesen 
möchte, bleibt der Pin aber auf high, sodass keine Shift Clocks 
ausgelöst werden.

Der MUX wird einfach bei jedem Shift Clock getoggelt, und falls er mal 
falsch initialisiert worden wäre, wird spätestens nach der ersten Zeile 
das FF geresetted, sodass er wieder mit den korrekten Daten beginnt.


Halbwegs verständlich?

gruss,
bernd

von Patrick W. (pw-sys) Benutzerseite


Lesenswert?

Hallo,

hat noch jemand 1 oder 2 Platinen übrig, vielleicht sogar noch so nen 
RAM?

Gruß
Patrick

von Karl (Gast)


Lesenswert?

Hallo,
ich möchte an dieser Schaltung das Glcd F-51154NF-FW-AA von Pollin 
anschließen. Es hat die Größe 480x240 Pixel.
Anschlüsse:
4=Vdd (+5V)
5=D3
6=D2
7=D1
8=D0
9=Vss (GND)
10=Vee (-25V)
11=Display off (invertiert, also mit nem Pullup auf Vdd ziehen)

13=CP
14=LOAD
15=FRAME

Problem 1: Text und Grafik erscheinen doppelt.Einmal in der oberen 
Hälfte des Display, und gleichzeitig in der unteren Hälfte.

Problem 2:Über UART kann ich nur Text anzeigen lassen. Das mit den 
Steuerzeichen funktioniert bei mir nicht.In welchem Format werden die 
Steuerzeichen gesendet.Sender ist ein Atmega 32.
                Atmega 32       Atmega 8515
                 RDX--------------TDX
                 TDX--------------RDX
                 GND--------------GND
Hat jemand einen Tip für mich?
MfG
Karl

von Sebastian .. (zahlenfreak)


Lesenswert?

Welche Software-version verwendest du denn? Mit welchen Parametern? 
Poste am besten mal deine param.h und wenn du hast auch ein Datenblatt 
des Displays.
Dein Display wird ohne ändern der Parameter nicht (sauber) laufen. Auch 
musst du auf 8 Graustufen verzichten, sonst reicht der Speicher nicht.

Außerdem musst du mit einer deutlich höheren Prozessorauslastung wegen 
der größeren Auflösung rechnen. Das Rendern der Grafik dauert dann 
einfach länger.

Du musst das RTS(BUSY)-Signal (PD2) noch zu deinem Master controller 
führen und dort Abfragen. Die TXD-leitung des Mega8515 kannst du dir 
dafür sparen (also die, auf der der Mega32 zuhört).

Gruß, Sebastian

von Karl (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Sebastian
>Welche Software-version verwendest du denn? Mit welchen Parametern?
>Poste am besten mal deine param.h und wenn du hast auch ein Datenblatt
>des Displays.
LCD Controller für 320x240
LCD mit UART                  Version 1.11
>und wenn du hast auch ein Datenblatt
Datenblatt habe ich leider nicht gefunden nur dass hier aus Tread
Pollin Display Optrex F51154NF-FW-AA
>Autor: Benedikt K. (benedikt) (Moderator)
>Datum: 19.08.2009 11:55

>Die sichtbare Fläche beträgt übrigens etwa 160x69mm, also das Display
>ist recht groß.

>Hier gibts weitere Infos:
>http://www.goldmine-elec-products.com/prodinfo.asp...
>http://pccar.ru/showthread.php?t=9191

>Den 6x3 Treiber ICs nach (je 80 Ausgänge), hat das Display wie von mir
>vermutet entweder 480x200 oder 480x240 Pixel.
>Die Touchscreenmatrix müsste 12x8 Felder haben, wenn ich das richtig
>sehe.
>Da scheint wohl irgendwo ein Lager ausgeräumt worden zu sein, die Dinger
>gibts überall.

>Autor: Eike J. (Gast)
>Datum: 30.11.2009 19:06
>nachdem ich mich nun lange genug mit der Ansteuerung des Displays
>gequält habe, wollte ich es hier einmal kurz erläutern:

>Wie Norbert schon geschrieben hat, sind die Anschlüsse:

>4=Vdd (+5V)
>5=X3
>6=X2
>7=X1
>8=X0
>9=Vss (GND)
>10=Vee (-25V)
>11=Display off (invertiert, also mit nem Pullup auf Vdd ziehen)

>13=CP
>14=LOAD
>15=FRAME



>Nun zur Ansteuerung mit einem Mikrocontroller.
>1. die 4 Bit ausgeben (CP low, LOAD low, FRAME high)
>2. CP high (die 4 Bit bleiben natürlich, LOAD low, FRAME high)
>3. die nächsten 4 Bit ausgeben (CP low, LOAD low, FRAME high)
>4. CP high (die 4 Bit bleiben natürlich, LOAD low, FRAME high)

>das solange bis die zeile voll ist, also 120 mal, da es 480 Pixel sind.

>Wenn die Zeile voll ist, wird nach den letzten 4 Bit CP auf high gezogen
>und danach auch noch LOAD auf high (CP low, FRAME high). Dadurch springt
>der "Cursor" in die nächste Zeile und ihr könnte die wieder
>vollschreiben.

>wenn alle 240 zeilen voll sind, muss wieder in die erste zeile
>gesprungen werden, dazu wird FRAME auf low (rest auch auf low) gezogen.
>ich hab bevor ich den frame auf low ziehe auch noch einen zeilenumbruch
>gemacht, ob das nötig ist, weiß ich nicht, aber es stört auch nicht.
>jetzt geht der spaß wieder von vorne los.

>und zwischen jedem "schaltvorgang" hab ich 1 microsec delay zwischen,
>ist aber nur ausprobiert, damit gehts aber auf jeden fall..

>ich hoffe mit dieser anleitung gehts bei euch etwas schneller als bei
>mir..^^

>Gruß Eike
Habe die Schaltung auf Lochrasterplatte aufgebaut, funktioniert bis auf 
die Auflösung(480X240Pixel werden angezeigt, aber die obere und untere 
Hälfte werden gleichzeitig beschrieben) und eben die Sache mit den 
Steuerzeichen. Ich habe bei meinen Schaltungen bis jetzt nur mit RXD und 
TXD gearbeitet.
>Du musst das RTS(BUSY)-Signal (PD2) noch zu deinem Master controller
>führen und dort Abfragen.
Ich schalte also RTS auf TXD vom Master?
 Hast du für die Busy Abfrage  einen Code-Schnipsel vieleicht mit ner 
kleinen Erklärug?

Gruss
Karl

von Sebastian .. (zahlenfreak)


Lesenswert?

Ganz kurz:

Du musst mindestens Version 1.2 nehmen, nimm aber am besten die 
aktuelle. 8-Grastufen musst du dann halt in der param.h deaktivieren. So 
beim Überfliegen ist mir sonst nichts aufgefallen.

Sebastian

von Sebastian .. (zahlenfreak)


Lesenswert?

So, jetzt hab ich wieder mehr zeit.

RTS vom 8515 legst du auf einen beliebigen (als Eingang konfigurierten) 
Pin des Masters. Rx vom 8515 kommt auf Tx vom Master. Tx vom 8515 bleibt 
offen.
Die Funktion von RTS ist im pdf aus der zip ganz gut erklärt:

Hinweise zur Ansteuerung:
Aufgrund der teilweise ziemlich rechenintensiven Grafikbefehle sollte 
der RTS/Busy Ausgang vor dem Senden eines Befehls abgefragt werden. Der 
Controller verfügt zwar über einen 256 Byte Befehlspuffer, aber auch 
dieser ist irgendwann voll, wenn mehrere aufwendige Befehle ohne Pause 
gesendet werden! Solange der RTS/Busy Pin Low ist, kann man gefahrlos 
mindestens 64 Bytes senden, da RTS/Busy aktiviert wird, wenn der Puffer 
zu ¾ gefüllt ist. Man braucht also nicht vor jedem Byte RTS/Busy zu 
prüfen, sondern es reicht einmal vor jedem Befehl (falls dieser kürzer 
als 64 Bytes ist.)

Dein Display hat so weit ich das mitbekommen hab aber nur 200 Zeilen, 
also eine Auflösung von 200*480.

Wenn ich nicht wieder nen Denkfehler drin hab ist deine Softwareversion 
wie gesagt zu alt. Du musst dann eine nehmen, die einen virtuellen 
Bildbereich unterstützt. In jedem Fall wird es nicht schaden, die 
aktuelle Version zu verwenden. #define GRAY8 musst du dann halt 
auskommentieren.

Und schreib bitte, obs dann funktioniert. Am Besten mit Bild. Bin am 
Überlegen, ob das Display was für mich wäre.

Gruß, Sebastian

von Karl (Gast)


Lesenswert?

>In jedem Fall wird es nicht schaden, die aktuelle Version zu verwenden.
habe es mit der Vers. 1.2 und 1.3 versucht.Das Ergebnis ist das 
Gleiche.Dann bin ich beim Prüfen mit VSS an D0 gekommen.Das hat mich den 
BC327 und vermutlich das Display gekostet.Habe ein Neues bestellt.

von Sebastian .. (zahlenfreak)


Angehängte Dateien:

Lesenswert?

Servus,

nachdem mir das Bilder laden immer zu langsam ging, hab ich mal die 
Software noch ein wenig aufgebohrt. Ich muss zugeben, dass das ganze ein 
wenig aus dem Ruder gelaufen ist, denn die Timings sind jetzt schon sehr 
hart, aber ich wollte dann einfach sehn, was möglich ist.

Mit der Angehängten Version kommt man bei 3 bit/Pixel Vollbildern auf 
sagenhafte 5 Frames pro Sekunde!
Baudrate ist dabei 2MBaud.
Die BSY-leitung verhält sich jetzt anders:
Für jede fallenden Flanke von BSY muss man ein Byte senden. Das Byte 
muss nicht sofort kommen (sollte es aber), aber man darf auf keinen Fall 
eine Flanke übersehen.
Zwischen zwei Flanken liegen mindestens 1,5µs, also 24 Takte bei 16MHz. 
Das kann man auch nicht wirklich durch den Master ausbremsen. Lediglich 
die Framerate sinkt, wenn man langsamer sendet. Im Mittel werden die 
Flanken auch seltener, aber mehr als 1,5µs kann man nicht garantieren.

Außerdem muss man nach einem Bild mit 3 bit immer 2 Dummy-Bytes senden. 
Ich empfehle 0x0, dann auch gerne ein paar mehr Bytes (falls unterwegs 
was passiert sein sollte).

Die Parameter der angehängten Version sollte man möglichst nicht ändern, 
insbesondere die Baudrate sollte wohl mindestens auf 1MBaud stehen. Zwar 
werden viele einstellungen funktioniere, ich hab mir aber keine Gedanken 
über andere Parameter gemacht, kann also nichts mit sicherheit sagen.


Wie das ganze funktioniert?
Der Software-Fifo ist ausgebaut worden. Statt dessen verlasse ich mich 
auf den Hardware-Puffer der USART.
Im Normalen Betrieb wird immer ein Byte im Puffer vorgehalten. Ruft das 
Programm ein neues Byte aus dem Puffer ab, so wird direkt das nächste 
durch fallende Flanke auf BSY bestellt.
Wenn der Controller zum Anzeigen eines 3-bit Bildes kommt, werden zuerst 
durch 2 fallende Flanken zwei weitere Bytes bestellt. Eines davon landet 
im zweiten Byte des Hardware-FIFO, das zweite bleibt im Shift-register.
Durch die 3 Byte Puffer ist es möglich, die Zeit während dem 
Display-intterupt zum senden von 2-3 Byte zu nutzen. Zwischen 2 
Interrupts werden dann nochmal 3-4 Bytes übertragen und 6 Bytes 
verarbeitet. Ungefähr - im Mittel.
Wenn das Bild fertig übertragen ist muss noch der Puffer geleert werden. 
Man könnte natürlich "einfach" beim verarbeiten der letzten beiden Bytes 
keine Flanke erzeugen. Ich habs mir hier aber leicht gemacht und lese 
zwei Dummy-Bytes aus. Der inhalt ist egal, aber der Sender muss halt 
zwei zusätzliche Bytes senden.

Viel Spass damit. Vielleicht kanns ja jemand gebrauchen.

@Benedikt:

Wenn du mir eine große Freude machen willst: Lass doch mal mit 5fps 3bit 
Farbe ne Filmsequenz über das Display laufen :-)

Viele Grüße, Sebastian (der von den Graustufen :-)

von Sebastian .. (zahlenfreak)


Lesenswert?

Vielleicht noch als Hinweis für alle, die's mal ausprobieren wollen:

Ich hab auf meinem Master einen Interrupt der auf fallende Flanke von 
BSY triggert. Das ist auch der einzige Interrupt am Master, sonst würden 
wohl die Latenzen zu groß. Bei jedem Auslösen zählt eine Variable um 
eins hoch, sie zählt also, wie viele Bytes zu senden sind.
In der Main-loop schau ich dann, ob diese Variable Null ist. Wenn nicht, 
wird, sobald UDR leer ist, ein byte gesendet und die Interrupt-Variable 
wieder um eins verringert.
Sonst passiert auf meinem Master auch nichts. Viel rechenzeit dürfte 
auch nicht mehr übrig sein ;-)

Gruß, Sebastian (der sich auf Kommentare freut :-)

von G. S. (varda)


Lesenswert?

Ist ja ein super Projekt. Vielen Dank!

Hat jemand noch Interesse an Leerplatinen (DIP4-Version)? Werde in Kürze 
welche in Auftrag geben. Preis dürfte so bei ca. 8 Euro pro Stück liegen 
+ Versand.

Schöne Grüsse

von Peter H. (phansen)


Lesenswert?

Ich würde eine nehmen.
Gruß
Peter

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

@Günter S. (varda)

war die Platine hier schon mal ausgestellt?

Brauche 2 Stück, allerdings sollte der S-Ram in SOJ 28 drauf.
Also, wenn Du noch routest, steuere ich die S-Rams sogar bei.
IS61C256AL 12ns.

Wigbert

von G. S. (varda)


Lesenswert?

@Wigbert

Die Platine wurde hier noch nicht ausgestellt. An der Platine selbst 
möchte ich selbst keine Änderungen vornehmen. (Möchte mich nicht extra 
in Eagle einarbeiten - mache alles in KICAD)
Sollte sich jemand aber finden, der die Änderungen vornimmt wäre es auch 
ok! (hätte auch noch eine Änderung .... der 12 pol. Flexprintanschluss 
zusätzlich als Stiftleiste rausführen)


Günter

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

Mist,

Günter, ich dachte Du nimmst mir die Arbeit ab.

Also meine Platine wäre 100x80 hätte zusätzlich eine Adapterplatine
Stiftleiste-Flexprintstecker für NANYA. Allerdings muss ich den S-Ram
noch routen. Könnte dann bei Interesse die S-Rams für 1 Euro zulegen.
Um ein ordentlichen Preis zu erhalten sollten ca.20 Platinen
zusammenkommen.
Das ganze sähe dann etwa so aus, aber mit Lötstopplack
Beitrag "Re: Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen"

Wigbert

von Jens (Gast)


Lesenswert?

Ist der Spannungswandler dan schon drauf, oder ist der auch zum 
aufstecken wie oben?

Gruß, Jens

von Patrick W. (pw-sys) Benutzerseite


Lesenswert?

Hallo,

ich würde auch noch eine nehmen

Gruß
Patrick

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

Hallo,

Günter war zuerst da. Also steht ihm auch die Sammelbestellung zu.
Ich wollte nur helfen, nicht wegnehmen.

Mit dem Spannungsregler ist Ansichtssache. Hatte ich doch neulich
ein Pollin GLCD mit 320x240 Pixel mit positiver Kontrastspannung.
Da wäre es Sinnvoller die Kontrastspannung extern zu erzeugen.
Raufpassen tut die Spannungsversorgung noch auf dem Board.
Wäre kein Thema.
Genauso das Adapterboard, das lässt sich dann an das GLCD anpassen.


So, jetzt hat aber Günter erstmal das Wort.


Wigbert

von G. S. (varda)


Lesenswert?

Ich sage mal so ...

Änderungen am Layout bzw. Schaltung würden bestimmt einige Zeit in 
Anspruch nehmen. Jeder hat bestimmt so seine Änderungswünsche. Sind 
event. nicht leicht auf einen Nenner zu bringen.


Ich denke mal, mit dem Layout und der Schaltung aus DIP4.zip dürften 
doch mehr oder minder alle zufinden sein.

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

@ Gunter S.

wäre wohl da alles drauf.OK

Kannst mich aber streichen. Ich mach dann mein eigenes Board.

Wigbert

von Tskusie (Gast)


Lesenswert?

Hallo @ alle mal!

Ich wuerde mir unheimlich gern diese Ansteuerung fuer das NANYA Display 
bauen. Es waere ideal wenn es dann im Endeffekt ueber Funk ansprechbar 
waere. Kann mir da jemand bitte helfen?

1) Welches Board Layout stimmt jetzt und ist bereit zum aetzen? (EAGLE 
4.x)

2) Was benoetige ich alles fuer Bauteile? In den Beitraegen wurde die 
oefters ausgebessert...

3) Also kann man die CCFV Schaltung als Spannungsversorgung nehmen?

4)  Ist es unabhaengig welchen SRAM man nimmt? Bei dem Layout kann man 
ja nur eine beschraenkte Anzahl an SRAMs nehemen oder?

5) Brauche ich sonst noch was?

Ich bitte drum, kann mir wer bitte helfen? Oder bitte verweise auf die 
dateien oder so?

Ich danke echt im Voraus!

von Tskusie (Gast)


Lesenswert?


von Steffen H. (Gast)


Lesenswert?

Hey, genau den hab ich auch gefunden. Leider bin ich mit der 
Leiterplatte noch nicht so weit. Aber wenn der UM61256CK-20 gehen sollte 
wäre das echt prima. Habe da jetzt 10Stück rumliegen.

Gerne auch ein paar zum Abgeben!

von Tskusie (Gast)


Lesenswert?

Hätte jemand noch eine Platine mit der DIP4 Version über ?

Ich würde da noch gern 2 nehmen wenn es geht. Natürlich gegen Bezahlung.

Danke !!!

von Thomas (Gast)


Lesenswert?

Hallo,

ich hab ein kleines Problem mit dem Code, wenn ich ihn im AVR Studio 
öffne und compilieren will scheinen die Funktionen welche die Ausgabe 
auf das Display steuern zu fehlen welche laut dem aller ersten Post in 
Assembler geschrieben sind, ich konnte jedoch auch keine Datei in dem 
Archiv finden welche Assebler-Kommandos (inline-Asselbler o.ä.) enthält. 
Muss ich diese Datei extra wo runterladen? oder handelt es sich bei der 
.bin evtl. um eine Precompiled Variante?

Danke, Thomas

von Gast_ (Gast)


Lesenswert?

Es ist die lcdcon.s

von Sebastian .. (zahlenfreak)


Lesenswert?

Hast du auch die letzte offizielle Version von hier
Beitrag "Re: Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen"
genommen? Da gibts ne .aps. Wenn du die im Studio öffnest sollte es 
eigentlich funktionieren.
Die Software aus dem ersten Post ist mittlerweile veraltet und lässt 
sich nicht so schön einfach im Studio öffnen und compilieren.

Sebastian

von Thomas (Gast)


Lesenswert?

Danke, hatte wohl die falsche ZIP-Datei entpackt ;-)

von G. S. (varda)


Angehängte Dateien:

Lesenswert?

Habe das Projekt in Kicad umgesetzt.

Die Platinen sind zwischenzeitlich auch schon gekommen. Gestern gleich 
aufgebaut - Mit LCD von Pollin 480x200; geht wunderbar.

Benedikt - einfach ein tolles Projekt von Dir ! Super

von gadgaet (Gast)


Lesenswert?

Ich finde das toll, was du da ihr da auf die Beine gestellt habt 
(besonders Benedikt)!

Eine Frage: Funktioniert die Schaltung auch mit dem Display WINTEK 
WD-H3224V  von Pollin (Best. Nr. 120 506)? Das hat doch eine positive 
Kontrastspannung, wie muss ich den Teil mit dem Schaltregler abändern, 
dass es funktioniert?

von Karl (Gast)


Lesenswert?

Hallo Günter,
ich hätte Interesse an 2 Platinen.Hast du noch welche abzugeben?
Wenn ja wie kommen wir dann zusammen?

von G. S. (varda)


Lesenswert?

Hallo Karl,

schreibe mir halt eine Nachricht, dann können wir Email austauschen.

Platine kostet 10 Euro pro Stück (mein Selbstkostenpreis) + Versand

von Wigbert P. (wigbert) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi,

meine Version mit ein 12ns S-Ram.
Teilweise in SMD.
Eine Adapterplatine mit FFC-Buchse sorgt für ein ordentlichen
NANYA-Displayanschluss.

Wigbert

von G. S. (varda)


Lesenswert?

Hallo Wigbert,

schöne Platine. Wegen RAM - Habe auf meiner Platine normale RAM mit 70 
ns. Laufen auf ohne Waitstates. Sogar bis 20 MHz, wenn ich den AVR mit 
20 MHz Quarz betreibe.

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

Hallo Günter

Deine Platine muss sich aber auch nicht verstecken.

Mein Board hätte vielleicht kleiner werden können.
Wobei, in der Höhe stimmen die Befestigungslöcher mit dem Display.
Bei S-Rams kann sicher etwas Glück hilfreich sein. Meine
S-Rams sind so nun mal vorrätig.

Die Platine lief sofort, und seltsamerweise stimmte sogar der
Kontrast sofort mit meiner Widerstandsauswahl.

Wigbert

von Philipp (Gast)


Lesenswert?

Hallo,
 Ich wollte immer noch den mega162, statt dem mega8515 verwenden, da ich 
auch noch zufällig welche davon rumliegen habe (mal mit mega168 beim 
Bestellen verwechselt). Mit den zusätzlichen PWM Channels, wollte ich 
z.B. die LED Hintergrundbeleuchtung dimmen. Da ich SMDs verwende kann 
ich sie jedoch nicht einfach wechseln.
Meine Frage: Wie kommt der Wert "DDRAM 1024" zustande?
mega8515:
"To the Application software, the external 32 KB memory will appear as 
one linear 32 KB address space from 0x0260 to 0x825F. This is 
illustrated in Figure 17."
mega162:
"To the Application software, the external 32 KB memory will appear as 
one linear 32 KB address space from 0x0460 to 0x845F."

Zum Wechsel zwischen m8515/m162 hatte Benedikt geschrieben:
"Geändert werden muss dazu nur die Zeile #define DDRAM 1024.
Diese muss auf den Ende des internen und Beginn des externen RAMs also 
auf 0x500 = 1280 gesetzt werden."

Also meine zweite Platine der Schaltung (bei Bilex machen lassen) ist 
fertig aufgebaut, und ich glaube auch nicht, dass durch einen falschen 
DDRAM -Wert die Hardware kaputt geht, aber ich trau mich nicht sie 
anzuschliessen, da ich auf der ersten auch einen mega162 aufgeloetet 
hatte, der wahrscheinlich schon defekt war.
[ Habe schon so drei Dutzend mega8/48/32 "verarbeitet", doch dieser war 
mein erster kaputter, und das Smdteil wieder rauszukriegen macht die 
Platine nicht schöner.]
Ich bezweifel ja auch nicht Benedikts Angabe, der 1024er Wert 
funktioniert ja bei mir mit dem sicherheitshalber eingesetzten
mega8515 ja sehr gut - wie bei allen Anderen. DANKE für das tolle 
Projekt, doch verstehen tue ich auch den schon nicht, daher schon gar 
nicht den 1280er Wert. Kann mir da geholfen werden?? Ich programmiere ja 
nur in C, nicht Assembler, und Speicherverwaltung sollte man schon etwas 
kennen, konnte mich aber bisher davor drücken, und hatte auch nie 
Probleme bemerkt.
 Vielen Dank für eure Hilfe, tolles Forum,

  Philipp

von Joerg N. (oneill)


Lesenswert?

Hallo allerseits.
Wollte mal nachfragen, ob noch jemand eine Platine abzugeben hat?
Danke.

Gruß
Jörg

von Alexander W. (Gast)


Lesenswert?

Hallo,

ich habe den Controller nachgebaut, leider sieht man auf dem 
angeschlossen Display garnichts. (Hitachi SP14Q006-T)

Mit dem Oszi sieht man z.B. auf den SRAM-Leitungen Rechtecksignale, d.h. 
der Controller tut irgendwas. Ich erwarte eigentlich dieses Testbild, 
oder muss ich dem Display erst Daten senden?

Außerdem bin ich mit bei der Verkabelung der Anschlüsse V0 und VEE nicht 
ganz sicher. Ich habe an VEE die -21 Volt angeschlossen, V0 ist über ein 
Poti als Spannungsteiler bei -17 V.

Was muss ich mit der AC-Leitung des Controllers machen?

Gruß,
Alex

von Johannes M. (johannesm)


Lesenswert?

Im Datenblatt des SP14Q006-T habe ich eine VDD-V0 von +21V gelesen, 
allerdings ist weiter hinten eine Beispielschaltung mit einem Poti 
zwischen +5V und -22V (Mittelabgriff am V0). Hmm

AC müßte eigentlich an FLM vom Display gehen.

von Steffen H. (Gast)


Lesenswert?

Hallo

Hab da mal ne Frage:

Ist es auch möglich statt der UART-Schnittstelle eine parallele 
Schnittstelle zu integrieren?

PortB ist ja rein theoretisch noch frei. Bin in C leider nicht wirklich 
involviert. Sonst hätt ich es schon geändert.

Der Uart bremst die Anzeige meiner Meinung nach ganz schön aus. Ich 
benutze momentan die neuste Version (8-Graustufen) mit 666666Baud.

LG Steffen

von Sebastian .. (zahlenfreak)


Lesenswert?

Sollte gehen. Du müsstest halt den UART-Fifo umbaun, so dass er sich die 
Daten vom Port holt. Statt dem UART-interrupt nutzt man dann den INT0 
(wo momentan BSY drauf hängt. BSY müsste man halt auf PD0 oder PD1 
verlegen. Im Interrupt muss du dann das Daten-senden auf jeden Fall 
gesperrt sein, sonst gehen daten verloren. Auch muss dein Master dann 
unverzüglich auf BSY reagieren, eben weil sonst daten im Interrupt 
verloren gehen.

Was für eine Performance erwartest du denn? Und welche Version 
verwendest du genau? Die letzte von Benedikt? Die letzte von mir läuft 
auch mit 2MBaud. Mit 666666 Baud bist du über die UART ja schon auf 2.3 
fps beschränkt. Mit meiner letzten schafft man ca. 5fps. Wenn dir das 
nicht reicht oder das Timing für den Master zu hart ist kann ich dir 
noch ne Version mit bis zu 7fps anbieten. Das ist dann das theoretische 
Maximum der UART. Allerdings hab ich die Anpassungen hier etwas 
inkonsequent vorgenommen. Was ich brauch funktioniert, für den rest kann 
ich nicht garantieren.
Bei mir bremst mitlerweile auch der Master. 7fps schaff ich in der 
Praxis nicht. Vielleicht ginge mehr, wenn man einfach auf einen Port 
schreiben könnte, aber drauf zählen würde ich nicht, weil du dann wieder 
auf dein Display hören musst.

Sebastian

von Steffen H. (avrsteffen)


Lesenswert?

Hi Sebastian

Danke für die schnelle Antwort. Ich werd es mal versuchen, doch wie 
gesagt, meine C-Kentnisse sind sehr rarr. Hab gesehen dass der 
Grafikcontroller für die 640x480 LCD´s ja auch anfangs mit einer 
parallelen Schnittstelle versehen war.

Wenn ich nicht weiter komme meld ich mich wieder..

LG Steffen

von Steffen H. (avrsteffen)


Lesenswert?

Ach ja, ich brauch ja eigentlich auch nur den Textmodus (möglichst in 8 
Graustufen) und den Befehl 16 (Bild laden) in S/W. Vielleicht kann man 
ja die restlichen Funktionen entfernen..

Steffen

von Sebastian .. (zahlenfreak)


Lesenswert?

Der Textmodus wird aber doch nicht zu langsam sein, oder? Bei 666666Baud 
sind das immerhein 83 Displayseiten pro sekunde.
Bzw. wenn das nicht erreichbar ist dann bringt auch ein paralleles 
interface nichts, weil einfach das Verarbeiten der Daten so lange 
dauert.
Auch bei S/W-bildern kann man sich ausrechnen, dass rein von der UART 
her bei 666666Baud fast 7fps drin sein müssten. Die schafft man auch 
nicht, weil nämlich die datenverarbeitung zu langsam ist.
Zumindest bei den Bildern könnte man die Verarbeitung verbessern. Das 
sind dann aber tiefgreifendere Änderungen.
Jedenfalls wird dir das parallele Interface (wenn ich mich nicht 
verrechnet hab) nichts bringen solange du nicht teile der 
Datenverarbeitung grundlegend änderst.

Sebastian

von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

Ja, es ging mir hauptsächlich um den Grafikaufbau. Text ist kein 
Problem. Ich teste jetzt gerade mit einem Master mit 666666Baud. Das 
Resultat ist doch sehr gut. Nur mein später anvisierter Master läuft mit 
10Mhz und da ist eine max. Baudrate von 250kBaud drin. Deswegen hatte 
ich den Parallelbetrieb angepeilt.

Es soll übrigens mal ein 2-Kanal-DSO mit 2xADS831 werden. Mit dem 
AVR-eigenen ADC´s funktioniert es schon recht gut. Nur sind die nicht 
brauchbar für höhere Frequenzen.

LG Steffen

von tester (Gast)


Angehängte Dateien:

Lesenswert?

anbei,Code von Peter

von Jonas F. (wuschelkuchen)


Lesenswert?

Ich bin endlich auch einmal dazugekommen, die Schaltung nachzubauen. Ich 
verwende das Wintek-Display von Pollin (laut DB hat das eine positive 
Kontrastspannung, kann das sein?). Gibt es ein kleines Testprogramm für 
den Mega8515 (also den LCD-Controller selbst), mit dem ich die Funktion 
überprüfen kann?


grüssse
w.

von Sebastian .. (zahlenfreak)


Lesenswert?

Wegen der Kontrastspannung schau mal hier
Beitrag "Einfacher Low Cost LCD Controller für 320x240 LCD im Textmodus"
da haben einige das Wintek display verbaut. Da hat sicher auch jemand 
über die Kontrastspannung geschhrieben.

Die Firmware zeigt standartmäßig automatisch ein Startbild an. Wenn 
alles läuft sieht man also auch was, ohne dem Controller daten zu 
schicken.

Dein Fehler könnte allerdings in der Schaltung an sich liegen. Die erste 
Zipdatai die hier hochgeladen ist enthält einen Fehler im Schaltplan. 
Nimm immer die letzte von Benedikt hochgeladene Version. Das ist im 
allgemeinen die mit den wenigsten Fehlern.

Viele Grüße,
Sebastian

von Jonas F. (wuschelkuchen)


Lesenswert?

Ich habe die aktuellste Version nachgebaut, ich hoffe, da sind keine 
Fehler mehr drin. Werde nochmal meinen Aufbau überprüfen.

von Denis K. (denis_tbg)


Lesenswert?

Hallo nochmal. Ich bin nun wieder am Arbeiten an diesem Projekt... Die 
Textausgabe auf dem Display ist wirklich gut. Dennoch habe mit 3 
Terminal Programmen versucht auf dem Display die im Beispiel genannten 
"Codes" probiert, leider ohne erfolg. -Bzw. je nach Daten sende Art auch 
mit Kryptischen Zeichen. Wie sind denn die Fusebits als Hex? Einen 
MEGA8515 habe ich schon verfust...  Mit was sendet ihr die Daten auf den 
Controller? Gibt es eine Beispielschaltung, o.ä.? Mein Adapter besteht 
aus Serielle Schnittstelle -> MAX232 -> MEGA8515.
Wenn ich das Display mit Zeichen fülle, ändert sich der Hintergrund. 
Sprich viele "O" und das Display wird dunkler, viele "i" oder "l" und 
das Display wird heller. Was kann ich dagegen tun?

MfG Denis

von Sebastian .. (zahlenfreak)


Lesenswert?

Was genau funktioniert nicht? Kommt immer was falsches am Display an, 
oder nur, wenn du versuchst, die Grafik-funktionen zu nutzen?
Allgemein macht mir dein Beitrag einen sehr kaotischen eindruck. Wenn 
das Testbild angezeigt wird passen die Fuses erstmal bzw. sind zumindest 
nicht vollkommen falsch. Wenn Text so angezeigt wird, wie du ihn sendest 
funktioniert auch die UART-kommunikation, dann liegt der Fehler daran, 
dass du die Kommandos falsch eingibts.
Die Fuses sind eigentlich relativ unkritisch. Der AVR muss halt mit 
16MHz laufen. Brown out kann man anschalten, wenn mans nicht tut läuft 
der Controller aber trotzdem, muss also nicht sein. So weit ich mich 
erinner wars das auch schon. Glaube aber, hier im Thread wurde schonmal 
über die Fuses geschrieben.
Und die UART läuft halt mit 1 Startbit, 8 Datenbits, ohne Paritätsbit 
und ein oder zwei Stopbits - letzteres ist egal, da der AVR das zweite 
Stopbit einfach ignoriert. Mit den Einstellungen sollten eigenltich 
Daten am AVR ankommen. Wenn nicht schau mal in die Artikelsammlung. Da 
gibts so weit ich weiß ne Anleitung zum UART debuggen.
Ich sende meine Daten von einem zweiten AVR aus zum Display. 
Funktioniert bei mir wunderbar.

Sebastian

von Denis K. (denis_tbg)


Lesenswert?

Hallo.

Wenn ich Text eingebe, kommt der an, aber das Testbild verschwindet 
nicht. Dazu nutze ich HTERM. Ich sende die Daten in ASCII. Wie sende ich 
die befehle? Kommen irgendwelche Anführungszeichen oder Vorzeichen vor 
die Kommandos?? Gibt es für den Mega8 oder Konsorten ein kleines 
Beispielprogramm?
MfG Denis

von Sebastian .. (zahlenfreak)


Lesenswert?

Na dann funktioniert doch alles. Fuses und UART einstellungen müssen 
zumindest halbwegs passen, sonst würde der Text doch nicht ankommen. Die 
Kommandos musst du als Zahlenwerte schicken. Ich kenne HTERM nicht, aber 
da kann man sicher irgendwo einstellen, dass es Dezimal/Hex/Binärwerte 
schicken soll. Und dann gibst du halt einfach die Zahlenwerte aus der 
Dokumentation ein.
Dass der Startbilschirm nicht verschwindet ist normal. Der wird nur 
überschrieben. Wenn er komplett gelöscht werden soll musst du das über 
den passenden Befehl anweisen.

von M. W. (hobbyloet)


Lesenswert?

Hallo,

würde nicht ein ATMega1284 besser sein?

Ich Frage wegen SRAM und Speicher?

Danke im voraus für Konstruktive Antworten.

von Randy (Gast)


Lesenswert?

Der mega1284 hat auch nur 16 kByte SRAM, ein 320x200 Bild mit 2 Bit 
Farbtiefe braucht genau diese Menge. Bleibt also nichts mehr fürs 
Programm übrig.

von Bruno M. (brumay)


Angehängte Dateien:

Lesenswert?

Hallo Sebastian, ich hoffe Du schaust hier hin und wieder nochmal rein!

Nach meiner Kalenderuhr (die übrigends in der Zwischenzeit ein Gehäuse 
bekommen hat und immer noch super läuft) versuche ich dieses Projekt zu 
verstehen und nachzubauen. Allerdings wie Du ja weißt, in Assembler.

Wäre schön, wenn Du mir auch diesmal helfen könntest.

Ich habe die Schaltung wie von Benedikt vorgegeben, nachgebaut (meine 
ich jedenfalls). Statt eines 8515 habe ich allerdings einen ATMega162 
verbaut.

Um mich der Sache langsam zu nähern, habe ich Benedikts Programm 
gnadenlos zusammengestrichen und nur das unbedigt Nötige behalten. 
Geändert habe ich natürlich YMin, da der interne Speicher des 162 bis 
0x4FF geht. Angezeigt werden soll nur ein kleines Rechteck mit einem 
einzigen Farbton.

Leider zeigt das Bild aber etwas anderes als erwartet und vor allem 
läuft es durch (siehe Bild).

Hast Du dafür eine Erklärung??

von Spätkommender (Gast)


Lesenswert?

Hat noch jemand eine Platine übrig? Würde sie gern kaufen.

von Sebastian .. (zahlenfreak)


Lesenswert?

@Spätkommender: Leider nicht. Hatte nie ne geätzte

@Bruno
>Ich habe die Schaltung wie von Benedikt vorgegeben, nachgebaut

Gleich mal vorsorglich: Das im ersten Beitrag angehängte zip hat einen 
Fehler im Schaltplan. In der letzten Offiziellen Version gibts übrigens 
(neben einem korrekten Schaltplan) auch 8 Graustufen falls du das noch 
nicht gesehen hast.

Heut ists bischen spät um mir das genauer anzuschaun (morgen dann), aber 
warum nutzt du nicht das Projekt einfach wie es ist als Grafikkarte und 
steuerst die über einen weiteren AVR per UART an? Das funktioniert sehr 
gut und du brauchst an diesem Projekt nichts mehr zu ändern.
Alternativ wäre es doch eine gute Gelegenheit endlich mal C zu lernen. 
Früher oder später brauchst du es sowieso.

Viele Grüße,
Sebastian

von Bruno M. (brumay)


Lesenswert?

Hallo Sebastian,

super, daß du dich so schnell gemeldet hast!!

Das mit dem Fehler im ersten Schaltplan hatte ich schon registriert.

Da es mir in erster Linie darum geht, die Schaltung und das Programm 
richtig zu verstehen, hilft mir die Übernahme des kompletten Projektes 
wenig.
Auch deine Version mit den 8 Graustufen habe ich gesehen, aber das wäre 
dann der nächste Schritt.

Dein Hinweis auf C ist natürlich völlig richtig und mir wird 
wahrscheinlich gar nichts anderes übrig bleiben, wenn ich das gesamte 
Projekt verstehen will. Im Moment bin ich aber noch bei der LCD Routine 
(die ja sowieso in ASM geschrieben ist) und der trickreichen Ankopplung 
des externen RAM.

Zu meinem Problem selbst noch der Hinweis, daß ich in der Zwischenzeit 
noch weitere XL und XH Werte getestet habe. Dabei sieht es so aus, als 
würde XL von der rechten Seite gezählt und nicht von der linken??? Wenn 
die Höhe des Rechtecks unter 10 Pixel liegt, dann sieht man einzelne 
Balken.

Ich hoffe du kannst daraus irgendwelche Schlüsse ziehen.

Schon im Voraus herzlichen Dank für die Mühe!

Gruß
Bruno

von Bruno M. (brumay)


Lesenswert?

Hallo Sebastian,

ich meine ich kann dir die Fehlersuche im Code ersparen. Ich habe jetzt 
meinen gesamten Programmteil weggelassen und nur aus der Routine von 
Benedikt heraus ein Pixel unmittelbar vor der Ausgabe auf 1 gesetzt. Da 
auch dann das Bild durchläuft, kann es meiner Meinung nach nur noch an 
der Hardware liegen. Ich werde jetzt mal alle ICs tauschen.

Gruß
Bruno

von Sebastian .. (zahlenfreak)


Lesenswert?

Ich glaube nicht, dass das ICs tauschen was hilft. Wenn du einen 
Hardware-fehler hast, dann wahrscheinlich in der Verdrahtung.
Um das zu prüfen wird es aber geschickter sein, die Sourcen von Benedikt 
nur auf den anderen Controller anzupassen. Dann hat man eine ganze Menge 
mögliche Fehlerquellen weniger.

Zu deinem Vorhaben den Code zu verstehen: Das aufregende ist sowieso 
alles in Assembler geschrieben. Die Ausgaberoutine hast du ja schon 
gesehen. Dann gibts noch ein paar Routinen um Daten in den RAM zu 
schreiben, die auch quasi alle in Assembler geschrieben sind.
Was dann in C passiert sind höhere Aufgaben, wie z.B. der 
Bresenham-Algorithmus um linien zu zeichnen. Oder die 
UART-kommunikation. Aber das ist eigentlich alles nicht mehr so 
aufregend.

=> Lass die sourcen wie sie sind (abgesehen von der Anpassung auf den 
anderen Controller), versuch den ASM-teil zu verstehen, schau dir an was 
im C-Teil gemacht wird und überleg dann, welche Anpassungen du machen 
musst.

Gruß, Sebastian

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

@Spätkommender

Schick mir mal eine Mail

Wigbert

von Bruno M. (brumay)


Lesenswert?

Hallo Sebastian,

wie du schon angekündigt hast, hat das tauschen der LCs nichts gebracht. 
Auch die Verdrahtung habe ich gründlich geprüft und nichts feststellen 
können.
Auch in meinem ASM Code konnte ich bis jetzt keinen Fehler entdecken.

So versuche ich deiner Empfehlung zu folgen, das Original C-Programm zum 
Laufen zu bringen. Für einen C Anfänger ist dieses komplexe Programm 
natürlich eine gewaltige Herausforderung. Da werde ich sicherlich 
kleiner anfangen müssen.

Es ging schon damit los, daß ich die main.elf Datei zwar öffnen konnte, 
aber nicht bearbeiten (alle Dateien wurden als "read only" angezeigt). 
Das konnte ich durch Anlegen eines neuen Projektes und Einbinden der 
Orginaldateien lösen. Auch das Anpassen des Speichers durch eine 
Änderung des Parameters DDRAM bekam ich noch hin. (Wenn ich es richtig 
interpretiere hätte ich wahrscheinlich auch mit dem Ursprungswert leben 
können!).

Beim Build and Run meckert er aber nun, daß RXCIE und RXEN nicht 
definiert sind. Wahrscheinlich hängt es damit zusammen, daß der AT162 
zwei USARTs hat und der AT8515 nur einen.

Wie und wo ich aber das ändern kann, habe ich wirklich keine Ahnung.

Ich hoffe du kannst mir mit einem einfachen Hinweis weiterhelfen. Ich 
weiß natürlich auch nicht, ob der Debugger im weiteren Verlauf nicht 
noch neue Probleme findet.
Schon mal herzlichen Dank für deine Hilfe!
Gruß
Bruno

von Sebastian .. (zahlenfreak)


Lesenswert?

Das includefile (m8515def.inc) hast du durch das für deinen Controller 
getauscht?

Wenn 162er wirklich 2 uarts hat haben die UART-bits jeweiles noch ein 
0bzw. 1 im namen. Aber eigentlich sollte die UART-lib das schon selbst 
abhandeln, wenn du das includefile getauscht hast. Wenn nicht (benedikt 
hat recht viel an der lib rumgebastelt), dann musst du halt die Bitnamen 
ändern. Der Compiler sagt dir ja eigentlich, wo es hakt.

von Bruno M. (brumay)


Angehängte Dateien:

Lesenswert?

Hallo Sebastian,

mit jeweils einer 0 dahinter und einigen anderen Anpassungen habe ich 
tatsächlich eine hex Datei bekommen.
So weit so gut. Jetzt weiß ich zumindest, daß es offensichtlich an der 
Hardware liegt. Nur leider finde ich nichts. Kann es daran liegen, daß 
ich als FlipFlop keinen HC Typ habe, sondern einen F?
Oder kannst du aus dem Bild etwas anderes ableiten?

Gruß Bruno

von Helfender (Gast)


Lesenswert?

@Bruno

>> Geändert werden muss dazu nur die Zeile #define DDRAM 1024.
>> Diese muss auf den Ende des internen und Beginn des externen RAMs also
>> auf 0x500 = 1280 gesetzt werden.

Hast du das berücksichtigt ?
Ich benutze auch einen M162 und es funktioniert mit Benedikt's code 
einwandfrei.

von Bruno M. (brumay)


Lesenswert?

Hallo Helfender,

herzlichen Dank für den Tip, aber das habe ich schon berücksichtigt. Ich 
habe sogar 0x600 genommen, da Benedikt auch etwas Luft gelassen hat. Der 
8515 Speicher geht ja nur bis 0x260.
Gut zu wissen ist aber, daß der 162 sonst keiner weiteren Einstellungen 
bedarf.

von Helfender (Gast)


Lesenswert?

Sorry, ich habe mir nicht den ganzen Thread durchgelesen.

Das FF als "F" kann laut Datenblatt 90MHz, dürfte also auf jeden Fall 
schnell genug sein.
Aber irgendwie sieht es aus als ob dein Takt nicht stimmt.

>> Pin1 vom HC157 an Pin9 des HC74
>> am hc74 pin8 und pin12 verbinden

Diese Änderung hast du auch berücksichtigt ?

von kay (Gast)


Lesenswert?

wie muss man das rechnen um auf diesen wert von 1280 zu kommen
>> auf 0x500 = 1280 gesetzt werden.


für eine antwort wäre ich dankbar

mfg

von Bruno M. (brumay)


Lesenswert?

@ Helfender

Ja, die Änderung habe ich berücksichtigt. Allerdings brauche ich keinen 
AC Anschluß und daher habe ich das erste FF mit entsprechend geänderten 
PinNr. benutzt. Pin5 (FF) an Pin1 (HC157) und Pin2 (FF) an Pin6 (FF).

@ kay

Die 0x500 ergeben sich aus dem Datenblatt des AT162. Der interne 
Speicher bei normaler Konfiguration (d.h. nicht im AT161er Modus) geht 
bis 0x4FF. Der externe Speicher kann also erst bei 0x500 beginnen.

von kay (Gast)


Lesenswert?

hallo Bruno,

Der externe Speicher kann also erst bei 0x500 beginnen. ja das ist mir 
klar ,nur ich meinte wie kommt ihr auf 1280 sind ja 0x500 bloss wie 
kommt mann auf die 1280 das ist mir nicht ganz klar

mfg

von Bruno M. (brumay)


Lesenswert?

Hallo kay,

>> wie kommt ihr auf 1280 sind ja 0x500

das 0x vor 500 sagt, daß es sich um einen hexadezimalen Wert handelt. Du 
nimmst dir also einen Rechner, der hexadezimal rechnen kann, gibst 500 
ein und wandelst es in dezimal um, dann bekommst du 1280.

von Helfender (Gast)


Angehängte Dateien:

Lesenswert?

@Bruno

Ich hänge dir mal mein hex File für den M162 ran.
Da sind keine Änderungen von mir drin, nur die Anpassung auf den M162.

von Bruno M. (brumay)


Lesenswert?

Hallo Helfender,

da ich im Moment unterwegs bin, kann ich erst zum Ende der Woche testen.
Bis dahin schon mal herzlichen Dank.

von Bruno M. (brumay)


Angehängte Dateien:

Lesenswert?

Hallo Helfender,

leider hat auch deine Datei keine Änderung gebracht. Es liegt also 
eindeutig an der Hardware. Ich weiß nur nicht, wo ich noch suchen 
könnte. Die Verdrahtung habe ich schon mindestens 5 mal geprüft. Auch 
die Signale habe ich schon mit dem Oszi getestet. FRM, LP und CLK zeigen 
den erwarteten Verlauf.
Eigentlich müßte ja das Bild eindeutige Hinweise liefern, aber ich kann 
es leider nicht deuten.
Fällt dir noch was ein?

von Sebastian .. (zahlenfreak)


Lesenswert?

Ist das Bild statisch, oder läuft das durch?
Und welches LCD verwendest du? Datenblatt? Wie hast du es angeschlossen? 
Wenn deine Schaltung nach Plan stimmt kann es eigentlich nur am 
Anschluss des LCD liegen (oder eben doch an der Software, aber ich denke 
mal, dass das hexfile von Helfender passen sollte).

Wie schnell taktet dein AVR eigentlich?

Sebastian

von Helfender (Gast)


Angehängte Dateien:

Lesenswert?

@Bruno

ich habe bei mir mal zum Test einen MC74F74 eingesetzt und der 
funktioniert ebenfalls tadellos. Kannst du also 100% ausschliessen.
Danach habe ich mal meinen LA an CP,LOAD,FRAME und eine Datenleitung 
geklemmt. Ablauf siehe Screenshoot.
Load kommt ca. alle 41µs. Frame ist ca.26µs lang. In welchem Abstand 
kann ich nicht sagen, dafür ist der Samplespeicher zu begrenzt.

von Wigbert P. (wigbert) Benutzerseite



Lesenswert?

Hallo,

ich hab vor, nochmals ein paar Platinen anfertigen zu lassen und
in einen Shop zu hinterlegen.

Neu ist der V-Regler und die Bereitschaftsanzeige. Die Platine
hat in Betrieb ca 85mA so das der V-Regler weitere Platinen
versorgen kann. 5V kann an 3 Stellen abgenommen werden.

Preisvostellungen:

GLCD_32K Platine: 10 Euro.
S-Ram + sämtliche SMD-Bauteile + Speicherspule: 1,50 Euro
NANYA-Adapterplatine: 0,5 Euro
FFC Buchse: 1,80 Euro

Für eine Erstbestellung hätte ich gerne den Bedarf gewusst.
Wer interesse hat, bitte eine Mail schicken.

Wigbert

von Wigbert P. (wigbert) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi,

anbei mal die Platinen.
Es wird sicher jeder verstehen, das ich die Position S-Ram+ SMD + Spule 
nur im Zusammenhang mit der GLCD Platine abgeben kann.

Bestücken:
Als erstes den S-Ram, dann die SMD-Bauteile, dann den Rest.
Sämtliche ICs sind in der gleichen Richtung ausgerichtet.
Wird der V-Regler nicht verwendet, die Anschlussbuchse rechts
neben den V-Reg. Platz einlöten.
Man kommt mit 8mm Abstandshülsen zw. dem NANYA-Adapter aus, wenn
man Buchsenleiste +Stiftleiste (2,54mm) verwendet.
Sinn des Adapters ist die Benutzung anderer controllerlosen GLCD's.

Die Platine ist grosszügig aufgebaut, wobei die senkrechten
Befestigungslöcher an das NANYA-Display angeglichen sind.

Eine Rechnung mit ausgewiesener MwSt gibts dazu.

Wigbert

von Bruno M. (brumay)


Lesenswert?

Hallo Sebastian, hallo Helfender,

Nach längerer Pause bin ich wieder dran.

Vorab herzlichen Dank für eure Kommentare.

@ Sebastian
>>Ist das Bild statisch, oder läuft das durch?

das Bild sieht zuerst statisch aus, wird dann aber auf der gesamten 
Fläche sehr unruhig und läuft -so weit ich es erkennen kann- durch.

>>Und welches LCD verwendest du? Datenblatt?

das übliche NANJA s/w Display.

>>Wie hast du es angeschlossen?

das Flachbandkabel am Ende aufgedröselt und in eine Steckerleiste 
gelötet.

In der Zwischenzeit habe ich das LCD in einer anderen Schaltung getestet 
und es funktioniert einwandfrei.

>>Wie schnell taktet dein AVR eigentlich?

16MHz

@ Helfender
LA besitze ich nicht, daher kein direkter Vergleich möglich.
LP Frequenz ca. 24,4 kHz, das sind genau deine 41µs.
FRAME Frequenz ca 100 Hz.
PCLK zeigt Blocks von ca. 80 Takten und danach eine Pause. Die Takte 
haben allerdings nach oben und unten ziemliche Spitzen.
Aus den Datensignalen kann ich nichts Eindeutiges ableiten.

Gruß
Bruno

von Helfender (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Bruno,

ich habe mal kurz dein asm Programm geflasht.
Der Frameimpuls kommt wahrscheinlich exakt am LCD an, da keine Bauteile 
dazwischen sind. Also vermute ich, dass es an der Datenausgabe liegt.
So wie es aussieht, kommen deine Daten zu spät. Aber gemessen am 
Frameimpuls immer an der gleichen Stelle.

Wird dir nicht viel helfen, aber ich habe auch keine Idee mehr.

von Sebastian .. (zahlenfreak)


Lesenswert?

Hast du vielleicht irgendwo nen Kurzschluss in deinen Adressleitungen 
zum RAM? Mir kommt das komisch vor, dass auf dem ganzen LCD immer die 
gleichen 12 (oder so) zeilen angezeigt werden. Und das einzige was mir 
dazu einfällt ist, dass irgendwas an deinen Adressleitungen nicht passt.

von Bruno M. (brumay)


Lesenswert?

Hallo Helfender, hallo Sebastian

daß bei mir der senkrechte Balken rechts und das Rechteck bei dir links 
ist, hat nichts zu sagen. Ich hatte das LCD anfangs nur verkehrt rum 
aufgestellt.
Eine letzte Frage an Helfender zur Vollständigkeit:
Wie hast du die Fuses gesetzt?

Ansonsten nochmals herzlichen Dank an euch beide für die Geduld. Sollte 
ich den Fehler noch finden, lasse ich es euch wissen.

von Helfender (Gast)


Lesenswert?

Hallo Bruno,

Fuses für ATMega162 im AVRStudio:
EXTENDED 0xFF
HIGH 0xD9
LOW 0xFF

von Bruno M. (brumay)


Lesenswert?

Hallo Sebastian, hallo Helfender,

ich hab's geschafft!!!

Die Lösung war natürlich ganz simpel. Ich habe versuchsweise einmal das 
WAITSTATE Bit gesetzt, obwohl ich eigentlich schnelle RAMs habe(15ns 
bzw. 25ns). Das Problem ist wahrscheinlich mein großzügiger 
Schaltungsaufbau auf einer Lochrasterplatine.

Gruß
Bruno

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.