{"id":1,"date":"2013-03-03T14:12:18","date_gmt":"2013-03-03T14:12:18","guid":{"rendered":"http:\/\/martin.guenzel-ag.de\/?p=1"},"modified":"2013-03-06T18:05:13","modified_gmt":"2013-03-06T16:05:13","slug":"hallo-welt","status":"publish","type":"post","link":"https:\/\/martin.guenzel-ag.de\/?p=1","title":{"rendered":"Erste Schritte mit AVR&#8217;s unter Mac"},"content":{"rendered":"<p>Dies ist eine Anleitung f\u00fcr Einsteiger, die noch nie was mit AVR Programmierung gemacht haben. Ich programmiere alle meine AVR&#8217;s unter Mac und nutze Freeware-Tools.\u00a0Diese Anleitung zeigt die kosteng\u00fcnstigste Variante f\u00fcr AVR Programmierung unter Mac.<\/p>\n<p><strong>Hardware<\/strong><\/p>\n<p>Beim Flashen von AVR&#8217;s kommt man ohne Programmieradapter nicht weit. Ich verwende f\u00fcr alle meine AVR&#8217;s den AVR ISP2 USB mk2 (http:\/\/www.atmel.com\/tools\/AVRISPMKII.aspx). Zus\u00e4tzlich zu dem Adapter ben\u00f6tigt man entweder ein Programmierboard von Atmel oder man baut sich eine &#8222;Kabelpeitsche&#8220; selber und verwendet ein handels\u00fcbliches Steckboard. In dieser Anleitung verwende ich einen Attiny13. Das ganze wird wie folgt verkabelt und mit einem 5V Netzteil versorgt&#8230;<\/p>\n<p><a href=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/remotesnap000002.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-10\" alt=\"Programmieraufbau\" src=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/remotesnap000002.jpg\" width=\"2592\" height=\"1936\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/remotesnap000005.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-11\" alt=\"belegung\" src=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/remotesnap000005.jpg\" width=\"1094\" height=\"756\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/grundschaltung.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-12\" alt=\"grundschaltung platine\" src=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/grundschaltung.jpg\" width=\"843\" height=\"340\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Die Pins Reset, SCK, MISO, MOSI am Mikrocontroller gibt es bei allen AVR&#8217;s und sollten bei anderen Controllern entsprechend aus dem Datenblatt herausgesucht werden. Mit diesen Pins wird der Controller geflashed. Sobald die Programmierung auf dem Chip ist, k\u00f6nnen diese Pins (mit Au\u00dfnahme des Reset-Pins) ganz normal als Eingang oder Ausgang verwendet werden. Der 100nF Kondensator geh\u00f6rt bei jeder AVR-Schaltung mit dazu, da er Stromschwankungen ausgleicht. Er sollte in der N\u00e4he des Chips angebracht werden.<\/p>\n<p>Der AVRISP kann jetzt mit dem Mac verbunden werden und es sollte nun die Status-LED im AVRISP leuchten.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Software<\/strong><\/p>\n<p><strong><\/strong>Nun muss die entsprechende Software installiert werden, um den Programmieradapter anzusteuern.<\/p>\n<p>Unter\u00a0http:\/\/www.obdev.at\/products\/crosspack\/index.html das &#8222;Crosspack&#8220; herunterladen, entpacken und installieren. Diese Software compiliert die C-Programmierung und gibt sie dem AVRISP weiter.<\/p>\n<p>Als n\u00e4chstes das Terminal unter Programme\/Dienstprogramme\/Terminal \u00f6ffnen und folgenden Befehl eingeben:<\/p>\n<p><em>sudo port install avr-libc<\/em><\/p>\n<p>Sollte jetzt ein Fehler angezeigt werden, dann fehlt die Paketverwaltung &#8222;MacPorts&#8220;, sie kann unter\u00a0http:\/\/www.macports.org kostenlos heruntergeladen und installiert werden. MacPorts kontrolliert und steuert Installationen von freien Entwicklersoftwaren, indem es alle zugeh\u00f6rigen Pakete aus dem Internet l\u00e4dt und sie zusammenfassend installiert. Ist MacPorts erfolgreich installiert, muss der Befehl erneut eingegeben werden.<\/p>\n<p>Nun Ihr Passwort eingeben,\u00a0mit Return best\u00e4tigen und die Installation beginnt.<\/p>\n<p>Das ganze kann eine Zeit dauern, da erst alle Pakete aus dem Internet geladen werden.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Ansprechen des Mikroprozessors<\/strong><\/p>\n<p>Die komplette Kommunikation mit dem Chip findet \u00fcber das Terminal statt. Es gibt ein paar Befehle, mit denen man die wichtigsten Funktionen ausf\u00fchren kann. Beim ersten Versuch empfiehlt sich eine Statusabfrage, ob alles richtig angeschlossen ist und der AVRISP mit dem Chip kommunizieren kann. Daf\u00fcr muss einfach folgender Befehl ins Terminal eingegeben werden:<\/p>\n<p><em>avrdude -c avrispv2 -P usb -p t13<\/em><\/p>\n<p>Wenn alles gut l\u00e4uft, sollte Folgendes danach im Terminal erscheinen:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/Bildschirmfoto-2013-03-04-um-20.27.52.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-28\" alt=\"terminal1\" src=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/Bildschirmfoto-2013-03-04-um-20.27.52.png\" width=\"610\" height=\"142\" srcset=\"https:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/Bildschirmfoto-2013-03-04-um-20.27.52.png 610w, https:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/Bildschirmfoto-2013-03-04-um-20.27.52-300x69.png 300w\" sizes=\"(max-width: 610px) 100vw, 610px\" \/><\/a><\/p>\n<p>In der &#8222;device signature&#8220; sind grundlegende Informationen zum Chip enthalten. Der verschl\u00fcsselte Wert best\u00e4tigt, dass es sich um einen Attiny13 handelt.<\/p>\n<p>Bei jedem Befehl, den man ins Terminal eingibt, muss man angeben um welchen AVR-Mikrocontroller es sich handelt. Oben geschieht dies mit der Abk\u00fcrzung\u00a0<em>t13<\/em>, welche f\u00fcr den Attiny13 steht. Dies ist komplette Liste der Abk\u00fcrzungen f\u00fcr AVR-Typen:<\/p>\n<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"8%\">t10<\/td>\n<td valign=\"top\" width=\"25%\">ATtiny10<\/td>\n<td valign=\"top\" width=\"8%\">m169<\/td>\n<td valign=\"top\" width=\"25%\">ATMEGA169<\/td>\n<td valign=\"top\" width=\"8%\">x128a4<\/td>\n<td valign=\"top\" width=\"25%\">ATXMEGA128A4<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t11<\/td>\n<td valign=\"top\">ATtiny11<\/td>\n<td valign=\"top\">m16u2<\/td>\n<td valign=\"top\">ATmega16U2<\/td>\n<td valign=\"top\">x16a4<\/td>\n<td valign=\"top\">ATXMEGA16A4<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t12<\/td>\n<td valign=\"top\">ATtiny12<\/td>\n<td valign=\"top\">m2560<\/td>\n<td valign=\"top\">ATMEGA2560<\/td>\n<td valign=\"top\">x192a1<\/td>\n<td valign=\"top\">ATXMEGA192A1<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t13<\/td>\n<td valign=\"top\">ATtiny13<\/td>\n<td valign=\"top\">m2561<\/td>\n<td valign=\"top\">ATMEGA2561<\/td>\n<td valign=\"top\">x192a3<\/td>\n<td valign=\"top\">ATXMEGA192A3<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t15<\/td>\n<td valign=\"top\">ATtiny15<\/td>\n<td valign=\"top\">m32<\/td>\n<td valign=\"top\">ATMEGA32<\/td>\n<td valign=\"top\">x256a1<\/td>\n<td valign=\"top\">ATXMEGA256A1<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t2313<\/td>\n<td valign=\"top\">ATtiny2313<\/td>\n<td valign=\"top\">m324p<\/td>\n<td valign=\"top\">ATMEGA324P<\/td>\n<td valign=\"top\">x256a3<\/td>\n<td valign=\"top\">ATXMEGA256A3<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t24<\/td>\n<td valign=\"top\">ATtiny24<\/td>\n<td valign=\"top\">m324pa<\/td>\n<td valign=\"top\">ATmega324PA<\/td>\n<td valign=\"top\">x256a3b<\/td>\n<td valign=\"top\">ATXMEGA256A3B<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t25<\/td>\n<td valign=\"top\">ATtiny25<\/td>\n<td valign=\"top\">m325<\/td>\n<td valign=\"top\">ATMEGA325<\/td>\n<td valign=\"top\">x32a4<\/td>\n<td valign=\"top\">ATXMEGA32A4<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t26<\/td>\n<td valign=\"top\">ATTINY26<\/td>\n<td valign=\"top\">m3250<\/td>\n<td valign=\"top\">ATMEGA3250<\/td>\n<td valign=\"top\">x64a1<\/td>\n<td valign=\"top\">ATXMEGA64A1<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t261<\/td>\n<td valign=\"top\">ATTINY261<\/td>\n<td valign=\"top\">m328p<\/td>\n<td valign=\"top\">ATMEGA328P<\/td>\n<td valign=\"top\">x64a3<\/td>\n<td valign=\"top\">ATXMEGA64A3<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t4<\/td>\n<td valign=\"top\">ATtiny4<\/td>\n<td valign=\"top\">m329<\/td>\n<td valign=\"top\">ATMEGA329<\/td>\n<td valign=\"top\">x64a4<\/td>\n<td valign=\"top\">ATXMEGA64A4<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t4313<\/td>\n<td valign=\"top\">ATtiny4313<\/td>\n<td valign=\"top\">m3290<\/td>\n<td valign=\"top\">ATMEGA3290<\/td>\n<td valign=\"top\">1200<\/td>\n<td valign=\"top\">AT90S1200<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t44<\/td>\n<td valign=\"top\">ATtiny44<\/td>\n<td valign=\"top\">m3290p<\/td>\n<td valign=\"top\">ATMEGA3290P<\/td>\n<td valign=\"top\">2313<\/td>\n<td valign=\"top\">AT90S2313<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t45<\/td>\n<td valign=\"top\">ATtiny45<\/td>\n<td valign=\"top\">m329p<\/td>\n<td valign=\"top\">ATMEGA329P<\/td>\n<td valign=\"top\">2333<\/td>\n<td valign=\"top\">AT90S2333<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t461<\/td>\n<td valign=\"top\">ATTINY461<\/td>\n<td valign=\"top\">m32u2<\/td>\n<td valign=\"top\">ATmega32U2<\/td>\n<td valign=\"top\">2343<\/td>\n<td valign=\"top\">AT90S2343<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t5<\/td>\n<td valign=\"top\">ATtiny5<\/td>\n<td valign=\"top\">m32u4<\/td>\n<td valign=\"top\">ATmega32U4<\/td>\n<td valign=\"top\">4414<\/td>\n<td valign=\"top\">AT90S4414<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t84<\/td>\n<td valign=\"top\">ATtiny84<\/td>\n<td valign=\"top\">m48<\/td>\n<td valign=\"top\">ATMEGA48<\/td>\n<td valign=\"top\">4433<\/td>\n<td valign=\"top\">AT90S4433<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t85<\/td>\n<td valign=\"top\">ATtiny85<\/td>\n<td valign=\"top\">m64<\/td>\n<td valign=\"top\">ATMEGA64<\/td>\n<td valign=\"top\">4434<\/td>\n<td valign=\"top\">AT90S4434<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t861<\/td>\n<td valign=\"top\">ATTINY861<\/td>\n<td valign=\"top\">m640<\/td>\n<td valign=\"top\">ATMEGA640<\/td>\n<td valign=\"top\">8515<\/td>\n<td valign=\"top\">AT90S8515<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t88<\/td>\n<td valign=\"top\">attiny88<\/td>\n<td valign=\"top\">m644<\/td>\n<td valign=\"top\">ATMEGA644<\/td>\n<td valign=\"top\">8535<\/td>\n<td valign=\"top\">AT90S8535<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">t9<\/td>\n<td valign=\"top\">ATtiny9<\/td>\n<td valign=\"top\">m644p<\/td>\n<td valign=\"top\">ATMEGA644P<\/td>\n<td valign=\"top\">c128<\/td>\n<td valign=\"top\">AT90CAN128<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m103<\/td>\n<td valign=\"top\">ATMEGA103<\/td>\n<td valign=\"top\">m645<\/td>\n<td valign=\"top\">ATMEGA645<\/td>\n<td valign=\"top\">c32<\/td>\n<td valign=\"top\">AT90CAN32<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m128<\/td>\n<td valign=\"top\">ATMEGA128<\/td>\n<td valign=\"top\">m6450<\/td>\n<td valign=\"top\">ATMEGA6450<\/td>\n<td valign=\"top\">c64<\/td>\n<td valign=\"top\">AT90CAN64<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m1280<\/td>\n<td valign=\"top\">ATMEGA1280<\/td>\n<td valign=\"top\">m649<\/td>\n<td valign=\"top\">ATMEGA649<\/td>\n<td valign=\"top\">pwm2<\/td>\n<td valign=\"top\">AT90PWM2<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m1281<\/td>\n<td valign=\"top\">ATMEGA1281<\/td>\n<td valign=\"top\">m6490<\/td>\n<td valign=\"top\">ATMEGA6490<\/td>\n<td valign=\"top\">pwm2b<\/td>\n<td valign=\"top\">AT90PWM2B<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m1284p<\/td>\n<td valign=\"top\">ATMEGA1284P<\/td>\n<td valign=\"top\">m8<\/td>\n<td valign=\"top\">ATMEGA8<\/td>\n<td valign=\"top\">pwm3<\/td>\n<td valign=\"top\">AT90PWM3<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m128rfa1<\/td>\n<td valign=\"top\">ATMEGA128RFA1<\/td>\n<td valign=\"top\">m8515<\/td>\n<td valign=\"top\">ATMEGA8515<\/td>\n<td valign=\"top\">pwm3b<\/td>\n<td valign=\"top\">AT90PWM3B<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m16<\/td>\n<td valign=\"top\">ATMEGA16<\/td>\n<td valign=\"top\">m8535<\/td>\n<td valign=\"top\">ATMEGA8535<\/td>\n<td valign=\"top\">ucr2<\/td>\n<td valign=\"top\">32UC3A0512<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m161<\/td>\n<td valign=\"top\">ATMEGA161<\/td>\n<td valign=\"top\">m88<\/td>\n<td valign=\"top\">ATMEGA88<\/td>\n<td valign=\"top\">usb1286<\/td>\n<td valign=\"top\">AT90USB1286<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m162<\/td>\n<td valign=\"top\">ATMEGA162<\/td>\n<td valign=\"top\">m88p<\/td>\n<td valign=\"top\">ATMEGA88P<\/td>\n<td valign=\"top\">usb1287<\/td>\n<td valign=\"top\">AT90USB1287<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m163<\/td>\n<td valign=\"top\">ATMEGA163<\/td>\n<td valign=\"top\">m8u2<\/td>\n<td valign=\"top\">ATmega8U2<\/td>\n<td valign=\"top\">usb162<\/td>\n<td valign=\"top\">AT90USB162<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m164p<\/td>\n<td valign=\"top\">ATMEGA164P<\/td>\n<td valign=\"top\">x128a1<\/td>\n<td valign=\"top\">ATXMEGA128A1<\/td>\n<td valign=\"top\">usb646<\/td>\n<td valign=\"top\">AT90USB646<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m168<\/td>\n<td valign=\"top\">ATMEGA168<\/td>\n<td valign=\"top\">x128a1d<\/td>\n<td valign=\"top\">ATXMEGA128A1REVD<\/td>\n<td valign=\"top\">usb647<\/td>\n<td valign=\"top\">AT90USB647<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">m168p<\/td>\n<td valign=\"top\">ATMEGA168P<\/td>\n<td valign=\"top\">x128a3<\/td>\n<td valign=\"top\">ATXMEGA128A3<\/td>\n<td valign=\"top\">usb82<\/td>\n<td valign=\"top\">AT90USB82<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><strong>Beispielscript: LED Blinker<\/strong><\/p>\n<p>Als N\u00e4chstes soll nat\u00fcrlich ein Programm auf den Chip geflashed werden. Unter folgendem Link befindet sich eine Zip-Datei mit einem C Beispielscript:<\/p>\n<p><a href=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/DemoScriptBlinker.zip\">DemoScriptBlinker<\/a><\/p>\n<p>(Das Script sollte normalerweise bei jedem AVR funktionieren, der Pins mit der Bezeichung PB1,PB2,PB3, etc.. besitzt. Getestet ist das Programm von mir bisher mit dem Attiny13, Attiny45 und Attiny2313)<\/p>\n<p>Prinzipiell macht es Sinn, f\u00fcr jedes Script einen Ordner (hier DemoScriptBlinker) anzulegen, in dem sich die Scriptdatei main.c befindet. Man beh\u00e4lt so den \u00dcberblick und der Terminal-Befehl f\u00fcrs Compilen und Flashen bleibt gleich.<\/p>\n<p>Anschlie\u00dfend wieder das Terminal \u00f6ffnen und mit folgendem Befehl das Verzeichnis des Ordners ausw\u00e4hlen.<\/p>\n<p><em>cd \/Users\/(Hier den Pfad zum Ordner angeben)\/DemoScriptBlinker<\/em><\/p>\n<p>Einfacher gehts auch, indem man erst nur &#8222;<em>cd <\/em>&#8220; eintippt und schlie\u00dflich per Drag&amp;Drop den Ordner ins Terminal zieht. Nun mit Return best\u00e4tigen und es sollte nun ab sofort &#8222;DemoScriptBlinker&#8220; am Anfang jeder Terminal-Zeile stehen. Der Ordner ist jetzt dauerhaft im Terminal festgelegt und kann jederzeit mit dem cd-Befehl ge\u00e4ndert werden. Das Verzeichnis wird nicht \u00fcbernommen, wenn man ein neues Fenster \u00f6ffnet oder Terminal schlie\u00dft.<\/p>\n<p>Nun den 5-zeiligen Terminal-Befehl eingeben und mit Return best\u00e4tigen:<\/p>\n<p><em>avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny13 -c main.c -o main.o<\/em><br \/>\n<em>avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny13 -o main.elf main.o<\/em><br \/>\n<em>rm -f main.hex<\/em><br \/>\n<em>avr-objcopy -j .text -j .data -O ihex main.elf main.hex<\/em><br \/>\n<em>avrdude -c avrispv2 -P usb -p t13 -U flash:w:main.hex<\/em><\/p>\n<p>Nach kurzer Zeit sollte dann das Programm auf den Chip geflashed sein. Der Verlauf im Terminal sollte dann etwa so aussehen:<\/p>\n<p><a href=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/Bildschirmfoto-2013-03-04-um-19.34.10.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-25\" alt=\"terminal2\" src=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/Bildschirmfoto-2013-03-04-um-19.34.10.png\" width=\"681\" height=\"420\" srcset=\"https:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/Bildschirmfoto-2013-03-04-um-19.34.10.png 681w, https:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/Bildschirmfoto-2013-03-04-um-19.34.10-300x185.png 300w, https:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/Bildschirmfoto-2013-03-04-um-19.34.10-624x384.png 624w\" sizes=\"(max-width: 681px) 100vw, 681px\" \/><\/a><\/p>\n<p>Beim Compilen wurden mehrere Dateien im Ordner angelegt und er sollte nun so aussehen:<\/p>\n<ul>\n<li>main.c<\/li>\n<li>main.elf<\/li>\n<li>main.hex<\/li>\n<li>main.o<\/li>\n<\/ul>\n<p><strong>Was macht aber jetzt der 5-zeilige Terminal Befehl?<\/strong><\/p>\n<p>In den ersten 2 Zeilen wird das main.c Script compiliert und es entstehen die Dateien main.o und main.elf. Wichtig ist hier, wie beim Ansprechen\/Flashen des Chips, dass der Typ angegeben wird. Allerdings wird hier der vollst\u00e4ndige Name angegeben &#8222;attiny13&#8220;. Ebenso muss der Compiler wissen, mit welcher Taktung der Chip l\u00e4uft um delay-Warteschleifen im Script zeitkorrekt ausf\u00fchren zu k\u00f6nnen. Die Angabe erfolgt hierbei in Hertz. Je nachdem wie der attiny13 vom Werk her konfiguriert ist, variiert diese Angabe. Wir nehmen einfach mal an, dass er mit 1MHz getaktet ist. WICHTIG: Die Taktung wird hierbei nicht ver\u00e4ndert und muss auch nicht mit der echten Taktung \u00fcbereinstimmen! Diese Angabe ist nur f\u00fcr den Compiler, um Zeitschleifen in Programmen richtig zu errechnen!<\/p>\n<p><em>avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny13 -c main.c -o main.o<\/em><br \/>\n<em>avr-gcc -Wall -Os -DF_CPU=1000000 -mmcu=attiny13 -o main.elf main.o<\/em><\/p>\n<p>Nun wird (falls es schon eine gibt) die alte main.hex Datei gel\u00f6scht:<\/p>\n<p><em>rm -f main.hex<\/em><\/p>\n<p>Jetzt wird die main.elf Datei in eine hexfile-Datei umgewandelt:<\/p>\n<p><em>avr-objcopy -j .text -j .data -O ihex main.elf main.hex<\/em><\/p>\n<p>Dies ist schlie\u00dflich der Befehl, mit dem die main.hex Datei auf den Chip geflashed wird. Wie bei der Statusabfrage muss hier der AVR-Typ, in dem Fall der Attiny13, angegeben werden. Der Ausdruck avrispv2 gibt an, dass es sich um den AVR ISP Mk2 Programmieradapter handelt.<\/p>\n<p><em>avrdude -c avrispv2 -P usb -p t13 -U flash:w:main.hex<\/em><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: left;\">Das Programm bewirkt, dass an allen I\/O Pins des Mikrocontrollers jetzt abwechselnd 5V und 0V anliegen. Es kann jetzt direkt eine LED mit Vorwiderstand f\u00fcr 5V (z.b. 220 Ohm) an dem Pin 2,3,5,6 oder 7 nach GND angeschlossen werden.<\/p>\n<p style=\"text-align: left;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-32\" alt=\"ledblinker\" src=\"http:\/\/martin.guenzel-ag.de\/wp-content\/uploads\/2013\/03\/remotesnap0000061.jpg\" width=\"484\" height=\"648\" \/><\/p>\n<p style=\"text-align: left;\">Viel Spa\u00df damit!<\/p>\n<p style=\"text-align: left;\">\n","protected":false},"excerpt":{"rendered":"<p>Dies ist eine Anleitung f\u00fcr Einsteiger, die noch nie was mit AVR Programmierung gemacht haben. Ich programmiere alle meine AVR&#8217;s unter Mac und nutze Freeware-Tools.\u00a0Diese Anleitung zeigt die kosteng\u00fcnstigste Variante f\u00fcr AVR Programmierung unter Mac. Hardware Beim Flashen von AVR&#8217;s kommt man ohne Programmieradapter nicht weit. Ich verwende f\u00fcr alle meine AVR&#8217;s den AVR ISP2 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=\/wp\/v2\/posts\/1"}],"collection":[{"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1"}],"version-history":[{"count":17,"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=\/wp\/v2\/posts\/1\/revisions"}],"predecessor-version":[{"id":9,"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=\/wp\/v2\/posts\/1\/revisions\/9"}],"wp:attachment":[{"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/martin.guenzel-ag.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}