FabISP : Différence entre versions
(→avec l'AVRISP V2) |
(→programmation) |
||
(4 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 102 : | Ligne 102 : | ||
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== | |
− | |||
− | |||
− | |||
− | |||
− | + | 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=== | ===avec l'AVRISP V2=== | ||
Ligne 145 : | Ligne 134 : | ||
+ | [[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
Sommaire
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
- 1 connecteur de nappe : http://www.mouser.fr/ProductDetail/FCI/71600-006LF/?qs=yJYkLTYh5760qKJxwPD6hA==&_cdc=1
- 1 connecteur USB (en fonction du design choisi)
ressources
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.
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.
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
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.
J'ai mis un peu de huile de vaseline sur la plaque,
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 :
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
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/