آموزش جامع میکروکنترلر AVR جلسه۷
موضوع این جلسه : ارتباط سریال SPI در AVR
موضوع جلسه بعد : چند تا پروژه در زمینه spi
توضیح : مبحث SPI هم کارش تقریبا مثل USART هستش فقط یه کم باهاش تفاومت داره>>>هر کدوم از این روش ها کاربرد خاص خودشون رو دارند>>>مثلا برا اتصال SD CARD به میکرو باید از روش SPI استفاده کنید و برا بیشتر ماژول ها از USART >>>در کل هر کدوم جای خودشون کاربرد هایی دارند.
منم اصلا نمیخواستم این مطلب رو بزارم>>>ولی مجبور شدم>>>چون برا کار با LCD گرافیکی های بزرگ >>اگه بخوای توشون تصویر نشون بدی>>>با توجه به این که میکروکنترلر حافظش کم و محدود هستش ما میایم و به میکرو یه SD CARD وصل میکنیم و تصاویر رو در SD CARD ذخیره میکنیم و از این طریق تصاویر رو تو LCD نشون میدیم.
و به احتمال زیاد مطلب بعدی در مورد “آموزش اتصال SD CARD به میکرو” هستش.>>>و مطلب بعدی در مورد LCD گرافیکی های سری توشیا >>> انشاالله.
این عکسی که مشاهده میکنید مربوطه به mega16 و اون ۴ تا پایه که تو شکل مشخص کردم مربوطه به بحث ارتباط سریال SPI ، در زیر پایه ها رو مختصرا توضیح میدم.
SS : انتخاب SLAVE مورد نظر (با صفر فعال میشه.>>یعنی اگه پایه SS یه SLAVE رو صفر کنی>>به حالت انتخاب در میاد)
MOSI : پایه انتقال اطلاعات از MASTER به SLAVE
MISO : پایه انتقال اطلاعات از SLAVE به MASTER
SCK : خط کلاکی که توسط MASTER ایجاد میشه
توجه : در کد نویسی باید ورودی خروجی بودن این پایه ها رو (مثل بقیه پایه ها) تعیین کنیم.
ورودی خروجی بودن پایه ها باید بر طبق جدول زیر باشد. (اگه ۴-۵ خط بالا رو بخونید و تصویر زیر رو نگاه کنید و نیم ثانیه فکر کنید >>کار جدول زیر رو میفهمید.)
مبحث SPI هم زیاد با USART فرق نداره (اه اه اه دماغم چرا داره بزرگ میشه؟؟؟) >>> هر کدوم جای خودشون کار برد هایی دارند.
تو مبحث USART میگفتیم فرستنده گیرنده اما در SPI میگیم Master_slave یعنی :
دستگاهی که فرستنده هستش رو میگن Master و دستگاهی که گیرنده هست رو میگن Slave (نامردا اسم فرستنده گیرنده رو عوض کردن…^_^)
توجه : ما میتونیم با یک master شونصد تا (تعداد زیادی) slave رو کنترل کنیم و بهشون اطلاعات بدیم.
توجه : اونایی که با رنگ سبز مشخص کردم ، مهم هستن و با بقیه فعلا کاری نداریم.
بیت۰ و ۱ : تعیین تقسیم فرکانسی(تعیین فرکانس کاری SPI)>>>در جدول زیر بیت ۰ ریجستر SPSR رو هم ابردم(اگه یک بشه>>فکانس دوبرابر میشه)
بیت۲ : نمونه برداری از پایه های MOSI و MISO >>>صفر : لبه بالا رونده ___ یک : لبه پایین رونده
بیت۳ : وضعیت اولیه پایه ی SCK >>> صفر : پایه SCK صفر میشه ___ یک : پایه SCK یک میشه (البته اینا در صورتی هستن که پالسی ارسال نمیشه)
بیت۴ : صفر : انتخاب مد SLAVE __ یک : انتخاب مد MASTER
بیت۵ : یک : ابتدا بیت LSB ارسال میشه ___ صفر : ابتدا بیت MSB ارسال میشه
بیت۶ : یک : فعال کردن SPI ___ صفر : غیر فعال کردن SPI
بیت۷ : فعال شدن وقفه SPI (البته به شرط فعال بودن وقفه همگانی) >>> با یک شدن بیت SPIF واقع در ریجستر SPSR
بیت ۰ : با یک کردن این بیت>>فرکانس SCK در MASTER دو برابر میشه.
بیت ۱تا۵ : رزرو شده(یعنی شما نمیتونید از این بیت ها استفاده کنید و باید بجاشون صفر قرار بدید.)
بیت ۶ : اگه در حین انقال دیتا در ریجستر SPDR ، دیتای جدیدی نوشته بشه>>این بیت یک میشه.
بیت ۷ : زمانی که دیتا به طور کامل ارسال شود >> این بیت یک میشه.
خواندن و نوشتن دیتا توسط این ریجستر انجام میشود.
توجه توجه : عمل دریافت فرستادن اطلاعات(تو کد نویسی منظورمه)با تابع زیر صورت میگیره :
1 |
spi(); |
خب این تابع بالا به نظرتون داخلش چی هستش؟ هیچی یه چیز ساده، که این تابع بالا در کتابخونه spi.h تعریف شده(همون کتابخونه ای که باید در اول هر پروژه مربوط به spi قرارش بدیم)، این تابع در این کتابخونه تعریف شده و به صورت زیر هستش(که توضیحاتش رو هم داخل کد قرار دادم و…) :
1 2 3 4 5 6 7 |
unsigned char spi(unsigned char data) { // SPDR : خواندن و نوشتن دیتا توسط این ریجستر انجام میشود SPDR = data; while ((SPSR & (1<<SPIF))==0); // تا زمانی که دیتا ارسال نشده وای میستیم return SPDR; } |
خدایش ساده تر از این نمیشد گفت(تازه کلی سر و تهش رو هم زدم.)
موضوع جلسه بعد : چند تا پروژه در زمینه spi
در آخر مطلب مقابل رو هم ببینید خالی از لطف نیست : ارتباط سریال SPI پیکره بندی و سخت افزاری
جنگ ما فتح قدس را در پی خواهد داشت (امام خمینی) >>>>>> اگر از صدام بگذریم، اگر مسأله قدس را فراموش کنیم، اگر از جنایت های امریکا بگذریم از آل سعود نخواهیم گذشت. انشاالله اندوه دلمان را را در وقت مناسب با انتقام از امریکا و ال سعود برطرف خواهیم کرد و داغ و حسرت حلاوت این جنایت بزرگ را بر دلشان خواهیم گذاشت و با برپایی جشن پیروزی حق بر جنود کفر و نفاق و آزادی کعبه از دست نااهلان و نامحرمان به مسجد الحرام وارد خواهیم شد (امام خمینی)
فعلا دارم رو USB و میکرو LPC کار میکنم، 3 تا موضوع مطرح هستش ( که تو ذهنمه هر3شو برم ) :
1) میکرو در نقش Device ( فعلا محوریت کار من این مورد هستش )
2) میکرو در نقش Host
3) میکرو در نقش OTG
و باز 2 تا موضوع مطرح هستش، برا راه اندازی usb دو تا راه داریم ( که تو ذهنمه هر2شو برم ) :
1) استفاده از میکروکنترلر ( فعلا محوریت کار من این مورد هستش که از LPC1768 استفاده میکنم )
2) استفاده از آیسی های مختص اینکار.
فعلا کارم با دیتاشیت usb تموم شده، دارم کلاس های usb رو مطالعه میکنم، کلاس cdc رو ماستمالی کردیم و یه پروژه ازش منتشر کردیم، الان رو کلاس HID ریز شدم و دارم مطالعه میکنمش و پروژه ازش میزارم تو سایت.
جزئیات داستان رو در لینک زیر میتویند ببینید :
سوالی داشتید در قسمت نظرت مطرح کنید؛ بلد باشم حتما جواب میدم ( اکثر مواقع آنلاین هستم و در کمتر از 1 ساعت جواب میدم )
خیلی عالی . اگه I2C هم یاد بدید نور علی نور میشه
خواهش—رامین جان I2C برا چیته؟؟؟؟
برا چه کاری میخای؟
سلام . ممنون بابت سایت و اطلاعات خوبی که گذاشتید . من می خوام رو یه چند تا پروزه که spi هست کار کنم اما هر چی سرچ کردم چیزی گیرم نیومد شما چند تا پروزه با spi ندارید برام بفرستید با سی البته
و این که اگه اطلاعاتی راجع به ضبط و پخش صدا دارید ممنون میشم بهم بدید من با سی کار می کنم vs1003 هست که من باهاش مشکل دارم . بازم ممنون بابت سایت و اموزش خوبتون
سلام
فک کنم تو یکی ۲ تا مطلب برا Spi تو سایت هستش که تو یکیشون فقط پروژه با spi گزاشتم.
اون آی سی هم اطلاعاتی ندارم ولی میدونم که پروژه امادش تو نت هستش.
سلام
بسیار خوب بود.زکات علم نشر آن است.متشکر.
موفق باشی..
سلام
چاکریم
دستت درد نکنه! عالی بود. خدا خیرت بده
خسته نباشی دادا
سلامت باشی دادا
دستت ندردد
چقدر نظر دوست داری ! یه کم اخلاص داشته باش .

خیلی سالاری
نه این طور نیس داش….
نظر دادن شما ها یجور انرژی دادن به من برا ادامه کار هستش…..چون بعضی وقتا واقعا خسته میشم و حوصلم سر میره
مثلا من سر فیلم های FPGA که تو سایت گزاشتم واقعا دهنم سرویس شد…..ولی اگه کسی نظر نده…….اصلا حوصلم نمیشه ادامه مطلبش رو بزارم تو سایت
آدم اگه بدونه این مطلب برا کسی مهمه و ارزش داره……دل به کار میده…..
سلام وقت بخیر واقعا خسته نباشید.من یه معلمم واقعا از شیوه آموزشی شما لذت بردم ایشالا که همیشه همه جه اول سالمو سلامت باشید و در مرحله بعد جیباتون پر از پووووووووووووووووووووووووووووول
سلام
خواهش
سلام مهندس
خسته نباشی واقعا
مرسی ک اموزشت همراه با ارائه پروزه هست…خدایی من ک همش تمرین میکنم قشنگ یاد بگیرم
دستتون درد نکنه مطالب واقعا مفیده
کارتون نمونه ی ایرانی نداره
خواهش

خداییش خیلی زحمت میکشی مهندس خسته نباشی فدایی داری
بخدا عاشقتم دعات می کنم کلی.
بعد از شش ماه گشتن دنبال یه همچین سایتی بالاخره به مراد دلم رسیدم.
در کل مرسی.
سلام ، خسته نباشید میخواستم بدونم چطوری میتونم برنامه ای بنویسم که یک کاراکتر مثلاحرف s را از ورودی سریال یاهمونtx بگیره و اگر s بود 4 تا پین یه پورت رو روشن وخاموش کنه (صفر و یک منطقی)ممنون میشم یه توضیح کامل بهم بدی . من این برنامه رو نوشتم ولی جواب نگرفتم.
سلام
مطلب مربوط به بلوتوث رو ببین…قسمت ارتباط با pc
سلام. توی رجیستر SPCR ، بیت شماره 5 رو جابجا گفتین؟ آخه توی Datasheet نوشته اگه 0 باشه اول MSB ارسال میشه.
سلام
طبق عکس زیر که از دیتاشیت مگا ۱۶ گرفتم …. حرف شما درسته و حرف من برعکسه
ممنون از شما
الان تصیحش میکنم
دعا میکنم برات………
از قسمت اشتاراک گزاری…ته مطلب….میتونید مطلب رو به صورت pdf دربیارید….گزینه پرینت
سلام مهدی جان برایه مطالب ممنون
هم تا حالا عملی کار نکردم زیاد

یه سوال تکراری!!!! اگه چند تا میکرو از این روش دارن به هم داده میفرستن باید از طریق ss اونهارو فعال کنیم کدی که باید بنویسیم چطوری باید باشه یعنی چطوری بگم صفر شو یا یک شو داخل کد نویسی.
ببخشید سوالام عجیبه چون هم رشتم الکترونیک نیست هم خود اموزم
ممنون که به سوالام جواب میدی
ودر اخر
سلام
در این مورد تو نت بسرچی فک کنم بهتر باشه
چون من الان چیزی خاطرم نیست
کتابم هم دست یکی از رفقام هستش و ….
مهدی میتونی بگی اسم کتابت چیه با اسم نویسنده اگر هم کدها یادت امد برام بنویس مرسی
والا کتاب جابر الوندی رو دارم که همه چی رو مختصر گفته
سلام دوباره
مهدی داخل کتاب جابر الوندی صفحه۱۸۸ فصل ۹ اگه اشکالی نداره یه نگاهی بکن(ارتباط چند پردازندهای توسط SPI)
گفته برایه مشخص کردن slave ها پایه مربوط به اون slaveرو باید صفر کنیم (داخل کد نویسی این رو چطوری بنویسم؟؟؟؟؟؟)
جواب بده خواهششششششش میییکنننممم
سلام
والا کتاب پیشم نیست…
دست رفیقمه..
یه کتاب واسه خوندن بیشتر spi میشه پیشنهاد کنی اگه به میلم جواب بدی خیلی ممنون میشم
کتابی سراغ ندارم متئسفانه
سلام
عالی بود.ممنون که وقت می زارید
آقا مهدی گل…. ابتدا تشکر از آموزشی که ب راه انداختی.
و بعد اینکه رشته من مکانیک و علاقه مند ب avr
آیا میشه با چند خط برنامه البته با زبان بیسیک و استفاده از ماژول enc28j60 یک صفحه در وب بروزر باز کرد.
البته خیلی از سایتهای داخلی و خارجی رو گشتم ولی هنو نتونستم پینگ بگیرم….
خیلی ممنون میشم اگه شسته و رفته راهنمایی کنی. و اینکه حتما میبایست از کتابخونه ها استفاده کرد…! ؟
از راه دور میبوسمت مهندس…
سلام
میشه از کتاب خونه استفاده نکرد ولی مجبوری خودت یکی بنویسی
اولا: ممنون.بخاطر توضیحاتتون
دوم :من میخوام یه تصویر(عکس)رو تو حافظه فلش ذخیره کنم البته با ارتباط spi
کدهای مربوط به ذخیره کردن یه عکس چیه ؟
سوما:بازم ممنون
سلام
آرایه عکس رو تو یه میکرو ذخیره میکنی که ۸ بیت ۸ بیت اطلاعات رو ارسال میکنه
و تو میکرو دریافت کننده هم یه آرایه باهمون سایز تعریف میکنی که اطلاعات رو ۸ بیت۸ بیت میریزی توش….اطلاعاتی که دریافت میکنی رو میریزی توش
سلام مهندس میشه بگی master چیهslaveچیه؟؟؟؟
باتشکر از مطالب مفید و طرز بیان ساده و ملموس … خییییلی ممنون
معرکه ای مهندس خدا قوت
آقا خیلی خیلی ممنو آموزش این توری تو نت ندیدممم
خداااا انشالله تو زدگیت موفقت کنه و پول دار بشییییییییییییییی
به شرطی که پولدار شدم به دیگران هم کمک کنم، و در راه پیشرفت کشور صرفش کنم و از راه حلال به دست اومده باشه و نه…
، رفیقمه، زمان چند سال پیش از دنیا رفت
و امیدوارم قبلش برم پیش حسین تایتانیک، قبل این که پولدار بشم
آقا خیلی مردی یه دونه ای به مولااااا
سلام چجوری با SPI کارکتر ارسال کنم میشه راهنماییی کنی
سلام
تو مطلب که توضیح دادم
اون آخرای مطلب
سلام اقا مهدی
میشه درباره ارتباط با ماژول max6675 هم یه مطلبی بزاری. خیلی اقایی
سلام
رفت تو لیست خرید قطعاتم
میتونی هزینه قطعش رو بهم بدی؟
چون من دارم پولمو جمع میکنم تا قطعات ربات پردنه رو بخرم.
اره شماره کارتت رو بده.
یه موردی، تا کی باید راه اندازی کنم؟ چون من چند تا پروژه مردم رو باید انجام بدم.
این کرموتوپل بود درست گفتم؟ این یه چور دما سنج مقدار بالا هستش که با Spi کار میکنه، درسته؟
سلام. با max6675 یه مثال بزن
خب نگفتی داش تا کی وقت داری؟
عجله داری؟
در ضمن مثال با آردوینو بزنم یا کدویژن؟
سلام
ممنون از مطالب خوب و عالیت
اگر امکانش هست اموزش max6675 با کد ویژن بزاری
اگر از 2 سال پیش انجام دادی لینکشو بزاری ممنون میشم ..
آقا مهدی
آخه مگه mosi برا انتقال اطلاعات از مستر به اسلیو نیست؟
پس باید تو مستر خروجی باشه تو اسلیو وروردی دگ!!!!!!!!!
کارت حرف نداره مهندس
اخیییی
مدیره بیچاره
چی میگه!
میشه ارتباط دقیقه بین spif و spie رو بگی؟
یعنی اول spif یک میشه بعد با توجه به فعال بودن spie وقفه می افته؟
یا
برای این که spif کار کنه باید spie فعال باشه؟
زود باش جواب بده ببینم
سلام
ممنون از مطالب ام یه درخواستی داشتم… و اون اینکه یه کمی دقیق تر توضیح بدید… یه کم بی حوصله نوشته شدن مطالب گویا
و تو این قسمت از آموزش یه اشتباهی داشتید که اکثر دوستان هم این اشتباه رو می کنن… مستر اسلیو بودن به فرستنده و گیرنده بودن ربطی نداره. مستر هم می تونه دیتا بفرسته هم بگیره… اسلیو هم همینطور…
در واقع مستر اون طرفی از رابطه سریاله که کلاک می زنه، و کلاکه مستر ارسال و دریافت دیتا رو کنترل می کنه… اسلیو هم تابع کلاک مستر هست و با توجه به کلاک مستر دیتا می فرسته یا می گیره…
موفق باشید
آقا مهدی دمرچیلو واقعا دستت درد نکنه
خدا اجرت بده از صمیم قلب برات آرزوی موفقیت میکنم
مهندس جان سلام…
من با spi یه برنامه نوشتم که مستر ولتاژ یه پتانسیومتر رو میخونه و میفرسته ب اسلیو و اسلیو هم نشونش میده…
در حالت نرمال و بدون lcd مشکلی نیست اما وقتی تایع lcd رو مینویسم میکزو قاطی میکنه و عدد هارو اشتباه میده …
دیتا اردر هم تغییر دادم تاثیری نداشت…
اگه لطف کنی یه توضیح بدی ممنون میشم…
اگه ب ایمیلم جواب بفرستی ک خیلی ممنون میشم…
?
سلام
بیا اطلاعات رو به سریال ارسال کن ببین مشکلی رخ میده یا نه.
سلام، خسته نباشید خوب بود، اگه میشه در مورد ارتباط میکرو با nrf توسط پروتکلspiتوضیح بدهید.
سلام – برا کدویژن امکانش نیست.
برا آردوینو تو سایته
سلام مرسی از زحماتت یک سوال داشتم در مورد جدول بالای مقدمه :
MOSI : master output slave input:
ولی تو جدول مستر نوشته شده input . وهمینطور برا بقیه. ممکنه یکم توضیح بدی.
سلام – جدول انگار مشکل داشت – جدول دیتاشیتو کپی کردم و جای جدول قبلی قرار دادم
سلام… ممنون از مطالب عالی و کاربردی که تو سایت گذاشتی. من تو پروژه کارشناسیم نیاز دارم که از طریق یه ADC 16 bit خارجی که AD7715 باشه یه ولتاژی رو با دقت بالا بخونم و بفرستمش به میکرو که Atmega16 هست. انقدر تو این سایت و اون سایت گشتم و خوندم که الان که ساعت نزدیک ۲ نیمه شب حسابی گیج شدم. میخواستم بدونم الان باید از spi میکرو استفاده کنم یا uart ؟!! اگه spi پایه ها رو چجوری باید وصل کنم و اگه usart باز هم همین سوال! اگه فوری فوتی جواب بدی ممنون میشم خیلی عجله دارم… دمت گرم
سلام-خروجی این آی سی spi هستش(طبق دیتاشیتش که الان یه کوچولو نگاه کردم ) – آموزش spi تو نت هستش یه ۳-۴ تا پایه هستش باید وصل کنی به هم – آموزش خود آیسیت هم بگیری احتمال داره پیدا بشه حالا یا آموزش یا پروژش! – خواستی برات آموزشش رو آماده میکنم ولی باید آیسیش رو برام بخری چون ندارم!!!
خیلی ممنون… تا همین حد هم که فهمیدم spi هست خودش کلیه!!! فقط میخوام بدونم که ۴ تا پایه مربوط به spi رو یعنی ss , mosi , miso , sck دقیقا به کدوم پایه های ad7715 باید وصل کنم و برنامش رو بنویسم تا بتونم رجیسترهاش رو تنظیم کنم؟
اینو باید دیتاشیت آی سی فوق رو ببنی تا ترتیب پایه ها دستت بیاد.
من واسه پروژه ام ۲ تا رو لازم دارم و باید بخرم… چه طور میتونم باهاتون ارتباط بگیرم؟
اینترنتی میخری و آدرس خونه ما رو میدی – راه اندازی این آیسی شرایطی داره که خواستی بگو بهت بگم.
ممنون از اطلاعاتی که در اختیارمون قرار میدین
ولی خداییش ای کاش تو گروه هم اینقد مهربون باشی
سلام، ممنون آقا مهدی از بابت مطلبای خوبتون،
یه سوال
فرکانس کاری SPI رو بر چه اساسی باید انتخاب کرد؟
سلام – جواب درستی ندارم بدم متاسفانه.
سلام دوباره
آقا من هرکاری میکنم از پروتکل spi فقط FF FF میاد بیرون هر کاری کردم که تغییر کنه ولی نشد
میشه یه نمونه برنامه بسیار ساده که توش مثلا فقط یه ال ای دی کنترل باشه توسط spi برام بفرسستی
با سلام
من هر کاری میکنم از خروجی فقط ff میاد بیرون چرا اینجوریه ؟
با سلام وتشکر از راهنمایی خوب شما
بنده درگیر ی کار ساخت شدم که مجبورم حداقل ۱۶ میکرو را باهم به صورت SPI و MASTER/SLAVE شبکه کنم.
میتونستم باه دیگه شبکه RS485 کنم ولی به دلیل اینکه نرخ ارسال داده کم میشه این کار را انجام ندادم و از SPI که باس پرسرعتی هست تصمیم گرفتم استفاده کنم.
چندین تست را در حین کار شبیه سازی گرفتم و به مشکلاتی برخورد کردم که جایی توی هیچ سایتی حتی بهش اشاره هم نشده بود.
از دوستان تقاضامندم در صورتی که براشون مقدور هست بنده را راهنمایی کنن
۱)برنامه نویسی تحت BASCOM
۲)ارتباط یک MASTER و SLAVE به خوبی برقرار شد
۳)ولی وقتی تعداد SLAVE ها را خواستم زیاد کنم دچار مشکل شدم.
البته به این نکته توجه داشتم که چون تعداد SLAVE ها داره زیاد میشه در تنظیمات SPI وضعیت NOSS=1 کنم.(یعنی SS به صورت نرم افزاری تنظیم میشه)
۴)مشکلی که بیشتر درگیرش شدم اینه:
اگر ی زمانی یک یا چندین SLAVE ارتباطشون با MASTER قطع بشه ومجددا بیان داخل شبکه اوضاع به هم میریزه.
یعنی داده ها اصلا دیگه قابل اطمینان نیستن.
و کلا به شکست برخورد میکنیم.
دوستان عزیز اگر تا به حال به این مشکلات برخورد کردین و رفع شده بفرمایید بنده چجوری این مشکلات را حل کنم؟
ممنون
التماس دعا
دمت گرم خدا خیر ت بده
سلام
عالیه
خداخیرتون بده
سلام خسته نباشید من یه سنسور دارم به اسم tc72
که با ارتباط سریال spi کار میکنه و سه تا پایه داره به اسم cs , sck , si/o میخواستم ببینم سیم کشی این ماژول با میکرو به چه صورت هست
و میکرو باید در چه حالتی باشه
و اینکه از چه دستوراتی باید استفاده بشه که اطلاعات رو دریافت کنه