FabISP : Différence entre versions

De fablabo
Aller à : navigation, rechercher
(programmation)
(programmation)
 
(8 révisions intermédiaires par le même utilisateur non affichées)
Ligne 101 : Ligne 101 :
  
 
Une petite erreur provoquai un court circuit : un peu d'étain s'était glissé sous un condensateur. J'ai dut le dessouder pour nettoyer.
 
Une petite erreur provoquai un court circuit : un peu d'étain s'était glissé sous un condensateur. J'ai dut le dessouder pour nettoyer.
 +
 +
 +
mise à jour 1 mai 2014 : j'ai refait le circuit qui ne foncionnait pas
 +
 +
Maintenant je sais bien souder les CMS :
 +
 +
[[image:Fabisp.soldered.jpg|600px]]
  
 
==programmation==
 
==programmation==
  
J'utilise un [arduino.cc/en/Tutorial/ArduinoISP arduino comme programmateur ISP] pour mettre le programme sur la puce.
+
Pour programmer le programmateur, il faut utiliser [http://academy.cba.mit.edu/classes/embedded_programming/firmware.zip le firmware fournit en cours ]
 +
 
 +
===avec l'AVRISP V2===
 +
 
 +
C'est un programmateur tout fait
 +
 
 +
pour qu'il soit reconnu sous linux , il faut faire quelques manipulations :
 +
 
 +
créer une règle udev pour le programmateur :
 +
 
 +
<code lang=bash>$ sudo gedit /etc/udev/rules.d/20-avrisp.rules</code>
 +
 
 +
remplir le fichier avec la ligne suivante :
 +
<code lang=bash># Atmel Corp. AVRISP mkII
 +
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", MODE="660", GROUP="uucp",SYMLINK+="avrdev"</code>
 +
 
 +
puis s'attribuer le groupe uucp
 +
 
 +
<code lang=bash>$ sudo adduser <nom d'utilisateur> uucp</code>
 +
 
 +
enfin, relancer la session pour que la modification fasse effet
 +
 
 +
 
 +
[[image:Fabisp.programming.jpg|600px]]
 +
 
 +
Lorsqu'on cable de circuit cible au programmateur, c'est déjà bon signe si la led s'allume en vert.
 +
 
 +
ensuite, après avoir décompresser le dossier firmware, éditer le fichier makefile pour indiquer qu'on programme avec l'AVRISP :
 +
 
 +
<code lang:bash>AVRDUDE = avrdude -c avrisp2 -P usb    -p $(DEVICE)</code>
 +
 
 +
ensuite on lance la compilation  :
 +
 
 +
<code lang:bash>make hex</code>
 +
 
 +
le résultat de la compilation :
 +
 
 +
<code lang:bash>avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o
 +
avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -x assembler-with-cpp -c usbdrv/usbdrvasm.S -o usbdrv/usbdrvasm.o
 +
avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c usbdrv/oddebug.c -o usbdrv/oddebug.o
 +
avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c main.c -o main.o
 +
avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -o main.elf usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o
 +
rm -f main.hex main.eep.hex
 +
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
 +
avr-size main.hex
 +
  text   data     bss     dec     hex filename
 +
      0   2020       0   2020     7e4 main.hex
 +
</code>
 +
 
 +
Puis on regle les fusibles :
 +
 
 +
 
 +
<code lang:bash>make fuse</code>
 +
 
 +
résultat :
 +
 
 +
<code lang:bash>avrdude -c avrisp2 -P usb    -p attiny44  -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m
 +
 
 +
avrdude: AVR device initialized and ready to accept instructions
 +
 
 +
Reading | ################################################## | 100% 0.11s
 +
 
 +
avrdude: Device signature = 0x1e9207
 +
avrdude: reading input file "0xDF"
 +
avrdude: writing hfuse (1 bytes):
 +
 
 +
Writing | ################################################## | 100% 0.04s
 +
 
 +
avrdude: 1 bytes of hfuse written
 +
avrdude: verifying hfuse memory against 0xDF:
 +
avrdude: load data hfuse data from input file 0xDF:
 +
avrdude: input file 0xDF contains 1 bytes
 +
avrdude: reading on-chip hfuse data:
 +
 
 +
Reading | ################################################## | 100% 0.04s
 +
 
 +
avrdude: verifying ...
 +
avrdude: 1 bytes of hfuse verified
 +
avrdude: reading input file "0xFF"
 +
avrdude: writing lfuse (1 bytes):
 +
 
 +
Writing | ################################################## | 100% 0.11s
 +
 
 +
avrdude: 1 bytes of lfuse written
 +
avrdude: verifying lfuse memory against 0xFF:
 +
avrdude: load data lfuse data from input file 0xFF:
 +
avrdude: input file 0xFF contains 1 bytes
 +
avrdude: reading on-chip lfuse data:
 +
 
 +
Reading | ################################################## | 100% 0.04s
 +
 
 +
avrdude: verifying ...
 +
avrdude: 1 bytes of lfuse verified
 +
 
 +
avrdude: safemode: Fuses OK
 +
 
 +
avrdude done.  Thank you.
 +
</code>
 +
 
 +
enfin, on upload le programme :
 +
 
 +
<code lang:bash>make program</code>
 +
 
 +
résultat :
 +
 
 +
<code lang:bash>avrdude -c avrisp2 -P usb    -p attiny44  -U flash:w:main.hex:i
 +
 
 +
avrdude: AVR device initialized and ready to accept instructions
 +
 
 +
Reading | ################################################## | 100% 0.11s
 +
 
 +
avrdude: Device signature = 0x1e9207
 +
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
 +
        To disable this feature, specify the -D option.
 +
avrdude: erasing chip
 +
avrdude: reading input file "main.hex"
 +
avrdude: writing flash (2020 bytes):
 +
 
 +
Writing | ################################################## | 100% 73.70s
 +
 
 +
avrdude: 2020 bytes of flash written
 +
avrdude: verifying flash memory against main.hex:
 +
avrdude: load data flash data from input file main.hex:
 +
avrdude: input file main.hex contains 2020 bytes
 +
avrdude: reading on-chip flash data:
 +
 
 +
Reading | ################################################## | 100% 71.44s
 +
 
 +
avrdude: verifying ...
 +
avrdude: 2020 bytes of flash verified
 +
 
 +
avrdude: safemode: Fuses OK
 +
 
 +
avrdude done.  Thank you.
 +
 
 +
avrdude -c avrisp2 -P usb    -p attiny44  -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m
 +
 
 +
avrdude: AVR device initialized and ready to accept instructions
 +
 
 +
Reading | ################################################## | 100% 0.11s
 +
 
 +
avrdude: Device signature = 0x1e9207
 +
avrdude: reading input file "0xDF"
 +
avrdude: writing hfuse (1 bytes):
 +
 
 +
Writing | ################################################## | 100% 0.04s
 +
 
 +
avrdude: 1 bytes of hfuse written
 +
avrdude: verifying hfuse memory against 0xDF:
 +
avrdude: load data hfuse data from input file 0xDF:
 +
avrdude: input file 0xDF contains 1 bytes
 +
avrdude: reading on-chip hfuse data:
 +
 
 +
Reading | ################################################## | 100% 0.04s
 +
 
 +
avrdude: verifying ...
 +
avrdude: 1 bytes of hfuse verified
 +
avrdude: reading input file "0xFF"
 +
avrdude: writing lfuse (1 bytes):
 +
 
 +
Writing | ################################################## | 100% 0.04s
 +
 
 +
avrdude: 1 bytes of lfuse written
 +
avrdude: verifying lfuse memory against 0xFF:
 +
avrdude: load data lfuse data from input file 0xFF:
 +
avrdude: input file 0xFF contains 1 bytes
 +
avrdude: reading on-chip lfuse data:
 +
 
 +
Reading | ################################################## | 100% 0.04s
 +
 
 +
avrdude: verifying ...
 +
avrdude: 1 bytes of lfuse verified
 +
 
 +
avrdude: safemode: Fuses OK
 +
 
 +
avrdude done.  Thank you.
 +
</code>
 +
 
 +
 
 +
 
 +
Le programmateur est maintenant prêt à fonctionner : il ne reste plus qu'à dessouder les juppers 1 et 2.
 +
 
 +
Pour férifier qu'il réagit bien, je tape
 +
 
 +
<code lang:bash>lsusb</code>
 +
 
 +
Lorsque j'ai branché le programmateur, il apparait dans la liste sosu cette forme :
 +
 
 +
<code lang:bash>Bus 003 Device 013: ID 1781:0c9f Multiple Vendors USBtiny</code>
 +
 
 +
ça y est, j'ai un FabISP qui fonctionne !
 +
 
 +
 
 +
==utilisation==
 +
 
 +
Il faut faire une petite manip pour pouvoir utiliser le FabISP sans être root, sans quoi on a une erreur
 +
<code>avrdude: error: usbtiny_transmit: error sending control message: Operation not permitted
 +
</code>
 +
 
 +
http://mightyohm.com/blog/2010/03/run-avrdude-without-root-privs-in-ubuntu/
  
 
[[Catégorie:FabAcademy]]
 
[[Catégorie:FabAcademy]]
 
[[Catégorie:Electronique]]
 
[[Catégorie:Electronique]]

Version actuelle en date du 24 septembre 2014 à 16:35

de quoi s'agit -t-il

Un petit programmeur de microcontroleur fabricable dans un fablab.

c'est un sujet de TP pour la fabacademy , durant le cours sur la production electronique

De nombreuses variantes existent. J' ai choisi la FabISPKey qui a la particularité d'être au format clé USB.

je vais tenter de la réaliser à l'aide de la technique de découpe vinyl de cuivre, pour expérimenter cette dernière.


liste du matériel

  • 1 microcontroleur ATTiNY44A-SSU
  • 1 cristal 20Mhz


  • 1 résistance 0 Ohms
  • 2 résistances 49.9 Ohms
  • 1 résistance 499 Ohms
  • 1 résistance 1 KOhms
  • 1 résistance 10 KOhms


  • 2 condensateurs 8 pF
  • 1 condensateur 0.1 uF
  • 1 condensateur 1 uF


  • 2 diodes zenner 3.3V


ressources

débuter avec les CMS

un autre tuto

fabrication du PCB

premiers tests de découpe vinyl du circuit

J'ai choisi d'essayer d'expérimenter la technique de réalisation du du circuit avec une découpe vinyl dans du cuivre adhésif.

Fabisp.Firstry.vinyl.jpg

les premiers tests ne sont pas trop concluants : la trace trop détaillée est difficile à découper proprement.

J'essaye donc de modifier le circuit pour le rendre plus adapté à ce type de fabrication.

FabispKayVinyl.png

par rapport à la version de Andy, cette version contient moins de tracés, et surtout de petites chutes.

Hélas, je n'ai pas eu plus de succès avec cette version...je décide alors de fraiser le circuit avec la modela

fraisage avec la modela et fabmodules

Fabisp.Fabmodules2pcb.jpg

J'avais quelques appréhensions car depuis plusieurs mois que nous luttions à faire fonctionner cette machine avec fabmodules, nous n'avions jamais réussi, principalement à cause du câble de liaison propriétaire USB-série, qui nécessitait un contrôle de flux.

Guillaume avait travaillé des jours entiers pour comprendre comment faire fonctionner la machine avec des logiciels propriétaire sous windows bien moins performants que fabmodules (plusieurs heures de calcul à chaque fois) et plus rebutants (sous windows) : je rends hommage à son engagement et sa persévérence qui lui a permis de mettre au point une méthode de travail qui fonctionne.

Finalement, pour la fabacademy 2014, Neil gershenfield a réécrit le driver de la modela dans fabmodules, et maintenant ça marche ! merci Neil!

Du coup, après toutes ces luttes rocambolesques, l'usage de fabmodules parru très simple et facile d'abord.

Comme outils de fraisage, j'ai utilisé une pointe de javelo 0.25mm à 0.4mm de profondeur.

Je suis parti du préréglage "mill traces 1/64" que j'ai réajusté pour correspondre à ce format.

Fabisp.Oiled.jpg Fabisp.Milling.jpgFabisp.AfterMilling.jpg

J'ai mis un peu de huile de vaseline sur la plaque,


Fabsip.Pcb.jpg

et En 20 minutes, j'avais mon circuit (coupé avec une fraise de 1/32").

quelques problèmes d'approvisionnement

Notre fablab étant encore en cours de construction, nous n'avons pas encore tout approvisionné.

Pour ce qui est de l'électronique, il n'est as évident en france de trouver les références de l'inventaire fablab dans des quantités humaines (<5000) et des délais raisonnables.

Malgré que j'aie pratiquement tout trouvé, il me manque encore des condensateurs qui me sont proposé chez farnell sous un délai de plusieurs semaines.

Je suis donc bloqué à ce stade et j'attends donc les pièces...

soudure

J'ai soudé les composants au fer et à l'étain.

Ce ne fut pas très facile avec une panne de 0.8mm : une plus petite serai mieux

Une petite erreur provoquai un court circuit : un peu d'étain s'était glissé sous un condensateur. J'ai dut le dessouder pour nettoyer.


mise à jour 1 mai 2014 : j'ai refait le circuit qui ne foncionnait pas

Maintenant je sais bien souder les CMS :

Fabisp.soldered.jpg

programmation

Pour programmer le programmateur, il faut utiliser le firmware fournit en cours

avec l'AVRISP V2

C'est un programmateur tout fait

pour qu'il soit reconnu sous linux , il faut faire quelques manipulations :

créer une règle udev pour le programmateur :

$ sudo gedit /etc/udev/rules.d/20-avrisp.rules

remplir le fichier avec la ligne suivante : # Atmel Corp. AVRISP mkII SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", MODE="660", GROUP="uucp",SYMLINK+="avrdev"

puis s'attribuer le groupe uucp

$ sudo adduser <nom d'utilisateur> uucp

enfin, relancer la session pour que la modification fasse effet


Fabisp.programming.jpg

Lorsqu'on cable de circuit cible au programmateur, c'est déjà bon signe si la led s'allume en vert.

ensuite, après avoir décompresser le dossier firmware, éditer le fichier makefile pour indiquer qu'on programme avec l'AVRISP :

AVRDUDE = avrdude -c avrisp2 -P usb -p $(DEVICE)

ensuite on lance la compilation  :

make hex

le résultat de la compilation :

avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -x assembler-with-cpp -c usbdrv/usbdrvasm.S -o usbdrv/usbdrvasm.o avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c usbdrv/oddebug.c -o usbdrv/oddebug.o avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c main.c -o main.o avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -o main.elf usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o rm -f main.hex main.eep.hex avr-objcopy -j .text -j .data -O ihex main.elf main.hex avr-size main.hex

  text	   data	    bss	    dec	    hex	filename
     0	   2020	      0	   2020	    7e4	main.hex

Puis on regle les fusibles :


make fuse

résultat :

avrdude -c avrisp2 -P usb -p attiny44 -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.11s

avrdude: Device signature = 0x1e9207 avrdude: reading input file "0xDF" avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.04s

avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0xDF: avrdude: load data hfuse data from input file 0xDF: avrdude: input file 0xDF contains 1 bytes avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.04s

avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: reading input file "0xFF" avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.11s

avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xFF: avrdude: load data lfuse data from input file 0xFF: avrdude: input file 0xFF contains 1 bytes avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.04s

avrdude: verifying ... avrdude: 1 bytes of lfuse verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.

enfin, on upload le programme :

make program

résultat :

avrdude -c avrisp2 -P usb -p attiny44 -U flash:w:main.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.11s

avrdude: Device signature = 0x1e9207 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed

        To disable this feature, specify the -D option.

avrdude: erasing chip avrdude: reading input file "main.hex" avrdude: writing flash (2020 bytes):

Writing | ################################################## | 100% 73.70s

avrdude: 2020 bytes of flash written avrdude: verifying flash memory against main.hex: avrdude: load data flash data from input file main.hex: avrdude: input file main.hex contains 2020 bytes avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 71.44s

avrdude: verifying ... avrdude: 2020 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.

avrdude -c avrisp2 -P usb -p attiny44 -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.11s

avrdude: Device signature = 0x1e9207 avrdude: reading input file "0xDF" avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.04s

avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0xDF: avrdude: load data hfuse data from input file 0xDF: avrdude: input file 0xDF contains 1 bytes avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.04s

avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: reading input file "0xFF" avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.04s

avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xFF: avrdude: load data lfuse data from input file 0xFF: avrdude: input file 0xFF contains 1 bytes avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.04s

avrdude: verifying ... avrdude: 1 bytes of lfuse verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.


Le programmateur est maintenant prêt à fonctionner : il ne reste plus qu'à dessouder les juppers 1 et 2.

Pour férifier qu'il réagit bien, je tape

lsusb

Lorsque j'ai branché le programmateur, il apparait dans la liste sosu cette forme :

Bus 003 Device 013: ID 1781:0c9f Multiple Vendors USBtiny

ça y est, j'ai un FabISP qui fonctionne !


utilisation

Il faut faire une petite manip pour pouvoir utiliser le FabISP sans être root, sans quoi on a une erreur avrdude: error: usbtiny_transmit: error sending control message: Operation not permitted

http://mightyohm.com/blog/2010/03/run-avrdude-without-root-privs-in-ubuntu/