ايران ويج

نسخه‌ی کامل: پروتکل spi
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام بدجوری به مشکل برخوردم خواهشا کمک کنید که بدجوری گیرم.من میخوام بین دوتا میکرو ارتباط برقرار کنم.بدین صورت که:میکرو مگا 32 مقادر رو از مبدل adc بخونه و بعد از طریق spi بده به مگا8 و مگا8 هم مقادیر رو روی ال سی دی نمایش بده.بین مبدل و مگا32(مستر)از طریق سخت افزار ارتباط برقرار کردم و بین دوتا میکرو هم نرم افزاری اما نتیجه نمیده.من فقط میخوام ارتباط spi باشه مهم نیست بین کدوم سخت افزاری و بین کدوم نرم افزاری باشه.فقط خواهشا کمک کنیدومن که هرکاری کردم نتونستم.مشکل من بین دوتا میکرو.بین مبدل و مگا32 مشکل ندارم
خوب چه کردین!Biggrin
من بسکام ندارم که براتون تستم بکنم ولی فعلا این جوری پیش برید که
این ADC رو وصل می کنید به میکرو اول بصورت سخت افزاری داده رو بخونید و مستقیما روی LCD نشون بدید تا ببینیم تا اینجاش درست عمل می کنید یانه
و اگه مشکلی هست فعلا تا این جا رو راهنماییتون بکنیم تا قسمت های بعدی
یک توضیحاتی هم توی کدتون بنویسید ببینیم قصدتون از این قسمت های مختلف برنامه چی بوده
من این که اگه فقط بخوام با یه میکرو مقادیر رو از adc بخونم و رو ال سی دی نشون بدم.مشکلی ندارم.مشکل من اینه که مقدار خونده شده رو میخوام به میکرو دوم انتقال بدم و اونجا مقادیر رو روی ال سی دی نمایش بدم.البته با پروتکل spi

باور کنید قصد بدی ندارم Wink فقط میخوام بین سه تاارتباط برقرار کنم.یعنی از adc به میکرو32 ,واز میکرو32 به میکرو8 همین
(۰۷-دى-۱۳۹۲, ۱۵:۴۰:۴۹)kelaran نوشته است: [ -> ]من این که اگه فقط بخوام با یه میکرو مقادیر رو از adc بخونم و رو ال سی دی نشون بدم.مشکلی ندارم.مشکل من اینه که مقدار خونده شده رو میخوام به میکرو دوم انتقال بدم و اونجا مقادیر رو روی ال سی دی نمایش بدم.البته با پروتکل spi

باور کنید قصد بدی ندارم Wink فقط میخوام بین سه تاارتباط برقرار کنم.یعنی از adc به میکرو32 ,واز میکرو32 به میکرو8 همین
منم نگفتم که قصد بدی دارید که گفتم موضوع رو کوچیک کنیدBiggrin راه حل در اینه که اول داده رو بخونید و نمایش بدید
بعد میکرو دوم رو اضافه کنید یه داده مشخص مثلا یه متن ثابت رو بفرستید و نمایش بدید
در مرحله بعد کار مرحله قبل رو به صورت نرم افزاری انجام بدید
در آخرین مرحله داده دریافتی از ADC رو به میکرو دوم بفرستید
با این کار مشخص میشه دقیقا شما با کدوم دستور مشکل دارید تا راه نماییتون کنیمBiggrin
جوونيا يه تاپيك براي SPI زده بودم ، كدها هم با بسكام بود. تا جايي كه مي دونم سخت افزاريش بسيار راحت بود و نكته اي نداشت. گيرم سر SPI نرم افزاريش بود كه توي اون تاپيك هم كد گذاشته بودم. SPI رو يه سرچي تو سايت بزنيد.

نكته كنكوريش هم بهزاد بزرگ فرمودند ...

موفق باشيد.
اگه برنامه رو دیده باشید عین همین مراحل رو که گفتید انجام دادم.در ابتدا که مقدار ولتاژ ورودی صفره همه چیز عادی و رو ال سی دی هم مقدار صفر نمایش داده میشه.اما همین که مقدار رو افزایش میدم.مقادیر نمایش داده دچار نوسان میشه و از مثلا 2 تا 150 کم و زیاد میشه.اگه امکان داره برنامه رو ببینید متوجه حرفم میشید.خواهشا کمک کنید که بدجوری لنگم گذاشته.خدا از برادری کمتون نکنه
الان شما مي دونيد مشكل از كدوم سمت هست؟ سمت SPI سخت افزاري يا نرم افزاري؟
نه من مي دونم ، نه شما.

پس روش كار مي شه هموني كه بهزاد خان گفت.
اول مطمئن بشيم ADC خارجي دارهه كارش رو درست انجام مي دهه يا نه.
پس يه mega32 و ADC خارجي و LCD نيازهه ، باقيه پروژه رو بريز دور.
حالا مقادير رو روي LCD نشون بدهه، در حالي كه مدام سيگنال خروجي رو داري تغيير مي دي ، مطمئن بشو مقادير رو درست داري دريافت مي كني ، ( از طريق LCD ) ، جاي بايت پرارزش و كم ارزش هم دقت كن كه پس و پيش نشن ، اگر به ازاء تغييرات كوچيك سطح ولتاژ ، عدد دريافتي تغيير زيادي داشت ، جاي بايت پر ارزش و كم ارزش برعكس هست.

خوب تا اينجا كه اوكي شد ، اين پروژه رو مي ذاري يه گوشه تا به وقتش بيايم سراغش.

2. الان بين 2 ميكرو مي خوايم ارتباط SPI نرم افزاري پياده سازي كنيم.
يه mega32 ، يه mega8 و يه LCD نيازهه ، باقيه پروژه رو بنداز دور.
LCD به mega8 وصل باشه و mega32 هم سر جاي خودش.
چندتا مقدار متفاوت رو در نظر مي گيري و به سمت ميكروي ديگه از طريق SPI نرم افزاري مي فرستي و مطمئن مي شي روي LCD اطلاعات رو درست داري دريافت مي كني. باز به كم ارزش و پر ارزش بودنشون دقت كن.

حالا كه 100% از اين قسمت هم مطمئن شدي ، پروژه ي 1 و پروژه ي 2 رو با هم قاطي مي كني.

اينطوري خود به خود مشكل برطرف مي شه و نكته كنكوريش اينه كه پله پله بري جلو تا به كل برسي.
كلا اشكال كار اينجوري در مي ياد ، الان صاف نمي شه روي مورد خاصي دست گذاشت.
مخصوصا شما كه داري از بسكام استفاده مي كني ، اصلا با اطمينان نمي شه حرف زد.

بستن مدار در پروتوس و در عمل هم خيلي وقت ها 2تا چيز متفاوت هستن.

تاپيكي هم كه گفته بودم اين بود ، من جور ديگه اي پيكربندي كردم ، مورد شما رو مطمئن نيستم در عمل صحيح باشه:
http://www.iranled.com/forum/thread-2202...%D9%84+SPI

موفق باشيد.
من مرجله اول رو انجام دادم.یعنی مقادیر ADC رو از طریق مگا32 دریافت میکردم و به طور صحیح رو نمایشگر نشون میداد.اما ظاهرا مشکل در ارتباط مگا32 و مگا8 اینجا کار من لنگه.شما اصلا برنامه من رو دیدید؟خوب اصلا به فرض اینکه من مشکل قسمت دوم رو هم حل کردم.اونوقت سوال اینه که این دستور قسمت دوم رو کجای برنامه قرار بدم تا برنامه در مرحله دوم(یعنی ارسال دیتا از مگا32 به مگا8)اجرا بشه؟
بسيار خوب ، پس پروژه ي 1 اوكي هست.
الان بريد سراغ پروژه ي 2 كه بالا گفتم و مشكلش رو حل كنيد . ( كد نمونه هم در لينكي كه تو پست قبليم هست مي تونيد ببينيد و استفاده كنيد )

از اونجايي كه سبك برنامه تون به اين صورت هست كه در هر لحظه 1 كار در حال انجام هست ، بعد از خوندن مقادير از ADC خارجي ، مستر مقادير رو براي ميكروي slave جهت نمايش روي LCD مي فرسته. دستورها پشت سر هم مي شن.

چون در هر لحظه يك كار انجام مي ديد نيازي نيست از SPI نرم افزاري هم استفاده كنيد!
هر دو ارتباط SPI اتون مي تونه سخت افزاري باشه.
clk , MISO , MOSI بين ديوايس ها مشترك هستن.( هر چندتا كه باشن )
هر ديوايس يه سيگنال CS مجزا مي خواد.
هر پايه ي I/O معمولي هم مي تونه به عنوان پايه ي CS استفاده بشه.

موفق باشيد.
گیرم و اینا نداریم اول انجام بدید بعد یه فکری براش می کنیمBiggrin
---
این کدی که شما می خوای سخت نیست که من ببینم بگم فلان جا سوتی دادی که
خودت باید بنویسی که بعد بفهمی مشکل از کجا بوده
حالا من برات سخت افزاری این کار رو کردم شما بیا و یک طرفش رو نرم افزاری بکن ببینم چه می کنی
(نکته: فقط در مود Master می تونی نرم افزاری انجام بدی)
اون کدی هم که برای خوندن ADC نوشتی رو هم بزار ببینیم چی شد بالاخرهBiggrin

(۰۸-دى-۱۳۹۲, ۲۳:۰۶:۳۴)sharin نوشته است: [ -> ]بسيار خوب ، پس پروژه ي 1 اوكي هست.
الان بريد سراغ پروژه ي 2 كه بالا گفتم و مشكلش رو حل كنيد . ( كد نمونه هم در لينكي كه تو پست قبليم هست مي تونيد ببينيد و استفاده كنيد )

از اونجايي كه سبك برنامه تون به اين صورت هست كه در هر لحظه 1 كار در حال انجام هست ، بعد از خوندن مقادير از ADC خارجي ، مستر مقادير رو براي ميكروي slave جهت نمايش روي LCD مي فرسته. دستورها پشت سر هم مي شن.

چون در هر لحظه يك كار انجام مي ديد نيازي نيست از SPI نرم افزاري هم استفاده كنيد!
هر دو ارتباط SPI اتون مي تونه سخت افزاري باشه.
clk , MISO , MOSI بين ديوايس ها مشترك هستن.( هر چندتا كه باشن )
هر ديوايس يه سيگنال CS مجزا مي خواد.
هر پايه ي I/O معمولي هم مي تونه به عنوان پايه ي CS استفاده بشه.

موفق باشيد.
شرمنده من پست شما رو ندیدمBiggrin
دیگه کدو نوشته بودم گذاشتم حیف نشهBiggrin
---
ولی ایشون هم راست میگن نیازی به برقراری ارتباط نرم افزاری نیست من فکر کردم شما حتما می خواید نرم افزاری هم پیاده کنید
نه.گفتم که من فقط میخوام بین این سه ارتباط برقرار باشه.ولی در هر صورت بین هرسه تا که نمیشه سخت افزاری ارتباط برقرار کرد.درست میگم یا نه؟باید این وسط نرم افزاری هم باشه.اما این که بین کدوم،اصلا مهم نیست.بابت برنامه هم یه دنیا ممنون.برنامه رو با اونها ترکیب میکنم.اگه مشکلی داشتم بازم مزاحم شما میشم

حالا اگه بخوام بین دوتا از این سه تا ارتباط نرم افزاری ایجاد کنم.کار خیلی گره میخوره؟
صفحه‌ها: 1 2