DIY FabISP- اصنع بنفسك مبرمجة AVR

: النرد الألكتروني الجزء الثاني
August 29, 2015
التحكم في stepper motor باستخدام أردوينو بدون مكتبة أكواد
September 1, 2015

كتير مننا بيستخدم ال “AVR” في تطبيقات كتير بيعملها, و النهارده هنشرح ازاي تعمل مبرمجة “AVR” من الصفر
المبرمجة اللي هنعملها اسمها “FabISP” و هي اختصار ل “fab-able in system programmer” بمعني انها مبرمجة “AVR” قابلة للتصنيع في أي فاب لاب, بتمكنك من برمجة أي متحكم في أي بوردة تانية بتعملها باستخدام كابل “USB” و كابل “6pin IDC to 6pin IDC” لتوصيله بين المبرمجة و المتحكم الدقيق “microcontroller” اللي عاوز تبرمجه

fabisp570

عمل البوردة باستخدام ال modela

عشان تقدر تنفذ البوردة هتحتاج تستخدم ال “modela

و عشان تقدر تتعامل مع الموديلا هتحتاج يكون عندك علي اللاب ال “fab modules” لو مش عندك أو مش عارف ايه هي أنصحك تقرا مقال ابدأ مع التصنيع الرقمي

 الخطوة الأولي هي فتح “terminal” باستخدام الأمر alt+ctrl+t و اكتب فيه الأمر التالي :

sudo fab

Screenshot from 2015-08-27 07:42:53

 بعد كده هتختار “.png” في خانة نوع ملف الإدخال “input file” و تختار “Roland MDX-20 mill (.rml)” في خانة العملية “process” و تدوس علي زرار “make_png_rml” زي الصورة ده :

Screenshot from 2015-08-27 07:43:19

Screenshot from 2015-08-27 07:53:55

بعد كده هتحتاج تدخل صورة المسارات “traces” الخاصة بالبوردة بتاعتك و تكون في صيغة “png” فهتدوس علي زرار “load .png” و تختار صورة بوردة المبرمجة :
Screenshot from 2015-08-27 14:29:37

بعد كده هتحتاج تختار نوع البونطه اللي هتستخدمها. في نوعين من البنط هتتعامل معاهم في عمل البورده . بونطه مقاس 1/64 و ده بتستخدمها في حفر المسارات بتاعتك “traces.” و المقاس التاني 1/32 و ده بتستخدمها في تقطيع البورده و تخريمها.
بالتالي هتختار”miill trace (1/64)” من ال قائمة اللي فوق “drop menu” :

Screenshot from 2015-08-27 14:30:14

بعد ما حددت البونطه هتحتاج تحدد النقطة اللي الموديلا هتبدأ الشغل منها. بمعني إن مساحة تشغيل الماكينة هي 15 سم × 20 سم فبتحتاج تحدد النقطة اللي الماكينة هتبدأ الشغل منها فعليا
بتدخل النقطة ده في صورة إحداثيات X و Y و بعد ما تكتب النقطة اللي انت عاوزها هتدوس علي زرار “move to xmin, ymin” :

move

 بعد كده هتخلي البرنامج يحسب المسار اللي هتحتاجه الماكينة عشان تنفذ التصميم بتاعك باستخدام البونطه و الإحداثيات اللي حددتهم في الخطوتين اللي فاتو.
عشان تخلي البرنامج يحسبلك المسار ده هتدوس علي زرار “make .path” . بمجرد ما تضغط عليه هتلاحظ ان السوفت وير رسملك المسارات اللي البونطه هتتحرك فيها فعليا :
Screenshot from 2015-08-27 14:30:41

بعد كده هتحتاج تترجم الأوامر ده لصيغة الماكينة تقدر تفهمها. بحيث انها تحتوي ال “G-code” و هو عبارة عن كود بيترجم التصميم بتاعك في صورة حركة لكل موتور موجود في الماكينة.
ال “G-code” بيكون متضمن جوا ملف بصيغة “.rml” عشان الماكينة تقدر تفهمه, عشان كده هتحتاج دلوقتي تدوس علي زرار “make .rml”؛ و السوفت وير بيبدأ يحسب و يعمل الملف ده:

Screenshot from 2015-08-27 14:31:10 بعد ما عملت ملف ال “rml” هتحتاج تبعته للماكينة المتصلة باللاب توب بتاعك, فهتدوس علي زرار “!send it” .
هتلاقي البرنامج فتحلك نافذة جديدة فيها ملف ال “rml” بكل البيانات اللي هتستخدمها الماكينة زي نقطة البدء و حجم البورده و سرعة الحركة و شكلها بالإضافة للوقت اللي هتستغرقه في عمل البورده بالإضافة لحالة الماكينة “Ready” :

Screenshot from 2015-08-27 14:33:05

دلوقتي هندي الماكينة أمر بدء التنفيذ بإننا ندوس علي زرار “Being Milling”.
الماكينة هتبدأ تحفر التصميم بتاعك و هتوضحلك الوقت الباقي علي ما البوردة تخلص, بالإضافة لمشاهدة مباشرة لكل حاجة الماكينة هتحفرها بتترسملك باللون الأحمر و الأوامر اللي الماكينة بتنفذها مسبوقة بكلمة “Executing” مع زرار “Abort” عشان توقف الماكينة لو في أي مشكلة أو خطوة غلطت فيها :

Screenshot from 2015-08-27 14:33:40

1

و ده صورة البوردة بعد ما حفرنا المسارات “traces” عليها  :

5بعد كده هنحتاج نقطع البوردة فهنرجع تاني لل “fab modules”
فهنغير البونطه اللي في الماكينة و نحط بونطه 1/32 و نختار صورة التقطيع الخاصة بالمبرمجة بتاعتنا من خلال زرار “load .png” :

Screenshot from 2015-08-27 14:34:37

و هنغير مقاس البونطة إلي 1/32 من القائمة, هنختار “cut out board (1/32)”

Screenshot from 2015-08-27 14:35:03

بعد كده هنخلي السوفت وير يحسب المسار اللي هيحتاجه عشان يقطع البوردة فهندوس علي زرار “make .path” :

Screenshot from 2015-08-27 14:35:27

و من ثم هندوس علي زرار “make .rml” :

Screenshot from 2015-08-27 14:35:49

يليها انك تدوس علي زرار “!send it” :

Screenshot from 2015-08-27 14:36:21

و أخيرا هتدوس علي زرار “Being Milling” عشان الماكينة تبدأ التنفيذ :

Screenshot from 2015-08-27 14:36:45

6

و ده صورة البورده بعد ما خلصت 🙂

20150227_0339571

المكونات اللي هتحتاجها

هنحتاج لعمل المبرمجة المكونات التالية :

  • 1 attiny 44 microcontroller => IC1 t44
  • 1 2X3 pin header => J1 ISP
  • 1 USB header => J2 USB
  • 1 resistor  1K ohm => R1
  • 1 resistor 499 ohm =>R2
  • 2 resistor 100 ohm =>R3=R4
  • 2 resistor 0 ohm =>SJ1=SJ2 “jumper”
  • 1 resistor 10K ohm =>R5
  • 2 3.3v zener => D1=D2
  • 1 capacitor 1uF => C1
  • 1 resonator 20MHZ => 20 MHZ

hello.ISP.44.res

لحام المكونات 

بعد ما خلصت عمل ال PCB “printed circuit board” البوردة نفسها يعني, و جهزت المكونات components  هتحتاج تلحم المكونات عليها بالشكل التالي :

FabISPWIthResPartsLayout

خطوات اللحام :

المكونات اللي هتتعامل معاها كلها SMD “حجمها صغير قوي” عشان كده هتحتاج ملقاط “tweezers”  

أول حاجة هتلحمها في البوردة هتكون ال “mini USB header” . و هي أصعب حاجة هتتلحم في البورده كلها. و هي اللي ممكن بسببها البورده تبوظ.
لو انت مبتدئ  في اللحام حط كتلة قصديرتغطي ال 5 pins بتوع ال USB و بعد كده شيل الزيادة بضفيرة فك لحام نحاس “desoldering braid” 
AB2_USB_MINI_SMD

بعد ما تلحم ال mini USB header بنجاح إبدأ لحام المتحكم الدقيق  “attiny 44”.
و خلي بالك من اتجاه ال IC بحيث ان الرجل رقم 1 “اللي عليها دايرة حمرا ده” تكون ناحية ال USB 

tiny44

بعد كده الحم ال resonator و متقلق ﻷنها ملهاش قطبية أو عدلة معينة. وشها زي ضهرها
CR23.7 SERIESيليها لحام ال 3.3V zener diode . قبل ما تلحم لازم تخلي بالك ان الزينر ليه قطبية (ليه رجل موجبه و التانية سالبه) مينفعش تبدلهم.
الرجل السالبة هتلاقي عندها خط أبيض لتوضيحها.
هتحتاج عدسة مكبرة ﻷن الزينر تقريبا قد نقطة القلم,, الصور الجاية هتوضحلك أكتر:

SOD-323-228x228 20150828_161732

20150828_161715

20150828_161517

بعد كده الحم المقاومات و المكثف, و متقلقش ملهمش قطبية, مش هتفرق هتلحمهم من أي جنب 
و أخيرا إلحم ال 2X3 pin header 

تثبيت البرامج اللي هتحتاجها عشان تبرمج ال AVR :

عشان تقدر تبرمج متحكمات AVR هتحتاج يكون عندك :

  1. Avrdude (for programming AVR microcontrollers)
  2. GCC (to compile C code)
اختار نظام تشغيلك من دول و ادخل علي خطوات تثبيته علي طول :

Ubuntu

تحميل و تسطيب avrdude / GCC مع التبعيات : dependencies :

افتح ال terminal باستخدام الأمر alt+ctrl+t و اكتب فيه الأمر التالي :

sudo apt-get install flex byacc bison gcc libusb-dev avrdude gcc-avr avr-libc libc6-dev

Screenshot from 2015-08-27 08:08:26
– اكتب “y”  و دوس enter لما يسألك انه يسطب الحاجة علي جهازك

تحميل و فك ضغط ال firmware :

روح علي ال Desktop باستخدام الأمر cd “change directory “

cd ~/Desktop
wget http://academy.cba.mit.edu/classes/embedded_programming/firmware.zip

Unzip the firmware

unzip firmware.zip

Mac OS Software Install

Get and install avrdude / GCC software and dependencies:
  1. Download and Install Crosspack AVR – Has an installer.
  2. Get Make (via XCode):
    • If you are running Lion or higher – you can download XCode from the Apple App store.
    • If you are running a pre-Lion OSX – Get the install disks that came with your mac and install the developer tools.

Download the firmware (right click on the link below and save it to your desktop):

FabISP Firmware for MacOS 10.8.2 (Mountain Lion, possibly for Lion too?)

FabISP Firmware for earlier versions of MacOS

Open terminal navigate to the desktop:

cd ~/Desktop/

Unzip the firmware.zip directory (the directory will be “firmware.zip” if you downloaded the earlier version):

unzip fabISP_mac.0.8.2_firmware.zip

Move into the newly created firmware directory on your desktop

cd ~/Desktop/firmware

Windows Software / Drivers Install

Get and install avrdude / GCC software and dependencies and drivers:
  1. Warning, WinAVR is abandoned.
    Installing it can destroy your systems path variable!

    You can use the installer, but before you start, take note of your current system path.

  2. Download and Install WinAVR – Has a (broken) installer.
    – Here is a step-by-step set of instructions
  3. After installing check your systems path variable, if it only contains the path to the winavr installation:
    • copy those values
    • restore your old path
    • add the windavr path back to it
    • close any commandprompt window you may have open
  4. Download the drivers for your version of Windows
  5. Download the FabISP Firmware
  6. Plug in another FabISP or USBtiny programmer.
  7. Install the drivers:
    Go to the Start menu -> Control Panel -> Device Manager (or run “mmc devmgmt.msc”)
  • Locate “FabISP” under “Other Devices”
  • Right click on the “FabISP”
  • Select “Update Driver Software..”
  • Select “Browse my computer”
  • Navigate to the drivers folder you downloaded at step 4 and click on the folder.
  • Hit “ok” to install the drivers for the USBtiny / FabISP

Power the FabISP Board

The board needs power:

  • Make sure that the mini USB connector for the FabISP you are trying to program is plugged into your computer.
  • AND that a separate pogramer is plugged in to the 6-pin programming header. (this could be another working FabISP or the ATAVRISP2, a USBtiny, an AVR Dragon, etc.)

Shown with a USBtiny programmer programming Fab ISP with USBtiny

If you are using the ATAVRISP2 programmer, you can skip step 7, you do not need to edit the Makefile, it is already set up to work with the ATAVRISP2 If you are using another programmer you will need to edit the Makefile.

Helpful ATAVRISP2 Programmer Light Indicator Messages

If you are using the ATAVRISP2 programmer only. If you connect the programmer to the 6-pin programming header on your FabISP board and you get:

  • Green Light: means that the header is soldered correctly, the board is getting power.
  • Yellow Light: means that the board is getting power, but most likely the 6-pin programming header is not soldered correctly (re-flow your solder joints / check for cold joints, check for shorts).
  • Red Light: means that the board is not getting power – check for shorts.

Edit the Makefile

The Makefile is in the firmware directory that you downloaded. The Makefile is set up to work with the AVRISP2 by default. If you are using another programmer, you will need to edit the Makefile.

Ubuntu:

nano Makefile

Mac:

Open the Makefile with TextEdit.

Windows:

Open the Makefile with Notepad++.

Make Changes – All OS:

A window will open containing the Makefile. Go to the line that says:
#AVRDUDE = avrdude -c usbtiny -p $(DEVICE) # edit this line for your programmer
AVRDUDE = avrdude -c avrisp2 -P usb -p $(DEVICE) # edit this line for your programmer

– If using the USBtiny programmer or another FabISP
– Remove the “#” in front of the line with “usbtiny” in it
– Add a “#” to beginning the line with the “avrisp2” in it to comment it out.
– save the Makefile

Program the FabISP (All OS):

Navigate to the directory where you saved the FabISP firmware. If you followed the instructions above, this will be the desktop.

Open your terminal / command line interface and move to the firmware directory.

Ubuntu / Windows type:

cd Desktop/firmware

For Mac users who downloaded the modified firmware:

cd Desktop/fabISP_mac.0.8.2_firmware
Next you need to compile the firmware.

Type:

make clean

If you are successful – you will see this response from the system:

:~/Desktop/firmware$ make clean
rm -f main.hex main.lst main.obj main.cof main.list main.map main.eep.hex 
main.elf *.o usbdrv/*.o main.s usbdrv/oddebug.s usbdrv/usbdrv.s

Type:

make hex

If you are successful – you will see this response from the system:

:~/Desktop/firmware$ make hex
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
Next, you need to set the fuses so your board will use the external clock (crystal)

Type:

make fuse

If you are successful – you will see the following response from the system:

:~/Desktop/firmware$ sudo make fuse
avrdude -c usbtiny -p attiny44  -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

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

Writing | ################################################## | 100% 0.00s

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.00s

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

Writing | ################################################## | 100% 0.01s

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.00s

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

avrdude: safemode: Fuses OK

avrdude done.  Thank you.
Next you want to program the board to be an ISP.

Then type:

make program

If you are successful – you will see the following response from the system.

:~/Desktop/firmware$ sudo make program
[sudo] password for *******: 
avrdude -c usbtiny -p attiny44  -U flash:w:main.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

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% 5.68s



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% 3.36s



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

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

avrdude -c usbtiny -p attiny44  -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

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

Writing | ################################################## | 100% 0.00s

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.00s

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

Writing | ################################################## | 100% 0.00s

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.00s

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

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Wooo! Success!

Errors

  • If you get errors – read the errors and follow instructions.
  • If avrdude cannot connect to your board’s microcontroller – you should follow the “Troubleshooting Short Circuits” instructions and ask your instructor for help.

To Verify That Your ISP is working correctly:

Ubuntu 11.10:

Type:

lsusb

If your FabISP has been successfully programmed, you should see a list of the USB devices plugged into your computer. The FabISP will be listed in a line like the following:

Bus 002 Device 004: ID 1781:0c9f Multiple Vendors USBtiny

Note: Ubuntu 10.10 lists the device as something like:

Bus 002 Device 004: ID 1781:0c9f Multiple Vendors

Mac:

Go to the System Profiler > Hardware > USB > Hub:

Step – By – Step:

  1. Click the “apple” menu in your main toolbar
  2. Select “about this mac”
  3. Select “more info”
  4. Under the “Contents” menu in the left hand navigation
    – Click “Hardware” to expand the hardware menu (if not already expanded)
    – Click “USB”
    – Under the “USB Device Tree”
    – Click “Hub” to expand the hub menu (if not already expanded)
    – “FabISP” should be listed in the hub menu
  5. Your FabISP device has been successfully programmed and is recognized by your computer.

Windows:

Go to the Start Menu > Hardware and Sound. The FabISP should be listed.

بعد ما برمجت البوردة:

شيل المقاومة ال 0 أوم و الحم الكوبري زي الصورة. دلوقتي تقدر تستخدم المبرمجة في برمجة بورد تانية 🙂

Fab ISP without jumpers