-
 

راهنمای استفاده از کتابخانه spi میکرو avr (قسمت چهارم : توابع ارسال و دریافت)

 کتابخانه spi  برای میکروهای  avr  atmega8-16-32-64-128, کنترل حجم نسخه ,امکان تغییر تنظیمات هنگام کار,نرم افزار winavr , زبان c , کمپایلر gcc ,  آردوینوarduino

 

 

 

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : (قسمت سوم :فایلهای کتابخانه )

پست بعدی :( هنوز تکمیل نشده )

 

 

با سلام .

توی این قسمت توابع مربوط به ارسال و دریافت رو توضیح میدم .

تابع spi_fast_communication_byte( uint8_t  data);

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

تابع_spi_fast_transmit_string_array_nbyte( uint8_t  *data, uint8_t     cmd_nbyte);

این برای ارسال آرایه یا رشته استفاده میشود . data همان آرایه یا رشته است . و متغیر دوم یک کامند است که تعیین میکند تابع در مود ارسال رشته یا آرایه قرار بگیرد .ودر عین حال طول آرایه ارسالی را مشخص میکند . اگر بیت هشتم cmd_nbyte  عدد 0 باشد تابع در وضعیت ارسال آرایه قرار میگیرد و هفت بیت بعدی تعداد عناصر آرایه است که حداکثر میتواند 127 باشد .اما اگر اگر بیت هشتم cmd_nbyte  عدد 1 باشد ، تابع در وضعیت ارسال رشته قرار میگیرد و بقیه بیتها اندازه رشته را مشخص میکند که حداکثر میتواند 127 باشد . تفاوتی که حالت رشته با حالت آرایه دارد در این است که هرگاه تابع به کاراکتر '0\' برسد ارسال متوقف میشود حتی اگر تعداد کاراکترهای ارسال شده کمتر از مقدار مشخص شده درcmd_nbyte باشد . و اگر طول رشته بیشتر از مقداری باشد که در cmd_nbyte مشخص شده است . تمام رشته به طور کامل ارسال نخواهد شد. بنابر این برای حالت رشته بهتر است طول را حداکثر یعنی  127 در نظر بگیرید . چون تنظیمات cmd_nbyte در عمل کمی مشکل است . پیکر بندی های لازم برای ارسال رشته یا آرایه را به صورت ماکروهای زیر  در spi.h تعریف کردم .

spi_fast_transmit_array_nbyte( data,nbyte)

spi_fast_transmit_string( buff)

از اسم این ماکروها کاملا مشخص است که چه کاری را انجام میدهند و لی به خاطر داشته باشید که در ماکروی دوم طول رشته نباید از 127 بیشتر باشد .

ضمنا این تابع مقدار برگشتی دارد و مقدار برگشتی تابع ، تعداد کاراکترهایی است که ارسال شده اند.

تابع

_spi_fast_recive_string_array_nbyte( uint8_t  *data, uint8_t     cmd_nbyte);

این تابع برای دریافت رشته یا آرایه استفاده میشود . وقوانین مربوط به تنظیم کامند ، همانند تابع قبل است . این تابع مقدار برگشتی دارد و مقدار برگشتی تابع ، تعداد کاراکترهایی است که دریافت شده اند. برای راحتی کار تنظیمات لازم برای دریافت رشته یا آرایه به صورت ماکرو در فایل  spi.h قرار دادم.

ماکروها به شرح زیر هستند

spi_fast_recive_array_nbyte( data,nbyte) ;   
 spi_fast_recive_string( buff);

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

و در مورد ماکرو مربوط به آرایه لطفا دقت کنید طول آرایه data  از طول رشته ای که باید دریافت کنه بیشتر باشه .

کلیه توابع بالا هم در نسخه کم حجم و هم در نسخه کامل وجود دارد البته عملکردش بسته به حجم  نسخه کمی متفاوت است ، در نسخه کم حجم سرعت بالاتری داردولی  نسبت به تنظیمات حساس است به طور مثال اگر وقفه انتقال را فعال کرده باشید و در حین اجرای برنامه وقفه را خاموش کنید این تابع دیگر کار نخواهد کرد . و در نسخه کامل سرعت کمتر است ولی نسبت به تنظیم وقفه انعطاف دارد به طوری که حتی در حین اجرا ی برنامه وضعیت وقف را تغییر دهید توابع به خوبی کار خواند کرد.

توضیحات مربوط به توابع ارسال  دریافت به پایان رسید حال شما با توجه به فایل مثالی که همراه کتابخانه قرار دادم میتونید تنظیمات اولیه و ارسال و دریافت رو انجام بدید. در قسمت های بعدی در مورد توابع مربوط به تنظیمات spi  که البته فقط در نسخه کامل وجود دارد توضیح خواهم داد .

و در آخر لطفا بنده رو از نظرات خودتون در مورد این مطلب به صورت کامنت بهره مند سازید .

با تشکر .

پست قبلی : (قسمت سوم :فایلهای کتابخانه )

پست بعدی :( هنوز تکمیل نشده )

 

 حق مالکیت معنوی : محفوظ است . انتشار با ذکر منبع بلا مانع است .

راهنمای استفاده از کتابخانه spi میکرو avr (قسمت سوم: شروع کار با کتابخانه)

 کتابخانه spi  برای میکروهای  avr  atmega8-16-32-64-128, کنترل حجم نسخه ,امکان تغییر تنظیمات هنگام کار,نرم افزار winavr , زبان c , کمپایلر gcc ,  آردوینوarduino

 

 

 

 

 

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : (قسمت دوم :فایلهای کتابخانه )

پست بعدی : (قسمت چهارم : توابع ارسال و دریافت)

 

با سلام مجدد به تمام خوانندگان .

 

در قسمت قبل(اینجا ) در مورد فایلهای کتابخانه توضیح دادم  و ماکرو های مهمترین فایل که spi_conf.h هست رو معرفی کردم و نقشش رو توضیح دادم .

بعد از اینکه تنظیمات رو در فایل spi_conf.h انجام دادید . دستور spi_init()  رو اجرا کنید ( برای راحتی کار و رعایت حروف کوچک و بزرگ پیشنهاد میکنم که نام توابع رو از spi.h کپی پیست کنید ) .

این تایع  تنظیمات واحد spi رو انجام میده و پینها رو در وضعیت مناسب قرار میده  و در هر دونسخه کم حجم و کامل وجود داره . و فرقی نمیکنه از کدوم حالت حجم نسخه استفاده میکنید ، باید قبل از هر کاری با spi  این تابع رو اجرا کنید .

تویحات تکمیلی در مورد spi_init() :

این تابع در واقع یک ماکرو در لایه 5هست که در فایل spi.h ( کلا ماکروها داخل فایل هدر قرار دارند )که اگر به تعریف اون  نگاه کنید میبینید که باز یک ماکرو به اسم   

_spi_init()

که یک تعداد پارامتر داره و در لایه 4 قرار دارد . این ماکرو یی هست که برای پیکر بندی یک تابع ( این یکی دیگه واقعا تابع هست ) به اسم :

__spi_init( cmd)

 تعریف شده و این تابعی هست که spi  رو اینیشیال میکنه منتها برای تنظیماتش یک کامند 8 بیتی در نظر گرفتم . و ماکروی  _spi_init()   که تعدادی پارامتر داره کار سازماندهی کامند رو بر اساس تنظیمات مورد نظر انجام میده .

در نسخه کم حجم از ماکروی

_spi_init()

میتونید برای تغیر تنظیمات spi  استفاده کنید . که البته تنظیمات رو که میخواهید اعمال  کنید باید در  پارامترهای ورودی ماکرو قرار بدید .

تابع spi_deinit() :

این تابع کلا spi رو از کار میندازه و رجیسترها رو به مقدار پیش فرض بر میگردونه . قبل از اینیشیال مجدد میتونید با این تابع spi  را به حالت پیشفرض بر گردونید .

خب تا اینجا مرحله راه اندازی spi  به پایان رسید .

در قسمت بعدی توابع  ارسال و دریافت رو معرفی میکنم .

لطفا بنده رو از نظرات خودتون در مورد این مطلب به صورت کامنت بهره مند سازید .

با تشکر .

 

 

پست قبلی : (قسمت دوم :فایلهای کتابخانه )

پست بعدی : (قسمت چهارم : توابع ارسال و دریافت)

حق مالکیت : محفوظ است . انتشار با ذکر منبع بلا مانع است .

 

 

 

راهنمای استفاده از کتابخانه spi میکرو avr (قسمت دوم: فایلهای کتابخانه)

با سلام مجدد.

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : کتابخانه spi برایavr ( قسمت اول : معرفی)

پست بعدی : ( قسمت سوم : شروع کار با کتابخانه )

 

همانطور که در پست معرفی کتابخانه spi    گفته بودم قصد دارم روش استفاده از کتابخانه رو توضیح بدم .

برای شروع اول در مورد  فایلهای کتابخانه توضیح میدم .این کتابخانه شامل فایلهای زیر است .

spi.h  spi.c ,  spi_conf.h  ,spi_define_name.h , spi_typedef.h , bit.h

فایل bit.h  شامل ماکروهایی برای دستکاری رجیسترها به صورت بیتی هست که در اغلب کدهایی که من مینویسم این فایل دیده میشه .

فایل  spi .h که در اون فابلهای لازم پیوست و الگوی توابع تعریف شده است.

فایل spi.c تعریف بدنه توابع هست .

فایل spi_typedef.h مربوط به تعریف انواع داده هایی هست که کتابخانه در حالت نسخه کامل (در ادامه ماجرای نسخه کامل رو توضیح میدم )از اونها استفاده میکنه .

فایل  spi_define_name.h   که از فایلهای مهم کتابخانه هست و شامل اسامی هست که شما  برای پیکر بندی واحد spi به اونها نیاز دارید.

و اما مهمترین فایل برای کاربران کتابخانه  که برای تنظیم spi  باید اون رو تغیر بدید فایل spi_conf.h 

 هست ، که پیکربندی spi  در اون فایل تعیین میشه . با نگاهی به محتویات این فایل مطالب زیر رو در اون میبینید :

#define     SPI_VERSION_VOLUME                SPI_full_volume_version

#define     SPI_MASTER_SLAVE_SELECT           SPI_Master_Mode  

#define     SPI_INTERRUPT                     SPI_Enable  

#define     SPI_DATA_ORDER                    SPI_Msb_First

#define     SPI_MODE                          SPI_Mode_0 //SPI_Sample_Rising_Setup_Falling  

#define     SPI_CLOCK                         SPI_fosc_128//  fosc/128   

/* this just for master mode */
#define     SPI_SS_DIRECTION                  SPI_Ss_Output


//**************************

#define     SPI_SS_PORT          PORTB
#define     SPI_SS_DDR           DDRB
#define     SPI_SS_PIN           2U

#define     SPI_MOSI_DDR         DDRB
#define     SPI_MOSI_PIN         3U

#define     SPI_MISO_DDR         DDRB
#define     SPI_MISO_PIN         4U

#define     SPI_SCK_DDR          DDRB
#define     SPI_SCK_PIN          5U

 

اولین ماکرو SPI_VERSION_VOLUME    ماکروی مهمی هست . مقادیری که میتونید برای این ماکرو تعیین کنید در فایل  spi_define_name.h  تعیین شده و به صورت زیر هست .

//********  version volume  names   *****
#define     SPI_full_volume_version        1U     
#define     SPI_low_volume_version        0U

 مقدارSPI_full_volume_version  :

این مقدار کتابخانه در حالت نسخه کامل قرار خواهد داد .

مزیت کتابخانه دراین حالت اینه که میتوان تنظیمات spi( فرکانس پالس کلاک ، مد کاری ، حالت مستر و اسلیو و غیره ...) را در حین اجرای برنامه و بعد از تنظیمات اولیه ، بوسیله توابع کتابخانه ای تغییر داد. در این حالت کتابخانه  ، تقریبا کاری نیست که شما بخواهید انجام بدید و نتونید .

فقط عیبی که داره اینه که حجم کتابخانه زیادتر خواهد بود .

 

مقدار SPI_low_volume_version :

در این حالت کتابخانه قابلیت تغییر در تنظیمات رو به طور موردی نداره و برای تغییر تنظیمات باید بوسیله توابع خاصی ،  واحد spi  از اول به طور کامل راه اندازی بشه که شاید چندان مطلوب نباشه اما مزیتش اینه که حجم کتابخانه تقریبا نصف نسخع کامل هست . اگر در حین اجرای برنامه نیاز به تغییرات تنظیمات spi  نیست جهت صرفه جویی در حجم برنامه پیشنهاد میکنم از این حالت استفاده کنید .

ماکروی SPI_MASTER_SLAVE_SELECT  که مربوط به انتخاب حالت مستر و اسلیو هست .و شامل انتخابهای زیر است  :

//********   SPI_MODE   name   *****

#define     SPI_Master_Mode    1U     
#define     SPI_Slave_Mode     0U

ماکروی SPI_INTERRUPT مربوط به استفاده از وقفه است  .

ماکروی SPI_MODE :

مربوط به  مد کار spi  هست که تعیین میکنه  نمونه گیری در کدام لبه پالس ساعت و تغیر داده در کدام لبه انجام بشه . و 4 حالت داره که من برای برای تشخیص آسون آونها رو به صورت کامنت در قسمت مربوطه در فایل spi_define_name.h قرار دادم که در تشخیص کمک میکنه .

ماکروی SPI_CLOCK :

که مربوط به فرکانس پالس کلاک spi هست , در حالت مستر تاثیر گذار هست .

ماکروی SPI_SS_DIRECTION  :

که مربوط به تعیین جهت پایه ss  در حالت مستر هست که هر کدام از حالتهای ورودی و خروجی  یک قابلیتی داره اما در حالت  اسلیو تاثیر گذار نیست ولی برای امنیت سخت افزار اون رو ورودی کنید .( اگر این پایه خروجی باشه و شما spi اسلیو رو خاموش کنید پایه به حالت خروجی در میاد که در صورتی که پایه ss مربوط به spi مستر خروجی باشه و ارزش های متفاوتی داشه باشن به دلیل امپدانس کم پورت در حالت خروجی ممکنه جریان زیادی از پورتها عبور کنه .)

ماکروهای

//**************************

#define     SPI_SS_PORT          PORTB
#define     SPI_SS_DDR           DDRB
#define     SPI_SS_PIN           2U

#define     SPI_MOSI_DDR         DDRB
#define     SPI_MOSI_PIN         3U

#define     SPI_MISO_DDR         DDRB
#define     SPI_MISO_PIN         4U

#define     SPI_SCK_DDR          DDRB
#define     SPI_SCK_PIN          5U

مربوط به تعیین تعیین پایه های spi هستن ( و تا اونجا که من بررسی کردم برای میکروهای atmega8-16-32 یکسان هست ) فقط توجه داشته باشید که اون ماکروهایی که در اونها عبارت pin هست مربوط به شماره پایه های مربوطه ست .

تا اینجا توضیح در مورد فایلها به پایان رسید .( ادامه دارد )

پست قبلی : کتابخانه spi برایavr ( قسمت اول : معرفی)

پست بعدی : ( قسمت سوم : شروع کار با کتابخانه )

حق مالکیت : محفوظ است . انتشار با ذکر منبع بلا مانع است .

 

 

 

کتابخانه spi برایavr به زبان C در (winavr (GCC ( قسمت اول : معرفی)

 کتابخانه spi  برای میکروهای  avr  atmega8-16-32-64-128, کنترل حجم نسخه ,امکان تغییر تنظیمات هنگام کار,نرم افزار winavr , زبان c , کمپایلر gcc ,  آردوینوarduino

 

 

(این کتابخانه در تاریخ 1398/2/1 ساعت 16 به روز شده است .لطفا  فایل بروز شده را از آدرس موجود در متن دانلود کنید)

لینک دانلود:از اینجا دانلود کنید

با سلام .

این کتابخانه spi رو برای میکروهای avr با نرم افزار winavr (کمپایلرgcc) وبه زبان C نوشتم . چون کمپایلرش gcc هست روی آردوینو و atmel studio هم کار میکنه .و طوری  نوشتم که بشه از تمام قابلیتهای spi میکرو ، با استفاده از توابع  استفاده کرد .

این کتابخانه قابلیت این رو داره در حین کار با استفاده از توابع ، تنظیمات واحد spi رو تغییر داد مثلا کلاک ، مد کاری ، حالت master یا slave  و همینطور جهت پین SS برای حالت مستر رو تغیر داد . در این کتابخانه قابلیتی گنجاندم  که در جای دیگه ای ندیم و اون هم اینه که شما میتونید حجم کتابخانه رو کنترل کنید .

فعلا این رو علی الحساب داشته باشید تا سر فرصت روش استفاده رو توضیح بدم .( البته اگه خودتون کدها رو نگاه کنید متوجه میشید از کدام توابع باید استفاده بشه ...اسمها واضحه ) این هم لینک دانلود فایهای کتابخانه و شماتیک از گیتهاب. از اینجا دانلود کنید . و اگر در حین اجرای برنامه مستر و اسلیو بودن spi رو تغیر میدید به دلیل اینکه جهت پایه عوض میشه  پیشنهاد میکنم از شماتیک زیر استفاده کنید . البته فقط پیشنهاده .... اگر دقت کنید که  spi ها در یک زمان   در حالت master  نباشند ، نیازی به استفاده از شماتیک نیست .

 

مقاومت ها را بین 1.8 تا 2.2 کیلو اهم انتخاب کنید.

این کتابخانه رایگان نیست ولی لطفا همانطور که در قسمت معرفی وبلاگ گفتم عمل کنید .

بنده را از نظراتتان به صورت کامنت بهره مند سازید

با تشکر.

ادامه دارد.........

پست بعدی :  راهنمای استفاده از کتابخانه spi میکرو avr (قسمت دوم: فایلهای کتابخانه)

حق مالکیت : محفوظ است . لطفا کپی نکنید لینک بدید.

 
  BLOGFA.COM