Forum: Mikrocontroller und Digitale Elektronik Umsetzung "Grafikkarte"


von Michael D. (etzen_michi)


Lesenswert?

Ich habe vor ein kleines Display (160x128px 18bit) zu verwenden.

Um mir ein wenig Prozessorlast zu sparen und dennoch ein schönen 
schnellen Bildaufbau zu haben dachte ich, das es wohl am besten wäre, 
wenn ich dieses über einen FPGA / CPLD mache.


Nun meine Vorstellung:
Der FPGA / CPLD bekommt einen Speicher bisschen mehr als 2x der Größe 
des Bildinhaltes.

Am Anfang des Speichers wird das "Hintergrundbild" gespeichert.
Danach kommen mehrere kleine "Bilder" ca. 8x8px.

Desweiteren gibt es eine Tabelle in welcher steht an welchen Positionen 
die Bilder im Speicher hinter dem Hintergrund im Bild über den 
Hintergrund geschrieben werden sollen.
Auch können in dieser Tabelle Linien und Rechtecke angegeben werden.


Somit könnte man Cursor // Schriftarten / häufige Muster "einfügen" ohne 
diese bei jeder Bewegung / Veränderung neu schreiben zu müssen.


Nun meine Frage:
Ist der Gedankengang so machbar oder gibt es bessere / andere Lösungen.

von netseal (Gast)


Lesenswert?

Ist aber schon eine ganze Menge aufwandt.

Aber durchaus. Ich hatte mal ein Display, welches immer 8Bit in Spalten 
wollte. So musste ich mir die 8Bit im Puffer immer zusammensuchen. Das 
könnte der CPLD machen. Aber dann benötigst du vielleicht eine SPI um 
mit dem Controller zu kommunizieren und das Display-Interface musst du 
auch implementieren.

von Frank M. (frank_m35)


Lesenswert?

Also so wie ich das verstanden habe willst du ein Spiel programmien mit 
festem Hintergrundbild auf dem sich Sprites bewegen.

Da die Auflösung sehr gering ist:
Was spricht gegen einen uC mit einer eingebauten 'Grafikkarte' und 
genügend RAM?
Bspw. bei PICs (hier werden aber auch um mögliche Alternativen 
aufgelistet, und bei anderen Herstellern wird es sicherlich ähnliches 
geben):
http://www.microchip.com/pagehandler/en-us/technology/graphics/technology.html
http://www.microchip.com/pagehandler/en-us/technology/graphics/products/home.html

von Michael D. (etzen_michi)


Lesenswert?

Gegen PIC spricht, das ich mit Atmel aufgewachsen bin, und daher erstmal 
dort bleiben möchte.

Desweiteren habe ich bereits angefangen mich mit dem AT32 aus einander 
zu setzen.


Theoretisch würde dieser µC es auch schaffen, das Display zu verwalten. 
Ich möchte mir aber freihalten ggf. stark Leistungshungrigen Code zu 
verwenden, ohne dass der Bildaufbau darunter leiden muss.


Bzgl. deiner vermutung eines Spieles:
Spiele sollen später auch kommen.
Erstmal geht es um sowas wie einen "Desktop", Menuehintergründe.

Das ganze soll primär als Schnittstelle bzgl. eines Hausbusses dienen, 
aber auch Audio/Video abspielen können (wird ein mobiles Gerät).

von Frank K. (fchk)


Lesenswert?

Michael D. schrieb:
> Gegen PIC spricht, das ich mit Atmel aufgewachsen bin, und daher erstmal
> dort bleiben möchte.

Soso. Du möchtest also nicht den Videobeschleuniger des PIC24FJ256DA210 
benutzen, der selber ohne Prozessorhilfe Pixel verschieben und füllen 
kann.

Ich bin mit Z80 aufgewachsen, weißt Du. Das ist aber schon fast 35 Jahre 
her. Ein paar Jahre später kamen 6502, 68k, 8086 dazu. Es schadet gar 
nichts, mal den Blickwinkel zu wechseln. Das hilft gegen Verbohrtheit 
und hilft, optimale Lösungen zu finden. Und ich tippe mal, dass die 
Einarbeitung in PIC24 (der so gut wie gar nichts mit den 8 Bit PICs zu 
tun hat) Dir einfacher fällt als die Einarbeitung in VHDL. Und einen 
neuen Programmer brauchst Du ohnehin.

fchk

von Michael D. (etzen_michi)


Lesenswert?

Vergleichen wir mal den von dir angebotenen PIC24FJ256DA210 mit dem 
aktuell eingeplanten und schon fast fertig gerouteten AT32UC3B0512:

CPU 16MHz vs. 60MHz
Programm Memory 256kB vs. 512kB
Ram: 98kB vs. 96kB
PinCount 100 vs. 64
D/A Wanlder: keine vs. 2x 16Bit
DMA Channel: 2 vs. 7
Stromverbrauch: 18mA vs. 5,3mA


Umgebung:
Akkubetrieb, geringer Platz.

Pro AT32:
CPU >3x Takt bei gleichem Stromverbrauch
Doppelter Speicher
Halb so viele Pins
D/A Wandler Onboard (Grund für meine Whl dieses Chips)

Pro PIC:
Hardware für Ram und Display

von Frank M. (frank_m35)


Lesenswert?

wieder kann ich nur von PICs reden, da ich die eben nutze:
Microchip bietete eine komplette Bibiliothek für deinen Einsatzzweck an, 
die dir erlaubt Objekte wie Buttons, Bilder, Graphen, ... zu erstellen 
und Objektorientiert anzusprechen:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en543091
Präsentation als PDF zum Aufbau:
http://www.microchip.com/stellent/groups/SiteComm_sg/documents/DeviceDoc/en542831.pdf
Beispielvideo (16-Bit):
http://www.youtube.com/watch?v=rFWVKqY8jWA
Beispielvideo auf einem 32-Bit PIC:
http://www.youtube.com/watch?v=9vf2dAW3Uc4
Simple Anwendung der Library in einem Starter-Kit (16-Bit) (paar Spiele, 
Potispannung grafisch auslesen, ...) (Source Code ist frei verfügbar):
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en535092

Eine kurze suche bei Atmel brachte mich zu einem Widget Toolkit
http://asf.atmel.com/docs/latest/uc3a/html/group__wtk__group.html
Das wahrscheinlich ähnliches macht. Beispielcode musst du hier aber 
selber suchen, da ich nicht weiß was Atmel da anbietet.

Generell denke ich aber wird der Weg über diese Libraries der vor allem 
für deinen Zweck sinnvollere sein.

Bzgl. deinem Vergleich:
Ich wusste nicht dass du solch einen großen 32-Bit uC verwendest, da 
dann die Auslagerung der Grafik bei solch einem winzigen Display maßlos 
übertrieben ist, zumal du ja auch mit deinem AVR genug RAM hast und da 
nichts auslagern musst.

Willst du ihn mit einem PIC vergleichen, so vergleiche ihn bitte auch 
mit einem 32-bit PIC und nicht einem 16-bit, der dann wieder einen 
selben Leistungsumfang hat.
bspw. (wild ausgewählt) PIC32MX795F512L mit 125 DMIPS, 128kb RAM, etc.

Jedoch zwingt dich niemand zu PIC zu wechseln, ich kann halt nur von 
PICs sprechen da ich die benutze, aber ATMEL bietet ja ähnliches an 
(widget toolkit) Wie gut, keine Ahnung.

btw. dein AVR verbraucht laut Atmel Homepage 23mA @ 3.3V @ 60Mhz
http://www.atmel.com/devices/at32uc3b0512.aspx

von Fpgakuechle K. (Gast)


Lesenswert?

Frank K. schrieb:
> Michael D. schrieb:
>> Gegen PIC spricht, das ich mit Atmel aufgewachsen bin, und daher erstmal
>> dort bleiben möchte.

> Ich bin mit Z80 aufgewachsen, weißt Du. Das ist aber schon fast 35 Jahre
> her. Ein paar Jahre später kamen 6502, 68k, 8086 dazu.

Deine Erinnerungen täuschen dich, der 6502 war zuerst, die anderen 
folgten kurz danach:

6800 1974
6502 1975
Z80  1976
8086 1978
68k  1979


MfG,

von Michael D. (etzen_michi)


Lesenswert?

Das Auslagern der Grafik soll mehr ein Projekt sein als ein nötiges 
Mittel. Voteil dabei ist, dass auch noch alles sauber läuft, wenn ich 
mal nicht soo sauber geschriebene Programme laufen habe.


Den Strombedarf habe ich aus dem Datenblatt der AT32UC3B Serie, welcher 
auf Seite 615 mit 18,5mA @ 60Mhz angegeben ist.

Für 16MHz steht als Formel 0,3x16MHz+0,443mA.

Bzgl. der Bibliotheken, ist es so das ich immer gerne 100% Code selber 
schreibe.
Die einzigen Codeteile, die ich nicht selber schreibe sind die "Delay" 
sowie EEPROM zugriffe.


VHDL brauch ich eig. nurnoch wieder auf zu frischen, habe ich bereits 
mit gearbeitet gehabt.


Bei deinem 32Bit PIC gefällt mir die Ethernet Schnittstelle, allerdings 
würden mir hier wieder die DA Wandler fehlen.
Sobald es sich lohnt eher einen PIC anstelle eines Atmel zu verwenden, 
werde ich mich da auch umschauen, aber wozu wenn das auch alles mit dem 
Atmel geht, wo ich den Programmer habe und mir keinen neuen anschaffen 
brauch.


Edit:
Sehe gerade, das ich den Stromverbrauch eines bis 256kB Chips verwendet 
hatte.
Beim 512er sind es 24mA @ 60MHz und ~7,3mA @ 16MHz

von Frank K. (fchk)


Lesenswert?

Michael D. schrieb:
> Vergleichen wir mal den von dir angebotenen PIC24FJ256DA210 mit dem
> aktuell eingeplanten und schon fast fertig gerouteten AT32UC3B0512:

Man fängt natürlich erst dann zu routen, wenn ALLE technischen Details 
stehen.

Brauchst Du die CPU-Leistung wirklich?

> D/A Wanlder: keine vs. 2x 16Bit

16 Bit aus einem mit digitalem Rauschen verseuchten Controller? Die 
letzten 3-4 Bit wirst Du wohl wegwerfen können - das ist so meine 
Vermutung. Ist das für Audio? In Handys werden dafür normalerweise 
externe I2S/TDM-Codecs verbaut, die gleich noch einen Class D bzw Class 
G Verstärker für einen kleinen Speaker bzw Headphones haben. Weil sie 
extern sind, kann man sie so platzieren und beschalten, dass sie 
möglichst wenig noise aufnehmen.

> Stromverbrauch: 18mA vs. 5,3mA
Der Stromverbrauch ist bei CMOS-Schaltungen immer proportional zum Takt. 
Das Display wird Dir den Stromverbrauch allein schon durch den Zugriff 
auf den Bildspeicher hochtreiben. Das ist einfach so. Auch ein FPGA wird 
Dir den Stromverbrauch in die Höhe treiben, und das alleine schon durch 
die hohe Anzahl an Transistoren, von denen Du vielleicht 20% für Deine 
Funktionalität brauchst. Du musst immer das Gesamtsystem sehen und nicht 
nur Deinen Prozessor.

TIP: Wenn Du die Rechenleistung wirklich brauchst und eine hohe 
Grafikleistung haben willst, nimm einen Controller mit integriertem 
TFT-Controller. Wenn der PIC24 nicht reicht (ich kenne Deine 
Anforderungen nicht), dann wirds eben ein NXP LPC1850 oder so werden 
müssen. Alternative: Energy Micro Giant Gecko, sehr sparsam, da gibts 
auch Versionen mit integrierten TFT-Controller.

Wenn Du Deinen AVR32 behalten willst, dann nimmst Du am Besten ein 
Display mit integriertem Controllerchip (z.B. ILI93xx) und integriertem 
Speicher und 8080/6800 Memory Businterface. Diese Teile sind allerdings 
langsam, weil der Prozessor nur indirekten Zugriff auf den 
Grafikspeicher hat (Index/Datenregister). Und: Kein Grafikbeschleuniger, 
der Prozessor muss alles machen, Dein FPGA darfst Du streichen (was aber 
auch Deinen Strombedarf senkt).

Mir kommt das alles so vor, als würdest Du irgendwie nicht zu Ende 
denken, sondern einfach loslegen, und Dich dann beschweren, dass Du am 
Ende Arbeit doppelt und dreifach gemacht hast. Unprofessionell.

fchk

von Frank K. (fchk)


Lesenswert?

Fpga Kuechle schrieb:
> Frank K. schrieb:
>> Michael D. schrieb:
>>> Gegen PIC spricht, das ich mit Atmel aufgewachsen bin, und daher erstmal
>>> dort bleiben möchte.
>
>> Ich bin mit Z80 aufgewachsen, weißt Du. Das ist aber schon fast 35 Jahre
>> her. Ein paar Jahre später kamen 6502, 68k, 8086 dazu.
>
> Deine Erinnerungen täuschen dich, der 6502 war zuerst, die anderen
> folgten kurz danach:
>
> 6800 1974
> 6502 1975
> Z80  1976
> 8086 1978
> 68k  1979

Aber nicht für mich. Ich hatte zuerst eine Z80-Maschine, den C64 (als 
Henkelmann SX64) gabs erst viele Jahre später zu Weihnachten.

fchk

von Michael D. (etzen_michi)


Lesenswert?

Frank K. schrieb:
> die gleich noch einen Class D bzw Class
> G Verstärker für einen kleinen Speaker bzw Headphones haben.

Hört sich interessant an, dann kann ich die Kopfhörerendstufe durch 
einen solchen ersetzen.


Frank K. schrieb:
> dann nimmst Du am Besten ein
> Display mit integriertem Controllerchip

Das Display hat einen integrierten Controller ... SEPS525
An den Stromverbrauch des FPGA habe ich garnicht gedacht .. werde das 
ganze nochmal überdenken doch intern zu machen.

Frank K. schrieb:
> Mir kommt das alles so vor, als würdest Du irgendwie nicht zu Ende
> denken, sondern einfach loslegen, und Dich dann beschweren, dass Du am
> Ende Arbeit doppelt und dreifach gemacht hast. Unprofessionell.

Einfach loslegen: Im laufe der Zeit kommt immer noch ne Idee :Þ
Beschweren: Nein, warum sollte ich mich bei mir selbst beschweren.
Unprofessionell: Ja, aber das darf beim Hobby ja auch so sein.



Die Rechenleistung brauche ich eig. nicht, aber kann ja immer noch 
kommen.
Das Gerät soll nicht als "Hergestellt und Fertig" verwendet werden, 
sondern als Gerät um immer neue Programme zu schreiben.

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.