با سلام واردات به دوستان عزیزم.
من یه مدتیه که دارم برروی میکروی stm32f با توابع CMSIS در کیل کار میکنم.در حال حاضر برد کاتالیست stm32f103zetرو از همین ecaخریداری کردم.تونستم باهاش کار کنم.ولی اخیرا در راهاندازی سنسور htu21بااین میکرو به شدت درمونده شدم.الان حدود 10روزی میشه که درگیرم.هرکاری میکنم نمیتونم دیتای سنسوررا دریافت کنم.(مشکلم ارتباط i2cهست.)حتی ارتباط هم برقرار نمیشه.من کتاب اقای سینا کلانی وحمید نجفی رو هم دارم.طبق فرامین اونها عمل میکنم.ولی نمیشه.
----------------یه توضیحی درموورد نوع ارتباط با سسنور میدهم
1-ابتدا باید وضعیت استارت ایجاد بشه
2-در قدم بعدی باید ادرس سنسور (Slave) را بر روی سنسور بنویسیم.چون عملیات نوشتن صورت میگیره بیت هشتم باید صفر باشه.که درنهایت باید 0x80برای سنسورارسال بشه
3-بعد از ارسال بایت ادرس،باید فرمان 0xE3را برای سنسور بفرستیم.
4-مجددا شرایط starرا ایجاد میکنیم.
5-مجدددا ادرس slaveر ا با این وضعیت که میخواهیم ار سنسور بخوانیم برای سنسورارسال میکنیم.در این حالت بیت هشتم باید یک باشد.0x81
{تا اینجای کار تمام عملیات های نوشتن برروی سنسور انجام میشد ولی طبق دیتاشیت از اینجا به بعد بایدمنتظر خواندن بایت های ارسالی ا ز سنسور باشم.)
6-خوندن بایت اول
7-خوندن بایت دوم
8-خوندن بایت سوم.این بایت درواقع بایت crcسنسور است.چون نمی خواهیم بایت یگه ارسال بشه وعملیات وخاتمه بدهیم در اینجا باید یک Nackایجاد کینم.
9-در اخرین مرحله هم وضعیت stopرابرای خاتمه ارتباط برای باسi2cایجاد میکنیم.
10-طبق فرمول زیر دمارا از دیتا ها استخراج میکنیم.
-------------------------------------------------------------------------------
قطعه کد زیر برای ارتباط با سنسوره:
لطفا برای من روشن کنید ببینید مشکل من کجاست؟
من یه مدتیه که دارم برروی میکروی stm32f با توابع CMSIS در کیل کار میکنم.در حال حاضر برد کاتالیست stm32f103zetرو از همین ecaخریداری کردم.تونستم باهاش کار کنم.ولی اخیرا در راهاندازی سنسور htu21بااین میکرو به شدت درمونده شدم.الان حدود 10روزی میشه که درگیرم.هرکاری میکنم نمیتونم دیتای سنسوررا دریافت کنم.(مشکلم ارتباط i2cهست.)حتی ارتباط هم برقرار نمیشه.من کتاب اقای سینا کلانی وحمید نجفی رو هم دارم.طبق فرامین اونها عمل میکنم.ولی نمیشه.
----------------یه توضیحی درموورد نوع ارتباط با سسنور میدهم
1-ابتدا باید وضعیت استارت ایجاد بشه
2-در قدم بعدی باید ادرس سنسور (Slave) را بر روی سنسور بنویسیم.چون عملیات نوشتن صورت میگیره بیت هشتم باید صفر باشه.که درنهایت باید 0x80برای سنسورارسال بشه
3-بعد از ارسال بایت ادرس،باید فرمان 0xE3را برای سنسور بفرستیم.
4-مجددا شرایط starرا ایجاد میکنیم.
5-مجدددا ادرس slaveر ا با این وضعیت که میخواهیم ار سنسور بخوانیم برای سنسورارسال میکنیم.در این حالت بیت هشتم باید یک باشد.0x81
{تا اینجای کار تمام عملیات های نوشتن برروی سنسور انجام میشد ولی طبق دیتاشیت از اینجا به بعد بایدمنتظر خواندن بایت های ارسالی ا ز سنسور باشم.)
6-خوندن بایت اول
7-خوندن بایت دوم
8-خوندن بایت سوم.این بایت درواقع بایت crcسنسور است.چون نمی خواهیم بایت یگه ارسال بشه وعملیات وخاتمه بدهیم در اینجا باید یک Nackایجاد کینم.
9-در اخرین مرحله هم وضعیت stopرابرای خاتمه ارتباط برای باسi2cایجاد میکنیم.
10-طبق فرمول زیر دمارا از دیتا ها استخراج میکنیم.
کد PHP:
byt5=( byt1 << 8)|byt2;
temp=(((float)byt5 /65535)*175.72 )-46.85 ;
قطعه کد زیر برای ارتباط با سنسوره:
کد PHP:
while(I2C_GetFlagStatus(I2C1 , I2C_FLAG_BUSY));
I2C_GenerateSTART(I2C1,ENABLE); //while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1,0x40,I2C_Direction_Receiver); //while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1,0xE3 );delay_ms(50);/*0xE3*/ //while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTART(I2C1,ENABLE); //while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1,0x40,I2C_Direction_Transmitter);
delay_ms(50);
byt1=I2C_ReceiveData(I2C1); I2C_AcknowledgeConfig(I2C1,ENABLE);
byt2=I2C_ReceiveData(I2C1); I2C_AcknowledgeConfig(I2C1,ENABLE);
byt3=I2C_ReceiveData(I2C1); I2C_AcknowledgeConfig(I2C1,DISABLE);
I2C_GenerateSTOP(I2C1,ENABLE);
byt5=( byt1 << 8)|byt2;
temp=(((float)byt5 /65535)*175.72 )-46.85 ;
دیدگاه