اطلاعیه

Collapse
No announcement yet.

شروع کار با lcd کاراکتری 16×2

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : شروع کار با lcd کاراکتری 16×2

    هیچ چی رو تغییر ندادم.تمام پایه ها رو هم 100 بار چک کردم
    پایه rw رو هم سخت افزاری ریست کردم(مثل بسکام :mrgreen: )

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

    دیدگاه


      #17
      پاسخ : شروع کار با lcd کاراکتری 16×2

      حواست بود که D0-D7 -> PA24-PA31 منظور خود پایه های 24-31 نیست بلکه پایه هایی هست که طبق دیتا شیت PA24-PA31 تو اونا قرار داره .(شماره پایه ها رو از دیتاشیت ببین ، درضمن پشت سرهم نیستنا)
      اگه دقیقا پروژه رو باز کردی و هیچی رو تغییر ندادی ،تو سخت افزارت مشکل داری . یعنی یا پایه ها رو اشتباه وصل کردی یا تغذیه مشکل داره یا ...
      مثلا شما یه منبع 5 ولت جدا دارید دیگه؟ که از اون به پایه 2,15 lcd وصل کردید و زمین اون منبع رو به زمین بورد اصلی وصل کردید؟
      کنتراست رو تنظیم کردید؟
      فعلا که همینا به ذهنم میرسه :rolleyes:

      دیدگاه


        #18
        پاسخ : شروع کار با lcd کاراکتری 16×2

        درساه توی ارم تازه واردم و تازه دارم با نرم افزار کیل کار میکنم و با ساختار سخت افزاری و میکرو کنترلی اشنا هستم.و این نکته هایی رو که فرمودین رو مد نظر گرفتم ولی نکته ای که میبینم کنتراست درست تنظیم نمیشه با وجود اینکه ولوم گزاشتم و یه طرفش رو به تغذیه و طرف دیگه رو به زمین وصل کردم و سر وسط رو به پایه 3 ال سی دی
        یعنی اونجوری که باید بشه نیست.فقط این نکته و یه نکته کوچولوی دیگه اینکه دارم از lcd 4*20 استفاده میکنم. :redface:
        علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

        دیدگاه


          #19
          پاسخ : شروع کار با lcd کاراکتری 16×2

          میگید پایه ها رو درست وصل کردید، برنامه رو هم تغییر ندادید ولی کار نمیکنه oo: .
          برنامه 4*20 با 2*16 که نباید فرق کنه(ولی امتحان نکردم) اما شما با 2*16 هم امتحام کنید . ولتاژ پایه سوم هم باید نزدیک صفر باشه .
          دیگه چیزی به ذهنم نمیرسه

          دیدگاه


            #20
            پاسخ : شروع کار با lcd کاراکتری 16×2

            منم چیزی به ذهنم نمیرسه ولی یه شماتیک دارم نمیدونم از کجا دانلود کردم ولی lcd هم داره میتونی الگو بگیری ولی امتحان نکردمش.
            آقا فرزاد همه چیز رو گفته دیگه چی بگم؟؟؟؟؟؟؟؟؟؟

            http://www.4shared.com/file/132128263/627128e1/S64EVB2.html
            It's nice to be important but it's important to be nice!

            از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.

            دیدگاه


              #21
              پاسخ : شروع کار با lcd کاراکتری 16×2

              من به پایه rs e که تو برنامه ال سی دی گزاشته شده از روی برد led وصله و نمیشه ورش داشت .احتمال می دم مشکل از این باشه .میشه تست کنی ببینی اگه ledوصل باشه کار می کنه یا نه؟
              و من نمی دونم اگه بخوام این 2 تا پایه(8 و 10) رو بزارم مثلا روی 13 و 14 باید کدوم خط ها رو به چه اصولی عوض کنم
              میشه کمکم کنی؟
              oo:
              خب اینو از اول میگفتی!
              خروجی میکرو که کلا 3.3 ولته و lcd هم با استاندارد 5 ولت و سطح منطقی 1 برای 3 ولت به بالا کارمیکنه. یعنی همینجوریشم لب مرزه اونوقت شما 2وت از 3.3 رو با led کم کردی ! و فقط 1.5 ولت میرسه به lcd
              حالا شما ببین بقیه پایه ها هم همینجوریه یا آزادن که من یه دفعه بگم کجا شو عوض کنی.

              دیدگاه


                #22
                پاسخ : شروع کار با lcd کاراکتری 16×2

                نوشته اصلی توسط رضا شفقی
                منم چیزی به ذهنم نمیرسه ولی یه شماتیک دارم نمیدونم از کجا دانلود کردم ولی lcd هم داره میتونی الگو بگیری ولی امتحان نکردمش.
                آقا فرزاد همه چیز رو گفته دیگه چی بگم؟؟؟؟؟؟؟؟؟؟

                http://www.4shared.com/file/132128263/627128e1/S64EVB2.html
                اون شماتیک رو من گذاشته بودم دیگه ، برای برد خودم هست. فقط اون دوتل پایه LCDHU و LCDBK رو شما میتونید در نظر نگیرید.

                دیدگاه


                  #23
                  پاسخ : شروع کار با lcd کاراکتری 16×2

                  اقا اگه من بخوام که این پایه 8 و10 رو به پایه 13 و 14 انتقال بدم کجاهای برنامه رو باید دست کاری کنم؟
                  علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

                  دیدگاه


                    #24
                    پاسخ : شروع کار با lcd کاراکتری 16×2

                    اگه دیتا همونه و فقط این 2 تا پایه عوض شده ، اونجعایی که اینارو دیدید با مقدار دلخواه عوض کنید.
                    8>>1
                    10>>1

                    دیدگاه


                      #25
                      پاسخ : شروع کار با lcd کاراکتری 16×2

                      اخه شما گفتین جاهایی هم که نوشتین //h باید عوض بشه و دستورات رو عوض کرد
                      علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

                      دیدگاه


                        #26
                        پاسخ : شروع کار با lcd کاراکتری 16×2

                        اون h// ها برای دیتا هستن (db0-db7)که در صورت لزوم 0xFF000000 توی اون خط یا مقدار شیفت باید تغیر کنه . // ها برای پایه e,rs .
                        من برای دفعه سوم یاد آوری میکنم :
                        حواست بود که D0-D7 -> PA24-PA31 منظور خود پایه های 24-31 نیست بلکه پایه هایی هست که طبق دیتا شیت PA24-PA31 تو اونا قرار داره .(شماره پایه ها رو از دیتاشیت ببین ، درضمن پشت سرهم نیستنا)
                        یعنی مثلا همینایی که شما گفنید پایه های 8 و 10 نیستن بلکه PA8 , PA10 هستن یعنی پایه های 29 و31

                        دیدگاه


                          #27
                          پاسخ : شروع کار با lcd کاراکتری 16×2

                          دیگه دارم سر خورده میشم به خدا
                          پایه ها رو هم عوض کردم ولی بازم نشد .lcd کامل پاک می مونه .پاک پاک عین کف دست.البته خوب این یعنی این که ;cd داره کد اول کار رو قبول میکنه چون اگه قبول نمی کرد فقط خطوط فرد مشکی می موند ولی سفید میشه lcd.دیگه نمی دونم مشکل از کجاست :cry2:
                          اسنم قسمت هدر مربوط به ;cd که دستکاریش کردم
                          کد:
                          /*
                            CHARACTER LCD Library Version 0.8
                            For AT91SAM7S(64)
                            8Bit Interface
                          
                            Pins Connections are:
                            RS -> PA8
                            RW -> GND
                            E -> PA10
                            D0-D7 -> PA24-PA31
                          
                            If your LCD's Pins Connections are diffrent , You
                            Should Change the lines which have // or //h signs.
                          
                            Codes By farzadsw
                            http://farzadsw.persianblog.ir
                          */
                          #ifndef c_lcd_H
                          #define c_lcd_H
                          
                          #include "AT91SAM7S64.h"
                          #include "lib_AT91SAM7S64.h"
                          
                          #define LCDRSHI		AT91F_PIO_SetOutput( AT91C_BASE_PIOA,(1<<12))	// 8
                          #define LCDRSLO		AT91F_PIO_ClearOutput( AT91C_BASE_PIOA,(1<<12))	//8
                          #define LCDEHI		AT91F_PIO_SetOutput( AT91C_BASE_PIOA,(1<<10))	//
                          #define LCDELO		AT91F_PIO_ClearOutput( AT91C_BASE_PIOA,(1<<10))	//
                          
                          
                          void delay (int t) {
                           unsigned int n;
                           unsigned long delay;
                           delay = 4000 *t ;
                           for (n = 0; n < delay; n++);
                          }
                          
                          void WriteByte(unsigned char byte,unsigned char IsCommand)
                          {
                              unsigned int dummy;
                          
                            	LCDRSLO;
                          
                              delay(2);
                          
                          
                              AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, 0xFF000000) ;		 //h
                          
                          
                          	if(IsCommand==255)
                          	{
                          		LCDRSLO;												
                          
                          	}
                          	else
                          	{
                          		LCDRSHI;
                          
                          	}
                          
                          	LCDEHI;
                          
                              AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, 0xFF000000) ;	 //h
                          
                          
                          
                              dummy = ((unsigned int)byte & 0xFF) <<24 ;	 //h
                          
                          
                              AT91F_PIO_SetOutput( AT91C_BASE_PIOA, dummy) ;
                          
                          
                          
                          	LCDELO;
                          
                              AT91F_PIO_CfgInput( AT91C_BASE_PIOA, 0xFF000000) ;		 //h
                          }
                          
                          
                          void WriteCharacter(char Char, char row, char column)
                          {
                            switch(row)
                            {
                             case 1: WriteByte( (1<<7) | column,255); break;
                             case 2: WriteByte((1<<7) |(column+0x40),255); break;
                             default: WriteByte((1<<7) |column,255); break;
                            }
                           	WriteByte(Char,0);
                          }
                          
                           
                          void WriteString(const char* Str,char row, char column)
                          {
                          	unsigned char i;
                          	for(i=0;Str[i]!=0;i++)
                          	{
                          		WriteCharacter(Str[i],row,column+i);
                          	}
                          }
                          
                          void ClearLCD(void)
                          {
                          	WriteByte(0x01,255);
                          	WriteByte(0x02,255);
                          }
                          
                          void ConfigLCD(void)
                          {
                          
                           	AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA );
                          	AT91F_PIO_CfgOutput ( AT91C_BASE_PIOA, 1<<12| 1<<10);				 // 8|10
                          	AT91F_PIO_ClearOutput( AT91C_BASE_PIOA,(1<<10));           //E Low
                          
                          	AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,0x00000000);
                          
                              AT91F_PIO_CfgInputFilter( AT91C_BASE_PIOA, 0xFF000000) ;		 //h
                          
                              AT91F_PIO_CfgInput( AT91C_BASE_PIOA, 0xFF000000) ;				 //h
                          
                          
                          
                          	WriteByte(0x01,255);
                          	WriteByte(0x02,255);
                          	WriteByte(0x38,255);
                          	WriteByte(0x0C,255);
                          }
                          
                          void Display_OFF(void)
                          {
                          	WriteByte(0x08,255);
                          }
                          
                          void Character_LCD_DEMO()
                          {
                           unsigned char j;
                           ConfigLCD();
                           ClearLCD();
                           
                          		for(j=0;j<(16-6);j++)
                          		{
                          			ClearLCD();
                              	WriteString("FARZAD",1,j);
                                      delay(500);
                          		}
                          		for( j=(16-6);j>0;j--)
                          		{
                          			ClearLCD();
                          			WriteString("TEST",2,j);
                                      delay(500);
                          		}
                          }
                          
                          #endif
                          حتی این رو به قسمتconfiglcd اضافه کردم گفتم شاید display خاموش می مونه ولی بازم نشد
                          کد:
                          WriteByte(0x0F,255);
                          دیگه واقعا نمی دونم چشه
                          من lcd2*16 ندارم اگه میشه تست کنین ببینین نکنه مشکل از lcd من هست که 4*20 هست
                          علم چندانکه بیشتر خوانی چون عمل در تو نیست نادانی

                          دیدگاه


                            #28
                            پاسخ : شروع کار با lcd کاراکتری 16×2

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

                            دیدگاه


                              #29
                              پاسخ : شروع کار با lcd کاراکتری 16×2

                              :wow: :wow:
                              خدا رو شکر راه افتاد
                              مشکل هم از برنامه بود
                              فکر کنم چون lcd من 20*4 بود.به هر حال این کد بهتر هم هست چون 4بیتی است و نیازی به وصل کردن هر 8 تا پین دیتا نیست :applause:

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

                              دیدگاه


                                #30
                                پاسخ : شروع کار با lcd کاراکتری 16×2

                                اون یکی برنامه رو بده تا ببینم اشکال برنامه من چی بوده

                                دیدگاه

                                لطفا صبر کنید...
                                X