005b – Programmer un USBASP sous Arduino

Dans le tuto précédent, on a vu comment préparer son USBASP et son environnement Arduino.
Maintenant, comment en tirer partie et écrire des programme sous Arduino ?
Les contraintes, les signaux disponibles ?

Ce tuto est dans la série « USBASP ».

Correspondance des broches et signaux disponibles

Sur le connecteur JTAG 2×5 broches, sont disponibles les signaux suivants:
(voir la fiche pour le brochage, je donne ici dans l’ordre des E/S digitales de l’environnement Arduino)
Vcc
Gnd
D1 (TXD)
D2 (RXD)
D10 (Reset) (Pwm)
D11 (MOSI) (Pwm)
D12 (MISO)
D13 (Sck)

L’USB est relié sur les D8 (USB Data -) et D9 (USB Data+).
USB Data + est également relié à D2 (Int0).

Le Jumper 5V/3.3v ne sert que pour le voltage de la cible, il ne correspond à aucune E/S de l’Atmega.

JP2 relie le Reset de l’Atmega à D10 (déjà présent sur le connecteur 2×5 broches)
JP3 expose D16 (A2), qui peut servir d’entrée analogique, d’entrée numérique, ou de sortie numérique.

Les leds

Les leds Rouge et Verte sont reliées respectivement sur les E/S D145 et D15.
A noter: elles sont branchées avec l’Atmega en puit de courant.
Il faut les forcer à 0 (LOW) pour allumer la LED, à HIGH pour l’éteindre.
C’est le comportement opposé de la led 13 d’un arduino Uno.

JP3 comme bouton

JP3 peut donc servir de bouton utilisateur, ou d’entrée analogique (pour un capteur par exemple)

Sketch de démo

Voici mon sketch de démo qui fait clignoter alternativement les deux leds :

/*
  USBASP_Blink - Actuino.fr
  This example code is in the public domain.
*/

// Les broches des LEDs
#define PIN_LEDR 14
#define PIN_LEDG 15

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize LEDs pin as outputs.
  pinMode(PIN_LEDR, OUTPUT);
  pinMode(PIN_LEDG, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(PIN_LEDR, HIGH);   // turn the LED off (HIGH=OFF, LOW=ON)
  digitalWrite(PIN_LEDG, LOW);   // turn the LED on (HIGH=OFF, LOW=ON)
  delay(500);              // attente 0.5s  
  digitalWrite(PIN_LEDR, LOW);
  digitalWrite(PIN_LEDG, HIGH);
  delay(500);             
}
ça clignote !

ça clignote !

Debug via liaison série

On a vu que D1 et D2 , TXD et RXD, sont exposés sur le connecteur 2×5 broches.
C’est particulièrement utile, car cela permet d’accéder facilement au dialogue série avec le processeur.
On peut par exemple y connecter un module FTDI Série/USB.

Pour les applications USB, ça peut être très utile : Pendant que l’USB travaille, on peut dialoguer ou déboguer via un autre canal, la liaison série (éventuellement depuis une autre machine).
La librairie V-USB permet d’ailleurs, via une option de compilation, d’ouvrir un canal debug très utile sur cette liaison série.

Références

J’ai compilé une fiche de référence pour utiliser un USBASP sous Arduino :
arduino-usbasp-pinout
Cette fiche est disponible en PDF sur les pages « Références/USBASP« .

A suivre !

Laisser un commentaire