AVR910
- Programmer
für
AVR-Prog und avrdude

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
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.
 | 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.
 |
| | | |
| | |
|
|
|
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! |
 | 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:

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:
 | Wichtig ist
das einstellen des richtigen Chips zum Programmieren |
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  |
| |
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

| Wichtig ist es
die
richtige
Baudrate einzustellen, empfehlenswert, weil schneller auch die richtige
Schnittstelle. |

| Das sieht
doch alles sehr
übersichtlich aus, und ein autodetect für den Controller gibt
es auch.
Ausprobieren lohnt sich! |
AVR
Codevision (Windows) 
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) 
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.
- der Blockmode des avr109
Protokolls wird auch im avr910
Protokoll unterstützt, man muß also nicht mehr -c
avr109 oder -c butterfly eingeben um von der gesteigerten
Geschwindigkeit zu profitieren. Wichtig z.B. für alle USB
Varianten dieses Programmers.
- die Unterstützung für neue Controller zusammen
mit diesem Programmer wurde verbessert! Damit entfällt auch
das
nacheditieren der avrdude.conf und auch das Erweitern des
Programmer-Sourcecodes auf neue Controller.
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: 
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. |
 | 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... |
 | 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. |
|

| 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) 
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
 |
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:

Mögliche Fehlerursachen:
- Keine Betriebsspannung angelegt
- Der AVR910 wird nicht
durch die serielle Schnittstelle mit Spannung versorgt! Die 5V
müssen über die Zielschaltung kommen.
- Keine Verbindung zum seriellen Port
- Defektes und/oder falsches serielles Kabel
- Das serielle
Kabel zum PC muss ein
sogenanntes 1:1 Verlängerungs- oder Modemkabel sein, also kein
Nullmoden!
- Es wurde ein falscher SUB-D
Verbinder verwendet
- Auf dem AVR910
muss eine SUB-D Buchse eingebaut werden. Beim
Stecker stimmen die Pinnummern nicht!
- Falsche
oder gar keine Baudrate ausgewählt?
- bei
avrdude: richtige
Baudrate in avrdude.conf oder per -B 115200 eingestellt?
- wird noch avrdude Version <= 4.4
verwendet? Bei -c butterfly in
den Sourcen
die Baudrate einstellen und compilieren!
- besser:
aktuelle Version von avrdude verwenden
- bei uisp: Baudrate ist ev. fix auf 19200
eingestellt!
- Der serielle Port ist durch
andere, gerade laufende Software
belegt
- Ist die
Terminalemulation noch offen?
- Ist
vielleicht AVRProg schon mal gestartet?
- Irgend etwas beim
Aufbau ist
schief gegangen
- Sind
die richtigen Transistoren eingebaut? (Q100 ist ein PNP, Q2 ein NPN
Transistor)
- Dioden
richtig herum eingelötet?
- Falscher
oder nicht schwingender Quarz
- Wechselt
die LED beim einschalten die Farbe und leuchtet sie
überhaupt? Wenn ja, Quarz OK.
- Stimmt die Quarzfrequenz mit der im
Sourcecode eingestellten?
(default 7,3728 MHz)
- wird
ein ATTiny2313 verwendet?
- Meine
Terminalemulatin empfängt nur
Hyroglyphen
- Baudrate falsch?
- Transistoren
richtig bestückt? Q100 ist ein PNP, Q2 ein NPN Transistor
- stimmen die Widerstandswerte?
- Die
PC Schnittstelle schafft keine 115200 Baud (seltener Fall!)
- Baudrate im Sourcecode auf 19200 Baud einstellen
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.5 | Programmieren 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.2009 | Bug 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.
 | Die Platine ist so bemessen,
das
sie
stramm in das
2 teilige
Gehäuse
von Reichelt (SP 2043 SW) oder
Conrad (Best.# 522244) hineinpasst. |
|
|

| 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
|
|
| Wer nicht selbst bauen
möchte, oder wer auf Nummer sicher gehen will kann im Shop von
Rene Rasenack 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:
|
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.
|  |
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!:

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:

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:

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