Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen

#851423
Lesenswert?

Da ich immer wieder auf einen grafikfähigen LCD Controller für 
controllerlose 320x240 Displays angesprochen werde, habe ich meinen 
alten auf der 640x480 Version 
(Beitrag "LCD Controller für 640x480 LCD mit mega8515") basierten Controller 
etwas aufgepeppt und mit neuen Features versehen:

- Einfache Schaltung aus nur wenigen Standardbauteilen
- Grafikmodus mit 4 Graustufen
- Textmodus mit 8x12 Zeichensatz, der Text in Grafik umwandelt
- Funktionen für Pixel, Linien, Rechtecke, Bilder usw
- Ansteuerung über UART (Standard: 19200 Baud), daher ideal als Display 
in einer µC Schaltung verwendbar. Die Grafikfunktionen entlasten dabei 
den anderen µC.
- Die LCD Routinen sind in Assembler geschrieben (für beste Ausnutzung 
der Rechenleistung), Ansteuerung und Kommunikation dagegen in C, daher 
leicht ist das ganze leicht erweiterbar.
Angehängte Dateien:
#851935
Lesenswert?

Dennis S. wrote:
> ich konnte in deiner Schnittstellenbeschreibung die Schnittstelle zum
> Kreise zeichnen nicht finden.

Gibt es auch nicht. Ich hatte zwar erst dran gedacht, aber dann doch 
sein lassen, da Kreis im Vergleich zu Rechtecken doch eher selten 
vorkommen. Bei der nächsten Version ist das aber drin.

Wo wir schon dabei sind: Kennt jemand eine Füllfunktion die auch auf dem 
AVR einigermaßen schnell läuft ? Floodfill scheitert schon alleine am 
Stack.
Persönliche Seite #852034
Lesenswert?

Oder du machst es so: vom mittelpunkt ausgehen gehst du in y richtung 
nach oben bis du auf ein gleichfarbiges Pixel (rand) triffst, das gleich 
einmal nach unten.
Dann erhöhsat du x um eine und wiederholst das solange bis du in x 
richtung auf ein gleichfarbiges pixel triffst.
dann nochmal vom mittelpunkt aus nach links und fertig
Problem ist nru wenn andere objekte "im Weg" sind wird nicht der ganze 
kreis gefüllt. Man könnte natürlich auch einfach die koordinaten des 
Kreisrandes speichern oder das beim zeichnen miterledigen volgendermaßen 
vieleicht:
Ich geh jezt mal davon aus das du immer Viertelkreise zeichnest.
1
mx = mittelpunkt X
2
my = mittelpunkt Y
3

4
x=mx
5
oldx = x-1
6
y=my+radius
7
while(x < mx+radius) {
8
 
9
 drawPixel(x,y) //rand zeichnen
10
 if (x != oldx) { //x != alter postion, sonst haben wir schon gemalt!
11
  oldy = y //y sichern
12
  while( y > my ) { //sind wir schon am mittelpunkt?
13
     y--; //nach unten gehen
14
     drawPixel(x,y) //pixel zeichnen
15
  }
16
  y=oldy //y wieder herstellen
17
 }
18
 oldx = x //altes x speichern um "doppelmalen" zu verhindern falls
19
          //sich x in dieser iteration nicht ändert
20
 x = newXKoord(x) //neue X berechnen
21
 y = newYKoord(y) //neue Y berechnen
22
}
Jezt natürlich ungetestet aber das könnte so gehen, es werden halt immer 
streifen vom Rand runter bis zum mittelpunkt gezeichnet.
Muß man jezt halt nocheinmal spiegeln für die 4 Quadranten.
#852781
Lesenswert?

Sven wrote:
> Ok, danke. Dann würde dieser hier passen :

Ja, der sollte funktionieren.

Stefan Ernst wrote:
> Ich hätte da mal eine Frage aus reinem Interesse:
> Warum die etwas unorthodoxe Einblendung des externen Speichers in den
> Adressraum des AVR (A0 vom externen Interface wird nicht verwendet)?
> Hat das Vorteile beim Auslesen des RAM für den LCD-Datenstrom?

Ja. Damit das ganze schneller geht, teile ich den 16bit Adresspointer in 
256 Zeilen und 256 Spalten auf, genau passend für das LCD.
Ich lese für das LCD 80 Bytes aus. Da das LCD nur 4bit hat, reicht ein 
Speicherbyte für 2 Datenpakete zum LCD, daher der Multiplexer und daher 
ist A0 nicht beschaltet.
#852811
Lesenswert?

Benedikt K. wrote:

> Ich lese für das LCD 80 Bytes aus. Da das LCD nur 4bit hat, reicht ein
> Speicherbyte für 2 Datenpakete zum LCD, daher der Multiplexer und daher
> ist A0 nicht beschaltet.

Ah, ich hatte übersehen, dass der Multiplexer am Ausgang durch das 
RD-Signal getoggelt wird. ;-)
Danke!
Persönliche Seite #903918
Lesenswert?

Hi Benedikt,

hab ein kleines Ausgabeproblem.

Anbei mal Dein "Titelbild"
Sieht so aus , als wenn der Text nicht aus der richtigen "Ablage"
"gemalt" wird.
Hab die Verdrahtung noch mal geprüft, laut DBL soll der mega 8515 nur
12 bis 22pF am Quarz haben, hab ich 15 statt deiner 27 drin.
Reset hat noch 10K an 5V+

Auf Befehle über RXD gehorcht die Schaltung Bedingungslos bei
19K2 .
als Speicher hab ich ein W24M257AK-15 ( hab ein paar ausprobiert) drin.

Fusebits des mega8515: CKOPT programmed(>8Mhz) rest unprogrammed.

habe beide Code (mit und ohne Kreis) ausprobiert.

Dank Dir mal schon.

Wigbert
Angehängte Dateien:
Gast #917589
Lesenswert?

Hi

Die Schaltung im Beitrag bezieht sich ja auf die Displays von Pollin.
Best.-Nr.: 120 460 und 120 471
Ich habe das von Sharp (120 318). Kann ich das auch verwenden? Nur die 
Spannungen für das Display müsste ich da selbst erzeugen. Liege ich da 
richtig? Und müsste ich da im Programm etwas verändern?

Ich häng das Datenblatt gleich mit an!
Angehängte Dateien:
#917619
Lesenswert?

Jens wrote:
> Ich habe das von Sharp (120 318). Kann ich das auch verwenden?

Ja.

> Nur die
> Spannungen für das Display müsste ich da selbst erzeugen. Liege ich da
> richtig?

Ja, ich mache das so wie bei dem Link den Andreas gepostet hat.

Und müsste ich da im Programm etwas verändern?

Nein.
Nur aufpassen, dass da das Display mit 3,3V läuft. Also den Pegelwandler 
nicht vergessen.

> Ich häng das Datenblatt gleich mit an!

Datenblatt würde ich das nicht nennen. Irgendwo hier im Forum fliegt 
auch das richtige Datenblatt von Sharp rum, ich habs jetzt gerade nicht 
gefunden. Aber da es ein Standard 320x240 TFT ist, ist das Datenblatt 
sowiso eher uninteressant (abgesehen von der Pinbelegung).
#917809
Lesenswert?

Wenn's geht - ok. Im Datasheet von dem Teil steht halt 3.0-3,6V drin. 
Allerdings mit einem absoluten Maximum von immerhin doch 6V, also wohl 
nicht im Sinne des Erfinders, aber vielleicht machbar.

Aber: Bloss weil Pollin das reinschreibt, wird da kein Naturgesetz 
draus.
#917814
Lesenswert?

Jens wrote:
> Warum 3,3V für das Display?

Wie Andreas schrieb: Sharp garantiert nur 3,3V. Es mag bei 5V gehen, ist 
aber außerhalb der Specs.

> Laut Schaltplan von Pollin betreiben die das LCD mit 5V und nur das FPGA mit 
3,3V.

Wichtigste Merkregel bei Pollin: Nie deren Angaben vertrauen, da ist 
einiges falsch. Immer das orginal Datenblatt verwenden.
#917823
Lesenswert?

Hab das zweite noch nicht ausprobiert, aber von der Bezeichnung her 
(NANYA hat da ein System drinne) ist das erste hell auf dunklem 
Hintergrund, das zweite andersrum. Und das erste geht garnicht ohne 
Hintergrundbeleuchtung (transmissive), das zweite kann sowohl mit wie 
ohne (transflexive).
#917831
Lesenswert?

ChrisLiebig wrote:
> Wo liegt eigentlich der Unterschied zwischen den Displays von Pollin mit
> den Nummern 120 460 und 120 471??? Hat nur der Rahmen ne andere Farbe
> oder wie?

120 460 ist das hier:
http://www.mikrocontroller.net/attachment/34396/320240_lcd_4bpp_sch.jpg

und 120 470 ist das:
http://www.mikrocontroller.net/attachment/36571/GLCD.JPG


Das erste hat meiner Meinung nach einen leicht besseren Kontrast, dafür 
sieht man (wie Andreas schon wieder vor mir schrieb) garnichts ohne 
Backlight. Das  zweite ist dagegen auch ohne Backlight bei ausreichend 
vorhandenem Licht ablesbar.
Gast #917838
Lesenswert?

Wie kann ich die 23V für die Hintergrundbeleuchtung erzeugen? Bin grade 
auf der Suche nach der IC-Lösung möglichst ohne viel äußere Beschaltung. 
Wieviel Strom benötigt denn das Backlight?
#917849
Lesenswert?

Und wenn du nicht nur 5V, sondern auch irgendwas ab 6-7V zur Verfügung 
hast, darf ungeregelt sein, dann wird es etwas einfacher: 
Beitrag "Re: Grafik-LCD Controller mit AVR und VRAM". Die Drossel darin 
gibt's übrigens netterweise auch bei Pollin.

Ob der Optokoppler zur Schaltung der Spannung wirklich nötig ist weiss 
ich nicht. Laut Datasheet soll die Spannung erst später eingeschaltet 
werden, zusammen mit DISP_OFF, also ist es sicherer so. Aber wenn 
DISP_OFF die Spannung im LCD sowieso schaltet, wär's ja egal.

In Beitrag "Re: Grafik-LCD Controller mit AVR und VRAM" habe ich den 
Wandler mal auf 10mA minimiert und das Kontrastpoti aus dem Wandler 
ausgelagert, ist aber so noch nicht getestet. Auch hier gibt's die Spule 
bei Pollin.

Strom für Vee ist laut Datasheet von dem Typ mit dunklem Hintergrund 
übrigens 3,4mA.
Gast #917857
Lesenswert?

Danke für eure schnellen Antworten.

Leider habe ich nur die 5V zur Verfügung. Ich blicke in dem ganzen 
riesen Topic nicht mehr so recht durch, kann mir einer mal die richtige 
Schaltung zeigen, wie ich aus den 5V die -22V rauskriege?

Achso nochwas, was fürn SRAM kann ich da nehmen, ich brauche ja was mit 
ca. 20ns Zugriffszeit. Hat da jemand nen Beispiel für nen 5V Typ?
#917859
Lesenswert?

ChrisLiebig wrote:

> Leider habe ich nur die 5V zur Verfügung.

Du solltest den CCFL Inverter für die Hintergrundbeleuchtung nicht 
ausser Acht lassen. Es sei denn du willst die transflexive Version und 
nur bei genug Fremdbeleuchtung verwenden.

Der Inverter von Pollin ist nämlich ein 12V Typ, zu finden als 
Kaltlichtkathode für's PC Modding. Daher lag diese Variante der 
Spannungserzeugung nahe. Benedikt musste etwas mehr Aufwand treiben, da 
man mit dem MC34063A ohne Hilfstransistor aus 5V keine 23V zaubern kann.

> riesen Topic nicht mehr so recht durch, kann mir einer mal die richtige
> Schaltung zeigen, wie ich aus den 5V die -22V rauskriege?

Siehe Links oben, such in den Schaltbildern nach dem MC34063A.

> Achso nochwas, was fürn SRAM kann ich da nehmen, ich brauche ja was mit
> ca. 20ns Zugriffszeit. Hat da jemand nen Beispiel für nen 5V Typ?

Beispielsweise gesockelte Cache-RAMs aus alten PCs der 486- und der 
ersten Pentium-Generation. Gibt's wohl auch bei Segor. Sind aber 
ziemliche Schluckspechte, was zu heftigen Transienten auf der 
Stromversorgung führen kann. Kondensator nicht vergessen, und kurze 
saubere VCC/GND-Führung.
Gast #917872
Lesenswert?

Ok, die Schaltung ist also nur für die Display-Spannung, oder? Ich werde 
die jetzt so erzeugen wie in Benedikts Schaltung ganz oben. Und wie wir 
die Spannung für die Hintergrungbeleuchtung erzeugt? Verstehe ich das 
jetzt richtig, dass der Schaltregler in Benedikts Schaltung nur für die 
Displayspannung ist?
#917876
Lesenswert?

ChrisLiebig wrote:
> Wie kann ich die 23V für die Hintergrundbeleuchtung erzeugen?

Die +23V von Pollin sind erstens keine +23V, sondern eher -18V (typisch 
Pollin halt: Schnell was zusammengegoogelt, nichts verstanden und falsch 
in die Beschreibung gepackt. Das ist genau das was ich hier geschrieben 
habe: Beitrag "Re: Grafikfähiger LCD Controller für 320x240 LCD mit 4 Graustufen"), und die sind 
nicht für die Beleuchtung sondern für das Display selbst.

> Und wie wir
> die Spannung für die Hintergrungbeleuchtung erzeugt? Verstehe ich das
> jetzt richtig, dass der Schaltregler in Benedikts Schaltung nur für die
> Displayspannung ist?

Ja. Die Hintergrundbeleuchtung benötigt einen CCFL Inverter.
#917882
Lesenswert?

Benedikt K. wrote:

> Die +23V von Pollin sind erstens keine +23V, sondern eher -18V

Aber arg temperaturabhängig. Bei -20°C sind es laut Datasheet -20V, bei 
+50°C -16,5V. Weshalb die Spannungseinstellung im produktiven Einsatz 
dem Anwender zugänglich sein sollte. Ein Poti direkt im Wandler ist 
dafür u.U. ungeeignet, weil man das da nicht rausoperieren darf. Geht 
also wie im Datasheet und meiner 10mA-Version gezeigt beispielsweise mit 
separatem Poti+Transistor, oder wie bei dir per PWM (bloss: wie stellt 
das dann der Anwender ein, wenn er doch nix sieht?).
#917889
Lesenswert?

Benedikt K. wrote:

> Die +23V von Pollin sind erstens keine +23V,

Wenn man das vom Hersteller vorgesehene Kontrastpoti mit dem Transistor 
einrechnet, sind 0,6V weg, und nochmal ~1V wenn man den Kram per 
Darlington-Optokoppler schaltet (nicht jeder hat sich rechtzeitig mit 
Photo-MOS-Relais eingedeckt ;-). Sind zwar immer noch keine -23V, aber 
ganz so dämlich ist der Wert dann auch wieder nicht. Im Datasheet vom 
'159 Display sind es übrigens -22V.
Gast #920677
Lesenswert?

@Benedikt

Nochmal zu dem Sharp-LCD (obwohl ich weiß, das das nicht hier her 
gehört)
In dem Beitrag sind folgende Signale auf den Stecker geführt:
LP, D0-D3, XCK, M, Yd, DISP, +Versorgung(das ist klar)

Was gehört denn da zusammen, wenn ich diese Schaltung hier verwenden 
will. Die Signale sind hier anders benannt und das bringt mich etwas 
durcheinander.

Danke für die Hilfe!
Gast #1001007
Lesenswert?

hallo,
habe mir den Grafik-controller nachgebaut, allerdings sind solche lücken
wie bei Wigbert zusehen
Pin1 vom HC157 an Pin9 des HC74
als sram habe ich den von reichelt 62256-80
vielleicht könnte mir jemand einen tipp geben

mfg
#1003491
Lesenswert?

kay wrote:

> nur der uart macht noch einpaar sorgenm der mc restet sich ab und zu und
> die cts led blinkt manchmal auf

Du sendest vermutlich zu schnell die Daten. Sobald der Empfangspuffer 
überläuft kommt einiges durcheinander. Eigentlich sollten zwar die 
meisten Fehler abgefangen werden, aber es kann dennoch sein, dass 
irgendwo was durchkommt und dann Mist macht.
Gast #1004327
Lesenswert?

hallo,
wenn ich ein rechteck zeichnen will
dann bekomme ich nur wirre zeuchen angezeigt baudrate ist 19200

zb.
29;für rechteck
50;x1
50;y1
139;x2
139;y2
0; füllfarbe
255; rahmenfarbe
ist das denn so richtig

mfg
kay
#1005619
Lesenswert?

Ich hab die Schaltung von  Benedikt K. noch nicht nachgebaut, hätte aber 
jetzt schon eine Frage:

Wieso gibt es zwei unterschiedliche Schaltplanvarianten (1mal nach 
Benedikt und 1 mal nach  Wigbert ). Damit meine ich die Pins 9 Q und 8/Q 
des Flipflops die auf zwei Arten an den Multiplexer angeschlossen 
werden. Hängt doch sicherlich vom verwendeten Display ab, stimmts?
Eventuell kann man das kurz und knapp erklären und in die .ZIP Datei 
aufnehmen?


Gruß Alex
Gast #1005637
Lesenswert?

hallo,
>Ich hab die Schaltung von  Benedikt K. noch nicht nachgebaut, hätte aber
>jetzt schon eine Frage:
>
>Wieso gibt es zwei unterschiedliche Schaltplanvarianten (1mal nach
>Benedikt und 1 mal nach  Wigbert ). Damit meine ich die Pins 9 Q und 8/Q
>des Flipflops die auf zwei Arten an den Multiplexer angeschlossen
>werden.

Pin1 vom HC157 an Pin9 des HC74
am hc74 pin8 und pin12 verbinden
so funktionierts
hatte Wigbert ja auch so geschrieben da sonst pixelfehler auftreten

>Hängt doch sicherlich vom verwendeten Display ab, stimmts?
>Eventuell kann man das kurz und knapp erklären und in die .ZIP Datei
>aufnehmen?

NEIN

ich habs mir auch mehrfach nachgebaut und funktioniert

mfg
kay
Gast #1006575
Lesenswert?

hallo,
um ein bild zuladen gibs ja den befehl 16
aber wie wird das korrekt eingegeben

16
0xAA
X=10
Y=50
XS
YS
255

mein bild liegt in einer tabelle,

für eine kurze erläuterung wäre ich sehr dankbar
mfg
kay
#1006661
Lesenswert?

16
0xAA
0
0
7
10
0
Bilddaten (70 Bytes)

Damit wird ein 56x10 Pixel großes Bild mit 1bpp an Position 0,0 geladen

16
0xAA
0
0
13
10
1
Bilddaten (130 Bytes)

Damit wird ein 52x10 Pixel großes Bild mit 2bpp an Position 0,0 geladen

Je nachdem in welchem Modus man die Bilder läd, müssen die X Werte 
entweder durch 8 oder durch 4 geteilt angegeben werden.
Gast #1006927
Lesenswert?

hallo,
so habs mal probiert aber das display wird nur mit wirren zeichen 
gefüllt,
die bilddaten habe ich mal im anhang,auch das tool womit ich die 
bilddaten umwandle,
das bild hat 60x60

16
0xaa
0
0
60
60
1

bild:


vielleicht hat ja einer von euch mal ein beispiel
Angehängte Dateien:
#1007064
Lesenswert?

Benedikt K. wrote:
> Du lädst da doch nicht etwa eine gif Datei ins Display?

nein

das .gif bild wandle ich um mit diesem tool,das ergibt den
zb, diese tabelle wo das bild drin ist,
bild:
.db0x47,0x49,0x46,0x38,0x39,0x61,0xF0,0x00;
.db0x40,0x01,0x80,0x00,0x00,0xFF,0xFF,0xFF;
.db0x00...................
das lade ich in den controller der das dann ans display schickt

oder habe ich das ganze verkehrt verstanden

mfg
kay
#1007279
Lesenswert?

hallo,
habe das gif bild mit paint gespeichert und zwar monochrom ,auflösung 
60x60pixel,542Bytes,dann das gif bild umgewandelt mit winbin (hat 
jetzt3.04Kb)damit ichs im avr(mega128) speichern kann der es dann zum 
lcd überträgt.
hab die beiden bild daten im anhang.
wenn ichs zum lcd schicke dann entsehen nur wahllose pixel.
vielleicht könnte mir einer von euch ein wenig weiterhelfen,
oder ein beispiel zum testen.

mfg
kay
Angehängte Dateien:
Gast #1044255
Lesenswert?

hallo,
guten nabend
die funktion ein bmp anzuzeigen funktioniert nicht,zumindest bei mir 
nicht,es werden immer nur wirre zeichen dargestellt vielleicht wäre es 
möglich mir ein kleines stück weiter zuhelfen

mfg kay
#1046448
Lesenswert?

Hi!
Erstmal großes Lob für Deine Arbeit, Benedikt. Ich habe damit allerdings 
ein kleines Problem (naja, noch nicht ;)).
Ich will für ein Projekt deine Schaltung verwenden, muss aber mehr 
Informationen auf dem Display unterbringen als mit 40 x 20 Zeichen 
möglich ist (es geht dabei vor allem um die Zeichen pro Zeile, die 
Anzahl der Zeilen ist absolut ausreichend).

Gibt es eine einfache Möglichkeit, die Größe der Zeichen von 8 x 12 auf 
z.B. die bei anderen Display-Controllern (z.B. Epson) üblichen 5 x 7 zu 
reduzieren? Die entsprechenden Definitionen der Zeichen könnte ich 
Ändern, womit ich mehr ein Problem habe, ist das Auslesen durch die 
Assembler-Routine und die Positionierung auf "ganzen Zeichen", die du ja 
scheinbar vor dem Aufruf der lcd_writebyte-Routine vornimmst..
Ich vermute mal die 8 x 12 sind der "glatten" Ausrichtung an einer 
Byte-Grenze geschuldet? Dann wäre es vermutlich nicht so leicht das 
ganze hinzukriegen..

Gibts da eine einfache Methode das zu ändern bzw. irgendwo als Konstante 
festzulegen?

Danke für deine Mühe,
- Tobi
Gast #1047090
Lesenswert?

Hallo Benedikt, hallo liebe Community.

Ich habe eben mal das Projekt "trocken", ohne es testen zu können, unter 
der aktuellen Winavr Version (20080610) mit einem Atmega128 als Ziel 
erfolgreich compiliert, da ich leider keinen Atmega8515 zur Verfügung 
habe.
Sollte gehn, oder?

Testen kann ichs im Moment leider noch nicht...

Würde mich über ein ja, jain, nein von euch freuen ;-)

Danke Rudi
#1047439
Lesenswert?

> Gibt es eine einfache Möglichkeit, die Größe der Zeichen von 8 x 12 auf
> z.B. die bei anderen Display-Controllern (z.B. Epson) üblichen 5 x 7 zu
> reduzieren?

Ja, das sollte kein Problem sein, da die gesamte Software im Grafikmodus 
läuft. Die Textzeichen werden daher als Bild in den Bildspeicher 
geschrieben.

> Ich vermute mal die 8 x 12 sind der "glatten" Ausrichtung an einer
> Byte-Grenze geschuldet?

Ja, da kann man ein ganzes Bytes einfach in den Speicher kopieren. Das 
geht am schnellsten, erlaubt aber auch nur das Positionieren eines 
Zeichens in 8 Pixel Schritten.
Da man für andere Textgrößen sowieso aus dem Bytraster fällt, kommt man 
um das Pixelweise setzen und löschen nicht herum. Mit 
lcd_setpixel(x,y,color) sollte eine Erweiterung auch ohne Eingriffe in 
den Assembler Code kein Problem sein.

Sowas in der Richtung sollte funktionieren (ich habs jetzt aber nicht 
ausprobiert):
1
void glcd_writechar(unsigned short xpos, unsigned char ypos, unsigned char c, unsigned char tcol, unsigned char bcol)
2
{  unsigned char i,j;
3
  for (i=0; i<8; i++)
4
  {  for (j=0; j<6; j++)
5
    {  if (pgm_read_byte(&font6x8[c][i])&(32>>j))
6
        lcd_setpixel(xpos+j,ypos+i,tcol);
7
      else
8
        lcd_clrpixel(xpos+j,ypos+i,bcol);
9
    }
10
  }
11
}

rudi wrote:
> Sollte gehn, oder?

Leider nicht.
Die Schaltung verwendet einen Adressbereich von 256x240Bytes=60kBytes, 
der mega128 erlaubt aber nur 59,75kByte für das externe RAM. Daher muss 
erstens das #define DDRAM 1024 auf 4096 erhöht werden, und zweitens 
werden die erste und die letze Zeile des Displays vermutlich dasselbe 
anzeigen, da eben zu wenig externer Speicher adressiert werden kann.
#1047470
Lesenswert?

Hi Benedikt!
Ich hatte mir den ASM-Quelltext gestern abend nochmal angeguckt. Das 
Konzept der Bitmuster im Array kann man ja beibehalten, muss dann nur 
gucken das man jeweils nur die ersten 6 Bit des Musters benutzt.
Natürlich muss das ganze dann bitweise adressiert werden, und mit einer 
entsprechenden Maske gearbeitet werden.

Meine Ideen bis jetzt:

- Zeichen laden (entsprechende Pixel-Zeile)
- Maske erzeugen (gleiche Breite wie das Zeichen und an selber Stelle)
- Bit-Offset laden (zum Zeichenanfang)
- Speicherstelle berechnen

So lange Bit-Offset > 0:
 Maske verschieben (links oder rechts..?)
 Zeichen auch verschieben (genau wie Maske)

- Maske XOR 255
- Byte b aus dem Display-RAM laden
- b = b & Maske
- b = b | Zeichen
- Byte b in Display-RAM schreiben

- Externe RAM-Speicherstelle + 1

- Zeichen laden (entsprechende Pixel-Zeile)
- Maske erzeugen (gleiche Breite wie das Zeichen und an selber Stelle)
- Bit-Offset laden (zum Zeichenanfang)
- Neues Bit-Offset = 8 - Altes Offset
- Speicherstelle berechnen

So lange Bit-Offset > 0:
 Maske verschieben (rechts oder links, andersrum wie beim ersten 
Schritt)
 Zeichen auch verschieben (genau wie Maske)

- Maske XOR 255
- Byte b aus dem Display-RAM laden
- b = b & Maske
- b = b | Zeichen
- Byte b in Display-RAM schreiben

- Externe RAM-Speicherstelle - 1 (damit ist der Zustand wie vorher und 
kann wie in deiner ASM-Routine fortgesetzt werden)



Das ist mal ganz schnell formuliert der Pseudocode (ASM-nah) den ich 
dafür umsetzen würde. Ich habe allerdings mit Assembler bis jetzt nicht 
viel gemacht (okay, bis auf ein paar Änderungen in fremdem Code) und 
weiß nicht genau ob ich dafür beliebige Register benutzen kann, da der 
C-Code da ja noch mit zusammen arbeiten muss. Eigentlich dürfte es kein 
Problem geben wenn ich mit push & pop die entsprechenden Register 
sichere, oder?
Dieser Code dürfte (sofern ich jetzt keinen Denkfehler drin habe) auch 
schneller arbeiten als jedes Bit per "setpixel" zu setzen..

Danke vielmals ;)

- Tobi

P.S: Mir fällt gerade auf, das es wenn ich aus dem externen RAM auch 
lese eventuell zu Fehlern kommen könnte.. Spielt das eine Rolle? Ich 
meine.. die Daten werden ja eigentlich beim Lesen auch ans Display 
übertragen. So ganz hab ich das aber noch nicht durchschaut was in der 
Schaltung abläuft ;)
#1047515
Lesenswert?

Tobias Hagemeier wrote:

 Das ist mal ganz schnell formuliert der Pseudocode (ASM-nah) den ich
> dafür umsetzen würde.

Sollte soweit funktionieren. Dürfte auch auf jedenfall schneller sein
als die einzelnen Pixel zu setzen, vor allem da man mit einer Maske ja 
direkt alle 8 Zeilen untereinander schreiben kann.

> weiß nicht genau ob ich dafür beliebige Register benutzen kann, da der
> C-Code da ja noch mit zusammen arbeiten muss.

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage

> P.S: Mir fällt gerade auf, das es wenn ich aus dem externen RAM auch
> lese eventuell zu Fehlern kommen könnte.. Spielt das eine Rolle?

Dafür habe ich extra das Signal an PD3 eingeführt. Damit wird das 
Display quasi vom Datenbus getrennt, wenn keine Daten ausgegeben werden. 
Nur im Interrupt wird dieses Signal aktiviert, eine Zeile ans Display 
übertragen und anschließend das Signal wieder deaktiviert.
#1055865
Lesenswert?

Hallo,

ich hab auch mal ein 320x240 Display angeschlossen, jedoch treten bei 
mir  senkrechte Schlieren/Linien auf.
Ich hoffe auf dem Bild kann man erkennen, was ich meine.

Könnte es daran liegen, dass ich das Display mit Lackdraht an die 
Platine angeschlossen habe und die Drähte jetzt wie Sender/Empfänger 
arbeiten und Influenzen in den benachbarten Drähten verursachen? Komisch 
ist aber, dass es neben der Schrift " 320x240 LCD Controller By 
Benedikt" keine Schlieren auftauchen.


Als Sram benutzte ich eins mit 15ns Zugriffszeit.
Die Platine ist gelayoutet und besitzt eine Massefläche.

Gruß Alex

PS: Hier mal ein kleies Video, auf dem ich die Kontrastspannung runter 
und wieder hoch regele. Durch die Kontrastspannung kann ich den effekt 
zwar abschwächen, bekomme ihn aber nicht weg.

http://mitglied.lycos.de/onrop/Alex/Elektronik/Fotos%20&%20Videos/Kontrast.ASF

(die Hintergrundgeräusche stammen von meinem Radio.... diese treten 
jedoch nur dann auf, wenn das LCD im Betrieb ist. Dabei ist das Radio 2 
m vom LCD entfernt.)
Angehängte Dateien:
#1055897
Lesenswert?

Alexander Sewergin wrote:

> ich hab auch mal ein 320x240 Display angeschlossen, jedoch treten bei
> mir  senkrechte Schlieren/Linien auf.

Dieser Effekt nennt sich Übersprechen. Er tritt vor allem an großen 
senkrechten oder waagrechten Linien auf, was hier der Fall ist.

Daran kann man leider recht wenig machen, das liegt am LCD. Vor allem 
blau-weiße sind davon stark betroffen, da diese einen Knick in der 
optischen Kennlinie haben: Zwischen blau und weiß kommt schwarz, was man 
auch schön im Video sehen kann.
Das ist der Grund, wieso ich keine blau weißen LCDs verwende, obwohl 
blau-weiß eigentlich gut lesbar ist.
#1055932
Lesenswert?

Man könnte die Ansteuerung etwas anpassen, eventuell mit passendem 
n-line usw. aber das ist alles nicht so einfach und es verursacht andere 
Störerscheinungen.

Das Phänomen tritt hauptsächlich vertikal auf, da die Einschaltdauer 
einer Zeile konstant ist (nämlich 1/240). Die Einschaltdauer einer 
Spalte dagegen variiert je nachdem wie viele Pixel in dieser Spalte 
aktiv sind (nämlich 0 bis maximal 240). Insgesamt spielen da sehr viele 
Faktoren eine Rolle (Widerstände der Leiterbahnen, Kapazitäten im LCD 
usw.), hier ist das ganze einigermaßen beschrieben: 
http://www.solomon-systech.com/pdf/Crosstalk%20Improvements%20for%20STN%20LCD.pdf
#1056170
Lesenswert?

Es scheint wirklich am LCD zu liegen. Ich habe das s/w LC-Display von 
Pollin angeschlossen und man erkennt keine vertikalen Linien mehr.

So langsam verstehe ich auch, wieso viele passive Displays auf dem Markt 
für wenig Geld verkauft werden. Die Bildqualität ist wohl nur mit viel 
Mühe gut einstellbar.


Gruß Alex
#1058874
Lesenswert?

Ich bekomme immer eine Fehlermeldung (AVRStudio4 + WinAVR20081118rc2) 
wenn ich das Programm neu compilieren möchte. Eventuell liegt es einfach 
an meinem Unvermögen mit dem GCC Compiler umzugehen. Auf dem Bild könnt 
ihr sehen, welche Headers ich eingefügt habe. Was muss ich mit lcd.c und 
uart.c machen? Die sind derzeit in dem selben Ordner, wo auch die main.c 
ist. Muss ich diese c. Files irgendwo einbinden?


Gruß Alex
Angehängte Dateien:
Gast #1066113
Lesenswert?

Ich habe hier ein sp14q002 Display (Datenblatt im Anhang).
So wie ich das hier sehe kann ich dieses Display mit diesem 
Selbstbaucontroller verwenden, nur wollte ich nochmal sicher gehen, 
bevor ich alle Teile bestelle, die ich brauche, und daraus wird dann 
doch nichts...
Angehängte Dateien:
Gast #1066633
Lesenswert?

Ok, vielen Dank!

Nun habe ich noch eine Frage, den Optomosfet kann ich ja, so wie ich das 
sehe rauslassen, oder?
Wenn ja, dann muss ich doch VLCD einfach mit an die Anode von D1 und 
ONOFF an PE0 (INT2) am Controller oder?
Im Schaltplan ist ONOFF nicht als invertiert beschriftet, in meinem 
Datenblatt ist das DISP.OFF(Low-Aktiv). Dann muss ich doch noch das 
Signal (am einfachsten mit einem Transistor, oder?) inververtieren??
#1066676
Lesenswert?

Nils wrote:

> Nun habe ich noch eine Frage, den Optomosfet kann ich ja, so wie ich das
> sehe rauslassen, oder?

Ja.

> Wenn ja, dann muss ich doch VLCD einfach mit an die Anode von D1 und
> ONOFF an PE0 (INT2) am Controller oder?

Ja.

> Im Schaltplan ist ONOFF nicht als invertiert beschriftet, in meinem
> Datenblatt ist das DISP.OFF(Low-Aktiv). Dann muss ich doch noch das
> Signal (am einfachsten mit einem Transistor, oder?) inververtieren??

Nein.
Onoff: High = On, Low = Off
DispOff\ ist Low aktiv, Low deaktiviert also das Display.
Direkt verbinden und das Display sollte funktionieren.
#1067186
Lesenswert?

hallo,
ich hab nochmal eine frage bezüglich eines bmp zu laden,
die anderen funktionen wie rechtecke,linien, kreise usw funktionieren 
bestens aber wenn ich ein bild laden will werden nur wirre pixel 
dargestellt.

vielleicht wäre es möglich mal drüber zuschauen
was ich verkehrt mache

mfg
kay


ldi ZL,LOW (bmp*2)                ; Adresse des Strings in den
ldi ZH,HIGH (bmp*2)               ; Z-Pointer laden

;macro
;bmp mit 60x60 pixel
picture 0xAA,0,0,60,60,1


bild0:
lpm                               ; Erstes Byte nach R0 lesen
tst R0                            ; R0 auf 0 testen
breq _end                         ; wenn 0 verzw. zu _end
rcall senden                      ; UP "ausgeben auf uart
adiw zl, 1                        ; Adresse des Z-Pointers um 1 erhöhen
rjmp bild0                        ; wieder zum Anfang



senden:
mov r17,r0                        ;r0 nach r17 kopieren



send:
sbis UCSR0A,UDRE0    ; Warten bis UDR für das Byte bereit ist
 rjmp send
 OUT UDR0, r17
ret




_end:




;bilddaten
bmp:
.db 0, 0, 0, 0, 0, 11, 240, 0,
.db 0, 0, 0, 0, 3, 112, 0, 0,
.db 0, 0, 0, 0, 180, 0, 0, 0,
.db 0, 0, 0, 30, 0, 0, 0, 0,
.db 0, 0, 7, 192, 0, 0, 0, 0,
.db 0, 0, 248, 0, 0, 0, 0, 0,
.db 0, 31, 1, 228, 128, 0, 0, 0,
.db 7, 224, 255, 248, 0, 0, 0, 1,
.db 124, 63, 255, 0, 0, 0, 0, 32,
.db 135, 253, 224, 0, 0, 0, 0, 33,
.db 255, 206, 0, 0, 0, 0, 92, 57,
.db 161, 192, 0, 0, 0, 6, 3, 16,
.db 56, 0, 0, 0, 0, 64, 112, 223,
.db 0, 0, 0, 0, 0, 15, 0, 224,
.db 0, 0, 0, 0, 0, 176, 112, 0,
.db 0, 0, 0, 0, 2, 63, 0, 0,
.db 1, 160, 0, 0, 96, 0, 0, 127,
.db 248, 64, 0, 0, 0, 0, 11, 231,
.db 136, 0, 0, 0, 0, 0, 185, 128,
.db 0, 0, 0, 0, 0, 15, 128, 251,
.db 128, 0, 0, 0, 0, 64, 127, 252,
.db 0, 0, 0, 0, 2, 127, 247, 96,
.db 0, 0, 0, 0, 31, 243, 210, 0,
.db 0, 0, 0, 0, 254, 22, 192, 0,
.db 0, 0, 0, 15, 208, 56, 0, 0,
.db 0, 0, 0, 251, 10, 0, 0, 0,
.db 0, 0, 0, 127, 0, 0, 0, 0,
.db 0, 0, 3, 192, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 2, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 6, 0, 0, 0, 0, 0, 0, 1,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 0, 0, 0, 0, 0, 0, 0,
.db 0, 16, 0, 0, 0, 0, 0, 0,
.db 7, 0, 0, 0, 0, 4, 0, 1,
.db 224, 0, 0, 0, 0, 0, 0, 126,
.db 0, 0, 0, 0, 0, 0, 127, 224,
.db 0, 0, 0, 0, 0, 127, 252, 0,
.db 0, 0, 0, 0, 11, 255, 192, 0,
.db 0, 0, 0, 0, 63, 248, 0, 0,
.db 0, 0, 3, 131, 255, 128, 0, 0,
.db 0, 1, 252, 127, 240, 0, 0, 0,
.db 0, 63, 255, 158, 0, 0, 0, 0,
.db 0, 255, 248, 224, 0, 0, 0, 0,
.db 7, 190, 28, 0, 0, 0, 0, 0,
.db 26, 7, 128, 0, 0, 0, 0, 0,
.db 251, 224, 0, 0, 0, 0, 0, 1,
.db 248, 0
.db 0,0
#1067227
Lesenswert?

Kay B. wrote:

>
> vielleicht wäre es möglich mal drüber zuschauen
> was ich verkehrt mache

> bild0:
> lpm                               ; Erstes Byte nach R0 lesen
> tst R0                            ; R0 auf 0 testen
> breq _end                         ; wenn 0 verzw. zu _end

Da dein erstes Datenbyte schon 0 ist, wird die Schleife direkt 
abgebrochen und gar nichts gesendet.
Besser ist es mit einem Zähler eine feste Anzahl an Bytes zu senden, da 
man nie weiß welche Bytes in den Bilddaten enthalten sind.
#1067239
Lesenswert?

könnte mann das so machen


ldi r18,7      ;zähler für daten = 8
bild0:

lpm                               ; Erstes Byte nach R0 lesen
dec r18                           ;zähler für daten
rcall senden                      ; UP "ausgeben auf uart
brne bild0                        ;alle 8bytes durch?
adiw zl, 1                        ; Adresse des Z-Pointers um 1 erhöhen
ldi r18,7                         ;zähler für daten = 8
rjmp bild0                        ; wieder zum Anfang

mfg kay
#1067269
Lesenswert?

hallo,
so müsste es doch gehen
wenn der der befehl lpm alle 8byte gelesen hat dann wird der z-pointer
um eins erhöt oder bin ich da auf den holzweg?`


ldi r18,7                           ;zähler für daten = 8
bild0:
lpm r17,z+                         ; Erstes Byte lesen
rcall senden                       ; UP "ausgeben auf uart
dec    r18
brne   bild0
adiw zl, 1                         ; Adresse des Z-Pointers um 1 erhöhen
rjmp bild0                         ; wieder zum Anfang


senden:
sbis UCSR0A,UDRE0    ; Warten bis UDR für das Byte bereit ist
 rjmp senden
 OUT UDR0, r17
ret




_end:
#1067280
Lesenswert?

Kay B. wrote:
> hallo,
> so müsste es doch gehen
> wenn der der befehl lpm alle 8byte gelesen hat dann wird der z-pointer
> um eins erhöt oder bin ich da auf den holzweg?`

Ja, du machst das komplett falsch. Der z-pointer muss nach jedem Byte 
erhöht werden.

Hier mal ein Ausschnitt mit dem ich Daten aus dem Flash in der RAM 
kopiere. Er zeigt aber zumindest das Prinzip.
1
ldi ZL, low(2*BMP)
2
ldi ZH, high(2*BMP)
3

4
ldie XL, low(ramstart)
5
ldie XH, high(ramstart)
6

7
ldi r16, count
8

9
Loop:
10
  lpm temp, Z+
11
  st X+, temp
12
  dec r16
13
  brne Loop
#1068332
Lesenswert?

hallo,
so habe die leseschleife etwas umgeändert,es werden nur wirre pixel 
dargestellt.
ich weiss aber nicht ob die tabelle mit den bilddaten so überhaupt 
richtig ist,das bild hab ich mal im anhang.

mfg kay



 ldi r18,7      ;zähler für daten = 8bytes pro tabellen zeile

 bild0:
 lpm r17,z+                        ; Erstes Byte  lesen
 rcall senden                      ; UP "ausgeben auf uart
 adiw zl, 1                        ;Adresse des Z-Pointers um 1 erhöhen
                                   ;nächste zeile lesen
 dec r18                           ;zähler für daten
 brne bild0                        ;alle 8bytes durch?
Angehängte Dateien:
#1069506
Lesenswert?

hallo Benedikt,
habe mir mal den  beitrag"LCD Controller für 640x480 LCD mit mega8515"
angesehen und das logo was du da verwendest mal probiert und das 
funktioniert,
also ist meine bild-tabelle nicht inordnung
aber wie wandelst du denn die bmp`s um?
vieleicht könntest du mir ein wenig weiterhelfen
mfg kay
Gast #1071088
Lesenswert?

Soo jetzt kamen meine Teile von Reichelt erst, doch statt einem Latch 
war ein FlipFlop drin...

Ich habe hier noch den Bustreiber 74LS245 liegen. 
http://www.ralfzimmermann.de/ttl_ic/0e34.html

In die Schaltung soll ein 74HC245.
http://www.ralfzimmermann.de/ttl_ic/0e39.html

Nun habe ich mir das angesehen und wenn ich DIR von 245er auf H lege und 
dann G\ nochmal invertiere und dann an PE1 (ALE) von uC gehe, müsste das 
doch eigentlich klappen?

Theorethisch, aber dann ist ja noch die Geschwindigkeitsfrage, muss es 
unbedingt ein HC sein oder reicht der LS auch (wenn das überhaupt so 
nutzbar ist.) ?
#1071104
Lesenswert?

Nils wrote:

> Nun habe ich mir das angesehen und wenn ich DIR von 245er auf H lege und
> dann G\ nochmal invertiere und dann an PE1 (ALE) von uC gehe, müsste das
> doch eigentlich klappen?

Nein, der 245er ist ein Bustreiber, du brauchst aber ein Latch. Mit 
einem 574 würde es eventuell auch noch gehen, aber mit einem 245 auf 
keinen Fall.
#1096627
Lesenswert?

Hallo,

ich habe mal eine Platine im Eagle zu dem Thema gemacht.

Die IC´s sind alles DIL Bausteine es kommen nur ein paar wenige SMD 
Kondensatoren und Widerstände zum Einsatz. Habe die Bauform 1206 gewählt 
weil sie sich von Hand noch sehr gut löten lassen.

Auf dem Bord ist eine 5V Spannungsversorgung und die -22V für das 
Display enthalten.

Habe mich an das Orginal von Benedikt K. gehalten.

Für den Anschluss des Displays habe ich eine Stiftleiste vorgesehen 
(Raster 2,5mm)

Die Belegung ist

1  -> Frame
2  -> LOAD
3  -> CP
4  -> VDD (5V)
5  -> GND
6  -> VSS (-22V) Diese müsste mit dem NAN YA LTBE9T372G1K überein stimen
7  -> D0         Nur bei M AC hab ich keine Angabe gefunden was es ist!
8  -> D1
9  -> D2
10 -> D3
11 -> Display Off
12 -> M AC

Eventuell besteht ja Interesse und man könnte eine Sammelbestellung von 
Platinen loslassen.
Angehängte Dateien:
#1097500
Lesenswert?

Hallo,

Habe heute die Größe des Boards auf 100mm x 80mm geschrumpft.

hab mal die Preise bei Bilex im Kalkulator berechnen lassen und er sagt 
mir das eine Leiterplatte, 2-lagig, mit Lötstoplack und Verzinnung ca. 
7,5€ kostet.

Finde das einen guten Preis.

Die Berechnung gilt für 12 Eurokarten also 24 einzelne Leiterplatten.

Alle die Interesse haben einfach melden dann würde ich eine Bestellung 
abschicken.

Können auch gern einen anderen LP Hersteller nehmen, war nur so die 
erste Adresse wo ich geschaut habe.

Eventuell schaut auch einer nochmal über die Platine quer, um eventuell 
Fehler die sich eingeschlichen haben noch zu ändern.
Angehängte Dateien:
#1097513
Lesenswert?

Avr Nix wrote:
> @Blitzlampe: Warum sind die meisten Leiterbahnen auf den TOP Layer ( Rot
> ), das heisst du müsstest jede Fassung oder IC von oben festlöten, wäre
> sehr umständlich. Da am besten man den Buttom (Blau ) Layer zum löten
> verwendet wird entsprechend den Layer wechseln.

???
Jede Bohrung ist gleichzeitig eine Durchkontaktierung und kann somit von 
beiden Seiten gelötet werden.
Gast #1097537
Lesenswert?

>Jede Bohrung ist gleichzeitig eine Durchkontaktierung und kann somit von
>beiden Seiten gelötet werden.

na, ja für Profis sei das Löten wohl kein Problem, ich hatte meine 
Platine so geändert, das nur noch jede 2. Fassung von beiden Seiten 
gelötet werden braucht. Oder anders gesagt, genügend Platz für den 
Lötkolben da ist.

Wigbert
Persönliche Seite #1097733
Lesenswert?

Wollte nicht deine Platine nieder machen, aber wenn es eng wird und du 
keine Präzisionfassung   benutzt wird man mit dem löten Schwierigkeiten 
haben, da man nicht von oben Löten kann bzw kaum dran kommt.

Wenn man auf top Layer Leitungen weg gehen und auf den Bottom layer 
gelötet wird  hast du keine Verbindung.
....aber wenn alle Durchkontaktiert (hülse) sind sollte das nicht 
passieren

Ich nehmen auch mal eine Platine.

Wird der Spannungsregler nicht zu warm ?
#1098179
Lesenswert?

Kritik ist immer gern willkommen solange sie hilfreich ist.

Kenne das Problem auch, wenn man Platinen bügelt muss man schon drauf 
achten wie und wo man die Via´s setzt weil es schnell passiert das man 
nicht mehr rankommt zum löten. Aber bei einer "richtigen" Platine sind 
alle Bohrungen durchkontaktiert und somit reicht es wenn man eine Seite 
verlötet.

Die Platine lässt sich ohne Akrobatik löten und bestücken, das Bild im 
Anhang zeigt wo alles gelötet werden muss. Jeder grüne Punkt ist eine 
Lötstelle + die SMD Bauteile.
Es muss nur diese Seite gelötet werden!

Das Bild zeigt übrigens die Unterseite und die IC's Sitzen auf der 
anderen Seite.

Der 7805 wird bei 12V Eigangsspannung und einem Laststrom von 0,1A ca. 
46°C + Umgebungstemp warm.

Wenn jemand, der die Schaltung schon aufgebaut hat, mal den Strom messen 
könnte wäre das super. Somit könnte man abschätzen wie hitzig es wird 
und ggf. noch gegensteuern.
Angehängte Dateien:
Gast #1098258
Lesenswert?

>Kritik ist immer gern willkommen solange sie hilfreich ist.

Stimmt.

Ich hatte damals die Sockelpins fürs Durchkontaktieren genutzt,
um Einzelstücke selbst fertigen zu können.

Industriell hergestellte Platinen haben natürlich Durchkontaktierungen.

Wenn es zu einer Sammelbestellung kommt, vielleicht kannst Du die
Stecker fürs Pollindisplay(wenn Bedarf) zulegen. Die gibt es nun mal
für ein paar Cent (zB.Farnell).

Wigbert
Angehängte Dateien:
#1098285
Lesenswert?

Ich habe mal die Schaltung und das Layout kontrolliert, passt alles 
soweit, bis auf eine Kleinigkeit, die allerdings mein Fehler ist:
Der CLK Eingang des FlipFlops das M/AC erzeugt, muss an Frame/FLM und 
nicht an LP/Load. Für die beiden Pollin LCDs ist das aber egal, denn die 
erzeugen dieses Signal intern selbst. Daher ist es mir bisher nicht 
aufgefallen, dass dies falsch war. Nur andere LCDs (wie z.B. Hitachi 
SP14Q001 oder das Sharp LCD das es noch bei Pollin gibt), benötigen 
dieses Signal.
Den korrigierten Schaltplan habe ich mal angehängt.

Ich würde den TXD Pin auch noch mit rausführen. Er wird zwar momentan 
nicht benötigt, aber falls man doch mal irgendetwas erweitert, (z.B. 
Zurücklesen der Daten), dann kann man ihn verwenden.

Das Optorelais ist leider bei Pollin nichtmehr erhältlich und daher nur 
noch teuer/schwer zu bekommen. Das Pollin LCD besitzt einen ON/OFF Pin, 
daher ist ein Schalten der VLCD nicht unbedingt notwendig. Ein 
(Löt)Jumper um diesen zu überbrücken, wäre daher vielleicht sinnvoll.
Angehängte Dateien:
#1098583
Lesenswert?

So habe den CLK auf FLM FRAME gelegt und einen Jumper zum überbrücken 
für das Optorelais hinzugefügt.

Die UART Schnittstelle habe ich jetzt neu gemacht. Jetzt ist eine 4 
polige, 2,5mm Raster Stiftleiste vorgesehen, mit folgender Belegung.

Pin 1 -> RxD
Pin 2 -> TxD
Pin 3 -> GND
Pin 4 -> RTS (BUSY)

Habe die Displayschnittstelle jetzt auch mit 2,5mm Stiftleiste versehen, 
da die andere schwierig zu bekommen ist. Desweiteren sind die Signale 
jetzt beschriftet.

@  Picht
Die Displayschnittstelle habe ich extra mit der Stiftleiste gemacht, 
damit ist die Platine universell für viele Display´s und man kann 
Flachbandkabel direkt einlöten. Wer will kann sich immer noch eine 
kleine Adapterplatte mit einer passenden Buchse machen und diese auf die 
Stiftleiste Löten oder stecken.
Angehängte Dateien:
Persönliche Seite #1098689
Lesenswert?

Wegen den RAM nicht alle sind sp breit es gibt auch die schmalen die wie 
ein ATMega 8 aussehen. könntest du noch eine Leiste Paralle zu einer 
Seite einbauen , sodas man beide Breiten einbauen kann, das wäre sehr 
Universell.
Oder sonst müsste man extra eine Adapterplatine basteln, so könnte man 
den schmalen 28poligen Fassung oder den Breiten 28poligen Fassung 
nehmen.
#1098722
Lesenswert?

Avr Nix wrote:
> Wegen den RAM nicht alle sind sp breit es gibt auch die schmalen die wie
> ein ATMega 8 aussehen. könntest du noch eine Leiste Paralle zu einer
> Seite einbauen , sodas man beide Breiten einbauen kann, das wäre sehr
> Universell.

Ja, das wäre sinnvoll. Die schnellen SRAMs sind nämlich alle nur in der 
schmalen Ausführung erhältlich. Für die langsamen RAMs muss die Software 
angepasst werden (lcd.c, Waitstates aktivieren).
#1099504
Lesenswert?

So war heut nochmal bei Bilex und hab jetzt einen Preis von 8€ für 
folgende Platine
1
12 x LEITERPLATTEN   (ergibt 24 einzelne Platinen)
2
2-Lagig Durchkontaktiert
3
100x160 mm
4
Materialstärke: FR4 1.55mm;
5
Oberfläche: Chemisch Gold(RoHs konform)
6
Cu Außenlagen Enddicke: 70 µm;
7
Lötstop: doppelseitig grun
8
Positionsdruck: ohne
9
  
10
Netto:  147.39 €
11
MwSt:    29.48 €
12
Brutto: 176.87 € 
13
Versand  14.00 €

Verzinnt oder vergoldet macht im Preis kein unterschied genauso wie die 
Kupferstärke.
Also hab ich mich für Gold entschieden, das lässt sich auch noch nach 
langer Zeit super löten.

Also melder wer eine will, bin erst bei 6 Eurokarten.
#1099816
Lesenswert?

Ok, es haben sich verschiedene Leute gemeldet und ihr Interesse 
angemeldet.
Vielen dank erstmal!

Ich würde dann am WE, eventuell kommen bis dahin noch ein paar 
Bestellungen hinzu, Platinen ordern.

Wenn es bei den 12 Platten bleibt wären es 8€ + Porto zu euch. Würde das 
mit der Post im gepolsterten Umschlag verschicken. Versandkosten fallen 
nur die von mir zu euch an.

Würde mich mal bis zum WE schlau machen (wegen Porto) und euch dann am 
WE die Bankdaten und den Preis mailen. Will diese nicht unbedingt im 
Netz veröffentlichen nicht das mir die anderen 6*10^9 Leute auf der Erde 
auch noch Geld überweisen ;-) man weiß ja nie.
#1102603
Lesenswert?

Ich bestelle drei Platinen (falls jetzt noch möglich).

Es wäre jedoch zu überlegen, ob man auf dem Board noch eine Schaltung 
zur Erzeugung der HV Wechselspannung für die Hintergrundbeleuchtung 
vorsieht (sicher, dann sollte man einen Berührschutz haben, z.B. Einbau 
in ein Gehäuse). Und wer diese Schaltung nicht braucht, muss die 
Bauteile ja nicht einlöten. Ich habe folgende Schaltung getestet:
http://www.elektronik-kompendium.de/forum/forum_entry.php?id=13083&page=1&category=all&order=time
Sie zieht etwa 300 mA bei 5 V Versorgungsspannung und bei 
angeschlossenem Display (nicht 12 V wie auf dem Bild). Ich habe die 
Schaltung etwas modifiziet: Widerstände 1K, Transistoren 2N3055, mehr 
"Rückkopplungswindungen", Kondensator überflüssig (ich verstehe 
prinzipiell den Zweck des Kondensators, aber bei meinen Tests ergab sich 
dadurch kein besserer Wirkungsgrad). Vielleicht könnte man den 
Wirkungsgrad aber noch mit einer ZVS Schaltung verbessern, die ich 
jedoch noch nicht getestet habe:
http://img236.imageshack.us/img236/5286/flybackdriverandrineriji7.jpg
Sie scheint zwar für einen Zeilentrafo konzipiert zu sein, dürfte sich 
aber auch für ca. 500 V Ausgangsspannung anpassen lassen (geeigneter 
Ferrtikerntrafo).

Noch eine Frage: Hat jemand eine Ahnung, wie stark sich die 
Bildwiederholungsrate verringert, wenn man die 70 ns SRAMs von Reichelt 
benutzt und das Programm entsprechend anpasst ?
Gast #1103029
Lesenswert?

Einen CCFL Inverter würde ich nicht auf die Platine machen.

1. Bekommt man diese günstiger gekauft, als man es selber bauen kann.
2. Es schwierig ist einen Trafo zu bekommen bzw selber zu wickeln.
3. Er die Verlustleistung am 7805 extrem in die Höhe treibt.
4. Weil der gekaufte Inverter oder ein ausgebauter sicher funktionieren.
5. Es nicht abzuschätzen ist ob die Störung des Wandlers die Funktion 
der Schaltung beeinflussen.
6. Kein Platz mehr ist.
#1103059
Lesenswert?

Florian K. wrote:

> Noch eine Frage: Hat jemand eine Ahnung, wie stark sich die
> Bildwiederholungsrate verringert, wenn man die 70 ns SRAMs von Reichelt
> benutzt und das Programm entsprechend anpasst ?

An sich garnicht, da sich der LCD Controller soviel Zeit nimmt wie er 
braucht. Allerdings benötigt ein Speicherzugriff dann 3 statt 2 Takte, 
was die CPU Auslastung auf >80% erhöht. Die Grafikbefehle werden dann 
entsprechend langsamer ausgeführt.
#1103184
Lesenswert?

Zum Thema fertige CCFL Inverter: Hier gibt es einen:
http://www.lc-design.de/shop/de/k006u005s001.htm
Allerdings kostet es erst wieder Versandkosten ...
Die bei Pollin
http://www.pollin.de/shop/detail.php?pg=NQ==&a=ODc2ODY0OTk=
oder
http://www.pollin.de/shop/suche_ergebnis.php?S_TEXT=700638&ts=0
wären wohl auch geeignet, allerdings stört mich, dass man dann extra
noch 12 V Versorgungsspannung braucht. Aber vielleicht kann man sie ja
umbauen (Windungszahlen, Widerstände, Kondensatoren), so dass sie auch
bei 5 V einen ausreichenden Output bringen ?

P.S: Ich bestelle trotzdem 3 Platinen, auch wenn der CCFL Inverter
darauf keinen Platz mehr hat.
#1105448
Lesenswert?

Hallo,

habe soeben die Bestellung abgeschickt.

Habe allen eine Mail geschrieben.
Sollte ich einen vergessen haben einfach mir noch ne Mail schreiben.

Laut Bilex sollen die Platten bis zum 20. gefertigt werden und dann 
müssten sie 3-4 Tage später bei mir eintreffen.

Werde Sie dann umgehend an euch weiter leiten.


!!!! Habe auch noch ein paar Platten über also wer noch eine will kann 
sich immer noch melden!!!!!
Gast #1147912
Lesenswert?

#1153739
Lesenswert?

Avr Nix wrote:
> Was könnte das Problkem sein das nur die linke Hälfte OK Angezeigt wird
> und rechts streifen auftauchen?

Ich habe ehrlich gesagt nicht die geringste Vermutung woran das liegen 
könnte.
Der Text sieht OK aus, auch auf der rechten Seite.
Da es weder Software noch Hardware mäßig irgendwelche Unterschiede 
zwischen beiden Seiten gibt, ist das ganze sehr seltsam.
Dazu kommt noch, dass jeder 2. Pixel anscheinend betroffen ist, aber die 
Pixel liegen ja gemeinsam zusammen mit den funktionierenden Pixel in 
einem Byte.
#1153756
Lesenswert?

Fängt die Störung bei einer Zweierpotenz (Bits/Bytes in der Zeile) an 
und wiederholt sich alle 8 Bits? Dann könnte eine irgendwie geartete 
Kopplung zwischen einem Adress- und einem Datenpin vom RAM bestehen.

Adress/Datenpins untereinander und gegeneinander durchklingeln. 
Speichertestprogramm basteln. Korrekte Funktion vom Adresslatch testen. 
RAM und Adresslatch tauschen.

Stützkondensatoren sind ja wohl überall drin? Wie sieht der Aufbau aus?
Persönliche Seite #1153844
Lesenswert?

Also ich habe die Platine von Blitzlampe und mehre RAM wie den 
W24M257AK-15 und dem Em51M256A-15P getestet alles das gleiche Ergebnis.

Jetzt darf ich mal das Datenblatt suchen und schauen ob die überhaupt 
passen, was ich gedacht habe.

Ich habe hier noch ein HM62256ALP-70G der passt doch ?

Ich meine mich erinneren zu können das die von der PINs her stimmig 
sind.
Gast #1153880
Lesenswert?

Hallo,

Verändert sich die Störung, wenn du mit dem Finger an den Rahmen des 
Displays fast oder diesen mit Masse verbindest?

Ich frage deshalb, weil bei mir ein Inverter wo solche Störungen auf der 
Spannungsversorgung erzeugt hatte, das ich auch Streifen im Display 
gesehen habe. Diese haben sich aber verändert wenn ich den Finger an den 
Rahmen gehalten oder mit Masse verbunden habe.
Persönliche Seite #1153882
Lesenswert?

Hallo Benedikt,
Noch eine andere Frage welche Zahl ist bei dir Grau und Hellgrau?
Und könntest du mal ein Beispiel in deiner PDF aufnehmen wie man ein 
Rechteck und Kreis in den 4 Graustufen etc. zeichnet?

Und -
Wo soll ich Waitstates erhöhen? bzw. könntest du nicht eine passende HEX 
posten? Da ich nicht mit C arbeite, Danke

void lcd_init(void)
{  cli();
  wdt_disable();
  MCUCR=(1<<SRE)|(0<<SRW10);          // Enable XMEM    !!! Die Null vor 
dem SRW Bit durch eine 1 ersetzen, !!!
                        //          !!! wenn der verwendete SRAM mehr 
als 35ns hat     !!!
  OCR1A=10;
  OCR1B=128;
  TCCR1A=(1<<COM1B1)|(1<<COM1B0)|(1<<WGM10);  // Enable PWM (Kontrast)
  TCCR1B=1;                  // 8bit PWM

  OCR0=RELOAD;
  TCCR0=(1<<WGM01)|2;              // 2MHz Timer Takt, CTC
  TIMSK=(1<<OCIE0);

  sei();
  lcd_clear();

  lcd_block(50,10,269,79,0,255);
  lcd_block(60,20,109,69,64,255);
  lcd_block(150,15,189,45,64,64);
  lcd_block(180,40,219,75,128,128);
  lcd_block(200,20,239,50,255,255);
  lcd_string(10,120,PSTR("320x240 LCD Controller"),255,0);
  lcd_string(15,140,PSTR("\xB8"" by Benedikt"),255,0);

  wdt_enable(WDTO_250MS);
  ENABLE_VLCD=1;
}
#1153921
Lesenswert?

Avr Nix wrote:
> Noch eine andere Frage welche Zahl ist bei dir Grau und Hellgrau?

Die Farben sind 8bit Werte, man kann jeden Wert senden, es werden aber 
nur die 2 MSB verwendet:
0, 64, 128, 192 sind also eine Möglichkeit für die 4 Graustufen.

> könntest du nicht eine passende HEX posten?

Ist im Anhang.
Angehängte Dateien:
#1156578
Lesenswert?

Momentan habe ich dazu leider keine Zeit. Und ehrlich gesagt habe ich da 
auch wenig Bedarf daran, da das Display doch ziemlich groß ist.
Die Software war eigentlich auch mehr als Basis für eigene Erweiterungen 
gedacht, so dass jeder selbst eigene Befehle implementieren kann. Dazu 
gibt es die ganzen Schnittstellen Funktionen wie lcd_setpixel(). Damit 
sollte sich eine eigene Schriftart schnell einbauen lassen.
#1194773
Lesenswert?

Hallo!
Hat evtl. jemand noch so eine Platine für mich übrig?
Ich habe nämlich das Gefühl, dass ich das mangels Schaltplanlesekünsten 
nicht so schnell auf Lochraster realisieren könnte... ;)

Ich würde sie sowohl neu, als auch fertig bestückt nehmen, natürlich 
gegen entsprechende Bezahlung!

Reciht eigentlich ein alter Inverter aus einem Notebook oder brauche ich 
da nochwas neues?

Und ausserdem frage ich mich ob es eine komplette Bauteilliste gibt??

MfG
#1195381
Lesenswert?

Platine zum Abgeben hab ich leider keine mehr über. Auf Lochraster würd 
ich das ganze nicht Aufbauen wollen wäre mir zuviel Drahtverhau.

Der Inverter aus dem Notebook sollte das Display zum leuchten bringen.
1
Bauteil Wert       Device          Package      Description                                                    
2
C1      100n       C-EUC1206       C1206        CAPACITOR, European symbol                                     
3
C2      100n       C-EUC1206       C1206        CAPACITOR, European symbol                                     
4
C3      100n       C-EUC1206       C1206        CAPACITOR, European symbol                                     
5
C4      100n       C-EUC1206       C1206        CAPACITOR, European symbol                                     
6
C5      100n       C-EUC1206       C1206        CAPACITOR, European symbol                                     
7
C6      100n       C-EUC1206       C1206        CAPACITOR, European symbol                                     
8
C7      100n       C-EUC1206       C1206        CAPACITOR, European symbol                                     
9
C8      27p        C-EUC1206       C1206        CAPACITOR, European symbol                                     
10
C9      27p        C-EUC1206       C1206        CAPACITOR, European symbol                                     
11
C10     100n       C-EUC1206       C1206        CAPACITOR, European symbol                                     
12
C11     100µ       CPOL-EUE5-5     E5-5         POLARIZED CAPACITOR, European symbol                           
13
C12     47µ        CPOL-EUE5-5     E5-5         POLARIZED CAPACITOR, European symbol                           
14
C13     100µ       CPOL-EUE5-5     E5-5         POLARIZED CAPACITOR, European symbol                           
15
C14     1n         C-EUC1206       C1206        CAPACITOR, European symbol                                     
16
C15     10µ        CPOL-EUE5-5     E5-5         POLARIZED CAPACITOR, European symbol                           
17
C16                CPOL-EUE5-5     E5-5         POLARIZED CAPACITOR, European symbol                           
18
D1      1N4148     1N4148          DO35-10      DIODE                                                          
19
D2      1N4148     1N4148          DO35-10      DIODE                                                          
20
D3      1N4148     1N4148          DO35-10      DIODE                                                          
21
IC1     MEGA8515-P MEGA8515-P      DIL40        MICROCONTROLLER                                                
22
IC2     74AC02N    74AC02N         DIL14        Quad 2-input NOR gate                                          
23
IC3     74HC74N    74HC74N         DIL14        Dual D type positive edge triggered FLIP FLOP, preset and clear
24
IC4     74HC157N   74HC157N        DIL16        Quadruple 2-line to 1-line data SELECTOR/MULTIPLEXER           
25
IC5     74AC573N   74AC573N        DIL20        8-bit D latch BUS DRIVER                                       
26
IC6                62256P          DIL28-6      MEMORY                                                         
27
IC7                78XXS           78XXS        VOLTAGE REGULATOR                                              
28
IC8     MC34063AP  MC34063AP  DIL08                                                                       
29
JP1                JP1E            JP1          JUMPER                                                         
30
JP2                PINHD-1X4       1X04         PIN HEADER                                                     
31
JP3                PINHD-1X12      1X12         PIN HEADER                                                     
32
K1      AQV21SMD   AQV21SMD        DIL06SMD     PhotoMOS Relay NAiS                                            
33
L1      470µ       L-EU0204/7      0204/7       INDUCTOR, European symbol                                      
34
LED1               LEDCHIPLED_1206 CHIPLED_1206 LED                                                            
35
Q1                 CRYSTALHC49U-V  HC49U-V      CRYSTAL                                                        
36
Q2      BC327      BC327           TO92         PNP Transistor                                                 
37
R1      2,2k       R-EU_M1206      M1206        RESISTOR, European symbol                                      
38
R2      47k        R-EU_M1206      M1206        RESISTOR, European symbol                                      
39
R3      1          R-EU_M1206      M1206        RESISTOR, European symbol                                      
40
R4      47k        R-EU_M1206      M1206        RESISTOR, European symbol                                      
41
R5      3,3k       R-EU_M1206      M1206        RESISTOR, European symbol                                      
42
R6      330        R-EU_M1206      M1206        RESISTOR, European symbol                                      
43
R7      330        R-EU_M1206      M1206        RESISTOR, European symbol                                      
44
R8      100        R-EU_M1206      M1206        RESISTOR, European symbol                                      
45
R9      0          R-EU_0207/10    0207/10      RESISTOR, European symbol                                      
46
R10     0          R-EU_0207/10    0207/10      RESISTOR, European symbol                                      
47
R11     560        R-EU_M1206      M1206        RESISTOR, European symbol                                                                                                             
48
X2                 W237-102        W237-102     WAGO SCREW CLAMP
#1197949
Lesenswert?

Naja der Kondi C16 ist irgendwas zwischen 10µ und 47µ ich hab 22µ 
genommen.
Der Speicher( IC6 ) muss Pinkompatibel zum Layout sein, ich hab den von 
Reichelt genommen. (steht weiter oben welcher das ist)
Der IC7 ist ein 7805 im TO220.
Q1 ist ein 16MHz Quarz.
Led jenachdem was für eine Farbe man will. Ich hab sie gar nicht erst 
bestückt, weil sieht man nach dem Einbau sowieso nicht.

JP1...JP3 sind Lötpads, die haben keinen Wert. Die Anbschlussklemme X2 
auch nicht.

http://www.platinenbelichter.de/ macht dir die Platte zum guten Preis 
allerdings ohne Lötstopp und keine Durchkontaktierung. Ist halt bissel 
mehr gelöte nötig dürfte aber gehen.
Gast #1216297
Lesenswert?

Hallo nochmal,

Wenn ich es ersetze fallen K1 und R8 weg oder? (Ich beziehe mich auf den 
Schaltplan im angehängten PDF)
Was ist R6? 1 Ohm? Wenn ja wieso?
Reichen überall 1/4 Watt Widerstände und 16V Kondensatoren?

Danke für eure Hilfe,
Kain
Gast #1221581
Lesenswert?

Wollte mir den Controller jetzt auch mal nachbauen. Hab aber noch ne 
Frage zum Zuschalten von der Displayspannung.
Irgendwo hieß es mal, man könne bei manchen Displays auf den OptoMosFet 
(bzw. aufs schalten überhaupt) verzichten.

Muss ich jetzt bei diesen beiden Displays
Pollin 120471
Pollin 120460
einen Schalter einbauen, oder kann ich ihn weglassen, weil die Displays 
ja einen DISPOFF eingang haben?

Gruß, Sebastian
Gast #1224624
Lesenswert?

Jetzt hab ich doch noch ein Problem:

Hab die Schaltung nach deinem Plan aufgebaut und auch alles nochmal 
überprüft, aber wenn ich einschalte ist bei mir das ganze Display nur 
gelb. Hab jetzt das weiß-auf-schwarz Display von Pollin.
Das einzige was ich bisher festgestellt hab ist, dass die 
Kontrastspannung von -17V im Leerlauf auf -11 bei angeschlossenem 
Display zusammenbricht. Ist das normal? Hab die Schaltung für die 
Kontrastspannung so wie im ersten Plan aufgebaut. Nur halt den Mosfet 
hab ich nicht drin.

Sebastian
Gast #1224883
Lesenswert?

Hallo nochmal,

ich komm jetzt zwar auf -17 bis -18 Volt Kontrastspannung (auf Masse 
bezogen), aber das Display ist immernoch einfach nur gelb. Im Datenblatt 
steht doch -22V bezogen auf die 5V Versorgungsspannung, also -17 Volt 
bezogen auf Ground.
Sind gute 200mA auf der 5V-Versorgung für die gesamte Schaltung + 
Display normal?

Für alle die's interessiert: Ich hatte die Versorgungsspannung am 
Spannungswandler nicht ausreichend gepuffert und zusätzlich auf meinen 
Versorgungsleitungen so viel Spannungsabfall, dass die ganze Schaltung 
nur noch mit gut 4 Volt lief.

Sebastian
#1224934
Lesenswert?

Sebastian wrote:
> aber das Display ist immernoch einfach nur gelb.

Prüf mal nach ob die Signale vom AVR zum LCD wirklich richtig verdrahtet 
sind oder ob da irgendwo was vertauscht ist, oder ein Kurzschluss ist.

> Sind gute 200mA auf der 5V-Versorgung für die gesamte Schaltung +
> Display normal?

Kommt auf den Stromverbrauch  vom Speicher, den Wirkungsgrad des 
Spannungswandler usw. an. Ich komme auf 100-150mA, grob passt es also.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren