اطلاعیه

Collapse
No announcement yet.

کوچ کردن از کدویژن به AtmelStudio

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

    پاسخ : کوچ کردن از کدویژن به AtmelStudio

    واسه چی int گذاشتید داخل پرانتز ISR ؟
    int رو حذف کنید...
    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

    www.intelart.ir


    ساخت کنترلر دما PID فازي با AVR [آموزشی]

    دیدگاه


      پاسخ : کوچ کردن از کدویژن به AtmelStudio

      نوشته اصلی توسط Mahdi.Faani
      واسه چی int گذاشتید داخل پرانتز ISR ؟
      int رو حذف کنید...
      warning د اده بود.مشکلی هم نداره.

      دیدگاه


        پاسخ : کوچ کردن از کدویژن به AtmelStudio

        به هر حال اون int نباید اونجا باشه
        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

        www.intelart.ir


        ساخت کنترلر دما PID فازي با AVR [آموزشی]

        دیدگاه


          پاسخ : کوچ کردن از کدویژن به AtmelStudio

          نوشته اصلی توسط MCC
          ساب روتین ها رو تشکیل دادم ولی بعد کامپایل یه error میده. redefinition of 'ISR'
          از نظر کامپایلر شما دو تابع همنام تشکیل داده اید و علت آن هم قرار دادن void در ابتدای تابع هست. آنرا حذف کنید.
          ضمنا دستور ()reti را هم حذف کنید در چند پست قبل در این باره توضیح داده شده.
          گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

          دیدگاه


            پاسخ : کوچ کردن از کدویژن به AtmelStudio

            سلام به همه
            دوستان لطفا توی تایپیک زیر کمکم کنین
            نیاز سریع بهش دارم :cry:
            متشکرم :nerd:
            http://www.eca.ir/forum2/index.php?topic=114813.0
            اي خدا ، من بايد از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از اين راه طعنه زنند. بايد به آن سنگدلاني که علم را بهانه کرده و به ديگران فخر ميآ*فروشند، ثابت کنم که خاک پاي من هم نخواهند شد. بايد همه آن تيره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترين و افتاده ترين مرد روي زمين باشم.
            شهيد دکتر مصطفي چمران
            اللهم صل علي محمد و ال محمد و عجل فرجهم
            ; C is not for children

            دیدگاه


              پاسخ : کوچ کردن از کدویژن به AtmelStudio

              نوشته اصلی توسط مهدی رهی
              سلام به همه
              دوستان لطفا توی تایپیک زیر کمکم کنین
              نیاز سریع بهش دارم :cry:
              متشکرم :nerd:
              http://www.eca.ir/forum2/index.php?topic=114813.0
              واقعا جای این پست اینجاس؟
              .The best question deserves a better answer
              =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
              «پناه»می برم «به خدا»
              از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
              محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

              دیدگاه


                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                نوشته اصلی توسط •.´™ مَسِِــــح`.•
                واقعا جای این پست اینجاس؟
                از این بابت اینجا گذاشتم چون میخوام atmel studio 7 ساپرتش کنه دوست عزیز
                اي خدا ، من بايد از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از اين راه طعنه زنند. بايد به آن سنگدلاني که علم را بهانه کرده و به ديگران فخر ميآ*فروشند، ثابت کنم که خاک پاي من هم نخواهند شد. بايد همه آن تيره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترين و افتاده ترين مرد روي زمين باشم.
                شهيد دکتر مصطفي چمران
                اللهم صل علي محمد و ال محمد و عجل فرجهم
                ; C is not for children

                دیدگاه


                  پاسخ : کوچ کردن از کدویژن به AtmelStudio

                  دوستان برای انیکه یک متغیر رو تو یک آدرس دلخواه تو حافظه RAM و FLASH میکرو بنویسیم، باید از چه دستوری استفاده کنیم؟
                  مثلا بخواهیم یک متغیر 8 بیتی a رو تو آدرس X از حافظه RAM و متغیر 8 بیتی b رو توی آدرس Y از حافظه FLASH میکرو بنویسیم.
                  ---------
                  .
                  .
                  ...........

                  دیدگاه


                    پاسخ : کوچ کردن از کدویژن به AtmelStudio

                    استفاده از دستورات اسمبلی میتونه خوب باشه...
                    یه یوز منیوال خود اتمل داره که بسته به نوع میکرو دستورای اسمبلی که پشتیبانی میکنه رو داخلش داره
                    مثلا واسه ریختن توی یه آدرس از رم :
                    [code=asm]ldi 0x500, 0x80[/code]
                    در آدرس 500 هگز عدد 80 عگز رو لود مکینه...
                    واسه فلش هم یادم نیس ولی اگه پیدا نکردید بگید تا همینجا بزارم..
                    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                    www.intelart.ir


                    ساخت کنترلر دما PID فازي با AVR [آموزشی]

                    دیدگاه


                      پاسخ : کوچ کردن از کدویژن به AtmelStudio

                      نوشته اصلی توسط Mahdi.Faani
                      استفاده از دستورات اسمبلی میتونه خوب باشه...
                      یه یوز منیوال خود اتمل داره که بسته به نوع میکرو دستورای اسمبلی که پشتیبانی میکنه رو داخلش داره
                      مثلا واسه ریختن توی یه آدرس از رم :
                      [code=asm]ldi 0x500, 0x80[/code]
                      در آدرس 500 هگز عدد 80 عگز رو لود مکینه...
                      واسه فلش هم یادم نیس ولی اگه پیدا نکردید بگید تا همینجا بزارم..
                      یعنی اگر بخوام یک متغیر رو توی یک جای مشخص از رم مشخص کنم، دستور راحت تری نیست :biggrin:
                      تا حد ممکن نمی خوام از دستورات اسمبلی استفاده کنم.
                      یک چیزی مثل @ توی کدویژن ملعون!! :mrgreen:
                      ---------
                      .
                      .
                      ...........

                      دیدگاه


                        پاسخ : کوچ کردن از کدویژن به AtmelStudio

                        نوشته اصلی توسط Des_B
                        یعنی اگر بخوام یک متغیر رو توی یک جای مشخص از رم مشخص کنم، دستور راحت تری نیست :biggrin:
                        تا حد ممکن نمی خوام از دستورات اسمبلی استفاده کنم.
                        یک چیزی مثل @ توی کدویژن ملعون!! :mrgreen:
                        خب میتونید از دیفاین استفاده کنید...دیگه ایناش سلیقه ایه...با ادبیات خودتون یه دیفاین تعریف کنید که جایگزینش همون دستور اسمبلی باشه...
                        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                        www.intelart.ir


                        ساخت کنترلر دما PID فازي با AVR [آموزشی]

                        دیدگاه


                          پاسخ : کوچ کردن از کدویژن به AtmelStudio

                          نوشته اصلی توسط Des_B
                          دوستان برای انیکه یک متغیر رو تو یک آدرس دلخواه تو حافظه RAM و FLASH میکرو بنویسیم، باید از چه دستوری استفاده کنیم؟
                          مثلا بخواهیم یک متغیر 8 بیتی a رو تو آدرس X از حافظه RAM و متغیر 8 بیتی b رو توی آدرس Y از حافظه FLASH میکرو بنویسیم.
                          برای قرار دادن یک متغیر در یک آدرس دلخواه می توان از دستورات اسمبلی ST/STS و برای خواندن از دستورات LD/LDS استفاده کرد مشروط به اینکه طبق قوانین کامپایلر این دستورات را بکار ببرید(inline assembly)
                          اما راه تقریبا ساده تر استفاده از command های کامپایلر هست. برای اینکار به صورت زیر عمل می کنیم:
                          [code=c]uint8_t test __attribute__ ((section (.RamTestSection)));[/code]
                          در کد بالا متغیر test در section دلخواه قرار خواهد گرفت اما باید نام و آدرس section برای کامپایلر تعریف شود. برای اینکار در toolchain به قسمت linker و memories رفته و در قسمت ram عبارت زیر را اضافه می کنیم:
                          [code=c].RamTestSection=0x800005[/code]
                          به این ترتیب متغیر در آدرس 5 از حافظه ram قرار می گیرد و تمام متغیرهایی که در این section تعریف شوند در ادامه قرار خواهند گرفت.

                          برای حافظه flash هم به طور مشابه به صورت زیر انجام می شود:
                          [code=c]const uint8_t test=128 PROGMEM __attribute__ ((section (.FlashTestSection)));[/code]
                          و در toolchain در قسمت flash عبارت زیر را اضافه می کنیم:
                          [code=c].FlashTestSection=0x500[/code]
                          به این ترتیب دیتای test در آدرس 0x500 حافظه flash قرار خواهد گرفت. دقت داشته باشید که آدرسها در flash ضریبی از 2 باشد.

                          می توان آرایه ها را هم با این روش بکار بردو همچنین نوشتن تابع در یک آدرس خاص.

                          نکاتی وجود دارد که باید به آنها توجه داشت:
                          - در صورت استفاده، حافظه اشغال شده در خروجی کامپایلر محاسبه نمی شود.
                          - باید آدرسی انتخاب شود که توسط کامپایلر استفاده نمی شود که در این صورت خطا اعلام خواهد شد.

                          پ.ن.
                          command مستقیمی هم وجود دارد به صورت زیر:
                          [code=c]-Wl,--section-start=.MyRamSection=0x800005
                          -Wl,--section-start=.MyFlashSection=0x500
                          [/code]
                          این دستورات در قسمت linker و در قسمت Miscellaneous اضافه می شوند(با یک فاصله یا Space) و عملکردشان مثل حالت قبل هست.

                          ویرایش: اضافه شدن command
                          گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                          دیدگاه


                            پاسخ : کوچ کردن از کدویژن به AtmelStudio

                            سلام خدمت مهندسین عزیز
                            میشه بگید مشکل این کد چیه من مبتدی هستم و تازه شروع به کار با اتمل کردم و تو محیط پرتئوس جواب نمیده تو محیط دیباگ هم مقدار پورت A که در اولین بار باید مقدار صفر در سون سگمنت نشون بده 0x94 هست . کد یه شمانده ساده سه رقمی با وقفه صفر و تایمر صفر برای نمایش روی 7سگمت هست .
                            [code=c]

                            #include <avr/io.h>
                            #include <avr/interrupt.h>
                            #include <avr/pgmspace.h>
                            #define F_CPU 1000000


                            const unsigned char seg[] PROGMEM ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
                            0x7D,0x07,0x7F,0x6F};

                            static unsigned int count,digits[3],temp=0 ;

                            int main(void)
                            {
                            DDRA=(1<<DDA7)|(1<<DDA6)|(1<<DDA 5)|(1<<DDA4)|(1<<DDA3)|(1<<DDA2) |(1<<DDA1)|(1<<DDA0);
                            DDRB=(1<<DDB2)|(1<<DDB1)|(1<<DDB 0);
                            PORTB=(1<<PB2)|(1<<PB1)|(1<<PB0) ;
                            TCCR0=(1<<WGM01)|(1<<CS01);
                            TIMSK=(1<<OCIE0);
                            GICR=(1<<INT0);
                            MCUCR=(1<<ISC01);
                            OCR0=124;
                            sei();
                            while(1)
                            {
                            //TODO:: Please write your application code
                            }
                            }

                            ISR(INT0_vect)
                            {
                            count++;
                            if(count==999)count=0;
                            }
                            ISR(TIMER0_COMP_vect)
                            {
                            static unsigned char select=0;
                            unsigned char i=0;
                            temp=count;
                            for (i=0;i<3;i++)
                            {
                            digits[i]=temp%10;
                            temp/=10;
                            }
                            PORTB|=(1<<PB2)|(1<<PB1)|(1<<PB0 );
                            if(++select==3)select=0;
                            PORTA=pgm_read_byte(seg[digits[select]]);
                            PORTB&=~(1<<select);


                            }
                            [/code]
                            تنها دو روز در سال هست که نمیتونی هیچ کاری بکنیآ‌! یکیآ‌ دیروز و یکیآ‌ فردا . . .

                            دیدگاه


                              پاسخ : کوچ کردن از کدویژن به AtmelStudio

                              نوشته اصلی توسط masoud salimi
                              سلام خدمت مهندسین عزیز
                              میشه بگید مشکل این کد چیه من مبتدی هستم و تازه شروع به کار با اتمل کردم و تو محیط پرتئوس جواب نمیده تو محیط دیباگ هم مقدار پورت A که در اولین بار باید مقدار صفر در سون سگمنت نشون بده 0x94 هست . کد یه شمانده ساده سه رقمی با وقفه صفر و تایمر صفر برای نمایش روی 7سگمت هست .
                              [code=c]

                              #include <avr/io.h>
                              #include <avr/interrupt.h>
                              #include <avr/pgmspace.h>
                              #define F_CPU 1000000


                              const unsigned char seg[] PROGMEM ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
                              0x7D,0x07,0x7F,0x6F};

                              static unsigned int count,digits[3],temp=0 ;

                              int main(void)
                              {
                              DDRA=(1<<DDA7)|(1<<DDA6)|(1<<DDA 5)|(1<<DDA4)|(1<<DDA3)|(1<<DDA2) |(1<<DDA1)|(1<<DDA0);
                              DDRB=(1<<DDB2)|(1<<DDB1)|(1<<DDB 0);
                              PORTB=(1<<PB2)|(1<<PB1)|(1<<PB0) ;
                              TCCR0=(1<<WGM01)|(1<<CS01);
                              TIMSK=(1<<OCIE0);
                              GICR=(1<<INT0);
                              MCUCR=(1<<ISC01);
                              OCR0=124;
                              sei();
                              while(1)
                              {
                              //TODO:: Please write your application code
                              }
                              }

                              ISR(INT0_vect)
                              {
                              count++;
                              if(count==999)count=0;
                              }
                              ISR(TIMER0_COMP_vect)
                              {
                              static unsigned char select=0;
                              unsigned char i=0;
                              temp=count;
                              for (i=0;i<3;i++)
                              {
                              digits[i]=temp%10;
                              temp/=10;
                              }
                              PORTB|=(1<<PB2)|(1<<PB1)|(1<<PB0 );
                              if(++select==3)select=0;
                              PORTA=pgm_read_byte(seg[digits[select]]);
                              PORTB&=~(1<<select);


                              }
                              [/code]
                              خط مربوط به خوندن حافظه رو یه & اولش اضافه کنین یعنی اینجوری:
                              کد:
                              PORTA=pgm_read_byte(&seg[digits[select]]);
                              Aristar Group - Always And Forever

                              دیدگاه


                                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                                نوشته اصلی توسط حسین جباری
                                خط مربوط به خوندن حافظه رو یه & اولش اضافه کنین یعنی اینجوری:
                                کد:
                                PORTA=pgm_read_byte(&seg[digits[select]]);
                                ممنون دوست عزیز مشکل 7سگمنت حل شد ولی نمیدونم چرا 7سگمنت ها تو محیط پرتئوس دائما روشن و خاموش میشه ، یعنی تو محاسبه وقفه تایمر اشتباه کردم ؟یا خوندن از حافظه فلش زمانگیر هست ؟
                                تنها دو روز در سال هست که نمیتونی هیچ کاری بکنیآ‌! یکیآ‌ دیروز و یکیآ‌ فردا . . .

                                دیدگاه

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