Forum: Mikrocontroller und Digitale Elektronik VGA-Grafikkarte - Fehler in der Routine zum Schreiben von Daten


von Jonathan S. (joni-st) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir eine kleine Grafikkarte auf einem ATTiny861 programmiert. 
Die VGA-Ausgabe klappt soweit (wenn auch nicht so ganz normgerecht), 
jedoch gibt es Probleme beim Schreiben des VRAMs. Mit bloß 256 Byte VRAM 
ging alles, als ich jetzt jedoch 480 Byte VRAM benutzt habe und noch ein 
9. Adressbit hinzugefügt habe, kommt nur noch Müll an. Weil ich keine 
Pins mehr freihatte, musste ich die Adressen auf die fallende und die 
Daten auf die steigende Flanke übernehmen. Die Flankenerkennung sollte 
so weit klappen, nur bei dem Einlesen der Adresse / den Daten hängts. 
Das Programm ist in Assembler geschrieben, aber ich habe die 
BASCOM-Umgebung benutzt. Ich nehme nur die Konfiguration des µC's in 
BASIC vor, der Rest ist in Assember.

Die Pinbelegung:
PORTB.0 = HSync-Ausgang
PORTB.1 = Monochrom-Ausgang (über 100 Ohm an alle Farben)
PORTB.2 = VSync-Ausgang
PORTB.3 = 9. Adressbit
PORTB.6 = Takt (fallende Flanke: Adresse setzen, steigende Flanke: Daten 
schreiben)
PORTA = Daten / Bit 1 - 8 für Adresse
µC-Takt: 24,576 MHz

Könnte sich jemand den Code vielleicht mal ansehen?


Gruß
Jonathan

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Keiner ´ne Idee?
aus-der-Versenkung-hol

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Ok, das hat sich erledigt...
Ich hatte ein Bit verwechselt... AAAARGH!!! Solche Fehler bringen mich 
jedes Mal fast zum Wahnsinn!!!

Gruß
Jonathan

von eProfi (Gast)


Lesenswert?

Jonathan, es wäre ein schöner Zug von Dir, eine korrekte Lösung oder den 
Fehler bekanntzugeben. Das Forum lebt vom Nehmen und Geben.
Danke

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Hallo eProfi,

das wollte ich auch noch machen, ich habe es nur noch ein wenig 
verbessert. Ich habe die Datei jedoch gerade nicht da, heute abend lade 
ich es dann hoch.

Gruß
Jonathan

von Jonathan S. (joni-st) Benutzerseite


Angehängte Dateien:

Lesenswert?

So, hier ist jetzt der funktionierende Quellcode.

Gruß
Jonathan

von "Q" (Gast)


Lesenswert?

Was für eine Auflösung schaft das Teil?
Wie steuert Mann es An?

von Jonathan S. (joni-st) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo "Q",

es gibt nochmal eine neue Version von der Grafikkarte, die nun mit den 
meisten Monitoren läuft (die alte geht nur mit meinem Samsung 
SyncMaster, der seinem Namen alle Ehre macht und auch noch so verwüstete 
Synchronisationen schluckt). Die Karte schafft eine Auflösung von 62x48 
(S&W), Farben waren bei den 512 Byte RAM einfach nicht mehr drin.

So wird die Grafikkarte angesteuert:
PORTB.0 = HSync (µC -> 1k Ohm -> HSync des Monitors)
PORTB.1 = Monochrom (µC -> 100 Ohm -> R, G, B des Monitors (nur 1(!) 
Widerstand))
PORTB.2 = VSync (µC -> 1k Ohm -> VSync des Monitors)
PORTA.0...7 = Adr0...7 / Data0...7
PORTB.3 = Adr8
PORTB.6 = WriteClock


So schreibt man auf die Grafikkarte:

Am Anfang ist WriteClock auf High.
Willst du nun ein Byte ins VideoWOM (ja richtig, ein WriteOnlyMemory, 
lesen geht nicht, war kein Pin mehr frei :D) schreiben, muss zuerst die 
Adresse an Adr0...8 angelegt werden. Dann setzt du WriteClock auf Low, 
auf die fallende Flanke wurde nun die Adresse des Bytes, das du 
schreiben willst, übernommen. Dann legst du deine Daten an Data0...7 an 
und setzt WriteClock auf High. Nun wurde bei der steigenden Flanke dein 
Byte ins VideoWOM geschrieben. Fertig.


Sonstiges:

Das VideoWOM ist 384 Bytes groß, alles darüber wird ignoriert.
Du kannst maximal 16000 Bytes pro Sekunde auf das VideoWOM schreiben 
(ich habe die Abfrage fürs Schreiben zwischen die HSync Impulse mit 
32kHz gemacht).
Am Anfang zeigt die Grafikkarte einen SplashScreen an, das kannst du 
aber rausnehmen, falls es dich stört.
Jede Zeile besteht aus 8 Bytes, es gibt 48 Zeilen (mach 384 Bytes). Die 
niederwertigen Bits werden zuerst ausgegeben (Big Endian).
Die Grafikkarte erzeugt ein Analogsignal bei 76Hz Bildwiederholfrequenz 
und 32kHz Zeilenfrequenz.

Falls ich was vergessen habe: einfach fragen :)

Gruß
Jonathan

von "Q" (Gast)


Lesenswert?

Danke werde das dann mal bauen.
Vileicht kann man mit einem atmega8515 und ext. Ram oder ATmega32 eine 
noch höhere auflösung Rausholen. Und noch ein par Grafikfunktionen 
einbauen.

In Assembler kenne ich mich leider nicht so aus aber dafür in Bascom.

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.