|
Mit geringem Hardwareaufwand soll eine VGA-Text-Grafikkarte erstellt werden. Genutzt wird dazu ein ATMEGA 328P und ein 74LS165. Mit dem Taktsignal des ATMEGA 328P von 20 MHz wird das Zeilensignal für den VGA Eingang durch serielles Ausschieben des 74LS165 erzeugt. Mit dieser Technik sind 68 Zeichen pro Zeile und 29 Zeichen pro Bild erzeugbar. |
Inhaltsverzeichnis1. Technische Daten2. Zielsetzung und Grundlagen 3. Hardware 9. Lizenz |
Für viele Mikrocontroller-Projekte ist eine Anzeige der Daten auf einem Monitor eine lohnenswerte und notwendige Sache. Der beste Weg dazu ist die Nutzung des (analogen) VGA-Anschlusses eines Monitors. Die digitalen Schnittstellen DVI, Display Port und HDMI erfordern - für die ATMEGA-Mikrocontroller mit maximal 20 MHz Taktfrequenz - eine höhere Ansteuerungsfrequenz und sind mit diesen Bauelementen nicht realisierbar.
Werden die Datenleitungen (Rot, Grün, Blau) der VGA-Schnittstelle direkt von einem Port des ATMEGAs (mit 16 MHz oder 20MHz) angesteuert, dann sind nur maximal Auflösungen von etwa 15x15 Zeichen realisierbar (siehe z.B. Simple VGA/Video adapter with ATmega AVR).
Bessere Ergebnisse werden erziehlt, wenn zusätzlich ein Parallel/Serien-Wandler wie der 74LS165 genutzt wird. Beschrieben wird diese Schaltungsvariante z.B. in AVR VGA Terminal von Sebastian B.).
Schaltung im PDF-Format: TXTVGA2.pdf
Schaltung mit KiCAD erstellt: KICAD_TXTVGA2.ZIP
Die zentralen Bauteile der Schaltung sind der ATMEGA 328P und der 74LS165. Für die Übertragung eines Dastenbytes müssen alle 8 Portleitungen eines Ports gleichzeitig ausgegeben werden. Somit kommt beim ATMEGA 328P nur der Port D in Frage (bei den anderen Ports sind nicht alle Portleitungen verfügbar). Das bedeutet aber auch, dass die Nutzung des UART für diese Schaltungsvariante nicht nutzbar ist (Um den UART zur Ansteuerung der Schaltung nutzen zu können, müsste auf einen ATMEGA mit 40 PINs (z.B. ATMEGA 16) umgestellt werden).
Um die maximale Übertragungsrate erreichen zu können, werden der ATMEGA und der 74LS165 durch den gleichen Taktgenerator mit einer Frequenz von 20 MHz angesteuert. Das bedeutet, dass der ATMEGA innerhalb von jeweils 8 Takten ein neues Byte an den Port D anlegen muss.
Derartig taktgenaue Programmzyklen sind nur in Assembler realisierbar. Hier der relevante Ausschnitt aus dem Quelltext (VIDEO.INC):
1
2
3
4
5
6
|
ld ZL, y+ ; ASCII aus RAM lesen 2
lpm R16, Z ; Byte aus CGROM lesen 3
out port_daten, R16 ; Low Nibble ausgeben 1
nop ; 1
out port_control_b, R17 ; 1
out port_control_b, R18 ; 1 |
Die dargestellten Assemblerbefehle (Anzahl der Takte am Ende jeder Zeile) werden 68 mal je Zeile (jeweils 8+1 Bit pro Zeichen) abgearbeitet.
Das Byte aus dem ATMEGA wird durch den 74LS165 parallel eingelesen und über den Ausgang seriell (ein Bit pro Takt) ausgegeben. Das wiederholt sich 68 mal je Zeile.
Dieser Ausgabezyklus darf nicht unterbrochen werden (z.B. durch einen weiteren Interrupt). Die Datenübertragung an die VGA-Text-Grafikkarte muss also asynchron erfolgen. Das bedeutet, dass die sendende Einheit so lange warten muss, bis das Datenbyte übernommen wurde.
Quelltext für TXTVGA2: 10_TXTVGA2.ZIP
Quelltext für TXTVGA2 mit RONPAS-Compiler: 10_RONPAS.ZIP
Diese(s)
Werk bzw. Inhalt von Ronald Daleske steht unter einer
Creative Commons Namensnennung-Nicht-kommerziell 3.0
Deutschland Lizenz.
keine Mängelgewähr
DIESE SOFTWARE WIRD VOM URHEBERRECHTSINHABER "OHNE MÄNGELGEWÄHR" BEREITGESTELLT. ALLE AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN, EINSCHLIESSLICH DER STILLSCHWEIGENDEN GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT UND EIGNUNG FÜR EINEN BESTIMMTEN ZWECK (JEDOCH NICHT DARAUF BESCHRÄNKT), WERDEN AUSGESCHLOSSEN. DER URHEBERRECHTSINHABER IST IN KEINEM FALL UND NACH KEINER HAFTUNGSTHEORIE (SEI ES AUF VERTRAGSBASIS, AUF DER BASIS STRENGER HAFTUNG ODER UNERLAUBTER HANDLUNGEN, EINSCHLIESSLICH FAHRLÄSSIGKEIT) FÜR BELIEBIGE VERURSACHTE DIREKTE, INDIREKTE, ZUFÄLLIGE, BESONDERE, EXEMPLARISCHE SCHÄDEN ODER FOLGESCHÄDEN (EINSCHLIESSLICH, JEDOCH NICHT BESCHRÄNKT AUF BESCHAFFUNG VON ERSATZPRODUKTEN ODER -LEISTUNGEN, NUTZUNGSAUSFALL, DATEN- UND GEWINNVERLUST ODER GESCHÄFTSAUSFALL) HAFTBAR, DIE AUFGRUND DER VERWENDUNG DIESER SOFTWARE ENTSTEHEN KÖNNEN. DIES GILT AUCH, WENN AUF DIE MÖGLICHKEIT SOLCHER SCHÄDEN HINGEWIESEN WURDE.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.