کدنویسی atmel studio با هدرهای exploreembedded.com

saalek110

Well-Known Member
کدنویسی atmel studio با هدرهای exploreembedded.com

 

saalek110

Well-Known Member
بسته ای ته سایت بالا هست با آدرس زیر:


یک پوشه lib داره.البته اسم پوشه 00_libfiles است.

خوبی این برنامه ها ساده سازی شدن است.
و ضمن اینکه می توانید فایلهای هدرها را هم بخونید تا بفهمید باقی برنامه چیه.
 
آخرین ویرایش:

saalek110

Well-Known Member
البته بهتره خودتان از سایت github دانلود کنید ولی برای احتیاط اینجا هم ضمیمه می کنم.

19 مگا است.

چون برای بعضی ها 19 مگادانلودش سخته ... دو پوشه مد نظرم را زیپ کردم شد 2 مگا...ضمیمه پست شد.
 

پیوست ها

  • ATmega32_ExploreUltraAvrDevKit-majidonline.zip
    18.7 مگایابت · بازدیدها: 51
  • AVR Example and Tutorial Code.zip
    2.6 مگایابت · بازدیدها: 0
آخرین ویرایش:

saalek110

Well-Known Member
توجه کنید که در فایلهای با پسوند h فقط پروتوتایپ توابع را داریم و خود توابع در فایلهایی با پسوند c هستند.
پروتوتایپ یعنی اعلام وجود تابع.
پس اگر می خواهبد خود توابع را بخوانید در فایلهای با پسوند C است.
مثلا اگر lcd.h را بالای برنامه سی خود اینکلود کردید ، باید فایل lcd.h کنارش باشه و همچنین lcd.c
ولی اگر خطوط اول فایل lcd.h را ببینید می بینید این فایل خودش فایل دیگری را اینکلود کرده که باید اون را بیاورید. و اگر فایل دومی ، فایل سومی را هم اینکلود کرده ، اون باید آورده شد. به همراه فایل c اش.
در پست های بعدی این تاپیک می بینید گذاشتن فایل کنار فایل برنامه خودتان درست نیست باید فایل را ادد کنید.برای شرح بیشتر پستهای بعد را بخوانید.

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

اسم پوشه هدرها
00-libfiles است.
بروید به پوشه code ، داخل این پوشه دو تا پوشه برنامه هست ، هر دو پوشه ، حاوی پوشه 00-libfiles هست.


دو تا پوشه کد نمونه دارید... ولی به کدهای نمونه بسنده نکنید و بروید فایلهای هدر در انتهای فایل لیست توابع آماده شده را ببینید تا بفهمید با چه توابعی می توانید کار کنید....در پستهای بعدی من فایل lcd.h را باز کردم و پروتوتایپ های توابع را در پستهای بعدی زدم. و از یکی از توابع اون که برو به خط بعد است استفاده کردم تا نوشته دوم برود به خط بعدی lcd. توابع دیگری هم در اون لیست هست که می توانید خودتان استفاده کنید.
 
آخرین ویرایش:

saalek110

Well-Known Member
Blinky چشمک زن :
PHP:
#include <avr/io.h>
#include <util/delay.h>

int main()
{
    DDRC = 0xff;           // Configure PORTC as output

    while(1)
    {
        PORTC = 0xff;        // Turn ON all the Leds connected to PORTC
        _delay_ms(5000);      // Wait for some time
        PORTC = 0x00;        // Turn OFF all the Leds connected to PORTC
        _delay_ms(5000);      // Wait for some time
    }
    return 0;
}

این برنامه ، یکی از برنامه های مثال بسته شرکت اکسپلور امبدد است ولی هدرهای خودش را استفاده نکرده.
اون دو تا اینکلود ، مال خود اتمل استودیو است.

شزح برنامه هم داخل کامنت ها هست، led را روشن یا خاموش می کند... داخل main هم پورت سی را به عنوان خروجی معرفی کرده.

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

saalek110

Well-Known Member
PHP:
#include "lcd.h"


int main()
{
    /*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
    LCD_SetUp(PB_0,PB_1,PB_2,P_NC,P_NC,P_NC,P_NC,PB_4,PB_5,PB_6,PB_7);
    LCD_Init(2,16);
 
    LCD_DisplayString("Explore Embedded");
    LCD_DisplayString("Lcd 4-bit Mode");
    while(1);
 
    return (0);
}

برنامه بالا برای lcd است و می بینید هدر lcd.h را اینکلود کرده
می بینید با دابل کوتیشن اینکلود کرده نه با علامت کوچک تر و بزرگتر
احتمالا همین نشون میده از هدرهای شرکت اکسپلور امبدد است.
البته بودنش که هست ، منظورم استفاده از دابل کوتیشن می تونه نشانه استفاده از هدری باشه که خودمون نوشتیم.

من رفتم فایلهای lcd.h و lcd.c را خواندم. و متوجه شدم خط :

PHP:
LCD_SetUp(PB_0,PB_1,PB_2,P_NC,P_NC,P_NC,P_NC,PB_4,PB_5,PB_6,PB_7);

چرا این طوری نوشته شده... ۴ تا پایه وسط lcd را معمولا رها می کنند... در کد بالا با P_NC اینو نشون داده ، اگر بروید داخل کدهای هدر ، طرز برخورد با عبارت P_NC نوشته شده.

می بیند کار با lcd در ۳ خط ، خلاصه شده ،

خط اول که معرفی پایه ها هست.
خط دوم شروع است و ۱۶ کاراکتری بودن را اعلام کرده.
PHP:
LCD_Init(2,16);
و خط سوم هم چاپ در lcd است.

PHP:
    LCD_DisplayString("Explore Embedded");

پس کار خیلی خلاصه است ، و کدهای پشت پرده را هم هر وقت دوست داشتید بخوانید تا بدانید کل کدها چیه.
 
آخرین ویرایش:

saalek110

Well-Known Member
در پستهای بعدی ، تست عملی کد را شروع کردم.یعنی ریختن در میکروکمترلر.
 
آخرین ویرایش:

saalek110

Well-Known Member
من فکر می کردم اگر همه فایهای پوشه libfiles را بریزم کنار فایل C خودتان ،
وقتی یک هدر را صدا می زنید و اون هدر یکی دیگر را صدا می زنه و برسه به سومی...
وقتی همه هدرها کنار فایل C یعنی فایل برنامه شما باشند مثلا my_program.c

هدرها خودشون هم را پیدا می کنند.

ولی فایلها را با وجودی که کنار فایل کد بودند پیدا نکرد...
من هم روی پوشه پروژه
( داخل اتمل استودیو در پنجره کوچیکه سمت راست بالا که اسم پنجره solution explorer است )
کلیک راست کردم و add و سپس existing item را زدم و فایلهای لازم را اضافه کردم.

در عکس زیر همه چیز را می بینید...
ببینید کلی فایل من اضافه کردم.


17.jpg

در عکس بالا main.c فایل کد برنامه است و هر چی زیر اون آکون لایبرری است را من ادد کردم.
که در شکل زیر با فلش نشان دادم:

18.jpg

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

برنامه من این است:

PHP:
#include <avr/io.h>
#include "lcd.h"

int main(void)
{
    /*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
    LCD_SetUp(PA_0,PA_1,PA_2,P_NC,P_NC,P_NC,P_NC,PA_4,PA_5,PA_6,PA_7);
    LCD_Init(2,16);
 
    LCD_DisplayString("Explore Embedded");
    LCD_DisplayString("Lcd 4-bit Mode");
 
 
 
    /* Replace with your application code */
    while (1)
    {
    }
}

همون برنامه است دقیقا ...فقط من پایه های میکروکنترلر که به lcd وصل میشه را از پورت A گرفتم. شما هم هر پایه ای دوست دارید بگیرید.

میکروکنترلر من Atmega16 است. که البته در کد نشانه ای ازش نیست.
منظورم اینه که هدرهای این سایت برای اتمگا 16 هم اینجا کار کرد. خود سایت خارجی فکر کنم با اتمگا 32 کار کرده.
وقتی پروژه می ساختم می دونید اتمل استودیو نوع میکروکنترلر را می خواهد که من اتمگا 16 دادم.


بعدا شاید اتمگا 8 را هم امتحان کردم.


این هم نتیجه اجرای برنامه: من دوربین را کج گرفتم چیزی کج نیست.

۲۰۲۳۱۱۱۰_۲۳۵۳۰۴.jpg

یک عکس صاف تر: ولی بد رنگ تر
۲۰۲۳۱۱۱۱_۰۰۲۶۲۸.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
اینکه چطور من فهمیدم چه فایلهایی باید ادد بشود ، از روی خطاهای برنامه فهمیدم...
فایل اضافه ادد بکنید هیچی نمیشه.

فکرکنم درستش اینه که پوشه libfiles معرفی بشه. اگر من اینجا نگفتم خودتان سرچ کنید و یاد بگیرید و انجام بدهید.

اگر کسی با سرچ اینجا اومده ... این تاپیک lcd نیست ...یک تاپیک دیگر برای این کار داریم...اینجا داشتیم یک سری هدر را تست می کردیم...با یک روش دیگه در اون تاپیک گفتیم. تاپیک مادر میکروکنترلر بروید ...بروید قسمت اتمل استودیو و تاپیک lcd را پیدا کنید. این هم لینک مستقیم :


و ادامه بحث رفت این تاپیک:

 
آخرین ویرایش:

saalek110

Well-Known Member
من کد را این طوری تغییر دادم:
PHP:
    LCD_DisplayString("Majidonline");
    LCD_DisplayString("Iran");

نتیجه این طوری شد:
۲۰۲۳۱۱۱۱_۰۰۳۹۵۰.jpg

انتظار داشتم Iran برود خط بعدی ولی نرفت.

بروید به فایل lcd.h ...آخرهای فایل ..... داریم:

PHP:
void LCD_Init(uint8_t v_lcdNoOfLines_u8, uint8_t v_MaxCharsPerLine_u8);
void LCD_CmdWrite( uint8_t v_lcdCmd_u8);
void LCD_DisplayChar( char v_lcdData_u8);
void LCD_Clear();
void LCD_GoToLine(uint8_t v_lineNumber_u8);
void LCD_GoToNextLine();
void LCD_SetCursor(uint8_t v_lineNumber_u8, uint8_t v_charNumber_u8);
void LCD_DisplayString(const char *ptr_stringPointer_u8);
void LCD_ScrollMessage(uint8_t v_lineNumber_u8, char *ptr_msgPointer_u8);
void LCD_DisplayNumber(uint8_t v_numericSystem_u8, uint32_t v_number_u32, uint8_t v_numOfDigitsToDisplay_u8);
void LCD_DisplayFloatNumber(double v_floatNum_f32);
void LCD_Printf(const char *argList, ...);
void LCD_SetUp(gpioPins_et RS, .........

اینها توابعی است که در اختیار شماست.
اگر کد این توابع را می خواهید بروید به lcd.c

با توابع بالا انتخاب محل نوشتن ممکن است.
 
آخرین ویرایش:

saalek110

Well-Known Member
فکر می کنم به عنوان مثالی از استفاده از این هدرها ..... کار با lcd اینجا کافیه ...... بقیه هدرها هم مشابه همین است مقداری. اگر نکته ای بود در این تاپیک بعدا اشاره می کنم.

ادامه بحث کار با lcd کاراکتری 16*2 در atmel studio با این هدرها را در تاپیک خودش ادامه می دهیم:

 

جدیدترین ارسال ها

بالا