Astuce - màj winAVR 2010 et arduino 0022

Salut à tous :slight_smile:

Aujourd'hui j'ai galéré comme un perdu sur un truc débile, et histoire que d'autre ne ce casse pas la tête dessus je vous post l'astuce :wink:

LE probléme :
Par défaut l'IDE arduino pour windows est fourni avec une très vieille version de winAVR, pour la majeur partie des Arduinistes cela ne pose aucun probléme MAIS !
Pour ceux qui font leur propre board arduino avec des µc récent (atmega32u4, xmega, avr32, ...) cette version de winAVR (et par conséquent de avrdude) ne comporte pas les dit µc (logique ils n'existaient pas à l'époque !).

La solution est toute bête, prendre la version la plus récente de winAVR et remplacer celle d'origine.
Sauf que ça ne marchera pas aussi facilement !

Si on renomme le dossier ..\hardware\tools\avr en avr-old par exemple puis que l'on copie le dossier d'installation de winAVR (C:\WinAVR-20100110 dans mon cas) on va voir apparaitre un jolie :

avrdude: Yikes!  Invalid device signature.
       Double check connections and try again, or use -F to override
       this check.

dans la console arduino et impossible d'uploader un quelconque sketch !
Le probléme c'est que l'équipe arduino a modifié le code source de avrdude à leur sauce pour que avrdude reconnaisse le bootloader arduino comme un bootloader stk500.
Mais cela n'est plus nécessaire car la dernière version de winAVR comporte un protocole nommé "arduino" spécialement étudié pour ... l'arduino.

Voila comment mettre à jour winAVR correctement :
1 - Renommer le dossier ..\hardware\tools\avr en avr-old
2 - Copier C:\WinAVR-20100110 (dernier version dispo au moment où je post) dans ..\hardware\tools
3 - Renommer ..\hardware\tools\WinAVR-20100110 en ..\hardware\tools\avr
4 - Créer un dossier etc dans ..\hardware\tools\avr
5 - Copier ..\hardware\tools\avr\bin\avrdude.conf dans ..\hardware\tools\avr\etc
-- La mise à jour à proprement dite de winAVR est finit --
Maintenant il faut modifier le fichier ..\hardware\arduino\boards.txt
Chaque lignes dans ce genre :
xxxxxxx.upload.protocol=stk500
doit être remplacer par :
xxxxxxx.upload.protocol=arduino

Exemple :
uno.name=Arduino Uno
uno.upload.protocol=stk500
uno.upload.maximum_size=32256
...
modifier en :
uno.name=Arduino Uno
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
...

Par contre les lignes dans ce genre : mega2560.upload.protocol=stk500v2 ne doivent pas être modifiée !

Ensuite faite un test avec une board arduino "classique" (UNO ou assimilé) et l'exemple blink pour être sur que tout va bien (et si possible avec un mega2560 aussi).
Normalement vous devrez pouvoir utiliser l'IDE arduino avec des ATmega récent, normalement pas supporté de base.

Exemple avec un ATmega1284p sur une board arduino "maison" sans utiliser de bootloader :

##############################################################

M1284_DIY.name=DIY ATmega1284
M1284_DIY.upload.using=usbtiny
M1284_DIY.upload.maximum_size=131072

M1284_DIY.bootloader.low_fuses=0xFF
M1284_DIY.bootloader.high_fuses=0xDC
M1284_DIY.bootloader.extended_fuses=0xFD
M1284_DIY.bootloader.path=atmega1284
M1284_DIY.bootloader.file=blink.hex
M1284_DIY.bootloader.unlock_bits=0x3F
M1284_DIY.bootloader.lock_bits=0x0F

M1284_DIY.build.mcu=atmega1284p
M1284_DIY.build.f_cpu=20000000L
M1284_DIY.build.core=arduino.DuinOS
M1284_DIY.verbose=true

Il est bien évident qu'il faut avoir un "core" arduino supportant l'ATMega "cible", ici par exemple j'utilise duinOS pour compiler mode code arduino "classique" ou "rtos" sur l'ATmega1284p.
Pour un ATmega644p il existe sanguino, pour les Attiny il existe arduino-tiny, etc, etc, ...

Voila j'espère que cela aidera d'autre Arduinistes dans leur conquête du monde de l'arduino :wink:

Petite remarque : J'ai ouvert un billet sur le google code du projet arduino il y a 4-5 mois qui a été accepté donc normalement la prochaine version de l'IDE arduino devrait être fourni avec winAVR 2010 ou crosspack (le principe d'installation est le même).

Merci skywodd pour l'astuce qui me servira prochainement : je suis très tenté de jouer avec le mega32u4 et les divers firmwares usb qu'on peut y installer.

Question 1 : tu fais allusion à une modification du code source d'avrdude. Où est ce code source ? Je l'ai cherché ces jours derniers pour y trouver éventuellement la manipulation de DTR qui déclenche le reset auto.

Question 2 : as tu constaté dans Arduino 1 beta les choses que tu annonces ?

al1fch:
Merci skywodd pour l'astuce qui me servira prochainement : je suis très tenté de jouer avec le mega32u4 et les divers firmwares usb qu'on peut y installer.

si tu veux jouer avec des ATmega32U4 regarde du coté de teensyduino de PJRC
-> http://ladyada.net/products/atmega32u4breakout/#using_teensyduino
(J'utilise la "vrai" teensy mais une version clone marche sans probléme :wink: sinon effectivement niveau firmware avec LUFA on peut faire des truc tout simplement génial 8))

al1fch:
Question 1 : tu fais allusion à une modification du code source d'avrdude. Où est ce code source ? Je l'ai cherché ces jours derniers pour y trouver éventuellement la manipulation de DTR qui déclenche le reset auto.

Le DTR est déclenché au niveau du drivers, l'ATmega8U2 se fait juste passer pour un port série virtuelle, c'est dans le code source de l'ATmega8U2 que tu trouvera le DTR.
-> https://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares
Pour la version modifié de AVRDUDE : https://github.com/arduino/avrdude
Et la version modifié de rxtx (librairie série) : GitHub - arduino/RXTX: Arduino version of RXTX

al1fch:
Question 2 : as tu constaté dans Arduino 1 beta les choses que tu annonces ?

Oui est même plus !
Il faudrait que je retrouve le lien de téléchargement dans la mail-list développeur mais Arduino 1 est juste awesome !
Edit : Voici le lien de téléchargement (+ le détail des derniers modif) : Google Code Archive - Long-term storage for Google Code Project Hosting.

Déja quand on lance l'IDE le logo a été changé, plus de "arduino beta ..." à la place il y a un jolie écran de démarrage avec les coeur "arduino" comme sur les boites.
Et l'IDE a changer de couleur avec un style beaucoup plus "classe" (voir image en piéce jointe).
Seul petit truc "bête" je trouve c'est qu'il n'ont pas mis mon patch pour les listes défilante, donc si vous avez énormément de board/librairies installé le menu sera tronqué (pas de scrolling).
nouvelle extension pour les sketch .pde -> .ino pour éviter les conflit prog processing/arduino.
Nouveau systéme de coloration des API (keywords.txt).
Compilation en mode verbose depuis les préférences.
Programmation sans utiliser de bootloader en cliquant sur upload et en appuyant shift.

Plusieurs changement de taille dans les librairies :

  • le support du DHCP / DNS et un client twitter pour la librairie ethernet 8) (pas encore finit par contre),
  • class IpAddress ajouter à la librairies ethernet,
  • opérateur boolean sur Ethernet.client -> client =! NULL devient if(client)
  • une fonction serialEvent() qui est déclenché des qu'un nouveau byte arrive sur le port série (plus besoin de if(Serial.available() > 0) pour savoir si il y à du changement),
  • fonction Serial non bloquant,
  • plein de petit bug résolu,
  • String en progmem via F("azerty") et réimplantation intégrale de la class string,
  • SoftwareSerial disponible sur plusieurs pin en même temps (passage à NewSoftSerial),
  • support de plusieurs fichier ouvert simultanément et fonction scan des répertoires dans la librairie SD (+ quelques autres petites fonctions sympa),
  • optimisation du Serial.print(xx, BYTE) pointant vers Serial.write(xx) et quelque autre petite optimisation,
  • librairie wire utilisant F_CPU à la place des fréquences "hardcorder" (16Mhz ou 8Mhz),
  • librairie wire intégrant le support de stream -> possibilité d'utilisation de .print() .println() .write() .read()
  • pour les librairies c'est pas cool mais en plus d'avoir à refaire le keywords.txt il faudra changer "WProgram.h" par "Arduino.h"
    Et surement d'autre chose que j'ai pas vu pour le moment !

star-screen.jpg

Ok skywodd
Plein de choses nouvelles dans la prochaine version, c'est vrai !
J'ai déjà joué un peu avec il y a une quinzaine de jours (plus particulièrement avec la nouvelle librairie Ethernet et ses exemples)
On a déjà eu un échange rapide sur cette nouvelle version :

Mes questions portaient plus précisément sur :

Le probléme c'est que l'équipe arduino a modifié le code source de avrdude à leur sauce pour que avrdude reconnaisse le bootloader arduino comme un bootloader stk500.
Mais cela n'est plus nécessaire car la dernière version de winAVR comporte un protocole nommé "arduino" spécialement étudié pour ... l'arduino.

Je pense voir (dans le code de son firmware) le Mega8u2 relayer les changements de DTR qui lui sont signifiés par le PC par le biais du port série virtuel. Je cherche donc la "source" de la manipulation de DTR au niveau du PC soit par l'IDE en java soit plutôt par l'avrdude modifié.
(A partir du pc ,avec un terminal permettant de manipuler à volonté DTR (terminal Bray par exemple sous Windows Terminal), on déclenche des reset comme on veut, à tout moment.....

al1fch:
Je pense voir (dans le code de son firmware) le Mega8u2 relayer les changements de DTR qui lui sont signifiés par le PC par le biais du port série virtuel. Je cherche donc la "source" de la manipulation de DTR au niveau du PC soit par l'IDE en java soit plutôt par l'avrdude modifié.
(A partir du pc ,avec un terminal permettant de manipuler à volonté DTR (terminal Bray par exemple sous Windows), on déclenche des reset comme on veut, à tout moment.....

terminal Bray, je connaissait pas ! Bien plus puissant que tera-term !
Pour tout ce qui est firmware j'ai mis les liens plus haut, à mon avis coté IDE le controle du DTR dois ce faire avec la version modifier de RXTX, pour avrdude je sais pas si il ont fait une modification pour le DTR à voir.
avrdude modifié -> https://github.com/arduino/avrdude
RXTX arduino -> GitHub - arduino/RXTX: Arduino version of RXTX