ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 2 از 3 نخست 123 آخرین
نمایش نتایج: از 11 به 20 از 21
  1. #11
    2014/10/30
    isf
    282
    61

    پاسخ : مشکل با ادرس ها در 24c1024

    نقل قول نوشته اصلی توسط reza0506

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    با تابع hal_i2c_write میتونی هر دفعه آدرس حافظه رو بدی و یه بایت بنویسی
    ولی با همون برنامه قبلی باید میشد،شما با چی دیباگ میکنید؟
    اگه منظورتون نوع پرگرامرم هست که همین jlink شرکت eca هست.
    توی کد زیر توجه داشته باشید یه متغیر به نام K وجود داره که بعد از گذشتن از هر تابع +1 میشه.
    حالا این K حدود شیش ثانیه روی 3 گیرمیکنه( قبل از تابع I2C_WaitOnFlagUntilTimeout )و بعد 4 میشه و هیچ موقع هم بیشتر از 4 نمیشه. یعنی برنامه از تابع HAL_I2C_Mem_Write پریده بیرون
    کد:
    HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
    {
      /* Check the parameters */
        K=1;
      assert_param(IS_I2C_MEMADD_SIZE(MemAddSize));
    
      if(hi2c->State == HAL_I2C_STATE_READY)
      {
        if((pData == NULL) || (Size == 0))
        {
          return  HAL_ERROR;K=2;
        }
            K=3;
        /* Wait until BUSY flag is reset */
        if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG) != HAL_OK)
        {
                    K=4;return HAL_BUSY;
        }
                K=5;
        /* Process Locked */
        __HAL_LOCK(hi2c);
    
        /* Disable Pos */
        CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS);
    
        hi2c->State = HAL_I2C_STATE_BUSY_TX;
        hi2c->Mode = HAL_I2C_MODE_MEM;
        hi2c->ErrorCode = HAL_I2C_ERROR_NONE;
    
        /* Send Slave Address and Memory Address */
        if(I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout) != HAL_OK)
        {
                K=6;
          if(hi2c->ErrorCode == HAL_I2C_ERROR_AF)
          {
            /* Process Unlocked */
            __HAL_UNLOCK(hi2c);
            return HAL_ERROR;
    ....
  2. #12
    2014/03/08
    بابلسر
    884
    373

    پاسخ : مشکل با ادرس ها در 24c1024

    نقل قول نوشته اصلی توسط hosseinghaheri

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    اگه منظورتون نوع پرگرامرم هست که همین jlink شرکت eca هست.
    توی کد زیر توجه داشته باشید یه متغیر به نام K وجود داره که بعد از گذشتن از هر تابع +1 میشه.
    حالا این K حدود شیش ثانیه روی 3 گیرمیکنه( قبل از تابع I2C_WaitOnFlagUntilTimeout )و بعد 4 میشه و هیچ موقع هم بیشتر از 4 نمیشه. یعنی برنامه از تابع HAL_I2C_Mem_Write پریده بیرون
    کد:
    HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
    {
      /* Check the parameters */
        K=1;
      assert_param(IS_I2C_MEMADD_SIZE(MemAddSize));
    
      if(hi2c->State == HAL_I2C_STATE_READY)
      {
        if((pData == NULL) || (Size == 0))
        {
          return  HAL_ERROR;K=2;
        }
            K=3;
        /* Wait until BUSY flag is reset */
        if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG) != HAL_OK)
        {
                    K=4;return HAL_BUSY;
        }
                K=5;
        /* Process Locked */
        __HAL_LOCK(hi2c);
    
        /* Disable Pos */
        CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_POS);
    
        hi2c->State = HAL_I2C_STATE_BUSY_TX;
        hi2c->Mode = HAL_I2C_MODE_MEM;
        hi2c->ErrorCode = HAL_I2C_ERROR_NONE;
    
        /* Send Slave Address and Memory Address */
        if(I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout) != HAL_OK)
        {
                K=6;
          if(hi2c->ErrorCode == HAL_I2C_ERROR_AF)
          {
            /* Process Unlocked */
            __HAL_UNLOCK(hi2c);
            return HAL_ERROR;
    ....
    منظورم اینه که با چه نرم افزاری دیباگ رو انجام میدید؟
    چطور k رو بررسی میکنید؟
    به نظر من بعد نوشتن دوباره از ای سی بخونید و تو متغیر جدید قرار بدید و ببینید اون متغیر ها برابر با خونه های ای سی میشن یا نه.
  3. #13
    2014/10/30
    isf
    282
    61

    پاسخ : مشکل با ادرس ها در 24c1024

    نقل قول نوشته اصلی توسط reza0506

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    منظورم اینه که با چه نرم افزاری دیباگ رو انجام میدید؟
    چطور k رو بررسی میکنید؟
    به نظر من بعد نوشتن دوباره از ای سی بخونید و تو متغیر جدید قرار بدید و ببینید اون متغیر ها برابر با خونه های ای سی میشن یا نه.
    از کامپایلر کیل استفاده میکنم.
    و وضعیت k را توی دیباگ از watch1 بررسی میکنم.

    این کاری که گفتید را قبلا هم تست کردم ولی باز هم جواب نداد.
    یعنی شیش هفت ثانیه روی تابع write و شی هفت ثانیه هم رو تابع read تاخیر داره که اصلا معقولی نیست.

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

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  4. #14
    2014/03/08
    بابلسر
    884
    373

    پاسخ : مشکل با ادرس ها در 24c1024

    این برنامه باید جواب بده من فقط برای آدرس شک دارم که باید 0x00A0 باشه یا 0x0A
    درضمن کدی که برای خوندن نوشتی اشتباهه،چون آدرس 16 بیتیه و شما آدرس رو 8 بیتی معرفی کردی
    کد:
    #define I2C_MEMADD_SIZE_8BIT            ((uint32_t)0x00000001)
    #define I2C_MEMADD_SIZE_16BIT           ((uint32_t)0x00000010)
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    از stm32f103ret6 استفاده میکنی؟
    اگه وقت کردم امشب خودم برنامشو برات مینویسم.
  5. #15
    2014/10/30
    isf
    282
    61

    پاسخ : مشکل با ادرس ها در 24c1024

    نقل قول نوشته اصلی توسط reza0506

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    این برنامه باید جواب بده من فقط برای آدرس شک دارم که باید 0x00A0 باشه یا 0x0A
    درضمن کدی که برای خوندن نوشتی اشتباهه،چون آدرس 16 بیتیه و شما آدرس رو 8 بیتی معرفی کردی
    کد:
    #define I2C_MEMADD_SIZE_8BIT            ((uint32_t)0x00000001)
    #define I2C_MEMADD_SIZE_16BIT           ((uint32_t)0x00000010)
    اخه من هم 0x00a0 و هم 0x0a را تست کردم.
    قسمت خوندن راهم درست میگید ، از قبل بوده فراموش کردم.

    ولی مشکلی که هست به احتمال زیاد مربوط به MEMADD_SIZE هست که همون اول کار بعد از این که چند خط را اجرا کرد و وارد تابع I2C_WaitOnFlagUntilTimeout دگ میپره بیرون

    چون قبل از تابع I2C_WaitOnFlagUntilTimeout فقط از MEMADD_SIZE استفاده شده
  6. #16
    2014/03/08
    بابلسر
    884
    373

    پاسخ : مشکل با ادرس ها در 24c1024

    نقل قول نوشته اصلی توسط hosseinghaheri

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    اخه من هم 0x00a0 و هم 0x0a را تست کردم.
    قسمت خوندن راهم درست میگید ، از قبل بوده فراموش کردم.

    ولی مشکلی که هست به احتمال زیاد مربوط به MEMADD_SIZE هست که همون اول کار بعد از این که چند خط را اجرا کرد و وارد تابع I2C_WaitOnFlagUntilTimeout دگ میپره بیرون

    چون قبل از تابع I2C_WaitOnFlagUntilTimeout فقط از MEMADD_SIZE استفاده شده
    راستی متغیرت رو global معرفی کردی دیگه؟
    قبل حلقه int main(void) درسته؟
  7. #17
    2014/10/30
    isf
    282
    61

    پاسخ : مشکل با ادرس ها در 24c1024

    نقل قول نوشته اصلی توسط reza0506

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    از stm32f103ret6 استفاده میکنی؟
    اگه وقت کردم امشب خودم برنامشو برات مینویسم.
    من توی این پروژه از stm32f103vctx تو پکت LQFP100 استفاده میکنم.
    البته فک نمیکنیم توی این مبحث با هم تفاوتی داشته باشند.

    ولی اگه این کار رو انجام بدید خیلی ازتون ممنون میشم ، خیلی لطف میکنید

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

    نقل قول نوشته اصلی توسط reza0506

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    راستی متغیرت رو global معرفی کردی دیگه؟
    قبل حلقه int main(void) درسته؟
    بله همون اول کار بعد از include ها همون طور که فرمودید
  8. #18
    2014/03/08
    بابلسر
    884
    373

    پاسخ : مشکل با ادرس ها در 24c1024

    من این برنامه رو برای بورد خودم stm32f103ret6 نوشتم و جواب داد شما از این برنامه استفاده کن اگر بازم مشکلی داشتی بگو تا برنامشو خودم برای میکروت بنویسم
    بعد اینکلود دو متغیر زیر رو تعربف کن:
    کد:
    uint8_t transmit[5]={10,20,30,40,50};
    uint8_t receive[5];
    و تو برنامه اصلیت (int main(void)) یا تو حلقه وایلش برنامه زیر رو بنویس
    کد:
    HAL_I2C_Mem_Write(&hi2c2,0xA0,0x0000,I2C_MEMADD_SIZE_16BIT,transmit,5,1000);
      HAL_Delay(100);
      HAL_I2C_Mem_Read(&hi2c2,0xA0,0x0000,I2C_MEMADD_SIZE_16BIT,receive,5,1000);
    من با stmstudio چک کردم و درست بوده
    درضمن برای آدرس چه بنویسی 0x00A0 یا 0xA0 درست کار میکنه.
  9. #19
    2014/10/30
    isf
    282
    61

    پاسخ : مشکل با ادرس ها در 24c1024

    نقل قول نوشته اصلی توسط reza0506

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    من این برنامه رو برای بورد خودم stm32f103ret6 نوشتم و جواب داد شما از این برنامه استفاده کن اگر بازم مشکلی داشتی بگو تا برنامشو خودم برای میکروت بنویسم
    بعد اینکلود دو متغیر زیر رو تعربف کن:
    کد:
    uint8_t transmit[5]={10,20,30,40,50};
    uint8_t receive[5];
    و تو برنامه اصلیت (int main(void)) یا تو حلقه وایلش برنامه زیر رو بنویس
    کد:
    HAL_I2C_Mem_Write(&hi2c2,0xA0,0x0000,I2C_MEMADD_SIZE_16BIT,transmit,5,1000);
      HAL_Delay(100);
      HAL_I2C_Mem_Read(&hi2c2,0xA0,0x0000,I2C_MEMADD_SIZE_16BIT,receive,5,1000);
    من با stmstudio چک کردم و درست بوده
    درضمن برای آدرس چه بنویسی 0x00A0 یا 0xA0 درست کار میکنه.

    واقعا ممنون از لطفی که کردید.
    کدی که دادی را توی یک پروژه جدید اجرا کردم و مشکل نداشت و کار میکنه ، حالا باید کد را به پروژه اصلی منتقل کنم.
    بازم تشکر میکنم از وقتی که گذاشتید
  10. #20
    2009/09/13
    1
    0

    پاسخ : مشکل با ادرس ها در 24c1024

    [QUOTE=hosseinghaheri;654748]سلام خدمت همه ی دوستان.
    چطوری میتونم توی stm32 با کتاب خانه hal با 24c1024 ارتباط برقرار کنم.
    میدونم ادرس ها به صورت 16 بیتی هست و باید در قالب دو بایت ارسال بشه ولی توی hal نمیدونم چطوری باید این کار را انجام بدم.
    من همه کد های زیر را تست کردم. ولی هیچ کدوم جواب نداد و مقدار برگشتی این تابع برابر HAL_BUSY هست.

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

    سلام دوست عزیز
    همین مشکل را در نوشتن در حافظه 24C08 دارم و با نوشتن در آدرس حافظه های بالای 255 بوجود میاد
    سپاسگزارم:


    HAL_I2C_Mem_Write(&hi2c2,0xA0,0x0000,I2C_MEMADD_SI ZE_16BIT,transmit1,5,1000);
    HAL_Delay(100);
    HAL_I2C_Mem_Read(&hi2c2,0xA0,0x0000,I2C_MEMADD_SIZ E_16BIT,receive,5,1000);




    //----------------------------------------------------------------------------------
    row = 4;
    HAL_I2C_Mem_Write(&hi2c2,0xA0,0x0140,I2C_MEMADD_SI ZE_16BIT,transmit2,5,1000);
    HAL_Delay(100);
    HAL_I2C_Mem_Read(&hi2c2,0xA0,0x0140,I2C_MEMADD_SIZ E_16BIT,receive,5,1000);


    //----------------------------------------------------------------------------------
    row = 6;


    HAL_Delay(100);
    HAL_I2C_Mem_Read(&hi2c2,0xA0,0x0000,I2C_MEMADD_SIZ E_16BIT,receive,5,1000);


    اطلاعات خوانده شده در این مرحله بهم ریخته هست
    ویرایش توسط kambiz51 : 2018/01/21 در ساعت 12:25
صفحه 2 از 3 نخست 123 آخرین
نمایش نتایج: از 11 به 20 از 21

موضوعات مشابه

  1. مشکل در نوشتن و خواندن از یک خانه حافظه با ادرس مشخص
    توسط alireza_xani در انجمن پردازش سیگنال
    پاسخ: 2
    آخرين نوشته: 2016/12/30, 00:04
  2. مشکل در ادرس دهی AT24C256 eeprom
    توسط m410 در انجمن NXP
    پاسخ: 6
    آخرين نوشته: 2012/04/13, 11:42
  3. ادرس دهی حافظه فلش
    توسط milad066 در انجمن كامپيوتر ، اينترنت و علوم مرتبط
    پاسخ: 1
    آخرين نوشته: 2012/01/07, 10:42
  4. در مورد 24C1024, ATMEGA64
    توسط payaimen در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2008/11/30, 16:07
  5. روش های ادرس دهی (کمک)
    توسط zizo2566 در انجمن برنامه نویسی و اینترفیس
    پاسخ: 0
    آخرين نوشته: 2008/05/07, 15:43

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

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

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