NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3286 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 5 از 5

موضوع: معنی دو آدرس در کدهای i2c

  1. #1
    کاربر فعال
    تاریخ عضویت
    Jul 2012
    نوشته ها
    101
    تشکر
    23
    تشکر شده 3 بار در 1 پست

    پیش فرض معنی دو آدرس در کدهای i2c

    با سلام دوستان لطفا میشه توضیح بدید برای این دو آدرس زیر کدام آدرس ها روم باید قرار بدهیم
    I2C_InitStructure.I2C_OwnAddress1 = ؟ اینجا منظور چه آدرسی است
    I2C_Send7bitAddress(I2C2,Address, I2C_Direction_Transmitter; و در این کد
    من یه آدرس slave Address دارم در سخت افزارم که 0x20 را برای نوشتن و 0x21 را برای خواندن تعیین کرده و یک سری آدرسهای ریجیستر با دیتاهای مربوطه؛آیا باید salveaddress رو اینجا قرار بدهم یا باید slaveaddress را هم بصورت I2C_Senddata ارسال کنم
    و سوال دیگرم اینکه آیا کد زیر برای ارسال ACK کافی است؟
    I2C_AcknowledgeConfig(I2C2,ENABLE);

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    Banned
    تاریخ عضویت
    Apr 2013
    نام
    صادق علی بخشی
    نوشته ها
    1,148
    تشکر
    1,183
    تشکر شده 1,276 بار در 702 پست

    پیش فرض

    نقل قول نوشته اصلی توسط Raha323 نمایش پست ها
    با سلام دوستان لطفا میشه توضیح بدید برای این دو آدرس زیر کدام آدرس ها روم باید قرار بدهیم
    I2C_InitStructure.I2C_OwnAddress1 = ؟ اینجا منظور چه آدرسی است
    I2C_Send7bitAddress(I2C2,Address, I2C_Direction_Transmitter; و در این کد
    من یه آدرس slave Address دارم در سخت افزارم که 0x20 را برای نوشتن و 0x21 را برای خواندن تعیین کرده و یک سری آدرسهای ریجیستر با دیتاهای مربوطه؛آیا باید salveaddress رو اینجا قرار بدهم یا باید slaveaddress را هم بصورت I2C_Senddata ارسال کنم
    و سوال دیگرم اینکه آیا کد زیر برای ارسال ACK کافی است؟
    I2C_AcknowledgeConfig(I2C2,ENABLE);
    سلام
    شما ادرس ادرس ماژول رو با I2C_Send7bitAddress ارسال مکنید
    ادرس رجیسترهای ماژول هم مثل یک دیتا باید ارسال بشه
    این هم یک تابع برای ارسال
    کد:
    void I2C_EE_ByteWrite(uint8_t* pBuffer, uint16_t WriteAddr){
        /* Send STRAT condition */
        I2C_GenerateSTART(I2C_EE, ENABLE);
    
    
        /* Test on EV5 and clear it */
        while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_MODE_SELECT));
    
    
        /* Send EEPROM address for write */
        I2C_Send7bitAddress(I2C_EE, EEPROM_ADDRESS, I2C_Direction_Transmitter);
    
    
        /* Test on EV6 and clear it */
        while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
    
    
        /* Send the EEPROM's internal address to write to : MSB of the address first */
        I2C_SendData(I2C_EE, (uint8_t)((WriteAddr & 0xFF00) >> 8));
    
    
        /* Test on EV8 and clear it */
        while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    
    
        /* Send the EEPROM's internal address to write to : LSB of the address */
        I2C_SendData(I2C_EE, (uint8_t)(WriteAddr & 0x00FF));
    
    
        /* Test on EV8 and clear it */
        while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    
    
        /* Send the byte to be written */
        I2C_SendData(I2C_EE, *pBuffer);
    
    
        /* Test on EV8 and clear it */
        while(!I2C_CheckEvent(I2C_EE, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    
    
        /* Send STOP condition */
        I2C_GenerateSTOP(I2C_EE, ENABLE);
    }

  4. تشکرها از این نوشته :


  5. #3
    کاربر فعال
    تاریخ عضویت
    Jul 2012
    نوشته ها
    101
    تشکر
    23
    تشکر شده 3 بار در 1 پست

    پیش فرض

    خیلی ممنون پس آدرس ownaddress1 مهم نیست؟
    من وقتی وایل ها رو میذارم جواب نمیگیرم سخت افزار من max9860 هست وقتی رجیستری را رایت میکنم دیگر نمیتوانم بخونم دینای اشتباه پاسخ میدهد
    به نظر من باید زمان رایت I2C_Send7bitAddress(I2C_EE,0x20, I2C_Direction_Transmitter);
    ,وزمان خواندن
    I2C_Send7bitAddress(I2C2,0x21, I2C_Direction_Transmitter
    بنویسم و این سخت افزار نیاز به ACK دارد آیا دستور بالا برای ACK کافیست؟
    ممنون از پاسخ دهی دقیق اتون

  6. #4
    Banned
    تاریخ عضویت
    Apr 2013
    نام
    صادق علی بخشی
    نوشته ها
    1,148
    تشکر
    1,183
    تشکر شده 1,276 بار در 702 پست

    پیش فرض

    نقل قول نوشته اصلی توسط Raha323 نمایش پست ها
    خیلی ممنون پس آدرس ownaddress1 مهم نیست؟
    من وقتی وایل ها رو میذارم جواب نمیگیرم سخت افزار من max9860 هست وقتی رجیستری را رایت میکنم دیگر نمیتوانم بخونم دینای اشتباه پاسخ میدهد
    به نظر من باید زمان رایت I2C_Send7bitAddress(I2C_EE,0x20, I2C_Direction_Transmitter);
    ,وزمان خواندن
    I2C_Send7bitAddress(I2C2,0x21, I2C_Direction_Transmitter
    بنویسم و این سخت افزار نیاز به ACK دارد آیا دستور بالا برای ACK کافیست؟
    ممنون از پاسخ دهی دقیق اتون
    سلام
    من زیاد با میکرو های stm کار نکردم
    فکر میکنم ownaddress1 برای ادرس سخت افزاری باشه که به خودش تعلق داره(ادرس st)
    توی دستورات cmsis برای lpc1768 که خودش تمام کارهای ارسال و دریافت ack رو انجام میداد
    در مورد ادرس 0x20 یا 0x21 هم با ارگومان سوم توی تابع I2C_Send7bitAddress مشخص میکنه که باید بیت 7 صفر باشه یا یک
    کل مثال رو میتونید از پیوست دریافت کنید

  7. تشکرها از این نوشته :


  8. #5
    کاربر فعال
    تاریخ عضویت
    Jul 2012
    نوشته ها
    101
    تشکر
    23
    تشکر شده 3 بار در 1 پست

    پیش فرض

    ممنون ولی باز هم چیزی که ارسال میکنم با مقداری که از همان رجیستر میخوانم متفاوت است
    آیا کسی رو مشناسید که در stm بتونه کمک دقیق تری بهم بکنه ممنون الان فقط در وایل
    while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    میکروم هنگ میکنه در ما بقی هنگ نمیکند و آیا همین کد برای ارسال ACK کافیست؟ و در دیتا شیت max9860 گفته شده آخرین ACK باید not باشد به چه صورت ارسال کنم؟در صفحه 35
    فايل هاي پيوست شده فايل هاي پيوست شده

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •