اطلاعیه

Collapse
No announcement yet.

سوالات مربوط به LCD های کاراکتری و گرافیکی

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

    پتانسیوتر برا کنتراسته و اگر نباشه و مستقیم زده بشه زمین مشکلی بوجود نمیاد. ( آخه السیدی کاراکتری رو میخواید کنتراستش رو تنظیم کنید که چی بشه؟ )

    بنده چندین ساله برا تست بعضی پروژه ها از السیدی کاراکتری استفاده میکنم. همیشه پایه مربوط به کنتراست را به زمین وصل کردم.

    در رابطه با بک لایت:
    یه پایه داریم با نام K یا کاتد: به زمین وصل شه
    یه پایه داریم با نام A یا آند : به 5 ولت وصل شه
    راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
    کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
    نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
    http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
    انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

    دیدگاه


      پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

      من بدون پتاسیومتر وصلش کردم اما چیزی نشون نداد. رفتم یه سرچ زدم تو اینترنت تا متوجه شدم ولتاژ پایه کنتراست باید 1.2 ولت باشه تا lcd بهترین عملکردشو تو نمایش داشته باشه . یه نگاهی به این pdf بندازین :
      http://navidh.persiangig.com/LCD%20f...1.pdf/download

      دیدگاه


        پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

        نوشته اصلی توسط RubeuS
        ....بنده چندین ساله برا تست بعضی پروژه ها از السیدی کاراکتری استفاده میکنم....
        یعنی چند ساله دارین از میکرو استفاده میکنید!؟(یا بعبارتی توی کار برق هستید)
        آخه چطور ممکنه! چرا این کار رو میکنید؟ اینجا هیچکی به کس دیگه نمیگه که مبتدی هستش یا نه یا...
        اینجا همه فقط کمک میکنن. می ترسین کسی بهتون بگه شما مبتدی هستین که دروغ میگین؟
        شما به قطب منفی یا همون زمین توی پست قبل گفتین 0 ولت!!
        آخه چطور ممکنه چند سال توی این کارا باشید ولی اینو نفهمید! اصلا 0 ولت معنی نداره! اینم پستتون:


        http://www.eca.ir/forum2/index.php?t...3346#msg503346

        دیدگاه


          پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

          نوشته اصلی توسط rozeh
          یعنی چند ساله دارین از میکرو استفاده میکنید!؟(یا بعبارتی توی کار برق هستید)
          آخه چطور ممکنه! چرا این کار رو میکنید؟ اینجا هیچکی به کس دیگه نمیگه که مبتدی هستش یا نه یا...
          اینجا همه فقط کمک میکنن. می ترسین کسی بهتون بگه شما مبتدی هستین که دروغ میگین؟
          شما به قطب منفی یا همون زمین توی پست قبل گفتین 0 ولت!!
          آخه چطور ممکنه چند سال توی این کارا باشید ولی اینو نفهمید! اصلا 0 ولت معنی نداره! اینم پستتون:


          http://www.eca.ir/forum2/index.php?t...3346#msg503346
          من هر چی بود که باید به شما میگفتم رو گفتم ،

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

          در این رابطه دیگه در این تاپیک پست نزنید و اگر دوست داشتید خصوصی مطرح کنید.

          دلیلشم: بیشتر از ترس آبرومه . همونطور که خودتون گفتید میترسم بهم بگن مبتدی. :agree:

          -----------------------------------------------------------------------------------------------------------------------


          برای اینکه پست اسپم نباشه:

          من بدون پتاسیومتر وصلش کردم اما چیزی نشون نداد. رفتم یه سرچ زدم تو اینترنت تا متوجه شدم ولتاژ پایه کنتراست باید 1.2 ولت باشه تا lcd بهترین عملکردشو تو نمایش داشته باشه . یه نگاهی به این pdf بندازین :
          http://navidh.persiangig.com/LCD%20fault%20finding%20v1.1.pdf/download
          چیپ کنترلر های السیدیها باهم فرق دارند ولی نمیشه اصلا به اون پی دی اف اتکا کرد ، خودتون تو عمل یه برنامه درست بریزید رو میکرو که مثلا Hello نمایش داده بشه ، بعد امتحان کنید . تا امتحان نکنید منظور بنده را متوجه نمیشید. کاری نداره رو بردبوردم میتونید امتحان کنید (پین هدر میخواد )
          تو حالت های مختلف امتحان کنید .
          یه دفعه هم مثل همون طوری که تو پی دی اف گفته بزنید به 0 ولت یا همون زمین ( برای اینکه دوستان ناراحت نشن) ( اختلاف پتانسیلش با مثبت تغذیه تون منفی 5 ولت باشه)

          اصلا یه پی دی اف خودتون در این رابطه بنویسید، اول چیپ کنترلر السیدیتون رو بگید(پشتش نوشته) ، بعد همونطور که گفتم یه برنامه بریزید تو میکرو و حالت های مختلف را بررسی کنید. (تقریبا یه چی تو مایه ها پی دی اف که گذاشتید.) همراه با عکس


          راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
          کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
          نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
          http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

          دیدگاه


            پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

            باز هم سلام

            کتابخانه ای که جناب (( روضه )) گذاشته بودند رو دانلود کردم...مطابق گفته های فایل راهنما فایل glcd.h رو دستکاری کردم....برنامه بدون مشکل کامپایل و run میشه ولی نتیجه ...هیچی...!! :angry:

            فایل main اینه...خیلی خیلی ساده:

            کد:
            #include <mega32a.h>
            #include <glcd.h>
            
            void main(void)
            {
            DATADDR=0XFF;
            h_line(10,10,20,2,0);
            }
            فایل glcd رو به همراه شبیه سازی پروتئوس پلود کردم...حجمش 117 کیلوبایت بیشتر نیست...محبت کرده یه نگاهی بندازید...نمیدونم کجای کار رو اشتباه کردم...

            http://public.fileup.ir/d/2145334/glcd.rar




            دیدگاه


              پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

              نوشته اصلی توسط roberty
              باز هم سلام

              کتابخانه ای که جناب (( روضه )) گذاشته بودند رو دانلود کردم...مطابق گفته های فایل راهنما فایل glcd.h رو دستکاری کردم....برنامه بدون مشکل کامپایل و run میشه ولی نتیجه ...هیچی...!! :angry:

              فایل glcd رو به همراه شبیه سازی پروتئوس پلود کردم...حجمش 117 کیلوبایت بیشتر نیست...محبت کرده یه نگاهی بندازید...نمیدونم کجای کار رو اشتباه کردم...

              http://public.fileup.ir/d/2145334/glcd.rar
              در مورد کتابخونه باید بگم که حاضرم شرف کاریم رو گرو بذارم که کار میکنه!
              باید ببینیم که مشکل کار شما کجاست.
              عکس از محیط پروتئوس بذارید.

              تنظیمات پایه های کتابخونه رو چطور انجام دادید؟ کپی کنید و اینجا بذارید.

              دیدگاه


                پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

                نوشته اصلی توسط rozeh
                در مورد کتابخونه باید بگم که حاضرم شرف کاریم رو گرو بذارم که کار میکنه!
                باید ببینیم که مشکل کار شما کجاست.
                عکس از محیط پروتئوس بذارید.

                تنظیمات پایه های کتابخونه رو چطور انجام دادید؟ کپی کنید و اینجا بذارید.
                درود به شرف کاری شما.

                این عکس پروتئوس:

                http://upload7.ir/images/39169609397350572703.jpg


                اینم تنظیمات پایه کتابخانه:
                کد:
                /***************************************************************************
                 * Osama's Lab KS0108 GLCD library; a library that facilitates interfacing KS0108 based GLCDs.
                 *
                 *  Copyright (C) 2010-2012 Osama's Lab
                 *
                 *  This program is free software: you can redistribute it and/or modify
                 *  it under the terms of the GNU Affero General Public License as
                 *  published by the Free Software Foundation, either version 3 of the
                 *  License.
                 *
                 *  This program is distributed in the hope that it will be useful,
                 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
                 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
                 *  GNU Affero General Public License for more details.
                 *
                 *  You should have received a copy of the GNU Affero General Public License
                 *  along with this program. If not, see <http://www.gnu.org/licenses/> 
                 **************************************************************************/
                
                #include <delay.h> 
                #include <stdlib.h>
                #include <math.h>
                #include <string.h>
                #include "font.h"
                
                typedef unsigned char byte;
                //DEBUG
                //#define DEBUG_READ 0
                //#define DEBUG_GLCD 0
                //----------------------
                #define E_DELAY 3
                #define DATAPORT PORTA
                #define DATADDR DDRA
                #define DATAPIN PINA
                //#define CONTROLPORT PORTB
                #define CS1 PORTB.4
                #define CS2 PORTB.5
                #define RS PORTB.2
                #define RW PORTB.1
                #define EN PORTB.0
                //#define CS_ACTIVE_LOW  0  //Define this if your GLCD CS 
                               //is active low (refer to datasheet)
                #pragma used+
                                             
                //--------Arabic----------
                static int prevLet = 193;
                static byte stat = 0;
                static byte prevX = 0;
                static byte prevY = 0;
                //------------------------
                void trigger()
                {
                  EN = 1; //EN high
                  delay_us(E_DELAY);
                  EN = 0; //EN low
                  delay_us(E_DELAY);
                }
                //----------------------
                void glcd_on()
                {
                  //Activate both chips
                  #ifdef CS_ACTIVE_LOW
                    CS1 = 0;
                    CS2 = 0;
                  #else  
                    CS1 = 1;     
                    CS2 = 1;
                  #endif
                  RS = 0;     //RS low --> command
                  RW = 0;     //RW low --> write
                  DATAPORT = 0x3F; //ON command 
                  trigger();   
                }      
                //----------------------
                void glcd_off()
                {
                  //Activate both chips
                  #ifdef CS_ACTIVE_LOW
                    CS1 = 0;
                    CS2 = 0;
                  #else
                    CS1 = 1;     
                    CS2 = 1;
                  #endif
                  RS = 0;     //RS low --> command
                  RW = 0;     //RW low --> write  
                  DATAPORT = 0x3E; //OFF command  
                  trigger();   
                }   
                //----------------------
                void set_start_line(byte line)
                {
                  RS = 0;           //RS low --> command
                  RW = 0;           //RW low --> write
                  //Activate both chips
                  #ifdef CS_ACTIVE_LOW
                    CS1 = 0;
                    CS2 = 0;
                  #else  
                    CS1 = 1;     
                    CS2 = 1;
                  #endif  
                  DATAPORT = 0xC0 | line;   //Set Start Line command 
                  trigger();   
                }
                //----------------------
                void goto_col(unsigned int x)
                {
                  byte pattern;
                  RS = 0;       //RS low --> command
                  RW = 0;       //RW low --> write  
                  if(x<64)       //left section
                  {
                   #ifdef CS_ACTIVE_LOW
                    CS1 = 0;     //select chip 1
                    CS2 = 1;     //deselect chip 2
                   #else     
                    CS1 = 1;     //select chip 1
                    CS2 = 0;     //deselect chip 2
                   #endif
                   pattern = x;   //put column address on data port  
                  }
                  else         //right section
                  {
                   #ifdef CS_ACTIVE_LOW
                    CS2 = 0;
                    CS1 = 1;
                   #else
                    CS2 = 1;     //select chip 2
                    CS1 = 0;     //deselct chip 1
                   #endif
                   pattern = x-64;  //put column address on data port
                  }  
                  pattern = (pattern | 0x40 ) & 0x7F; //Command format
                  DATAPORT = pattern; 
                  trigger();   
                }  
                //----------------------
                void goto_row(unsigned int y)
                {  
                  byte pattern;  
                  RS = 0;         //RS low --> command
                  RW = 0;         //RW low --> write     
                  pattern = (y | 0xB8 ) & 0xBF; //put row address on data port set command   
                  DATAPORT = pattern;  
                  trigger();       
                }
                //----------------------
                void goto_xy(unsigned int x,unsigned int y)
                {  
                  goto_col(x);
                  goto_row(y);                           
                } 
                //----------------------
                void glcd_write(byte b)
                {
                  RS = 1;     //RS high --> data
                  RW = 0;     //RW low --> write   
                  DATAPORT = b;  //put data on data port 
                  delay_us(1);  
                  trigger();
                }
                //------------------------
                void glcd_clrln(byte ln)
                {
                  int i;
                  goto_xy(0,ln);   //At start of line of left side
                  goto_xy(64,ln);   //At start of line of right side (Problem)
                  #ifdef CS_ACTIVE_LOW
                    CS1 = 0;
                  #else
                    CS1 = 1;
                  #endif  
                  for(i=0;i<65;i++)
                    glcd_write(0);
                }
                //-------------------------
                void glcd_clear()
                {
                  int i;
                  for(i=0;i<8;i++)
                   glcd_clrln(i);
                }
                //-----------------------
                byte is_busy()
                {
                  byte status = 0;    //Read data here
                  
                  EN = 0;         //Low Enable
                  delay_us(1);      //tf
                  RW = 1;         //Read
                  RS = 0;         //Status     
                  delay_us(1);      //tasu
                  EN = 1;         //High Enable
                  delay_us(5);      //tr + max(td,twh)->twh
                  
                  //Dummy read
                  EN = 0;         //Low Enable
                  delay_us(5);      //tf + twl + chineese error  
                  
                  EN = 1;         //High Enable
                  delay_us(1);      //tr + td    
                                 
                  status = DATAPIN;  //Input data
                  EN = 0;         //Low Enable
                  delay_us(1);      //tdhr
                  #ifdef DEBUG_READ
                    printf("S:%x\n\r",status);
                  #endif
                  return (status & 0x80);      
                }
                //-----------------------  
                byte glcd_read(byte column)
                {
                  byte read_data = 0; //Read data here
                  DATADDR = 0x00;   //Input 
                  
                  //while(is_busy());
                  RW = 1;       //Read
                  RS = 1;       //Data
                  #ifdef CS_ACTIVE_LOW
                    CS1 = (column>63);
                  #else     
                    CS1 = (column<64); //Enable/Disable CS1
                  #endif
                  CS2 = !CS1;     //Disable/Enable CS2
                  delay_us(1);    //tasu
                  EN = 1;       //Latch RAM data into ouput register
                  delay_us(1);    //twl + tf
                  
                  //Dummy read
                  //while(is_busy());
                  EN = 0;       //Low Enable
                  delay_us(20);    //tf + twl + chineese error  
                  
                  EN = 1;       //latch data from output register to data bus
                  delay_us(1);    //tr + td(twh)    
                                 
                  read_data = DATAPIN;  //Input data  
                  EN = 0;       //Low Enable to remove data from the bus 
                  delay_us(1);    //tdhr
                  #ifdef DEBUG_READ
                    printf("R:%x\n\r",read_data);
                  #endif
                  DATADDR = 0xFF;   //Output again
                  return read_data;   
                }
                //-----------------------
                /*byte get_point(unsigned int x,unsigned int y)
                {
                  byte data;
                  goto_xy(x,((int)(y/8)));
                  data = glcd_read();    
                  return data;
                } */
                //----------------------
                void point_at(unsigned int x,unsigned int y,byte color)
                {
                  byte pattern;
                  goto_xy(x,(int)(y/8)); 
                  switch (color)
                  {        
                    case 0:     //Light spot            
                      pattern = ~(1<<(y%8)) & glcd_read(x);         
                    break;  
                    case 1:     //Dark spot      
                      pattern = (1<<(y%8)) | glcd_read(x);
                      #ifdef DEBUG_GLCD
                        delay_ms(30);/////////////////////////////////////////
                      #endif
                    break;
                  }      
                  goto_xy(x,(int)(y/8));                
                  glcd_write(pattern);
                }
                //-----------------------
                void h_line(unsigned int x,unsigned int y,byte l,byte s,byte c)
                {
                  int i;
                  for(i=x; i<(l+x); i += (byte)(s+1))
                    point_at(i,y,c);
                }
                //-----------------------
                void v_line(unsigned int x,unsigned int y,signed int l,byte s,byte c)
                {
                  unsigned int i;
                  for(i=y; i<(y+l); i += (byte)(s+1))
                    point_at(x,i,c);
                }
                //-----------------------
                void line(unsigned int x1,unsigned int y1,
                     unsigned int x2,unsigned int y2,
                     byte s,byte c)
                {
                  byte i;
                  byte y01;
                  
                  byte temp;
                  
                  float a;
                  float b;
                  
                  byte y00;
                  byte y010;
                  
                  if(x1==x2) 
                  {  
                    v_line(x1,min(y1,y2),abs(y2-y1)+1,s,c);
                  }
                  else if(y1==y2)
                  {
                    h_line(min(x1,x2),y1,abs(x2-x1)+1,s,c);
                  }
                  else  
                  {
                    if(x1>x2)
                    {
                      temp = x1;
                      x1 = x2;
                      x2 = temp;
                      temp = y1;
                      y1 = y2;
                      y2 = temp;
                    }
                    
                    a = (float)(signed)(y2-y1)/(x2-x1);
                    b = y1 - a*x1;
                    y00 = a*x1 + b;
                    y010 = y00;  
                          
                    for(i=(x1+1); i<=x2; i ++)
                    {
                      y01 = a*i + b + 0.5; //+ 0.5 to approximate to the nearest integer
                        
                      if( (signed char)(y01 - y010) > 1 )
                      {
                        //-------Subject to error
                        v_line((i-1),(byte)(y010+1),(y01-y010-1),s,c);
                      }
                      else if( (signed char)(y010 - y01) > 1 )
                      {
                        //-------Subject to error
                        v_line((i-1),(byte)(y01+1),(y010-y01-1),s,c);
                      } 
                            
                      if((i==x2) && (y00 == y01)) h_line(x1,y01,(x2-x1),0,c);                 
                      y010 = y01;    
                      if( y00 == y01) continue;
                      h_line(x1,y00,(i-x1),0,c);
                      x1 = i;
                      y00 = y01;
                    }
                    point_at(x2,y2,c); 
                  }     
                }
                //-----------------------
                void rectangle(unsigned int x1,unsigned int y1,
                        unsigned int x2,unsigned int y2,
                        byte s,byte c)
                {
                  h_line(x1,y1,(x2-x1),s,c);
                  h_line(x1,y2,(x2-x1),s,c);
                  v_line(x1,y1,(y2-y1),s,c);
                  v_line(x2,y1,(y2-y1+1),s,c);
                }
                //-----------------------
                void cuboid(unsigned int x11,unsigned int y11,
                      unsigned int x12,unsigned int y12,
                      unsigned int x21,unsigned int y21,
                      unsigned int x22,unsigned int y22,
                      byte s,byte c)
                {
                  rectangle(x11,y11,x12,y12,s,c);
                  rectangle(x21,y21,x22,y22,s,c);
                  line(x11,y11,x21,y21,s,c);
                  line(x12,y11,x22,y21,s,c);
                  line(x11,y12,x21,y22,s,c);
                  line(x12,y12,x22,y22,s,c);
                }
                //-----------------------
                void h_parallelogram(unsigned int x1,unsigned int y1,
                           unsigned int x2,unsigned int y2,
                           byte l,byte s,byte c)
                {
                  h_line(x1,y1,l,s,c);
                  h_line((x2-l+1),y2,l,s,c);
                  line(x1,y1,(x2-l+1),y2,s,c);
                  line((x1+l-1),y1,x2,y2,s,c);
                }
                //-----------------------
                void v_parallelogram(unsigned int x1,unsigned int y1,
                           unsigned int x2,unsigned int y2,
                           byte l,byte s,byte c)
                {
                  v_line(x1,y1,l,s,c);
                  v_line(x2,(y2-l+1),l,s,c);
                  line(x1,y1,x2,(y2-l+1),s,c);
                  line(x1,(y1+l-1),x2,y2,s,c);
                }
                //-----------------------
                void h_parallelepiped(unsigned int x11,unsigned int y11,
                           unsigned int x12,unsigned int y12,byte l1,
                           unsigned int x21,unsigned int y21,
                           unsigned int x22,unsigned int y22,byte l2,
                           byte s,byte c)
                {
                  h_parallelogram(x11,y11,x12,y12,l1,s,c);
                  h_parallelogram(x21,y21,x22,y22,l2,s,c);
                  line(x11,y11,x21,y21,s,c);
                  line(x12,y12,x22,y22,s,c);
                  line((x11+l1-1),y11,(x21+l2-1),y21,s,c);
                  line((x12-l1+1),y12,(x22-l2+1),y22,s,c);
                }
                //-----------------------
                void v_parallelepiped(unsigned int x11,unsigned int y11,
                           unsigned int x12,unsigned int y12,byte l1,
                           unsigned int x21,unsigned int y21,
                           unsigned int x22,unsigned int y22,byte l2,
                           byte s,byte c)
                {
                  v_parallelogram(x11,y11,x12,y12,l1,s,c);
                  v_parallelogram(x21,y21,x22,y22,l2,s,c);
                  line(x11,y11,x21,y21,s,c);
                  line(x12,y12,x22,y22,s,c);
                  line(x11,(y11+l1-1),x21,(y21+l2-1),s,c);
                  line(x12,(y12-l1+1),x22,(y22-l2+1),s,c);
                }
                //-----------------------
                void circle(unsigned int x0,unsigned int y0,
                      unsigned int r,byte s,byte c)
                {
                  byte i,y,y00;
                  y00 = r;      //Point (0,r) is the 1st point
                  for(i=0; i<r; i++)
                  {
                    y = isqrt((int)r*r - (int)i*i);
                    point_at((x0+i),(y0+y),c);
                    point_at((x0+i),(y0-y),c);
                    point_at((x0-i),(y0+y),c);
                    point_at((x0-i),(y0-y),c);    
                    if(abs(y00-y)>1)
                    {
                      v_line(x0+(i-1),y0+min(y00,y)+1,abs(y00-y),s,c);
                      v_line(x0+(i-1),y0-max(y00,y),abs(y00-y),s,c);
                      v_line(x0-(i-1),y0+min(y00,y)+1,abs(y00-y),s,c);
                      v_line(x0-(i-1),y0-max(y00,y),abs(y00-y),s,c);
                    }
                    y00 = y;  
                  }
                  v_line(x0+(i-1) ,y0,y ,s,c);
                  v_line(x0+(i-1) ,y0-y ,y,s,c);
                  v_line(x0-(i-1) ,y0,y ,s,c);
                  v_line(x0-(i-1) ,y0-y ,y,s,c);  
                }
                //-----------------------
                //void ellipse(unsigned int x0,unsigned int y0,
                //       unsigned int a,unsigned int b,
                //       byte s,byte c)
                //{
                //  byte i,y,y00;
                //  y00 = 1;
                //  for(i=0; i < a; i++)
                //  {
                //    y = isqrt((int)a*a - (int)i*i);
                //    point_at((x0+i)*(a+x0)/a,(y0+y)*(b+y0)/b,c);
                //    point_at((x0+i)*(a+x0)/a,(y0-y)*(b+y0)/b,c);
                //    point_at((x0-i)*(a+x0)/a,(y0+y)*(b+y0)/b,c);
                //    point_at((x0-i)*(a+x0)/a,(y0-y)*(b+y0)/b,c);    
                //    /*if(abs(y00-y)>1)
                //    {
                //      v_line(x0+(i-1),y0+min(y00,y)+1,abs(y00-y),s,c);
                //      v_line(x0+(i-1),y0-max(y00,y),abs(y00-y),s,c);
                //      v_line(x0-(i-1),y0+min(y00,y)+1,abs(y00-y),s,c);
                //      v_line(x0-(i-1),y0-max(y00,y),abs(y00-y),s,c);
                //      
                //      printf("y=%u y00=%u\n\r",y,y00);
                //    }*/
                //    y00 = y;  
                //  }
                //  /*v_line(x0+(i-1) ,y0,y ,s,c);
                //  v_line(x0+(i-1) ,y0-y ,y,s,c);
                //  v_line(x0-(i-1) ,y0,y ,s,c);
                //  v_line(x0-(i-1) ,y0-y ,y,s,c);*/  
                //} 
                //------------Arabic/English Writing-------
                void putIt(int c,int x,int y)
                {
                  byte i;
                 goto_col(x);
                 goto_row(y);
                 for(i=0;i<8;i++)
                 {
                   glcd_write(font[(8*c)+i]);
                 }
                }
                //--------------------------
                void enlarge(char *large,unsigned char c,byte size)
                {
                	byte i,j,temp;
                	byte k = 0;
                	for(i=0;i<size;i++)
                	{
                		for(j=0;j<8;j++)
                		{
                			large[i] >>= 1;
                			temp = c & 0x01;
                			if(temp)
                				large[i] |= 0x80;
                			if(++k == size)
                			{
                				c >>= 1;
                				k = 0;
                			}
                		}
                	}
                }
                //--------------------------
                void putItSz(int c,int x,int y,byte sz)
                {
                 byte i,j,k;
                 //char large[8][sz]; 
                 char large[8][8];
                 
                 goto_col(x);
                 goto_row(y);
                 for(i=0;i<8;i++)
                 {                   
                	 enlarge(large[i],font[(8*c)+i],sz);		//c here;GCC (c-1)
                 }
                 for(j=0;j<sz;j++)
                 {
                	 for(i=0;i<8;i++)
                	 {
                		 for(k=0;k<sz;k++)
                		 {
                			 if(x+k+(sz*i) == 64) goto_xy(64,y);		//Problem 1: Forgot to change 3 to sz
                			 glcd_write(large[i][j]);
                		 }
                	 }
                	 goto_xy(x,++y);
                 }
                }
                //--------------------------
                void glcd_putchar(byte c,int x,int y,byte l,byte sz)
                {
                  if(l == 1)
                  {    
                    switch(c)
                  	{
                  	case 129:
                  		c = 250;
                  		break;
                  	case 144:
                  		c = 251;
                  		break;
                  	case 152:
                  		c = 252;
                  		break;
                  	case 142:
                  		c = 253;
                  		break;
                  	case 141:
                  		c = 254;
                  		break;
                  	}
                    if((c >= 193) && (prevLet >= 193) && (map[prevLet-193][5]) && (map[c-193][4]))
                    {
                      putIt(map[prevLet-193][stat+1],prevX,prevY);
                      stat = 2;
                    }else stat = 0;
                
                    if(c >= 193) putItSz(map[c-193][stat],x,y,sz);
                    else putItSz(c,x,y,sz);
                
                    prevLet = c;
                    prevX = x;
                    prevY = y;
                
                  }else putItSz(c,x,y,sz);
                }
                //---------------------------
                void glcd_puts(byte *c,int x,int y,unsigned char l,byte sz,signed char space)
                {
                  char i = 0;
                  char special = 0;
                  while((i<strlen(c)) && l==0)
                  {
                   glcd_putchar(*(c+i),x,y,0,sz);
                   x += (8+space)*sz;
                   if(x>128-8*sz)
                   {
                     x=0;
                     y += sz;
                   }
                   i++;
                  }
                
                  while((i<strlen(c)) && l==1)
                  {
                   if((*(c+i) == 225) && (*(c+i+1) == 199))
                    special = 249;
                   else if((*(c+i) == 225) && (*(c+i+1) == 195))
                    special = 231;
                   else if((*(c+i) == 225) && (*(c+i+1) == 194))
                    special = 232;
                   else if((*(c+i) == 225) && (*(c+i+1) == 197))
                    special = 233;
                   if(special)
                   {
                    glcd_putchar(special,x-8*sz,y,1,sz);
                    i+=2;
                    x -= 8*sz;
                    special = 0;
                   }   
                   else
                   {
                		 glcd_putchar(*(c+i),x-8*sz,y,l,sz);
                		 if(*(c+i) == 32)						//If space (i.e. new word)
                		 {
                			 x -= (8+space)*sz;				//Space between words
                		 }
                		 else
                		 {
                			 x -= 8*sz;
                		 }
                		 i++;
                   } 
                   if(x < 8*sz+1)
                   {
                     x=128-8*sz;
                     y += sz;
                   }
                  }
                  prevLet = 193;
                }
                //------------BMP Display--------------------
                void bmp_disp(flash byte *bmp,unsigned int x1,unsigned int y1,
                               unsigned int x2,unsigned int y2)
                {
                  unsigned int i,j;  
                  for(i=y1;i<=y2;i++)
                  {
                    for(j=x1;j<=x2;j++)
                    {            
                      goto_xy(j,i);               
                      glcd_write(bmp[(128*i)+j]);
                    }                       
                  }
                }
                    
                #pragma used-
                منتظر راهنمایی شما هستم.

                ممنون.

                دیدگاه


                  پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

                  جناب roberty
                  1- به جای وصل کردن پایه RST به پین PB3 اونو جداگانه VCC کن.
                  2- اون برنامه تون رو چطور نوشتید.
                  وقتی کتابخونه ای کنار برنامه تون دارید باید اینجوری اینکلود کنید:


                  کد:
                  #include "glcd.h"
                  نه اینجوری:

                  کد:
                  #include <glcd.h>
                  3- بعد این چیه:

                  کد:
                  DATADDR=0XFF;
                  اگه اینو بخاطر کتابخونه مقدار دهی کردید، عجیبه! چرا اینجوری کردید؟
                  شما همه پورت A رو خروجی کن. اینجوری:


                  کد:
                  DDRA=0XFF;
                  و همچنین پورت B:

                  کد:
                  DDRB=0X37;
                  من به تابع شما برای خط کشیدن دقت نکردم. شما بجاش این تابع زیری رو بذار.

                  کد:
                  h_line(1,1,20,0,1)
                  ببینم چیکار میکنی. چه مثبت و چه منفی خبر بده.

                  دیدگاه


                    پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی



                    واقعا عالیه.... :applause: :wow:

                    دیدگاه


                      پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

                      سلام خسته نباشید
                      بنده یه ks 0108 دارم که با کتابخونه خود codevision میخوام باهاش کار کنم خط و متن رو خوب نشون میده ولی وقتی میخوام یه تصویر bmp که با glcd generator به کد تبدیلش کردم رو نمایش بدم چند خط اول رو درست نشون میده ولی بقیه اشو قاطی پاتی !!! تصویر ال سی دی و همینطور فایل پروتئوس و کدویژن رو میزارم شما یه نگاه بندازین متشکر میشم


                      http://uploadkon.ir/?file=TEST.zip

                      دیدگاه


                        پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

                        دوتا سیم داره برای انتخاب چیپ ال سی دی که اسمش رو دقیقا نمیدونم سیم هارو توی سخت افزار باهم عوض کنید
                        :agree:
                        فک کنم اسمش یکی از اینها باشه
                        s1 s2
                        s0 s1
                        d0 d1
                        مدت هاست نیستم

                        دیدگاه


                          پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

                          نوشته اصلی توسط abbasalifix
                          دوتا سیم داره برای انتخاب چیپ ال سی دی که اسمش رو دقیقا نمیدونم سیم هارو توی سخت افزار باهم عوض کنید
                          :agree:
                          فک کنم اسمش یکی از اینها باشه
                          s1 s2
                          s0 s1
                          d0 d1
                          نه دوست عزیز cs1 , cs2 برای کنترل دوقسمت 64*64 چپ و راست با هم هستن و ربطی به این ندارن ولی من با این حال عوضشون کردم و جای نیمه چپ با راست فقط عوض شد هیچ تغییری تو پایین ایجاد نشد
                          خودم حدس میزنم چند خط از تصویر نمایش داده میشه و چندتا رد میشه و چنتا دوباره نمایش میده و چنتا رد میشه و به پایین و آخر تصویر میرسه و بقیه تصویر رو به صورت رندومی پر میکنه !!!

                          دیدگاه


                            پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

                            با سلام مجدد

                            برای شبیه سازی عملکرد glcd در پروتئوس مشکل دارم...تصویر ها رو درست نشون نمیده...

                            اینجا در انجمن پروتئوس مشکلم رو مطرح کردم ولی تا حالا جواب نگرفتم...یه نگاهی بندازید لطفا:

                            http://www.eca.ir/forum2/index.php?topic=82767.0

                            مثلا در پروتئوس میخوام رو glcd یه دایره نمایش بدم ولی خیلی بهم ریخته نمایشش میده...یه کمکی بکنید.

                            دیدگاه


                              پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

                              تو پروتئوس رو السیدی دبل کلیک کنید و فرکانس کلاکش رو ببرید بالا
                              راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                              کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                              نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                              انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                              دیدگاه


                                پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی

                                نوشته اصلی توسط RubeuS
                                تو پروتئوس رو السیدی دبل کلیک کنید و فرکانس کلاکش رو ببرید بالا
                                اینکار رو قبلا کردم...الان کلاک رو روی 3MHZ گذاشتم....ولی فرقی نکرد. :sad:

                                دیدگاه

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