{"id":2160,"date":"2013-02-18T12:30:20","date_gmt":"2013-02-18T10:30:20","guid":{"rendered":"http:\/\/www.brennecke.org\/?page_id=2160"},"modified":"2013-02-18T12:30:20","modified_gmt":"2013-02-18T10:30:20","slug":"avr-grafik-auf-bildschirmen","status":"publish","type":"page","link":"https:\/\/www.brennecke.org\/?page_id=2160","title":{"rendered":"AVR-Grafik auf Bildschirmen"},"content":{"rendered":"<p>Wenn man mit einem Mikrocontroller der AVR-Serie eine Grafikkarte bauen m\u00f6chte, benutzen m\u00f6chte, hat man mit vielen Einschr\u00e4nkungen zu k\u00e4mpfen. Insbesondere ist dessen Taktrate mit 20 MHz so gering, dass die Zeit kaum gen\u00fcgt, alle Bildpunkte einer Zeile anzusteuern. Hochaufl\u00f6sende Bilder sind auf diese Weise also nicht m\u00f6glich. F\u00fcr die Ansteuerung eines PAL-Bildschirms (720&#215;576 bei 25 Hz) oder per Standard-VGA (640&#215;480 bei 60 Hz) mit Texten gen\u00fcgt dessen Performance jedoch; es bleibt sogar noch etwas Zeit f\u00fcr zus\u00e4tzliche Aufgaben. Ich fand\u00a0 auf den Seiten des russischen Bastlers <a href=\"http:\/\/www.vga-avr.narod.ru\/\">Ibragimov Maxim Rafikovich<\/a> eine passende Grundlage f\u00fcr meine Arbeiten.<\/p>\n<p>Um Text auf der Bildr\u00f6hre anzuzeigen, bedarf es einer Entkopplung verschiedener Aufgaben und Anforderungen, aber auch Einschr\u00e4nkungen:<\/p>\n<ul>\n<li>Jede handels\u00fcbliche PC-Grafikkarte kann Text anzeigen &#8211; bestimmte Buchstaben an bestimmten Positionen, die vorher festgelegt sind. Das vereinfacht den Aufbau der Textdarstellung, die daher auch noch bei gr\u00f6\u00dften St\u00f6rungen meist fehlerfrei funktioniert.<\/li>\n<li>Die Beschr\u00e4nkung auf einen festgelegten Zeichensatz vereinfacht dar\u00fcber hinaus noch die Art und Weise, wie der Text ausgegeben wird. Wenn der Text n\u00e4mlich als fertiges Bitmuster vorliegt, dann erfordert dessen Ausgabe auf dem Bildschirm nur das Auslesen dieses Bitmusters und das Hell- und Dunkeltasten bestimmter Bereiche des Bildes. Es muss also nicht erst ein Bild der Einzelbuchstaben generiert werden &#8211; dieses Bild liegt bereits vor.<\/li>\n<li>Auf der anderen Seite sind dann auch nur bestimmte Zeichen darstellbar &#8211; in unserem Fall werden es 256 unterschiedliche sein, wobei die Grundlage der ASCII-Zeichensatz bildet. Deutsche Sonderzeichen sind ber\u00fccksichtigt.<\/li>\n<li>Au\u00dferdem sind die Zeichen auch nur in bestimmten Gr\u00f6\u00dfen darstellbar, da das Bitmuster von vornherein festliegt. Es sind allenfalls ganzzahlige Vergr\u00f6\u00dferungen m\u00f6glich, die aber das Bild pixelig machen.<\/li>\n<\/ul>\n<p>Wenn man einen Mikrocontroller der AVR-Serie benutzen m\u00f6chte, hat man noch mit weiteren Einschr\u00e4nkungen zu k\u00e4mpfen. Es ist n\u00e4mlich nicht m\u00f6glich, einzelne Bildzeilen sehr hochaufgel\u00f6st auszugeben &#8211; bei etwa 200 Linien ist Schluss, weil der Prozessor dar\u00fcber hinaus nicht mehr genug Dampf hat.<\/p>\n<p>Das hier vorgestellte Konzept dient nat\u00fcrlich in erster Linie dazu, Monitore oder Fernseher anzusteuern. F\u00fcr die Philips-Bildr\u00f6hren geht es schon fast zu weit &#8211; mehr als 12\u00a0 Zeichen und 3 Zeilen sind dort kaum zu entziffern (6105), weil der Bildschirm einfach zu klein ist. Das hier vorgestellte Modul ist daher mehrfach umschaltbar &#8211; im BRE-Modus zeigt es gro\u00dfe Schriften mit wenig Zeichen pro Zeile, im Monitor-Modus hingegen die maximal m\u00f6gliche Anzahl Zeichen an. Es sind nun folgende Aufl\u00f6sungen m\u00f6glich:<\/p>\n<ul>\n<li>FBAS\n<ul>\n<li>48 Zeichen in 20 Zeilen<\/li>\n<li>48 Zeichen in 10 Zeilen (doppelte H\u00f6he)<\/li>\n<li>25 Zeichen in 5 Zeilen<\/li>\n<li>13 Zeichen in 2 Zeilen (die optimale Aufl\u00f6sung f\u00fcr die BRE)<\/li>\n<\/ul>\n<\/li>\n<li>VGA\n<ul>\n<li>24 Zeichen in 20 Zeilen<\/li>\n<li>24 Zeichen in 10 Zeilen (doppelte H\u00f6he)<\/li>\n<li>12 Zeichen in 5 Zeilen<\/li>\n<li>12 Zeichen in 2 Zeilen (die optimale Aufl\u00f6sung f\u00fcr die BRE)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Das Bild zeigt die m\u00f6glichen Aufl\u00f6sungen dargestellt auf einem PC-Monitor. Die beispielhafte Darstellung der Zeichen ist im hier dargestellten Modul abrufbar als Demonstrationsmodus.<\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/01\/Auflo\u0308sungen.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"Auflo\u0308sungen\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/01\/Auflo\u0308sungen-222x300.jpg\" width=\"222\" height=\"300\" \/><\/a><\/p>\n<p>Grunds\u00e4tzlich sind Grafikkarten nach dem immer gleichen Prinzip aufgebaut. Um einen Bildspeicher als zentrales Element herum arbeiten zwei Baugruppen: Die eine ist f\u00fcr den Aufbau des Bildes verantwortlich &#8211; bei heutigen Grafikkarten \u00fcbernimmt diese Aufgabe der Grafikprozessor. Auf der anderen Seite steht eine Einheit, die den Speicher regelm\u00e4\u00dfig ausliest, um den Signalausgang entsprechend zu beeinflussen. Die Grafikkarte erzeugt zudem auch Synchronsignale f\u00fcr die horizontale und vertikale Position. Ein- und Ausgabe des Bildspeichers sind bei g\u00fcnstigen Grafikkarten (Stichwort &#8222;DRAM&#8220;) miteinander verkn\u00fcpft &#8211; es darf nur geschrieben (gerendert) werden, wenn gerade nicht gelesen wird, um Bildst\u00f6rungen zu vermeiden. Schnellere Grafikkarten verwenden VRAM &#8211; dort kann ohne Probleme gleichzeitig gelesen und geschrieben werden. Um sogenanntes Tearing (also das Verziehen einzelner Bildteile) zu Verhindern, sollten Lese- und Schreibvorg\u00e4nge aber zumindest auf das vertikale Synchronsignal abgestimmt werden. Falls dem Leser \u00e4hnliche Begriffe schon einmal beim Kauf oder der Konfiguration der Grafikkarte (meist bei Spielen) begegnet sind, kennt er jetzt den Hintergrund.<\/p>\n<p>Dieses Projekt vereinfacht den Prozess noch einmal. Rafikovich hat eine clevere Schaltung vorgelegt, bei der Rendering und Bildausgabe miteinander verbunden werden. Die AVR-Prozessoren besitzen ein sogenanntes SPI, das &#8222;<a href=\"http:\/\/www.mikrocontroller.net\/articles\/Serial_Peripheral_Interface\">Serial Peripheral Interface<\/a>&#8222;. Dieses dient zum Datenaustausch mit Peripherie, und genau dazu wird es hier auch benutzt &#8211; zwischen den Zeilensynchronsignalen werden fortw\u00e4hrend Daten ausgegeben, die zeitlich den einzelnen Pixeln der Zeichen entsprechen. Auf diese Weise entsteht ein fortw\u00e4hrender synchroner Datenstrom, der den Bildinhalt Zeile f\u00fcr Zeile enth\u00e4lt.<\/p>\n<p>Aufgrund der etwa doppelt so hohen Zeilenfrequenz bei VGA erkl\u00e4rt sich auch, warum hier nur 24 Zeichen dargestellt werden k\u00f6nnen, w\u00e4hrend es bei FBAS 48 sind.<\/p>\n<p>Es sollte nicht verschwiegen werden, dass diese Form der Ansteuerung ein paar kleine Nachteile hat:<\/p>\n<ul>\n<li>Wenn die Daten auf dem SPI-Bus zu schnell geschrieben werden, werden sie ignoriert. man muss also das Timing sehr genau einhalten, damit alle Zeichen sichtbar werden &#8211; und nicht nur die H\u00e4lfte.<\/li>\n<li>Das SPI schaltet den benutzten Ausgang automatisch auf einen High-Pegel, wenn es nicht ben\u00f6tigt wird. Wenn der Buchstabe fertig geschrieben wurde, steht also automatisch ein High-Pegel am Ausgang; das Bild wird hell. Da man die Ausgabe nicht so exakt takten kann, dass Buchstabe auf Buchstabe folgt, f\u00fchrt dies zu h\u00e4sslichen wei\u00dfen vertikalen Streifen, wenn man wei\u00dfe Buchstaben auf schwarzem Grund ausgeben m\u00f6chte. Aus diesem Grund ist der gesamte benutzte Font (der Zeichensatz) invertiert und das Bild mit schwarzer Schrift auf wei\u00dfem Grund &#8211; der Effekt bleibt dann unsichtbar.<\/li>\n<\/ul>\n<p><a title=\"Text-Modul\" href=\"http:\/\/www.brennecke.org\/?page_id=2122\">Zur\u00fcck zum Hauptartikel<\/a><\/p>\n<div class=\"twoclick_social_bookmarks_post_2160 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_2160')){$('.twoclick_social_bookmarks_post_2160').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\":\"AVR-Grafik%20auf%20Bildschirmen%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\":\"AVR-Grafik%20auf%20Bildschirmen\",\"the_excerpt\":\"Wenn%20man%20mit%20einem%20Mikrocontroller%20der%20AVR-Serie%20eine%20Grafikkarte%20bauen%20m%C3%B6chte%2C%20benutzen%20m%C3%B6chte%2C%20hat%20man%20mit%20vielen%20Einschr%C3%A4nkungen%20zu%20k%C3%A4mpfen.%20Insbesondere%20ist%20dessen%20Taktrate%20mit%2020%20MHz%20so%20gering%2C%20dass%20die%20Zeit%20kaum%20gen%C3%BCgt%2C%20alle%20Bildpunkte%20einer%20Zeile%20anzusteuern.%20Hochaufl%C3%B6sende%20Bilder%20sind%20auf%20diese%20Weise%20also%20nicht%20m%C3%B6glich.%20F%C3%BCr%20die%20Ansteuerung%20eines%20PAL-Bildschirms%20%28720x576%20bei%2025%20Hz%29%20oder%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=2160\",\"post_id\":2160,\"post_title_referrer_track\":\"AVR-Grafik+auf+Bildschirmen\",\"display_infobox\":\"on\"});}});\n\/* ]]> *\/<\/script><\/div>","protected":false},"excerpt":{"rendered":"<p>Wenn man mit einem Mikrocontroller der AVR-Serie eine Grafikkarte bauen m\u00f6chte, benutzen m\u00f6chte, hat man mit vielen Einschr\u00e4nkungen zu k\u00e4mpfen. Insbesondere ist dessen Taktrate mit 20 MHz so gering, dass die Zeit kaum gen\u00fcgt, alle Bildpunkte einer Zeile anzusteuern. Hochaufl\u00f6sende &hellip; <a href=\"https:\/\/www.brennecke.org\/?page_id=2160\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2122,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2160"}],"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=2160"}],"version-history":[{"count":1,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2160\/revisions"}],"predecessor-version":[{"id":2161,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2160\/revisions\/2161"}],"up":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2122"}],"wp:attachment":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}