title image

Arduino als ISP   

Youtube

Het programmeren van een 'stand alone' microcontroller met behulp van de Arduino


Klik hier voor de officiële handleiding

Hoe kun je de Arduino gebruiken om een losse AVR microcontroller (zonder bootloader) te programmeren?
De Arduino is een prachtig platform om microcontroller projecten te ontwikkelen, maar soms wil je de Arduino niet gebruiken in het eindproduct, die Arduino heb je namelijk weer nodig bij het volgende project.
Het is dan dus noodzakelijk om het programma over te zetten naar een losse AVR microcontroller.
Om dat te kunnen doen heb je een AVR programmer nodig (ISP staat voor In-System-Programmer).
Gelukkig kan de Arduino dienst doen als ISP, daarnaast maak je gewoon gebruik van de Arduino software, alleen wordt de programmacode nu niet in de AVR van de Arduino geschreven maar in een tweede AVR microcontroller.

Ik maak gebruik van een Arduino Uno V3 (smd version).
De microcontroller die ik ga programmeren is een Atmega328P-PU (dit is dezelfde micro controller als die in de Arduino, dus dat maakt het ontwikkelen eenvoudig)
Deze microcontroller kost ongeveer 3,75 Euro.

atmega328p-puatmega328p-pu

ISP Sketch

Om de Arduino als ISP te kunnen laten werken gebruik ik de volgende sketch


Na het inladen van deze sketch is de Arduino dus omgetoverd tot AVR programmer.

Hieronder een schematische weergave van de schakeling: ISP Schema


Let op de elco tussen de reset pin en ground van de Arduino!. Waar dient deze voor?: Als je de Arduino gaat programmeren wordt deze eerst gereset; op deze manier komt de Arduino in zijn bootloader die het mogelijk maakt het programmageheugen te flashen.
MAAR dat willen wij in dit geval niet, de Arduino moet namelijk NIET geflashed worden, de arduino moet de programma code doorsturen naar de tweede microcontroller.
De elco houdt tijdens de reset net lang genoeg spanning op de reset pin zodat de arduino niet reset.

De status leds zijn niet noodzakelijk maar kunnen wel handig zijn (zie ISP sketch voor info over de leds).

Fuses Schrijven

Als je gebruik maakt van een blanco AVR microcontroller is de kans groot dat de microcontroller vanuit de fabriek geconfigureerd is om de interne oscillator te gebruiken, de microcontroller draait dan op 1Mhz, dus niet op 16Mhz zoals de arduino software denkt. Dit heeft als resultaat dat het programma veel te traag loopt (16 x te traag!).
We moeten dus eerst de juiste fuses programmeren. Dit doen we met behulp van avrdude (de arduino software gebruikt hetzelfde programma dus het staat al op de harde schijf)
Het commando om de fuses te schrijven is:

Blink Sletch
Nu de fuses geschreven zijn kunnen we het programma gaan laden....

Knipper LED, knipper!


Als test gaan we een LED op de tweede microcontroller laten knipperen.
Blink Sletch

In het schema zie je ook de groene LED op pin 4 van de microcontroller. Deze pin (PD2) komt overeen met digital pin 2 van de Arduino.
Als we deze led nu willen laten knipperen, kunnen we het standaard 'blink a led' voorbeeld gebruiken en pin 13 veranderen in pin 2 (int led = 2;)

Om dit programma nu in de externe microcontroller te flashen moet je aangeven dat je de Arduino als ISP gebruikt als programmer (zie plaatje hierboven).

Om het uploaden te starten druk je niet op upload maar kies je voor upload using programmer
Blink Sletch

En wacht rustig af totdat de led knippert... SUCCES!

In mijn video hieronder kun je het nog eens rustig bekijken


Later heb ik een nieuw printplaatje ontworpen voor de ISP
hier is een foto van het eindproduct
ISP



Projecten van derden


Richard van der Linden bouwde naar aanleiding van dit ontwerp zijn eigen ISP programmer.
Ik vindt het erg leuk om een foto van het resultaat te ontvangen. Dus als jij ook je projecten wilt delen, stuur dan een mail (b.venneker@gmail.com)
ISP
Bedankt Richard!