باسلام
به سایت ونوس ایران زمین خوش آمدید.
در این نبشته به استفاده از پروتکل SPI و ارایه یک برنامه عملی با آن می پردازیم.در ابتدا باید با رجیستر های این پروتکل در AVRاشنا شوید .برای این کار در پست قبلی فایل آموزشی را دانلود کنید و به صفحه ی 200 آن مراجعه نماییدهمچنین می توانید PDF زیر را که تنها به قسمت SPI در AVR می پردازد و نوشته ی سپاس یار است را از پیوند زیر دانلود کنید..
حال که با مطالعه فایل آموزشی پست پیشین با رجیستر ها و نحوه کارآنها آشنا شده اید توجه شما را به شکل زیر که توضیح دهنده مدهای کاری SPIدر AVR است جلب کنم.
دقت داشته باشید برای ایجاد برنامه با جادوگر کدویژن مد های کاری برای MASTER و SLAVE یکسان باشد.در غیره اینصورت دیتاهای دریافت شده و ارسا شده صحیح نخواهد بود.حال به یک برنامه نمونه می پردازیم.توجه داشته باشید که آغاز کننده ارتباط MASTER می باشد ونرخ انتقال توسط فرکانس نوسانساز داخلی و یا کریستال خارجی متصل شده به آن تعیین می شود.
در این برنامه عدد 19 توسط MASTER ارسال شده و SLAVE در حال دریافت عدد 17 را برای MASTERارسال می کند.می دانیم که در این پروتکل دو وسیله همزمان اطلاعات خود را ارسال می کنند که این کار باعث افرایش سرعت انتقال می شود.اطلاعات پس از دریافت روی LCD نمایش داده می شود.
فایل پروتئوس و کدویژن را از زیر دانلود کنید.
این هم طرح واره یا همون شماتیک برنامه در پروتئوس:
ایل پروتئوس و کد ویژن آن را برای دانلود قرار داده ام.برای پروتئوس از ورژن 7.7 استفاده شده .چنانچه از نسخه های پایین تر استفاده می کنید قادر به باز نمودن آن نیستید .لذا با توجه به شکل زیر فایل پروتئوس را ایجاد کنید.این نکته را به یاد داشته باشید که عدد بیشتر از 255 را به یک مرتبه نمی توانید ارسال کنید.
امتحان کنید:
برای یکی از برنامه ها برداده ارسالی(data_send) را به 256 تغییر دهید.عدد دریافتی چند خواهد بود ؟
جواب 0:
چه نتیجه ای می گیرید ؟
برنامه ی MASTER(1) :
#include <mega32.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <spi.h>
#include <stdlib.h>
unsigned char data_send=10,data_get,buffer[];
void main(void)
{
PORTB=0x00;
DDRB=0xB0 | 0b00000001;
SPCR=0B01110111;
SPSR=0x00;
lcd_init(16);
PORTB.0=0;
data_send=19;
data_get=spi(data_send);
itoa(data_get,buffer);
lcd_puts(buffer);
while (1)
{
};
}
برنامه SLAVE(2) :
#include <mega32.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <spi.h>
#include <stdlib.h>
unsigned char data_send=10,data_get,buffer[];
void main(void)
{
PORTB=0x00;
DDRB=0x40;
ACSR=0x80;
SFIOR=0x00;
SPCR=0B01100100;
SPSR=0x00;
lcd_init(16);
data_send=17;
data_get=spi(data_send);
itoa(data_get,buffer);
lcd_puts(buffer);
}
با سپاس فراوان
نویسنده:AVR
سلام خیلی خیلی ممنون.
به امید پست های دیگر شما.
*در پناه حق .
مرسی عزیزم
با سلام و تشکر از مطلب آموزنده شما
من میخوام از یه آی سی کد زیرو بخونم
R0D4
کد شمارو به صورت
data_send='R';
data_get=spi(data_send);
تغییر دادم و توی پروتئوس به درستی جواب میده ولی حروف بعدی روکه میزارم توسط SPI Debuger پروتئوس که چک میکنم اشتباه میده
لطفا راهنمایی بفرمایید که چطور این کد روو بفرستم
با تشکر
سلام.
ببخشید که دیر جواب دادم.
شما اگه می خواهید این کد را از یه آی سی بخوننین چرا ارسال می کنید.
باید بگید که آی سی تون چیه تا بگم چکار کنید.
خواستید زود تر جواب بدم با ایمیل من در ارتباط باشین
habib.nasr.esf@gmail.com
سلام خسته نباشید
واقعا عالی بود
حسابی کمک کرد
2روزه دارم دنبال اموزش این ارتباط میگردم
یه د نیا ممنون
سلام.
مرسی عزیزم.
با چه فرکانسی کار کردی ؟
اصلا تو توضیحات ت نیست
فایل هات هم خراب برای دانلود :/
درود.
فرکانس کاری رو شما همان فرکانس کاری میکروی مستر است.ونیازی به تععین دیگر ندارد.جهت اطلاعات بیشتر با 09137875491 تماس بگیرید.