اطلاعیه

Collapse
No announcement yet.

یه مشکل در Program کردن AVR در Ubuntu

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    یه مشکل در Program کردن AVR در Ubuntu

    سلام به همه!!! خدا رو شکر که منم بالاخره عقلم اومد سرجاش سفر خودم رو به لینوکس آغاز کردم! :wow: :applause:

    الان نسبت به روز اولی که اوبونتو Lucid 10.04 رو نصب کردم کلی تغییر کردم و خیلی چیزا یاد گرفتم و خیلی مطالب مفید هم یاد گرفتم که اگر به همون ویندوز پر از process بیهوده! اکتفا می کردم هیچ وقت این شیرینی ها! نصیبم نمی شد... :nerd: :agree:

    بعد از آماده سازی اساسی پارتیشن ها و درایور ها و.... هر چیزی که نیاز بود کم کم دارم میرم تو برنامه نویسی C و برای AVR و تقریبا میشه گفت به طور جدی برنامه نویسی رو الان دارم شروع می کنم.

    خوب طبق چیزایی که فهمیدم کامپایلر avr-gcc رو نصب کردم (خود gcc هم که به صورت پیش فرض نصبه) ٬ avrlibc رو به عنوان لایبرری های استاندار کامپایلر avr-gcc نصب کردم٬ GUI های Code::Blocks و Kontroller lab رو نصب کردم و در آخر هم پروگرامرهای Avr-Dude ٬ UISP ٬ و USBProg (که GUI هست) رو نصب کردم.

    به عنوان تست٬ از یکی از سایت ها یه برنامه ساده که پین ۱ از پورت B رو چشمک میزنه٬ تو gedit نوشتم ٬ با عنوان main.c و در پوشه test در دسکتاپ ذخیره کردم٬ فایل Makefile هم که از اون سایت گرفته بودم (و تو راهنماش گفته بود در پوشه حاوی فایل main.c خودتون قرار بدید) رو در پوشه test قرار دادم.

    توسط دستور cd ~/Desktop/test به دایرکتوری مربوطه رفتم و توسط دستور make all برنامه نوشته شده به زبون c رو کامپایل کردم که ایجاد شدن فایل هایlinker و... همچنین فایل HEX در همون پوشه نتیجه این دستور بود.

    خوب تو راهنما نوشته بود که (حالا توسط دستور make program میکروی شما پروگرام می شود) ولی این اتفاق برای من نیفتاد.

    این خروجی terminal :

    کد:
    mohammad@mohammad-laptop:~$ cd ~/Desktop/test
    mohammad@mohammad-laptop:~/Desktop/test$ make
    
    -------- begin --------
    avr-gcc (GCC) 4.3.4
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    Size before:
    avr-size: invalid argument to --format: avr
    Usage: avr-size [option(s)] [file(s)]
     Displays the sizes of sections inside binary files
     If no input file(s) are specified, a.out is assumed
     The options are:
     -A|-B   --format={sysv|berkeley} Select output style (default is berkeley)
     -o|-d|-x --radix={8|10|16}     Display numbers in octal, decimal or hex
     -t    --totals         Display the total sizes (Berkeley only)
          --common         Display total size for *COM* syms
          --target=<bfdname>    Set the binary file format
          @<file>          Read options from <file>
     -h    --help          Display this information
     -v    --version         Display the program's version
    
    avr-size: supported targets: elf32-avr elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex
    
    
    Size after:
    avr-size: invalid argument to --format: avr
    Usage: avr-size [option(s)] [file(s)]
     Displays the sizes of sections inside binary files
     If no input file(s) are specified, a.out is assumed
     The options are:
     -A|-B   --format={sysv|berkeley} Select output style (default is berkeley)
     -o|-d|-x --radix={8|10|16}     Display numbers in octal, decimal or hex
     -t    --totals         Display the total sizes (Berkeley only)
          --common         Display total size for *COM* syms
          --target=<bfdname>    Set the binary file format
          @<file>          Read options from <file>
     -h    --help          Display this information
     -v    --version         Display the program's version
    
    avr-size: supported targets: elf32-avr elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex
    
    -------- end --------
    
    mohammad@mohammad-laptop:~/Desktop/test$ make program
    avrdude -p atmega16 -P lpt1   -c stk200  -U flash:w:main.hex
    avrdude: can't open device "lpt1": No such file or directory
    avrdude: failed to open parallel port "lpt1"
    
    make: *** [program] Error 1
    
    mohammad@mohammad-laptop:~/Desktop/test$

    توضیحات : من از یه پروگرامر USBasp سالم که تو ویندوز باهاش پروگرام کردم و ۱۰۰ ٪ سالم هست استفاده می کنم.

    تو خطوط آخر دستور program نوشته که نمیتونه پورت رو باز کنه٬ خوب این واضحه چون avrdude روی پورت موازی (lpt1) و برا پروگرامر stk200 تنظیم شده. بنابر این طبق راهنمایی هایی که برای avrdude وجود داره و توسط دستور ?- avrdude بهشون رسیدم سعی کردم مطابق زیر٬ avrdude رو برای USB و پروگرامر USBasp تنظیم کنم:

    کد:
    avrdude -p atmega16  -P USB   -c USBasp

    اما متاسفانه این اتفاق نمی افته و هر دفعه میگه اون یکی رو تنظیم نکردی (یعنی مثلا اگر نوع پروگرامر رو اولا مشخص کنم٬ میگه نوع IC رو انتخاب نکردی. اگر نوع IC رو اول انتخاب کنم٬ میگه نوع پروگرامر رو مشخص نکردی. نوع پورت رو اول مشخص کنم میگه نوع IC رو مشخص نکردی و ...... فیها خالدون!

    و اگر هم سعی کنم ۳ تا تنظیم رو با هم طبق دستور بالا ( با تخلص از خروجی terminal هنگام پروگرام!) انجام بدم٬ ترمینال یه خطا میده و میگه : نمیتونم کارخانه سازنده رو جویا بشم. یعنی دقیقا این:

    کد:
    mohammad@mohammad-laptop:~$ avrdude -p atmega16  -P USB   -c USBasp
    avrdude: Warning: cannot query manufacturer for device: error sending control message: Operation not permitted
    avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc
    mohammad@mohammad-laptop:~$ ^C
    mohammad@mohammad-laptop:~$

    البته این توضیح رو بدم که سیستم پروگرامر منو شناخته و خروجی دستور lsusb گواه بر این موضوع:

    کد:
    mohammad@mohammad-laptop:~$ lsusb
    Bus 008 Device 002: ID 147e:1000 Upek 
    Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 006 Device 010: ID 16c0:05dc VOTI USBasp AVR Programmer
    Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 002 Device 002: ID 0c45:63e0 Microdia Sonix Integrated Webcam
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    mohammad@mohammad-laptop:~$

    که همون طور که در خط چهارم مشخصه سیستم این پروگرامر رو شناخته.
    نرم افزارهای GUI هم دقیقا همین Error رو میدن.
    -----------------------------------------------------------------------------------------------------------------------------------
    خوب٬ حالا به نظر شما مشکل از کجاست؟ و در نهایت چجوری می تونم پروگرام رو انجام بدم؟

    ( البته من کلا تو برنامه نویسی به زبون C در داخل لینوکس یه سری سوالاتی دارم من جمله اینکه چرا دستور delay تو لینوکس فرق میکنه و یه Underline بهش اضافه میشهُ آیا امثال این بازم هست؟ اسم فایل های Header در Avr-Gcc مشابه با فایل های Header در ویندوز چیه؟ او اینکه کل فایل های هدر برای AVR در این ادرس هستند؟ : usr/lib/avr/include و ....)) که اگر یه توضیح کلی و جامع هم در این موارد بدین ممنون میشم

    > من پوشه test رو که حاوی فایل main.c و Makefile و فایل هایی که بعد از کامپایل ایجاد شدند هستش رو به صورت zip براتون اینجا پ کردم:

    http://engineer2012.persiangig.com/test.zip

    ممنون از کمکتون

    #2
    پاسخ : یه مشکل در Program کردن AVR در Ubuntu

    اگه اشتباه نکنم باید

    AVRDUDE_PROGRAMMER = stk200
    AVRDUDE_PORT = lpt1

    توی makefile رو به
    [ltr]
    AVRDUDE_PROGRAMMER = usbasp
    AVRDUDE_PORT = usb
    [ltr]
    تغییربدی
    {خلاف قوانین - امضا ویرایش شد}

    دیدگاه


      #3
      پاسخ : یه مشکل در Program کردن AVR در Ubuntu

      با سلام
      اگر پروگرام کردن فقط مشکل داره یک بار دستور avrdude رو با sudo هم تست کن ببین مشکل حل میآ‌شود. اگر مشکل این بود میآ‌توانی با اضافه کردن یک rule به udev مشکل را حل کنی. لینک زیر توضیح داده:

      http://forums.obdev.at/viewtopic.php?p=4436
      من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

      دیدگاه


        #4
        پاسخ : یه مشکل در Program کردن AVR در Ubuntu

        برای حل مشکل پروگرام کردن ، ۲ توصیهٔ دوستان را با هم در makefile تلفیق کنید تا مشکل برطرف شود.

        متغیرهای AVRDUDE_PROGRAMMER و AVRDUDE_PORT را بصورت زیر تغییر دهید :

        AVRDUDE_PROGRAMMER = usbasp

        # com1 = serial port. Use lpt1 to connect to parallel port.
        AVRDUDE_PORT = usb # programmer connected to serial device


        و در ابتدای دستور avrdude یک دستور sudo قرار بدهید
        خط شمارهٔ ۴۳۱ در Makefile


        program: $(TARGET).hex $(TARGET).eep
        sudo $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)

        چگونه هوشمندانه بپرسیم

        دیدگاه


          #5
          پاسخ : یه مشکل در Program کردن AVR در Ubuntu

          نوشته اصلی توسط محمد منفرد

          ( البته من کلا تو برنامه نویسی به زبون C در داخل لینوکس یه سری سوالاتی دارم من جمله اینکه چرا دستور delay تو لینوکس فرق میکنه و یه Underline بهش اضافه میشهُ آیا امثال این بازم هست؟ اسم فایل های Header در Avr-Gcc مشابه با فایل های Header در ویندوز چیه؟ او اینکه کل فایل های هدر برای AVR در این ادرس هستند؟ : usr/lib/avr/include و ....)) که اگر یه توضیح کلی و جامع هم در این موارد بدین ممنون میشم
          برای آشنایی با کتابخانهٔ avrlibc منوال این کتابخونه بهترین راهنما هست :
          http://www.nongnu.org/avr-libc/user-manual/modules.html
          چگونه هوشمندانه بپرسیم

          دیدگاه


            #6
            پاسخ : یه مشکل در Program کردن AVR در Ubuntu

            از راهنمایی همه دوستان ممنونم! بله پروگرام شد اونم به چه راحتی! :applause:

            اما وقتی می خوام میکرو رو erase کنم این اتفاق نمی افته:

            کد:
            mohammad@mohammad-laptop:~/Desktop/test$ sudo avrdude -p atmega16 -P usb -c usbasp -e
            
            avrdude: warning: cannot set sck period. please check for usbasp firmware update.
            avrdude: error: programm enable: target doesn't answer. 1 
            avrdude: initialization failed, rc=-1
                 Double check connections and try again, or use -F to override
                 this check.
            
            avrdude done. Thank you.

            علت این مورد چیه؟

            (ببخشید من از بچگیم همینجوری زیاد سوال می پرسیدم! :rolleyes: )

            دیدگاه


              #7
              پاسخ : یه مشکل در Program کردن AVR در Ubuntu

              نوشته اصلی توسط محمد منفرد
              از راهنمایی همه دوستان ممنونم! بله پروگرام شد اونم به چه راحتی! :applause:

              اما وقتی می خوام میکرو رو erase کنم این اتفاق نمی افته:

              کد:
              mohammad@mohammad-laptop:~/Desktop/test$ sudo avrdude -p atmega16 -P usb -c usbasp -e
              
              avrdude: warning: cannot set sck period. please check for usbasp firmware update.
              avrdude: error: programm enable: target doesn't answer. 1 
              avrdude: initialization failed, rc=-1
                   Double check connections and try again, or use -F to override
                   this check.
              
              avrdude done. Thank you.

              علت این مورد چیه؟

              (ببخشید من از بچگیم همینجوری زیاد سوال می پرسیدم! :rolleyes: )
              برای من همچین مشکلی بوجود نمیاد :



              hamid@hamid-laptop:~$ sudo avrdude -p atmega16 -P usb -c usbasp -e
              [sudo] password for hamid:


              avrdude: AVR device initialized and ready to accept instructions

              Reading | ################################################## | 100% 0.02s

              avrdude: Device signature = 0x1e9403
              avrdude: erasing chip

              avrdude: safemode: Fuses OK

              avrdude done. Thank you.


              ممکنه مشکل از سخت افزارتون باشه.
              در فروم avrfreaks دیدم مشکل مشابهی بعلت اتصال کوتاه شدن پایهآ‌های SCK و RESET بوجود آمده بود.
              http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=6 28237

              برای دیدن جزئیات بیشتر avrdude را با سوییچ vvvv- اجرا کنید.
              چگونه هوشمندانه بپرسیم

              دیدگاه


                #8
                پاسخ : یه مشکل در Program کردن AVR در Ubuntu

                نوشته اصلی توسط حمید رستمی
                برای من همچین مشکلی بوجود نمیاد :



                hamid@hamid-laptop:~$ sudo avrdude -p atmega16 -P usb -c usbasp -e
                [sudo] password for hamid:


                avrdude: AVR device initialized and ready to accept instructions

                Reading | ################################################## | 100% 0.02s

                avrdude: Device signature = 0x1e9403
                avrdude: erasing chip

                avrdude: safemode: Fuses OK

                avrdude done. Thank you.


                ممکنه مشکل از سخت افزارتون باشه.
                در فروم avrfreaks دیدم مشکل مشابهی بعلت اتصال کوتاه شدن پایهآ‌های SCK و RESET بوجود آمده بود.
                http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=6 28237

                برای دیدن جزئیات بیشتر avrdude را با سوییچ vvvv- اجرا کنید.
                بله ممنونم. مشکل از میکرو بود٬ با یه میکرو دیگه امتحان کردم درست شد٬ البته اون میکرو رو تو ویندوز erase کردم و اونم الان درست شد! :biggrin:

                البته erase میکنه ولی هنوز این خطا رو اول میده: cannot set sck period

                کد:
                mohammad@mohammad-laptop:~$ sudo avrdude -p atmega16 -P usb -c usbasp -e
                [sudo] password for mohammad: 
                
                avrdude: warning: cannot set sck period. please check for usbasp firmware update.
                avrdude: AVR device initialized and ready to accept instructions
                
                Reading | ################################################## | 100% 0.02s
                
                avrdude: Device signature = 0x1e9403
                avrdude: erasing chip
                avrdude: warning: cannot set sck period. please check for usbasp firmware update.
                
                avrdude: safemode: Fuses OK
                
                avrdude done. Thank you.
                
                mohammad@mohammad-laptop:~$

                =======================

                یه سوال دیگه داشتم٬ غیر از نرم افزارهای IDE که خودشون فایل Makefile و Hex رو با استفاده از avrdude می سازن٬ من اگر بخوام همیشه به همین روش امتحانی که در بالا انجام دادم یعنی نوشتن برنامه در gedit و ذخیره با پسوند c. و کامپایل کردن٬ از چه فایل Makefile ای استفاده کنم؟ فرض کنید یه برنامه جدید الان می خوام بنویسم تو gedit ٬بعد از نوشتن و ذخیره کردن٬ چه Makefile ای رو تو پوشه حاوی اون فایل c. قرار بدم تا بتونم از طریق دستور make all اونو کامپایل کنم؟ و بعد با make program پروگرام کنم؟

                اصلا آیا همیشه برای کامپایل نیاز به Makefile هست؟ و یا همون فایل c. کفایت می کنه؟

                دیدگاه


                  #9
                  پاسخ : یه مشکل در Program کردن AVR در Ubuntu

                  نوشته اصلی توسط محمد منفرد
                  بله ممنونم. مشکل از میکرو بود٬ با یه میکرو دیگه امتحان کردم درست شد٬ البته اون میکرو رو تو ویندوز erase کردم و اونم الان درست شد! :biggrin:

                  البته erase میکنه ولی هنوز این خطا رو اول میده: cannot set sck period

                  کد:
                  mohammad@mohammad-laptop:~$ sudo avrdude -p atmega16 -P usb -c usbasp -e
                  [sudo] password for mohammad: 
                  
                  avrdude: warning: cannot set sck period. please check for usbasp firmware update.
                  avrdude: AVR device initialized and ready to accept instructions
                  
                  Reading | ################################################## | 100% 0.02s
                  
                  avrdude: Device signature = 0x1e9403
                  avrdude: erasing chip
                  avrdude: warning: cannot set sck period. please check for usbasp firmware update.
                  
                  avrdude: safemode: Fuses OK
                  
                  avrdude done. Thank you.
                  
                  mohammad@mohammad-laptop:~$
                  خب این شاید واقعا بخاطر نسخهٔ Firmware پروگرامتون باشه. نسخهٔ 2007-10-23 را آزمایش کنید.

                  نوشته اصلی توسط محمد منفرد

                  یه سوال دیگه داشتم٬ غیر از نرم افزارهای IDE که خودشون فایل Makefile و Hex رو با استفاده از avrdude می سازن٬ من اگر بخوام همیشه به همین روش امتحانی که در بالا انجام دادم یعنی نوشتن برنامه در gedit و ذخیره با پسوند c. و کامپایل کردن٬ از چه فایل Makefile ای استفاده کنم؟ فرض کنید یه برنامه جدید الان می خوام بنویسم تو gedit ٬بعد از نوشتن و ذخیره کردن٬ چه Makefile ای رو تو پوشه حاوی اون فایل c. قرار بدم تا بتونم از طریق دستور make all اونو کامپایل کنم؟ و بعد با make program پروگرام کنم؟

                  اصلا آیا همیشه برای کامپایل نیاز به Makefile هست؟ و یا همون فایل c. کفایت می کنه؟
                  Makefile عملیات کامپایل و غیره رو اتوماتیک انجام میده و شمارو از وارد کردن مستقیم دستورات در ترمینال بیآ‌نیاز میآ‌کنه.
                  در Makefile های خوش نویسی مثل همین که شما دارید ، معمولا متغیری قرار داره که اسم فایلهای سورس رو به اون اختصاص میدن.
                  کاری که باید انجام بدید اینه که این Makefile رو در مسیر اصلی پروژتون قرار بدید (همونجایی که فایلهای سورس سی قرار دارن ) و بعد نام فایلهای سورس رو جلوی متغیر SRC بنویسید. (خط شماره ۶۸ )
                  مثلا اگر پروژهٔ شما از فایلهای main.c, a2d.c, uart.c تشکیل شده، اینطوری اونهارو در Makefile معرفی کنید :

                  # List C source files here. (C dependencies are automatically generated.)
                  SRC = a2d.c uart.c $(TARGET).c


                  من هم برای خودم یک Makefile ساده نوشتم و همیشه از اون استفاده میآ‌کنم.
                  از کارای جالبی که این Makefile من انجام میده اینه که خروجی رنگی در ترمینال تولید میآ‌کنه
                  اینطوری با یک نگاه سریع میشه به کارهایی که انجام داده پی برد.
                  یک اسکرینشات از خروجیش (برای عکس بزرگتر کلیک کنید! ) :


                  متغیرهایی که در Makefileمن وجود داره به قرار زیر هست :

                  OBJS = main.o
                  CC = avr-gcc

                  MCU = atmega32
                  LFUSE = 0xe2
                  HFUSE = 0xd1

                  INCDIR = -I. -I./avrlib


                  تمام سورسهای برنامه باید به متغیر OBJS اختصاص داده به. البته با تغییر فرمت از c به o
                  متغیر MCU برای تعیین نوع آیآ‌سی
                  متغیرهای LFUSE و HFUSE برای تنظیم فیوزبیتها. برای سوزاندن فیوزبیتها باید از فرمان make fuse استفاده شود و برای خواندن آنها از دستور make rfuse

                  برای پروگرام کردن هم از دستور make flash باید استفاده کرد.

                  make all هم که پروژه را کامپایل و make clean آنرا پاک میآ‌کند.

                  Makefile خودم رو ضمیمه کردم (بعد از دانلود فرمت txt آنرا بردارید، سیستم اجازه پلود بدون فرمت نمیداد )
                  فایل های پیوست شده
                  چگونه هوشمندانه بپرسیم

                  دیدگاه


                    #10
                    پاسخ : یه مشکل در Program کردن AVR در Ubuntu

                    برای تکمیل شدن این تاپیک یه لینک عالی که همه مراحل پروگرام کردن AVR تو لینوکس رو شرح داده و توسط کاربر عزیز iman-d تو یکی از تاپیک ها دیدم رو قرار می دم:

                    http://tuxgraphics.org/electronics/200411/article352.shtml

                    و همچنین صفحه اصلی بخش الکترونیک همین سایت یعنی http://tuxgraphics.org/electronics/ رو از دست ندید، چیزای خوبی داره.

                    چه لذتی داره لینوکس.... :applause: :wow:

                    دیدگاه

                    لطفا صبر کنید...
                    X