NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 1869 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از 1 به 20 از 25

موضوع: کلیه آموزش ها و نکات مهم برد eke2sam7x v2.0 کویرالکترونیک

  1. #1
    مدیرکل سایت kavir آواتار ها
    تاریخ عضویت
    Jun 2007
    نام
    زارعی
    نوشته ها
    3,547
    تشکر
    1,218
    تشکر شده 5,681 بار در 1,801 پست

    Thumbs up کلیه آموزش ها و نکات مهم برد eke2sam7x v2.0 کویرالکترونیک

    سلام
    از این پس تمامی نکات مهم و مثالهای برد EKE2SAM7X v2.0 در این بخش قرار می گیرد
    دوستانی که مثال یا پروژه ای با این برد تست کردند می توانند در ادامه قرار دهند.
    WARNING
    لطفا از مطرح نمودن سوال در این بخش خود داری کنید

    دوستانی که تمایل به خرید دارند می توانند از فروشگاه تهیه نمایند
    ماژول آموزشی ARM اتمل sam7x256 - فروشگاه اينترنتي شركت كويرالكترونيك

    Information


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



    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست eke2sam7.jpg  
    فايل هاي پيوست شده فايل هاي پيوست شده
    ویرایش توسط kavir : 11-12-2011 در ساعت 09:35
    کویر ویدئو راه اندازی شد

    اگر چه دیر ولی برگشتم به جمع دوستان قدیمی....

  2. کاربران : 20 تشکر کرده اند از شما kavir برای ارسال این پست سودمند:


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  4. #2
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض کتابخانه تاخیر


    سلام به همه دوستان!
    بعد از کلی درگیر شدن این میکرو اخر یه کتابخونه برای ایجاد تاخیر دقیق نوشتم
    این کتابخونه از تایمر کانتر 2 برای ایجاد تاخیر استفاده می کنه و حداقل میزان تاخیر 1 میکروثانیه و حد اکثر میزان تاخیر 4 میلیارد میلی ثانیه است.
    نکات مهم:
    این کتابخونه فقط بر روی میکرو های آتمل کار خواهد کرد (چون از تایمر کانتر استفاده شده)
    در هنگام استفاده از این کتابخانه ، نباید در برنامه از تایمر 2 استفاده شود.
    این کتابخانه به صورت خودکار با استفاده از رجیستر های 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 میلیارد میکروثانیه

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

  5. کاربران : 23 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  6. #3
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض کتابخانه pwm

    سلامی دوباره به همه دوستان
    برای این ساعت کتابخانه PWM که از کاربرد های زیادی برخوردار هست رو آماده کردم. از جمله کارایی که میشه با این کتابخانه انجام داد کنترل درخشندگی یک لامپ تا کنترل سرعت موتور های DC و حتی تولید سیگنال آنالوگ و در اخر پخش صدا که دوستان با میکروهای AVR این کاررو انجام دادن امیدوارم بعد از انتشار این کتابخانه شاهد گسترش کاربرد های آن باشم
    امکانات کتابخانه :
    قبل از هرچیز لازم به ذکر است این کتابخانه صرفا برای سری SAM7 نوشته شده.
    این کتاب خانه فول سورس می باید و تمام امکانات موجود را در اختیار قرار می دهد.
    این کتابخانه به صورت خودکار رجیستر های کنترلی را برای تنظیم کلاک مقدار دهی می کند.

    این کتابخانه رجیستر کنترلی 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)
    غیر فعال سازی منبع وقفه برای کانال مورد نظر.




    دانلود کتابخانه به همراه مثال کاملا تست شده:
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست PWM.jpg  
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: rar PWM.rar (2.0 کیلو بایت, 438 نمايش)
    • نوع فایل: rar PWM Sample.rar (255.9 کیلو بایت, 941 نمايش)

  7. کاربران : 16 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  8. #4
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض راه اندازی usart

    سلام به همه دوستان گرامی
    خوب برای این پست کتابخونه USART رو به آماده کردم ، درسته قبلا این کتابخونه توسط بچه ها نوشته شده بود ولی اصلا کامل نبود ، اون کتابخونه فقط رو یه مد USART رو درایو میکرد و نمیشد از مد های دیگه استفاده کرد. ولی این کتابخونه »
    این کتابخونه فول کد هست و تمام امکانات USART رو در اختیار قرار میده.
    این کتابخونه هر دو رابط USART رو پشتیبانی میکنه
    حد المقدور سعی شده که توابع کم بشن و کارایی بالا بره
    قابلیت تعریف بافر سند و رسیو {سخت افزاری نه نرم افزاری}
    این کتابخونه رجیستر 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 با این تفاوت که مقدار دریافتی رو در بافر می نویسد.

    وای چقد نوشتم



    دریافت کتابخانه یا مثال کاملا تست شده:
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست USART ARM.JPG  
    فايل هاي پيوست شده فايل هاي پيوست شده

  9. کاربران : 22 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  10. #5
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض کتابخانه ترمینال vt100

    و باز سلام
    بعد از راه اندازی کامل واحد USART نوبت میرسه به یکی از رابط های مهم کار با پورت سریال تا حالا فکر کردید که آیا از طریق این رابط میشه منو ساخت و مدیریت کرد. بله این امکان هست با رابط VT100 توی این پست کتابخونه VT100 رو براتون آماده کردم .
    چون دیر وقته در مورد توابعش توضیح نمیدم فقط یه فیلم از نحوی کار کردش هست و چند تا عکس و خود کتابخونه و مثال تست شده.
    لینک فیلم حجم 400 کیلوبایت:
    [HTML]http://www.4shared.com/video/ClmFBnql/VT100-IranMicroir.html[/HTML]





    دانلود کتابخانه همراه با مثال تست شده :
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست VT100_2.JPG   VT100_3.JPG  
    فايل هاي پيوست شده فايل هاي پيوست شده

  11. کاربران : 14 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  12. #6
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض کتابخانه i2c نرم افزاری

    و باز سلام به همه دوستان گرامی
    برای این پست کتابخونه SWI2C رو آماده کردم ، همون طور که میدونید رابط I2c یا همون TWI یک رابط انتقال داده در سطح بورد که توسط شرکت فیلیپس طراحی شده و امروزه آیسی های زیادی با این پروتکل کار میکن از جمله حافظه های EEPROM و یا تایمر زمان سنج RTC و حتی پورت ورودی خروجی PIO ، این کتابخونه به صورت نرم افزاری این پروتکل رو شبح سازی میکنه به این معنی که از سخت افزار نصب بر روی میکرو برای درایو این پروتکل استفاده نمی کنه ! از مزیت های این سیستم اینه که میتونید هر پایه دلخواهی رو برای باس سیستم استفاده کنید.
    نیازمندی های راه انداری :
    کتابخانه tdelay.h که توی همین صفحه قابل دانلود هست.
    نکات مهم »
    این کتابخانه برای میکروی های سری 7 نوشته شده و فرقی نمیکنه S , X, EX باشه.
    این کتابخانه تا سرعت 1 مگاهرتز رو برای باس پشتیبانی میکنه که تقریبا 3 برابر سرعت استاندارد باس هست.
    این کتابخانه فقط مد مستر رو برای میکرو پشتیبانی میکنه.


    توضیح توابع و مارو ها:
    کد:
    #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();

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

  13. کاربران : 21 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  14. #7
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض کتابخانه راه اندازی lcd در مورد 4bit

    سلام به همه دوستان
    برای این پست کتابخانه راه اندازی LCD کارکتری رو در مود 4 بیت قرار میدم که امیدوارم به دردتون بخوره!
    توانایی های کتابخانه :
    قابلیت تعریف کتابخانه رو پورت و پایه های دلخواه.
    سازگار با تمام خانواده های ARM7 آتمل از سری S,EX,X, و کلا آتمل
    استفاده از مود 4 بیت برای انتقال دیتا به نمایشگر {صرفه جویی در پایه های استفاده شده}
    قابلیت تعریف کارکتر دلخواه در حافظه کارکتری نمایشگر{حداکثر 78 کارکتر}
    عدم پشتیبانی از خواندن اطلاعات نمایشگر {فعلا لازمش نداریم}

    نیازمندی های کتابخانه:
    نیازمند کتابخانه 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 جهت دیتا استفاده خواهد شد. و اگر مقدار آن را 10 قرار دهیم پایه های 10و11و12و13 برای دیتا استفاده خواهند شد. برای مابقی مقادیر هم به این صورت خواهد بود.

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

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

نام: commands.gif
مشاهده: 91
حجم: 28.9 کیلو بایت

    کد:
    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);
    با استفاده از این تابع میتوان یک رشته را بر روی نمایشگر قرار داد.!
    عکس از عملکرد:


    دانلود کتابخانه همراه با مثال کاملا تست شده:
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست 16092011_002.jpg  
    فايل هاي پيوست شده فايل هاي پيوست شده

  15. کاربران : 14 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  16. #8
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض Lcd گرافیکی

    کتابخانه راه انداز چیپست های 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
    با گرفتن رنگ نقطه را در محل دلخواه قرار میدهد. مثلا نقطه سیاه در مختصات فلان و نفطه سفید در مختصات بهمان قرار میدهد به دلخواه.

    دانلود کتابخانه با مثال کاملا تست شده:
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست 19092011_001.jpg  
    فايل هاي پيوست شده فايل هاي پيوست شده

  17. کاربران : 17 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  18. #9
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض کتابخانه spi

    سلام برای ساعت کتابخانه SPI رو آماده کردم.
    رابط SPI یکی از رابط های سریال پر کاربرد هست که به صورت سنکرون داده ها رو منتقل میکنه و از سرعت بالایی برخورداره ، توی میکروهای آرم حداکثر سرعت این قسمت با سرعت CPU یکی هست یعنی تا 55 مگ میتونه سارعت داشته باشه و حداقل سرعت هم حاصل تقسیم کلاک سیستم بر 255 هست.
    این رابط کاربرد های زیادی داره، از جمله راه اندازی حافظه های MMC و بعضی از انواع حافظه های فلش، برخی ماژول های مخابراتی ، و بعضی از رابط های شبکه و....
    و اما این کتابخانه :
    قبل از هرچیز لازم به ذکر است این کتابخانه صرفا برای سری SAM7 نوشته شده.
    این کتابخانه فول سورس هست و از تمام امکانات پشتیبانی می کنید.
    این کتابخانه به صورت خودکار رجیستر های کنترلی را برای تنظیم کلاک مقدار دهی می کند.
    این کتابخانه رجیستر کنترلی PMC که کنترل توان را در اختیار دارد را مقدار دهی می کند.
    این کتابخانه از هر دو رابط SPI پشتیبانی میکند.

    این کتابخانه با استفاده از PDC بافرهای داده ای را دریافت و یا ارسال می کنه (بدون دخالت CPU و به صورت سخت افزاری)
    تا یادم نرفته نکته خیلی مهم اینکه برای دریافت داده حتما باید یک بار داده بفرستید تا دادهای برای در یافت داشته باشید. سادش اینه که قبل از استفاده از تابع SPI_Read حتما تابع SPI_Write رو فراخوانی کنید.

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

    1. پایه های PIO را برای استفاده از SPI با استفاده از ماکروی SPI_Configure_PIO_MAKS و یا SPI_Configure_PIO_BIT مقدار دهی کنید.
    2. تنظمات کلی واحد SPI از جمله مستر یا اسلیو بودن ، شبکه بودن و.... با استفاده از تابع SPI_Configure انجام دهید.
    3. کانال های مورد استفاده را مقدار با استفاده از تابع SPI_ConfigureNPCS مقدار دهی کنید. (هر SPI خود داری 4 کانل مجزا هست که میتوانند مستقل از هم کار کنند.)
    4. رابط SPI را با استفاده از تابع SPI_Enable فعال کنید.
    5. و هم اکنون رابط 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 به هم وصل میشه برای خطا یابی خوبه.

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

    کد:
    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 اطلاعی ندارید فعلا از این تابع استفاده نکنید.)

    کد:
    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 اطلاعی ندارید فعلا از این تابع استفاده نکنید.)

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





    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست 74ls595.jpg  
    فايل هاي پيوست شده فايل هاي پيوست شده

  19. کاربران : 18 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  20. #10
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض محاسبه مقدار صحیح فیلتر pll

    سلام به همه دوستان !
    برای این پست یه برنامه آماده کردم که با استفاده از اون میتونید مقدار صحیح و مناسبی را با توجه به فرکانس ورودی و فرکانس کاری PLL محاسبه کنید ! این برنامه از تمام خانواده های AT91 پشتیبانی میکنه
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست PLL-SET.jpg  
    فايل هاي پيوست شده فايل هاي پيوست شده

  21. کاربران : 16 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  22. #11
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض Aic کنترل کننده وقفه {اینتراپت}

    سلام به همه دوستان
    برای این پست کتابخونه وقفه رو آماده کردم که توی میکروی آتمل قسمت AIC کنترل اونو به عهده داره . وقفه یکی از اساسی ترین و مهترین بخش در مباحثمیکرو هست حتی از تایمر هم مهمتره چرا که تایمر با استفاده از وقفه کاربردپیدا میکنه!
    میکروهای 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 و اما در مورد این کتابخانه:
    این کتابخانه به صورت کامل نوشته شده.
    این کتابخانه از توابع inline استفاده میکنه که سرعت اجرا را بالا میبره.
    این کتابخانه برای تمام خانواده های 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

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




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

  23. کاربران : 20 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  24. #12
    کاربر علاقه مند
    تاریخ عضویت
    Apr 2009
    نوشته ها
    44
    تشکر
    13
    تشکر شده 10 بار در 9 پست

    Exclamation نحوه نوشتن کتابخانه

    سلام
    آقای مزارعی میشه بگید چطوری میشه ما هم بتونیم کتابخانه بنویسیم؟؟؟؟؟؟
    آخه با استفاده از کتابخانه هایی که شما زحمت کشیدید ما کاملا وابسته میشیم.
    با تشکر

  25. کاربران : 2 تشکر کرده اند از شما imported_pmf برای ارسال این پست سودمند:


  26. #13
    کاربر فعال beroz آواتار ها
    تاریخ عضویت
    May 2009
    نام
    بهروز
    نوشته ها
    285
    تشکر
    204
    تشکر شده 299 بار در 116 پست

    پیش فرض

    سلام

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

  27. تشکرها از این نوشته :


  28. #14
    کاربر فعال beroz آواتار ها
    تاریخ عضویت
    May 2009
    نام
    بهروز
    نوشته ها
    285
    تشکر
    204
    تشکر شده 299 بار در 116 پست

    پیش فرض

    تو هدر spi نباید به جای شیفت ۱۶ واسه DLYBCT شیفت ۲۴ باشه؟

    [PHP]/// 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)[/PHP]

  29. تشکرها از این نوشته :


  30. #15
    عضو جدید
    تاریخ عضویت
    Aug 2010
    نوشته ها
    5
    تشکر
    0
    تشکر شده 2 بار در 2 پست

    پیش فرض

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

  31. تشکرها از این نوشته :


  32. #16
    کاربر فعال beroz آواتار ها
    تاریخ عضویت
    May 2009
    نام
    بهروز
    نوشته ها
    285
    تشکر
    204
    تشکر شده 299 بار در 116 پست

    پیش فرض

    نقل قول نوشته اصلی توسط shahram299 نمایش پست ها
    منم دقیقا همین مشکلو دارم . میشه یکی راهنمایی کنه ...
    سعی کنید از بعد از انجام هر کاری با SPI از delay استفاده کنید من مشکلم این بود که delay استفاده نمیکردم

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

  33. تشکرها از این نوشته :


  34. #17
    عضو جدید
    تاریخ عضویت
    Aug 2010
    نوشته ها
    5
    تشکر
    0
    تشکر شده 2 بار در 2 پست

    پیش فرض

    نقل قول نوشته اصلی توسط beroz نمایش پست ها
    سعی کنید از بعد از انجام هر کاری با SPI از delay استفاده کنید من مشکلم این بود که delay استفاده نمیکردم

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

  35. تشکرها از این نوشته :


  36. #18
    کاربر فعال
    تاریخ عضویت
    Jul 2007
    نوشته ها
    320
    تشکر
    48
    تشکر شده 39 بار در 33 پست

    پیش فرض

    نقل قول نوشته اصلی توسط agape نمایش پست ها
    سلام به همه دوستان
    برای این پست کتابخانه راه اندازی LCD کارکتری رو در مود 4 بیت قرار میدم که امیدوارم به دردتون بخوره!
    توانایی های کتابخانه :
    قابلیت تعریف کتابخانه رو پورت و پایه های دلخواه.
    سازگار با تمام خانواده های ARM7 آتمل از سری S,EX,X, و کلا آتمل
    استفاده از مود 4 بیت برای انتقال دیتا به نمایشگر {صرفه جویی در پایه های استفاده شده}
    قابلیت تعریف کارکتر دلخواه در حافظه کارکتری نمایشگر{حداکثر 78 کارکتر}
    عدم پشتیبانی از خواندن اطلاعات نمایشگر {فعلا لازمش نداریم}

    نیازمندی های کتابخانه:
    نیازمند کتابخانه 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 جهت دیتا استفاده خواهد شد. و اگر مقدار آن را 10 قرار دهیم پایه های 10و11و12و13 برای دیتا استفاده خواهند شد. برای مابقی مقادیر هم به این صورت خواهد بود.

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

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

نام: commands.gif
مشاهده: 91
حجم: 28.9 کیلو بایت

    کد:
    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);
    با استفاده از این تابع میتوان یک رشته را بر روی نمایشگر قرار داد.!
    عکس از عملکرد:


    دانلود کتابخانه همراه با مثال کاملا تست شده:
    حالا اگه پایه های دیتا کنار هم نباشن چی؟

  37. #19
    Banned
    تاریخ عضویت
    Apr 2013
    نام
    صادق علی بخشی
    نوشته ها
    1,148
    تشکر
    1,183
    تشکر شده 1,276 بار در 702 پست

    پیش فرض

    سلام
    توی اکثر کتابخانه هایی که من دیدم چهار بیت دیتا رو پشت سر هم قرار میدن
    و چون باید 8 بیت ارسال بشه
    ابتدا 4 بیت ارسال میشه سپس 4 بیت دوم
    که این وسط یک شیفت هم وجود داره
    حالا اگر به ترتیب نباشه اطلاعات اشتباه روی پایه های میکرو میره و در نتیجه اشتباه به
    ال سی دی میره

  38. #20
    کاربر فعال
    تاریخ عضویت
    Jul 2007
    نوشته ها
    320
    تشکر
    48
    تشکر شده 39 بار در 33 پست

    پیش فرض

    خب حالا پایه های من پشت سر هم نیست

صفحه 1 از 2 12 آخرینآخرین

موضوعات مشابه

  1. پاسخ: 10
    آخرين نوشته: 23-01-2017, 14:40
  2. مشکل نصب درایور برد آموزشی eke2sam7x
    توسط GodMaster در انجمن AT91 series (ATMEL)
    پاسخ: 2
    آخرين نوشته: 29-08-2014, 11:11
  3. معرفی کتاب ها و فیلم های آموزش اندروید
    توسط electera در انجمن اندروید-برنامه نویسی و سخت افزار
    پاسخ: 11
    آخرين نوشته: 24-02-2014, 23:49
  4. مشکل فنی در برد آموزشی کویر الکترونیک
    توسط sabli در انجمن LPC series (NXP)
    پاسخ: 3
    آخرين نوشته: 05-09-2013, 17:05
  5. ویدئوهای آموزشی
    توسط adibsp در انجمن LPC series (NXP)
    پاسخ: 4
    آخرين نوشته: 13-08-2013, 06:31

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •