ايران ويج

نسخه‌ی کامل: پروتکل spi
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
(۰۹-دى-۱۳۹۲, ۰۰:۵۷:۱۰)babyy نوشته است: [ -> ]اسپم:

@بهزادی:
عاشق فرمت‌های tar gz و از این جرفا شدیا Biggrin Biggrin
چه کنیم دیگه لینوکس هست و هزار درد و مرضBiggrin فدورا فدوراBiggrin گرچه الان به توصیه هادی عظما مینت نصب کردمBiggrin
یه رسیدگی بکنید این فایل های tar.gz رو به عنوان متفرقه میشناسه حجم آپلودشون کم هستBiggrin

(۰۹-دى-۱۳۹۲, ۰۰:۱۳:۴۹)kelaran نوشته است: [ -> ]نه.گفتم که من فقط میخوام بین این سه ارتباط برقرار باشه.ولی در هر صورت بین هرسه تا که نمیشه سخت افزاری ارتباط برقرار کرد.درست میگم یا نه؟باید این وسط نرم افزاری هم باشه.اما این که بین کدوم،اصلا مهم نیست.بابت برنامه هم یه دنیا ممنون.برنامه رو با اونها ترکیب میکنم.اگه مشکلی داشتم بازم مزاحم شما میشم

حالا اگه بخوام بین دوتا از این سه تا ارتباط نرم افزاری ایجاد کنم.کار خیلی گره میخوره؟
نه دیگه ارتباط SPi رو میتونی بین N تا میکرو انجام بدی
الان اون میکرو یی که داده ی ADC رو می خونه رو مستر میزاری اون یکی اسلیو هست
با تغییر CS هر دستگاه اون دستگاه انتخاب میشه
مثلا الان شما پین CS مربوط به ADC رو صفر می کنی و اون انتخاب میشه داده ها رو انتقال میدی بعد دوباره 1 می کنیش که غیر فعال میشه SPI مربوط به ADC حالا میای و CS مربوط به میکرو دوم رو 0 میکنی و اون میکرو انتخاب میشه و داده رو منتقل می کنی و دوباره CS رو 1 می کنی
اگه به کد من توجه کرده باشی می بینی که این عملیات رو من انجام میدم فقط با یک دستگاه کافی هست که یک پین دیگه اضافه کنی برای ADC و کد خودت رو قرار بدی
ممنون.پس با این تفاسیر من میکرو دوم رو که اسلیو هست رو نرم افزاری راه میندازم.یعنی همینطوری که الان هست.بین میکرو و adc به صورت سخت افزاری و بین دوتا میکرو به صورت نرم افزاری.
راستی منظورتون از جمله" مثلا الان شما پین CS مربوط به ADC رو صفر می کنی و اون انتخاب میشه داده ها رو انتقال میدی بعد دوباره 1 می کنیش که غیر فعال میشه SPI مربوط به ADC حالا میای و CS مربوط به میکرو دوم رو 0 میکنی و اون میکرو انتخاب میشه و داده رو منتقل می کنی و دوباره CS رو 1 می کنی"
این که میگید"اون انتخاب میشه منظورتون همون میکرو دومه دیگه درسته؟
سلام مجدد.اقا اون چیزی که گفتید رو انجام دادم اما باز جواب ندادSad دیگه من عقلم به چیزی قد نمیده.سوادم هم همینطور.بابا خداییش بدجوری گیرم.شما که این همه راهنمایی کردین.خوب این یه قسمت رو که مشکل دارم رو واسم حل کنید.خداخیرتون بده.ثوابم میکنید.خدا از جوونی کمتون نکنه.(دیگه نمیدونم چطوری پاچه خواری کنمTongue)
شما توجه نکردید دیگه تاکید کردم فقط MASTER رو میشه نرم افزاری راه اندازی کرد
---
در مورد اون میکرو بله منظورم دومی هست
---
پاچه خاری فایده نداره خودتون باید تلاش کنید
--
حالا یه نگاهی به کدتون بکنم ببینم چه کردید

ببینید کار بیشترش درست هست فقط چند تا نکنه
1- توی میکرو Master شما پایه SS رو که تنظیم کردید مربوط به خود Master هست نباید خود رو صفر کنید! برای انتخاب Slave از یک پایه دیگه استفاده کنید
2- همینجوری که گفتم Slave رو باید سخت افزاریش بکنید
3- نیازی نیست گه حتما هر دو طرف نرم افزاری یا سخت افزاری باشن که Biggrin
---
الان کار تمومه Slave بشه سخت افزاری و پین SS جدا بشه حله دیگه
سلام. من میخواستم سوالم رو تو یه تایپیک جدید مطرح کنم ولی وقتی این تایپیک رو دیدم به یه سری از جوابها رسیدم.حالا سوال رو یکمی گسترش میدم تا من هم به جواب برسم.چندتا سوال تو داشتم.اول اینکه من مثال این دوستمون رو گرفتم و طبق راهنماییهای مهندسین حل کردم.اما مشکل اینه که مقدار رو کامل نمیخونه.یعنی مقدار خونده شده رو به دو قسمت تقسیم میکنه و رو صفحه نشون میده.در اینجا مقدار 2/5 ولت رو به دوتا 127 تقسیم میکنه.یعنی از 0تا 1.25 رو از 0 تا 127 نشون میده و از 1.25 تا 2.5 رو مجددا از 0 تا 127 نشون میده.اگه امکان داره این مورد اول رو راهنمایی کنید تا سوالات سخت تر(البته از دید من)برسم.بازم ممنون
اول يه مرور روي تايمينگ هاي پروتكل SPI داشته باشيد.

مورد بعد اينكه در سمت گيرندهه متغيير رو از نوع 8بيتي تعريف كرديد. اينه كه كل اطلاعات بهش نمي رسه.
كلا كاري كه بايد كنيد اينه كه اطلاعات رو به صورت 8 بيتي روي باس بفرستيد و در سمت گيرنده 2 بايتي رو كه دريافت كرديد به هم بچسبونيد و نمايشش بديد.

موفق باشيد.
به جان خودتون پست ها دیده مشن حتی اگه توی صفحه اصلی نباشن چون پاسخ جدید دارن ما میبینیمشون چه حکمتی هست یه دو ساعت می گذره یه پست میزارید ؟Amaze
--------------
اول از همه فرستنده 1 بایت می فرسته گیرنده دو بایت می خونه!
بعد هم SPiin/spiout داده بایت فقط می گیرن داده بیشتری هم بخواین باید آرایه بهش بدید! نه اینکه word رو بهش انتقال بدید!
Edge - Order و وضعیت پین و اینا هم باید دو طرف یکی باشن
---
ممنون.مشکل رو فهمیدم.فقط میشه بگید چطور باید دوتا بایت رو به هم بچسبونم؟اما سوال دوم من اینه که:تو این مثال بین دوتا میکرو کلاک در حالت بیکاری یکه.اما بین مبدل و میکرو صفره.تو مگاه8 Polarity = High و یا Polarity = low میگیرم تغییری نمیکنه؟علت چی میتونه باشه؟
(۱۲-دى-۱۳۹۲, ۱۵:۴۰:۰۶)behzady نوشته است: [ -> ]به جان خودتون پست ها دیده مشن حتی اگه توی صفحه اصلی نباشن چون پاسخ جدید دارن ما میبینیمشون چه حکمتی هست یه دو ساعت می گذره یه پست میزارید ؟Amaze
--------------
اول از همه فرستنده 1 بایت می فرسته گیرنده دو بایت می خونه!
بعد هم SPiin/spiout داده بایت فقط می گیرن داده بیشتری هم بخواین باید آرایه بهش بدید! نه اینکه word رو بهش انتقال بدید!
Edge - Order و وضعیت پین و اینا هم باید دو طرف یکی باشن
---

برنامه اسلیو اصلاح شده ببینید درسته؟
کد php:
$regfile "m8def.dat"
$crystal 16000000
Config Lcdpin 
Pin Db4 Portd.2 Db5 Portd.3 Db6 Portd.4 Db7 _
 Portd.5 
Portd.1 Rs Portd.0
Cursor Off
Dim Adc_value1 
As Byte Adc_value2 As Byte Result As Word Tmp As Byte Tmp1 As Word
Config Pinb.2 
Input
Config Pinb.3 
Input
Config Pinb.4 
Output
Config Pinb.5 
Input
Config Spi 
Hard Interrupt Off Data Order Msb Master No Polarity High Phase Clockrate 64


Spiinit
Do
Spiin Adc_value2 1
Spiin Adc_value1 
1

Tmp1 
Adc_value2 And 31

Shift Tmp1 
Left 5

Shift Adc_value1 
Right 3

Result 
Tmp1 Or Adc_value1
Locate 1 
1
Lcd Result 
"  "
 
Loop 
بی زحمت کدهاتون رو توی تگ کد قرار بدید
نقل قول: Spiin Adc_value2 , 1
Spiin Adc_value1 , 1

دستور spiin و spiout رو توي help بسكام چك كنيد. مثال زدهه. بايد آرايه تعريف كنيد. اينطوري جواب نمي دهه.
سمت فرستنده هم بايد از همين الگو براي ارسال استفاده كنيد.
صفحه‌ها: 1 2