اطلاعیه

Collapse
No announcement yet.

راهنمایی در راه اندازی واحد i2cدر میکرو stm32f103zet6با کیل ()

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

    راهنمایی در راه اندازی واحد i2cدر میکرو stm32f103zet6با کیل ()

    با سلام واردات به دوستان عزیزم.
    من یه مدتیه که دارم برروی میکروی 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 
    لطفا برای من روشن کنید ببینید مشکل من کجاست؟
    جدیدترین ویرایش توسط Namvar14; ۰۱:۲۶ ۱۴۰۰/۰۳/۲۳.
    eshop-hodhod.ir

    #2
    پاسخ : راهنمایی در راه اندازی واحد i2cدر میکرو stm32f103zet6با کیل ()

    یک اشکالی که من توی بردهای موجود دیدم این بود که وقتی میکرو رو روی جالت آلترنت فانکشن تنظیم میکنی برای i2c باید خودت جداگانه مقاومت های ۱۰ کیلویی برای خطوط انتقال و کلاک قرار بدی . یا اینکه پایه ها رو خروجی و پول آپ کنی و پروتکل i2c رو بصورت نرم افزاری ایجاد کنی .

    دیدگاه


      #3
      پاسخ : راهنمایی در راه اندازی واحد i2cدر میکرو stm32f103zet6با کیل ()

      بهصورت نرمافزاری بهچه صورته؟کسی جایی توضیح نداده.
      eshop-hodhod.ir

      دیدگاه


        #4
        پاسخ : راهنمایی در راه اندازی واحد i2cدر میکرو stm32f103zet6با کیل ()

        لینک :

        دیدگاه


          #5
          پاسخ : راهنمایی در راه اندازی واحد i2cدر میکرو stm32f103zet6با کیل ()

          نوشته اصلی توسط sorena01 نمایش پست ها
          تشکر فراوان.اگه بازهم به مشکلی خوردم سورنای عزیزعزیز می پرسم.
          eshop-hodhod.ir

          دیدگاه


            #6
            پاسخ : راهنمایی در راه اندازی واحد i2cدر میکرو stm32f103zet6با کیل ()

            1-ابتدا باید وضعیت استارت ایجاد بشه
            -- بعد از اون میکرو باید چن میلی ثانیه (به شکل تایم آوت) مداوم چک کنه وضعیت استارت ایجاد شده یا نه. اگر شده بود که ادامه میده اگر نشده بود و وقتش تموم شده بود، خطا برگردونه و کار متوقف شه
            2-در قدم بعدی باید ادرس سنسور (Slave) را بر روی سنسور بنویسیم.چون عملیات نوشتن صورت میگیره بیت هشتم باید صفر باشه.که درنهایت باید 0x80برای سنسورارسال بشه
            -- بعد از اون میکرو باید چن میلی ثانیه مداوم چک کنه وضعیت ACK ایجاد شده یا نه. اگر شده بود که ادامه میده اگر نشده بود و وقتش تموم شده بود، خطا برگردونه و کار متوقف شه
            3-بعد از ارسال بایت ادرس،باید فرمان 0xE3را برای سنسور بفرستیم.
            -- بعد از اون میکرو باید چن میلی ثانیه مداوم چک کنه وضعیت ACK ایجاد شده یا نه. اگر شده بود که ادامه میده اگر نشده بود و وقتش تموم شده بود، خطا برگردونه و کار متوقف شه

            --پس استاپ کو ؟ بعد از استاپ هم باید وایسید که مطمئن شید استاپ شده.
            وضعیت ری استارت با استارت معمولی فرق میکنه. ری استارت تو این استفاده با این سنسور بکار نمیاد چون تو استارت اول، میخواید بنویسید تو استارت دوم میخواید بخونید. ری استارت مال زمانیه که شما آدرس اسلیو و وضعیت خوندن نوشتن رو تغییر ندید.



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

            دلیل: ادغام دو پست برای جلوگیری از اسپم

            چیزایی هم که نوشته بودین درایور های CMSIS نیستن. کتابخونه های stdperiph اس تی هستن.
            اون بخش های CM3_Core و اینا با اینکه جزو کتابخونه CMSIS محسوب میشن ولی ربطی به اون CMSIS که مد نظر من و شماس ندارن.
            Si vis pacem, para bellum

            دیدگاه

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