Forum: Mikrocontroller und Digitale Elektronik Dual Port Ram durch Single Port Ram ersetzen


von Wolfgang M. (procrash)


Lesenswert?

Hallo,

ich suche mal einen Denkanstoss zu folgendem Problem:
Ich will mir eine Schaltung bauen bei der ein Mikrocontroller eine 
Bildausgabe aus einem SRAM Speicher erzeugt währenddessen ein zweiter in 
einem separaten Speicher den Bildaufbau für das nachfolgende Bild 
erzeugt.
Im Grunde genommen so eine Art Hardware Double Buffering.
Damit der Bildaufbau beim FBAS zügig läuft dachte ich dass ich von nem 
Atmega2560 das XMEM Interface nehme.

Wie würdet ihr sowas Schaltungstechnisch realisieren?

Gibt's vielleicht einfachere Wege so etwas umzusetzen. Der 
Mikrocontroller der mit dem Bildaufbau (FBAS) beschäftigt ist ist 
bereits ziemlich zu und so kann ich keine Routinen neben dem Bildaufbau 
separat laufen lassen, deshalb dachte ich wäre eine Trennung Bild 
zeichenen / FBAS generieren angebracht...

von Frank K. (fchk)


Lesenswert?

Normal nimmt man ein FPGA dafür, zB ein Spartan 3A. Das hat bereits 
RAM-Blöcke, von denen Du einen für die anzuzeigenden Zeichen, einen für 
Attribute (falls erforderlich) und den Rest für den Zeichengenerator 
nimmst. Die RAM-Blöcke können wahlweise auch als Dual-Port RAM 
ausgeführt sein, das kannst Du im VHDL-Code konfigurieren.

Vorteil des ganzen: es braucht 0 Rechenleistung. Dein AVR schreibt 
einfach seine Zeichen rein, und das FPGA macht den Rest.

Alternative Möglichkeit: Du nimmst einen Microcontroller mit eingebautem 
TFT-Interface. Der hat eine ähnliche Mimik eingebaut. Beispiel wäre ein 
PIC24FJ128DA210. Da hast Du eine Grafik-Bitmap, die Du beschreiben 
kannst, und wenn ich da was von FBAS lese, dann sollten die 96k an 
internem RAM vom PIC24 reichen.

Solche TFT-Steuerungen gibts auch als externe Chips, z.B. von Epson. 
Manche haben auch schon ihren Bildspeicher eingebaut.

Für Analog RGB braucht Ihr dann nur noch drei DACs (notfalls auch 
diskret mit Widerständen aufbaubar), und für RGB-FBAS gibts auch Chips, 
die das erzeugen, z.B. MC1377.

fchk

von Wolfgang M. (procrash)


Lesenswert?

An nen FPGA hab ich auch schon gedacht. Vor allen Dingen müsste doch 
dann auch locker Farbe machbar sein oder?

Ich will auf alle Fälle etwas mehr als nur Textzeichen generieren. Am 
liebsten wäre mir ein Speicherbereich im FPGA den ich per uC extern 
beschreiben kann, so dass ich die einzelnen Pixel selbst setzen kann. 
Wie genau funktioniert das mit dem RAM. Ist der mit auf dem FPGA drauf 
oder muss ich per VHDL Code selbst RAM erzeugen? Wie viel ist da maximal 
möglich? Kommt vermutlich auf die Gatteranzahl an oder?

Ist denn der Spartan 3A mit normalem Handwerkszeug Lötbar? Welche 
Gehäuseformen gibt es da? Ich möchte mir die Platine nämlich selbst 
ätzen und da denke ich stosse ich an die Grenze des machbaren für den 
Hobbybereich oder?

Den PIC werde ich mir als Alternativlösung auch mal genauer ansehen.

von Reinhard Kern (Gast)


Lesenswert?

Wolfgang M. schrieb:
> Im Grunde genommen so eine Art Hardware Double Buffering.

Warum eigentlich? Es ist bei Grafikausgaben schon immer üblich, dass der 
Inhalt während der entsprechenden Zeiten (also während des aktiven Teils 
einer Zeile, ohne Rücklauf und Sync) rausgetaktet wird und während der 
nicht aktiven Zeiten schreibt der Grafikcontroller neue Daten rein, also 
sozusagen zeitlich verschachteltes Dual Port. Auf der Anzeige erscheinen 
immer die neuesten Daten, ein zweiter Speicher ist dafür nicht nötig.

Gruss Reinhard

von Wolfgang M. (procrash)


Lesenswert?

Hm,

da bin ich mir nicht sicher ob ich dich verstehe.
Ich dachte ich brauche auf alle Fälle den zweiten Ram damit der erste 
Prozessor in Ruhe im Hintergrund das Bild aufbauen kann.

Könnte ja sein dass man eine Linie blöderweise so zeichnet dass sie 
teils noch im Aktiv gezeichneten Bild dargestellt wird, teils aber erst 
im nächsten Bild erscheint. Zum Beispiel im Fall das man von unten nach 
oben zeichnet.

Ausserdem war ich mir bezüglich des Timings nicht ganz sicher. Ich will 
z.B. Daten von Sensoren usw. auf dem Bildschirm ausgeben und so ne 
Sensorfusion kostet seine Zeit.

Kannst du vielleicht ein wenig näher beschreiben wie du das meinst?

Hab das DB von dem PIC mal überflogen. Der sieht recht vielversprechend 
aus. Hab nur mit Atmels bisher halt leider Erfahrung....

von Frank K. (fchk)


Lesenswert?

Zum Selbstätzen: Lass es! Das kleinste Gehäuse beim Spartan 3A ist 100 
oder 144 Pin TQFP in 0.5mm Raster. Mit dem passenden Flussmittel 
problemlos lötbar, aber ich weiß nicht, ob Du die passenden 
Leiterplatten für 6 mil Leiterbahnen selber so gut gefertigt bekommst. 
Und 4 Lagen sind für so ein Projekt nicht übertrieben.

Den Spartan3 gibts auch noch eine Nummer kleiner, wenn ich mich recht 
entsinne, aber der braucht 3 Versorgungsspannungen.

Die RAM-Blöcke musst Du über bausteinspezifische Bibliotheken 
konfigurieren und als VHDL Entity aufrufen. Für Pixelgrafik reichts 
nicht, da musst Du externes SRAM anschließen.

Den PIC24 gibts entweder im 121 Ball BGA oder im TQFP100 mit 0.4mm 
Pitch.

Beides ein Ausschlusskriterium für heimgefertigte Leiterplatten. Aber so 
teuer sind die Leiterplattendienste nun auch nicht.

fchk

von Wolfgang M. (procrash)


Lesenswert?

Hm,

da muss halt dann alles mit dem ersten Wurf beim Layouten sitzen wenn 
ich's fertigen lasse. Oder ich lass mir ein Breakout vom 
Leiterplattendienst machen damit ich experimentieren kann und wenn's 
dann nicht mehr raucht und stinkt kann ich das finale Layout machen...
Und dann kommt dann noch die Wartezeit dazu.

Werde mich kommendes Wochenende mal dransetzen ein TQFP-100 zu machen. 
Hab hier einen 2560er rumfliegen zu dem ich mir ein Breakout Board 
machen wollte weil die Hersteller vom Arduino Board zu dämlich waren die 
XMEM Pins rauszurouten.

Ganz schön schwach für ein Experimentierboard zu diesem Preis, aber 
naja, macht mans halt selber.

Welches Flussmittel würdest du empfehlen?

von Reinhard Kern (Gast)


Lesenswert?

Wolfgang M. schrieb:
> Könnte ja sein dass man eine Linie blöderweise so zeichnet dass sie
> teils noch im Aktiv gezeichneten Bild dargestellt wird, teils aber erst
> im nächsten Bild erscheint.

Ja und? Das fällt einem Menschen vor dem Display garnicht auf, und für 
den ist das Bild ja da. Wichtig wird das u.U. bei schnellen 
Darstellungen, z.B. Fussballspiele. Aber brauchst du das? Für normale 
Computergrafik wie eine Datenausgabe ist das nicht relevant.

Gruss Reinhard

von Wolfgang M. (procrash)


Lesenswert?

Gut aber dann stellt sich dennoch die Frage wie ich den einen 
Mikrocontroller dazu bringe ständig das FBAS zu generieren während der 
andere den Aufbau macht. Die Aufgabe muss ich aufteilen, mache ich das 
nicht ist mein FBAS hin.

Und da brauche ich spätestens die Möglichkeit zwei gleichzeitige 
Speicherzugriffe auf verschiedene Adressen machen zu müssen, womit wir 
wieder bei 2 SRAMs wären oder nem Dual Port SRAM oder nicht?

von 666 (Gast)


Lesenswert?

Reinhard Kern schrieb:
> Ja und? Das fällt einem Menschen vor dem Display garnicht auf, und für
>
> den ist das Bild ja da. Wichtig wird das u.U. bei schnellen
>
> Darstellungen, z.B. Fussballspiele. Aber brauchst du das? Für normale
>
> Computergrafik wie eine Datenausgabe ist das nicht relevant.
>
>
>
> Gruss Reinhard

LOL, du willst so einen Kack verzapfen, wo schon der C64 vor 30 Jahren 
effektiv Dual Port zugriff aufs RAM hatte?

Stell dir vor, du brauchst gar kein Dual Port RAM ... wenn das RAM 
schnell genug ist, dann kannst du den Bus einfach multiplexen.

Aber vielleicht hast du ja auch noch nie was vom 74HC257 gehört.

von Wolfgang M. (procrash)


Lesenswert?

Da müsste aber auch der uc schnell genug sein um das ram zu bechreiben, 
und das isser nicht wenn ich hohe Auflösungen generieren will.

von Wolfgang M. (procrash)


Lesenswert?

Ausserdem wie stelle ich sicher dass sich beide uc nicht ins gehege 
kommen und der uc der die Bildausgabe macht immer priorität vor dem 
anderen bekomment.

Vielleicht kannst du ja mal genauer schildern wie du dir sowas 
Schaltungstechnisch vorstellst.

von m.n. (Gast)


Lesenswert?

Brauchst Du wirklich FBAS (Röhrenmonitor?) oder geht auch ein 
TFT-Display?
Eventuell hilft Dir dieses weiter. 
http://www.mino-elektronik.de/TFT-direct-drive/TFT-direct-drive.htm
Beachte dabei die Ausgabegeschwindigkeit/Zeichen beim STM32F4. Der ist 
richtig schnell!
Ein AVR schafft "direct-drive" allerdings nicht.

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Ich habe sowas mit AVRs realisiert. Je nach Auflösung, benötigter 
Rechenleistung, Timing etc. gäbe es da verschiedene Möglichkeiten.

Wenn du einfach eine schnelle Lösung suchst, nehme ggf. ein FPGA oder 
einen µC mit HW-Video.

Ansonsten ist es fraglich, ob du wirklich zwei Controller benötigst. Die 
Videoausgabe auf dem AVR benötigt ca. 60%-max. 70% und darin sind oft 
noch Takte frei für Berechnungen. Bei 20MHz sind das ca. 240-320MIPs je 
Seite über für die Grafik, ein C64 hatte dafür max 20MIPS.

Wenn's dann doch 2 AVRs sein sollen, kann ich dir später gerne Tipps 
geben, wie ich das hier hinbekommen habe.

Grüße
Mark

von Frank K. (fchk)


Lesenswert?

Wolfgang M. schrieb:

> Welches Flussmittel würdest du empfehlen?

Gelförmiges aus der Spritze funktioniert bei mir am Besten.

PS: Schau Dir auch mal den Epson S1D13781 an. Das ist ein 
Standalone-TFT-Controller mit 384k internem Video-RAM.

fchk

von Reinhard Kern (Gast)


Lesenswert?

Wolfgang M. schrieb:
> Ausserdem wie stelle ich sicher dass sich beide uc nicht ins gehege
> kommen

Es ist viel einfacher als du denkst. Sieh dir mal das Timing von z.B. 
VGA an - während der aktiven Zeit innerhalb der Zeilen werden 640 Pixel 
ausgegeben, während Sync und Retrace kann der Controller ins RAM 
schreiben.

Bei einem von mir schon vor Jahrzehnten eingesetzten Grafikcontroller 
muss auch nicht das ganze RAM immer wieder vollgeschrieben werden - der 
Bildspeicher ist da eben der Bildspeicher und was immer darin steht 
sieht man, der Controller bekommt nur den Auftrag z.B. eine Linie zu 
zeichnen von X1Y1 nach X2Y2 und schreibt nur die Pixel für genau diese 
Linie in den Bildspeicher (Bresenham in Hardware und daher sehr 
schnell).

Wenn der Prozessor nicht der schnellsten einer ist, heisst das ja nicht, 
dass die Anzeige nicht funktioniert, man sieht nur einen langsamen 
Bildaufbau. Ein ganzes neues Bild pro vertikalem Durchlauf braucht man 
nur für Video. Übrigens steht bei Standard-Vga ca 25% der Zeit für den 
Controller zur Verfügung.

Gruss Reinhard

von Olaf (Gast)


Lesenswert?

> Und da brauche ich spätestens die Möglichkeit zwei gleichzeitige
> Speicherzugriffe auf verschiedene Adressen machen zu müssen, womit wir
> wieder bei 2 SRAMs wären oder nem Dual Port SRAM oder nicht?

Ich wuerde ja einfach einen Microcontoller nehmen der bereits 
Dualportram integriert hat. Oder ist das jetzt zu einfach?

Olaf

von Wolfgang M. (procrash)


Lesenswert?

Ich hab mir das mal angesehen. Sieht gar nicht so schlecht aus. An die 
Möglichkeit HSNYCs und VSYNCs direkt ins Memory zu packen habe ich auch 
schon gedacht. Momentan läuft nur ein BAS Signal vom AVR raus das ich 
aber später aufbohren will und die Ausgabe soll farbig werden. Schön 
wäre es halt wenn ich auf der AVR Platform bleiben könnte wobei mir die 
PIC Lösung auch nicht schlecht gefällt. Bei mir muss es definitiv FBAS 
werden da ich von einer Kamera Daten per Composite zugeschoben bekomme 
und die Übertragung später vom Transmitter auch wieder Composite 
erwartet.

von Wolfgang M. (procrash)


Lesenswert?

Momentan generiere ich das alles aber per Software, dass heisst ich habe 
keine Zeit im uC irgendwas zu tun, da HSYNC und VSYNC vom Code 
ausgegeben werden, genauso wie der Bresenham, den hab ich auch per 
Software implementiert. Hab auch bereits darüber nachgedacht ob nicht 
ein separater OSD Chip reichen würde, bin aber dann zu dem Schluss 
gekommen dass ich mehr als nur reinen Text ausgeben möchte, selbst wenn 
man sich beim OSD evtl durch einen eigenen Zeichensatz etwas mehr an 
Grafik selbst definieren könnte.

von Falk B. (falk)


Lesenswert?


von Wolfgang M. (procrash)


Lesenswert?

Habs mir gerade angesehen der Konverter von RGB auf Composite ist genau 
das was ich gebrauchen könnte. Wie die das allerdings mit den 4Kbyte vom 
Atmega 644 machen ist mir bis jetzt noch ein Rätsel. Das ganze Bild 
können sie da jedenfalls nicht speichern. Evtl werden da Sprites genutzt 
um das Bild live zusammen zu setzen.

von Wolfgang M. (procrash)


Lesenswert?

Gibts da was von Atmel das Hobbytechnisch handhabbar ist bei dem man 
Dual Port SRAM verbaut hat?

von Wolfgang M. (procrash)


Lesenswert?

@Reinhard: Was brauche ich denn noch zusätzlich zum uC selbst (Chip + 
Schaltungstechnisch) wenn ich die Lösung so angehen würde wie von dir 
vorgeschlagen?

@Mark: Die Lösung deiner Schaltung würde mich auch interessieren. Dual 
Port kommt definitiv nachdem ich die Preise mal dafür gesehen habe nicht 
in Frage. RSOnline will für nen 55ns Dual Port SRAM mit 64K +ber 70 
Euronen...

Haben wir eigentlich hier im Forum irgendwo ne Minimalbeschaltung für 
nen Spartan3? Wäre ganz nett sowas mal zu sehen.

von Falk B. (falk)


Lesenswert?

@  Wolfgang M. (procrash)

>das was ich gebrauchen könnte. Wie die das allerdings mit den 4Kbyte vom
>Atmega 644 machen ist mir bis jetzt noch ein Rätsel.

Es gibt keinen vollen Bildspeicher, nur einen Zeichenspeicher ala 20x40 
und eine farbige Zeichentabelle, wobei die im Flash liegt.

> Das ganze Bild
>können sie da jedenfalls nicht speichern. Evtl werden da Sprites genutzt
>um das Bild live zusammen zu setzen.

Das zusätzlich.

von Falk B. (falk)


Lesenswert?

@  Wolfgang M. (procrash)

>Gibts da was von Atmel das Hobbytechnisch handhabbar ist bei dem man
>Dual Port SRAM verbaut hat?

Nein. Dual Port RAM ist eher selten, Cypress baut welche, in FPGAs gibts 
die auch.

von Falk B. (falk)


Lesenswert?

@  Wolfgang M. (procrash)

>Haben wir eigentlich hier im Forum irgendwo ne Minimalbeschaltung für
>nen Spartan3? Wäre ganz nett sowas mal zu sehen.

Den gibt es als DIP-Modul!

http://shop.trenz-electronic.de/catalog/product_info.php?products_id=636

von Wolfgang M. (procrash)


Lesenswert?

Hab mich vielleicht falsch ausgedrückt.  Ich meinte einen Schaltplan wo 
man den Spartan 3A mit minimaler externer Beschaltung sieht. Das Board 
von Trenz sieht gut aus. Kann man so bestimmt aufs Breadboard stecken...

von Wolfgang M. (procrash)


Lesenswert?

Ich schau mir jetzt mal die Links die gepostet wurden näher durch. 
Vielleicht finde ich ja noch den einen oder anderen Denkanstoss.
Danke jedenfalls schon mal für den Input

Das was ich bisher mache ist nur ein SW Bild per BAS generieren. Da ist 
noch viel Luft im Code um zu optimieren. Könnte mir evtl auch Taktzeit 
erkaufen indem ich die Bits per Schieberegister rausschiebe und nicht 
per lsl und dann per output an den Port, somit müsste ich ne Doppelte 
Taktrate erreichen können und somit eine etwas höhere Auflösung. Zum 
Schluss sollte 640x480 rauskommen. Ob das erstmal SW oder in Farbe ist 
ist mir erstmal egal. Weiss leider aber nicht ob das zu erreichen ist 
und welche zusätzliche HW man da evtl noch braucht. Mal sehen.

von Olaf (Gast)


Lesenswert?

> Gibts da was von Atmel das Hobbytechnisch handhabbar ist bei dem man
> Dual Port SRAM verbaut hat?

Nein, da musst du deinen Horizont auf Renesas erweitern. Da gibt es dann 
64kByte Dualportram und 1Mbyte normales Ram im Prozessor.

Olaf

von Frank K. (fchk)


Angehängte Dateien:

Lesenswert?

Wolfgang M. schrieb:
> Hab mich vielleicht falsch ausgedrückt.  Ich meinte einen Schaltplan wo
> man den Spartan 3A mit minimaler externer Beschaltung sieht. Das Board
> von Trenz sieht gut aus. Kann man so bestimmt aufs Breadboard stecken...

Anbei ein Projekt, was es nie zur Realisierung schaffte - das zugehörige 
LCD war nicht gut genug, es lohnte nicht. Ist also nicht getestet und 
damit ohne Gewähr.

Stromversorgung: Das FPGA braucht 1.2V V_Core. V_aux ist fürs 
JTAG/Config-Interface und kann entweder 2.5V oder 3.3V sein. Beim 
Spartan 3 ohne A war V_aux auf 2.5V festgelegt. Das FPGA hat 4 IO-Bänke, 
jede mit ihrer eigenen Spannungsversorgung zwischen 1.2V und 3.3V. So 
kann man verschiedene IO-Standards implementieren.

Das FPGA ist RAM-basiert und nach dem Einschalten leer. Die 
Konfiguration kann es entweder seriell oder Parallel als Slave von einem 
Controller bekommen, oder es kann sich die Daten als Master aus einem 
seriellen oder parallelen Flash holen. Beim Spartan 3 ohne A musste man 
Xilinx-Spezial-Flashes verwenden, die das spezielle serielle 
Konfigurationsprotokoll konnten. Die sind natürlich sauteuer. Der 
Spartan 3A kann auch normale SPI-Flashes wie ST25M80 (Flashes, keine 
EEPROMs, die wären eh zu klein) benutzen, die natürlich viel billiger 
sind. Der Spartan 3A XC3S200A braucht 149516 Bytes an 
Konfigurationsdaten, also für einen normalen AVR zu viel.

Der XC3S200A (das größte, was Du löten kannst) hat 288kBits an 
Block-RAM, das sind 32kWorte zu je 9 Bit. Für Text plus Zeichengenerator 
reicht das, für Grafik nicht. Das Block-Ram ist echtes Dual-Port RAM.

Wie gesagt: so kompliziert isses nicht, nur Fleißarbeit. Immer hübsch 
0402 100n Abblockkondensatoren verteilen, dann passt das.

Und denk an den Taktoszillator (hier 50 MHz). Per PLLs kannst Du Dir 
intern noch andere Takte generieren, aber einen Oszillator brauchst Du. 
50 MHz sind nichts, was Du über mehr als ein paar mm Leiterbahn 
transportieren möchtest.

Ich empfehle Dir: Schau Dir den vorgeschlagenen Epson Controller an. Der 
ist für Dich einfacher zu handhaben, auch weil er seinen Grafikspeicher 
eingebaut hat. Für ein normales FBAS-Signal reicht QCIF mit 352*288 
Pixel (viertel Vollbild zu 704*576 Pixel) aus, und das müsste noch ins 
interne RAM des Controllers reinpassen. Wenn Du mehr brauchst: es gibt 
zig verschiedene Typen, auch welche mit mehr Speicher drin.

fchk

von Wolfgang M. (procrash)


Lesenswert?

Danke schonmal. Werde mal genauer drüber schaun. Ist jedenfalls schonmal 
ganz gut ne FPGA Beschaltung hier im Board zu sehen. Ich sehe mal was 
der Epson Controller so her gibt. Der PIC wäre ja evtl auch noch ne 
Alternative oder der Renesas, wobei mich VHDL schon auch reizen würde. 
Ich schau mal.

Eins würde mich aber immer noch interessieren: Nur mal so theoretisch 
wenn sich jetzt ja auch herausgestellt hat dass es auch anders geht. Wie 
beschalte ich zwei single Port SRAMs so, sodass ich auf ein Dual Port 
SRAM verzichten könnte.

von Wolfgang M. (procrash)


Lesenswert?

@Olaf: Werde ich machen. Die Website von oben sieht ja ganz 
vielversprechend aus.

von Josef G. (bome) Benutzerseite


Lesenswert?

Frank K. schrieb:
> Das Block-Ram ist echtes Dual-Port RAM.

Das Lesen ist nur in der Weise möglich, dass die Daten mit einer
Taktflanke in ein nachgeschaltetes Register eingelesen werden.
Und die Auslese-Logik scheint nur einfach ausgeführt zu sein,
weil es für das Lesen beider Ports einen Mindest-Abstand
der Taktflanken gibt.

Allerdings: für die vorliegende Anwendung ist das wohl unwichtig,
weil anscheinend nur ein Leseport benötigt wird und es nur auf
die Unabhängigkeit von Lesen und Schreiben ankommt.

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Wolfgang M. schrieb:
> RSOnline will für nen 55ns Dual Port SRAM mit 64K +ber 70
> Euronen...

Ich hab' für mein 12ns Soft-quadPort-SRAM nur 3,78 für 64kB bezahlt. :-)

Meine aktuelle Version ist 'einfach' die Software so schreiben, dass 
beide AVRs sich einen gemeinsamen RAM (über 245er-Bustreiber) und Takt 
teilen. Geht aber nur in Assembler und die nötige Taktzählerei nervt 
manchmal. Die Software muss halt vollständig so geschrieben sein, dass 
jeder Speicherzugriff in einem festen Raster liegt. Wenn der Videoproz 
nur ausgeben soll ist das recht einfach, die Pixelausgabe sollte ja 
genauso exakt sein nur ggf. in einem anderen Rhythmus. Zumindest bei 
mehr als zwei AVRs dürfte man nur so die höchstmögliche parallele 
Zugriffsrate herausholen (ich schaffe hier 4x2MB/s@24MHz).

Eine andere Möglichkeit ist, beide an einen RAM anschließen, 
Speicherzugriffe möglichst in Blöcke aufteilen und der Videoprozessor 
kann den anderen warten lassen. Ist so ähnlich wie in den 80ern. Je 
nachdem, wie man interne Berechnungen und Speicherzugriffe aufteilt 
lässt sich eine gute Rechenleistung herausholen. Kostet aber auch immer 
wieder Zeit auf dem Grafikprozessor.

Nicht selber ausprobiert, aber mal konzeptioniert, ginge auch 2 RAMs zu 
verwenden und über 74x157er anbinden(jeden RAM an die Ausgänge eines 
Satzes 157er, Eingänge an die AVRs, und die gegeneinander umschalten). 
Der Videoproz. gibt einfach die Daten von 'seinem' RAM aus und der 
Grafikproz schaltet die um, wenn er eine Seite fertig berechnet hat, 
evtl. synchronisiert im nicht-sichtbarem Bereich. Die HW ist 'etwas' 
aufwendig(12 157er bei 2x32kB), dafür hat der Grafikprozessor die 
Kontrolle, und beide haben unabhängig die schnellste Anbindung an den 
Speicher.

Die Uzebox verwendet, soweit ich weiß, Flash-Tiles (+RAM-Tiles???) und 
die Tilemap im RAM.

Du kannst für die Pixelausgabe auch den SPI verwenden (am Besten USART 
als SPI wg. Doublebuffer). Wenn du dann noch die Ausgabe (2x4bit) eines 
Ports über einen 157er leitest gehen über den SPI auch 2von16 Farbena 
alle 8-bit. Je nach Takt gehen da auch 80-Zeichen bzw. 480(512) Pixel.

Grüße
Mark

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Sorry, ich hatte eben etwas vergessen bzw. falsch beschrieben, für die 
Datenpins waren es keine 157er sondern bidirektionale, 40?? (hab die 
Notizen nicht griffbereit).

von Wolfgang M. (procrash)


Lesenswert?

Das ist ausgefuchst. Die Beschreibung für zwei SRAMs gefällt mir. 
Zumindest war der Denkanstoss der selbe. Nur der Schaltungsaufwand ist 
ziemlich hoch. Ich brächte da mehr als nur 32KB externen SRAM. Ich 
dachte da eher so 128K oder so. Naja mal sehen es gibt ja noch 
alternativen. Was mir an dieser Lösung halt schön gefällt ist dass ich 
auf dem einen uC so ziemlich machen kann was ich will während der andere 
sich um die reine Ausgabe kümmert. Ich hab da noch vor Sensoren 
auszulesen und da wäre es schon schön wenn die Samplerate nicht durch 
irgendwelche Bildgenerierungsprozesse zerhackt wird.

So jetzt kommt der Fleiß. Dann werd ich mich mal einlesen.

von Wolfgang M. (procrash)


Lesenswert?

Eins noch. Kannst du mal näher schildern wie du dir das mit dem USART 
gedacht hattest? Das versteh ich leider nicht ganz.

von Wolfgang M. (procrash)


Lesenswert?

Wo hast du denn den SRAM bestellt?

von Reinhard Kern (Gast)


Lesenswert?

Wolfgang M. schrieb:
> @Reinhard: Was brauche ich denn noch zusätzlich zum uC selbst (Chip +
> Schaltungstechnisch) wenn ich die Lösung so angehen würde wie von dir
> vorgeschlagen?

Ist zwar ein Rücksturz in die Steinzeit, aber mach dich schlau über den 
Video Controller 6845, darauf beruhen die Urväter und -Mütter der 
meisten PC-Grafikkarten. Der 6845 sorgt für die Ausgabeseite, mit 
entsprechend gesetzten Parametern erzeugt er das Video-Timing und 
erzeugt die zum Auslesen der Pixeldaten nötigen Adressen. M.a.W. wenn 
sich am Bild nix ändert, hat der Prozessor auch nix zu tun.

Diese und ähnliche ICs ebenso wie der von mir verwendete 7220 sind heute 
nur noch schwer zu bekommen, weil diese Funktionen heute alle in 
komplexe Chips gewandert sind. 6845 sollte es aber noch geben. Ob SW 
oder Farbe ist eine Frage der Memory-Organisation und der 
Schieberegister zur Ausgabe. Für n Bit Farben benötigt man parallel n 
Bits an Ausgabe, das ist heute immer noch so.

Einstieg:
http://en.wikipedia.org/wiki/Motorola_6845
http://www.6502.org/users/andre/csa/vdc/index.html (Blockschaltbild am 
Ende)

Gruss Reinhard

von Wolfgang M. (procrash)


Lesenswert?

Klar sehe ich mir mal an, danke für den Link.

Gibts denn den Chip in ähnlicher form noch irgendwo zu erwerben?
Mein Ziel ist es möglichst mit wenig Hardware auszukommen. Das ganze 
soll später mal in nen Quadrocopter und deshalb auf ein kleines Layout.

von Wolfgang M. (procrash)


Lesenswert?

@Reinhard: Das wäre quasi dann der Ansatz Adressgenerierung + HSYNC / 
VSYNC Erzeugung vom Chip. In der Tat dachte ich auch schon an sowas 
ähnliches. Die Grundidee war warum nicht einfach einen externen Counter 
als Baustein verwenden der die Adressleitungen immer schön hochzählt und 
das Byte für Byte. Das Byte würde dann in ein Schieberegister wandern 
und dann per DAC Wiederstandsnetzwerk die Signale erzeugen. HSYNC und 
VSYNC hätte ich dabei bereits im Speicher an den richtigen Timing Slots 
vorab beschrieben. Die Sache ist nur die. Der Memory wäre dauerhaft für 
nen Lesezugriff belegt und ich müsste den Takt irgendwie geschickt 
teilen. Wobei ich immer wieder auf das RAM Zugriffsproblem stosse. 
Besser wäre es einfach nen fetten Speicher direkt auf dem uC zu haben so 
wie das auf den anderen oben beschriebenen der Fall ist, mit ner 
Hardware die sich dediziert darum kümmert.

Momentan tendiere ich ja zu dem PIC was ich gesehen habe. Aber das ist 
jetzt nur ein Bauchgefühl. Muss mir die Epson Lösung auch noch genauer 
ansehen. Aber je weniger Hardware desto besser da das Board klein werden 
soll.

von Reinhard Kern (Gast)


Angehängte Dateien:

Lesenswert?

Wolfgang M. schrieb:
> Die Grundidee war warum nicht einfach einen externen Counter
> als Baustein verwenden der die Adressleitungen immer schön hochzählt und
> das Byte für Byte. Das Byte würde dann in ein Schieberegister wandern
> und dann per DAC Wiederstandsnetzwerk die Signale erzeugen.

So isses, das macht der 6845 und er macht auch HSYC und VSYNC. Es bleibt 
aber noch eine Menge Hardware übrig - vor allem brauchst du eben für 
jedes Bit ein Schieberegister. Anbei der Memory-Teil meiner Grafikkarte 
von vor etwa 40 Jahren, da wird jeweils ein 16bit-Wort ausgelesen und 
über die 2 HCT166 rausgeschoben. Bei 24bit-Farbe bräuchtest du das 
24mal, da sollte man schon an ein FPGA denken.

Zur Erläuterung: beim 7220 erfolgen alle Zugriffe vom Prozessor aus über 
den Datenbus DBx. Das Schreiben ins Videoram wird intern geregelt.

Gruss Reinhard

von Reinhard Kern (Gast)


Lesenswert?

Nachtrag:

das mit den Schieberegistern kann auch leider nicht einem Prozessor 
übertragen werden, der Pixeltakt, mit dem die Schieberegister laufen, 
beträgt bei VGA 25 MHz, bei höher auflösenden Karten bis über 100 MHz.

Gruss Reinhard

von Wolfgang M. (procrash)


Lesenswert?

Sieht nett aus. Eagle ist dass sicher nicht oder ;-)

Hab mir nochmals die Epson Lösung durch den Kopf gehen lassen.
Das sieht eigentlich ziemlich genau nach dem aus was ich brauche. 
Zusätzlicher Chip mit integriertem RAM und jeder Menge Schnickschnack um 
verschiedene Auflösungen usw. zu konfigurieren. Da bräuche ich aber 
vermutlich noch die Konvertierung zum FBAS oder?  VOm Projekt oben hab 
ich mir mal abgekupfert dass man dazu den AD725 nimmt oder? Somit hätte 
ich dann auf dem Board den Atmel, den Epson und den Konverter. Hm eine 
Frage stellt sich dann aber noch. Wie mache ich das mit dem Bild 
mischen?

von Reinhard Kern (Gast)


Lesenswert?

Nachtrag 2:

Er lebt noch: 6845 gibts gebraucht bei ebay für 5 Euro, oder auch als 
Open Source VHDL Modell für Xilinx FPGA.

Wolfgang M. schrieb:
> Sieht nett aus. Eagle ist dass sicher nicht oder ;-)

Das Original war noch mit Kugelschreiber auf kariertem Papier. Die 
Schöpfer von Eagle waren da vermutlich noch nicht geboren.

Gruss Reinhard

von Frank K. (fchk)


Lesenswert?

Wolfgang M. schrieb:

> ich mir mal abgekupfert dass man dazu den AD725 nimmt oder? Somit hätte
> ich dann auf dem Board den Atmel, den Epson und den Konverter. Hm eine
> Frage stellt sich dann aber noch. Wie mache ich das mit dem Bild
> mischen?

Autsch. Das geht mit den Epson Controllern und dem PIC24 so nicht.

Vorgehensweise: aus dem Eingangs-FBAS-Signal die Sync-Signale gewinnen 
(LM1881), per PLL den Pixeltakt aus dem HSYNC gewinnen. Für den 
Videocontroller sind Pixeltakt und HSYNC/VSYNC jetzt Eingänge und nicht 
mehr Ausgänge. Der Videocontroller gibt jetzt seine Daten raus und ein 
Umschaltsignal, das einen Analogswitch ansteuert, der zwischen 
Video-Eingang und Overlay umschaltet.

Das Schlüsselwort heißt "Genlock-Fähigkeit". Das können die meisten 
Controller nicht. Der Commodore Amiga vor 25 Jahren konnte es und war 
damit eine Ausnahme.

Für den Rest sind die Synchron- und Clocksignale nur Ausgänge, die sie 
treiben. Ein Videobild müsste hier erst digitalisiert und dann synchron 
zum Computerbild wieder ausgegeben werden. Solche Kisten nennt man Time 
Base Correctors TBC, und in den Dingern wird einiges an Aufwand 
getrieben, damit die sich auch nicht durch instabile Synchronsignale, 
wie sie bei schlechten VHS-Aufnahmen auftreten, aus dem Sync bringen 
lassen.

Wenn Du das wirklich machen willst bzw musst, dann bleibt Dir nur die 
FPGA-Lösung. Nur hier kannst Du die Synchronsignale als Eingänge 
definieren.

Oder Du pfeifst doch auf Grafik und nimmst einen OSD-Chip, der diese 
Mimik nämlich schon eingebaut hat.

fchk

von Wolfgang M. (procrash)


Lesenswert?

OSD wär halt die Billiglösung aber damit will ich mich nicht zufrieden 
geben. Ich schau mir mal deine Verschaltung nochmal genauer an. Im 
Grunde genommen sieht das schon recht minimal aus. Bestücken die 
Leiterplattendienste eventuell auch schon? Wo lasst ihr denn eure Boards 
so fertigen und mit was muss man für ne Eurokarte im Schnitt rechnen?

Wenn ich mir die FPGA Lösung im Ansatz mal ansehe, dann wäre dass der 
FPGA, ein Mikrocontroller der den FPGA mit der Konfiguration belädt und 
später die Sensordaten auswertet und das Videobild definiert, der LM1881 
fürs Signaltrennen (wobei ich gesehen habe dass meine Kamera HSYNC und 
VSYNC bereits auf nen Pin Breakoutet), und einen externen SRAM der vom 
FPGA und vom Mikrocontroller geshared wird, da er selbst nicht genug 
Speicher hat um das vollständige Bild darzustellen.

Aber dann bin ich ja wieder bei meinem Problem von oben, dass ich 
konkurrierende Speicherzugriffe habe oder nicht?

Könnte ich nicht automatisch den HSYNC / VSYNC nutzen um in dieser Zeit 
das Bild im Speicher aufzubauen. Das wäre doch noch ne Möglichkeit oder? 
Dann könnte ich evtl sogar auf den FPGA verzichten.

Während der Bildaufbauphase würde der uC selbst aktiv sein und das 
Signal entweder von der Kamera oder von sich selbst multiplexen.

Wird hingegen gerade von der Kamera das HSYNC oder VSYNC Signal 
generiert kümmere ich mich ums Sensorlesen bzw um den Bildspeicher z.B. 
zum Linien zeichnen.

Wenn ich das ganze noch irgendwie RLE encodiert ablege, so könnte ich 
einerseits Speicher, und andererseits CPU Last sparen, weil die CPU 
weiss wann sie in den Bildausgabeprozess wieder selbst aktiv werden muss 
und somit sich mehr um den Bildaufbau als um die Ausgabe kümmern kann.

von Wolfgang M. (procrash)


Lesenswert?

Was mir noch dazu einfällt: Könnte es sein das die Kommunikation des 
uController dann über den FPGA mit dem SRAM laufen kann. Der hat doch 
Dual Port Ram was man als Buffer verwenden könnte oder?

Ausserdem könnte ich mir auf dem FPGA selbst doch einen uC 
synthetisieren der Bidlaufbau usw machen könnte oder?

von Frank K. (fchk)


Lesenswert?

Keine Panik. Bei PAL und QCIF Bildformat 352*288 Pixel dauert ein Pixel 
etwa 140 ns. Wenn Du SRAM mit 10ns oder 15ns verwendest, passen einige 
Schreib/Lesezyklen in eine Pixelzeit hinein. Das sollte für beide 
reichen.

fchk

von Wolfgang M. (procrash)


Lesenswert?

Gut gut. Danke für die Hilfe. Waren echt viele Kommentare und 
Anmerkungen bis jetzt.

von Josef G. (bome) Benutzerseite


Lesenswert?

Josef G. schrieb:
> Frank K. schrieb:
>> Das Block-Ram ist echtes Dual-Port RAM.
> ...
> Und die Auslese-Logik scheint nur einfach ausgeführt zu sein,
> weil es für das Lesen beider Ports einen Mindest-Abstand
> der Taktflanken gibt.

Korrektur: Ich kann die Stelle in der Dokumentation
nicht mehr finden, wo ich glaubte, das gelesen zu haben.

Mein Beitrag war Mist.

von Mark L. (m2k10) Benutzerseite


Lesenswert?

Man kann den SPI beim AVR als Schieberegister verwenden und so bspw. 8 
Pixel in SW automatisch ausgeben. Der normale SPI hat den Nachteil, dass 
es zwischen den Bytes immer eine kurze Lücke gibt, USART als SPI auf 
einigen AVRs hat einen Puffer und und kann dadurch einen durchgängigen 
Bit-Stream ausgeben.

Man kann dann auch den SPI-Ausgang nutzen um einen Multiplexer 
umzuschalten, high- und low-nibble eines AVR-Ausgangs für Vorder- und 
Hintergrundfarbe. So typische 80er-Grafik mit 8x8 Pixel-Farbraster in 16 
Farben lassen sich so halt auch noch in höheren Auflösungen 
(512pixel@24MHz hor. geht, mehr habe ich nicht ausprobiert) einfach 
realisieren. Für die eigentliche Ausgabe ist dann nur noch alle 8 Pixel 
ein 'out/sts UDR' und ggf. ein 'out PORT,Farbe' nötig. Anders dürfte das 
gar nicht gehen. Würde man 512 Pixel manuell ausgeben, bleiben nichtmal 
genügend Takte um die Daten aus dem internen SRAM überhaupt zu lesen.

Mir ist noch eingefallen, dass ich hier VRAM liegen habe aus einer 
uralten Hercules-Karte: MT42C4256, die waren billig und hatten 
dual-port-Funktionalität speziell für Pixelausgabe. Weiß aber nicht, ob 
es heute sowas noch gibt.

Reinhard Kern schrieb:
> Die
> Schöpfer von Eagle waren da vermutlich noch nicht geboren.

Eagle stammt aus den 80ern, die Schöpfer müssten demnach BJ vor 1970 
sein ;-)

Grüße
Mark

von Reinhard Kern (Gast)


Lesenswert?

Mark L. schrieb:
> Eagle stammt aus den 80ern

Ist mir damals nicht aufgefallen (wie lange gibts denn dieses Forum 
schon?), erst so seit 95. Dabei gehörte ich laut Statistik zu den ersten 
400 CAD-Anwendern in Deutschland überhaupt, nicht nur Elektronik-CAD.

Gruss Reinhard

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

wenn du deine Ausgabe mit einem Kamerabild mixen willst, gibt es 
prinzipiell 2 Möglichkeiten:

A Du liest das Kamerabild in einen Bildspeicher ein, manipulierst den 
Speicherinhalt durch deinen Prozessor, indem du z.B. Text reinschreibst, 
und gibst das Bild wieder aus, logischerweise mit einer Verzögerung. Das 
ist das was Frank mit TBC meint und sehr sehr aufwendig.

B Du schleifst das Bild von der Kamera im Wesentlichen durch an den 
Ausgang, nimmst aber die Sync-Signale um im Prozessor Zeilen und Pixel 
mitzuzählen, parallel dazu baut dein Prozessor ein eigenes Bild auf in 
einem eigenen Bildspeicher (nicht notwendigerweise so gross wie der für 
die Kamera), und dessen Inhalt mixt du in das Videosignal rein indem zu 
z.B. bei einer 1 das Signal umschaltest von Kamera auf eine feste Farbe 
- dazu brauchst du einen entsprechend schnellen Video-Multiplexer 
(Schaltzeiten für Analogsignale so um 10 ns, ist auch nicht ganz 
trivial, wie ich erst kürzlich festgestellt habe). Damit sparst du dir 
das Einlesen des Bildes, wofür du ja auch sehr schnelle ADCs bräuchest, 
Wandlungszeit bei VGA weniger als 30 ns.

Also bei A mixt du im Speicher und bei B mixt du im laufenden 
Videosignal.

Gruss Reinhard

von Frank K. (fchk)


Lesenswert?

Reinhard Kern schrieb:
>> Eagle stammt aus den 80ern
>
> Ist mir damals nicht aufgefallen (wie lange gibts denn dieses Forum
> schon?), erst so seit 95.

Ich habe hier noch Eagle Dateien auf der Platte, die von 1990 sind.

fchk

von MCUA (Gast)


Lesenswert?

>Eins würde mich aber immer noch interessieren: Nur mal so theoretisch
>wenn sich jetzt ja auch herausgestellt hat dass es auch anders geht. Wie
>beschalte ich zwei single Port SRAMs so, sodass ich auf ein Dual Port
>SRAM verzichten könnte.
Für x-fache Ports, je Port RD-WR-Zwischenregister, die nach aussen 
asynchr die CPUs versorgen, nach innen gemuxt auf ein SRAM gehen. Dafür 
muss das SRAM (im Groben) min. die x-fache Geschwindigkeit haben.
Bei >= 2 WR-Zugriffen auf die gleiche SRAM-Stelle soll INT ausgelöst 
werden können.

von Wolfgang M. (procrash)


Lesenswert?

Also den UART zu verwenden für ne lückenlose Bildausgabe finde ich ja 
sowas von Genial.
Da wär ich nie draufgekommen. Hatte mir gedacht ein externes 
Schieberegister zu verwenden um mir Prozessorzeit zu erkaufen aber dass 
ist echt genial.

Schaltungstechnisch werde ich wohl Lösung b bevorzugen da ich mir damit 
am meisten CPU Zeit für andere Dinge erkaufe. Vielleicht muss der 
Speicher dann auch nicht so fett sein.

Was ich allerdings gerne hätte wär ein linear adressierter Speicher. 
Sprich Speichergröße = Bildgröße aber mal sehen wie viel Aufwand ich 
bereit bin in die Software zu stecken.

Ich könnte bei meinem 2560er sogar mehrere UARTs verwenden um nahtlos 
die Transparenz zu schalten. Sprich ein UART regelt das 
Wiederstandsnetzwerk sprich zwischen 0.3 und 1Volt während der andere 
UART die Transparenz regelt.

Werde mir kommendes Wochenende mal endlich das Breakout Board für den 
2560er machen, da ich den externen Speicher gerne über das XMEM 
Interface anbinden wollte (-> da das schneller als alles in SW über 
Ports zu machen).

Weiss jemand ob ich dazu unbedingt das Latch brauche oder ob das XMEM 
I-Face auch so konfigurierbar ist dass ich den weglassen kann und die 
Zugriffe dann schneller sind. Hab dazu bei uns im Forum nichts gefunden, 
da ist nur die Schaltung mit 74HC573 drin.

Der Aufwand von mehr Pins stört mich dabei nicht besonders, da der Chip 
ja genug davon hat.

von Wolfgang M. (procrash)


Lesenswert?

@FCHK: Zu der Lösung per FPGA. Ich habs immer noch nicht ganz begriffen. 
Der Speicherzugriff mit dem FPGA wäre ja in der Zeit gemultiplext. 
Sprich Adress und Datenleitungen des RAMs wären ja sozusagen 
gleichzeitig mit uC und FPGA verbunden.
Jetzt grübel ich mal kurz nach. Der FPGA würde bei einer Auflösung von 
640 Pixeln in horizantaler Richtung bei eines Fenster von 52us (64us - 
12 us für HSync und Burst) ja in etwa alle 81,25ns auf den Riegel 
zugreifen. Der uC selbst kann maximal mit 16 Mhz Takt also spricht einen 
Zugriff in 62,50ns schaffen. Moment, eigentlich sogar erst in 
62,50ns*3=187,5ns laut DB also sogar noch einen Takt mehr. Extern 
sollten die Adress- und Datenleitungen auch dann zu flackern anfangen 
wenn ich nur auf internen Speicher Zugreife.

Somit wird jeder Speicherzugriff vom uC in irgendeiner Form Zugriffe des 
FPGAs korrumpieren. Und ich schreibe ja nicht nur ein Byte, ich schreibe 
ja mehrere hintereinander vom uC wenn ich eine Linie im Speicher 
zeichne.

Hab mit Multiplexing bisher allerdings auch noch nicht viel gemacht muss 
ich gestehen, bis auf ein paar 7 Segmentanzeigen gemultiplext. Ein 
Schaltplan wäre da ganz hilfreich wie sowas prinzipiell aussieht.

von Frank K. (fchk)


Lesenswert?

Das Ram ist ausschließlich am FPGA angeschlossen, das macht alles. Alle 
Schreibzugriffe müssen über das FPGA gehen, das damit sicherstellen 
kann, dass die Zugriffe passend synchronisiert sind.

640 Pixel in X Richtung ist für ein FBAS Signal zu viel. Da kannst Du 
nachher nichts mehr lesen. QCIF 352*288 ist das Maximum, was bei der 
beschränkten FBAS Bandbreite lesbar bleibt.

fchk

von Wolfgang M. (procrash)


Lesenswert?

Ah ok. Das macht jetzt Sinn. Mit lesbar beziehst du dich auf Text denke 
ich oder?. Ich will aber nicht nur Text, sondern auch Grafik machen. 
Sprich Linien / Kreise zeichnen. So wie man das von nem HUD in nem 
Flugzeug her vielleicht auch kennt.

Vom Code her habe ich das ganze schon soweit getrieben dass ich die 
Auflösung mal mit dem Atmega 1284p mit 20MHZ noch auf 640 Pixel 
angefahren habe. Allerdings ging mir dann der Speicher aus und ich 
konnte nicht die vollen 480 Zeilen darstellen. Text war lesbar aber ich 
musste schon wie du gesagt hast die einzelnen Zeichen größer definieren.

von Reinhard Kern (Gast)


Lesenswert?

Wolfgang M. schrieb:
> Somit wird jeder Speicherzugriff vom uC in irgendeiner Form Zugriffe des
> FPGAs korrumpieren.

Natürlich muss das "irgendwie" sybchronisiert werden, dazu gibts 
allerdings viele Möglichkeiten. Jedenfalls können Prozessor und Video 
Out nicht einfach asynchron nebeneinander her laufen. Bei VGA wird ein 
Byte für die Anzeige alle 320 ns gebraucht, man kann aber in weniger als 
100 ns zugreifen, wenn man den geigneten Speicher hat, dann stehen die 
übrigen rund 200 ns dem Prozessor zur Verfügung. Der muss also notfalls 
warten, wozu ein WAIT-Eingang sehr praktisch ist. Da er aber definitiv 
alle 320 ns drankommt, würde der Prozessor nicht besonders 
beeinträchtigt.

Man kann auch umgekehrt freie Prozessorzeit für Video Out verwenden, 
aber das ist viel schwieriger, weil der Prozessor viele verschiedene 
Zyklen hat. Das ganze ist natürlich eine Timing-Pfriemelei, aber das 
Einhalten von Setup- und Holdzeiten ist viel einfacher, wenn z.B. der 
Prozessor mit dem Pixeltakt von 25 MHz betrieben wird oder mit der 
Hälfte davon.

Also Step by Step: du entwirfst ein Video Ram mit Schieberegisterausgabe 
und einer Taktung von PixelClk/8, so dass vom Taktzyklus nach dem Lesen 
noch möglichst viel übrig bleibt, und überlegst dir, wie du den 
Prozessor dazu bringst, einen Zugriff darauf immer nach dem Ende des 
Video-Zugriffs durchzuführen (aber auch nicht viel später, notfalls den 
nächsten Zyklus abwarten). Das hat man schon in den 70er Jahren des 
vorigen Jahrhunderts geschafft, also kannst du das auch hinkriegen.

Gruss Reinhard

von Wolfgang M. (procrash)


Lesenswert?

Hm. Danke für dein Vertrauen. Ich schaff das auch. Wenn ich mich einmal 
an was fest beiße dann bleibe ich am Ball bis ich's hab.

Kann man jetzt als positive oder negative Charactereigenschaft ansehen. 
Vielleicht sitz ich ja noch nächstes Jahr dran hehe, aber das ist ja das 
schöne wenn man sein Hobby nicht zum Beruf hat ;-)

Vielen dank für den Input Leute. Sehe dass inzwischen schon 61 Posts 
gemacht wurden. Sagenhafter support hier im Forum.

von Frank K. (fchk)


Lesenswert?

Wolfgang M. schrieb:
> Ah ok. Das macht jetzt Sinn. Mit lesbar beziehst du dich auf Text denke
> ich oder?. Ich will aber nicht nur Text, sondern auch Grafik machen.
> Sprich Linien / Kreise zeichnen. So wie man das von nem HUD in nem
> Flugzeug her vielleicht auch kennt.

480 Zeilen geht bei FBAS nur über Interlace, dem Zeilensprungverfahren. 
Beim Amiga, der das alles normgerecht konnte, hat das furchtbar mit 25 
Hz geflimmert, insbesondere dünne horizontale Linien. Daher machs nicht. 
Alle Heimcomputer der 80'er haben nur 320*200 oder 320*256 gemacht + 
Rand. Mit Overscan kommt Du bei PAL auf 352*288.

fchk

von Wolfgang M. (procrash)


Lesenswert?

Vermutlich hast du recht. Ich muss aber wie auch immer 640x480 als 
Bilddaten bereitstellen, weil ich zum Kamerabild die Grafik dazu mixe. 
Ich werd den Text dann halt größer machen, so dass er lesbar wird.

von Frank K. (fchk)


Lesenswert?

Wolfgang M. schrieb:
> Vermutlich hast du recht. Ich muss aber wie auch immer 640x480 als
> Bilddaten bereitstellen, weil ich zum Kamerabild die Grafik dazu mixe.

Wieso? Das eine hat mit dem anderen nichts zu tun. Wie gesagt, von den 
640 Pixeln hast Du nur einen höheren Aufwand, und bei 480 Rasterzeilen 
musst Du zusätzlich noch gerade und ungerade Halbbilder (vergiss nicht: 
Zeilensprungverfahren!) auseinander sortieren und zu jedem Halbbild die 
passende Rastergrafik ausgeben. Ich weiß nicht, ob Du weißt, was für 
einen zusätzlichen Aufwand Du Dir da für nichts einfängst. Ich habe 
schon meinen Grund, weswegen ich Dir 352*288 Pixel nahelege.

fchk

PS: Lies das! http://de.wikipedia.org/wiki/Zeilensprungverfahren

von Wolfgang M. (procrash)


Lesenswert?

Hast recht. Interlacen will ich wirklich nicht. Da müsste ich ja auch 
den ganzen Speicher zerhacken. Danke für den Link

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.