Top of this page
Skip navigation, go straight to the content

Knowledge base
Terug



Programmeren van ATMEL AVR microcontrollers met AVRdude en USBasp

 

De hardware installeren

Voor de hardware is in de Elektrowinkel een USBasp aanwezig. Dit is een in-circuit programmer met USB. Aangezien veel nieuwe laptops geen parallelle en seriële poort meer hebben is USB wel zo handig. Deze handleiding gaat er vanuit dat je een laptop hebt met minimaal Windows XP erop.
Begin met het downloaden van de software en beschrijvingen van:

http://www.fischl.de/usbasp/

Het bestand bevat bovendien voldoende informatie om zelf een USBasp te bouwen. Let wel op dat de microcontroller op de USBasp zelf ook weer geprogrammeerd moet worden. Het printplaat ontwerp in Eagle of als EPS van de Elektrowinkel kan tevens hier gedownload worden/

Pak het archief van fischl.de uit in een handige map. Steek nu de USBasp een USB aansluiting en installeer hem door in de wizard te verwijzen naar: \bin\win-driver\usbasp.inf Als dit gelukt is zul je de bekende ‘pling’ horen als je de USB stekker in je laptop steekt en zal de USBasp met een eigen groep onder ‘Device Manager’ staan.

 

De hardware gebruiken

 

De pinheader

Op de USBasp bevindt zich een pinheader om hem te verbinden met het bordje met de te programmeren microcontroller. Figuur 1 geeft aan hoe de pinnen van een pinheader genummerd zijn en figuur 2 hoe ze op de printplaat genummerd zijn. De even nummers van de pinheader zorgen voor de voedingsspanning en in de toekomst voor communicatie met de atmel voor debugging. Door de oneven nummers vind de daadwerkelijke programmering van de AVR plaats. De volgende pinnen moeten minimaal verbonden worden:

Nummer op de pinheader

Functie AVR pin

1

MOSI

5

RESET

7

SCK

9

MISO

10 (en 8)

GND

2

VCC

 

Eventueel kunnen ook de USART pinnen aangesloten worden op de pinheader. De volgende verbindingen moeten dan gemaakt worden

Welke pinnen van de AVR deze functies hebben kan gewonden worden in de datasheet van de AVR. Verbind de reset-pin van de AVR met een weerstand van ongeveer 10 KΩ; naar de +5V.

 

Nummer op de pinheader

Functie AVR pin

4

RxD

6

TxD

Waarbij in de TxD leiding een weerstand van 270Ω opgenomen moet worden.


Figuur 1, nummering van de pinnen


Tip: Controleer altijd of de flatcable goed aangesloten is. Een handige manier om dit te controleren is door te meten of de ground en bijvoorbeeld ‘reset’ verbinding maken. Als die kloppen zit de rest ook goed. Let wel op dat de USB stekker nog niet aangesloten is en het target board nog geen voedingsspanning heeft! Aangeven welke pin nummer 1 is op het target board is ook handig.

 

De jumpers

De jumpers op de USBasp moeten bij normaal gebruik allemaal open staan. De jumpers kunnen als volgt gebuikt worden:

J1  

Deze jumper verbind de +5V vanuit de USB stekker door naar het target board. Dit kan handig zijn als er even geen voeding aanwezig is. Let wel op dat het target board niet ook op een voeding aangesloten is. Waarschijnlijk overleeft de USB aansluiting in de computer dit niet. Als je deze optie gebruikt moet pin 2 verbonden worden met de +5V op het target board.

J2  

Door deze jumper te verbinden kan de USBasp zelf geprogrammeerd worden. Er wordt verbinding gemaakt met de reset. Deze jumper is dus maar één keer nodig. 

J3  

Jumer 3 zorgt voor een lage kloksnelheid tussen de USBasp en het target board. Om bijvoorbeeld op een breadboard te programmeren kan beter een lagere kloksnelheid gebuikt worden. 

 

De LED’s

De groene led geeft aan dat de USBasp voedingsspanning heeft en klaar is voor gebruik. De rode led geeft aan de USBasp communiceert met het target board.

 

De software gebruiken

Kopieer de bestanden in \bin\win-avrdude naar een handige map die je daarna toevoegt aan het ‘path’ van Windows. Makkelijk is ze te kopiëren naar c:\windows (of een andere map die al in het ‘path’ staat).
Open avrdude.conf (één van de bestanden die je net gekopieerd hebt) vanaf regel 215 staat gegeven welke computerporten AVRdude standaard gebruikt. Voeg hieronder de volgende regel toe:
default_programmer = "usbasp";
Start een command prompt met cmd. Ga nu in de map staan waar de hex-file, die je wilt uploaden naar de AVR, staat. Of alles goed aangesloten is kan getest worden door in te typen

> avrdude –p <AVR type> -v

AVR type geeft aan welke AVR er op het target board zit. Meestal is dit een m (voor ATmega type) of t (voor ATtiny type) gevolgd door het nummer. Een aantal voorbeelden:

Type AVR

‘AVR type’

ATtiny2313

t2313

ATtiny26

t26

ATtiny13

t13

ATmega8

m8

Tip: door voor ‘AVR type’ een verkeerde waarde op te geven geeft AVRdude een lijst met alle mogelijke opties.

Nadat het commando ingetypt is geeft AVRdude als het goed is alle informatie over de chip. Aan het einde van dit document staat een lijst met veel voorkomende fouten.
De AVR kan geprogrammeerd worden door –U toe te voegen aan het commando. Achter de –U komt eerst weer een spatie en daarna wat geprogrammeerd moet worden. De volgende opties zijn nuttig:

Flash geheugen

flash 

EEPROM geheugen 

eeprom

High fuse 

hfuse

Low fuse 

lfuse

Na dit commando komt een dubbele punt en of er geschreven, gelezen of gecontroleerd moet worden of wat in het geheugen overeen komt met wat er in het bestand staat.

Lezen  

Schijven 

w

Verifiëren  

v

Hierna komt er weer een dubbele punt en welke file er gebruikt moet worden. Als een mega 8 met de file main.hex geprogrammeerd moet worden moet dat dus met het volgende commando gedaan worden:

> avrdude –p m8 –U flash:w:main.hex

Tip: de –U optie kan meerder keren in één regel gebruikt worden, om bijvoorbeeld zowel het flash geheugen als de high fuse in één keer te programmeren.
Hoe de fuse bits geprogrammeerd moeten worden is te vinden in de datasheet van de AVR.  In het hoofdstuk ‘Memory Programming, Fuse Bytes’ staat in welke volgorde de bits in de bytes zitten. Het commando –U voor de fuse bytes kan iets anders gebruikt worden. In plaats van de bestandsnaam kan direct de hexadecimale waarde voor de fuse gegeven worden gevolgd door dubbelepunt en ‘m’. Bijvoorbeeld de high fuse controleren in een ATtiny2313:

> avrdude –p t2313 –U hfuse:v:0xDF:m

Aangezien voorbeelden altijd het makkelijkst werken nog een voorbeeld. De volledige regel om de USBasp te programmeren is:

> avrdude –p m8 –U flash:w:main.hex –U hfuse:w:0xc9:m –U lfuse:w:0x9f:m

De hex-file is hier hernoemt van usbasp.2005-11-14.hex naar main.hex.


Mogelijke fouten bij de software

De volgende fouten komen vaak voor:

  • avrdude: error: could not find USB device vendor=0x3eb product=0xc7b4

De USBasp is niet aangesloten op de computer. Steek de stekker erin!

 

  • avrdude: error: programm enable: target doesn't answer. 1

Dit betekend dat één van de verbindingen naar het target board niet goed aangesloten is of dat het target board geen voedingsspanning heeft. Controleer alle aansluitingen en probeer de chip opnieuw uit te lezen.

 

  • avrdude: Device signature = 0xffffff
    avrdude: Yikes!  Invalid device signature.

De chip is op zo geprogrammeerd dat in-circuit programmeren niet meer mogelijk is of de chip is niet voorzien van de juiste oscillator. Programmeer de chip op een daarvoor bestemd bord of sluit de juiste oscillator aan op de chip.