اطلاعیه

Collapse
No announcement yet.

راه اندازی ADXL345 با SPI در LPC1768

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

    راه اندازی ADXL345 با SPI در LPC1768

    سلام خدمت همه ی اساتید عزیز
    من می خوام سنسور ADXL345 رو با SPI به کمک کتابخونه های CMSIS بخونم ولی وقتی برناممو با اسیلوسکوپ چک می کنم SCK میکرو فرکانس تولید نمی کنه.
    #include "lpc17xx_spi.h"
    #include "lpc17xx_libcfg_default.h"
    #include "lpc17xx_pinsel.h"
    #include "debug_frmwrk.h"
    #include "lpc17xx_gpio.h"

    #define SPI_DATABIT_SIZE 16
    #define RA_DEVID 0x00 // R 0xE5 Device ID

    void Delay (uint32_t Time)
    {
    uint32_t i;

    i = 0;
    while (Time--) {
    for (i = 0; i < 5000; i++);
    }
    }


    SPI_CFG_Type SPI_ConfigStruct;
    //SPI_CFG_Type SPI_InitStruct;

    int main(void)
    {

    PINSEL_CFG_Type PinCfg;
    SPI_DATA_SETUP_Type xferConfig;
    PinCfg.Funcnum = 3;
    PinCfg.OpenDrain = 0;
    PinCfg.Pinmode = 0;
    PinCfg.Portnum = 0;
    PinCfg.Pinnum = 15;
    PINSEL_ConfigPin(&PinCfg);
    PinCfg.Pinnum = 17;
    PINSEL_ConfigPin(&PinCfg);
    PinCfg.Pinnum = 18;
    PINSEL_ConfigPin(&PinCfg);
    PinCfg.Pinnum = 16;
    PinCfg.Funcnum = 0;
    PINSEL_ConfigPin(&PinCfg);

    SPI_ConfigStruct.CPHA = SPI_CPHA_SECOND;
    SPI_ConfigStruct.CPOL = SPI_CPOL_LO;
    SPI_ConfigStruct.ClockRate = 3200;
    SPI_ConfigStruct.DataOrder = SPI_DATA_MSB_FIRST;
    SPI_ConfigStruct.Databit = SPI_DATABIT_SIZE;
    SPI_ConfigStruct.Mode = SPI_MASTER_MODE;

    // SPI_ConfigStructInit(SPI_InitStruct);
    SPI_Init(LPC_SPI, &SPI_ConfigStruct);
    SPI_SetClock(LPC_SPI,3200);
    SPI_IntCmd(LPC_SPI,ENABLE);

    GPIO_SetDir(0,(1<<16),1);
    GPIO_ClearValue(0,(1<<16));


    while(1)
    {

    SPI_SendData(LPC_SPI,0x01);



    }

    }
    فرکانس SPI رو می خوام 3200 هرتز کنم.اگه مشکلی تو config دارم بهم بگین چون تو آرم تازه کارم و اولین باره دارم SPI رو راه اندازی می کنم.
    ممنون
    "لحظه پيروزي از آن جهت برايم شيرين است که ملت کشورم را در آرامش و شادي ببينم"
    نادر شاه

    #2
    پاسخ : راه اندازی ADXL345 با SPI در LPC1768

    با سلام
    این سوال رو جواب بدین تا شاید بگم بهتون مشکل رو،(چون دیتاشیت 1768 ندارم خودتون بگین)
    پایه ای که به عنوان cs یا ss انتخاب کردین، ایا جزو پایه های spi هست یا یه gpio رو به این کار اختصاص دادین؟
    The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

    دیدگاه


      #3
      پاسخ : راه اندازی ADXL345 با SPI در LPC1768

      ممنون مهندس.
      بله از پایه های SPI هستش.من پایه P0.16 رو انتخاب کردم.
      "لحظه پيروزي از آن جهت برايم شيرين است که ملت کشورم را در آرامش و شادي ببينم"
      نادر شاه

      دیدگاه


        #4
        پاسخ : راه اندازی ADXL345 با SPI در LPC1768

        همون P0.16 را GPIO کن و خودت تو برنامه هنگام ارسال 0 و در صورت عدم ارسال یک کن
        امیدوارم مشکل حل شه

        دیدگاه


          #5
          پاسخ : راه اندازی ADXL345 با SPI در LPC1768

          خب اگه هست که هیچی، میگم شاید به یکی کمک کنه، من با 1788 spi که کار کردم، تا هر چهار پایه spi تو مد خودشون کانفیگ نشن کلاک نمیده بیرون spi، یعنی حتی اگه یه gpio رو به منظور cs استفاده می کنید، ولی پایه ss ماژول spi رو تعریف کنید و بذارین به حال خودش
          The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

          دیدگاه


            #6
            پاسخ : راه اندازی ADXL345 با SPI در LPC1768

            هم اکنون نیازمند یاری شما هستم :angry: :angry: :angry:
            من با CMSIS این کدارو نوشتم و می خوام از سنسور فقط device ID رو بخونم ولی چرتو پرت بهم میده.واقعا هنگم
            دوستانی که کار کردن لطفا راهنمایی بفرمایند :sad: :sad: :sad:
            کد:
            #include "lpc17xx_spi.h"
            #include "lpc17xx_pinsel.h"
            #include "lpc17xx_gpio.h"
            
            
            #define CS_PORT_NUM		0
            #define CS_PIN_NUM		16
            #define SPI_DATABIT_SIZE 		8
            #define BUFFER_SIZE			0x40
            
            #define _deviceID    0x00
            #define _POWER_CTL   0x2D  //REGISTER ADDRESS is 0x2D POWER_CTL 0x08 START MEASUREMENT
            #define _DATA_FORMAT  0x31
            #define _BW_RATE    0x2C
            #define _DATAX0     0x32
            #define _DATAX1     0x33
            #define _DATAY0     0x34
            #define _DATAY1     0x35
            #define _DATAZ0     0x36
            #define _DATAZ1     0x37
            #define _FIFO_CTL    0x38
            #define _SPI_READ    0x80
            #define _SPI_WRITE   0x00
            #define _SPEED     0x0F            // Buffer Speed - 3200Hz
            #define ACCEL_MASK   0x01ff
            
            
            //int16_t I=0,ii=0;
            uint32_t tmp,I,I1;
            unsigned short internal = 0,address=0;
            
            SPI_CFG_Type SPI_ConfigStruct;
            void CS_Init(void);
            void CS_Force(int32_t state);
            void Config_ADIS(void);
            /*************************************/
            void CS_Init(void)
            {
            	GPIO_SetDir(CS_PORT_NUM, (1<<CS_PIN_NUM), 1);
            	GPIO_SetValue(CS_PORT_NUM, (1<<CS_PIN_NUM));
            }
            /*************************************/
            
            void CS_Force(int32_t state)
            {
            	if (state){
            		GPIO_SetValue(CS_PORT_NUM, (1<<CS_PIN_NUM));
            	}else{
            		GPIO_ClearValue(CS_PORT_NUM, (1<<CS_PIN_NUM));
            	}
            }
            /*************************************/
            void Config_ADIS(void){
             	CS_Force(0);
            		for (tmp = 100; tmp; tmp--);
            	 
            		address=_POWER_CTL;
            		//address=0x2d00;
            	 internal = address | _SPI_WRITE;
            	 SPI_SendData(LPC_SPI,internal);
            		while( !(LPC_SPI->SPSR & 0x80));//wait for transfer to be completed
            		SPI_SendData(LPC_SPI,0x00);
            		while( !(LPC_SPI->SPSR & 0x80));//wait for transfer to be completed
            				
            	 	address=_DATA_FORMAT;
            	 //address=0x310b;
            	 internal = address | _SPI_WRITE;
            		SPI_SendData(LPC_SPI,internal);
            		while( !(LPC_SPI->SPSR & 0x80));//wait for transfer to be completed
            		SPI_SendData(LPC_SPI,0x00);
            		while( !(LPC_SPI->SPSR & 0x80));//wait for transfer to be completed
            						
            		address=_BW_RATE;
            		//address=0x2c0f;
            	 internal = address | _SPI_WRITE;
            		SPI_SendData(LPC_SPI,internal);
            		while( !(LPC_SPI->SPSR & 0x80));//wait for transfer to be completed
            		SPI_SendData(LPC_SPI,_SPEED);
            		while( !(LPC_SPI->SPSR & 0x80));//wait for transfer to be completed
            		
            		address=_POWER_CTL;
            		//address=0x2d08;
            	 internal = address | _SPI_WRITE;
            		SPI_SendData(LPC_SPI,internal);
            		while( !(LPC_SPI->SPSR & 0x80));//wait for transfer to be completed
            		SPI_SendData(LPC_SPI,0x08);
            		while( !(LPC_SPI->SPSR & 0x80));//wait for transfer to be completed
            	 //I=0x100;
            		UARTPuts_(LPC_UART0,"BEM1");
            		CS_Force(1);
            		for (tmp = 100; tmp; tmp--);
            }
            /*************************************/
            
            
            
            PINSEL_CFG_Type PinCfg;
            
            int main(void){
            	
            	SystemInit();
            	
            	PinCfg.Funcnum = 3;
            	PinCfg.OpenDrain = 0;
            	PinCfg.Pinmode = 0;
            	PinCfg.Portnum = 0;
            	PinCfg.Pinnum = 15;
            	PINSEL_ConfigPin(&PinCfg);
            	PinCfg.Pinnum = 17;
            	PINSEL_ConfigPin(&PinCfg);
            	PinCfg.Pinnum = 18;
            	PINSEL_ConfigPin(&PinCfg);
            	PinCfg.Pinnum = 16;
            	PinCfg.Funcnum = 0;
            	PINSEL_ConfigPin(&PinCfg);
            	
            	
            	SPI_ConfigStruct.CPHA = SPI_CPHA_SECOND;
            	SPI_ConfigStruct.CPOL = SPI_CPOL_LO;
            	SPI_ConfigStruct.ClockRate = 1000000;
            	SPI_ConfigStruct.DataOrder = SPI_DATA_MSB_FIRST;
            	SPI_ConfigStruct.Databit = SPI_DATABIT_SIZE;
            	SPI_ConfigStruct.Mode = SPI_MASTER_MODE;
            	
            	
            	SPI_Init(LPC_SPI, &SPI_ConfigStruct);
             debug_frmwrk_init();
            	CS_Init();
            	Config_ADIS();
             for (tmp = 100; tmp; tmp--);	
            	while(1){
            		
            		
            		CS_Force(0);
            	
            		
            		address=_deviceID;
            		internal = address | _SPI_READ;
            	 	SPI_SendData(LPC_SPI,internal);
            		while( !(LPC_SPI->SPSR & 0x80));//wait for transfer to be completed
            		I=SPI_ReceiveData(LPC_SPI);
            		for (tmp = 100000; tmp; tmp--);
            	 UARTPuts_(LPC_UART0,"Device ID is: ");
            		for (tmp = 100000; tmp; tmp--);
            		UARTPuts_(LPC_UART0,I);	
            		for (tmp = 1000000; tmp; tmp--);
            
            		CS_Force(1);
            	}
            	
            }
            "لحظه پيروزي از آن جهت برايم شيرين است که ملت کشورم را در آرامش و شادي ببينم"
            نادر شاه

            دیدگاه

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