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
Keiner ´ne Idee? aus-der-Versenkung-hol
Ok, das hat sich erledigt... Ich hatte ein Bit verwechselt... AAAARGH!!! Solche Fehler bringen mich jedes Mal fast zum Wahnsinn!!! Gruß Jonathan
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
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
So, hier ist jetzt der funktionierende Quellcode. Gruß Jonathan
Was für eine Auflösung schaft das Teil? Wie steuert Mann es An?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.