Autor |
VGA mit Microcontroller Suche nach: vga (1369) |
|
|
|
|
BID = 96198
Benedikt Inventar
Beiträge: 6241
|
|
Habe ich doch schon ein paarmal geschrieben: Aus einer ISA Grafikkarte.
Da sind meist 2 28polige ICs drauf. Das eine ist die BIOS (32kB OTP EPROM /Mask ROM) und das andere der RAMDAC.
Eine ISA Grafikkarte anzusteuern ist doch komplizierter als ich dachte:
Die Initialisierung macht die Karte anscheinend selber, zumindest liefert sie die Software dafür in der VGA BIOS. Diese ist natürlich nur für 8086 CPUs... |
|
BID = 96237
MicroTobi Gesprächig
Beiträge: 141 Wohnort: Herrenberg
|
|
Also, dann werde ich mir eine ISA Grafikkarte kaufen. Du weist nicht zufällig, auf welcher ISA Karte sicher so ein RAMDAC verbaut ist? Kann man in so einen RAMDAC die Frabpalette auch laden, wenn man gerade Bilder ausgibt???
Dies könnte ich ja mit einem AVR machen, dann kann sich der SX28 um das Timing kümmern
Würde mich sehr über Hilfe freuen!
Gruß Tobi |
|
BID = 96245
Benedikt Inventar
Beiträge: 6241
|
Zitat :
MicroTobi hat am 29 Aug 2004 13:17 geschrieben :
|
Also, dann werde ich mir eine ISA Grafikkarte kaufen. Du weist nicht zufällig, auf welcher ISA Karte sicher so ein RAMDAC verbaut ist?
|
Auf jeder 16bit ISA Grafikkarte ist einer drauf, schau einfach ob da 2 28polige ICs drauf sind, dann ist einer davon der RAMDAC. Bei Trident Karten kannst du ganz sicher sein.
Zitat :
|
Kann man in so einen RAMDAC die Frabpalette auch laden, wenn man gerade Bilder ausgibt???
|
Ja, 256x RGB zu je 6bit (bei neueren auch 8bit)
Zitat :
|
Dies könnte ich ja mit einem AVR machen, dann kann sich der SX28 um das Timing kümmern
|
Oder das macht dein eigentlich CPU, der auch die Daten an die "Grafikkarte" sendet, denn nur der weiß, was für Farben gerade gebraucht werden.
|
BID = 96303
MicroTobi Gesprächig
Beiträge: 141 Wohnort: Herrenberg
|
Das mit dem CPU macht irgendwie Sinn
Gut, dann brauch ich also nur noch eine ISA Karte und einen SX28. Du weist nicht zufällig, welchen Assembler man dafür braucht???
Würde mich sehr über Hilfe freuen!
Gruß Tobi
|
BID = 96391
MicroTobi Gesprächig
Beiträge: 141 Wohnort: Herrenberg
|
Hi,
Bin gerade am überlegen, welchen Micro ich nehmen soll.
Würde ein SX 28 mit 50Mhz reichen, oder sollte ich lieber einen SX 28 mit 75Mhz nehmen?? Oder gibt es noch andere Micros die schnell genug wären um die Daten zu verwalten. Ich habe nämlich gelesen, dass die SX 28 schwer zu programmieren sind und man sehr leicht Fehler in das Programm machen kann, stimmt das?
Würde mich sehr über Hilfe freuen!
Gruß Tobi
|
BID = 96425
Benedikt Inventar
Beiträge: 6241
|
Zitat :
MicroTobi hat am 29 Aug 2004 20:29 geschrieben :
|
Hi,
Bin gerade am überlegen, welchen Micro ich nehmen soll.
Würde ein SX 28 mit 50Mhz reichen, oder sollte ich lieber einen SX 28 mit 75Mhz nehmen?? Oder gibt es noch andere Micros die schnell genug wären um die Daten zu verwalten. Ich habe nämlich gelesen, dass die SX 28 schwer zu programmieren sind und man sehr leicht Fehler in das Programm machen kann, stimmt das?
Würde mich sehr über Hilfe freuen!
Gruß Tobi
|
50MHz sind etwas knapp, selbst bei 75MHz muss man sehr optimiert programmieren. 640x480 sind ja schon 25MHz Pixeltakt. Ob da 100MHz überhaupt reichen ?
Der Vorteil eines FPGAs/CPLDs ist die parallel Verarbeitung. Während bei einem uC der Pixeltakt, IO, Zeilen/Spaltenzähler usw. alles nacheinander abgearbeitet werden muss, läuft das bei den programmierbaren Logkbausteinen quasi gleichzeitig ab.
Ich habe heute viel Zeit mit der Such nach Infos zum Thema ISA Grafikkarte an uC verbracht (das ist neben programmierbaren Logkbausteinen so ziemlich die einzige machbare Version.)
Ich habe niemanden gefunden, der eine ISA Grafikkarte zum Laufen gebracht hat. Kompatibiliät gibt es keine, der einzige Grund wiso alle doch am PC funktionieren ist die VGA BIOS. Diese sind im Prinzip Grafikkartentreiber für DOS und alles was davor kommt.
Selbst bei den Trident Karten gibt es extreme Unterschiede zwischen den einzelnen Versionen.
So wie es aussieht bleiben doch nur VRAMs. Kannst ja mal versuchen ein paar von alten Matrox PCI Grafikkarten zu bekommen. Die haben meist 256kByte was für 545x480 ausreicht. Und da reicht ein einfacher AVR als Controller aus. Mit 1 MIPS komme ich auf etwa 10MHz Pixeltakt.
|
BID = 96439
MicroTobi Gesprächig
Beiträge: 141 Wohnort: Herrenberg
|
Hi,
545x480 würde mir auch ausreichen. Kann das ein Monitor überjaupt anzeigen??
Den X und y Zähler für die Pixel könnte man doch mit einzelnen Logikbausteinen machen, dann würde ein SX28 doch ausreichen, falls das geht?
zu ISA:
Theorethisch müsste man doch aus dem DOS Code die ansteuerung auslesen können. Nur hab ich keine Ahnung wie das geht
Würde mich sehr über Hilfe freuen!
Gruß Tobi
|
BID = 96526
MicroTobi Gesprächig
Beiträge: 141 Wohnort: Herrenberg
|
Hi,
Was für ein FPGA oder CPLD würde sich denn für eine Grafikkarte anbieten? Würde so ein 4€ IC von Xillinx reichen?
Würde mich sehr über Hilfe freuen!
Gruß Tobi
|
BID = 96591
Benedikt Inventar
Beiträge: 6241
|
Den BIOS Code habe ich, bei der VGA BIOS ist das etwas schwieriger, da hier die Adressleitungen vertauscht sind, und somit die Bytes bim (richtig angeschlossenen) Auslesen vertauscht sind.
Von CPLD und FPGA habe ich auch keine Ahnung, was jetzt dafür ausreicht aber für so einfache Aufgaben sollten auch kleinere reichen.
Dem Monitor ist es übrigends vollkommen egal ob er 1x480 oder 1000000000x480 anzeigt, solange die Zeilen und Bildfrequenz passen.
Ich fasse mal alles zusammen:
a) ISA Grafikkarte:
Die Ansteuerung ist schwieriger als anfangs vermutet, daher wohl kaum möglich.
b) Mehrere SRAMs an diskretem Zähler/CPLD/FPGA:
Verdammt aufwendig (8x schnelle SRAMs usw.) Viel Logik notwendig usw. Schlecht machbar.
c) VRAMs:
Relativ einfach, da es ein DualPort RAM ist, also gleichzeitig Lese und Schreibzugriffe möglich sind. Ein AVR schafft es den Datenpuffer für die Ausgabe immer gefüllt zu halten, und gleichzeitig neue Daten einzulesen. Das ganze Sync Timing läuft nebenher.
d) FIFO:
Das einfachste, da der AVR nur das Sync Timing machen muss. Eigentlich ist ein FIFO ein Ringpuffer mit getrenntem Schreib und Lesezähler. Viele FIFOS haben eine Retransmit Funktion, mit der man das FIFO kontinuierlich ausgeben kann. Dazu benötigt man nur den Pixel Takt !
Leider sind die etwas teurer, aber ein 256kByte FIFO wäre die optimale Lösung.
|
BID = 96601
MicroTobi Gesprächig
Beiträge: 141 Wohnort: Herrenberg
|
Hallo,
Die Lösungen c) und d) sind wohl die einfachsten von den 4en. Trotzdem finde ich Lösung b) immernoch am besten. Wenn man es mit einem RAMDAC macht, so wie du gesagt hast, würden ja schon 4 SRAMS mit 60ns ausreichen! Die Zähler könnte man ja vielleicht doch mit irgendwelchen 74... Zählern machen und den Rest mit irgendeinem Microcontroller!!
Das würde zwar mehrere Platienen in Anspruch nehmen, aber ich glaube, dass des die beste Lösung wäre! Ein Vorteil ist mir noch eingefallen, wenn man die Graka mit 2 Speichern aufbaut:
Wenn man ein Bild in Speicher 1 ablegt und ein anderes in Speicher 2 und nun immer zwischen diesen wechseln will, müsste man einen einzelnen Speicher immer wieder neu beschreiben. Wenn man aber 2 Speicher hat, brauch der CPU nur einen Befehle wie "Speicherwechseln" geben und dann Bild wird getauscht
Würde mich sehr über Hilfe freuen!
Gruß Tobi
|
BID = 96611
Benedikt Inventar
Beiträge: 6241
|
Um die SRAMs umzuschalten benötigt man aber alleine schon 4x 74HC245 (oder schneller) pro SRAM, macht alleine schon 16x 74HC245. Insgesamt werden das mindestens 30 ICs, und lange Leitungen bei den hohen Frequenzen: Unmöglich.
Den ganzen Zähleraufwand kann man sich sparen, wenn man d) wählt:
Ein 256kx8 Field Memory von OKI wäre genau das richtige:
Kostet 10-20€, hat aber 30ns Taktrate, also max 33MHz, was für 545x480 reicht.
Da man die Daten aber nur effektiv von links oben nach links unten schreiben kann, am besten noch ein 512k SRAM am AVR, das als normaler Bildspeicher dient. Der AVR dient dann als Display Controller und besitzt Funktionen wie SetPixel, Line, Text usw.
Mit einem Befehl wird dann der komplette Speicher ins FIFO geschrieben. Mit ein paar Tricks schafft er das auch in wenigen ms. Da der AVR ansonsten nicht viel zu tun hat, erledigt er das restliche Sync Timing nebenher.
Ich werde das mal ausprobieren, und mit etwas Glück kann ich dir heute Abend oder morgen ein kleines Testprogramm schicken, das ein einfaches Muster auf einem Monitor anzeigt.
|
BID = 96619
MicroTobi Gesprächig
Beiträge: 141 Wohnort: Herrenberg
|
Wäre echt super wenn das funktionieren würde!!!
Die Idee mit dem line, setpixel, text usw. ist perfekt!!
Wenn man anstatt eines AVR einen SX28(50Mhz) nimmt, könnte man die ganze Berechnung noch beschleunigen, oder bringt das nicht mehr viel, da der SRAM eh nicht so schnell ist??
Mit mehr Leistung könnte mand ann vielleicht auch Befehle wie elipse usw. machen!
Würde mich sehr über Hilfe freuen!
Gruß Tobi
|
BID = 96639
Benedikt Inventar
Beiträge: 6241
|
Elipse ist das einfachste, da ist eine gerade Linie schwerer !
Der Algorithmus zum Berechnen einer Linie ist nur eine Abwandlung von der für den Kreis...
|
BID = 96730
MicroTobi Gesprächig
Beiträge: 141 Wohnort: Herrenberg
|
Achso,
Mann könnte also alle "D Befehle verwirklichen, die es auch in Basic gibt
Was würde die Graka dann schätzungsweise kosten?
Würde mich sehr über Hilfe freuen!
Gruß Tobi
|
BID = 96761
Benedikt Inventar
Beiträge: 6241
|
Das teuerste ist der 256k DRAM FIFO. Bei Farnell etwa 16€.
Ansonsten braucht man nur noch einen AVR (z.B. AT90S8515), einen 512k Bildpuffer und noch ein oder zwei HCMOS ICs, grob geschätzt etwa 25€.
Leider habe ich nur ein paar 5k FIFOs da, sonst hätte ich es mal ausprobiert. Auf einem TV läuft das aber problemlos mit einem VRAM.
Im Anhang mal ein kleines Testprogramm für ein einfaches Monitorbild, erzeugt mit einem AT90S1200...
Die Sync Anschlüsse hängen an PortD 0 und 1 und RGB über 470Ohm an PortB 0-2
|