<<<
FabISP

abstract

This week assignement is to make a fabisp choosen from several designs.
Many variations exist. I have chosen Andy's FabISPKey which has the distinction of being in USB format.

Bill of materials

Initial tests vinyl cutting circuit

I chose to try experience in realization of the circuit with vinyl cutter and adhesive copper.
At this occasion, I set the roland CAM1 reactive to software controled force, with the tuning indicated in fablab.is.

initial tests are not too conclusive: too detailed trace is difficult to cut cleanly.
So I try to modify the circuit to make it more suitable for this type of manufacturing.

compared to the version of Andy, this version contains less tracks, and especially small waterfalls. Alas, I have not had more success with this version ... so I decided to mill the circuit with the modela.

milling with the modela and fabmodules

Fabisp.Fabmodules2pcb.jpg

I our lab, we have a Modela MDX20.
I was apprehensive because for several months we struggled to operate this machine with fabmodules, we never succeeded, mainly because of the USB connection cable owner-series, which required a flow control.

Our member Guillaume had worked for days to understand how to operate the machine with the owner on Windows software much less efficient than fabmodules (several hours of computation each time) and repulsive (under Windows): I pay tribute to his commitment and perseverance which allowed him to develop a working method that works.

BUT Finally, for fabacademy 2014 Neil gershenfield rewrote the driver of the modela in fabmodules, and now it works! thank you Neil!

So, after all these incredible struggles, use fabmodules seems to be very simple and easy to learn.

As milling tools, I used a "javelo tip " 0.25mm at 0.4mm deep.

I take the preset "mill traces 1/64" I adjusted to match this format.
Fabisp.Oiled.jpg milling.jpg afterMilling.jpg
I oiled a bit the board before milling
afterMilling.jpg
and within 20 minutes I had my circuit (cut with a cutting 1/32 ").

somme sourcing problems

Actually, our fablab is still under construction, we have not yet fully stocked the all fab inventory.

for electronics components, it is not as obvious in France to find references in human quantities (<5000) and a reasonable time.
Although I have found almost everything, I'm still missing capacitors that are offered at Farnell me within a period of several weeks.
I am stuck at this point, so to be continued ...

Soldering


Now I have the components. I can solder the ISP. Instead 8pF capacitors indicated on the schema, I use 10pF from the inventory.
solder


Programming

For programming the board, I used AVRISP.

AVRISP configuration

To make it usable under Linux, it's necessary to made a small configuration :

1- create a udev rule

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

containing :

  1. # Atmel Corp. AVRISP mkII
  2. SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", MODE="660", GROUP="uucp",SYMLINK+="avrdev"

2- becoming member of the group "uucp"

$ sudo adduser <nom d'utilisateur> uucp

and logout to made the change take effect.

Programming the board

when we plug the fabisp (powered and both jumpers soldered), it is a good sign if the AVRISP's led lights green (if not, there is a problem)

programming

After inflating the firmware.zip, edit the makefile to make programmation via avrisp :

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

then compile :


make hex


result :


  1. avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o
  2. 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
  3. avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c usbdrv/oddebug.c -o usbdrv/oddebug.o
  4. avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c main.c -o main.o
  5. 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
  6. rm -f main.hex main.eep.hex
  7. avr-objcopy -j .text -j .data -O ihex main.elf main.hex
  8. avr-size main.hex
  9. text data bss dec hex filename
  10. 0 2020 0 2020 7e4 main.hex
  11.  


and flash the fuses


make fuse


result :


  1. avrdude -c avrisp2 -P usb -p attiny44 -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m
  2.  
  3. avrdude: AVR device initialized and ready to accept instructions
  4.  
  5. Reading | ################################################## | 100% 0.11s
  6.  
  7. avrdude: Device signature = 0x1e9207
  8. avrdude: reading input file "0xDF"
  9. avrdude: writing hfuse (1 bytes):
  10.  
  11. Writing | ################################################## | 100% 0.04s
  12.  
  13. avrdude: 1 bytes of hfuse written
  14. avrdude: verifying hfuse memory against 0xDF:
  15. avrdude: load data hfuse data from input file 0xDF:
  16. avrdude: input file 0xDF contains 1 bytes
  17. avrdude: reading on-chip hfuse data:
  18.  
  19. Reading | ################################################## | 100% 0.04s
  20.  
  21. avrdude: verifying ...
  22. avrdude: 1 bytes of hfuse verified
  23. avrdude: reading input file "0xFF"
  24. avrdude: writing lfuse (1 bytes):
  25.  
  26. Writing | ################################################## | 100% 0.11s
  27.  
  28. avrdude: 1 bytes of lfuse written
  29. avrdude: verifying lfuse memory against 0xFF:
  30. avrdude: load data lfuse data from input file 0xFF:
  31. avrdude: input file 0xFF contains 1 bytes
  32. avrdude: reading on-chip lfuse data:
  33.  
  34. Reading | ################################################## | 100% 0.04s
  35.  
  36. avrdude: verifying ...
  37. avrdude: 1 bytes of lfuse verified
  38.  
  39. avrdude: safemode: Fuses OK
  40.  
  41. avrdude done. Thank you.
  42.  


finaly upload program

make program

result :


  1. avrdude -c avrisp2 -P usb -p attiny44 -U flash:w:main.hex:i
  2.  
  3. avrdude: AVR device initialized and ready to accept instructions
  4.  
  5. Reading | ################################################## | 100% 0.11s
  6.  
  7. avrdude: Device signature = 0x1e9207
  8. avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
  9. To disable this feature, specify the -D option.
  10. avrdude: erasing chip
  11. avrdude: reading input file "main.hex"
  12. avrdude: writing flash (2020 bytes):
  13.  
  14. Writing | ################################################## | 100% 73.70s
  15.  
  16. avrdude: 2020 bytes of flash written
  17. avrdude: verifying flash memory against main.hex:
  18. avrdude: load data flash data from input file main.hex:
  19. avrdude: input file main.hex contains 2020 bytes
  20. avrdude: reading on-chip flash data:
  21.  
  22. Reading | ################################################## | 100% 71.44s
  23.  
  24. avrdude: verifying ...
  25. avrdude: 2020 bytes of flash verified
  26.  
  27. avrdude: safemode: Fuses OK
  28.  
  29. avrdude done. Thank you.
  30.  
  31. avrdude -c avrisp2 -P usb -p attiny44 -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m
  32.  
  33. avrdude: AVR device initialized and ready to accept instructions
  34.  
  35. Reading | ################################################## | 100% 0.11s
  36.  
  37. avrdude: Device signature = 0x1e9207
  38. avrdude: reading input file "0xDF"
  39. avrdude: writing hfuse (1 bytes):
  40.  
  41. Writing | ################################################## | 100% 0.04s
  42.  
  43. avrdude: 1 bytes of hfuse written
  44. avrdude: verifying hfuse memory against 0xDF:
  45. avrdude: load data hfuse data from input file 0xDF:
  46. avrdude: input file 0xDF contains 1 bytes
  47. avrdude: reading on-chip hfuse data:
  48.  
  49. Reading | ################################################## | 100% 0.04s
  50.  
  51. avrdude: verifying ...
  52. avrdude: 1 bytes of hfuse verified
  53. avrdude: reading input file "0xFF"
  54. avrdude: writing lfuse (1 bytes):
  55.  
  56. Writing | ################################################## | 100% 0.04s
  57.  
  58. avrdude: 1 bytes of lfuse written
  59. avrdude: verifying lfuse memory against 0xFF:
  60. avrdude: load data lfuse data from input file 0xFF:
  61. avrdude: input file 0xFF contains 1 bytes
  62. avrdude: reading on-chip lfuse data:
  63.  
  64. Reading | ################################################## | 100% 0.04s
  65.  
  66. avrdude: verifying ...
  67. avrdude: 1 bytes of lfuse verified
  68.  
  69. avrdude: safemode: Fuses OK
  70.  
  71. avrdude done. Thank you.
  72.  


To verify that the programmer is working well (after desoldering the jumpers)
Plug it and type :

lsusb

The programmer will appears in the list as :

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


Done ! I have a fabisp programmer !