{"id":1348,"date":"2012-04-21T12:39:57","date_gmt":"2012-04-21T10:39:57","guid":{"rendered":"http:\/\/www.brennecke.org\/?page_id=1348"},"modified":"2012-07-24T14:56:05","modified_gmt":"2012-07-24T12:56:05","slug":"vga-module-mikrocontroller-technik","status":"publish","type":"page","link":"https:\/\/www.brennecke.org\/?page_id=1348","title":{"rendered":"VGA-Module (Mikrocontroller-Technik)"},"content":{"rendered":"<p>Im Rahmen meiner Besch\u00e4ftigung mit Mikrocontrollern zeigte sich, dass diese Chips auch in der Lage sind, ein VGA-Signal zu erzeugen. Aufgrund ihrer Flexibilit\u00e4t bieten sich dabei vielf\u00e4ltige M\u00f6glichkeiten &#8211; sogar die Einblendung eines Hintergrundbildes oder eine Textdarstellung sind m\u00f6glich.<\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4585.jpg\"><\/a><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4617.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1447\" title=\"IMG_4617\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4617-225x300.jpg\" alt=\"\" width=\"225\" height=\"300\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4617-225x300.jpg 225w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4617.jpg 768w\" sizes=\"(max-width: 225px) 100vw, 225px\" \/><\/a> <a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/Bildschirmfoto-2012-04-22-um-18.41.00.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1452\" title=\"Bildschirmfoto 2012-04-22 um 18.41.00\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/Bildschirmfoto-2012-04-22-um-18.41.00-249x300.png\" alt=\"\" width=\"249\" height=\"300\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/Bildschirmfoto-2012-04-22-um-18.41.00-249x300.png 249w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/Bildschirmfoto-2012-04-22-um-18.41.00.png 716w\" sizes=\"(max-width: 249px) 100vw, 249px\" \/><\/a><\/p>\n<p>In diesem Abschnitt soll jedoch einfach die Nachbildung des VGA-Moduls in Software mittels eines Atmel AVR ATMega88 erfolgen. Zum Thema AVR sind <a href=\"http:\/\/www.mikrocontroller.net\/articles\/AVR\">sehr gute Tutorials<\/a> im Netz verf\u00fcgbar, so dass ich hier nur eine kurze \u00dcbersicht gebe.<\/p>\n<p>Die AVR-Mikrocontroller bieten digitale (teilweise sogar analoge) Aus- und Eing\u00e4nge, die per Software programmiert werden k\u00f6nnen. Typische Computerfunktionen wie Timer und Interrupts stehen dabei zur Verf\u00fcgung. Mithilfe des T1-Timers des ATMega88 gelingt es nun, das VGA-Signal und s\u00e4mtliche Steuersignale Q1-Q8 (gem\u00e4\u00df Video-Modul des EE3023) und sogar noch ein paar zus\u00e4tzliche Signale zu erzeugen.<\/p>\n<h3>Ein paar Grundlagen zum VGA-Signal<\/h3>\n<p>Der ATMega88 wird mit 20 MHz getaktet, jeder Befehl dauert also mindestens 50 Nanosekunden. Das klingt wenig, aber f\u00fcr eine ganze VGA-Bildzeile stehen dann gerade einmal 508 Takzyklen zur Verf\u00fcgung. Das ist bereits zu wenig, um die vollen 640 Pixel einer VGA-Zeile getrennt ansteuern zu k\u00f6nnen. F\u00fcr die Signale Q1-Q8 des Videomoduls (mit jeweils maximal achtfacher Frequenz gegen\u00fcber den Synchronsignalen) sollte es hingegen reichen, wenn man clever programmiert. Das linke Bild zeigt denn auch eine einwandfreie Farbtreppe, wie sie letztlich erreicht wurde. Das rechte stammt aus einem fr\u00fchen Versuchsstadium; der Hintergrund f\u00fcr die verbogenen Balken ist eine zeitliche \u00dcberforderung des Mikrocontrollers &#8211; pro Zeile stand nicht genug Zeit f\u00fcr alle n\u00f6tigen Operationen zur Verf\u00fcgung.<\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4615.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1446\" title=\"IMG_4615\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4615-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4615-300x225.jpg 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4615.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4614.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1445\" title=\"IMG_4614\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4614-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4614-300x225.jpg 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4614.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Das VGA-Signal ist exakt spezifiziert; allerdings sind moderne Monitore sehr tolerant gegen\u00fcber Fehlern, so dass auch noch st\u00e4rkere Abweichungen von der Spezifikation zu einem sichtbaren Bild f\u00fchren (k\u00f6nnen &#8211; oder auch nicht: siehe Nachtrag unten).<\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/VGA-Daten1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1451\" title=\"VGA-Daten\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/VGA-Daten1.png\" alt=\"\" width=\"1023\" height=\"551\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/VGA-Daten1.png 1023w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/VGA-Daten1-300x161.png 300w\" sizes=\"(max-width: 1023px) 100vw, 1023px\" \/><\/a><\/p>\n<p>Das Bild zeigt die einzelnen Signale und ihre jeweilige Dauer. Man erkennt, dass die Synchronimpulse etwa ein Viertel der gesamten Datenmenge ausmachen. Sie bestehen aus dem eigentlichen (negativen) Synchronimpuls und den vorderen und hinteren Schwarzschultern (Front und Back Porch), w\u00e4hrend derer das Bild einfach dunkel ist und keine Information \u00fcbertragen werden darf.<\/p>\n<p>Wie bereits erw\u00e4hnt, stehen dem AVR keine 640 Takte (bzw. 800 Takte inklusive der Synchrondaten) zur Verf\u00fcgung, die Taktangaben verk\u00fcrzen sich daher auf 508 sichtbare Takte, und 12, 76 und 38 Takte f\u00fcr HFP, HS und HBP.<\/p>\n<p>Mittels eines Timers kann der horizontale Synchronimpuls sehr genau erzeugt werden. Auf dieselbe Weise k\u00f6nnen auch die Signale Q1-Q4 (62,5 KHz, 125 kHz, 250 kHz) und die linke und rechte &#8222;Wand&#8220; erzeugt werden. Problematisch sind die vertikalen Elemente einschlie\u00dflich des Bildimpulses, da sie ebenfalls w\u00e4hrend des Timers eingestellt werden m\u00fcssen und zus\u00e4tzliche Zeit ben\u00f6tigen. Im Programm wurden daher horizontale und vertikale Schaltbefehle verzahnt. Au\u00dferdem wurde auf Abfragen der Portzust\u00e4nde komplett verzichtet; es werden gleichzeitig immer alle aktivierten Ausg\u00e4nge eines Ports gesetzt. Deshalb liegen alle vertikalen Ausg\u00e4nge auf Port C und die horizontalen auf Port D. Einzige Ausnahme ist das vertikale Synchronsignal, das allein auf Port B0 liegt. Damit l\u00e4sst sich ein sehr sauberes VGA-Signal erzeugen &#8211; deutlich sauberer als das der VGA-Module auf CMOS-Technik. Da zudem der Mikrocontroller-Aufbau auch noch Platz und Bauteile spart, empfehle ich diesen f\u00fcr einen Nachbau.<\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_45861.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1444\" title=\"IMG_4586\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_45861-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_45861-300x225.jpg 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_45861.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4622.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1449\" title=\"IMG_4622\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4622-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4622-300x225.jpg 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4622.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Das hier gezeigte VGA-Modul enth\u00e4lt neben dem eigentlichen VGA-Teil auch den <a title=\"Video-Technik\" href=\"http:\/\/www.brennecke.org\/?page_id=1240\">Sinus-Rechteckgenerator<\/a>, das <a title=\"Video-Technik\" href=\"http:\/\/www.brennecke.org\/?page_id=1240\">Oszilloskop<\/a> und eine Schaltung zur Darstellung von vier Wandelementen.<\/p>\n<p><a href=\"..\/wp-content\/uploads\/2012\/04\/IMG_4625.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"IMG_4625\" src=\"..\/wp-content\/uploads\/2012\/04\/IMG_4625-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" \/> <\/a><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4623.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1456\" title=\"IMG_4623\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4623-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4623-300x225.jpg 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/IMG_4623.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Das Oszilloskop hat gegen\u00fcber dem Original eine Verbesserung erhalten. Es wird nun statt durch Transistoren durch zwei Operationsverst\u00e4rker gesteuert. Einer von ihnen ist wie beim <a title=\"Video-Technik\" href=\"http:\/\/www.brennecke.org\/?page_id=1240\">Sprite-Modul<\/a> verantwortlich f\u00fcr die lineare Aussteuerung der gr\u00fcnen senkrechten Linie, der andere ist ein 2:1-Verst\u00e4rker und erzeugt die notwendige Empfindlichkeit der Schaltung.<\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/07\/VGA-Module.zip\">Quelltext zum Download: VGA-Module<\/a><\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/Bildschirmfoto-2012-04-22-um-19.08.07.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1453\" title=\"Bildschirmfoto 2012-04-22 um 19.08.07\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/Bildschirmfoto-2012-04-22-um-19.08.07.png\" alt=\"\" width=\"1024\" height=\"596\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/Bildschirmfoto-2012-04-22-um-19.08.07.png 1024w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/Bildschirmfoto-2012-04-22-um-19.08.07-300x174.png 300w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a>Nachtrag: Es zeigte sich bei Tests, dass das vom ATMega88 erzeugte Signal gen\u00fcgt, den hier gezeigten Multisync-Monitor zu synchronisieren. Der an anderer Stelle  verbaute kleine TFT-Bildschirm zeigte sich jedoch zickiger &#8211; offenbar  sind kleine Unregelm\u00e4\u00dfigkeiten beim Synchronsignal die Ursache. Diese  Unregelm\u00e4\u00dfigkeiten stammen von der Erzeugung der vertikalen Bildsignale &#8211;  ein Problem, das sich leider nicht mehr softwareseitig l\u00f6sen lie\u00df. Interessanterweise synchronisierte der kleine Monitor ohne Probleme auf das <a title=\"VGA-Module (CMOS-Technik)\" href=\"http:\/\/www.brennecke.org\/?page_id=1328\">VGA-Modul in CMOS-Technik <\/a>&#8211; dort sind zwar die Sync-Signale nicht vollst\u00e4ndig VGA-konform; daf\u00fcr ist deren Abfolge innerhalb eines Bildes durch die harte Taktung mittels CMOS-Z\u00e4hler offenbar exakter.<\/p>\n<p>Daher  wurde als L\u00f6sung die Erzeugung der vertikalen Signale (mit Ausnahme der  Synchronimpulse) in einen zweiten AVR vom Typ ATTiny26 verlagert. Dieser  wird mit dem eingebauten Oszillator bei 8MHz betrieben und kommt so mit  einem Minimum an externer Beschaltung aus. Er wird extern durch den  horizontalen Synchronimpuls getriggert und durch den vertikalen  Synchronimpuls mit dem Bild synchronisiert und erzeugt nun die  zus\u00e4tzlichen Bildsignale, ohne den Hauptprozessor zu belasten. Damit  l\u00e4sst sich auch auf dem kleinen TFT-Bildschirm ein perfekt stehendes  Bild erzeugen.<\/p>\n<p>Es ist nicht auszuschlie\u00dfen, dass auch andere Monitore dieses Problem aufweisen. Andere L\u00f6sungsm\u00f6glichkeiten liegen in der Verwendung anderer, leistungsst\u00e4rkerer Mikrocontroller und m\u00f6glicherweise auch in der Programmierung in Assembler statt in C &#8211; beides hatte f\u00fcr mich zu wenig Attraktivit\u00e4t und wurde deshalb nicht weiter verfolgt.<\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/VGA-Horizontal.zip\">Download VGA-Horizontalsteuerung (ATMega88)<\/a><\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2012\/04\/VGA-Vertikal.zip\">Download VGA-Vertikalsteuerung (ATTiny26)<\/a><\/p>\n<p><a title=\"Video-Technik\" href=\"http:\/\/www.brennecke.org\/?page_id=1240\">Zur\u00fcck zur \u00dcbersicht<\/a><\/p>\n<div class=\"twoclick_social_bookmarks_post_1348 social_share_privacy clearfix 1.6.4 locale-de_DE sprite-de_DE\"><\/div><div class=\"twoclick-js\"><script type=\"text\/javascript\">\/* <![CDATA[ *\/\njQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_1348')){$('.twoclick_social_bookmarks_post_1348').socialSharePrivacy({\"services\":{\"facebook\":{\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Facebook senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"action\":\"recommend\",\"language\":\"de_DE\"},\"twitter\":{\"reply_to\":\"\",\"tweet_text\":\"VGA-Module%20%28Mikrocontroller-Technik%29%20%C2%BB%2053%20Cent\",\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Twitter senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"language\":\"de\",\"referrer_track\":\"\"},\"gplus\":{\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Google+ senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"referrer_track\":\"\"},\"flattr\":{\"uid\":\"\",\"status\":\"on\",\"the_title\":\"VGA-Module%20%28Mikrocontroller-Technik%29\",\"the_excerpt\":\"Im%20Rahmen%20meiner%20Besch%C3%A4ftigung%20mit%20Mikrocontrollern%20zeigte%20sich%2C%20dass%20diese%20Chips%20auch%20in%20der%20Lage%20sind%2C%20ein%20VGA-Signal%20zu%20erzeugen.%20Aufgrund%20ihrer%20Flexibilit%C3%A4t%20bieten%20sich%20dabei%20vielf%C3%A4ltige%20M%C3%B6glichkeiten%20-%20sogar%20die%20Einblendung%20eines%20Hintergrundbildes%20oder%20eine%20Textdarstellung%20sind%20m%C3%B6glich.%0D%0A%0D%0A%20%0D%0A%0D%0AIn%20diesem%20Abschnitt%20soll%20jedoch%20einfach%20die%20Nachbildung%20des%20VGA-Moduls%20in%20Software%20mittels%20eine%20...\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Flattr senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\"}},\"txt_help\":\"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \\u00fcbertragen und unter Umst\\u00e4nden auch dort gespeichert. N\\u00e4heres erfahren Sie durch einen Klick auf das <em>i<\\\/em>.\",\"settings_perma\":\"Dauerhaft aktivieren und Daten\\u00fcber-tragung zustimmen:\",\"info_link\":\"http:\\\/\\\/www.heise.de\\\/ct\\\/artikel\\\/2-Klicks-fuer-mehr-Datenschutz-1333879.html\",\"uri\":\"https:\\\/\\\/www.brennecke.org\\\/?page_id=1348\",\"post_id\":1348,\"post_title_referrer_track\":\"VGA-Module+%28Mikrocontroller-Technik%29\",\"display_infobox\":\"on\"});}});\n\/* ]]> *\/<\/script><\/div>","protected":false},"excerpt":{"rendered":"<p>Im Rahmen meiner Besch\u00e4ftigung mit Mikrocontrollern zeigte sich, dass diese Chips auch in der Lage sind, ein VGA-Signal zu erzeugen. Aufgrund ihrer Flexibilit\u00e4t bieten sich dabei vielf\u00e4ltige M\u00f6glichkeiten &#8211; sogar die Einblendung eines Hintergrundbildes oder eine Textdarstellung sind m\u00f6glich. In &hellip; <a href=\"https:\/\/www.brennecke.org\/?page_id=1348\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1449,"parent":1240,"menu_order":2,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/1348"}],"collection":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1348"}],"version-history":[{"count":11,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/1348\/revisions"}],"predecessor-version":[{"id":1368,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/1348\/revisions\/1368"}],"up":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/1240"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/media\/1449"}],"wp:attachment":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}