PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کلیه آموزش ها و نکات مهم برد eke2sam7x v2.0 کویرالکترونیک



kavir
01-04-2011, 19:17
سلام
از این پس تمامی نکات مهم و مثالهای برد EKE2SAM7X v2.0 (You can see links before reply) در این بخش قرار می گیرد
دوستانی که مثال یا پروژه ای با این برد تست کردند می توانند در ادامه قرار دهند.
لطفا از مطرح نمودن سوال در این بخش خود داری کنید
دوستانی که تمایل به خرید دارند می توانند از فروشگاه (You can see links before reply) تهیه نمایند
ماژول آموزشی ARM اتمل sam7x256 - فروشگاه اينترنتي شركت كويرالكترونيك (You can see links before reply)




تامین شدن تغذیه از طریق پورت usb
برنامه پیش فرض روی برد چشمک زدن تمامی LED ها می باشد
بدون نیاز به پروگرامر جدا



You can see links before reply

agape
08-09-2011, 11:54
You can see links before reply
سلام به همه دوستان!:hi:
بعد از کلی درگیر شدن این میکرو اخر یه کتابخونه برای ایجاد تاخیر دقیق نوشتم :o
این کتابخونه از تایمر کانتر 2 برای ایجاد تاخیر استفاده می کنه و حداقل میزان تاخیر 1 میکروثانیه و حد اکثر میزان تاخیر 4 میلیارد میلی ثانیه است.
نکات مهم:
You can see links before reply این کتابخونه فقط بر روی میکرو های آتمل کار خواهد کرد (چون از تایمر کانتر استفاده شده)
You can see links before reply در هنگام استفاده از این کتابخانه ، نباید در برنامه از تایمر 2 استفاده شود.
You can see links before reply این کتابخانه به صورت خودکار با استفاده از رجیستر های PMC کلاک سیستم رو حساب کرده و بر اساس آن تاخیر را محاسبه می کند.{پس منطقی است که با تغییر مقدار PLL در مدت زمان تاخیر ها اختلالی ایجاد نمیشود}
توضیح توابع :


unsigned int GET_MASTER_CPU_CLOCK (void);
این تابع مقدار کلاک سیستم رو بر حسب هرتز باز می گرداند.


void init_delay(void);
این تابع در ابتدای برنامه باید فراخوان شود تا تایمر را مقدار دهی و اماده استفاده کند.(در غیر این صورت کتابخانه به درستی کار نخواهد کرد.)


void delay_us(unsigned int us);
ایجاد تاخیر میکرو ثانیه ای{این تابع حداکثر تا 5000 میکروثانیه تاخیر ایجاد می کند.}


void delay_ms(unsigned long ms);
ایجاد تاخیر های میلی ثانیه ای تا 4 میلیارد میکروثانیه

دانلود کتابخانه همراه با یک مثال کاملا تست شده:

agape
09-09-2011, 15:06
سلامی دوباره به همه دوستان:hi:
برای این ساعت کتابخانه PWM که از کاربرد های زیادی برخوردار هست رو آماده کردم. از جمله کارایی که میشه با این کتابخانه انجام داد کنترل درخشندگی یک لامپ تا کنترل سرعت موتور های DC و حتی تولید سیگنال آنالوگ و در اخر پخش صدا که دوستان با میکروهای AVR این کاررو انجام دادن امیدوارم بعد از انتشار این کتابخانه شاهد گسترش کاربرد های آن باشم:o
امکانات کتابخانه :
You can see links before reply قبل از هرچیز لازم به ذکر است این کتابخانه صرفا برای سری SAM7 نوشته شده.
You can see links before reply این کتاب خانه فول سورس می باید و تمام امکانات موجود را در اختیار قرار می دهد.
You can see links before reply این کتابخانه به صورت خودکار رجیستر های کنترلی را برای تنظیم کلاک مقدار دهی می کند.
You can see links before reply این کتابخانه رجیستر کنترلی PMC که کنترل توان را در اختیار دارد را تغییر نمی دهد پس برای راه اندازی و یا غیر فعال کردن قسمت PWM باید این کانال را به صورت مجزا مقدار دهی کرد.

توابع کتابخانه :

PWMC_Configure_PIO(PWM_PORT,PWM_PIN)این ماکرو ، پورت و شماره پایه PIO را گرفته و تنظیمات اتصال آن را به واحد PWM انجام میدهد.


extern void PWMC_ConfigureChannel(
unsigned char channel,
unsigned int prescaler,
unsigned int alignment,
unsigned int polarity);این تابع تنظیمات و پیکربندی کانال مورد نظر را انجام می دهد. ورودی ها به ترتیب:
شماره کانال (0و1و2و3)
مشخص کننده منبع کلاک(clka,clkb,...)
نحوه شمارش کانتر به صورت دندانه اره ای یا به صورت مثلثی
مشخص کننده پلاریته خروجی


extern void PWMC_ConfigureClocks
(unsigned int clka,
unsigned int clkb,
unsigned int mck);توسط این تابع میتوان دو منبع کلاک دستی (CLKA,CLKB ) را مقدار دهی کرد ورودی ها:
فرکانس خروجی کلاک A بر حسب هرتز اگر 0 باشد از مقدار دهی آن چشم پوشی میکند.
فرکانس خروجی کلاک B بر حسب هرتز اگر 0 باشد از مقدار دهی آن چشم پوشی میکند.
فرکانس کلاک مرکزی که توسط آن مقدار رجیستر ها را محاسبه میکند.


extern void PWMC_SetPeriod(unsigned char channel, unsigned short period);پلاریته کانال مورد نظر رو مقدار دهی می کند.


extern void PWMC_SetDutyCycle(unsigned char channel, unsigned short duty);Duty cycle کانال مورد نظر رو تعین می کند.


void PWMC_EnableChannel(unsigned char channel);فعال سازی کانال مورد نظر.


void PWMC_DisableChannel(unsigned char channel);غیر فعال کردن کانال مورد نظر.


void PWMC_EnableChannelIt(unsigned char channel)فعال سازی منبع وقفه برای کانال مورد نظر {لازم به ذکر است قبلا باید AIC مقدار دهی شده باشد.}


void PWMC_DisableChannelIt(unsigned char channel)غیر فعال سازی منبع وقفه برای کانال مورد نظر.

You can see links before reply

:wink:
دانلود کتابخانه به همراه مثال کاملا تست شده:

agape
11-09-2011, 22:22
سلام به همه دوستان گرامی :hi:
خوب برای این پست کتابخونه USART رو به آماده کردم ، درسته قبلا این کتابخونه توسط بچه ها نوشته شده بود ولی اصلا کامل نبود ، اون کتابخونه فقط رو یه مد USART رو درایو میکرد و نمیشد از مد های دیگه استفاده کرد. ولی این کتابخونه »
You can see links before reply این کتابخونه فول کد هست و تمام امکانات USART رو در اختیار قرار میده.You can see links before reply
You can see links before reply این کتابخونه هر دو رابط USART رو پشتیبانی میکنه
You can see links before reply حد المقدور سعی شده که توابع کم بشن و کارایی بالا بره
You can see links before reply قابلیت تعریف بافر سند و رسیو {سخت افزاری نه نرم افزاری}
You can see links before reply این کتابخونه رجیستر PMC رو مقدار دهی نمیکنه و باید دستی مقدار دهی بشه.
مرحل درایو کردن کتابخونه:
1. فعال کردن کلاک USART با مقدار دهی PMC
2. فعال کردن PIO های مورد نیاز USART
3. مقدار دهی USART با استفاده از تابع USART_Configure
4. فعال کردن قسمت های سند و رسیو با توجه به نیاز
توابع کتابخانه:
ماکروها:

USART_Configure_PIO(USART_PORT,USART_PIN)
فعال کردن PIO های مورد نیاز
مثال:

USART_Configure_PIO(USART0_PORT,TXD0);// SET TXD0 TO USART
USART_Configure_PIO(USART0_PORT,RXD0);// SET RXD0 TO USART

توابع :

extern void USART_Configure(
AT91S_USART *usart,
unsigned int mode,
unsigned int baudrate,
unsigned int masterClock);
مقدار دهی اولیه USART ، پارامتر ها به ترتیب
آدرس USART مورد نیاز مقادیر -> {USART0 , USART1}
متغییر مد پیکر بندی اساسی USART رو انجام میده به عنوان مثال مقدار USART_MODE_ASYNCHRONOUS ، پورت در حالت آسنکرون 8 بیتی 1 بیت استاپ پیکربندی میکنه و یا مقدار USART_MODE_IRDA پورت رو برای حالت مادون قرمز 8 بیت داده 1 بیت استاپ پیکربندی میکنه
در کل تمام کلید های مورد استفاده رو با مختصر توضیح می نویسم و با ترکیب اونا میشه حالت های دلخواه رو به وجود آورد:

Usart mode:
AT91C_US_USMODE_NORMAL Normal
AT91C_US_USMODE_RS485 RS485
AT91C_US_USMODE_HWHSH Hardware Handshaking
AT91C_US_USMODE_MODEM Modem
AT91C_US_USMODE_ISO7816_0 ISO7816 protocol: T = 0
AT91C_US_USMODE_ISO7816_1 ISO7816 protocol: T = 1
AT91C_US_USMODE_IRDA IrDA
AT91C_US_USMODE_SWHSH Software Handshaking

Clock Selection (Baud Rate generator Input Clock):
AT91C_US_CLKS_CLOCK Clock
AT91C_US_CLKS_FDIV1 fdiv1
AT91C_US_CLKS_SLOW slow_clock (ARM)
AT91C_US_CLKS_EXT External (SCK)

Character Length:
AT91C_US_CHRL_5_BITS Character Length: 5 bits
AT91C_US_CHRL_6_BITS Character Length: 6 bits
AT91C_US_CHRL_7_BITS Character Length: 7 bits
AT91C_US_CHRL_8_BITS Character Length: 8 bits
AT91C_US_SYNC Synchronous Mode Select

Number of Stop bits:
AT91C_US_NBSTOP_1_BIT 1 stop bit
AT91C_US_NBSTOP_15_BIT Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits
AT91C_US_NBSTOP_2_BIT 2 stop bits
برای مثال فرامین زیر پورت با 8 بیت دیتا بدون پرتی یک بیت استاپ و هندشیکینگ و منبع کلاک MCK پیکر بندی میکنه، برای اطلاعات بیشتر به دیتاشیت مراجعه کنید.

unsigned int mode = AT91C_US_USMODE_HWHSH
| AT91C_US_CLKS_CLOCK
| AT91C_US_CHRL_8_BITS
| AT91C_US_PAR_NONE
| AT91C_US_NBSTOP_1_BIT
| AT91C_US_CHMODE_NORMAL;
متغییر بعدی سرعت باوود هست
و آخری هم سرعت کلاک سیستم برای محاسبه درست باوود.


void USART_SetTransmitterEnabled(AT91S_USART *usart, unsigned char enabled)
فعال کردن قسمت فرستنده
متغییر اول نام پورت مثل {USART0 , USART1}
متغییر دوم اگر 1 باشد فعال و 0 غیر فعال


void USART_SetReceiverEnabled(AT91S_USART *usart, unsigned char enabled)
فعال سازی قسمت گیرنده پارامتر ها مثل تابع قبل


void USART_Write(
AT91S_USART *usart,
unsigned short data,
volatile unsigned int timeOut);
ارسال یک بایت روی پورت سریال متغییر ها به ترتیب:
نام پورت مورد استفاده
مقدار داده که باید نوشته شود
مدت زمان انتظار ارسال اگر مقدار 0 داده شود تابع تا خالی شدن بافر و ارسال داده منتظر می ماند. در غیر این صورت در صورت سپری شدن مدت زمان معیین در صورت ارسال مقدار 0 و در صورت عدم ارسال مقدار 1 برا بر میگرداند.


unsigned char USART_WriteBuffer(
AT91S_USART *usart,
void *buffer,
unsigned int size);
ارسال یه بافر از داده روی پورت
-شماره پورت
-آدرس بافر
-تعداد بایت های ارسالی


USART_Read(
AT91S_USART *usart,
volatile unsigned int timeOut);
دریافت داده از پورت سریال پارامتر ها مثل USART_Write با این تفاوت که مقدار دریافتی رو بر میگردونه.


unsigned char USART_ReadBuffer(
AT91S_USART *usart,
void *buffer,
unsigned int size);
دریافت رشته ای از داده از پورت سریال پارامتر ها مثل USART_WriteBuffer با این تفاوت که مقدار دریافتی رو در بافر می نویسد.

وای چقد نوشتم:wink:


You can see links before reply
دریافت کتابخانه یا مثال کاملا تست شده:

agape
12-09-2011, 00:41
و باز سلام:hi:
بعد از راه اندازی کامل واحد USART نوبت میرسه به یکی از رابط های مهم کار با پورت سریال تا حالا فکر کردید که آیا از طریق این رابط میشه منو ساخت و مدیریت کرد. بله این امکان هست با رابط VT100:o توی این پست کتابخونه VT100 رو براتون آماده کردم .
چون دیر وقته در مورد توابعش توضیح نمیدم فقط یه فیلم از نحوی کار کردش هست و چند تا عکس و خود کتابخونه و مثال تست شده.
لینک فیلم حجم 400 کیلوبایت:

You can see links before reply

You can see links before reply

You can see links before reply

دانلود کتابخانه همراه با مثال تست شده :

agape
13-09-2011, 00:00
و باز سلام به همه دوستان گرامی:hi:
برای این پست کتابخونه SWI2C رو آماده کردم ، همون طور که میدونید رابط I2c یا همون TWI یک رابط انتقال داده در سطح بورد که توسط شرکت فیلیپس طراحی شده و امروزه آیسی های زیادی با این پروتکل کار میکن از جمله حافظه های EEPROM و یا تایمر زمان سنج RTC و حتی پورت ورودی خروجی PIO ، این کتابخونه به صورت نرم افزاری این پروتکل رو شبح سازی میکنه به این معنی که از سخت افزار نصب بر روی میکرو برای درایو این پروتکل استفاده نمی کنه ! از مزیت های این سیستم اینه که میتونید هر پایه دلخواهی رو برای باس سیستم استفاده کنید.
نیازمندی های راه انداری :
کتابخانه tdelay.h که توی همین صفحه قابل دانلود هست.
نکات مهم »
You can see links before replyاین کتابخانه برای میکروی های سری 7 نوشته شده و فرقی نمیکنه S , X, EX باشه.
You can see links before replyاین کتابخانه تا سرعت 1 مگاهرتز رو برای باس پشتیبانی میکنه که تقریبا 3 برابر سرعت استاندارد باس هست.
You can see links before reply این کتابخانه فقط مد مستر رو برای میکرو پشتیبانی میکنه.

توضیح توابع و مارو ها:

#define I2cSW_PORT AT91C_BASE_PIOA // or AT91C_BASE_PIOB
#define I2cSW_SDA 3
#define I2cSW_SCL 2
#define I2cSW_PMC_PORT AT91C_ID_PIOA // or AT91C_ID_PIOB
ماکرو های بالا برای پیکربندی پایه های مورد استفاده توسط کتابخانه می باشند که با تغییر اعداد و یا نام پورت می توان از پایه های دیگر استفاده کرد.


#define I2cSW_CLK 100 // in KHz
تنظیم سرعت باس، بر حسب کیلوهرتز.


void i2csw_init(void);
این تابع پیکربندی های لازم جهت استفاده از کتابخانه رو انجام میده و حتما قبل از استفاده باید فراخوانی شود در عیر این صورت کتابخانه کارنخواهد کرد.


void i2csw_start(void);
ارسال دستور Start روی باس.


void i2csw_stop(void);
ارسال دستور Stop روی باس


unsigned char i2csw_write(unsigned char b);
مقدار مورد نظر رو از طریق باس انتقال میده و در صورت تصدیق گیرنده مقدار 1 و در صورت عدم تصدیق توسط گیرنده مقدار 0 را بر میگرداند.


unsigned char i2csw_read(unsigned char a);
یک بایت داده رو از روی باس میخواند. پارامتر ورودی اگر ACK باشد بعد از دریافت داده یک سیگنال ASK روی باس ایجاد میکند و اگر NACK باشد سیگنال تصدیق را ایجاد نمی کند.

یک مثال جهت آشنایی بیشتر با دستورات، مجموعه دستورات زیر یک بایت را از آدرس 0 EEPROM می خواند.شماره آیسی 24C32

//Read ADR 0 OF EEPROM
i2csw_start();
result=i2csw_write(0xA0);
result+=i2csw_write(0x00);
result+=i2csw_write(0x00);
i2csw_start();
result+=i2csw_write(0xA1);
data=i2csw_read(NACK);
i2csw_stop();


دریافت کتابخانه به همراه مثال کاملا تست شده:

agape
16-09-2011, 20:20
سلام به همه دوستان:hi:
برای این پست کتابخانه راه اندازی LCD کارکتری رو در مود 4 بیت قرار میدم که امیدوارم به دردتون بخوره!
توانایی های کتابخانه :
You can see links before reply قابلیت تعریف کتابخانه رو پورت و پایه های دلخواه.
You can see links before reply سازگار با تمام خانواده های ARM7 آتمل از سری S,EX,X, و کلا آتمل:o
You can see links before reply استفاده از مود 4 بیت برای انتقال دیتا به نمایشگر {صرفه جویی در پایه های استفاده شده}
You can see links before reply قابلیت تعریف کارکتر دلخواه در حافظه کارکتری نمایشگر{حداکثر 78 کارکتر}
You can see links before reply عدم پشتیبانی از خواندن اطلاعات نمایشگر {فعلا لازمش نداریم:0013:}
نیازمندی های کتابخانه:
نیازمند کتابخانه Tdelay.h برای ایجاد تاخیر !{باید در مسیر کتابخانه کپی شود.}

ماکروها و توابع:
ماکرو های تعریف پین و پورت:

#define LCD_PORT AT91C_BASE_PIOA // Or AT91C_BASE_PIOB
#define LCD_PMC AT91C_ID_PIOA // or AT91C_ID_PIOB

#define LCD_RS 2
#define LCD_RW 3
#define LCD_EN 4
#define LCD_4D 5
دو ماکروی بالا جهت تعریف پورت قابل استفاده توسط کتابخانه است و ماکروهای بعدی جهت تعریف پین های مورد استفاده هست . نکته قابل ذکر این که پایه های دیتای مورد استفاده توسط ماکروی LCD_4D تعریف میشود به این صورت که خود اگر مقدار این ماکرو را مقداری معادل 5 قرار دهیم باید پایه DB4 را به پایه 5 و DB5 را به پایه 6 و DB6 را به پایه 7 و DB7 را به پایه 8 وصل کنیم. یعنی پایه های 5و6و7و8 جهت دیتا استفاده خواهد شد.:0013: و اگر مقدار آن را 10 قرار دهیم پایه های 10و11و12و13 برای دیتا استفاده خواهند شد. برای مابقی مقادیر هم به این صورت خواهد بود.


void init_lcd(void);
تابع بالا جهت پیکربندی ال سی دی مورد استفاده قرار می گیرد و قبل از استفاده از کتابخانه حتما باید فراخوان شود. این تابع به صورت خودکار کلاک PIO مورد استفاده را فعال میکند.


void lcd_command(char cmd);
این تابع برای ارسال دستور به LCD استفاده میشود . لیست دستوارتت قابل پشتیبانی:
1534


void lcd_data(char ch);
ارسال داده به LCD


void lcd_gotoxy(char x, char y);
با استفاده از این تابع میتوان موقعیت مکان نما رو تنظیم کرد.


void lcd_Home(void);
این تابع مکان نما را در موقعیت 0و0 قرار میدهد.


void lcd_cls(void);
با استفاده از این تابع میتوان کلیه محتوای روی نمایشگر را پاک کرد.


void lcd_LoadCustomChar(char* lcdCustomCharArray, char lcdCharNum);
با استفاده از این تابع میتوان کارکتر دلخواه را برای نمایشگر تعریف کرد. پارامتر اول آدرس دیتای کارکتر مورد نظر هست و پارامتر دوم کارکتری که باید در نمایشگر تعریف بشه مثلا مقدار 0 کارکتر 0 را بااین کارکتر جدید جایگذین میکند.{نکته قابل توجه این که فقط میتوان کارکتر های 0 تا 7 را از نو تعریف کرد و باقی کارکتر ها قابل تغییر نیستند.} در مثال ذکر شده بیشتر با این فرمان آشنا خواهد شد.


void lcd_putc(char c);
این تابع یک کارکتر رو در موقعیت جاری مکان نما قرار می دهد.


void lcd_puts(char* data);
با استفاده از این تابع میتوان یک رشته را بر روی نمایشگر قرار داد.!
عکس از عملکرد:
You can see links before reply

دانلود کتابخانه همراه با مثال کاملا تست شده:

agape
20-09-2011, 16:29
کتابخانه راه انداز چیپست های ks0108

همانطور که میدانیم چیپست های ks0108 برای راه اندازی ال سی دی های گرافیکی به کار برده میشود. هر چیپست ks0108 قابلیت پشتیبانی 64*64 پیکسل را دارد. که مرسوم ترین نوع السیدی های موجود 128*64 می باشد که از دو چیپست ks0108 استفاده می کند. این کتابخانه که به صورت کاملا دینامیک نوشته شده قابلیت پشتیبانی تا 4 چیپست را دارا می باشد که می توان تعداد آن را در فایل کانفیگ، پیکر بندی کرد.
این کتابخانه علاوه بر پشتیبانی ks0108 قادر است به صورت اتوماتیک چیپست HD61202 را شناسایی کرده و از آن استفاده کند.

این کتابخانه که شاید بتوان گفت یکی از کاملترین کتابخانه ها در زمینه استفاده از lcd های گرافیکی نوع ks0108 می باشد از تمام قابلیت های این lcd استفاده می نماید و به صورت کاملا اصولی نوشته شده است.
این کتابخانه رایگان و متن باز می باشد و استفاده از آن در موارد محدود و نه تولید انبوه و فروش مجاز می باشد.در غیر این صورت باید از نگارنده ان کسب اجازه کرد.

توابع :
ks0108_InitHW
سخت افزار میکرو را برای ارتباط با نمایشگر پیکر بندی می کند . مثلا پایه های لازم را خروجی تعریف می کند.

ks0108_ControllerSelect
اگز نمایشگر شما از چند چیپست استفاده می کند مثل نمایشگر های 128*64 که از دو چیپست استفاده میکنند با این تابع میتوانید چیپست مورد نظر را انتخاب نمایید.

ks0108_ControlWrite
با ورودی گرفتن شماره کنترلر ، داده دلخواه را در آن قرار میدهد.

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

ks0108_SetXAddress
محل x صفحه را تعیین مینماید.(مستقل از کنترلر ها)

ks0108_SetYAddress
محل y صفحه را ست میکند.

ks0108_BusyWait
منتظر میماند تا کنترلر مورد نظر از حالت مشغول خارج شود و در حالت آماده به کار قرار گیرد.

ks0108_Reset
نمایشگر را ریست میکند. مناسب جهت پیکر بندی اولیه.

ks0108_Write
داده دلخواه را در محل جاری صفحه قرار میدهد.

ks0108_Writexy
داده دلخواه را در محل تعیین شده از صفحه قرار میدهد.

ks0108_Read
داده ای را از محل جاری صفحه میخواند.(از رم گرافیکی lcd)

ks0108_Readxy
داده را از محل دلخواه صفحه میخواند.

ks0108_Init
به صورت کامل lcd را پیکر بندی و آماده به کار می کند.

ks0108_ClearScreen
صفحه نمایش را پاک میکند.

ks0108_Home
محل جاری صفحه را در مختصات 0,0 قرار می دهد.

ks0108_gotoxy
محل جاری را تنظیم میکند.

ks0108_pset
یک نقطه در محل دلخواه از صفحه قرار می دهد.

ks0108_ResetPoint
نقطه را از محل تعیین شده پاک میکند.

ks0108_Point
با گرفتن رنگ نقطه را در محل دلخواه قرار میدهد. مثلا نقطه سیاه در مختصات فلان و نفطه سفید در مختصات بهمان قرار میدهد به دلخواه.

دانلود کتابخانه با مثال کاملا تست شده:

agape
24-09-2011, 20:28
سلام برای ساعت کتابخانه SPI رو آماده کردم.
رابط SPI یکی از رابط های سریال پر کاربرد هست که به صورت سنکرون داده ها رو منتقل میکنه و از سرعت بالایی برخورداره ، توی میکروهای آرم حداکثر سرعت این قسمت با سرعت CPU یکی هست یعنی تا 55 مگ میتونه سارعت داشته باشه و حداقل سرعت هم حاصل تقسیم کلاک سیستم بر 255 هست.
این رابط کاربرد های زیادی داره، از جمله راه اندازی حافظه های MMC و بعضی از انواع حافظه های فلش، برخی ماژول های مخابراتی ، و بعضی از رابط های شبکه و....
و اما این کتابخانه :
You can see links before reply قبل از هرچیز لازم به ذکر است این کتابخانه صرفا برای سری SAM7 نوشته شده.
You can see links before reply این کتابخانه فول سورس هست و از تمام امکانات پشتیبانی می کنید.
You can see links before reply این کتابخانه به صورت خودکار رجیستر های کنترلی را برای تنظیم کلاک مقدار دهی می کند.
You can see links before replyاین کتابخانه رجیستر کنترلی PMC که کنترل توان را در اختیار دارد را مقدار دهی می کند.
You can see links before replyاین کتابخانه از هر دو رابط SPI پشتیبانی میکند.
You can see links before reply این کتابخانه با استفاده از PDC بافرهای داده ای را دریافت و یا ارسال می کنه (بدون دخالت CPU و به صورت سخت افزاری)
:lol: تا یادم نرفته نکته خیلی مهم اینکه برای دریافت داده حتما باید یک بار داده بفرستید تا دادهای برای در یافت داشته باشید. سادش اینه که قبل از استفاده از تابع SPI_Read حتما تابع SPI_Write رو فراخوانی کنید.

شروع کار با کتابخانه:


پایه های PIO را برای استفاده از SPI با استفاده از ماکروی SPI_Configure_PIO_MAKS و یا SPI_Configure_PIO_BIT مقدار دهی کنید.
تنظمات کلی واحد SPI از جمله مستر یا اسلیو بودن ، شبکه بودن و.... با استفاده از تابع SPI_Configure انجام دهید.
کانال های مورد استفاده را مقدار با استفاده از تابع SPI_ConfigureNPCS مقدار دهی کنید. (هر SPI خود داری 4 کانل مجزا هست که میتوانند مستقل از هم کار کنند.)
رابط SPI را با استفاده از تابع SPI_Enable فعال کنید.
و هم اکنون رابط SPI آماده ارسال و دریافت داده هست.

ماکروهای مورد استفاده کتابخانه:

#define SPI_SCBR(baudrate, masterClock)
ورودی های این ماکرو کلاک مورد نظر برای واحد SPI و کلاک کلی سیستم است.
این ماکرو در تابع SPI_ConfigureNPCS باعث تنظیم نرخ کلاک واحد SPI میشود.


#define SPI_DLYBS(delay, masterClock)
ورودی این تاخیر بر حسب نانوثانیه و کلاک سیستم هست.
این ماکرو در تابع SPI_ConfigureNPCS باعث تنظیم تاخیر ارسال داده بعد تغییر Chip Select می شود.


#define SPI_DLYBCT(delay, masterClock)
ورودی این تاخیر بر حسب نانوثانیه و کلاک سیستم هست.
این ماکرو در تابع SPI_ConfigureNPCS باعث تنظیم تاخیر در میان دو انتقال متوالی از اطلاعات در یکی از مسیر های Chip Select می شود.

دیگر ماکرو های مورد استفاده در تابع SPI_ConfigureNPCS

// SPI MODE
#define SPI_MODE_0 2 // L ACRIVE CLOCK & POS EDGE
#define SPI_MODE_1 0 // L ACTIVE ClOCK & NEG EDGE
#define SPI_MODE_2 3 // H ACTIVE CLOCK & NEG EDGE
#define SPI_MODE_3 1 // H ACTIVE CLOCK & POS EDGE

// DATA LEN IN SPI
#define SPI_8_BIT
#define SPI_9_BIT
#define SPI_10_BIT
#define SPI_11_BIT
#define SPI_12_BIT
#define SPI_13_BIT
#define SPI_14_BIT
#define SPI_15_BIT
#define SPI_16_BIT
چهار ماکروی اول مود کاری کانال را مشخص میکنند و باقی ماکرو ها تعداد بیت کانال را مشخص می کنند.

ماکرو های مورد استفاده در تابع SPI_Configure :

#define SPI_SLAVE (0<<0) // Set SLAVE MODE
#define SPI_MASTER (1<<0) // Set MASTER SPI
#define SPI_MULTI_DEVICE (1<<1) // SET MULTI DEVICE SUPORT
#define SPI_ONE_DEVIDE (0<<1) // SET ONE Device Suort
#define SPI_EN_DECODER (1<<2) // Chip Select Decode
#define SPI_MOD_FDIS (1<<4) // Disable Mode Fault Detection
#define SPI_LLB (1<<7) // ENABLE INTRNAL FEEDBACK

دو ماکروی اول مد مستر و اسلیو رو مشخص میکنند، ماکروی سوم و چهارم مشخص میکننده که چند دوایس به درگاه وصل شده یا فقط یک دوایس به درگاه وصل شده است. ماکروی پنجم حالت دکدر رو روی خطوط CS فعال میکند و با استفاده از این قابلیت میتوان خطوط CS را به یک مالتیپلکسر نصب کنیم که انگاه رابط میتواند 16 دوایس متفاوت رو ساپورت کنه، ماکروی ششم حالت تشخصی خطا رو غیر فعال میکنه، در حالت تشخیص خطا هرگاه یکی از خطوط CS به مثبت وصل بشه یا یک بشه به منزله اینه که دستگاه اسلیو نتونسته داده رو بگیره و بیت خطا تو رجیستر کنترلی یک میشه و رابط غیر فعال میشه و ماکروی آخر حالت فید بک داخلی رو فعال میکنه یعنی از داخل خطوط MISO , MOSI به هم وصل میشه برای خطا یابی خوبه.:0013:

خوب ماکرو ها تمام شد بریم سر توابع:

extern void SPI_Enable(AT91S_SPI *spi);
ورودی این تابع رابط SPI هست که متونه مقادیر AT91C_BASE_SPI0 و یا AT91C_BASE_SPI1 باشه و رابط رو فعال میکنه.


extern void SPI_Disable(AT91S_SPI *spi);
ورودی این تابع رابط SPI هست که متونه مقادیر AT91C_BASE_SPI0 و یا AT91C_BASE_SPI1 باشه و رابط رو غیر فعال میکنه.


extern void SPI_ConfigureNPCS(AT91S_SPI *spi,
unsigned int npcs,
unsigned int configuration);

تنظمیات کانال مورد نظر رو انجام میده، ورودی اول رابط SPI هست و ورودی دوم شماره کانال عددی بین 0 تا 3 و ورودی آخر مجموعه ای از کلید های پیکر بندی به مثال زیر توجه کنید:

SPI_ConfigureNPCS(AT91C_BASE_SPI0,
0, // Config Chanal 0
SPI_MODE_0| // L ACRIVE CLOCK & POS EDGE
SPI_8_BIT| // 8 Bit Data strim
SPI_SCBR(1000000,BORD_CLK)| // Clock Of SPI SET To 1 MHZ
SPI_DLYBCT(1000,BORD_CLK)); // Delay In Send Strim 1us


extern void SPI_Configure(AT91S_SPI *spi,
unsigned int id,
unsigned int configuration);
این تابع تنظیمات کلی رابط رو انجام میده ورودی اول خود رابط هست و ورودی دوم شماره ایدی رابط در رجیستر PMC و ورودی سوم مجموعه ای از کلید های پیکربندی هست. به مثال زیر توجه کنید:

SPI_Configure(AT91C_BASE_SPI0, // SPI0 TO USE
AT91C_ID_SPI0, // SPI0 PMC ID TO Active Power
SPI_MASTER| // SPI SET TO MASTER MODE
SPI_ONE_DEVIDE| // SPI Connct TO 1Device {NO MOLTI DEVICE}
SPI_MOD_FDIS); // Disable Mode Fault Detection


extern void SPI_Write(AT91S_SPI *spi, unsigned int npcs, unsigned short data);
این تابع مقداری رو روی رابط ارسال میکنه ورودی اول خود رابط SPI مورد استفاده هست و ورودی دوم کانال مورد استفاده و در آخر مقداری که باید ارسال شود.



extern unsigned char SPI_WriteBuffer(AT91S_SPI *spi,
void *buffer,
unsigned int length);
یک بافر را با استفاده از رابط SPI و PDC بودن دخالت CPU ارسال می کند.(اگر از نحوی کارکرد PDC اطلاعی ندارید فعلا از این تابع استفاده نکنید.):shj:


extern unsigned char SPI_IsFinished(AT91S_SPI *pSpi);
این تابع چک میکند که عملیات ارسال یا دریافت پایان پذیرفته باشد.


extern unsigned short SPI_Read(AT91S_SPI *spi);
این تابع مقدار را از رجیستر دریافت داده میخوادند.


extern unsigned char SPI_ReadBuffer(AT91S_SPI *spi,
void *buffer,
unsigned int length);
یک بافر را با استفاده از رابط SPI و PDC بودن دخالت CPU دریافت می کند.(اگر از نحوی کارکرد PDC اطلاعی ندارید فعلا از این تابع استفاده نکنید.):shj:

در مثال نمونه یه سری داده به شبفت رجیستر 74595 ارسال میشه، عکس ار نحوی اتصال شبفت رجیستر قرار دادم !
یه فیلم هم از نحوه عملکردش گرفتم که میتونید از لینک زیر دانلود کنید:
SAM7 SPI & 74ls595.3gp - 4shared.com - file sharing - download movie file (You can see links before reply)
دانلود کتابخانه به همراه مثال کاملا تست شده:

agape
29-09-2011, 15:16
سلام به همه دوستان !
برای این پست یه برنامه آماده کردم که با استفاده از اون میتونید مقدار صحیح و مناسبی را با توجه به فرکانس ورودی و فرکانس کاری PLL محاسبه کنید ! این برنامه از تمام خانواده های AT91 پشتیبانی میکنه :018:
You can see links before reply

agape
04-10-2011, 19:24
سلام به همه دوستان :hi:
برای این پست کتابخونه وقفه رو آماده کردم که توی میکروی آتمل قسمت AIC کنترل اونو به عهده داره . وقفه یکی از اساسی ترین و مهترین بخش در مباحث میکرو هست حتی از تایمر هم مهمتره چرا که تایمر با استفاده از وقفه کاربرد پیدا میکنه! :wink:
میکروهای SAM7 از 32 کانال وقفه بهره می برن که هر کدوم به صورت مجزا قابل کنترل هست و میشه براش تعریف کرد که با کدوم تغییر ورودی وقفه اتفاق بیفته!
یکی از معایت میکرو های SAM7 در ضمینه پایه های وقفه پذیر PIO هست که محدود و غیر قابل تغییر هست بر خلاف خانواده های NXP که میشه تعریف کرد کدوم ورودی به عنوان وقفه تعریف بشه سری SAM7 فقط از ورودی های پیشفرضی که توسط شرکت انتخاب شده ساپورت میکنه!
کانل 0 ورودی وقفه مربوط به وقفه سریع یا FIQ می باشد فرق وقفه FIQ با RIQ در این هست که در زمان وقوع این وقفه CPU ملزم به اجرای ان می باشد و از ماسک پیروی نمی کند و از اولویت بندی های انجام شده چشم پوشی می کند.
میکرو های SAM7 از 8 سطح وقفه برداری پشتیبانی میکند ، که 0 اولویت کمتر را دارد و مقدار 7 بالا ترین اولویت را به خود اختصاص داده ، برای روشن شدن این موضوع یک مثال مطرح میکنیم، فرض کنید هم زمان وقفه سرریز تایمر با وقفه ورودی IRQ0 فعال می شود ، فرض کنید که وقفه تایمر 0 مهم تر از رخداد بیرونی است، با اولویت بندی میتوان کنترل کرد که کدام وقفه زود تر اتفاق بیفته ، در هنگام اجرای رخداد سر ریز تایمر وقفه IRQ0 در حالت انتظار باقی می ماند تا روال وقفه تایمر پایان یابد بعد روال این وقفه اجرا شود، این طبقه بندی 8 سطحی است ، و اگر وقفه IRQ1 مهمتر از تایمر باشد وقفه تایمر معلق شده و به وقفه IRQ1 رسیدگی می شود بعد وقفه تایمر کامل میشه بعد وقفه IRQ0 اجرا میشه.
و اگر دو یا چند وقفه که در یک سطح هستن اجرا میشه ابتدا از وقفه با ارزش سحت افزاری پایین تر شورع به وقفه برداری میکنه، برای مثال وقتی که هم زمان دو وفقه IRQ0 , IRQ1 که در دو در یک سطح تعریف شدن اتفاق بیفته اول وقفه IRQ0 اجرا میشه بعد IRQ1 و اما در مورد این کتابخانه:
You can see links before replyاین کتابخانه به صورت کامل نوشته شده.
You can see links before replyاین کتابخانه از توابع inline استفاده میکنه که سرعت اجرا را بالا میبره.
You can see links before replyاین کتابخانه برای تمام خانواده های SAM7 کار خواهد کرد.


ماکرو ها:

AIC_Configure_PIO(AIC_PORT,AIC_PIN)
این ماکرو برای پیکربندی یک پایه برای اتصال به واحد PIO فقط پایه های پیشفرض.
متغییر اول ادرس پورت و متغییر دوم شماره پایه مورد نظر هست.



IRQ_ACT_POWER(IRQ_ID)
فعال کردن پاور IRQ , FIQ های خارجی هست. آیدی مربوطه را دریاف میکند.



CALL_END_OF_Interrupt(pAic)
این ماکرو باید حتما در انتهای روال مربوطه به وقفه فراخوانی شود. این تابه به واحد AIC می فهماند که روال جاری پایان یافت و واحد AIC اگر وقفه در انتظار داشته باشد آن وقفه رو شروع خود کرد.


ثوابت آیدی (برای پیکر بنده هر کانال خاص در تابع کانفیک کاربرد دارد.)


#define AT91C_ID_FIQ ((unsigned int) 0) // Advanced Interrupt Controller (FIQ)
#define AT91C_ID_SYS ((unsigned int) 1) // System Peripheral
#define AT91C_ID_PIOA ((unsigned int) 2) // Parallel IO Controller A
#define AT91C_ID_PIOB ((unsigned int) 3) // Parallel IO Controller B
#define AT91C_ID_SPI0 ((unsigned int) 4) // Serial Peripheral Interface 0
#define AT91C_ID_SPI1 ((unsigned int) 5) // Serial Peripheral Interface 1
#define AT91C_ID_US0 ((unsigned int) 6) // USART 0
#define AT91C_ID_US1 ((unsigned int) 7) // USART 1
#define AT91C_ID_SSC ((unsigned int) 8) // Serial Synchronous Controller
#define AT91C_ID_TWI ((unsigned int) 9) // Two-Wire Interface
#define AT91C_ID_PWMC ((unsigned int) 10) // PWM Controller
#define AT91C_ID_UDP ((unsigned int) 11) // USB Device Port
#define AT91C_ID_TC0 ((unsigned int) 12) // Timer Counter 0
#define AT91C_ID_TC1 ((unsigned int) 13) // Timer Counter 1
#define AT91C_ID_TC2 ((unsigned int) 14) // Timer Counter 2
#define AT91C_ID_CAN ((unsigned int) 15) // Control Area Network Controller
#define AT91C_ID_EMAC ((unsigned int) 16) // Ethernet MAC
#define AT91C_ID_ADC ((unsigned int) 17) // Analog-to-Digital Converter
#define AT91C_ID_AES ((unsigned int) 18) // Advanced Encryption Standard 128-bit
#define AT91C_ID_TDES ((unsigned int) 19) // Triple Data Encryption Standard
#define AT91C_ID_IRQ0 ((unsigned int) 30) // Advanced Interrupt Controller (IRQ0)
#define AT91C_ID_IRQ1 ((unsigned int) 31) // Advanced Interrupt Controller (IRQ1)
#define AT91C_ALL_INT ((unsigned int) 0xC00FFFFF) // ALL VALID INTERRUPTS



کلید های پیکر بندی هر کانل {مشخص کننده این موضوع که هر کانال به لبه حساس باشد و یا به سطح و...}


#define AIC_EXT_LOW_LEVEL ((unsigned int) 0x0 << 5) // External Sources Code Label Low-level Sensitive
#define AIC_INT_HIGH_LEVEL ((unsigned int) 0x0 << 5) // Internal Sources Code Label High-level Sensitive
#define AIC_INT_POSITIVE_EDGE ((unsigned int) 0x1 << 5) // Internal Sources Code Label Positive Edge triggered
#define AIC_EXT_NEGATIVE_EDGE ((unsigned int) 0x1 << 5) // External Sources Code Label Negative Edge triggered
#define AIC_HIGH_LEVEL ((unsigned int) 0x2 << 5) // Internal Or External Sources Code Label High-level Sensitive
#define AIC_POSITIVE_EDGE ((unsigned int) 0x3 << 5) // Internal Or External Sources Code Label Positive Edge triggered




توابع:


__inline unsigned int AT91F_AIC_ConfigureIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id, // \arg interrupt number to initialize
unsigned int priority, // \arg priority to give to the interrupt
unsigned int src_type, // \arg activation and sense of activation
void (*newHandler) () ); // \arg address of the interrupt handler


این تابع کانال مورد نظر را پیکر بندی و آماده استفاده می کند.
متغییر اول که آدرس AIC میکرو هست و متغییر دوم آیدی کانال مورد نظر که قبلا ذکر شد.
متغییر سوم مشخص کننده اولویت وقفه هست که مقداری از 0 تا 7 به خود میگیرد.
متغییر چهارم نحوه تریگر را مخص می کند که ایا حساس بع سطح باشد یا لبه که قبلا ذکر شده و متغییر اخر هم آدرس تابعی که هنگام رویداد وقفه باید فراخوانی شود.
توجه داشته باشید که در ابتدای تعریف این تابع باید از کلید __irq استفاده شود.




__inline void AT91F_AIC_EnableIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id ); // \arg interrupt number to initialize


برای فعال کردن کانال مورد نظر به کار میره.




__inline void AT91F_AIC_DisableIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id ); // \arg interrupt number to initialize


برای غیر فعال کردن یه کانال خاص به کار میره.




__inline void AT91F_AIC_ClearIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id); // \arg interrupt number to initialize


پرچم وقفه مورد نظر رو پاک میکنه.




__inline unsigned int AT91F_AIC_IsActive (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id); // \arg Interrupt Number


برای مشخص کردن این که روال رویداد وقفه مورد نظر در حال اجراست یا نه.




__inline unsigned int AT91F_AIC_IsPending (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id); // \arg Interrupt Number




مشخص میکند که کانال مورد نظر در حالت انتظار رویداد هست یا نه.




دانلود کتابخانه همراه مثال کاملا تست شده

imported_pmf
28-08-2012, 00:47
سلام
آقای مزارعی میشه بگید چطوری میشه ما هم بتونیم کتابخانه بنویسیم؟؟؟؟؟؟
آخه با استفاده از کتابخانه هایی که شما زحمت کشیدید ما کاملا وابسته میشیم.
با تشکر

beroz
06-01-2013, 20:36
سلام

من از هدر SPI استفاده میکنم ولی وقتی از تابع read استفاده میکنم فقط بم 0XFF و بر میگردونه به نظرتون مشکل از کجا میتونه باشه؟

beroz
15-01-2013, 20:05
تو هدر spi نباید به جای شیفت ۱۶ واسه DLYBCT شیفت ۲۴ باشه؟


/// Calculates the value of the CSR DLYBCT field given the desired delay (in ns)
#define SPI_DLYBCT(delay, masterClock) \
((unsigned int) (((masterClock / 1000000) * delay) / 32000) << 16)

shahram299
02-02-2013, 21:22
سلام
من از هدر SPI استفاده میکنم ولی وقتی از تابع read استفاده میکنم فقط بم 0XFF و بر میگردونه به نظرتون مشکل از کجا میتونه باشه؟ ؟
منم دقیقا همین مشکلو دارم . میشه یکی راهنمایی کنه ...:unh:

beroz
03-02-2013, 01:00
منم دقیقا همین مشکلو دارم . میشه یکی راهنمایی کنه ...:unh:
سعی کنید از بعد از انجام هر کاری با SPI از delay استفاده کنید من مشکلم این بود که delay استفاده نمیکردم

کتابخانه spi هم مشکل نداره به جز همون موردی که ۲ تا پست بالاتر گفتم ۱۶ باید بشه ۲۴

shahram299
03-02-2013, 16:29
سعی کنید از بعد از انجام هر کاری با SPI از delay استفاده کنید من مشکلم این بود که delay استفاده نمیکردم

کتابخانه spi هم مشکل نداره به جز همون موردی که ۲ تا پست بالاتر گفتم ۱۶ باید بشه ۲۴
delay در چه حد ؟ گذاشتم . بازم 0XFF میده...:unh:
ّAT45DB161 رو میخوام راه بندازم . میشه کمک کنید...
فایل های استفاده شده رو گذاشتم

gbg
27-02-2014, 04:01
سلام به همه دوستان:hi:
برای این پست کتابخانه راه اندازی LCD کارکتری رو در مود 4 بیت قرار میدم که امیدوارم به دردتون بخوره!
توانایی های کتابخانه :
You can see links before reply قابلیت تعریف کتابخانه رو پورت و پایه های دلخواه.
You can see links before reply سازگار با تمام خانواده های ARM7 آتمل از سری S,EX,X, و کلا آتمل:o
You can see links before reply استفاده از مود 4 بیت برای انتقال دیتا به نمایشگر {صرفه جویی در پایه های استفاده شده}
You can see links before reply قابلیت تعریف کارکتر دلخواه در حافظه کارکتری نمایشگر{حداکثر 78 کارکتر}
You can see links before reply عدم پشتیبانی از خواندن اطلاعات نمایشگر {فعلا لازمش نداریم:0013:}
نیازمندی های کتابخانه:
نیازمند کتابخانه Tdelay.h برای ایجاد تاخیر !{باید در مسیر کتابخانه کپی شود.}

ماکروها و توابع:
ماکرو های تعریف پین و پورت:

#define LCD_PORT AT91C_BASE_PIOA // Or AT91C_BASE_PIOB
#define LCD_PMC AT91C_ID_PIOA // or AT91C_ID_PIOB

#define LCD_RS 2
#define LCD_RW 3
#define LCD_EN 4
#define LCD_4D 5
دو ماکروی بالا جهت تعریف پورت قابل استفاده توسط کتابخانه است و ماکروهای بعدی جهت تعریف پین های مورد استفاده هست . نکته قابل ذکر این که پایه های دیتای مورد استفاده توسط ماکروی LCD_4D تعریف میشود به این صورت که خود اگر مقدار این ماکرو را مقداری معادل 5 قرار دهیم باید پایه DB4 را به پایه 5 و DB5 را به پایه 6 و DB6 را به پایه 7 و DB7 را به پایه 8 وصل کنیم. یعنی پایه های 5و6و7و8 جهت دیتا استفاده خواهد شد.:0013: و اگر مقدار آن را 10 قرار دهیم پایه های 10و11و12و13 برای دیتا استفاده خواهند شد. برای مابقی مقادیر هم به این صورت خواهد بود.


void init_lcd(void);
تابع بالا جهت پیکربندی ال سی دی مورد استفاده قرار می گیرد و قبل از استفاده از کتابخانه حتما باید فراخوان شود. این تابع به صورت خودکار کلاک PIO مورد استفاده را فعال میکند.


void lcd_command(char cmd);
این تابع برای ارسال دستور به LCD استفاده میشود . لیست دستوارتت قابل پشتیبانی:
1534


void lcd_data(char ch);
ارسال داده به LCD


void lcd_gotoxy(char x, char y);
با استفاده از این تابع میتوان موقعیت مکان نما رو تنظیم کرد.


void lcd_Home(void);
این تابع مکان نما را در موقعیت 0و0 قرار میدهد.


void lcd_cls(void);
با استفاده از این تابع میتوان کلیه محتوای روی نمایشگر را پاک کرد.


void lcd_LoadCustomChar(char* lcdCustomCharArray, char lcdCharNum);
با استفاده از این تابع میتوان کارکتر دلخواه را برای نمایشگر تعریف کرد. پارامتر اول آدرس دیتای کارکتر مورد نظر هست و پارامتر دوم کارکتری که باید در نمایشگر تعریف بشه مثلا مقدار 0 کارکتر 0 را بااین کارکتر جدید جایگذین میکند.{نکته قابل توجه این که فقط میتوان کارکتر های 0 تا 7 را از نو تعریف کرد و باقی کارکتر ها قابل تغییر نیستند.} در مثال ذکر شده بیشتر با این فرمان آشنا خواهد شد.


void lcd_putc(char c);
این تابع یک کارکتر رو در موقعیت جاری مکان نما قرار می دهد.


void lcd_puts(char* data);
با استفاده از این تابع میتوان یک رشته را بر روی نمایشگر قرار داد.!
عکس از عملکرد:
You can see links before reply

دانلود کتابخانه همراه با مثال کاملا تست شده:

حالا اگه پایه های دیتا کنار هم نباشن چی؟

sadeghbakhshi
27-02-2014, 04:54
سلام
توی اکثر کتابخانه هایی که من دیدم چهار بیت دیتا رو پشت سر هم قرار میدن
و چون باید 8 بیت ارسال بشه
ابتدا 4 بیت ارسال میشه سپس 4 بیت دوم
که این وسط یک شیفت هم وجود داره
حالا اگر به ترتیب نباشه اطلاعات اشتباه روی پایه های میکرو میره و در نتیجه اشتباه به
ال سی دی میره

gbg
27-02-2014, 12:55
خب حالا پایه های من پشت سر هم نیست

sadeghbakhshi
01-03-2014, 03:08
خب حالا پایه های من پشت سر هم نیست
سلام
خب اگر پشت سر هم نیست یک جورایی مشکل ساز میشه
شما میتونید توی لایبرری دست ببرید و طریقه ی انتقال دیتا رو تغییر بدید
ولی سرعت انتقال کمتر میشه
به طور مثال روی مد 8 بیتی چون یک بایت دیتا یکجا ارسال میشه سرعت به حداکثر میرسه
توی 4 بیتی نصف میشه
حالا شما می خواهید 8 بیت دیتا رو به صورت تک تک ارسال کنید
این طوری باید تک تک بیت هایی که قرار هست ارسال بشه رو در بیارید و روی پایه ی مورد نظر بریزید
یعنی 8 مرحله اند بشه و 8 مرحله مقدار دهی کنید

gbg
12-11-2014, 02:40
برای enc28j60 مثالی ندارین؟

baha_manesh
15-02-2015, 15:47
سلام چرا دانلودا غیر فعال شده هیچکدومو نمیشه دانلود کرد

kavir
15-02-2015, 16:52
این برد چند سالی هست تولید نیمشه و از ساپورت خارج شده

baha_manesh
16-02-2015, 13:05
ممنون. خوب یعنی هیچ راهی وجود نداره ما این کتابخونه هارو بتونیم دانلود کنیم؟ آرشیوی وجود نداره؟؟ هنوز هم خیلی افراد از این میکرو استفاده میکنن