اطلاعیه

Collapse
No announcement yet.

راه اندازی ماژول gy_80 با sam7x256

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

    راه اندازی ماژول gy_80 با sam7x256

    با سلام حدمت تمامی اساتید
    یه ماژول gy_80 خریدم و میخوام با i2c راه اندازی کنم
    بعضی از آدرس ها رو توی دیتاشیت میکرو گیر آوردم ولی کلا نمیدونم روند برنامه نویسی مازول چیه و کاملا گیج شدم
    اگه این ماژول manual داره که لطفا لینکش رو بذارید
    اگه هم کسی اونو راه اندازی کرده یا تجربه ای داره لطفا کمک کنه
    من میخوام همه ی سنسور هاشو به جز فشار سنج راه اندازی کنم
    الان هم دور سنسور قطبنمای اون هستم
    با تشکر از همگی

    #2
    پاسخ : راه اندازی ماژول gy_80 با sam7x256

    اصلا خود ماژول بی خیال
    کسی نمیتونه در مورد راه اندازی شتاب سنج سه محوره ADXL345 که با i2c میکرو آرم اتمل کار کنه کمکم کنه
    این که کدوم رجیستر ها رو باید مقدار داد
    و روند کلی برنامه نویسی اون
    ممنون

    دیدگاه


      #3
      پاسخ : راه اندازی ماژول gy_80 با sam7x256

      یه برنامه برای شتاب سنج نوشتم
      اگه منیشه اساتید یه نگاهی بهش بکنن و اشکالات اونو بهم بگن
      مشکل برنامه کجاست که هر وقت میخوام دیتایی رو بخونم بهم صفر رو نمایش میده
      احساس میکنم یه پیش نیاز هایی که من رعایت نمیکنم
      رجیستر های اولیه شاید درست مقدار دهی نشده اند
      یا کد های مربوط به tft مشکل دارن
      برای دیباگ برنامه هر چند خط یه بار خواستم که یه عدد نشونم بده
      ولی موقعی میکرو رو پروگرم میکنم جاهایی که میخوام عددی رو بهم نشون بده صفر نشون میده
      اگه میشه کسایی که کار کردن کمک کنن
      ممنون
      اینم کد

      کد:
      #include <at91sam7x256.h>
      #include <delay.h>
      #include <TFTLCD.h>
      #include <math.h>
      #include <stdlib.h>
      
      char PORTRAIT=0;
      
      unsigned int Accel_Xout_Val=0, Accel_Yout_Val=0, Accel_Zout_Val=0;
      int Accel_Xout_Normalized_Val=0, Accel_Yout_Normalized_Val=0, Accel_Zout_Normalized_Val=0;
       char Offset_X_Val=0,Offset_Y_Val=0,Offset_Z_Val=0;
      char Accel_XAngle=0, Accel_YAngle=0, Accel_ZAngle=0;
      
       char X_Angle[10];
       char Y_Angle[10];
       char Z_Angle[10];
      
      int tftshow_X;
      int tftshow_Y;
      int tftshow_Z;
      
      int main(){
      	
      	tftlcd_init();
      	tftlcd_putchar('1',BLUE,GREEN,1);
      	
      	*AT91C_PMC_PCER = (1<<9);
      	
      //I2c Configuration	PIO
       *AT91C_PIOA_PDR = (1<<10 | 1<<11);					  
       *AT91C_PIOA_ASR = (1<<10 | 1<<11);				    
       *AT91C_PIOA_MDER = (1<<10 | 1<<11);					  
       *AT91C_PIOA_PPUER = (1<<10 | 1<<11);
      	
      	//I2c Configuration 
       *AT91C_TWI_CWGR = 0x00017676;	
       *AT91C_TWI_CR =0x4;
      	
       *AT91C_TWI_MMR = 0x7B0200;//Device Address ADXL345=0xE5
       *AT91C_TWI_IADR = 0x3139;
       *AT91C_TWI_THR = 0x0B;
       delay_ms(1000);
      	
       *AT91C_TWI_MMR = 0x0E50100;//Device Address ADXL345=0xE5
       *AT91C_TWI_IADR = 0x2D;
       *AT91C_TWI_THR = 0x08;
       delay_ms(1000);
       
       *AT91C_TWI_MMR = 0x0E50100;//Device Address ADXL345=0xE5
       *AT91C_TWI_IADR = 0x2E;
       *AT91C_TWI_THR = 0x80;
       delay_ms(1000);
       
       tftlcd_putchar('2',BLUE,GREEN,1);
       
      	while(1){
      		
       *AT91C_TWI_MMR = 0xE51100;//Device Address ADXL345=0xE5
       *AT91C_TWI_IADR = 0x1E;
       *AT91C_TWI_CR =0x3;
       Offset_X_Val= *AT91C_TWI_RHR;
      	//	tftshow_X = (int)(Offset_X_Val);
      	//	sprintf(X_Angle,"%d",tftshow_X);
      	//	tftlcd_puts(X_Angle,BLUE,GREEN,1);
      
      
       *AT91C_TWI_MMR = 0xE51100;//Device Address ADXL345=0xE5
       *AT91C_TWI_IADR = 0x1F;
       Offset_Y_Val= *AT91C_TWI_RHR;
      
       *AT91C_TWI_MMR = 0xE51100;//Device Address ADXL345=0xE5
       *AT91C_TWI_IADR = 0x20;
       Offset_Z_Val= *AT91C_TWI_RHR;
      tftlcd_putchar('3',BLUE,GREEN,1);		
      	
      
      		
      		*AT91C_TWI_MMR = 0xE51100;//Device Address ADXL345=0xE5
       *AT91C_TWI_IADR = 0x33;
       Accel_Xout_Normalized_Val= *AT91C_TWI_RHR;
      		
      		*AT91C_TWI_MMR = 0xE51100;//Device Address ADXL345=0xE5
       *AT91C_TWI_IADR = 0x35;
       Accel_Yout_Normalized_Val= *AT91C_TWI_RHR;
       
       *AT91C_TWI_MMR = 0xE51100;//Device Address ADXL345=0xE5
       *AT91C_TWI_IADR = 0x37;
       Accel_Zout_Normalized_Val = *AT91C_TWI_RHR;
       tftlcd_putchar('4',BLUE,GREEN,1);
       
       
       
       // Convert Unsigned Int To Int
        Accel_Xout_Normalized_Val = Accel_Xout_Val;
        Accel_Yout_Normalized_Val = Accel_Yout_Val;
        Accel_Zout_Normalized_Val = Accel_Zout_Val;
      		tftlcd_putchar('5',BLUE,GREEN,1);
      		
      	Accel_Xout_Val = Accel_Xout_Val-Offset_X_Val;
       Accel_Yout_Val = Accel_Yout_Val-Offset_Y_Val;
      	Accel_Zout_Val = Accel_Zout_Val-Offset_Z_Val;
      	tftlcd_putchar('6',BLUE,GREEN,1);
      	
      	// Calculate The Angle Of Each Axis
      	Accel_XAngle = 57.295*atan((float) Accel_Xout_Normalized_Val / sqrt(pow((float)Accel_Zout_Normalized_Val,2)+pow((float)Accel_Yout_Normalized_Val,2)));
      	Accel_YAngle = 57.295*atan((float) Accel_Yout_Normalized_Val / sqrt(pow((float)Accel_Zout_Normalized_Val,2)+pow((float)Accel_Xout_Normalized_Val,2)));
       Accel_ZAngle = 57.295*atan((float) sqrt(pow((float)Accel_Xout_Normalized_Val,2)+pow((float)Accel_Yout_Normalized_Val,2))/ Accel_Zout_Normalized_Val );
      	tftlcd_putchar('7',BLUE,GREEN,1);
       // ftoa(Accel_XAngle,4,X_Angle);
      	
      	 tftshow_X = (int)(Accel_XAngle);
      	 tftshow_Y = (int)(Accel_YAngle);
      	 tftshow_Z = (int)(Accel_ZAngle);
      	 tftlcd_putchar('8',BLUE,GREEN,1);
      	 
      	 sprintf(X_Angle,"%d",tftshow_X);
      	 sprintf(Y_Angle,"%d",tftshow_Y);
      	 sprintf(Z_Angle,"%d",tftshow_Z);
      	 tftlcd_putchar('9',BLUE,GREEN,1);
      	 
      	 tftlcd_puts(X_Angle,BLUE,GREEN,1);
      	 tftlcd_puts(Y_Angle,BLUE,GREEN,1);
      	 tftlcd_puts(Z_Angle,BLUE,GREEN,1);
      	 tftlcd_putchar('10',BLUE,GREEN,1);
      	 
      	}
      	
      }

      دیدگاه


        #4
        پاسخ : راه اندازی ماژول gy_80 با sam7x256

        حقیقتشو بخای باید حتما ماژول باشه و کار کنیم تا جواب بده
        من دارمروی ی GY-521 کار میکنم و ایشالا بزودی راه میندازمش.
        باید قشنگ دیتا شیت رو بخونی رو بفهمی که چه کنی تا چه بشه. راه دیگه ای نداره
        کسه دیگه ای این ماژول رو خریداری نکرده و روش کار نکرده؟
        زندگی یعنی امید و حرکت
        کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
        سؤالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
        برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
        به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

        دیدگاه


          #5
          پاسخ : راه اندازی ماژول gy_80 با sam7x256

          ممنون از جوابتون
          راستش رو بخواید این ماژول هیج manual ی نداره
          دیتاشیت قطب نما و شتاب سنج رو خوندم
          مثال ها رو هم دیدم
          احساس میکنم رجبستر های کمی رو مقدار دهی میکنم
          یه پیش نیاز های بیشتری داره
          شبیه ساز KEIL هم کامل جواب میده
          برنامه قطب نما رو هم میذارم اگه وقت داشتید و خوصله کردید نگاهی به دیتاشبت بندازید ببینید من کجا دارم رجیستر رو کم مقدار دهی میکنم
          کد:
          #include <at91sam7x256.h>
          #include <delay.h>
          #include <TFTLCD.h>
          #include <stdio.h>
           
          char PORTRAIT = 0;
          char data;
          char LCD_Show[10];
          
          int main(){
          	
          	tftlcd_init();
          		
           *AT91C_PMC_PCER = (1<<9);
          	
          //I2c Configuration	PIO
           *AT91C_PIOA_PDR = (1<<10 | 1<<11);					  
           *AT91C_PIOA_ASR = (1<<10 | 1<<11);				    
           *AT91C_PIOA_MDER = (1<<10 | 1<<11);					  
           *AT91C_PIOA_PPUER = (1<<10 | 1<<11);
          	
          //I2c Configuration 
           *AT91C_TWI_CWGR = 0x00017676;	
           *AT91C_TWI_CR =0x4;
          	
           *AT91C_TWI_MMR = 0x3C0100;//Device Address(Compass) = 0x3C
           *AT91C_TWI_IADR = 0x00;
           *AT91C_TWI_THR = 0x71;
           delay_ms(1000);
          	
           *AT91C_TWI_MMR = 0x3C0100;//Device Address(Compass) = 0x3C 
           *AT91C_TWI_IADR = 0x01;
           *AT91C_TWI_THR = 0xA0;
           delay_ms(1000);
           
           *AT91C_TWI_MMR = 0x3C0100;//Device Address(Compass) = 0x3C
           *AT91C_TWI_IADR = 0x02;
           *AT91C_TWI_THR = 0x00;
           delay_ms(1000);
           tftlcd_putchar('1',BLUE,GREEN,1);
          	
          	while(1){
          		
           *AT91C_TWI_MMR = 0x3D1100;			
           *AT91C_TWI_IADR = 0x06;	
          	*AT91C_TWI_CR =0x3;
          	tftlcd_putchar('2',BLUE,GREEN,1);
          		
           while((*AT91C_TWI_SR & 0x2) == 0);
           data=*AT91C_TWI_RHR;
          	tftlcd_putchar('3',BLUE,GREEN,1);
           		
           while((*AT91C_TWI_SR & 0x1) == 0);	
           delay_ms(10);
           tftlcd_putchar('4',BLUE,GREEN,1);		
          			
           sprintf(LCD_Show,"%d",data);
           tftlcd_puts(LCD_Show,BLUE,GREEN,1);
           delay_ms(1000);	
           tftlcd_putchar('5',BLUE,GREEN,1);
          		
           *AT91C_TWI_MMR = 0x3C0100;//Device Address(Compass) = 0x3C
           *AT91C_TWI_IADR = 0x03;
          		
          	}	
          }
          واقعا شرمنده از این که وقتتون رو گرفتم
          اگه وقت کردید یه نگاه بهش بندازید
          واقعا ممنون

          دیدگاه

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