AVR910 - Programmer für AVR-Prog und avrdude

AVR-Prog Gehäuse

Optimiert und beschleunigt für die Verwendung mit USB -> seriell Wandler !

Software V3.8b mit verbessertem Fuse- und Lockbit Support.

Beschreibung des Aufbaues mit ATTiny2313 statt AT90S2313

Neu: verbesserter Support ab avrdude Version 5.6

Inhalt:
Schaltung
Firmware
Supportete Controller
Steuerprogramme

Erweitern auf neue Controller
Verwendung von USB -> seriell Adaptern
Was tun bei Fehlern
Bekannte Probleme
Gehäuseeinbau
Download
Stückliste
Programmierte Controller, Platinen, Fertiggeräte
Einsatz des ATTiny2313

Beschreibung
Die Firmware für diesen Programmer basiert auf der Application Note 910 von Atmel. Die Original Applikation ist allerdings schon etwas älter, und die Software  des AT90S1200 wird von Atmel schon länger nicht mehr gepflegt. Dies gilt jedoch nicht für das Windows Steuerprogramm AVR-Prog, das in der aktuellen Version 1.40 im Paket des AVR Studio seit  Version 4.11 (Build 401) enthalten ist. Das Programm selbst kann natürlich auch vom Studio 3.x oder direkt aufgerufen werden. Vor einiger Zeit habe ich eine aktualisierte und wesentlich beschleunigte Version der Firmware, die jetzt auch auf einem AT90S2313 (oder auch ATTiny2313 )basiert gefunden. Diese wurde von mir weiter verbessert und ich habe neuere Controller implementiert. In der aktualisierten Version ist die "alte" Applikation Note dann doch wieder eine interessante Alternative.

Durch Anschluss an den seriellen Port fallen diverse Timing/Dongle und WinNT/2000/XT Anfangsprobleme weg.  In den neueren Programmern von Atmel kommt das Protokoll des Bootloaders, wie in Atmel Application Note 109 beschrieben zum Einsatz. Seit der Firmwareversion 3.6 ist dieses Protokoll ebenfalls im Programmer implementiert. Durch die Integration dieser "block mode" Kommandos wurde der Datentransfer deutlich beschleunigt, was sich sehr stark bei der Verwendung eines USB-Seriell Wandlers bemerkbar macht.

Schaltungsbeschreibung
An der Originalschaltung hat sich nur marginal etwas geändert. Es gibt bei diesem Programmer eine LED zur  Zustandsanzeige. Verwendet man dazu eine normale LED hat dies den Nachteil, das diese im "Ruhezustand" des Programmers aus ist. Nur während des Programmiervorganges leuchtet die LED auf. Hier weiss man nicht immer sicher, ob noch eine Versorgungsspannung anliegt.
Ich habe die Verwendung einer 2 poligen Duo LED vorgesehen und die Software entsprechend angepasst. Nach dem  anlegen der Versorgungsspannung wechselt zuerst die Farbe von rot über gelb nach grün. Während des Programmiervorganges leuchtet die LED rot, nach Ende der Programmierung leuchtet sie wieder grün.

LED-Variante R1*
Ist gerade keine Duo LED zur Hand oder möchte man auf dieses Gimmik verzichten, kann auch eine standart LED verwendet werden. Hierzu den Widerstand R1 dann liegend in die mit R1* gekennzeichnete Bohrung einlöten. Achtung: auf richtige Polung achten, Pin 12 des Controllers ist die Kathode!.

Ich habe meine Duo LED von Reichelt. Anscheinend gibt es aber verschiedene Bauformen, d.h. verschiedene Polungen der Diode. Falls die Farben nicht stimmen, muss die Diode anders herum eingelötet werden.

Zweite Änderung ist der Taster S1 zur Eigenprogrammierung der AT90S2313 Software. Man muss also bei zukünftigen Softwareupdates den Mikrocontroller nicht mehr ausbauen. Das ist insbesondere recht praktisch, wenn man den Programmer in einen Schrumpfschlauch einpacken möchte.Natürlich braucht man dazu einen 2. Programmer, siehe unten....

Um die serielle Schnittstelle mit höherer Geschwindigkeit als 19200 Baud nutzen zu können, habe ich einen 7,3728 MHz Quarz verwendet. So sind 115.200 Baud möglich. Die Software und das Timing sind auf diesen Quarz angepasst.

Achtung! Nicht alle haben einen 7,3728 Mhz Quarz herumliegen und einige Programmer bzw. einige PCs (selten) machen offenbar Probleme mit den 115200 Baud. Im Sourcefile habe ich deshalb einige Zeilen mit alternativen Quarzen und Baudraten eingefügt. Einfach die passenden Zeilen auskommentieren, (die anderen dann wieder kommentieren) und den Code compilieren.

Der Schaltplan entspricht bis auf Taster und LED dem Originalplan der Applikation Note 910.  Außerdem  wird ein AT90S2313 verwendet und mit 7.3728 Mhz betrieben.

Achtung!:
Wichtig für alle, die einen "alten" AVR910 Brenner mit AT90S1200 umbauen! Im Original Schaltplan von Atmel und auch in der Original Software sind die Funktionen der MISO und MOSI Pins vertauscht. (der MOSI Pin hat die MISO Funktion und umgekehrt). In dieser Schaltung und natürlich auch in der neuen Software sind die Funktionen wie die Beschriftung.
Wer eine universelle Software möchte, und sich nicht um die MISO/MOSI Pinbelegung kümmern will, findet hier eine dafür angepasste Version der Software von Clemens:
http://www.mikrocontroller.net/forum/read-4-51697.html#422370

AT90S2313 abgekündigt: Aufgrund der vielen Anfragen zu diesem Thema, und da Reichelt ihn seit kurzem nicht mehr im online Katalog hat, habe ich eine Beschreibung zum umrüsten auf den ATTiny2313 angefügt. Der Sourcecode braucht dafür nicht verändert zu werden.


Schaltplan AVR-Prog
(auf das Bild klicken für Grossansicht)






                                                        

Programmierstecker Anschlussbelegung
Der Programmieradapter ist ein 10poliger Wannenstecker,
der die "übliche" Atmel Pinbelegung des ISP Steckers aufweist.

Der AVR910 bezieht seine 5V Versorgung von der Zielschaltung!
Der LED Pin ist in dieser Schaltung nicht belegt!
ISP-Belegung
Draufsicht                                             

Software

An Software gibt es 2 Teile. Zum ersten die Firmware, die in den 90S2313 gebrannt werden muss. Hier stellt sich das typische Henne Ei Problem. wer noch keinen Programmer hat, muss erst einen bauen um ihn dann zu programmieren. ;-) Hier hilft eventuell ein guter Freund, die Tipps für simple Programmer auf meiner Tools Seite oder man bestellt sich einen programmiereten Controller.

Ist der Programmer aufgebaut, und muss die Firmware später mal neu programmiert werden, schließt man einfach einen pinkompatiblen Programmer an den 10 poligen Port an, drückt während des Programmiervorganges den "Selfprogramming" Taster (um Reset mit dem Reset des Programmers zu verbinden) und kann so ohne ausbauen des Mikrocontrollers die Firmware erneuern.

Natürlich muss dazu eine 5V Spannung angelegt werden!

Software Teil 1: die Firmware

Die modifizierte Firmware gibt es im Source (.asm) und zum direkten Brennen (.hex) im Downloadbereich. Da das Protokoll zwischen Firmware und AVRProg nicht das schnellste ist, bringt die Baudratenerhöhung auf 115200 schon einige % Geschwindigkeitsvorteil. Die wichtigste Beschleunigung gegenüber der original AN910 Firmware ergibt sich aber aus der Änderung der Programmiezeit. Statt immer die maximale Zeit nach dem programmieren eines Byte zu warten, wird das geschriebene Byte per polling abgefragt. Sobald das Byte gebrannt ist, geht es zur nächsten Adresse. In der ursprünglichen Version wurde immer die Maximalzeit abgewartet. Außerdem unterstützen die neueren AVR Chips einen Page write Mode, der in dieser Firmware ebenfalls implementiert ist. Nicht zuletzt sind in der aktuellen Firmware auch die neueren Controller der AVR Familie enthalten (Tabelle am Ende des Sourcecodes). Der ursprünglich eingesetzte AT90S1200 hat nicht genug Flash Speicher um die neue Firmware aufzunehmen.

Seit der Firmwareversion 3.6 werden die in der Atmel Application Note 109 beschriebenen Block Kommandos des Atmel Bootloaders unterstützt. . Wenn AVRProg (ab Version 1.33) die Unterstützung erkennt, sendet es die zu übertragenden Bytes nicht mehr einzeln, sondern Blockweise. Diese Beschleunigung macht sich besonders bei der Verwendung von USB -> seriell Adaptern bemerkbar. Siehe hierzu die NOTE 16 im Sourcecode.

Hier eine Übersicht der von AVRProg mit diesem Programmer unterstützten Controller. Selbst getestet habe ich bisher nur wenige davon. Diese und die von anderen Nutzern bestätigten Typen sind in Fettschrift aufgelistet. Prinzipiell unterstützt von der AVR-Prog Hardware werden nur Typen mit serieller low Voltage Programmierung. Die AVRprog Software kann u.U. noch andere Typen, die aber dann eine besondere Hardware benötigen. Unbedingt das Datenblatt des Zielcontrollers anschauen! Einige aufgeführte Controller werden nicht von AVRProg unterstützt, dafür dann andere Programme (avrdude, AVRProg für Linux) nehmen.

Supportete Controller
Neu mit Firmware 3.8b und avrdude: ATtiny24, 44, 45, 84, 85, ATMega168, 640, 1280, 1281

AT90:
AT90S1200 AT90S2313 AT90S2323 AT90S2333 AT90S2343 AT90S4414 AT90S4433 AT90S4434
AT90S8515A AT90S8534 AT90S8535 AT90S8544 AT90PWM2 5) AT90PWM3 5) AT90CAN128 5)

ATTiny:
ATTiny10
ATTiny12 ATTiny13 5) ATTiny15
ATTiny24 5) ATTiny25 5) ATTiny26
ATTiny44 5)
ATTiny45 5) ATTiny84 5) ATTiny85 5) ATTiny23134)5



ATMega:
ATMega8
ATMega16
ATMega32
ATMega48 5) ATMega64 1)5) ATMega88 5) ATMega103 ATMega128
ATMega161 ATMega1625) ATMega163 ATMega164 5) ATMega168 5) ATMega1691)5) ATMega324 5) ATMega329 5)
ATMega640 5) ATMega649 5) ATMega1280 5) ATMega1281 5) ATMega3290 5) ATMega6490 5) ATMega8515 ATMega8535 1)5)
AT89 (8051 kompatibel, kein AVR)
AT89S53 2) 3) AT89S8252 3)







1)
Support durch AVRProg ab V1.40.
2) Bug in AVRprog. Bei Programmierung der Fuse Bits. Typ 89S8252 einstellen.
3) Bug in AVRprog verhindert das Programmieren im Blockmode (Blockmode abschalten, siehe Source NOTE 18)
4) Bei AVRProg statt ATTiny2313 den ATTiny26 einstellen. Für Flash write und AVRProg getestet. Nicht für Fusebits verwenden!
5) Mit Modifikation in avrdude.conf für avrdude zu verwenden.

Für nicht aufgeführte Controller AVR OSPII oder avrdude 5.6 und der Option -x devcode=0xnn verwenden. Siehe: erweitern auf neue Controller

Wer weitere Typen erfolgreich getestet hat, schicke mir bite eine eMail mit dem Controllertyp.

Basis für die Weiterentwicklung war die Firmware von Leonid Ivanovich (wubble). Die Originalfiles von ihm sind im Downloadbereich.

Software Teil 2: das Steuerprogramm

Der 2. Teil der benötigten Software ist das Steuerprogramm. Dieses kommuniziert über die serielle Schnittstelle mit der Firmware und sordt für die richtigen Befehle. Für den vorgestellten AVR910 Programmer sind mir folgende Steuerprogramme bekannt:

AVR-Studio (Windows)

AVRStudio ist wohl die Standart Entwicklungsumgebung für Windows Rechner von Atmel. Integriert sind ein leistungsfähiger Assembler sowie eine komplette Simulationsumgebung.
In das AVRStudio ist ein Aufruf zum Programm AVRProg integriert:

AVRStudio-Tools

AVR Prog (Windows Software von Atmel)

Obwohl offiziell schon lange nicht mehr supported, hat Atmel mit der AVRStudio Version (V4.11  build 401, Jan.2005) eine aktualisierte AVRProg version V1.40 mitgeliefert! Diese unterstützt jetzt endlich auch den ATMega8535. Ebenfalls neu dabei sind die ATMega64 und ATMega169. Leider fehlt noch der ATTiny2313. Die vorherige Version von AVRProg (V1.37) gibt es noch bei www.avrfreaks.net .
Auch wer noch Studio 3.x benutzt, kann sich die neue AVRProg.exe natürlich in den Pfad seiner Version kopieren.
AVRProg liegt im Pfad AvrProg unterhalb des Installationsverzeichnisses. AVRProg funktioniert auch ganz ohne AVR Studio.

Beim starten von AVRProg sucht das Programm an allen vorhandenen seriellen Schnittstellen nach einem Programmer. Hierbei muss ist die in der Firmware eingestellte Baudrate mindestens 19200 Baud sein. Auf höhere Baudraten stellt sich AVRProg automatisch ein.

Ist der Programmer am seriellen Port angeschlossen und mit Spannung versorgt, sollte sich AVRProg öffnen:

   
AVRprog
Wichtig ist das einstellen des richtigen Chips zum ProgrammierenChipauswahl

Die Bedienung erschliesst sich dem Anwender mehr oder weniger von selbst. Für den der darüber etwas nachlesen möchte ist hier die Original Doku von der Atmel Seite: AVRProg User Guide

Die Auswahl der zum Programmieren vorhandenen Controller bestimmt übrigens die Firmware im AT90S2313. Wer hier nur eine begrenzte Anzahl verwendet, kann sich das Leben etwas leichter machen, und in der Tabelle am Ende des Sourcecodes alle nicht benötigten Chips auskommentieren. Nach assemblieren und erneutem brennen geht die Auswahl leichter von statten.

Ab der Version 1.33 von AVRProg werden auch die Atmel Bootloader Befehle des unterstützt, die in meiner der AVR910 Firmware seit Version 3.6 ebenfalls eingebaut sind. Es ergibt sich je nach Grösse des zu übertragenden Files eine Zeitersparnis von 30 - 50%. Wir ein USB -> seriell Adapter verwendet, ist die Zeitersparnis durch den deutlich geringeren Protokolloverhead noch grösser.

Mit dem Button "Advanced" kommt man in die Fuse und Lockbit Einstellung, ausserdem verrät AVRProg hier etwas über die Firmwareversion des angeschlossenen AVR910 Programmers.

Besonders bei den ATMega Controllern passiert es "gerne" dass versehentlich die Fusebits auf externen Oszillator oder RC Oszillator gestellt werden, obwohl externer Quarz gemeint war.

Dann geht leider nichts mehr... Abhilfe schafft hier der AVR-Preserver, der wieder für den richtigen Takt an XTAL1 sorgt. Übrigens, das SPIEN Bit lässt sich im seriellen Mode nicht falsch brennen.

Wird der Reset Pin jedoch abgeschaltet, (bei manchen Controllern möglich) geht nichts mehr ausser der High Voltage Parallel Programmierung.
Das "Advanced" Fenster, hier beim ATMega8535 Advanced



OSP II (Windows, open Source) 

In Basic geschriebenes Programm mit GUI, angelehnt an AVR-Prog und das AVRISP Programm von AVR Studio. Außerdem ein Command Line Interface.
Auf jeden Fall ein würdiger "Nachfolger" für AVR-Prog.
Es weden praktisch alle AVR Controller unterstützt, da AVR OSPII die Signatur erkennt und sich entsprechend um die Programmierung kümmert.
Leider mit USB Wandler etwas langsam
Das Programm ist von Mike Henning und open Source. Hier die Downloadseite: http://esnips.com/web/AtmelAVR

Setup
Wichtig ist es die richtige Baudrate einzustellen, empfehlenswert, weil schneller auch die richtige Schnittstelle.
OSP2
Das sieht doch alles sehr übersichtlich aus, und ein autodetect für den Controller gibt es auch.

Ausprobieren lohnt sich!

AVR Codevision (Windows) 29.03.2007

AVRCodevision unterstützt ebenfalls den AVR910 Programmer, die Baudrate ist einstellbar. Die integrierte Programmer Software ist etwas gewöhnungsbedürftig, es lassen sich aber auch externe Programme einbinden.

WinAVR GCC (Windows)

Für die Benutzer von WinAVR-GCC gibt es die jeweils aktuellste Version von avrdude im Paket mitgeliefert, das den AVR910 Programmer ebenfalls unterstützt.

avrdude (Linux oder Windows, auch MAC und Solaris)  avrdude5.6

Für Linux Nutzer und zusammen mit WinAVR gibt es das Programm avrdude. Ein command Line Tool, das permanent weiterentwickelt wird  und unterschiedliche Programmertypen unterstützt, u.a. auch das STK500 und diverse LPT Port Programmer.

Problem bei der Verwendung mit avr910 Programmern waren der nicht im avr910 Modus vorhandene Blockmode, der die Programmierung verlangsamt und vor allem das Dilemma mit den historischen Devicecodes im avr910 Protokoll.

Um diese Dilemma aufzulösen habe ich zusammen mit Jörg Wunsch zwei Erweiterungen für die Unterstützung von avr910 Programmern in avrdude eingefügt. Diese Erweiterungen sind seitVersion 5.6cvs in avrdude.

Für avrdude gibt es das Projekt avrdude-gui, das eine grafische Oberfläche bereitstellt.

Außerdem hat Torsten Brischalle ein Java Programm mit einer avrdude GUI, insbesondere für Fusebits geschrieben: http://avr8-burn-o-mat.aaabbb.de/
Eine neue GUI für avrdude gibt es auch bei www.pcfilter.de/AVR-Ecke/index.html

Linux Nutzer: Um den seriellen transfer unter Linux generell zu beschleunigen sollte immer ein "setserial /dev/ttyS0 low_latency" eingegeben werden. (ttyS0 = com1, ttyS1=com2 usw.) Das hat bei mir einen deutlichen Zeitgewinn gebracht.

  Ich habe mit der erweiterten Firmware und den avrdude Anpassungen unter Linux folgende Zeitunterschiede gemessen (Zeitmessung von avrdude, setserial /dev/ttyS0 low_latency):

mit setserial low latency
Standart Firmware
Firmware ab Version 3.6
 "avrdude -c butterfly"
Chip
Dateigröße Schreiben
Lesen     
Schreiben
Lesen          
ATmega8 (block write) 6394 Byte 6,97s
4,00s
2,76s
1,81s
AT90S2313 1590 Byte 5,12s
0,86s
4,35s
0,31s
zum Vergleich hier die Zeiten ohne "setserial low latency"
Chip
Dateigröße
Schreiben
Lesen
Schreiben
Lesen
ATmega8 (block write) 6394 Byte 66,94s 31,98s 2,86s 1,82s
AT90S2313 1590 Byte 15,94s
7,97s
4,60s
0,31s

Wird avrdude unter Windows eingesetzt, entsprechen die Zeiten etwa denen mit "setserial low latency", die Implementierung des com Ports ist dort offenbar besser gelöst.

Die aktuelle Version für Windows ist auch immer in der WinAVR Software mit dabei.

Fusebits und avrdude: 12.02.2006

Zum korrekten schreiben der Fusebits mit diesem Programmer und avrdude  immer den avr910 Mode benutzen! (-c avr910 nicht butterfly oder avr109). Grund: im avr910 Mode benutzt avrdude, genau wie AVRprog das "new universal kommando" und kümmert sich selbst um die richtigen Kommandos der unterschiedlichen Fuses (hfuse, lfuse, efuse, lock...), sofern diese in der avrdude.conf korrekt eingetragen sind. Im "butterfly" Mode wird das schreiben der Fusebits nicht unterstützt! (das lesen funktioniert aber)
Um bei neuen, noch nicht voll implementierten Contrrollern Fusebits einzustellen, oder zum Prüfen der Funktion empfiehlt sich der Terminal Modus von avrdude.

Mark Hämmerling hat auf seiner Seite einen online Fusebitrechner zur Verfgügung gestellt, damit werden schon mal alle Möglichkeiten sortiert dargestellt. Super!
Einfach noch die ermittelten HEX Werte in die Befehlszeile eingeben: -U lfuse:w:0xHEX:m -U hfuse:w.0xHEX:m usw.

Auch hier passt der "burn-o-mat von Torsten: http://avr8-burn-o-mat.aaabbb.de/

uisp (Linux)

Ein weiteres Programm das den AVR910 unterstützt ist uisp (noch nicht von mir getestet). Der Funktionsumfang ist etwa ähnlich wie bei avrdude. Für beide Programme sind recht aktuelle Versionen verfügbar, sie werden also weiterentwickelt. Falls Kommunikationsprobleme mit dem Programmer auftreten, versuchsweise mal die Baudrate niedriger einstellen!

AVR-Prog (Linux, NICHT von Atmel!)

Gleicher Name und doch was anderes. Engagiertes AVR Programming Tool mit Sourcecode für Linux und Unix Varianten. Besonderheit hier sind die grafische Oberfläche (Tcl) und die Netztwerkfähigkeit.
Wer es ausprobieren möchte: micha.freeshell.org/avr Support auch für den Bootloader Mode (avr109), und extra angepasst auf diese AVR910 Firmware. Unterstützt die meisten der genannten Controller.
Fuse Bit Programmierung mit grafischer Unterstützung ist in Arbeit.

Palm-AVR

AVR Programmieren vom Palm OS PDA aus. Hilfreich vor allem beim mobilen Einsatz. Open Source Projekt von Mark Hämmerling http://palmavr.sf.net/ Mit einer kleinen Softwareänderung die Mark bereits implementiert hat auch über IrDA zu verwenden!

avrp (Linux, Windows, Amiga)

Noch ein Programm für AVR910 das im Source vorliegt ist avrp, der Source ist allerdings von 1998 und wird offenbar schon länger nicht mehr weiterentwickelt. Eventuell ist hier die Amiga Version noch für den einen oder anderen interessant.

Bascom AVR (Windows)

Der in Bascom integrierte avr910 Type Programmer (avr-isp) funktioniert doch mit 115200 Baud! Danke an Sergey aus Moskau, der die Lösung gefunden hat.


Bascom Programmer Einstellung für den AVR910.
bascom avr910 Der in Bascom integrierte avr910 Type Programmer (avr-isp)
reagiert nicht auf die Baudrateneinstellung im Auswahlmenü! Die Baudrate muss in der Registry eingestellt werden.

Achtung: Anscheinend wird auch, egal was man in der Chipauswahl einstellt immer nur der AT90S8515 ausgewählt?! Wenn das Programmieren also für Eure Chips nicht funktioniert... Schreibt an mcselec, nicht an mich ;-)

Bedingt durch das von Bascom benutzte alte Protokoll ist eine Verwendung mit USB-Seriall Wandler nicht zu empfehlen. Die serielle Schnittstelle ist schon langsam genug...
Bascom Regedit
Einstellung in der Registry:

Achtung: Wer sich mit Registry Einstellungen nicht auskennt, soll lieber den AVR910 auf 19200 baud umstellen!

In HKEY_CURRENT_USER
unter basavr.ini
im Directory AVRISP
mit "rechter maustaste" -> neu -> Zeichenfolge

COM anlegen.
Dann doppelclick auf COM und den Wert
115200,n,8,1 eingeben.
Fertig.

bascom extern
Dringende Empfehlung: AVR-Prog oder avrdude benutzen. So wirds gemacht, wenn man AVR-Prog als externen Programmer in Bascom einträgt.
Bitte verschont mich mit Fragen zur Programmer Einbindung in Bascom!

KontrollerLab (Linux) 29.03.2007

KontrollerLab ist ein ambitionierttes Open Source Projekt, (Linux) das allerhand features rund um die Kontrollerentwicklung bietet. So außer der Programmierumgebung z.B. auch Wizards für 7 Segmentanzeigen und LCD. Die KontrollerLab IDE steuert den AVR-GCC, und arbeitet mit UISP und AVRDUDE zusammen. Auch Fuse-Bits können grafisch gesetzt werden. Daneben gibts noch ein paar Wizards und ein serielles Terminal. Geplant sind auch ein Debugger usw.
 http://cadmaniac.org/projectMain.php?projectName=kontrollerlab bzw. http://sourceforge.net/projects/kontrollerlab/


Weitere Steuerprogramme für den AVR910

Wenn jemand eine alternative Software kennt oder geschrieben hat, wäre ich für eine Mail und den Link dankbar.


Künftige updates auf neue Mikrocontroller

Eine echte "Altlast" des avr910 Protokolles ist die Verwendung von Devicecodes zur Unterscheidung der verschiedenen Controller. Das kommt noch aus der Zeit, als Atmel sogar noch verschiedene Methoden verwendete um die Signatur auszulesen. Auch gibt es noch unterschiedliche Arten des pollings beim Programmieren des Flash usw. (z.B. ist der ATTiny2313 eine Ausnahme).

Ein Programm das trotz avr910 Protokolls den Controllertyp selbst ermittelt ist z.B. AVR OSPII. Damit funktionieren praktisch alle AVR Controller auch mit diesem Programmer. (Windows only)

Die aktuellsten Controller werden auch unterstützt von avrdude. Hier gab es jedoch immer wieder Probleme mit den avr910 Devicecodes, da Atmel diese für neue Controller nicht mehr vorgibt. Zudem gibt es noch verschiedene Versionen von avr910 Programmern, wobei jeder seine eigene Logik für das verwenden der Devicecode hat. Die Devicecodes für neue Controller in diesem Programmer wurden auch von mir frei gewählt.

Am einfachsten macht man es sich, wenn man die Devicecodes dieses Programmers in die avrdude.conf eingibt, oder die von mir für Version 5.6 vorbereitete Version nimmt. avrdude.conf.v56

Wer die avrdude.conf nicht editieren möchte kann seit V5.6 auch -x devcode=0xnn verwenden und den passenden Devicecode mit übergeben.

Wie funktionierts?

Zuerst braucht man die Information welcher Devicecodes der avr910 überhaupt "kennt". Dies findet man für meinen Programmer am Ende des Sourcecodes in einer Tabelle.
Hier ein Teil der verwendeten Devicecodes:
; unofficial Device Codes. Match avrdude.conf with tis "avr910_devcode"

; avr910_devcode ,Pagesite in Words
.db 0x01 ,0x40 ;m640 avr910-Devicecode not official!
.db 0x04 ,0x40 ;m649 avr910-Devicecode not official!
.db 0x05 ,0x40 ;m6490 avr910-Devicecode not official!
.db 0x06 ,0x40 ;90PWM2 avr910-Devicecode not official!
.db 0x07 ,0x40 ;90PWM3 avr910-Devicecode not official!
.db 0x08 ,0x40 ;m1280 avr910-Devicecode not official!
.db 0x09 ,0x40 ;m1281 avr910-Devicecode not official!
.db 0x0e ,0x10 ;tn24 avr910-Devicecode not official!
.db 0x1a ,0x10 ;tn25 avr910-Devicecode not official!
.db 0x0f ,0x20 ;tn44 avr910-Devicecode not official!
.db 0x1b ,0x20 ;tn45 avr910-Devicecode not official!
.db 0x14 ,0x20 ;tn84 avr910-Devicecode not official!
.db 0x1c ,0x20 ;tn85 avr910-Devicecode not official!
.db 0x1d ,0x40 ;CAN128 avr910-Devicecode not official!
.db 0x23 ,0x10 ;tn2313 avr910-Devicecode not official! (STK500 Code used)
.db 0x31 ,0x20 ;m48 avr910-Devicecode not official!
.db 0x33 ,0x20 ;m88 avr910-Devicecode not official!
.db 0x35 ,0x40 ;m168 avr910-Devicecode not official!
.db 0x37 ,0x40 ;m164 avr910-Devicecode not official!
.db 0x39 ,0x40 ;m324 avr910-Devicecode not official!
.db 0x3d ,0x40 ;m329 avr910-Devicecode not official!
.db 0x3e ,0x40 ;m3290 avr910-Devicecode not official!
.db 0x57 ,0x10 ;tn13 avr910-Devicecode not official!


Will man jetzt z.B. einen ATMega88 programmieren und hat die avrdude.conf nicht editiert würde der Befehl lauten:

avrdude -c avr910 -P com1 -b 115200 -p m88 -x devcode=0x33

Jetzt wird es aber noch besser:

Wir haben z.B. einen ATMega644P der gar keinen Devicecode im Programmer hat. Die Pagesize des 644P ist 128 words (0x80), was also mehr ist als die 0x40 die als Maximum in der Tabelle stehen. Wir suchen uns also einen Devicecode aus der mit 0x40 in der Tabelle eingetragen ist, z.B. den 0x01 des m640:

avrdude -c avr910 -P com1 -b 115200 -p m644p -x devcode=0x01

Den Rest wie Signaturbytes, Flashgrösse usw. kennt dann avrdude, darum müssen wir uns nicht mehr kümmern.

Somit sind die meisten Controller die avrdude "kennt" auch mit dem avr910 zu programmieren. Das gilt zumindest für den Flash und für Controller <= 64K Flash. EEPROM für neue und größere Controller habe ich noch nicht getestet.

Man muß darauf achten einen Devicecode auszuwählen dessen Controller die gleiche Pagesize oder zumindest eine kleinere Pagesize hat. Am besten natürlich einen, dessen Devicecode von Atmel vorgegeben wurde, der also in der "supportet" Abteilung steht.

Noch zwei Beispiele:
Der relativ neue ATTiny261 ist nicht in der Deviceliste. Die Pagesize ist 16 words (0x10) man würde also einen Devicecode mit Blocksize 0x10 auswählen, z.B. den des ATTiny26 (0x5e) Achtung: nicht den des ATTiny2313 verwenden da speziell beim t2313 das programmieren anders funktioniert.

avrdude -c avr910 -P com1 -b 115200 -p t261 -x devcode=0x5e

Wäre der ATTiny861 zu programmieren (Blocksize 32 words =0x20) würde man sinnvollerweise z.B. den Devicecode des ATMega8 verwenden (0x76)

avrdude -c avr910 -P com1 -b 115200 -p t861 -x devcode=0x76

Übrigens stehen die Blocksizes (allerdings in Bytes!) auch in der avrdude.conf unter dem entsprechenden Controller.

Mit 3 Devicecodes für die Blockgrößen:
 
16 words (0x10), -x devcode=0x5e
32 words (0x20), -x devcode=0x76 und
64 words und größer (0x40), -x devcode=0x45

hat mal also alles zusammen um neue Controller zu programmieren.

Wie oben schon gesagt funktioniert das nicht für den ATTiny2313, der benötigt den Devicecode 0x23 da er im Programmer eine "Sonderbehandlung" erfährt.

Sollte mal eine Kombination nicht zum Ziel führen, lohnt es sich durchaus mal eine andere auszuprobieren.

Infos hierüber bitte per mail an mich senden.

Avrdude im Terminal Modus:

Ein sehr nützliches feature von avrdude zum testen neuer Controller ist der Terminal Modus. Diese kann insbesondere auch verwendeet werden um Fuses bei neuen, noch nicht in avrdude eingetragenen Controllern zu lesen und schreiben! Um die Kommandos des Terminal mit diesem Programmer voll nutzen zu können, avrdude im avr910 Mode aufrufen!:

Auch im Terminalmodus bekommt man mit ? eine Hilfe der verfügbaren Befehle:

# avrdude -p t2313 -c avr910 -t

avrdude> ?
>>> ?
Valid commands:
 
  dump   : dump memory  : dump <memtype> <addr> <N-Bytes>
  read   : alias for dump
  write  : write memory : write <memtype> <addr> <b1> <b2> ... <bN>
  erase  : perform a chip erase
  sig    : display device signature bytes
  cal    : display device calibration bytes
  part   : display the current part information
  send   : send a raw command : send <b1> <b2> <b3> <b4>
  parms  : display adjustable parameters (STK500 only)
  vtarg  : set <V[target]> (STK500 only)
  varef  : set <V[aref]> (STK500 only)
  fosc   : set <oscillator frequency> (STK500 only)
  sck    : set <SCK period> (STK500 only)
  help   : help
  ?      : help
  quit   : quit
 
Use the 'part' command to display valid memory types for use with the
'dump' and 'write' commands.
 
avrdude>

Interessant ist speziell das Kommando "send", das den "New universal" Befehl des avr910 Programmers benutzt, und die 4 nächsten Bytes an das SPI Interface des Controllers schickt.
Achtung:
Die Eingabe erfolgt hier in dezimal! Alle Hexcodes der Kommandos also erst umrechnen.

Wenn man sich nun die richtigen Befehle zum lesen und schreiben des Controllers aus dem Datenblatt geholt, und nach dezimal umgerechnet hat kann es losgehen. Hier ein Beispiel mit dem ATtiny2313:

# avrdude -p t2313 -c avr910 -U lfuse:r:-:i

avrdude: Device signature = 0x0a911e
avrdude: reading lfuse memory:
 
Reading | ################################################## | 100% 0.05s
 
avrdude: writing output file "<stdout>"
:01000000ED12
:00000001FF

# avrdude -p t2313 -c avr910 -t
avrdude: Device signature = 0x0a911e
avrdude> send 80 0 0 0
>>> send 80 0 0 0
results: 00 50 00 ed
 
avrdude>


Das Kommando "80" entspricht dem befehl 0x50, also das lesen des Fusebytes dieses Controllers. Das Fusebyte hat also den Wert 0xED.

Wichtigste Hilsfsmittel sind das Datenblatt und eine Hex - Dez Tabelle, und der Fusebitrechner von Mark Hämmerling.

AVR910 und USB -> seriell Wandler

Alle, die einen USB -> seriell Wandler eingesetzt haben (sowohl extern als auch z.B. FT232BM), werden bemerken, das die Übertragungszeiten bei Verwendung der original avr910 Software sehr lange sind. Grund dafür sind Latenzen beim Umschalten zwischen senden und empfangen von Daten. Das original AVR910 Protokoll schaltet praktisch nach jedem Byte zwischen Lesen und Schreiben um, so dass die Übertragungszeiten in etwa mit denen unter Linux und ohne "low Latency Umschaltung" entsprechen. Dies auch unter Windows. Durch das "block mode" Protokoll gemäß der Atmel Application Note 109 werden die Umschaltvorgänge minimiert, wodurch sich Programmierzeiten wie ohne Wandler einstellen.
Gemessene Zeiten mit USB Wandler unter AVRProg (und standart Firmware) sind beim Schreiben des AT90S2313 (1684 Byte) ca. 16 Sekunden. Mit der neuen Firmware (ab V3.6) sind es noch ca. 4.8 Sekunden!

Alle Programme die den Blockmode nicht unterstützen sind also mit USB Wandler deutlich langsamer (z.B. AVR OSP II)
In avrdude ab Version 5.6 wird der Blockmode jetzt auch im Mode -c avr910 unterstützt, deshalb nicht mehr -c avr109 oder -c butterfly verwenden!

Bauanleitungen dieses avr910 Programmers mit USB Chip gibt es z.B. bei www.avr-projekte.de oder bei www.pcfilter.de/AVR-Ecke/index.html

AVR910 + USB2 Seriell
Wer lieber einen fertigen USB-Seriell Wandler einsetzen möchte, ich habe den USB2 SERIELLvon Reichelt ausprobiert, er hat unter Win XP ohne Probleme mit AVR-Prog und avrdude funktioniert. Sicher eine preiswerte Investition.

Nach Installation der USB-Treibers darauf achten, dass der USB-Wandler auf eine der Schnittstellen von com1 - com4 eingestellt wird, AVR-Prog erkennt den avr910 sonst nicht!

Was tun bei Fehlern

Die Fehlersuche dürfte sich am einfachsten unter Windows mit AVRProg gestalten.
Stimmt etwas noch nicht, kommt meist diese Fehlermeldung:

AVRprog-Fehler

Mögliche Fehlerursachen:

Tipps zur Fehlersuche

Erster Test nach dem anlegen der Versorgungsspannung: wechselt die LED die Farbe (2 Farben LED) oder geht sie erst an und dann aus (standart LED)?

Mit einem Terminalprogramm (z.B. SuperTerm) den seriellen Port mit 115.200 Baud öffnen. Jetzt die Taste y 2* drücken. Die LED sollte auf rot wechseln. jetzt x 2* drücken, es sollte wieder grün kommen.
Funktioniert dies nicht, und kommen auch keine Zeichen auf dem Terminal zurück, Kabel prüfen, den Programmer abstecken und die Pins 2 und 3 des seriellen Kabels überbrücken. Jetzt sollten alle Tastendrucke als Echo auf das Terminalprogramm zurückkommen. Wenn das klappt, liegt der Fehler beim Programmer, sonst die Computerseite und das Kabel genauer untersuchen. (Reboot?)
Wenn das LED umschalten klappt, geht zumindest schon mal das senden eines Kommandos.  Jetzt einen Befehl senden, den der avr910 nicht kennt. Taste "z" drücken. jetzt muss ein "?" zurückkommen. Bleibt dies aus, funktioniert das empfangen nicht. Mögliche Ursachen: falscher Transistor Q100 (muss PNP sein), Leiterbahn durchtrennt, falsche Bestückung usw.

Als super Hilfsmittel hierzu und auch zum verstehen des seriellen Protokolls des Programmers hat mir das kostenlose Programm  portmon von Mark  Russinovic weiter geholfen. Das gibt es unter  www.sysinternals.com

Für Anwender eines USB-Serial Wandlers:

AVRProg sucht nur die Schnittstellen COM1 bis COM4 nach einem angeschlossenen Programmer ab. Wenn der USB Wandler auf einer höheren Schnittstellennummer steht, den USB Treiber entsprechend umkonfigurieren.

Bekannte Fehler, Bugs, Besonderheiten

Hier beschreibe ich die mir gemeldeten Eigenheiten und Bugs zum avr910 Programmer. Sobald die Probleme dauerhaft behoben sind, werden sie wieder aus der Liste gelöscht.
Vielen Dank an alle Anwender, die einen Fehler gemeldet haben.

Was
Problem
Lösung / Workaround
Einstellungsdatum
Behebung / geplant
avrdude ab 5.5Programmieren der "classic" Controller ist sehr langsam. (z.B. 90S8535). Betrifft nicht die neueren ATTiny und ATMega Controller.avrdude verhindert den Blockmode zur Datei- übertragung für Controller die selbst kein "Page-
Programming" erlauben.
02.07.2009Bug und Patch beim avrdude Projekt  bereits offen:
http://savannah.nongnu.org/patch/?6789
Patch in Sourcecode einstellen und avrdude neu compilieren
avrdude 5.3.1
Programmiervorgang bricht ab mit:
safemode: Verify error - unable to read lfuse properly...
Lesen und programmieren der Fusebits nicht möglich.
Zum programmieren des Speichers das Flag -u angeben.
Neuere Version  von avrdude verwenden, dort tritt dieser Fehler nicht auf.
10.04.2007
Bug beim avrdude Projekt bereits offen: https://savannah.nongnu.org/bugs/index.php?18803
ATMega162 und AVRProg
Der Devicecode für den ATMega162 steht in der AVRProg supported Sektion. AVRProg kennt den Mega162 nicht.
Ignorieren, ATMega162 mit avrdude programmieren.
14.04.2006
Umsortieren des Devicecodes in der nächsten Version.
ATTiny13 unter avrdude
falscher Devicecode in avrdude.conf, wurde als ATTiny15 gebrannt.
Falscher Eintrag der Blockgrösse in Firmware.
Korrigierte avrdude.conf herunterladen,
(korrekter Eintrag: avr910_devcode = 57;)
aktuellste Software V3.8a herunterladen.
(korrekter Eintrag:
   .db 0x57   ,0x10      ;t13
)
30.12.2005
avrdude.conf von meiner Seite neu laden, aktualisierte Firmware V3.8a benutzen.
Lockbits bei "neueren" Controllern
Der Programmer unterstützt beim "l" Kommando nicht alle Controller.
Die meisten ATMega Controller werden nicht unterstützt, auch  Tiny 2313 nicht.
Programmieren des HV-Prog mit ATMega8535 und AVRProg klappt nicht.
Upgrade des Programmers auf Firmware Version 3.8.
Voller Support für Lock- und Fusebits, sowie Support für avrdude Version 5.0

Auch das Programmieren des ATMega 8535 im HV-Prog klappt jetzt!
11.11.05
Implementiert in V3.8
Fusebits bei AVRDUDE
Fusebits werden falsch ausgelesen und geschrieben
Zum schreiben und lesen der Fusebits bei diesem Programmer den Modus avr910 benutzen.
(avrdude -c avr910).
Im Modus "butterfly" werden fusebits nicht richtig unterstützt.
Zum Thema Fusebits siehe auch:
avrdude und Fusebits, sowie
avrdude und Terminal Mode
7.6.2005
avrdude V5.0 und Programmer Firmware V3.8 benutzen.
SW Version 3.7
Lesefehler bei den AT89S Mikrocontrollern im Block Mode. (nur Flash Memory) Die AVR Typen sind nicht betroffen.
Da die AT89S Controller Byte-weise organisierten Flash haben, muss beim lesen unterschieden werden.
Workaround: Abfrage im Blockmode einfügen:

w10B2:
     rcall read_send_progmem
    tst device
   brmi w10B3
    sbiw XL, 2
    brne w10B2
    rjmp waitcmd
w10B3:
    sbiw XL, 1
    brne w10B2
    rjmp waitcmd            ; goto waitcmd();
03.01.2005
ist in der aktuellen Software eingebaut (neu downloaden) Firmwaredatum: 03.01.2005
AVRProg
erkennt 9600 Baud Einstellung nicht AVRProg benötigt mindestens 19200 Baud. Die 9600 Baud Einstellung nur für avrdude verwenden.
23.11.2004
keine Behebung


Gehäuseeinbau

Für eine schönere Optik, und auch um Kurzschlüssen vorzubeugen empfiehlt sich ein Gehäuseeinbau,  oder zumindest das "einschrumpfen" mit Schrumpfschlauch.

AVR-Prog offen Die Platine ist so bemessen, das sie stramm in das
2 teilige Gehäuse von Reichelt (SP 2043 SW) oder
Conrad (Best.# 522244) hineinpasst.
  
  
Frontfolie M2:1
Damit das ganze etwas professioneller aussieht, habe ich
noch einen Aufkleber mit Front Designer erstellt. Der wird
Seitenverkehrt auf eine Folie gedruckt, und diese dann mit
doppelseitiger Transparentklebefolie(z.B. Conrad 529400, 5µ)
auf eine farblich passende, selbstklebende Trägerfolie aufgeklebt.
Diese dann auf  dem Gehäuse anbringen.
Darstellung hier im Maßstab 2:1, die Originalgrösse ist 45*30mm.

Das ganze funktioniert im Prinzip auch mit bedruckbaren Klebefolien. Eine Auswahl der Möglichkeiten gibt es z.B. bei Conrad oder im gut sortierten Schreibwarenladen.

Den FrontDesigner gibt es im Fachhandel, oder direkt bei www.abacom-online.de. Dort kann man auch eine Demo herunterladen, bei der allerdings speichern und ausdrucken nicht funktionieren.
Leider ist es mir nicht gelungen, die exportierte Datei aus Front Designer im richtigen Maßstab und in guter Qualität als Grafikdatei abzuspeichern. Wer einen Tipp hat, mit welchem Grafikprogramm eine Konvertierung funktioniert, bitte eine eMail an mich senden. Hier die Originaldatei in Front Designer Format.

Natürlich ist auch jede andere Art der Frontplattenbeschriftung geeignet.
Wer es einfacher möchte, kann die Platine auch einfach mit stabilem Schrumpfschlauch einpacken. In diesem Fall empfiehlt es sich, einen Taster mit kürzeren Betätigungsknopf zu nehmen.

Programmierte Controller, Platinen und Fertiggeräte 

Es gab bisher viele Anfragen nach programmierten Controllern (Henne-Ei Problem ;-) ) oder fertigen Programmern. In diesen Shops bekommt man sie:

Einen Komplettbausatz als USB Variante,
bestehend aus Leiterplatte incl. bereits aufgelötetem
FT232RL und Kabel gibt es im Shop von Bernhard Redemann

  www.b-redemann.de
AVR910-USB-Programmer www.b-redemann.de
Weitere Produkte (u.a.):
Bücher von B. Redemann
Steuern und Messen mit USB, (FT232,245 und FT2232)
Experimente mit Bluetooth (BTM222, FB151)
Wer nicht selbst bauen möchte, oder wer auf Nummer sicher gehen will kann im Shop von Rene Rasenack

OB-Elektronik
 www.ob-elektronik.de
fertig programmierte Controller mit der jeweils aktuellsten Software und der richtigen Fuse Einstellung (ATTiny2313) in SMD oder DIL Bauform günstig erwerben.
Ausserdem gibt es noch SMD Leerplatinen oder komplett aufgebaute Programmer.

Dieser Link führt zum Elektronikshop www.ob-elektronik.de für den Inhalt dessen Seiten ist der Shopinhaber verantwortlich.
Programmierte ATTiny2313 DIP20 Controller mit der aktuellen Firmware dieser Seite und korrekt eingestellten Fusebits versendet auch Mark Hämmerling:

engbedded.com
www.engbedded.com/products/

Dort gibt es auch eine IR Programmer Version für Palm Handhelds (PalmAVR)

Download

Hier die beschriebenen Files zum Download (shift+linke Maustaste):

Schaltplan als jpg Datei.
Layout mit Bestückungsplan (shift+linke Maustaste) als Eagle .brd Datei (gezippt)

Für das Drucken das Layouts wird Eagle ab Version 4.0x benötigt. Eine kostenlose Testversion mit der der Ausdruck möglich ist gibt es bei www.cadsoft.de

Sourcecode der Firmware

avr910_2313_v38b.asm für AVR Studio avra oder tavrasm.

Falls jemand den 7.3728 Mhz Quarz nicht extra beschaffen möchte, kann er auch im Source eine passende Baudrate mit 4 oder 8 Mhz Quarz auswählen und neu compilieren.

Wenn es schneller gehen soll, hier die Firmware

avr910_2313_v38b.hex direkt zum Brennen in einen AT90S2313. Eingestellt auf 7.3728 Mhz Quarz und 115.200 Baud.

Das Definitionsfile (Includefile 2313def.inc ) für alle aktuellen AVR Controller gibt es immer mit der  AVRStudio Software.

Die Datei der Frontfolie für FrontDesigner.

Die Grafikdatei der Frontfolie im jpg Format im Masstab 2:1 zum ausdrucken mit einen Grafikprogramm (Originalgrösse 45*30mm). Beim ausdrucken auf Folie vorher noch spiegeln.

Die Original Atmel Applikation Note AVR910 (DOC0943.pdf)
Der Link zu Atmels AVR Studio4
Der Link zu Atmles AVRProg (avrfreaks) Noch Version 1.37, die Version V1.40 ist in der neuesten AVRStudio Release.
Die Atmel Doku für AVRProg
Die Atmel Application Note 109 (selfprogramming Protokoll) und die Software von Atmel dazu.
Die Atmel Application Note 911 (open Source Programminginterface, commandline) und die Software von Atmel.

Der Link zur avrdude download Seite

Editierte Version der avrdude.conf für avrdude 5.6 mit allen Devicecodes dieses Programmers: avrdude.conf.v56

ACHTUNG: immer die passende Version der avrdude.conf für die entsprechende Version benutzen!

Die avrdude Erweiterung von Thomas Fischl:


In der Firmwareversion V3.3 waren "block mode" Routinen eingebaut, die den ganzen internen SRAM benutzt haben, allerdings auch eigene Befehle benötigten. Dazu gab es die entsprechende Erweiterung für avrdude. Mit der Umstellung der Block Kommandos auf den "Atmel standart" wird seit der Version V3.6 der Firmware die avrdude Erweiterung nicht mehr unbedingt benötigt. Sie hat aber statt nur 64 Bytes internen SRAM Puffer 120 Byte benutzt, ist daher noch etwas schneller. Wer sich die Erweiterung anschauen möchte, hier ist der Link zu seiner Homepage. Die avrdude Erweiterung benötigt die Firmware V3.3 !

Codebasis

Und hier noch die Original Firmware Dateien von Leonid, auf deren Basis ich die Software weiterentwickelt habe.
Es wird hier allerdings ein 11.059Mhz Quarz und ein anderer LED Pin benutzt. AVR-AN910-V3.1_orig.zip


Teileliste für AVR Programmer


Bezeichnung
Wert
Beschreibung
Widerstände


R1 680
Widerstand
R100-R105 4,7k Widerstand
Kondensatoren


C1, C2
27pF Keramikkondensator
C100 1µF Subminiatur Elko 63Volt z.B. Reichelt  SM1,0/63rad
C101 100nF Kondensator
Halbleiter


IC1 AT90S2313 Mikrocontroller Atmel AT 90S2313 PDIP
D100, D101 1N4148 Universaldiode
LED1 DUO-LED2 Duo Led 5mm Reichelt LED5RG oder Conrad 184403
Q2 BC548B NPN Transistor
Q100 BC557C PNP Transistor
Sonstiges

J100 9 polig Sub-D EU z.B. Reichelt D-SUB BU 09GW
S1 Selfprogramming
z.B. Reichelt Taster 3301D oder Taster 3301
SV1 Wannenstecker 10pol.
z.B. Reichelt WSL10W
XC100 7.3728 Mhz Quarz z.B. Reichelt 7.3728 HC49U-S
Schneidklemm-Buchse  10pol.
z.B. Reichelt PFL10
Flachbandkabel 10 polig
z.B. Reichelt AWG 28-10G 3m (3 Meter)
Gehäuse

Reichelt (SP 2043 SW) oder Conrad 522244
serielles Kabel
1:1 Sub D
z.B. Reichelt AK230 (9pol./9pol.)
 

Alle Teile sind z.B. bei Reichelt zu beschaffen.


Aufbau mit ATTiny2313

Wer keinen AT90S2313 mehr hat oder einsetzen möchte, bekommt hier die Hinweise zum umrüsten des avr910 auf einen ATTiny2313.

Der ATTiny2313 ist pinkompatibel zum AT90S2313, er hat allerdings einige zusätzliche Features und u.A. einen internen Takt. Konfiguriert werden diese Features durch die Fusebits. Für alle Interessierten ist ein Studium des Datenblattes angesagt.

ATTiny2313 lfuses

Ein frisch ausgelieferter ATTiny2313 ist auf einen 8MHz internen Oszillator, und auf eine Teilung des Taktes durch 8 eingestellt. Ändert man diese Einstellung nicht, stimmt die Baudrate der seriellen Schnittstelle nicht und man bekommt keine Kommunikation zustande.


Zum ändern der Fuse braucht man einen Programmer der den ATTiny2313 unterstützt.

Wenn beim Einstellen der Takt Fuses etwas schiefgeht, hilft der AVR-Preserver wieder weiter...

Einstellen der Fuse mit avrdude:

Die für den avr910 richtige Einstellung erhält man mit der entsprechenden Konfiguration des lfuse Bytes. Der richtige Wert dafür ist 0xED. Die beiden anderen Fuses: hfuse und efuse bleiben in der default Einstellung (hfuse= 0xDF, efuse= 0xFF)

Zum testen mal auslesen ob der Fusewert stimmt:
avrdude -c "Programmertyp" -p t2313 -U lfuse:r:-:i
...
avrdude: reading lfuse memory:
 
Reading | ################################################## | 100% 0.05s
 
avrdude: writing output file "<stdout>"
:01000000629D  <-- Achtung, das ist der default Wert eines neuen ATTiny2313 !
:00000001FF

Jetzt das schreiben des neuen Wertes:
avrdude -c "Programmertyp" -p t2313 -U lfuse:w:0xed:m
wenn das geklappt hat, kann danach die avr910 Software geladen werden:

avrdude -c "Programmertyp" -p t2313 -U flash:w:avr910_2313_v38.hex:i

Achtung für alle, die zum schreiben mit avrdude einen bereits vorhandenen avr910 benutzen:

Als Programmertyp für avrdude -c avr910 einstellen, nicht  butterfly oder avr109!

Grund: avr109 (und damit auch Butterfly) sehen als typische Bootloader nicht vor die Fusebits zu schreiben (es gibt kein Kommando dafür im Befehlssatz)
Im Mode avr910 werden hierfür die "universal" Kommandos benutzt, und avrdude kümmert sich um die richtigen Befehle

Programmieren mit der STK500 Software aus AVRStudio:

Für alle die Zugriff auf einen Atmel ISP oder STK500 Programmer haben oder einen kompatiblen Nachbau (z.B. den HV-Prog) :

Hier ist die Einstellung der Fuses sehr einfach, die Haken bezeichnen gebrannte Fuses, also Wert 0!:

STK500-Fuse1  STK500-Fuse2


Programmieren mit PonyProg:

Wichtig: vor dem schreiben der neuen Fuses erst mal mit "Read" die Fuses einlesen.
Auch hier gilt: der Haken bezeichnet gebrannte Fuses (Wert 0)!

So muss das "Configuration and Security" Fenster nach dem Brennen aussehen:

PonyProg-Fuses ATTiny2313

Dann kann die Firnware in den ATTiny2313 programmiert werden. Die Firmware muss hierfür nicht modifiziert werden, da der ATTiny2313 abwärtskompatibel ist.

Andere Programmer habe ich noch nicht ausprobiert, wenn mir jemand die Screenshots schickt, nehme ich sie gerne auf diese Seite auf.

Hier die mir zugesandten Screenshots, selbst ausprobiert habe ich diese nicht.

Programmieren mit Bascom:

und so sieht es unter Bascom aus, vielen Dank an Rene Rasenack:

Bascom ATTiny2313 Fuses





Letzter Update: 01.08.2011

Diese Seite ist Teil eines Framesets. Kein Inhalsverzeichnis? Mit Home gelangen Sie zum Index.