Forum: Mikrocontroller und Digitale Elektronik "Kleiner" Mikrocontrollrt für VGA-Display


von Thomas (Gast)


Lesenswert?

Ich möchte ein VGA-Display mit einem Mikrocontroller ansteuern, um damit 
Messwerte grafisch darzustellen und ein einfaches Menü sollte auch noch 
dabei sein. Ich habe mir mal verschiedene Demos mit Arm7 und Cortex-M3 
mit integriertem LCD-Controller (u.A Stm32 und Lpc24xx) angesehen, deren 
Grafikausgabe ist für meine Anwendung aber zu langsam. Muss ich gleich 
was deutlich größeres nehmen (wie bei den Smartphones) oder gibt es was 
"dazwischen" mit schnellem Displaycontroller, aber halt doch noch 
handlötbar?

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Thomas schrieb:
> oder gibt es was
> "dazwischen" mit schnellem Displaycontroller, aber halt doch noch
> handlötbar?

Ja, gibt es. P8X32A vom Parallax. Den gibt es sogar im DIL Gehäuse.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Thomas schrieb:
> Ich möchte ein VGA-Display mit einem Mikrocontroller ansteuern, um damit
> Messwerte grafisch darzustellen und ein einfaches Menü sollte auch noch
> dabei sein. Ich habe mir mal verschiedene Demos mit Arm7 und Cortex-M3
> mit integriertem LCD-Controller (u.A Stm32 und Lpc24xx) angesehen, deren
> Grafikausgabe ist für meine Anwendung aber zu langsam. Muss ich gleich
> was deutlich größeres nehmen (wie bei den Smartphones) oder gibt es was
> "dazwischen" mit schnellem Displaycontroller, aber halt doch noch
> handlötbar?

Was heißt "zu langsam"? Bedenke das ein VGA-TFT bei 8 Bit Farbtiefe 
(also 256 Farben) schonmal 18MB/s Speicherbandbreite nur für den Refresh 
haben will. Dann hast du aber noch nichts auf das Display geschrieben. 
640x480 sind auch ~300kB RAM wenn du einen kompletten Frame im Speicher 
haben willst. Da ist dann meist schon rum mit internem RAM. Externes 
SRAM gibt die nötige Bandbreite kaum her. Heißt also SDRAM. Ich denke 
wenn du VGA willst solltest du auf ein fertiges Modul mit >= ARM9EJS 
setzen. Alles andere artet in jeder Menge Hardwarearbeit oder ekligen 
Softwaretricks aus. Bedenke aber auch das diese Klasse dann auch recht 
komplex ist. Oftmals haben diese Controller schon mehr 
Peripherieregister für die Taktsteuerung als ein AVR insgesamt hat.

Matthias

von John B. (johnbauer)


Lesenswert?

VGA-Grafik und Sound-Demo auf ATmega88
http://www.youtube.com/watch?v=sNCqrylNY-0

von Thomas (Gast)


Lesenswert?

Wie sieht es mit externen, "intelligenten" Displaycontrollern aus?
Könnten die eine Lösung sein?

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

das sind die ekligen Softwaretricks :-) Geniale und beeindruckende Demo, 
keine Frage. Aber eben nur eine Demo und für eine reale Anwendung doch 
eher ungeeignet.

Matthias

von abcdefgh (Gast)


Lesenswert?

Das Problem wird die Speicherbandbreite sein. Alleine für die 
Bildausgabe brauchst du ordentlich Bandbreite, gleichzeitig sollte der 
Speicher ja noch mit neuen Frames beschrieben werden können...

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Thomas schrieb:
> Wie sieht es mit externen, "intelligenten" Displaycontrollern aus?
> Könnten die eine Lösung sein?

Ja, sicher. Aber auch da gelten die gleichen Randbedingungen. Ich würde 
wirklich den Weg gehen ein entsprechendes vorgefertigtes Board zu 
verwenden. VGA ist eben nicht QVGA. Da siehts dann gleich viel 
entspannter aus.

Matthias

von Olaf (Gast)


Lesenswert?

> Dann hast du aber noch nichts auf das Display geschrieben.
> 640x480 sind auch ~300kB RAM wenn du einen kompletten Frame im Speicher
> haben willst. Da ist dann meist schon rum mit internem RAM. Externes
> SRAM gibt die nötige Bandbreite kaum her. Heißt also SDRAM.

Renesas SH7262, internes 1MByte Ram, Interface zum Display, DMA, 
DualPort-Ram. Damit kann man sowas auf einer selbstgebastelten 
zweilagigen Platine hinbekommen. Von Hand loeten geht auch, aber man 
braucht schon eine Lupe. :-)

> Wie sieht es mit externen, "intelligenten" Displaycontrollern aus?
> Könnten die eine Lösung sein?

Fuer QVGA gibt es relativ viel mit SD1335 und seinen Nachfolgern. Aber 
wenn man VGA und Farbe will dann braucht man ja auch ein bisschen was 
Rechenleistung. Diese Controller haben dann immer ein dickes Gehaeuse 
mit kleinen Pins weil das niemanden stoert ausser ein paar Bastlern. 
Aber fuer Bastler designt man keine Microcontroller.
Der von mir so geschaetzte SH7262 ist da schon ein guter Kompromiss. Der 
hat zwar auch ein dickes Gehaeuse, aber immerhin braucht man kein 
externes Ram.

Olaf

von Olaf (Gast)


Lesenswert?

Hier noch eine andere Moeglichkeit:

http://am.renesas.com/applications/key_technology/human_interface/lcd_direct_drive/lcd_direct_drive.jsp

http://am.renesas.com/products/tools/introductory_evaluation_tools/renesas_starter_kits/ylcdrskrx62ns/ylcdrskrx62ns_root.jsp

Wenn du nur ein Stueck zum basteln brauchst dann kannst du dir ein 
Demokit kaufen wo der Hersteller fuer dich bereits Controller+Ram auf 
eine Platine gepappt hat.
Diese Loesungsansatz ist etwas teurer weil sich solche Boards an eine 
andere Zielgruppe wenden. Aber dafuer kannst du da direkt nach dem 
auspacken irgendeine mitgelieferte Demosoftware starten und siehst was 
auf dem Display. Wenn du alles selber machst ist es bis zu diesem Punkt 
naemlich ein weiter Weg. .-)

Olaf

von Joerg F. (felge1966)


Lesenswert?

In der elektor Mai 2011 war eine Lösung mit einem dsPIC drin.
http://www.elektor.de/jahrgang/2011/mai/vga-grafikkarte.1780074.lynkx
Die Karte nutzt den Text-Modus (60 Zeilen mit 64 Zeichen à 8 bits) und 
den Grafik-Modus(512 x 480 Pixel) gleichzeitig. Die Daten werden per 
RS232 mit bis zu 115K Baud angenommen.

Eventuell wäre das schon ein Denkanstoß.

von Reinhard Kern (Gast)


Lesenswert?

Thomas schrieb:
> Ich möchte ein VGA-Display mit einem Mikrocontroller ansteuern

Ich weiss ja nicht, welche Stückzahlen du produzieren willst, aber bei 
der Entwicklung könntest du dir viel Arbeit sparen, wenn du eine 
Einfachst-PC-Platine und ein Embedded Linux verwendest. Auch über 
Tablett-PCs könnte man nachdenken.

Gruss Reinhard

von Olaf (Gast)


Lesenswert?

> Auch über Tablett-PCs könnte man nachdenken.

Das ist prinzipiell eine sehr gute Idee. Ich verwende ja
auch immer alte Palmpiloten wenn ich was basteln moechte wo ich
ein groesseres GrafikLCD brauche.

Aber das Problem das ich mit aktuellen Tabletten habe, es gibt
keinen halbwegs bastelfreundlichen Weg um da eigene Hardware
dranzustecken. Ausser vielleicht man findet eins das als USB-Master
arbeiten kann.

BTW: Manche Geraete haben ja heute eine HDMI Schnittstelle. Hat es 
schonmal einer geschafft den darin integrierten I2C-Bus getrennt zu 
verwenden?

Olaf

von Reinhard Kern (Gast)


Lesenswert?

Olaf schrieb:
> Aber das Problem das ich mit aktuellen Tabletten habe, es gibt
> einen halbwegs bastelfreundlichen Weg um da eigene Hardware
> dranzustecken.

In die eigene Hardware einen FTD232 oder ähnliches einbauen und den 
USB-Anschluss benutzen, Kommunikation über die (verborgene) serielle 
Verbindung - ist wohl am einfachsten, und der FTD nimmt auch nicht viel 
Platz weg. Geht dann auch sowohl am PC als auch am Tablett.

Gruss Reinhard

von m.n. (Gast)


Lesenswert?

Thomas schrieb:
> deren Grafikausgabe ist für meine Anwendung aber zu langsam.

Glaubst Du das oder weißt Du das?
Und wenn ja oder nein, wie schnell muß es denn sein?
Bei geschickter Anordnung paßt auch Einiges auf ein QVGA und ist ohne 
Brille lesbar. (Annahme: 5,7" TFT)

von Thomas (Gast)


Lesenswert?

Dass es zu langsam ist habe ich getestet. Die Stückzahlen sind erstmal 
nur gering, können aber deutlich steigen.

von m.n. (Gast)


Lesenswert?

Thomas schrieb:
> um damit
> Messwerte grafisch darzustellen und ein einfaches Menü sollte auch noch
> dabei sein.

Dazu bedarf es doch keiner großen Geschwindigkeit, die die eines 
Cortex-M3 übersteigt. Bewegte Bilder brauchen Prozessorleistung, aber 
doch keine statischen Anzeigen.
Vielleicht hilft es, die Berechnungen zu optimieren.

von Christian B. (casandro)


Lesenswert?

Moment mal, so ein ATMega8 mit 16 MHz hat über 32 Megabyte pro Sekunde 
Speicherbandbreite, denn er kann einen Befehl pro Sekunde ausführen. Da 
werden 16 Bit aus dem Flash gelesen, und Du kannst bis zu 5 Bit auf 
einen Port ausgeben.


Mit 20 MHz schaffst Du 503 Pixel pro Zeile, da eine Zeile 25.17 µs lang 
ist. (sichtbarer Bereich)

Da Du ja eine sehr eingeschränkte Anwendung hast, mach doch einfach 
folgendes:

Teile den Bildschirm vertikal auf. Beispielsweise oben in großen Zahlen 
Deinen Messwert, unten in hoher Auflösung Dein Menü.

Dann mach die Zahlen so, wie es in den ganzen AtMega Video Projekten 
erklärt wird, beispielsweise mit Hilfe des SPIs. Damit bekommst Du 
ungefähr 20 Zeichen pro Zeile hin.

Für das Menü teilst Du den unteren Bereich in mehrere Teile auf. Du 
definierst 2 Register, beispielsweise mit den Namen "text" und 
"hintergrund".
Die Menüpunkte selbst gestaltest Du als Bitmap. Für jede Zeile wandelst 
Du jeden Pixel in einen Out-Befehl um. Das sieht dann beispielsweise so 
aus:

menuepunkt_irgendwas_zeile_00:
  OUT PORTA,hintergrund ;Zeile 0 Pixel 0
  OUT PORTA,text        ;Zeile 0 Pixel 1
  OUT PORTA,text        ;Zeile 0 Pixel 2
  ...
  OUT PORTA,hintergrund ;Zeile 0 Pixel 132
 ret

Die Routine in der die Zeile ausgeben wird (normalerweise wird das von 
einer ISR aufgerufen), schaut dann ungefähr so aus:

menue_zeile_00:
  <Befehle um festzustellen ob Menuepunkt irgendwas angezeigt wird>
  call menuepunkt_irgendwas_zeile_00
  <Befehle um festzustellen ob Menuepunkt apfelkuchen angezeigt wird>
  call menuepunkt_apfelkuchen_zeile_00
  ....
 ret

Die Befehle dazwischen laden beispielsweise 2 Werte aus dem Speicher in 
die Register. Einer gibt die Farbe des Textes, der andere die Farbe des 
Hintergrundes an. Du hast für beide bis zu 256 Möglichkeiten, je nach 
Beschaltung Deines DA-Wandlers.

Im Hauptprogramm sagst Du dann einfach:
  LDI r16, 255 ;Farbe 255 zum Beispiel weiß
  STS menuepunkt_irgendwas_t,r16 ;Speicherstelle für Textfarbe 
"Irgendwas"
  LDI r16, 0; Farbe 0 zum Beispiel schwarz
  STS menuepunkt_irgendwas_h,r16 ;Hintegrund für "Irgendwas"

Wenn Du wirklich 640 Pixel haben möchtest, so kannst Du auch am Ausgang 
einen simplen Multiplexer anbringen welchen Du mit dem µC Takt 
schaltest. (den kannst Du bei vielen AtMegas über einen Portpin ausgeben 
lassen)
Dann hättest Du jedoch 4 Register und nur noch 16 Farben. Die Register 
wären dann für alle 4 Pixelkombinationen aus Text und Hintergrund.

Du brachst dann eine Taktfrequenz von 12.5875 MHz

von m.n. (Gast)


Lesenswert?

Christian Berger schrieb:
> Moment mal, so ein ATMega8 mit 16 MHz

Damit ist er gut geeignet, den touchscreen eines VGA-TFTs auszuwerten, 
aber mehr auch nicht :-)

von GB (Gast)


Lesenswert?

Also, der EP9307 und der EP9315 von Cirrus Logic sollten das können, was 
du möchtest.
Die haben ausser einem LCD-Controller, der schnell genug für diese 
Aufgben ist, noch einen Grafik-Beschleuniger an Bord.

von Jürgen (jliegner)


Lesenswert?

Vielleicht könnte das ja was für dich sein:

http://www.tigal.com/product/2037


da kannst du jeden kleinen mc mit 3 Drähten anschließe und große Klötze 
auf den VGA-Schirm malen. Ich benutze hier ein Display des selben 
Herstellers mit dem selben Befehlssatz an einem Cortex M3. Das spart 
eine Menge Arbeit wenn man mal eben ein tft für Basteleien braucht.

von W.S. (Gast)


Lesenswert?

Jürgen Liegner schrieb:
> wenn man mal eben ein tft für Basteleien braucht

Und was machst du dann mit einem VGA-TFT, wenn du nicht in den BWSP 
direkt hineingreifen kannst und nur an einer seriellen Nabelschnur 
hängst?

Ich halte all diese Produkte für Mumpitz, der nur auf Bastlerseelen 
abzielt. Da sieht einer so ein Produkt, liest "VGA" und 
"hochleistungsfähig" und "paßt an jeden Controller" und denkt sich 'ach, 
da könnte man ja..' - aber in der Realität ist das wie bei einem 
Handy-Dummy mit aktivem Display: Das blinkert auch, und da könnte man 
ja.. - aber telefonieren geht trotzdem nicht.

W.S.

von Jürgen (jliegner)


Lesenswert?

Hallo, komm mal bitte wieder etwas runter. Es hat niemand erwartet 
darüber Videos abzuspielen oder der gleichen. Trotzdem gibt es sinnvolle 
Anwendungen. Und wenn es nur die Anzeige von Messwerten ist die über 
größere Entfernungen gelesen werden sollen. Dann ist ein 21" Display der 
100€ Klasse in Verbindung mit dem Konverter für 35€ eine unschlagbar 
günstige Kombination. Ich will für diese Aufgaben nicht in den BWSP 
reinschreiben sondern sagen: Schreibe diesen String in der Farbe an die 
Position. Ein paar Grafikbefehle zum Zeichen  von Linien und Rechtecken 
und gut ist. Also alles das was auch in eine Grafiklib kommt wenn das 
Display direkt angeschlossen ist. Die muss ich dann aber erst mal 
schreiben oder irgendwo hernehmen.
Vom gesparten Entwicklungsaufwand will ich gar nicht reden.
Die Anforderung von Thomas waren: Messwerte ausgeben und ein einfaches 
Menü. Also genau das was so ein Teil kann. Mit einem Display dran, das 
als Massenware überall zu haben ist.
Hinzu kommt, dass Bilder die sich auf der SD-Karte des Adapters befinden 
auch ausgegeben werden können. Da kann man dann bei geschickter 
Programmierung optische Sachen machen die nicht unbedingt billig 
aussehen müssen. Zum Ansteuern reicht der kleinste AVR. Und ein Punkt 
kommt noch hinzu. Ich habe den MC fast für mich alleine und für die 
Aufgaben um die es geht. Hier ordnet sich die Grafikausgabe meinem 
Programm unter und nicht umgekehrt.

von Uwe N. (ex-aetzer)


Lesenswert?

m.n. schrieb:
> Damit ist er gut geeignet, den touchscreen eines VGA-TFTs auszuwerten,
> aber mehr auch nicht :-)

Selbst das wird schwierig: der im AVR eingebaute ADC hat 10Bit, wobei 
ich eher nur 9 Bit davon max.verwenden würde (das LSB zappelt zu sehr), 
was bedeutet, das dass Display eine max. Auflösung von 512 Pixeln (egal 
ob X oder Y) haben darf/ sollte.
Zumindest, wenn der Touch halbwegs Pixelgenau sein soll ...

Gruss Uwe

von m.n. (Gast)


Lesenswert?

Uwe N. schrieb:
> Zumindest, wenn der Touch halbwegs Pixelgenau sein soll ...

Das ist ein schöner Traum, den ich auch einmal hatte :-)
Es geht nicht, weil zum einen die Abstandshalter der XY-Folien (spacer) 
dies verhindern und zum anderen deren Widerstände nicht linear und 
temperaturstabil sind. Wenn man 2-3 Pixel genau erreicht ist es gut; 
ansosnten würde ich von 1% ausgehen (bei 5,7" Anzeigen).

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.