اطلاعیه

Collapse
No announcement yet.

پروژه های انجام شده با کامپایلر IAR

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

    پروژه های انجام شده با کامپایلر IAR

    با سلام
    دوستان عزیز اگر به تایپیک "بررسی APPNOT های ATMEL " سر زده باشید متوجه میشید که من تازه کار با این کامپایلر رو شروع کردم و حالا هم قصدم از ایجاد این تایپیک ، ایجاد یک محیط برای تبادل اطلاعات در خصوص پروژه های انجام شده با این کامپایلر هست یعنی میخوام هر پروژه که با این کامپایلر انجام میدم یا پیدا میکنم اینجا بزارم و از شما دوستان عزیز هم درخواست دارم که اگر پروژهای با این کامپایلر انجام دادید اینجا بزارید تا حداقل من یکی ازش استفاده وافری ببرم و اما یک پیشنهاد برای دوستانی که حالا به هر دلیلی تا حالا با این کامپایلر کار نکردن اگر مثل بنده علاقه مند هستید تا با یک کامپایلر جدید به اسم IAR کار کنید در ابتدا یک سری به تایپیک زیر بزنید و آموزش آقا نحوی رو دانلود کنید در ابتدای این آموزش نحوه ایجاد یک پروژه با این کامپایلر گفته شده اما چند تا مورد رو که توی اونجا بهش اشاره نشده میگم تا با تنظیمات این کامپایلر در ابتدای راه بیشتر آشنا بشیم :
    تایپیک جناب نحوی : http://www.eca.ir/forum2/index.php?topic=50648.0

    مورد اولی که می خوام بگم در رابطه با استفاده از دستورات بیتی هست
    مثلا اگر در برنامه از دستور زیر استفاده کرده باشید :

    DDRB |=(1<<DDB1)|(1<<DDB2); /* Set portb.1 & portb.2 as output */

    اگر که تنظیم زیر را انجام نداده باشید کامپایلر از شما خطا میگرد


    مورد دوم در رابطه با انجام تنظیمات برای تولید فایل map توسط کامپایلر هست توی این فایل میتونید اطلاعاتی مثل اینکه حجم cstack و rstack چقدره و خیلی از تنظیمات نرم افزار در رابطه با پروه کامپایل شده ببینید یک چیزی مثل report در بسکام تولید و یا پنجره information در کدویِژن که بعد از انجام عمل کامپایل باز میشه .


    مورد سوم اگر در برنامه تون از حافظه eeprom کردید و احیانا اون رو مداردهی اولیه کردد برای این که این مقادیر رو در داخل حافظه eeprom میکروکنترلر قرار بدید بیاید در پنجره سمت راست در قسمت workspace از طریق کرکره فضای کاری release رو انتخاب و دوباره تنظیمات مربوط به پنجره option رو انجام بدید سپس برنامتون رو کامپایل کنید در این صورت فایل با نام "eeprom_اسم برنامه" در این مسیر زیر ایجاد میشه که میتونید این فایل رو داخل حافظه eeprom میکروکنترلر تون دانلود کنید :
    "eeprom_اسم برنامه"\Release\Exe

    و این رو هم بگم اگر که سوالی در رابطه با این کامپایلر داشیتد می تونید توی تایپیک زیر مطرح کنید :
    http://www.eca.ir/forum2/index.php?topic=41476.135

    خوب و اما اولین پروژه ای که میزارم برنامه ی مربوط به یک نویسنده الکترونیک با LED هست که مربوط به appnot ، AVR030 میشه : سورس و شماتیک : Ledchase.rar

    ممنون از نگاهاتون

    #2
    پاسخ : پروژه های انجام شده با کامپایلر IAR

    برنامه دوم :
    تولید پالسی به فرکانس 1 هرتز بر روی پایه PB0 با استفاده از تایمر 1


    فایل های سورس و شماتیک : TIMER-1.rar


    برنامه :

    #include <ioavr.h>
    #include <intrinsics.h>
    __C_task void main( void )
    {
    DDRB=(1<<DDB0);
    TCCR1B=(1<<CS11);
    TIMSK=(1<<TOIE1);
    __enable_interrupt();
    while(1);
    }
    #pragma vector= TIMER1_OVF_vect
    __interrupt void TIMER1_OVF(void)
    {
    /*FOR BASE TIME : 5000us*/
    static unsigned char i=0;
    TCNT1=0XEC78;
    if(++i==100)PORTB^=1,i=0;
    }

    دیدگاه


      #3
      پاسخ : پروژه های انجام شده با کامپایلر IAR

      برنامه سوم :
      ایجاد پالسی با فرکانس یک هرتز روی PB0 با استفاده از تایمر 1 که روتین آن به زبان اسمبلی باشد

      فایل های سورس و شماتیک برنامه : TIMER-2.rar

      کد های مربوط به تابع اصلی در زبان C :


      #include <ioavr.h>
      #include <intrinsics.h>
      __C_task void main( void )
      {
      DDRB=(1<<DDB0);
      TCCR1B=(1<<CS11);
      TIMSK=(1<<TOIE1);
      __enable_interrupt();
      while(1);
      }


      کد مربوط به زیر برنامه وقفه به زبان اسمبلی :


      NAME TIMER1_OVF_vect
      #include "ioavr.h"
      extern c_timer1_ovf
      COMMON INTVEC(0x10) ; Code in interrupt vector segment
      ORG TIMER1_OVF_vect ; Place code at interrupt vector
      RJMP c_timer1_ovf ; Jump to assembler interrupt function
      ENDMOD
      ;The interrupt vector code performs a jump to the function c_int1:
      NAME c_timer1_ovf
      #include "ioavr.h"
      PUBLIC c_timer1_ovf ; Symbols to be exported to C function
      RSEG CODE ; This code is relocatable, RSEG
      c_timer1_ovf:
      cli
      push R17 ; Push used registers on stack
      push R16 ; Push used registers on stack
      in R16,SREG ; Read status register
      push R16 ; Push Status register
      ;------------------------------------------------------------------------------
      LDI R16,$EC
      LDI R17,$78
      OUT TCNT1H,R16
      OUT TCNT1L,R17
      LDI R16,$64
      LDS R17,$0400
      INC R17
      STS $0400,R17
      CPSE R16,R17
      RJMP L1
      IN R16,PORTB
      COM R16
      ANDI R16,$01
      OUT PORTB,R16
      LDI R17,$00
      STS $0400,R17
      ;------------------------------------------------------------------------------
      L1: pop R16 ; Pop status register
      out SREG,R16 ; Store status register
      pop R16 ; Pop Register R16
      pop R17 ; Pop Register R17
      reti
      END

      دیدگاه


        #4
        پاسخ : پروژه های انجام شده با کامپایلر IAR

        برنامه چهارم :
        راه اندازی LCD کاراکتری 2*16


        این برنامه یکی از پروژه های جناب NAO_ROBOT در انجمن XMEGA هست که واقعا کارشون حرف نداره و به خاطر احترام به ایشون سورسشون رو بدون هیچ تغییری برای راه اندازی LCD کاراکتری با مگا 8 اینجا میزارم .

        فایل های سورس و شماتیک برنامه : IAR_TEXT_LCD

        دیدگاه


          #5
          پاسخ : پروژه های انجام شده با کامپایلر IAR

          برنامه پنجم :
          پروژه کسینوس فی متر 3 فاز با mega64

          فایلهای سورس و شماتیک : cosphi3phase.rar

          برنامه :


          کد:
          #include<ioavr.h>
          #include<intrinsics.h>
          #include "lcd.h"
          #include "delay.h"
          #include "math.h"
          #include "stdio.h"
          void lcddp(char number);
          float cosphi(unsigned int tcnt1);
          char t=1;
          float PF[4];
          __C_task void main( void )
          {
           PORTD=0x10;
           EICRA=0xFF;
           EICRB=0x0F;
           EIMSK=0x3F;
           EIFR=0x3F;
           lcd_init(LCD_DISP_ON);
           lcd_clrscr();
          __enable_interrupt();  
            while(1)
                {    
             // Place your code here
          //---select your value-------
          if(!(PIND&(1<<PIND4)))
          t++,lcd_clrscr();
          if(t>3)t=1;
          while(!(PIND&(1<<PD4)));
          lcddp(t);
             }
            }
          /***********INT0*******************/
           #pragma vector= INT0_vect 
          __interrupt void EXT_INT0(void)
             {
          if(t==1)TCNT1=0x00,TCCR1B=0X02;
               }
          /***************INT1****************/
           #pragma vector= INT1_vect 
          __interrupt void EXT_INT1(void)
             {
          if(t==1)TCCR1B=0X00,PF[1]=cosphi(TCNT1);
               }
          /*************INT2************/
           #pragma vector= INT2_vect 
          __interrupt void EXT_INT2(void)
             {
          if(t==2)TCNT1=0x00,TCCR1B=0X02;
               }
          /************INT3*************/
           #pragma vector= INT3_vect 
          __interrupt void EXT_INT3(void)
             {
          if(t==2)TCCR1B=0X00,PF[2]=cosphi(TCNT1);
               }
          /************INT4*************/
           #pragma vector= INT4_vect 
          __interrupt void EXT_INT4(void)
             {
          if(t==3)TCNT1=0x00,TCCR1B=0X02;
               }
          /************INT5*************/
           #pragma vector= INT5_vect 
          __interrupt void EXT_INT5(void)
             {
           if(t==3)TCCR1B=0X00,PF[3]=cosphi(TCNT1);
               }
          /*.....Display function: */
          void lcddp(char number){
          char str[16];
          char phname[]={'\0','R','S','T'};
          sprintf(str,"PF.%c = %2.3f",phname[number],PF[number]);
          lcd_home();
          lcd_puts(str);
          }
          /*......cosphi function :     */
          float cosphi(unsigned int tcnt1){
          float rad,pf;
          rad=tcnt1;
          rad=(rad/20000)*6.28;
          pf=cos(rad);
          return pf;
          }
          /****************************/


          دیدگاه


            #6
            پاسخ : پروژه های انجام شده با کامپایلر IAR

            برنامه ششم :
            تابعی برای اسکن صفحه کلید 4*4 به همراه نمایش بر روی LCD


            فایلهای سورس و شماتیک : keypad_with_mega16.rar


            برنامه :


            #include<ioavr.h>
            #include<intrinsics.h>
            #include "lcd.h"
            #include "delay.h"
            #include "stdio.h"
            unsigned char keypad(void);
            __C_task void main(void)
            {
            char str[16];
            unsigned char key;
            DDRA=0X0F;
            lcd_init(LCD_DISP_ON);
            lcd_clrscr();
            lcd_home();
            lcd_puts("Enter your pass"
            _delay_ms(2000);
            while(1){
            key=keypad();
            sprintf(str,"key=%d",key);
            lcd_clrscr();
            lcd_gotoxy(0,0);
            lcd_puts(str);
            };
            }
            /****keypad function : ******/
            unsigned char keypad(void){
            PORTA=0X01;
            unsigned char key=0,count=4;
            for(count=1;count<5;count++){
            _delay_ms(10);
            if(PINA&(1<<PINA4))key=(count*4-3);
            _delay_ms(10);
            if(PINA&(1<<PINA5))key=(count*4-2);
            _delay_ms(10);
            if(PINA&(1<<PINA6))key=(count*4-1);
            _delay_ms(10);
            if(PINA&(1<<PINA7))key=(count*4);
            if(PORTA<0X80)PORTA<<=1;
            };
            return key;
            }


            دیدگاه


              #7
              پاسخ : پروژه های انجام شده با کامپایلر IAR

              برنامه هفتم :
              راه اندازی LCD گرافیکی با چیپ KS0108

              این پروژه هم یکی از پروژه های جناب NAO_ROBOT در انجمن XMEGA هست که فایل سورس اون پروژه بدون هیچ تغییری برای مگا 16 را در اینجا قرار می دم.

              فایل های سورس و شماتیک : GLCD-WITH_MEGA16

              دیدگاه


                #8
                پاسخ : پروژه های انجام شده با کامپایلر IAR

                برنامه هشتم :
                راه اندازی 7 سگمنت 4 رقمی با قابلیت تغییر مقدار هر رقم به صورت چشمک زن :


                فایل های سورس و شماتیک : 7segment.rar

                برنامه :


                #include <ioavr.h>
                #include <ina90.h>
                #define DATA PORTB
                #define SCAN PORTC
                unsigned char Cdgit[4]={0,1,2,3};
                flash unsigned char nom[]=
                {
                /* 0 1 2 3 4 5 6 7 8 9 */
                0X3F , 0X06 , 0X5B , 0X4F , 0X66 , 0X6D , 0X7D , 0X07 , 0X7F , 0X6F ,
                /* 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. */
                0XBF , 0X86 , 0XDB , 0XCF , 0XE6 , 0XED , 0XFD , 0X87 , 0XFF , 0XEF
                };
                void main (void){
                DDRC=0X0F;
                DDRB=0XFF;
                PORTD|=(1<<PD5)|(1<<PD2)|(1<<PD3 );
                TCCR0=0x03;
                TCNT0=0x83;
                TCNT1=4;
                TCCR1B=0x06;
                TIMSK=0x01;
                GICR|=0xC0;
                MCUCR=0x0A;
                GIFR=0xC0;
                DATA=0XC0;
                SCAN=0X80;
                __enable_interrupt();
                while(1){
                if(TCNT1>4)TCNT1=0;
                };

                }

                #pragma vector= TIMER0_OVF_vect
                __interrupt void TIMER0_OVF(void)
                {
                // Reinitialize Timer 0 value
                TCNT0=0x83;
                // Place your code here
                static unsigned char dg,i=0;
                SCAN = 0;
                DATA = nom[Cdgit[dg]];
                SCAN |= (1<<dg);
                if(dg==TCNT1&++i<130)SCAN=0;
                if(++dg>3)dg=0;
                }
                /***********INT0*******************/
                #pragma vector= INT0_vect
                __interrupt void EXT_INT0(void)
                {
                if(Cdgit[TCNT1]<19)Cdgit[TCNT1]++;
                }
                /***************INT1****************/
                #pragma vector= INT1_vect
                __interrupt void EXT_INT1(void)
                {
                if(Cdgit[TCNT1]>0)Cdgit[TCNT1]--;
                }


                دیدگاه


                  #9
                  پاسخ : پروژه های انجام شده با کامپایلر IAR

                  برنامه نهم :
                  مولد سیگنال DTMF با استفاده از PWM :


                  این برنامه مربوط به APPNOTE به شماره AVR314 میشه :

                  فایل های سورس و شماتیک : dtmf_avr314_2.rar

                  دیدگاه


                    #10
                    پاسخ : پروژه های انجام شده با کامپایلر IAR

                    با سلام و تشکر از شما من این فایل را نمیتونم دانلود کنم لینکش خرابه میشه دوباره پلود کنید ممنونم
                    راه اندازی 7 سگمنت 4 رقمی با قابلیت تغییر مقدار هر رقم به صورت چشمک زن

                    دیدگاه


                      #11
                      پاسخ : پروژه های انجام شده با کامپایلر IAR

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

                      خدمت شما : 7segment.rar


                      دیدگاه


                        #12
                        پاسخ : پروژه های انجام شده با کامپایلر IAR

                        برنامه دهم :
                        پروژه کامل ریموت 4 کاناله رادیویی ASK لرنینگ


                        این پروژه یکی از پروژه های مهندس اسدی به این لینک هست که من اون رو با اجازشون با IAR بازنویسی کردم ، میکرو MEGA16 هست و یک عدد سگمنت تک رقمی هم که نمایانگر شماره دکمه فشرده شده هست بهش اضافه کردم

                        فایلهای سورس و شماتیک : remote.rar

                        دیدگاه


                          #13
                          پاسخ : پروژه های انجام شده با کامپایلر IAR

                          برنامه یازدهم :
                          اسکن صفحه کلید 4*4 در روتین وقفه به همراه دیبانس قابل تنظیم از 50 میلی ثانیه تا 255*50میلی ثانیه


                          فایل های سورس و شماتیک : keypad_with_mega16_v4.rar


                          برنامه :

                          #include<ioavr.h>
                          #include<intrinsics.h>
                          #include "lcd.h"
                          #include "delay.h"
                          #include "stdio.h"

                          #define debounce 20 /** initialize debounce: MIN:1 , MAX:0 , Default=20-->1s **/

                          __flash char digit[17]=
                          {'\0','0','1',' 2','3','4','5', '6','7','8','9& #039;,'A','B','C',&# 039;D','E','F'};
                          unsigned char key,i;

                          __C_task void main(void)
                          {

                          TCNT1H=0x3C;
                          TCNT1L=0xB0;

                          TIMSK=0x04;

                          GICR|=0x40;
                          MCUCR=0x03;
                          MCUCSR=0x00;
                          GIFR=0x40;

                          DDRA=0X0F;
                          PORTA=0X0F;

                          __enable_interrupt();

                          lcd_init(LCD_DISP_ON);
                          lcd_clrscr();
                          lcd_home();
                          lcd_puts("Enter your pass"
                          _delay_ms(2000);
                          lcd_clrscr();

                          while(1);

                          }
                          /***********INT0*******************/
                          #pragma vector= INT0_vect
                          __interrupt void EXT_INT0(void)
                          {
                          unsigned char count;

                          PORTA=0X01;
                          i=0;

                          /******keypad scan routin*************/
                          for(count=1;count<5;count++){
                          if(PINA&(1<<PINA4))key=(count*4-3);
                          if(PINA&(1<<PINA5))key=(count*4-2);
                          if(PINA&(1<<PINA6))key=(count*4-1);
                          if(PINA&(1<<PINA7))key=(count*4);
                          if(PORTA<0X80)PORTA<<=1;
                          }
                          /*************************************/

                          lcd_putc(digit[key]);

                          PORTA=0X00;
                          TCCR1B=0X02; /** Timer 1 on **/

                          }

                          /* Timer1 overflow interrupt service routine*/
                          #pragma vector= TIMER1_OVF_vect
                          __interrupt void TIMER1_OVF(void)
                          {
                          /* Reinitialize Timer1 value for 50ms*/
                          TCNT1H=(unsigned char)0x3CB0 >> 8;
                          TCNT1L=(unsigned char)0x3CB0;

                          /********* check debounce ************/
                          if(++i==debounce){
                          PORTA=0X0F;
                          i=0;
                          TCCR1B=0x00; /** Timer 1 Stopped **/
                          }
                          }

                          دیدگاه


                            #14
                            پاسخ : پروژه های انجام شده با کامپایلر IAR

                            برنامه دوازدهم :
                            کنترل دور موتور DC با پل H و PWM با قابلیت ترمز و تغییر جهت


                            مدار رو در عمل بستم و با یک موتور DC 6 ولتی تست کردم و بدون هیچ مشکلی کار کرد فرکانس موج PWM
                            50 هرتز هست

                            فایل های سورس و شماتیک : PWM-2_2.rar


                            برنامه :

                            #include <ioavr.h>
                            #include <ina90.h>

                            __flash unsigned int speed[]={
                            0xffff,
                            0x2328 , 0x1f40 , 0x1b58 , 0x1770 , 0x1388 ,
                            0x0fa0 , 0x0bb8 , 0x07d0 , 0x03e8 ,0x0000};

                            __C_task void main (void){
                            unsigned char index,direct=0,BR=0;

                            PORTB=0X1F;

                            DDRD=0x70;
                            PORTD|=(1<<PORTD6);

                            ICR1=0x2710;
                            OCR1A=0XFFFF;
                            OCR1B=0XFFFF;
                            TCCR1A=0x32;
                            TCCR1B=0x12;

                            while(1){
                            /******************************************/
                            if(!(PINB&(1<<PINB0)))index=1,BR=0,PORTD ^=(1<<PORTD6);
                            while(!(PINB&(1<<PINB0)));
                            /*----------------------------------------------------*/
                            if((!(PINB&(1<<PINB1)))&index<10) index++;
                            while(!(PINB&(1<<PINB1)));
                            /*---------------------------------------------*/
                            if((!(PINB&(1<<PINB2)))&index>1)i ndex--;
                            while(!(PINB&(1<<PINB2)));
                            /*------------------------------------------------*/
                            if(!(PINB&(1<<PINB3)))direct^=0x01;
                            while(!(PINB&(1<<PINB3)));
                            /*---------------------------------------------------------*/
                            if(!(PINB&(1<<PINB4))){
                            TCCR1A=0xF2;
                            OCR1A=0;
                            OCR1B=0;
                            BR=1;}
                            while(!(PINB&(1<<PINB4)));
                            /*-----------------------------------------------------------*/
                            if(direct==1&BR==0){
                            TCCR1A=0xC2;
                            OCR1A=speed[index];
                            }
                            if(direct==0&BR==0){
                            TCCR1A=0x32;
                            OCR1B=speed[index];
                            }
                            }
                            }

                            دیدگاه


                              #15
                              پاسخ : پروژه های انجام شده با کامپایلر IAR

                              با سلام آق مجتبی میشه این قسمت برنامه اتونا یه توضیح بدید برای این برنامه است((راه اندازی 7 سگمنت 4 رقمی با قابلیت تغییر مقدار هر رقم به صورت چشمک زن ))
                              ممنون از شما
                              DATA = nom[Cdgit[dg]];
                              SCAN |= (1<<dg);
                              if(dg==TCNT1&++i<130)SCAN=0;
                              if(++dg>3)dg=0;

                              دیدگاه

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