ایران رایانه » آموزش ها » آموزش میکروکنترلرهای AVR » آموزش میکروکنترلرهای AVR گام به گام 24
banner1 banner2
قبلی Play Stop بعدی
هاست

آموزش میکروکنترلرهای AVR گام به گام 24

ارزیابی كاربر: OFFOFFOFFOFFOFF / 0
ضعیف عالی 
با همكاری الناز بهبودی

قسمت بیست و چهارم:توابع کتابخانه Spi.h :
توابع کتابخانه Spi.h :
کامپایلر codevision کتابخانه spi.h را برای ساده نمودن بر قراری ارتباط بین برنامه های c و سایل جانبی از طریق باس SPI ارائه نموده است . تعریف این تابع در زیر دایرکتوری ../INC قرار دارد . قبل از استفاده از توابع موجود در آن باید آن را به کمک include #به ابتدای خود اضافه کنید . توابع SPI به قرار زیراند :
unsigned char spi (unsigned char data)i:
این تابع یک بایت داده را می فرستد و به طور همزمان یک بایت دریافت می کند . قبل از استفاده از تابع spi باید رجیستر کنترل SPI (SPCR)i را بر اساس مطالب ذکر شده در برگه های اطلاعاتی Atmel تنظیم نمود .
از آنجایی که تابع spi برای ارتباط SPI از روش polling استفاده می کند نیازی به فعال کردن وقفه SPI نیست . در ادامه مثالی از استفاده تابع spi برای برقراری ارتباط مبدل با آنالوگ به دیجیتال AD7896 آورده شده است :
در این برنامه مبدل آنالوگ به دیجیتال AD7896 به میکروکنترلر AT90S8515 متصل شده است.این برنامه هر 100 میلی ثانیه یکبار،مقدار ولتاژ ADC را به کمک تابع read_adc() به صورت سریال می خواند و بر روی LCD نمایش می دهد.
/*
Digital voltmeter using an
Analog Devices AD7896 ADC
connected to an AT90S8515
using the SPI bus
Chip: AT90S8515
Memory Model: SMALL
Data Stack Size: 128 bytes
Clock frequency: 4MHz
AD7896 connections to the AT90S8515
[AD7896] [AT9S8515 DIP40]
1 Vin
2 Vref=5V
3 AGND - 20 GND
4 SCLK - 8 SCK
5 SDATA - 7 MISO
6 DGND - 20 GND
7 CONVST- 2 PB1
8 BUSY - 1 PB0
Use an 2x16 alphanumeric LCD connected
to PORTC as follows:
[LCD] [AT90S8515 DIP40]
1 GND- 20 GND
2 +5V- 40 VCC
3 VLC
4 RS - 21 PC0
5 RD - 22 PC1
6 EN - 23 PC2
11 D4 - 25 PC4
12 D5 - 26 PC5
13 D6 - 27 PC6
14 D7 - 28 PC7 */

#asm
.equ __lcd_port=0x15
#endasm

#include <lcd.h> // LCD driver routines
#include <spi.h> // SPI driver routine
#include <90s8515.h>
#include <stdio.h>
#include <delay.h>

// AD7896 reference voltage [mV]
#define VREF 5000L

// AD7896 control signals PORTB bit allocation
#define ADC_BUSY PINB.0
#define NCONVST PORTB.1

// LCD display buffer
char lcd_buffer[33];

unsigned read_adc(void)
{
unsigned result;
// start conversion in mode 1
// (high sampling performance)
NCONVST=0;
NCONVST=1;
// wait for the conversion to complete
while (ADC_BUSY);
// read the MSB using SPI
result=(unsigned) spi(0)<<8;
// read the LSB using SPI and combine with MSB
result|=spi(0);
// calculate the voltage in [mV]
result=(unsigned) (((unsigned long) result*VREF)/4096L);
// return the measured voltage
return result;
}

void main(void)
{
// initialize PORTB
// PB.0 input from AD7896 BUSY
// PB.1 output to AD7896 /CONVST
// PB.2 & PB.3 inputs
// PB.4 output (SPI /SS pin)
// PB.5 input
// PB.6 input (SPI MISO)
// PB.7 output to AD7896 SCLK
DDRB=0x92;
// initialize the SPI in master mode
// no interrupts, MSB first, clock phase negative
// SCK low when idle, clock phase=0
// SCK=fxtal/4
SPCR=0x54;
// the AD7896 will work in mode 1
// (high sampling performance)
// /CONVST=1, SCLK=0
PORTB=2;
// initialize the LCD
lcd_init(16);

lcd_putsf("AD7896 SPI bus\nVoltmeter");
delay_ms(2000);
lcd_clear();

// read and display the ADC input voltage
while (1)
{
sprintf(lcd_buffer,"Uadc=%4umV",read_adc());
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(100);
{;
{


انجام تنظیمات اولیه ارتباط سریال SPI در Codewizard :
در صورتی که در برنامه Codewizard بر روی لبه SPI کلیک کنید می توانید ویژگیهای ارتباط SPI را تنظیم کنید . با انتخاب گزینه SPI enabled ارتباط SPI در داخل میکرو فعال می شود .


اگر قصد دارید تا پس از اتمام یک ارسال SPI، وقفه تولید گردد باید گزینه SPI interrupt را علامت بزنید علاوه بر این شما می توانید پارامترهای زیر را تنظیم کنید:
SPI clock rate:
کلاک استفاده شده در پایه SCK برای ارسال داده ها را مشخص می کند .
Clock phase :
موقعیت لبه سیگنال SCK را نسبت به بیت داده مشخص می کند .
Clock polarity :
وضعیت پایه SCK را در حالت بیکاری تعیین می کند .
SPI Type :
حالت عملکرد SPI را به صورت Master یا slave مشخص می کند .
Data order :
ترتیب ارسال بیتهای داده ( اول LSB یا اول MSB ) را تعیین می کند .
انتخاب گزینه clock Rate*2 که برای بعضی از تراشه های VAR وجود دارد ،سرعت کلاک SPI را دو برابر می کند
برای بر قراری ارتباط از طریق واسطه SPI در صورتی که وقفه SPI غیر فعال باشد ، از توابع SPI استفاده می شود و در صورتی که وقفه SPI فعال باشد باید از روتین وقفه spi_isr که توسط Codewizard تولید می شود ،استفاده نمود .


http://www.microrayaneh.com

 

بعدی >

0 نظر

هیچ نظری وجود ندارد. اولین نفر برای نظر دهی به این مقاله باشید!

ارسال یك نظر


هجی كردن هجی كردن

آخرین محصولات

ویدئو پروژکتور اپسون  Epson EB-445Wi ویدئو پروژکتور اپسون Epson EB-445Wi
1 ﷼
تدی Teddy تدی Teddy
1 ﷼
1 ﷼
پاندا Panda پاندا Panda
1 ﷼
1 ﷼
موش Mouse موش Mouse
1 ﷼
1 ﷼
ببر سیاه Black Panther ببر سیاه Black Panther
1 ﷼
1 ﷼
میمون Monkey میمون Monkey
1 ﷼
1 ﷼
شیر Lion شیر Lion
1 ﷼
1 ﷼
کرگدن Hippo کرگدن Hippo
1 ﷼
1 ﷼
فیل Elephant فیل Elephant
1 ﷼
1 ﷼

رأی گیری

آیا مطالب ایران رایانه برای شما مفید هستند؟

نتایج
Powered by Pars Mizban Services and Elxis