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?
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.
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
Wie sieht es mit externen, "intelligenten" Displaycontrollern aus? Könnten die eine Lösung sein?
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
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...
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
> 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
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
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ß.
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
> 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
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
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)
Dass es zu langsam ist habe ich getestet. Die Stückzahlen sind erstmal nur gering, können aber deutlich steigen.
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.
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
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 :-)
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.
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.