دستگاهای کنترل بیسیم NERCI

انواع ریموت کنترل ها را می توانید اینجا بیابید.

دستگاهای کنترل بیسیم NERCI

انواع ریموت کنترل ها را می توانید اینجا بیابید.

آشنایی با SPI در AVR به همراه فایل پروتئوس و کدویژن

باسلام

به سایت ونوس ایران زمین خوش آمدید.

در این نبشته به استفاده از پروتکل 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

نظرات 4 + ارسال نظر
محسن سه‌شنبه 4 مرداد‌ماه سال 1390 ساعت 12:33 ب.ظ

سلام خیلی خیلی ممنون.
به امید پست های دیگر شما.
*در پناه حق .

مرسی عزیزم

حمیدی نژاد یکشنبه 24 اردیبهشت‌ماه سال 1391 ساعت 06:32 ق.ظ

با سلام و تشکر از مطلب آموزنده شما

من میخوام از یه آی سی کد زیرو بخونم

R0D4
کد شمارو به صورت
data_send='R';
data_get=spi(data_send);
تغییر دادم و توی پروتئوس به درستی جواب میده ولی حروف بعدی روکه میزارم توسط SPI Debuger پروتئوس که چک میکنم اشتباه میده

لطفا راهنمایی بفرمایید که چطور این کد روو بفرستم
با تشکر

سلام.
ببخشید که دیر جواب دادم.
شما اگه می خواهید این کد را از یه آی سی بخوننین چرا ارسال می کنید.
باید بگید که آی سی تون چیه تا بگم چکار کنید.
خواستید زود تر جواب بدم با ایمیل من در ارتباط باشین
habib.nasr.esf@gmail.com

علیرضا یکشنبه 7 خرداد‌ماه سال 1391 ساعت 05:49 ب.ظ http://09351284997.blogfa.com/

سلام خسته نباشید
واقعا عالی بود
حسابی کمک کرد
2روزه دارم دنبال اموزش این ارتباط میگردم
یه د نیا ممنون

سلام.
مرسی عزیزم.

علی پنج‌شنبه 15 بهمن‌ماه سال 1394 ساعت 09:00 ق.ظ

با چه فرکانسی کار کردی ؟
اصلا تو توضیحات ت نیست
فایل هات هم خراب برای دانلود :/

درود.
فرکانس کاری رو شما همان فرکانس کاری میکروی مستر است.ونیازی به تععین دیگر ندارد.جهت اطلاعات بیشتر با 09137875491 تماس بگیرید.

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد