اطلاعیه

Collapse
No announcement yet.

سوالی در مورد چند خط کد در i2c

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

    سوالی در مورد چند خط کد در i2c

    سلام دوستام . میخواستم i2c رو راهاندازی کنم(بدون کد ویزارد و توابع خود کد ویژین ) هر کاری کردم نشد چند خط کد هست تو کتب مختلف که اصلا متوجه نمیشم میخواستم اگه میشه کمک کنید
    کد:
    if(twsr&0xf8) =! 0x80)
    error();
    در اینجا اون & بیتی به چه دردی میخوره؟ اصلا & اینجا به چه صورت اجرا میشه ؟ من تکیشو دیده بودم مثل: while(PINC & 0x04) که اگه پورت مورد نظر رو بیت 2 رو روشن میکردم تو حلقه while میرفت اما این که مساوی چیزی باشه تا حالا برخورد نکرده بودم
    توی کد پایین اگه اینتراپت 1 نشه میاد و وضیت رو چک میکنه . مگه نباید اول اینتراپت یک شه تا وضیت رو چک کنیم؟؟؟ببینیم که اسلیو چی کار کرده؟
    کد:
    while(!TWCR&0x80);
    if((twsr & 0xf8 != 0x08)
    error();
    error : nop //
    در مورد & تا اونجا که میدونم میاد تک تک بیتارو با هم مقایسه میکنه مثلا
    0X05&0X04 =0X04
    اگه درست گفته باشم !!!
    اما اینجا معنیشو متوجه نمیشم . ممنون میشم اساتید کمک کنن
    یه سوال دیگه میشه از کدهای زیر به جای بالاییا استفاده کرد؟
    کد:
    if(twsr != 0x80)
    error();
    /////////////////////////////////
    while(TWCR!=0x80);
    اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
    هيتلر

    #2
    پاسخ : سوالی در مورد چند خط کد در i2c

    میدونم سوالم پیش پا افتادست اما کسی نمیتونه کمک کنه؟!
    اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
    هيتلر

    دیدگاه


      #3
      پاسخ : سوالی در مورد چند خط کد در i2c

      سلام دوست عزیز.
      اول به شما بگم میکروتونو مشخص کنید.
      دوم بگم که کدی که شما دیدید شبه به کد i2c در arm هستش نه avr
      سوم بگم کتابخانه i2c.h در کدویژن هستش که شما باید پروتوکل رو خودتون ایجاد کنید.
      برای نوشتن روی i2c device:
      start();
      wirte(slave address+0;
      write(inside register;
      write (data;
      stop;

      برای خوندن هم روشهای مختلفی هستش که بهترینش اینه چون اطلاعات رجیستری رو میخونه که شما مد نظر دارید
      روش خوندن:
      start()
      write(address+0
      start()
      write(address+1
      write( inside register
      read(data from register
      stop();
      برای راهنمایی میتونی به فولدر lib بری و ds1307 رو با نوت پد نگاه کنی ببینی چیکار کرده :biggrin:
      k

      دیدگاه


        #4
        پاسخ : سوالی در مورد چند خط کد در i2c

        نوشته اصلی توسط ali_k
        سلام دوست عزیز.
        اول به شما بگم میکروتونو مشخص کنید.
        دوم بگم که کدی که شما دیدید شبه به کد i2c در arm هستش نه avr
        سوم بگم کتابخانه i2c.h در کدویژن هستش که شما باید پروتوکل رو خودتون ایجاد کنید.
        برای نوشتن روی i2c device:
        start();
        wirte(slave address+0;
        write(inside register;
        write (data;
        stop;

        برای خوندن هم روشهای مختلفی هستش که بهترینش اینه چون اطلاعات رجیستری رو میخونه که شما مد نظر دارید
        روش خوندن:
        start()
        write(address+0
        start()
        write(address+1
        write( inside register
        read(data from register
        stop();
        برای راهنمایی میتونی به فولدر lib بری و ds1307 رو با نوت پد نگاه کنی ببینی چیکار کرده :biggrin:
        سلام ممنون از جواب :mrgreen: . قبلا با کمک توایه کدویژن این کارو کردم . اما می خوام خودم هدرش رو بنویسم و تو کار با رجیسترهاش مشکل دارم
        اتفاقا من این تجربه رو برای راه اندازی آرم میخوام وگرنه تو کدویژن توابع اماده هستش
        اما دلیل یک سری از کارارو نمیفهمم مثلا همون & شدنا که اصلا چرا باس TWSR & 0xf8 بشه؟؟ تا اونجا که میدونم TWSR==0x08 اوکی هست دیگه & واسه چیه؟ این جور چیزارو یکم گیرم! در ضمن کدهای بالا رو مد MT بود
        اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
        هيتلر

        دیدگاه


          #5
          پاسخ : سوالی در مورد چند خط کد در i2c

          من در مورد رجیستر های avr چیزی نمیگم چون از کتابخونه ها استفاده کردم ونیازیم به رجیستر نویسی نبوده. اما توی آرم دلیل & ها چک کردن رجیستر i2c با مقدار مرجع هستش مثلادرlpc1768 شما مدام باید رجیستر status رو بخونی اگر0x08 & یعنی استارت ارسال شده و وقتی مینویسن whlie(i2c_stat&0x08) یعنی بیتهای دیگه ماسک بشن و دقیقا بشه 08 تازه آخر while هم سمیکلن میذارن تا وقتی که برابر 08 نشده به خط بعدی نره و صبر کنه در اون نقطه. که چون از وقفه استفاده نکرده خواسته مطمعن بشه.که اگر از وقفه استفاده کنی بسیار بهتر هستش.
          k

          دیدگاه


            #6
            پاسخ : سوالی در مورد چند خط کد در i2c

            نوشته اصلی توسط ali_k
            من در مورد رجیستر های avr چیزی نمیگم چون از کتابخونه ها استفاده کردم ونیازیم به رجیستر نویسی نبوده. اما توی آرم دلیل & ها چک کردن رجیستر i2c با مقدار مرجع هستش مثلادرlpc1768 شما مدام باید رجیستر status رو بخونی اگر0x08 & یعنی استارت ارسال شده و وقتی مینویسن whlie(i2c_stat&0x08) یعنی بیتهای دیگه ماسک بشن و دقیقا بشه 08 تازه آخر while هم سمیکلن میذارن تا وقتی که برابر 08 نشده به خط بعدی نره و صبر کنه در اون نقطه. که چون از وقفه استفاده نکرده خواسته مطمعن بشه.که اگر از وقفه استفاده کنی بسیار بهتر هستش.
            ممنون
            کد:
            if(twsr&0xf8) =! 0x80)
            تو کد بالا اول 0xf8 رو & میکنه . با TWSR بعد شرط رو مقایسه میکنه این به ایم معنیه هر وقت TWSR خودش بشه 0X08 شرط درسته!! این یعنی 0x08= 0x08 دیگه چرا (0x08 &0xf8)=0xf8 ؟؟ این جا دلیل & شدن با 0xf8 رو متوجه نمیشم!
            بعد اینجا یه مشکل دیگم هست اگه جواب0x18 باشه اون موقه ماسک کردن 0x08 ازش بیرون میاد اما و شرط درسته به قول خودتون اون 4 بیت دوم هم که 1 هست ماسک میشه اما این کد برای چیز دیگست . ییهنی بین 4 ام فقط واسش مهمه که روشنه یا نه اگه بقیه بیتهام 1 باشه هیچکدومو حساب نمیکنه ! این اشتباه نیست؟
            اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
            هيتلر

            دیدگاه


              #7
              پاسخ : سوالی در مورد چند خط کد در i2c

              دوست من برات مثال زدم. کد f8 کدی هستش که وقتی i2cرو اینیشیالاز میکنی و اینیبل میشه f8 رو بهت میده میخواد مطمعن بشه که درست اینیت شده به دیتا شیت مراجعه کن! نکته دوم از کتابخونه استفاده کن. راحتتری نیاز نیست چرخ رو دوباره اختراع کنی اما واسه علم خودت بد نیست که بفهمی کتابخونه های دیگه چیکار کردن.نکته سوم بهتر نیست با لحنی ملایم تر سوال کنی؟درسته من تازه وارد هستم اما چیزهای خیلی کمی بلدم که میتونه به خیلیا کمک کنه!
              k

              دیدگاه


                #8
                پاسخ : سوالی در مورد چند خط کد در i2c

                نوشته اصلی توسط ali_k
                دوست من برات مثال زدم. کد f8 کدی هستش که وقتی i2cرو اینیشیالاز میکنی و اینیبل میشه f8 رو بهت میده میخواد مطمعن بشه که درست اینیت شده به دیتا شیت مراجعه کن! نکته دوم از کتابخونه استفاده کن. راحتتری نیاز نیست چرخ رو دوباره اختراع کنی اما واسه علم خودت بد نیست که بفهمی کتابخونه های دیگه چیکار کردن.نکته سوم بهتر نیست با لحنی ملایم تر سوال کنی؟درسته من تازه وارد هستم اما چیزهای خیلی کمی بلدم که میتونه به خیلیا کمک کنه!
                دوست عزیز به خدا لحن من ملایمههه من حرفی نزدم که :sad: شما به بزرگواریه خودتون ببخشید !! درسته شما خیلی چیزا بلد هستی اتفاقا از من هم بهتر بلد هستین . نمیدونم کجای صحبتم باعث شد فکر کنید من با لحن بدی صحبت می کنم اما مطمئن باشید من هم چین جسارتی نمیکنم . همه کسایی که اینجان استاد من هستن و تا امروز خیلی بهم کمک کردن من همچین جسارتی رو نمیکنم که با کسی بد حرف بزنم . از لطف شمام بابات پاسختون ممنونم
                اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                هيتلر

                دیدگاه


                  #9
                  پاسخ : سوالی در مورد چند خط کد در i2c

                  مشکلی نیست .من با i2c arm زیاد سروکله زدم نوشتن نسبتا راحته اما خوندن اونم به اون روشی که من گفتم در بالا بسیار مشکله.خودم هم از یک کتابخونه استفاده کردم که همون جوابی رو میداد که من با رجیستر نویسی گرفتم.اگه آرمت 1768 هستش کتاب آقای خوش باطن بسیار کمکت میکنه. :nice:
                  k

                  دیدگاه


                    #10
                    پاسخ : سوالی در مورد چند خط کد در i2c

                    نوشته اصلی توسط ali_k
                    مشکلی نیست .من با i2c arm زیاد سروکله زدم نوشتن نسبتا راحته اما خوندن اونم به اون روشی که من گفتم در بالا بسیار مشکله.خودم هم از یک کتابخونه استفاده کردم که همون جوابی رو میداد که من با رجیستر نویسی گرفتم.اگه آرمت 1768 هستش کتاب آقای خوش باطن بسیار کمکت میکنه. :nice:
                    نه متاسفانه 2368 استفاده میکنم . کتابخونش هست اما من یه مزضی دارم راستش :mrgreen: که دوست دارم تا جایی که میتونم همه کارو خودم انجام بدم که این واسم مشکل شده از اونجا که سی رو هم کلاسی چیزی نرفتم تو این مبحثاش یکم گیر میکنم تازه کارم هستم 3 ساله دست پا شیکسته کار میکنم اما خوب حل میشه اینام اینم دارم روش کار میکنم امید وارم بتونم جواب بگیرم :mrgreen:
                    اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                    هيتلر

                    دیدگاه


                      #11
                      پاسخ : سوالی در مورد چند خط کد در i2c

                      دوست عزیز خوشحالم که تونستم کمک کوچکی بکنم باید بگم سری 2000 با 1000 رجیسترهاش خیلی تفاوت نداره اما چون کورش کورتکس هست توابع cmsis در بعضی مواقع خیلی به درد بخور هستش.برای نوشتن کتابخونه اول باید کد نویسیتو قوی کنی بعد کتابخونه بنویسی. اگه کتابخونه به درد بخوری نوشتی(چون ریدینگ به صورت رندم بسیار مشکله) پلود کن تا من و دوستان دیگه هم استفاده کنیم و دعات کنیم. :biggrin:به جای کتابخونه خارجی از داخلیش استفاده کنیم.
                      k

                      دیدگاه


                        #12
                        پاسخ : سوالی در مورد چند خط کد در i2c

                        نوشته اصلی توسط ali_k
                        دوست عزیز خوشحالم که تونستم کمک کوچکی بکنم باید بگم سری 2000 با 1000 رجیسترهاش خیلی تفاوت نداره اما چون کورش کورتکس هست توابع cmsis در بعضی مواقع خیلی به درد بخور هستش.برای نوشتن کتابخونه اول باید کد نویسیتو قوی کنی بعد کتابخونه بنویسی. اگه کتابخونه به درد بخوری نوشتی(چون ریدینگ به صورت رندم بسیار مشکله) پلود کن تا من و دوستان دیگه هم استفاده کنیم و دعات کنیم. :biggrin:به جای کتابخونه خارجی از داخلیش استفاده کنیم.
                        والا من اینارو نوشتم و تست کردم رو مدار همش کار میکرد اما نمیدونم از لحاظ برنامه نویسی مشکلی داره یا . اتفاقا خوشحال میشم اگه مشکلی داشت بهم بگید
                        http://www.mediafire.com/?1xpjvo1wj1b36pe
                        این لینکشه
                        تو هد نویسی همیشه یا & | >> << مشکل داشتم :mrgreen: کلن تو هر کدی میاد حال گیریه واسم
                        اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                        هيتلر

                        دیدگاه


                          #13
                          پاسخ : سوالی در مورد چند خط کد در i2c

                          ممنون از بابت کتابخونه ها اما منظورمن i2c ,spi هستش .اما باز هم متشکر.
                          k

                          دیدگاه


                            #14
                            پاسخ : سوالی در مورد چند خط کد در i2c

                            نوشته اصلی توسط ali_k
                            ممنون از بابت کتابخونه ها اما منظورمن i2c ,spi هستش .اما باز هم متشکر.
                            خواهش میکنم اینارو که خودتون مطمئنن دارید :biggrin: . اونارو که هنوز نرسیدم سرش :mrgreen: میخواستم اول رو avr پیادش کنم بعد ببرمش رو arm
                            اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                            هيتلر

                            دیدگاه

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