اطلاعیه

Collapse
No announcement yet.

ارتباط دو میکرو از طریق i2c

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

    ارتباط دو میکرو از طریق i2c

    سلام
    من میخوام بین دو میکرو یکی 16f873 و یکی16f877 ارتباط از طریق i2c ایجاد کنم.و با نرم افزار ccs کار میکنم
    میخواستم بدونم دوستان پروژه ای که چنین کاری انجام داده باشه دارن؟
    یا اگه نه کمک کنید تا خودم برنامشو بنویسم. :redface:
    AYRIC

    #2
    پاسخ : ارتباط دو میکرو از طریق i2c

    خودم پیدا کردم :wow: :wow: :wow: :applause:
    یه کد خوب از تو سایت ccsinfo پیدا کردم. البته اون فقط دیتا رو ارسال کرده بود یه کم تغیرش دادم که بشه دیتا رو دریافت هم کرد.
    این هم کدی که نوشتم. گذاشتمش تا هرکس دیگه ای هم که بهش احتیاج داشت ازش استفاده کنه.
    http://s2.picofile.com/file/7886187204/I2C_communication.rar.html
    کد در کامپایلر CCS نوشته شده.
    دو تا سورس داخلش هست یکی برای slave و اون یکی برای master
    برنامه ها طوری نوشته شده اند که slave یه مقدار آنالوگ رو از پورت a0 میخونه و master اون مقدار رو از slave میگیره و روی lcd نمایش میده.
    master هم یه مقدار آنالوگ رو از پورت a0 خودش میخونه و برای slave میفرسته و slave اون مقدار رو روی کانال pwm خودش میذاره.
    توجه: برنامه رو توی پروتئوس آزمایش نکنید چون پروتئوس بخاطر باگ هایی که داره جواب نمیده. باید در عمل ببندیدش.
    AYRIC

    دیدگاه


      #3
      پاسخ : ارتباط دو میکرو از طریق i2c

      سلام.
      خوشحالم که اولین دانلود رو داشتم. :nerd:
      ممنون بابت انتشار اطلاعاتی که برای یادگرفتنش وقت گذاشتین و رایگان در اختیارمون قرار دادین.
      خیلی مایلم تا مدار رو تست کنم، اما فعلا هم سرم یه خرده شلوغه، هم وسایلهام دم دست نیست،اما حتما تستش میکنم و اگه جور دربیاد نتیجه ی تست و سوالات احتمالی رو میپرسم.
      مجددا ممنون...

      دیدگاه


        #4
        پاسخ : ارتباط دو میکرو از طریق i2c

        نوشته اصلی توسط شاهرخ
        سلام.
        خوشحالم که اولین دانلود رو داشتم. :nerd:
        ممنون بابت انتشار اطلاعاتی که برای یادگرفتنش وقت گذاشتین و رایگان در اختیارمون قرار دادین.
        خیلی مایلم تا مدار رو تست کنم، اما فعلا هم سرم یه خرده شلوغه، هم وسایلهام دم دست نیست،اما حتما تستش میکنم و اگه جور دربیاد نتیجه ی تست و سوالات احتمالی رو میپرسم.
        مجددا ممنون...
        اختیار دارید :nerd:
        برنامه ی یه master با چند تا slave رو هم میخوام بنویسم نوشتم اون رو هم میزارم
        AYRIC

        دیدگاه


          #5
          پاسخ : ارتباط دو میکرو از طریق i2c

          سلام
          اساتید بزرگ این برنامه ها را با کدویژن هم می توان نوشت در یک میکرو من دو adc را می خوانم و در x وyانها را ذخیره می کنم دو متغیر دیگر دارم که آنها را در eepromذخیره کردم a وbمن می خوام x,yرا در میکرو دیگه داشته باشم و بتونم روی lcd بدم وa,bرا نیز بتونم تعغیر بدم آیا میشه

          دیدگاه


            #6
            پاسخ : ارتباط دو میکرو از طریق i2c

            سلام.
            لطفا سوالتون رو واضحتر بفرمایین.(یه خرده هم به نگارش و املا دقت داشته باشین ممنون میشم :redface

            دیدگاه


              #7
              پاسخ : ارتباط دو میکرو از طریق i2c

              ببخشد
              با میکرو atmega16 و سنسورlm35یک برنامه نوشتم که مقدار سنسور ها را adc A.0 وA.1 خوانده ودر x وy ذخیره میکنه .
              و دو متغیر دیگه هم هست که آنها را در eepromذخیره کردم به نام های a وb .
              شرح کار طوری که اگه مقدارxاز a کمتر شد موتور 1 روشن اگر بیشتر شد موتور 1خاموش ، وهمین طور برای y وموتور 2 ،مقدار aوb را نیز توسط پایه های B0,B1,B2,B3 میکرو تنظیم می کنم کلیه اطلاعات روی ال سی دی هم نمایش داده میشه و یک حالت هشدار هم دارم که اگر دما از 85 بالا تر رفت یک آژیر هشدار می دهد.
              حالا من می خواستم کمکم کنید بتونم این data را در 50 متر فاصله روی یک میکرو دیگه ببرم و روی ال سی دی نمایش بدم و مقدار a,bرا هم در میکرو اولی تعقیر بدم آیا امکان داره؟

              دیدگاه


                #8
                پاسخ : ارتباط دو میکرو از طریق i2c

                نوشته اصلی توسط مجید باقری
                ببخشد
                با میکرو atmega16 و سنسورlm35یک برنامه نوشتم که مقدار سنسور ها را adc A.0 وA.1 خوانده ودر x وy ذخیره میکنه .
                و دو متغیر دیگه هم هست که آنها را در eepromذخیره کردم به نام های a وb .
                شرح کار طوری که اگه مقدارxاز a کمتر شد موتور 1 روشن اگر بیشتر شد موتور 1خاموش ، وهمین طور برای y وموتور 2 ،مقدار aوb را نیز توسط پایه های B0,B1,B2,B3 میکرو تنظیم می کنم کلیه اطلاعات روی ال سی دی هم نمایش داده میشه و یک حالت هشدار هم دارم که اگر دما از 85 بالا تر رفت یک آژیر هشدار می دهد.
                حالا من می خواستم کمکم کنید بتونم این data را در 50 متر فاصله روی یک میکرو دیگه ببرم و روی ال سی دی نمایش بدم و مقدار a,bرا هم در میکرو اولی تعقیر بدم آیا امکان داره؟
                دو تا دما خونده میشه و جداگانه ذخیره میشه.این دماها با سطوح a و b مقایسه میشن و دستوری داده میشه.حالا شما میخواین دما رو 50 متر دورتر روی LCD نشون بدین.(پس یه ارتباط rs-485 نیاز دارین و طبیعتا یه میکروی دوم برای دریافت دیتا)
                مقادیرaوb از کنار LCD قابل تنظیم باید باشه. به هر روشی که میخواین میتونین این مقادیر رو تنظیم کنین(کیبرد-ولوم و ADC-روتاری یا همون ولوم هرزگرد) و مثل همون دیتای دما که دریافت میکردین؛ این اطلاعات رو ارسال کنین.
                پیچیدگی خاصی داره؟

                دیدگاه


                  #9
                  پاسخ : ارتباط دو میکرو از طریق i2c

                  نوشته اصلی توسط مجید باقری
                  ببخشد
                  با میکرو atmega16 و سنسورlm35.... .
                  با سلام
                  با اجازه جناب آقای مهندس مستقیمی

                  دوست ارجمند جناب آقای باقری
                  با احترام این تالار گفتمان برای میکرو های PIC است در حالیکه شما نوشته اید Atmega16 که یک عضو از یک خانواده AVR است!! :eek:

                  حتما اگر در تالار های مربوطه اقدام کنید زودتر به نتیجه می رسید.

                  اما بر اساس تجربه های خودم عرض کنم خدمت تون که PIC پاسخی بسیار جالب و حیرت انگیز در برابر نویز دارد و الحق و الانصاف من که تا به حالا رقیبی برایش در محیط های پرنویز ندیدم که اینقدر ثبات و پایداری داشته باشد.
                  صرفا به عنوان مثال : من یک فیبر مدار چاپی ساخته بودم برای یک کارخانه تولید لوله های فشار قوی آب ، اینقدر محیط کارخانه پرنویز بود که از شدت هارمونی ها ، مرتب LCD نمایشگر پروژه می سوخت!!!! اما PIC عین ساعت کار می کرد و خطایی در محاسباتش نداشت!

                  ممکن است که بپرسید چرا من به نویز و تاثیر نپذیرفتن PIC از نویز اشاره کردم. دلیلش این است که شما به عبارت 50 متر فاصله اشاره داشتید که بین دو تا میکرو شما قرار می گیرد. همانطور که جناب آقای مهندس مستقیمی ، مدیر خوب ما در تالار PIC فرمایش فرمودند یک روش همین i2c است. اما من یک راه کار دیگه به شما پیشنهاد می کنم که خیلی راحت تر و بی دردسر تر از i2c است. آن چیزی نیست مگر ارتباط سریال به روش آسنکرون با استفاده از توابع SERIN & SEROUT ( دو تا تابع به عنوان مثال از مجموع 6 تابع دریافت و ارسال سریال) . در کل برای ارتباط بین دو تا میکرو PIC تا الان ( بر اساس تجربه و سواد من!!!) 6 روش وجود دارد که این ارتباط سریال آسنکرن و توابع SERIN & SEROUT یکی از شش روش است.
                  اگر که خواستید به خانواده PIC ملحق شوید ، به بنده بفرمائید تا به عنوان تبریک ورودتان به دنیای PICT و خوش آمد گویی :applause: ؛ تا در حد توان و اطلاعاتم در PICBASICPRO برنامه خواندن دما با LM35 را با ریزه کاری ها و جزئیات حرفه ای به همراه ارتباط Serial تا حدود 1000 متر ارسال و دریافت فقط بر روی یک سیم ! ! ! ! را برایتان بنویسم.
                  والسلام علي من اتبع الهدي .... و درود بر کساني که راه هدايت را دنبال مي کنند.

                  هوشمندانه بپرسيد...

                  دیدگاه


                    #10
                    پاسخ : ارتباط دو میکرو از طریق i2c

                    با سلام
                    تشکر می کنم از دوستان خوبم آقا ی مستقیمی و آقا رضا راستش من رشتم قدرته و 1 واحد الکترونیک هم پاس نکردم اما بر حسب علاقه و در همین سایت eca یه چیزایی دست و پا شکسته از avr یاد گرفتم ،من هم احتیاج به کار در محیط صنعتی داشتم و avr هم حساس در برابر نویز علاقه مند به picشدم ،ولی تو این انجمن چیزی که از ابتدا به یک مبتدی آموزش بده پیدا نکردم اگر بتونید راهنمایی کنید ممنون میشم
                    اول چه برنامه از کدوم لینک باید دانلود کنم
                    طریقه نصب آیا کرک خاصی داره
                    جزو در این زمینه البته برای یک مبتدی که هیچ چیزاز picنمی دونه جایی هست که بتونم دانلود کنم؟
                    اولین گام من چی باشه بهتره؟

                    دیدگاه


                      #11
                      پاسخ : ارتباط دو میکرو از طریق i2c

                      نوشته اصلی توسط مجید باقری
                      با سلام
                      تشکر می کنم از دوستان خوبم آقا ی مستقیمی و آقا رضا راستش من رشتم قدرته و 1 واحد الکترونیک هم پاس نکردم اما بر حسب علاقه و در همین سایت eca یه چیزایی دست و پا شکسته از avr یاد گرفتم ،من هم احتیاج به کار در محیط صنعتی داشتم و avr هم حساس در برابر نویز علاقه مند به picشدم ،ولی تو این انجمن چیزی که از ابتدا به یک مبتدی آموزش بده پیدا نکردم اگر بتونید راهنمایی کنید ممنون میشم
                      اول چه برنامه از کدوم لینک باید دانلود کنم
                      طریقه نصب آیا کرک خاصی داره
                      جزو در این زمینه البته برای یک مبتدی که هیچ چیزاز picنمی دونه جایی هست که بتونم دانلود کنم؟
                      اولین گام من چی باشه بهتره؟
                      جناب باقری عزیز،خیلی خیلی خوشحالم که شما با علاقه ی خودتون دارین این مطالب رو دنبال میکنین.
                      برای محیطهای صنعتی؛ عموما از پروتکل RS-485 استفاده میکنن که پروتکل خیلی پیچیده ای نیست و کار کردن باهاش به مراتب ساده تر و البته مطمئن تر از I2C هست.
                      تو بخش پروژه های تکمیل شده PIC ، دوتا پروژه با RS-485 گذاشتم.(با کامپایلر mikroC )
                      بالای همین انجمن : لینک های مفید PIC هست که متاسفانه خیلی بهش توجه نمیشه در حالی که برای مرتب کردن و استخراج لینکهای اون صفحه به صفحه ی انجمن PIC رو گشتم...
                      معرفی کتاب های آموزشی برای میکروکنترلرهای PIC هم لینک دیگه ای هست که میتونه براتون مفید باشه.
                      گام های اول هرکاری همیشه سخت هست و انرژی زیادی میبره ، اما به محض راه افتادن، ادامه ی راه راحت میشه. :nerd:

                      دیدگاه


                        #12
                        پاسخ : ارتباط دو میکرو از طریق i2c

                        نوشته اصلی توسط مجید باقری
                        ...
                        اولین گام من چی باشه بهتره؟
                        با سلام
                        به خدمت با سعادت شما دوست خوب عرض کنم که من مطمئن هستم که از انتخاب PIC به جای هر میکرو پروسسور دیگری که فعلا در دسترس هستند ، پشیمان نخواهید شد. اینکه می بینید از AVR خیلی استفاده می شود. الزاما تائید بر ضعف یا کمبود بقیه میکروپروسسور ها یا میکرو کنترلر ها نیست.
                        از نظر کمپایلر هم ، کمپایلرهای متفاوت و متنوعی در دسترس شما هستند که عمدتا بر مبنای زبان C هستند و یا Basic ؛ اگر چه شنیدم که برای فورترن و پاسکال هم کمپایلر PIC هست. C زبان بسیار قدرتمند و جامعی است. اما به نظر من کمپایلر PICBasicPro تمام گوشه هایی که C پوشش می دهد را پشتیبانی می کند. خیلی هم مثل C دست و پا گیر نیست( کلاً فکر کنم که حدود 37 تا دستور بیشتر ندارد). من برای یکی دیگر از دوستان در این لینک http://www.eca.ir/forum2/index.php?topic=89718.0 پاسخ شماره 6 ، توضیح دادم که می توانید مطالعه بفرمائید. من خودم با وجود اینکه با C آشنایی دارم اما مشتری پر و پا قرص PICBASICPRO هستم و قصد تغیییرش را هم ندارم. برای خودم یک دلیلی هم دارم آن هم این است که بعضی ها وسعت اطلاعاتشان مثل یک دریاست اما فقط به عمق یک بند انگشت ( یعنی همه چیز استفاده کرده اند اما به صورت سطحی) و بعضی ها اطلاعاتشان مثل چاه است. پهنای کمی دارد اما عمقش بسیار عالیست. لذا من عقیده دارم که اگر شما یک زبان را خوب یاد بگیرید بهتر از دانستن دو تا زبان است که نمی توانید آن را به خوبی اولی یاد بگیرید و در آن تبحر بیابید به یک دلیل ساده و آنهم وقت گذاشتن و تمرین کردن زیاد بر پایه مستحکم مطالعه است. اینکه چه زبانی را انتخاب می کنید زیاد اهمیت ندارد ، اما اینکه چقدر برایش وقت می گذارید و سختی هایش را تحمل می کنید و اجازه نمی دهید که مشکلات پیش آمده شما را خسته کند ، بیشتر مهم است. دوستان ارزشمندی در این تالارها عضو هستند که صبورانه پاسخگوی سوالات شما هستند.

                        در پاسخ جناب آقای مهندس مستقیمی هم تلویحاً این نکته وجود دارد که : خیلی دامنه مطالعات تان را زیاد کنید.

                        نقل از کتاب ANSI-C نوشته دنیس ریچی (ابداع کننده زبان C) و برایان کرنیگان (دستیارش) در نسخه انگلیسی آمده اسـت : در نوشتن نرم افزار و سورس کد دو 2 روش عمده وجود دارد :1) روش اسپاگتی ( مثل ماکارونی پخته شده داخل قابلمه که تو هم تو هم است (داخل یکدیگر و بی نظم ) که نمی توانید به راحتی بفهمید چی به چی است. مشکل این نوع نگارش این است که روز بعد خودتان سر در نمی آورید که چکار کرده اید !!! اگر هفته بعد به سراغش بروید که ممکن است هیچی سر در نیاورید!! توی این روش هیچ کس نمی تواند شما را در یافتن ایراد کمک کند ، زیرا به راحتی گیج و سر در گم می شود. 2) روش ساختار یافته : برنامه را به جز های هر چه کوچکتر تقسیم کنید ( از زیر روال ها تا می توانید استفاده کنید ) و سخاوتمندانه برای هر قسمت از برنامه (حتی اگر خیلی کوچک باشد) یک توضیح جامع و مناسب بنویسید. منظور و قصد و نیت خود را به صورت یادداشت در ضمن برنامه بیاورید Comment نویسی. نام متغیرها ، برچسب ها و ... را با معنی و مفهوم مرتبط و نزدیک به ذهن انتخاب کنید. تا حدی که امکان دارد از GOTO استفاده نکنید. زیرا GOTO برنامه شما را به سمت ماکارونی شدن پیش می برد.

                        آخرین نکته خیلی مهم : انجام کار عملی است. یعنی مدار را خودتان ببندید و بررسی کنید. به پروتئوس زیاد متکی نباشید. یک نکته بسیار جالب PIC این است که تا فرکانس 20 مگاهرتز روی BreadBoard به خوبی و بدون اشکال جواب می دهد. (بیشتر هم شاید کار کند ، اما من امتحان نکردم) در صورتیکه میکروکنترلرها و میکرو پروسسور های قدیمی تر این طوری نبودند و حتما باید روی فیبر مدار چاپی آزمایش شان می کردید!!!
                        والسلام علي من اتبع الهدي .... و درود بر کساني که راه هدايت را دنبال مي کنند.

                        هوشمندانه بپرسيد...

                        دیدگاه


                          #13
                          پاسخ : ارتباط دو میکرو از طریق i2c

                          roboreza , ممنون من سر این i2c کمی گیج شدم بعد دیدن این فایل مشکلم بر طرف شد . ممنون . فقط یه سوال دارم . آدرس دستگاه هایی مثل سنسور های i2c چطور مشخص کنم؟

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

                          مثل حرارت سنج

                          دیدگاه

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