اطلاعیه

Collapse
No announcement yet.

آموزش winavr و avrlib

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

    پاسخ : آموزش winavr و avrlib

    من هر کاری میکنم نمیتونم اینو کامپایل کنم یعنی کامپایل میشه ولی ارور داره دستور sbi و چنتا دیگه رو هم فکر میکنم برای WinAVR هست رو میگه تعریف نشده

    WinAVR بلدنیستم و این یه مثال اماده هست خودم ننوشتم

    ممنون



    http://www.4shared.com/rar/55qQ7LJf/VGA_users_handle_example1.html

    دیدگاه


      پاسخ : آموزش winavr و avrlib

      باسلام
      من یه تابع داخل روتین isr صدا میزنم ام برنامه دیگه از وقفه بر نمیگرده و تابع هم درست اجرا نمیشه .
      ضمنا من داخل این تابه فراخونی های زیادی دارم .
      به نظرم مال کم بود پشته باشه. اما winavr تازه شروع کردم و نمی دونم کجا و چهجوری میشه پشته را تغییر داد .
      لطفا راه نمایی کنید خیلی ضروریه.
      ممنون :cry2:
      یاعلی
      محمد.م

      دیدگاه


        پاسخ : آموزش winavr و avrlib

        نوشته اصلی توسط vahidsport
        من هر کاری میکنم نمیتونم اینو کامپایل کنم یعنی کامپایل میشه ولی ارور داره دستور sbi و چنتا دیگه رو هم فکر میکنم برای WinAVR هست رو میگه تعریف نشده

        WinAVR بلدنیستم و این یه مثال اماده هست خودم ننوشتم

        ممنون



        http://www.4shared.com/rar/55qQ7LJf/VGA_users_handle_example1.html
        سلام
        من فایل شمارو یه نگاه انداختم
        گویا سورسی که دانلود کردید برنامه اصلی نیست و خیلی از تابع و متغیر ها ازش حذف شده
        من مشکل sbi و cbi شو (با توجه به اون چیزی که از برنامه فهمیدم)حل کردم ارورای تازه تری پیدا شد. که البته بعضیاش قابل حله و بعضیش هم خود برنامه نویس می تونه حل کنه(البته تا اون جایی که من می دونم)درکل برنامه قابل اعتمادی نیست.
        فایل یه تغییری دادم ولی باز ارورای جدیدی داره
        http://s1.picofile.com/file/75303449...ision.rar.html

        دیدگاه


          پاسخ : آموزش winavr و avrlib

          سلام
          بابا یکی هم جواب مارا بده.ممنون
          محمد.م

          دیدگاه


            پاسخ : آموزش winavr و avrlib

            نوشته اصلی توسط mohamad0
            باسلام
            من یه تابع داخل روتین isr صدا میزنم ام برنامه دیگه از وقفه بر نمیگرده و تابع هم درست اجرا نمیشه .
            ضمنا من داخل این تابه فراخونی های زیادی دارم .
            به نظرم مال کم بود پشته باشه. اما winavr تازه شروع کردم و نمی دونم کجا و چهجوری میشه پشته را تغییر داد .
            لطفا راه نمایی کنید خیلی ضروریه.
            ممنون :cry2:
            یاعلی
            خود کامپایلر پشته رو روی بیشترین سطح تنظیم میکنه .یعنی استک پوینتر رو تو بالا ترین خونه از حافظه sram قرار میده ، این خروجی کامپایلر برای mega32 هست :


            کد:
            000001aa <__ctors_end>:
               1aa:	11 24    	eor	r1, r1
               1ac:	1f be    	out	0x3f, r1	; 63
               1ae:	cf e5    	ldi	r28, 0x5F	; 95
               1b0:	d8 e0    	ldi	r29, 0x08	; 8
               1b2:	de bf    	out	0x3e, r29	; 62
               1b4:	cd bf    	out	0x3d, r28	; 61

            دیدگاه


              پاسخ : آموزش winavr و avrlib

              نوشته اصلی توسط vahidsport
              من هر کاری میکنم نمیتونم اینو کامپایل کنم یعنی کامپایل میشه ولی ارور داره دستور sbi و چنتا دیگه رو هم فکر میکنم برای WinAVR هست رو میگه تعریف نشده

              WinAVR بلدنیستم و این یه مثال اماده هست خودم ننوشتم

              ممنون



              http://www.4shared.com/rar/55qQ7LJf/VGA_users_handle_example1.html
              با سلام،

              ضمن تشکر از برادر مجتبی که در راه ائتلای WinAVR شمشیر میزنن :bye
              و کسب اجازه از ایشون، کد شما با تغییرات زیر اصلاح و کامپایل شد.
              ( هر چند از این پست زمان زیادی میگذره، ولی چون جنبه آموزشی داره، این پست رو گذاشتم! :mrgreen: )

              این خط اضافه شد، برای اینکه ماکرو های sbi و cbi و inb و outb ایناها حل بشه :
              #include <compat/deprecated.h>

              هدر فایل signal.h که وکتور اینتراپت ها رو تعریف میکنه، به هدر فایل جدیدش تغییر داده شد. البته اگر شما اصلاحش نکنید، مشکلی پیش نمیاد، چونکه این کار رو خود کامپایلر، بطور خودکار انجام میده!
              #include <avr/interrupt.h>

              از اونجایی که این برنامه مال زمان هیتلر خدا بیامرز بوده! شکل دستور PRG_RDB هم به pgm_read_byte تغییر کرده، پس یه تعریف جایگزین به شکل زیر انجام شده :
              #define PRG_RDB(x) pgm_read_byte(x)

              اینم کد اصلاح شده :
              http://s1.picofile.com/file/7533415913/VGA_users_handle_example1.rar.html
              مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

              Sh_Nourbakhsh@Yahoo.com

              http://s2.picofile.com/file/7170362468/_Wall_e_.jp

              دیدگاه


                پاسخ : آموزش winavr و avrlib

                نوشته اصلی توسط mohamad0
                باسلام
                من یه تابع داخل روتین isr صدا میزنم ام برنامه دیگه از وقفه بر نمیگرده و تابع هم درست اجرا نمیشه .
                ضمنا من داخل این تابه فراخونی های زیادی دارم .
                به نظرم مال کم بود پشته باشه. اما winavr تازه شروع کردم و نمی دونم کجا و چهجوری میشه پشته را تغییر داد .
                لطفا راه نمایی کنید خیلی ضروریه.
                ممنون :cry2:
                یاعلی
                با سلام،

                بعیده مشکل استک داشته باشی! اگر ضروریه، برنامه رو بزار تا بررسی بشه، اینطوری نمیشه جواب داد .....
                مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                Sh_Nourbakhsh@Yahoo.com

                http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                دیدگاه


                  پاسخ : آموزش winavr و avrlib

                  با سلام
                  این هم برنامه مشکل دار ما:
                  برنامه وقتی یه وقفه میره دیگه بر نمیگرده. یعنی از تابع sendpayload دیگه خارج نمیشه. داخل این تابع هم فراخونی های زیادی داخل هم هست.
                  نظرم اینه که مشکل استک هست .البته اساتید فرمودند که کامپایلر استکا روی بیشینه مقدارش تنظیم میکنه.
                  حالا.......
                  #include <avr/io.h>
                  #include "function.h"
                  #include <avr/interrupt.h>
                  #include <util/delay.h>

                  uint8_t _tx[8]={2,2,2,2,2,2,2,2};

                  uint8_t *buffer;
                  uint8_t buff,flag;
                  int main(){


                  avr_init();



                  _delay_ms(200);
                  sei();

                  Begin();

                  setMode(0); // mode=_tx

                  setChannel(8);




                  while(1){




                  }


                  return 0;
                  }
                  //*********************************************

                  ISR(TIMER1_OVF_vect)
                  {
                  sei();

                  sendPayload(test,6, 0);
                  PORTC=~PINC;
                  flag=1;



                  }
                  محمد.م

                  دیدگاه


                    پاسخ : آموزش winavr و avrlib

                    ببخشید نمیدونم چرا اونجوری متحرک شد

                    #include <avr/io.h>
                    #include "function.h"
                    #include <avr/interrupt.h>
                    #include <util/delay.h>

                    uint8_t _tx[8]={2,2,2,2,2,2,2,2};

                    uint8_t *buffer;
                    uint8_t buff,flag;
                    int main(){


                    avr_init();



                    _delay_ms(200);
                    sei();

                    Begin();

                    setMode(0); // mode=_tx

                    setChannel(8);




                    while(1){




                    }


                    return 0;
                    }
                    //*********************************************

                    ISR(TIMER1_OVF_vect)
                    {
                    sei();

                    sendPayload(test,6, 0);
                    PORTC=~PINC;
                    flag=1;



                    }
                    محمد.م

                    دیدگاه


                      پاسخ : آموزش winavr و avrlib

                      با سلام،

                      از این کدی که گذاشتی، هیچ چیز دستگیر آدم نمیشه!

                      محتمله که در شرایط فعلی، روتین sendPayload قبل از خاتمه کارش، مجددا فراخوانی بشه! که اجرای مکرر اون موجب هنگ کردن میکرو خواهد شد .....

                      و بهتره که این روتین اینتراپت رو اینطوری تغییر بدی :
                      کد:
                      ISR(TIMER1_OVF_vect)
                      {
                       cli();
                      
                       sendPayload(test,6, 0);
                       PORTC = ~PINC;
                       flag = 1;
                      
                       sei();
                      }

                      اینطوری، تا زمانی که از روتین sendPayload برنگردی، مجددا اون روتین اجرا نخواهد شد. و اجرای مکرر و بدون بازگشت اون تضمین میشه!
                      مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                      Sh_Nourbakhsh@Yahoo.com

                      http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                      دیدگاه


                        پاسخ : آموزش winavr و avrlib

                        سلام به همه من سال پیش یه هدر فایل برای دستکاری بیتی نوشته بودم الان اینجا میگذارمش برا استفاده همه. در آینده پروژه ها و کدهای نمونه خودم رو هم میگذارم.
                        فایل رو باز کنید همه چی دستیرتون میشه. فایل یه سری ماکرو برای ست کردن کلیر کردن تاگل کردن و کپی کردن و همچنین تست بیتی است. امیدوارم به دردتون بخوره.
                        ببخشید من زیاد سواد ندارم نتونستم خود فایل رو پلود کنم. متنش رو میگذارم توی یه فایل با نام bitset.h سیوش کنید و توی پوشه پروژه ها کپی و استفاده کنید.

                        کد:
                        
                        #ifndef BITSET_H_
                        #define BITSET_H_
                        
                        
                        
                        #endif /* BITSET_H_ */
                        
                        #define cbi(port,pin) port&=~(1<<pin)	// clear bit
                        
                        #define sbi(port,pin) port|=(1<<pin)	// set bit
                        
                        #define tbi(port,pin) port^=(1<<pin)	//toggle bit
                        
                        #define tstbit(port,pin) port&(1<<pin)	// check bit. if bit is 0 return 0
                        
                        #define cpbit(destination,dbit,source,sbit)\
                        destination=tstbit(source,sbit) ? sbi(destination,dbit):cbi(destination,dbit)
                        
                        
                        #define check_set(port,pint) tstbit(port,pin)	// if bit is set return 1
                        
                        #define check_reset(port,pin) !tstbit(port,pin)	// if bit is reset return 1
                        
                        #define wait_for_set(port,pin) while(!(tstbit(port,pin)))	// wait until bit become 1
                        
                        #define wait_for_reset(port,pin) while(tstbit(port,pin)) // wait until bit become 0
                        
                        #define wait_while_one wait_for_reset
                        #define wait_while_zero wait_for_set
                        کد:
                        
                        

                        دیدگاه


                          پاسخ : آموزش winavr و avrlib

                          سلام به همگی
                          خواستم بدونم دسترسی به پینآ‌های هر پورت در WinAVR به چه شکلی هست؟ من همیشه از CodevisionAVR استفاده میکردم. الان نمیدونم یه کدی مثل
                          کد:
                          PORTD.2=ACSR.5

                          که در CodevisionAVR به این شکل تعریف میشه، چجوری باید در WinAVR پیاده سازیش کرد..

                          دیدگاه


                            پاسخ : آموزش winavr و avrlib

                            با سلام
                            نوشته اصلی توسط ata
                            سلام به همگی
                            خواستم بدونم دسترسی به پینآ‌های هر پورت در WinAVR به چه شکلی هست؟ من همیشه از CodevisionAVR استفاده میکردم. الان نمیدونم یه کدی مثل
                            کد:
                            PORTD.2=ACSR.5

                            که در CodevisionAVR به این شکل تعریف میشه، چجوری باید در WinAVR پیاده سازیش کرد..
                            پاسخ سوالاتون تو پست قبلی نهفته است.

                            فایل هدر دوستمون رو اینکلود کنید بعد تو برنامه تون جای اون کدتون اینو بنویسید :

                            cpbit(PORTD,2,ACSR,5)

                            دیدگاه


                              پاسخ : آموزش winavr و avrlib

                              دوستان من کارای که تو جلسه 2 گفته شده رو کردم
                              برای راه اندازی lcd کارکتری بهم ارور delay نمیده ولی این ارور رو میده
                              Error 1 variable 'LcdCustomChar' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
                              این کمپایلر من هست
                              atmelstudio 6-6.0.1843


                              مشکلم رو با عوض کردن library حل کردم
                              ممنون

                              دیدگاه


                                پاسخ : آموزش winavr و avrlib

                                دوستان من دقیقا برنامه تایمر رو کپی کردم کار نمیکنه

                                Warning 1 #warning "F_CPU not defined for <util/delay.h>" [-Wcpp] c:\program files (x86)\atmel\atmel studio 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\ bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay.h 90 3 GccApplication1
                                Error 2 unknown type name 'prog_char' C:\AVR\AVR GCC tutorial\session 4\timer\GccApplication1\GccApplication1\rprintf.h 85 1 GccApplication1
                                Error 3 variable 'TimerPrescaleFactor' must be const in order to be put into read-only section by means of '__attribute__((progmem))' C:\AVR\AVR GCC tutorial\session 4\timer\GccApplication1\GccApplication1\timer.c 31 42 GccApplication1
                                Error 4 variable 'TimerRTCPrescaleFactor' must be const in order to be put into read-only section by means of '__attribute__((progmem))' C:\AVR\AVR GCC tutorial\session 4\timer\GccApplication1\GccApplication1\timer.c 34 42 GccApplication1

                                دیدگاه

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