PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : راه اندازی lcd n96 در مد 8 بیتی



sajjad_AD
13-04-2012, 14:20
سلام :hi:
من ماژول LCD N96 ECA رو خریدم و سعی کردم در مد 8 بیتی راش بندازم ولی تا حالا که موفق نشدم.
یه هدر پیدا کردم که فکر کنم واسه Codvision AVR باشه :


// Remember that the LCD area goes from:
// X: 0-239
// Y: 0-319


#define LCD PORTA // Set the DB 0-7 to PORTA 0-7 (Pin 22-29)
#define LCD_RS 30
#define LCD_RS_LO digitalWrite(LCD_RS, LOW)
#define LCD_RS_HI digitalWrite(LCD_RS, HIGH)
#define LCD_CS 31
#define LCD_CS_LO digitalWrite(LCD_CS, LOW)
#define LCD_CS_HI digitalWrite(LCD_CS, HIGH)
#define LCD_WR 32
#define LCD_WR_LO digitalWrite(LCD_WR, LOW)
#define LCD_WR_HI digitalWrite(LCD_WR, HIGH)
#define LCD_RD 33
#define LCD_RD_LO digitalWrite(LCD_RD, LOW)
#define LCD_RD_HI digitalWrite(LCD_RD, HIGH)
#define LCD_RESET 34
#define LCD_RESET_LO digitalWrite(LCD_RESET, LOW)
#define LCD_RESET_HI digitalWrite(LCD_RESET, HIGH)
#define VERTICAL 0
#define HORIZONTAL 1
#define LCD_ALIGNMENT VERTICAL
//#define LCD_ALIGNMENT HORIZONTAL // Not finished yet!

//LCDDRIVER VARIABLER
//Color codes
#define RED 0xf800
#define GREEN 0x07e0
#define BLUE 0x001f
#define WHITE 0xffff
#define BLACK 0x0000
#define YELLOW 0xFFE0

const byte Verdana_font_11[] = {
0, // format
11, // fontHeight
9, // ascent
33, // from
95, // count
59, // totalWidth/8
0x00,0x01,0x00,0x04,0x00,0x0B,0x00,0x10,0x00,0x1A, 0x00,0x21,0x00,0x22,0x00,0x25,0x00,0x28,0x00,0x2D, 0x00,0x34,0x00,0x36,0x00,0x39,0x00,0x3A,0x00,0x3F, 0x00,0x44,0x00,0x49,0x00,0x4E,0x00,0x53,0x00,0x59, 0x00,0x5E,0x00,0x63,0x00,0x68,0x00,0x6D,0x00,0x72, 0x00,0x73,0x00,0x75,0x00,0x7B,0x00,0x82,0x00,0x88, 0x00,0x8C,0x00,0x94,0x00,0x9A,0x00,0xA0,0x00,0xA7, 0x00,0xAE,0x00,0xB3,0x00,0xB8,0x00,0xBF,0x00,0xC5, 0x00,0xC8,0x00,0xCC,0x00,0xD2,0x00,0xD7,0x00,0xDE, 0x00,0xE4,0x00,0xEB,0x00,0xF0,0x00,0xF7,0x00,0xFD, 0x01,0x03,0x01,0x0A,0x01,0x10,0x01,0x16,0x01,0x1F, 0x01,0x25,0x01,0x2C,0x01,0x32,0x01,0x35,0x01,0x3A, 0x01,0x3D,0x01,0x44,0x01,0x4B,0x01,0x4D,0x01,0x52, 0x01,0x57,0x01,0x5C,0x01,0x61,0x01,0x66,0x01,0x6A, 0x01,0x6F,0x01,0x74,0x01,0x75,0x01,0x78,0x01,0x7D, 0x01,0x7E,0x01,0x87,0x01,0x8C,0x01,0x91,0x01,0x96, 0x01,0x9B,0x01,0x9F,0x01,0xA3,0x01,0xA7,0x01,0xAC, 0x01,0xB1,0x01,0xB8,0x01,0xBD,0x01,0xC2,0x01,0xC6, 0x01,0xCB,0x01,0xCC,0x01,0xD1,0x01,0xD8,0x01,0xD8, // Col ends
0x50,0x04,0x00,0x00,0x4C,0x20,0x00,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x38, 0x00,0x10,0x20,0x00,0x80,0xC1,0x09,0x84,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00, // Line 0
0xD1,0x44,0x62,0x18,0x52,0xA8,0x00,0x02,0xE2,0x39, 0xC1,0x7C,0xDF,0x73,0x80,0x00,0x00,0xE3,0xE3,0x3C, 0x3D,0xF3,0xFF,0x3D,0x0F,0x78,0x61,0x8F,0x13,0x9E, 0x39,0xE3,0xDF,0xE1,0x86,0x23,0x0C,0x1F,0xE4,0x08, 0x80,0x08,0x20,0x00,0x81,0x01,0x00,0x84,0x00,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x92,0x00, // Line 1
0xD1,0x4F,0x92,0x24,0x52,0x70,0x80,0x05,0x1E,0x46, 0x23,0x41,0x01,0x8C,0x40,0x00,0x00,0x14,0x13,0x22, 0x43,0x0A,0x10,0x43,0x0A,0x18,0xA1,0x8F,0x14,0x51, 0x45,0x14,0x22,0x21,0x86,0x23,0x0A,0x20,0x62,0x09, 0x40,0x00,0x20,0x00,0x81,0x01,0x00,0x84,0x00,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x92,0x00, // Line 2
0x87,0xF4,0x94,0x24,0x21,0xA8,0x80,0x05,0x12,0x04, 0x25,0x42,0x02,0x8C,0x68,0x60,0x30,0x19,0xD4,0xA2, 0x81,0x06,0x10,0x81,0x0A,0x19,0x21,0x56,0x98,0x31, 0x83,0x14,0x02,0x21,0x85,0x54,0x91,0x40,0xA2,0x0A, 0x20,0x03,0xBC,0xE7,0xBB,0xDF,0xEB,0x8F,0xDD,0xE7, 0x79,0xF6,0xFF,0x18,0xC9,0x8C,0x7C,0x92,0x00, // Line 3
0x82,0x94,0x64,0x19,0x21,0x20,0x80,0x09,0x12,0x08, 0xC9,0x7B,0xC2,0x74,0x69,0x9F,0xCC,0x2A,0x54,0xBE, 0x81,0x07,0xFE,0x81,0xFA,0x1A,0x21,0x56,0x98,0x31, 0x83,0x13,0x02,0x21,0x49,0x54,0x60,0x81,0x21,0x0C, 0x10,0x00,0x63,0x18,0xC5,0x23,0x19,0x96,0x23,0x18, 0xC6,0x39,0x09,0x18,0xC9,0x52,0x84,0x92,0x31, // Line 4
0x82,0x8E,0x09,0xA5,0x21,0x07,0xF3,0x89,0x12,0x10, 0x31,0x06,0x24,0x8B,0xC6,0x00,0x03,0x4A,0x54,0xA1, 0x81,0x06,0x10,0x8F,0x0A,0x1E,0x21,0x26,0x58,0x3E, 0x83,0xE0,0xC2,0x21,0x49,0x54,0x60,0x82,0x21,0x08, 0x00,0x03,0xE3,0x08,0xFD,0x23,0x19,0xA6,0x23,0x18, 0xC6,0x31,0x89,0x15,0x55,0x22,0x8B,0x11,0xC9, // Line 5
0x8F,0xC5,0x0A,0x62,0x21,0x00,0x80,0x11,0x12,0x20, 0x3F,0x86,0x24,0x88,0x41,0x9F,0xCC,0x4A,0x5F,0xE1, 0x81,0x06,0x10,0x83,0x0A,0x19,0x21,0x26,0x58,0x30, 0x83,0x20,0x22,0x21,0x49,0x54,0x90,0x84,0x20,0x88, 0x00,0x04,0x63,0x08,0xC1,0x23,0x19,0xE6,0x23,0x18, 0xC6,0x30,0x69,0x15,0x55,0x22,0x90,0x92,0x46, // Line 6
0x05,0x05,0x12,0x63,0x21,0x00,0x84,0x51,0x12,0x42, 0x21,0x46,0x28,0x88,0xA8,0x60,0x30,0x09,0xA8,0x61, 0x43,0x0A,0x10,0x43,0x0A,0x18,0xA1,0x06,0x34,0x50, 0x45,0x14,0x22,0x21,0x30,0x89,0x08,0x88,0x20,0x88, 0x00,0x04,0x63,0x18,0xC5,0x23,0x19,0x96,0x23,0x18, 0xC6,0x30,0x29,0x12,0x22,0x51,0x20,0x92,0x00, // Line 7
0x85,0x1E,0x11,0x9C,0x92,0x00,0x84,0x60,0xEF,0xFD, 0xC1,0x39,0xC8,0x73,0x28,0x00,0x00,0x44,0x08,0x7E, 0x3D,0xF3,0xF0,0x3D,0x0F,0xE8,0x7F,0x06,0x33,0x90, 0x39,0x0B,0xC2,0x1E,0x30,0x89,0x08,0x8F,0xE0,0x48, 0x00,0x03,0xFC,0xE7,0xB9,0x1F,0x19,0x8E,0x23,0x17, 0x79,0xF1,0xC6,0xF2,0x22,0x89,0x3C,0x92,0x00, // Line 8
0x00,0x04,0x00,0x00,0x12,0x00,0x04,0x20,0x00,0x00, 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x03,0xC0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x48, 0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00, 0x40,0x20,0x00,0x00,0x00,0x01,0x00,0x92,0x00, // Line 9
0x00,0x04,0x00,0x00,0x0C,0x00,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38, 0x0F,0xE0,0x00,0x00,0x00,0x1C,0x06,0x00,0x00,0x00, 0x40,0x20,0x00,0x00,0x00,0x02,0x00,0x7C,0x00, // Line 10
};

#ifdef pgm_read_byte
#define FNT(_x) pgm_read_byte(Verdana_font_11 + (_x))
#else
#define FNT(_x) Verdana_font_11[_x]
#endif

unsigned int current_color = BLUE;

void setup() {
LCD_Init();

LCD_Clear(BLACK);

LCD_HorLine(0,239,20,YELLOW);
LCD_HorLine(0,239,30,RED);
LCD_HorLine(0,239,40,YELLOW);

LCD_HorLine(0,239,280,YELLOW);
LCD_HorLine(0,239,290,RED);
LCD_HorLine(0,239,300,YELLOW);

LCD_Rectangle(70,130,180,190,GREEN);
LCD_HorLine(70,180,130,RED);
LCD_HorLine(70,180,190,RED);
LCD_VerLine(130,190,70,RED);
LCD_VerLine(130,190,180,RED);
LCD_DrawString("Hello World", 98, 155, BLACK);

delay(5000);
LCD_Clear_ScrollUp(5, WHITE);

LCD_HorLine(0,239,20,RED);
LCD_HorLine(0,239,30,BLUE);
LCD_HorLine(0,239,40,RED);

LCD_HorLine(0,239,280,RED);
LCD_HorLine(0,239,290,BLUE);
LCD_HorLine(0,239,300,RED);

LCD_Rectangle(70,130,180,190,YELLOW);
LCD_HorLine(70,180,130,BLUE);
LCD_HorLine(70,180,190,BLUE);
LCD_VerLine(130,190,70,BLUE);
LCD_VerLine(130,190,180,BLUE);
LCD_DrawString("Hello World", 98, 155, BLACK);

delay(5000);
LCD_Clear_ScrollDown(5, BLUE);
}


void loop()
{
current_color = current_color + 0x732;
if (current_color+0x732 >= 0xFFFF) {
current_color = (current_color+0x732) - 0xFFFF;
}
LCD_Clear(current_color);
}

void LCD_WriteIndex(byte index)
{
// Write Index
LCD_RS_LO;
LCD = 0;
LCD_WR_LO;
LCD_WR_HI;
LCD = index;
LCD_WR_LO;
LCD_WR_HI;
}

void LCD_WriteData(unsigned int data)
{
// Write Data
LCD_RS_HI;
LCD = highByte(data);
LCD_WR_LO;
LCD_WR_HI;
LCD = lowByte(data);
LCD_WR_LO;
LCD_WR_HI;
LCD = 0;
}

void LCD_WriteReg(byte index, unsigned int data)
{
// Write Index
LCD_WriteIndex(index);

// Write Data
LCD_WriteData(data);
}

void LCD_Init()
{
pinMode(LCD_CS, OUTPUT); // Set LCD CS pin As Output
LCD_CS_HI; // Disable LCD
pinMode(LCD_RESET, OUTPUT); // Set reset pin As Output
LCD_RESET_LO; // Hold in reset
pinMode(LCD_RS, OUTPUT); // Set RS pin As Output
LCD_RS_LO;
pinMode(LCD_RD, OUTPUT); // Set RD pin As Output
LCD_RD_HI;
pinMode(LCD_WR, OUTPUT); // Set WR pin As Output
LCD_WR_HI;

DDRA = B11111111; // Set Data BUS As Output

// Reset controller
LCD_RESET_LO;
delay(2);
LCD_RESET_HI;
delay(2);

/*** Setup display For ILI9320 driver IC ***/
LCD_CS_LO; // Enable LCD
LCD_WriteReg(0xe5, 0x8000); //start osc
LCD_WriteReg(0x00, 0x0001);
delay(10);
LCD_WriteReg(0xa4, 0x0001); //calb
LCD_WriteReg(0x07, 0x0000); //display control(1)
delay(10);

/*** Display Setting ***/
LCD_WriteReg(0x01, 0x0100); //Driver output control (1)
LCD_WriteReg(0x02, 0x0700); //LCD driving control

// Check page 55 in the datasheet for more information about alignment
#if LCD_ALIGNMENT == VERTICAL
LCD_WriteReg(0x03, 0x1030); //Entry mode
#elif LCD_ALIGNMENT == HORIZONTAL
LCD_WriteReg(0x03, 0x1028); //Entry mode
#endif

LCD_WriteReg(0x04, 0x0000); //Resize control
LCD_WriteReg(0x08, 0x0202); //Display control (2)
LCD_WriteReg(0x09, 0x0000); //Display control (3)

/*** Power Control ***/
LCD_WriteReg(0x07, 0x0101); //power control 1 BT, AP
LCD_WriteReg(0x17, 0x0001);
LCD_WriteReg(0x10, 0x0000);
LCD_WriteReg(0x11, 0x0007); //power control 2 DC, VC
LCD_WriteReg(0x12, 0x0000); //power control 3 VRH
LCD_WriteReg(0x12, 0x0000); //power control 3 VRH
LCD_WriteReg(0x13, 0x0000); //power control 4 VCOM amplitude
delay(20);

LCD_WriteReg(0x10, 0x16B0); //power control 1 BT,AP
LCD_WriteReg(0x11, 0x0037); //power control 2 DC,VC
delay(50);
LCD_WriteReg(0x12, 0x013E); //power control 3 VRH
delay(50);
LCD_WriteReg(0x13, 0x1A00); //power control 4 vcom amplitude
LCD_WriteReg(0x29, 0x000F); //power control 7 VCOMH
delay(50);
LCD_WriteReg(0x20, 0x0000); //Horizontal GRAM Address Set
LCD_WriteReg(0x21, 0x0000); //Vertical GRAM Address Set

LCD_WriteReg(0x50, 0x0000); //Horizontal Address Start Position
LCD_WriteReg(0x51, 0x00EF); //Horizontal Address end Position (239)
LCD_WriteReg(0x52, 0x0000); //Vertical Address Start Position
LCD_WriteReg(0x53, 0x013F); //Vertical Address end Position (319)


LCD_WriteReg(0x60, 0x2700); //Driver Output Control 2
// LCD_WriteReg(0x61, 0x0001); //Base Image Display Control
LCD_WriteReg(0x61, 0x0003); //Base Image Display Control
LCD_WriteReg(0x6a, 0x0000); //Base Image Display Control

LCD_WriteReg(0x90, 0x0010); //Panel Interface Control 1
LCD_WriteReg(0x92, 0x0000); //Panel Interface Control 2
LCD_WriteReg(0x93, 0x0000); //Panel Interface Control 3

/*** GAMMA Control ***/
LCD_WriteReg(0x30, 0x0007);
LCD_WriteReg(0x31, 0x0403);
LCD_WriteReg(0x32, 0x0404);
LCD_WriteReg(0x35, 0x0002);
LCD_WriteReg(0x36, 0x0707);
LCD_WriteReg(0x37, 0x0606);
LCD_WriteReg(0x38, 0x0106);
LCD_WriteReg(0x39, 0x0007);
LCD_WriteReg(0x3c, 0x0700);
LCD_WriteReg(0x3d, 0x0707);

LCD_WriteReg(0x07, 0x0173);

LCD_CS_HI;

delay(30);
LCD_CS_LO;
}

void LCD_SetCursor(unsigned int x, unsigned int y)
{
if (x < 240 && y < 320) {
#if LCD_ALIGNMENT == VERTICAL
LCD_WriteReg(0x20, x);
LCD_WriteReg(0x21, y);
#elif LCD_ALIGNMENT == HORIZONTAL
LCD_WriteReg(0x20, 240-y);
LCD_WriteReg(0x21, x);
#endif
}
}

void LCD_Clear(unsigned int color)
{
LCD_SetCursor(0,0);
/*LCD_WriteIndex(0x22);
for (long i=0; i <= 76799; i++){
LCD_WriteData(color);
}
*/
LCD_SolidFill(76800, color); // This is a faster method
}

void LCD_ResetWindow()
{
LCD_WriteReg(0x50, 0x0000); //Horizontal Address Start Position
LCD_WriteReg(0x51, 0x00EF); //Horizontal Address end Position (239)
LCD_WriteReg(0x52, 0x0000); //Vertical Address Start Position
LCD_WriteReg(0x53, 0x013F); //Vertical Address end Position (319)
}

void LCD_PutPixel(byte x, unsigned int y, unsigned int color)
{
LCD_SetCursor(x,y);
LCD_WriteIndex(0x22);
LCD_WriteData(color);
}

void LCD_HorLine(byte x1, byte x2, unsigned int y, unsigned int color)
{
if (x1 < 240 && x2 < 240 && y < 320) {
LCD_SetCursor(x1,y);
/*LCD_WriteIndex(0x22);
for (byte i=x1; i < x2; i++){
LCD_WriteData(color);
}
*/
LCD_SolidFill((x2-x1), color); // This is a faster method
}
}

void LCD_VerLine(unsigned int y1, unsigned int y2, byte x, unsigned int color)
{
LCD_SetCursor(x,y1);
LCD_SetWindow(x,y1,x,y2);
/*LCD_WriteIndex(0x22);
for (byte i=x1; i < x2; i++){
LCD_WriteData(color);
}
*/
LCD_SolidFill((y2-y1), color); // This is a faster method
LCD_ResetWindow();
}

void LCD_HardwareScroll(int y)
{
while (y < 0)
y += 320;
while (y >= 320)
y -= 320;
LCD_WriteReg(0x6a,y);
}

void LCD_Clear_ScrollUp(byte delay_between, unsigned int color)
{
for (int i=1; i <= 320; i++) {
LCD_HardwareScroll(i);
LCD_HorLine(0,239,i-1,color);
delay(delay_between);
}
LCD_HardwareScroll(0);
}

void LCD_Clear_ScrollDown(byte delay_between, unsigned int color)
{
for (int i=-1; i >= -320; i--) {
LCD_HorLine(0,239,320+i,color);
LCD_HardwareScroll(i);
delay(delay_between);
}
LCD_HardwareScroll(0);
}

int LCD_DrawChar(byte xx, unsigned int yy, int c, unsigned int color)
{
//byte* f = Verdana_font_11;
if (c == 32)
return FNT(1)>>2; // Space is 1/4 font height (yuk);

int i = c - FNT(3);
if (i < 0 || i >= FNT(4)) return 0;

int ci = 6 + i * 2;
int width = (FNT(ci) << 8) | FNT(ci + 1); // simplify
int height = FNT(1);
int src = 0;
if (i > 0)
{
src = (FNT(ci - 2) << 8) | FNT(ci - 1);
width -= src;
}

// clip?
src += (6 + 2 * FNT(4)) * 8; // start of pixels (roll into cols)
byte mask = 0x80 >> (src & 7); // Mask at start of line
int end = (src+width) >> 3; // number of bytes read
src >>= 3;
int makeup = FNT(5) - (end + 1 - src);
for (byte y = 0; y < (byte)height; y++)
{
byte p = FNT(src++);
byte m = mask;
for (byte x = 0; x < (byte)width; x++)
{
if (p & m)
LCD_PutPixel(x + xx, y + yy, color);
m >>= 1;
if (m == 0)
{
p = FNT(src++);
if (p == 0 && (width-x) <= 8) // early out
break;
m = 0x80;
}
}
src += makeup;
}
return width;
}

void LCD_DrawString2(const char* s, int len, byte x, unsigned int y, unsigned int color)
{
for (int i = 0; i < len; i++)
x += LCD_DrawChar(x,y,s[i], color) + 1;
}

void LCD_DrawString(const char* s, byte x, unsigned int y, unsigned int color)
{
LCD_DrawString2(s,strlen(s),x,y, color);
}

void LCD_SetWindow(byte x1, unsigned int y1, byte x2, unsigned int y2)
{
#if LCD_ALIGNMENT == VERTICAL
LCD_WriteReg(0x50, x1); //Horizontal Address Start Position
LCD_WriteReg(0x51, x2); //Horizontal Address end Position (239)
LCD_WriteReg(0x52, y1); //Vertical Address Start Position
LCD_WriteReg(0x53, y2);//Vertical Address end Position (319)
#elif LCD_ALIGNMENT == HORIZONTAL
#error "Windows Clearing in Horizontal mode is not possible yet!"
#endif
}

void LCD_Rectangle(byte x1, unsigned int y1, byte x2, unsigned int y2, int color)
{
LCD_SetWindow(x1,y1,x2,y2);
LCD_SetCursor(x1,y1);

byte width = x2-x1+1;
unsigned int height = y2-y1+1;
LCD_SolidFill(width*height, color);
LCD_ResetWindow();
}

void LCD_SolidFill(unsigned long count, unsigned int color)
{
// Write Index
LCD_WriteIndex(0x22);

// Write Data
LCD_RS_HI;
LCD = highByte(color);
LCD_WR_LO;
LCD_WR_HI;
LCD = lowByte(color);
LCD_WR_LO;
LCD_WR_HI;
LCD = 0;

for (unsigned long i=0; i <= count-1; i++){
// Write Data
LCD = highByte(color);
LCD_WR_LO;
LCD_WR_HI;
LCD = lowByte(color);
LCD_WR_LO;
LCD_WR_HI;
}
}
با کمی تغییرات با MikroC PIC سازگارش کردم :



#include <built_in.h>

#define LCD PORTB // Set the DB 0-7 to PORTA 0-7 (Pin 22-29)

#define LCD_RS PORTA.F2
#define LCD_CS PORTA.F3
#define LCD_WR PORTA.F1
#define LCD_RD PORTA.F0
#define LCD_RESET PORTA.F4

#define LCD_RS_LO LCD_RS = 0
#define LCD_RS_HI LCD_RS = 1

#define LCD_CS_LO LCD_CS = 0
#define LCD_CS_HI LCD_CS = 1

#define LCD_WR_LO LCD_WR = 0
#define LCD_WR_HI LCD_WR = 1

#define LCD_RD_LO LCD_RD = 0
#define LCD_RD_HI LCD_RD = 1

#define LCD_RESET_LO LCD_RESET = 0
#define LCD_RESET_HI LCD_RESET = 1

#define VERTICAL 0
#define HORIZONTAL 1

#define LCD_ALIGNMENT VERTICAL
//#define LCD_ALIGNMENT HORIZONTAL

//LCDDRIVER VARIABLER
//Color codes
#define RED 0xf800
#define GREEN 0x07e0
#define BLUE 0x001f
#define WHITE 0xffff
#define BLACK 0x0000
#define YELLOW 0xFFE0

const unsigned char Verdana_font_11[] = {
0, // format
11, // fontHeight
9, // ascent
33, // from
95, // count
59, // totalWidth/8
0x00,0x01,0x00,0x04,0x00,0x0B,0x00,0x10,0x00,0x1A, 0x00,0x21,0x00,0x22,0x00,0x25,0x00,0x28,0x00,0x2D, 0x00,0x34,0x00,0x36,0x00,0x39,0x00,0x3A,0x00,0x3F, 0x00,0x44,0x00,0x49,0x00,0x4E,0x00,0x53,0x00,0x59, 0x00,0x5E,0x00,0x63,0x00,0x68,0x00,0x6D,0x00,0x72, 0x00,0x73,0x00,0x75,0x00,0x7B,0x00,0x82,0x00,0x88, 0x00,0x8C,0x00,0x94,0x00,0x9A,0x00,0xA0,0x00,0xA7, 0x00,0xAE,0x00,0xB3,0x00,0xB8,0x00,0xBF,0x00,0xC5, 0x00,0xC8,0x00,0xCC,0x00,0xD2,0x00,0xD7,0x00,0xDE, 0x00,0xE4,0x00,0xEB,0x00,0xF0,0x00,0xF7,0x00,0xFD, 0x01,0x03,0x01,0x0A,0x01,0x10,0x01,0x16,0x01,0x1F, 0x01,0x25,0x01,0x2C,0x01,0x32,0x01,0x35,0x01,0x3A, 0x01,0x3D,0x01,0x44,0x01,0x4B,0x01,0x4D,0x01,0x52, 0x01,0x57,0x01,0x5C,0x01,0x61,0x01,0x66,0x01,0x6A, 0x01,0x6F,0x01,0x74,0x01,0x75,0x01,0x78,0x01,0x7D, 0x01,0x7E,0x01,0x87,0x01,0x8C,0x01,0x91,0x01,0x96, 0x01,0x9B,0x01,0x9F,0x01,0xA3,0x01,0xA7,0x01,0xAC, 0x01,0xB1,0x01,0xB8,0x01,0xBD,0x01,0xC2,0x01,0xC6, 0x01,0xCB,0x01,0xCC,0x01,0xD1,0x01,0xD8,0x01,0xD8, // Col ends
0x50,0x04,0x00,0x00,0x4C,0x20,0x00,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x38, 0x00,0x10,0x20,0x00,0x80,0xC1,0x09,0x84,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00, // Line 0
0xD1,0x44,0x62,0x18,0x52,0xA8,0x00,0x02,0xE2,0x39, 0xC1,0x7C,0xDF,0x73,0x80,0x00,0x00,0xE3,0xE3,0x3C, 0x3D,0xF3,0xFF,0x3D,0x0F,0x78,0x61,0x8F,0x13,0x9E, 0x39,0xE3,0xDF,0xE1,0x86,0x23,0x0C,0x1F,0xE4,0x08, 0x80,0x08,0x20,0x00,0x81,0x01,0x00,0x84,0x00,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x92,0x00, // Line 1
0xD1,0x4F,0x92,0x24,0x52,0x70,0x80,0x05,0x1E,0x46, 0x23,0x41,0x01,0x8C,0x40,0x00,0x00,0x14,0x13,0x22, 0x43,0x0A,0x10,0x43,0x0A,0x18,0xA1,0x8F,0x14,0x51, 0x45,0x14,0x22,0x21,0x86,0x23,0x0A,0x20,0x62,0x09, 0x40,0x00,0x20,0x00,0x81,0x01,0x00,0x84,0x00,0x00, 0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x92,0x00, // Line 2
0x87,0xF4,0x94,0x24,0x21,0xA8,0x80,0x05,0x12,0x04, 0x25,0x42,0x02,0x8C,0x68,0x60,0x30,0x19,0xD4,0xA2, 0x81,0x06,0x10,0x81,0x0A,0x19,0x21,0x56,0x98,0x31, 0x83,0x14,0x02,0x21,0x85,0x54,0x91,0x40,0xA2,0x0A, 0x20,0x03,0xBC,0xE7,0xBB,0xDF,0xEB,0x8F,0xDD,0xE7, 0x79,0xF6,0xFF,0x18,0xC9,0x8C,0x7C,0x92,0x00, // Line 3
0x82,0x94,0x64,0x19,0x21,0x20,0x80,0x09,0x12,0x08, 0xC9,0x7B,0xC2,0x74,0x69,0x9F,0xCC,0x2A,0x54,0xBE, 0x81,0x07,0xFE,0x81,0xFA,0x1A,0x21,0x56,0x98,0x31, 0x83,0x13,0x02,0x21,0x49,0x54,0x60,0x81,0x21,0x0C, 0x10,0x00,0x63,0x18,0xC5,0x23,0x19,0x96,0x23,0x18, 0xC6,0x39,0x09,0x18,0xC9,0x52,0x84,0x92,0x31, // Line 4
0x82,0x8E,0x09,0xA5,0x21,0x07,0xF3,0x89,0x12,0x10, 0x31,0x06,0x24,0x8B,0xC6,0x00,0x03,0x4A,0x54,0xA1, 0x81,0x06,0x10,0x8F,0x0A,0x1E,0x21,0x26,0x58,0x3E, 0x83,0xE0,0xC2,0x21,0x49,0x54,0x60,0x82,0x21,0x08, 0x00,0x03,0xE3,0x08,0xFD,0x23,0x19,0xA6,0x23,0x18, 0xC6,0x31,0x89,0x15,0x55,0x22,0x8B,0x11,0xC9, // Line 5
0x8F,0xC5,0x0A,0x62,0x21,0x00,0x80,0x11,0x12,0x20, 0x3F,0x86,0x24,0x88,0x41,0x9F,0xCC,0x4A,0x5F,0xE1, 0x81,0x06,0x10,0x83,0x0A,0x19,0x21,0x26,0x58,0x30, 0x83,0x20,0x22,0x21,0x49,0x54,0x90,0x84,0x20,0x88, 0x00,0x04,0x63,0x08,0xC1,0x23,0x19,0xE6,0x23,0x18, 0xC6,0x30,0x69,0x15,0x55,0x22,0x90,0x92,0x46, // Line 6
0x05,0x05,0x12,0x63,0x21,0x00,0x84,0x51,0x12,0x42, 0x21,0x46,0x28,0x88,0xA8,0x60,0x30,0x09,0xA8,0x61, 0x43,0x0A,0x10,0x43,0x0A,0x18,0xA1,0x06,0x34,0x50, 0x45,0x14,0x22,0x21,0x30,0x89,0x08,0x88,0x20,0x88, 0x00,0x04,0x63,0x18,0xC5,0x23,0x19,0x96,0x23,0x18, 0xC6,0x30,0x29,0x12,0x22,0x51,0x20,0x92,0x00, // Line 7
0x85,0x1E,0x11,0x9C,0x92,0x00,0x84,0x60,0xEF,0xFD, 0xC1,0x39,0xC8,0x73,0x28,0x00,0x00,0x44,0x08,0x7E, 0x3D,0xF3,0xF0,0x3D,0x0F,0xE8,0x7F,0x06,0x33,0x90, 0x39,0x0B,0xC2,0x1E,0x30,0x89,0x08,0x8F,0xE0,0x48, 0x00,0x03,0xFC,0xE7,0xB9,0x1F,0x19,0x8E,0x23,0x17, 0x79,0xF1,0xC6,0xF2,0x22,0x89,0x3C,0x92,0x00, // Line 8
0x00,0x04,0x00,0x00,0x12,0x00,0x04,0x20,0x00,0x00, 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x03,0xC0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x48, 0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00, 0x40,0x20,0x00,0x00,0x00,0x01,0x00,0x92,0x00, // Line 9
0x00,0x04,0x00,0x00,0x0C,0x00,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38, 0x0F,0xE0,0x00,0x00,0x00,0x1C,0x06,0x00,0x00,0x00, 0x40,0x20,0x00,0x00,0x00,0x02,0x00,0x7C,0x00, // Line 10
};

#ifdef pgm_read_byte
#define FNT(_x) pgm_read_byte(Verdana_font_11 + (_x))
#else
#define FNT(_x) Verdana_font_11[_x]
#endif

unsigned int current_color = BLUE;

void LCD_WriteIndex(unsigned char TFT_Index) {

LCD_RS_LO;
LCD = 0;
LCD_WR_LO;
LCD_WR_HI;
LCD = TFT_Index;
LCD_WR_LO;
LCD_WR_HI;
}

void LCD_WriteData(unsigned int TFT_Data) {

LCD_RS_HI;
LCD = Lo(TFT_Data);
LCD_WR_LO;
LCD_WR_HI;
LCD = Hi(TFT_Data);
LCD_WR_LO;
LCD_WR_HI;
LCD = 0;
}

void LCD_WriteReg(unsigned char TFT_Index, unsigned int TFT_Data) {

LCD_WriteIndex(TFT_Index);
LCD_WriteData(TFT_Data);
}

void LCD_SetCursor(unsigned int TFT_X, unsigned int TFT_Y) {

if (TFT_X < 240 && TFT_Y < 320) {

#if LCD_ALIGNMENT == VERTICAL
LCD_WriteReg(0x20, TFT_X);
LCD_WriteReg(0x21, TFT_Y);
#elif LCD_ALIGNMENT == HORIZONTAL
LCD_WriteReg(0x20, 240-TFT_Y);
LCD_WriteReg(0x21, TFT_X);
#endif
}
}

void LCD_SolidFill(unsigned long TFT_Count, unsigned int TFT_Color) {

unsigned long TFT_Ring;

LCD_WriteIndex(0x22);

LCD_RS_HI;
LCD = Hi(TFT_Color);
LCD_WR_LO;
LCD_WR_HI;
LCD = Lo(TFT_Color);
LCD_WR_LO;
LCD_WR_HI;
LCD = 0;

for(TFT_Ring=0;TFT_Ring<TFT_Count;TFT_Ring++){

LCD = Hi(TFT_Color);
LCD_WR_LO;
LCD_WR_HI;
LCD = Lo(TFT_Color);
LCD_WR_LO;
LCD_WR_HI;
}
}

void LCD_HorLine(unsigned char TFT_X1, unsigned char TFT_X2, unsigned int TFT_Y, unsigned int TFT_Color) {

if (TFT_X1 < 240 && TFT_X2 < 240 && TFT_Y < 320) {

LCD_SetCursor(TFT_X1,TFT_Y);
/*LCD_WriteIndex(0x22);
for (byte i=x1; i < x2; i++){
LCD_WriteData(color);
}
*/
LCD_SolidFill((TFT_X2-TFT_X1),TFT_Color); // This is a faster method
}
}

void LCD_SetWindow(unsigned char TFT_X1, unsigned int TFT_Y1, unsigned char TFT_X2, unsigned int TFT_Y2) {

#if LCD_ALIGNMENT == VERTICAL
LCD_WriteReg(0x50, TFT_X1); //Horizontal Address Start Position
LCD_WriteReg(0x51, TFT_X2); //Horizontal Address end Position (239)
LCD_WriteReg(0x52, TFT_Y1); //Vertical Address Start Position
LCD_WriteReg(0x53, TFT_Y2);//Vertical Address end Position (319)
#elif LCD_ALIGNMENT == HORIZONTAL
#error "Windows Clearing in Horizontal mode is not possible yet!"
#endif
}

void LCD_ResetWindow() {

LCD_WriteReg(0x50, 0x0000); //Horizontal Address Start Position
LCD_WriteReg(0x51, 0x00EF); //Horizontal Address end Position (239)
LCD_WriteReg(0x52, 0x0000); //Vertical Address Start Position
LCD_WriteReg(0x53, 0x013F); //Vertical Address end Position (319)
}

void LCD_VerLine(unsigned int TFT_Y1, unsigned int TFT_Y2,unsigned char TFT_X, unsigned int TFT_Color) {
LCD_SetCursor(TFT_X,TFT_Y1);
LCD_SetWindow(TFT_X,TFT_Y1,TFT_X,TFT_Y2);
/*LCD_WriteIndex(0x22);
for (byte i=x1; i < x2; i++){
LCD_WriteData(color);
}
*/
LCD_SolidFill((TFT_Y2-TFT_Y1),TFT_Color); // This is a faster method
LCD_ResetWindow();
}

void LCD_Clear(unsigned int TFT_Color) {

LCD_SetCursor(0,0);

/*LCD_WriteIndex(0x22);
for (long i=0; i <= 76799; i++){
LCD_WriteData(color);
}
*/
LCD_SolidFill(76800, TFT_Color); // This is a faster method
}

void LCD_Rectangle(unsigned char TFT_X1, unsigned int TFT_Y1,unsigned char TFT_X2, unsigned int TFT_Y2,unsigned int TFT_Color) {

unsigned char TFT_Width;
unsigned int TFT_Height;

TFT_Width = TFT_X2-TFT_X1+1;
TFT_Height = TFT_Y2-TFT_Y1+1;

LCD_SetWindow(TFT_X1,TFT_Y1,TFT_X2,TFT_Y2);
LCD_SetCursor(TFT_X1,TFT_Y1);

LCD_SolidFill(TFT_Width*TFT_Height, TFT_Color);
LCD_ResetWindow();
}

void LCD_PutPixel(unsigned char TFT_X,unsigned int TFT_Y,unsigned int TFT_Color) {

LCD_SetCursor(TFT_X,TFT_Y);
LCD_WriteIndex(0x22);
LCD_WriteData(TFT_Color);
}

void LCD_HardwareScroll(int y) {

while (y < 0) y += 320;
while (y >= 320) y -= 320;
LCD_WriteReg(0x6a,y);
}

void LCD_Clear_ScrollUp(unsigned char TFT_Delay_Between,unsigned int TFT_Color) {

int TFT_Ring;

for (TFT_Ring=1;TFT_Ring<=320;TFT_Ring++) {

LCD_HardwareScroll(TFT_Ring);
LCD_HorLine(0,239,TFT_Ring-1,TFT_Color);

vdelay_ms(TFT_Delay_Between);
}
LCD_HardwareScroll(0);
}

void loop() {

current_color = current_color + 0x732;
if (current_color+0x732 >= 0xFFFF) current_color = (current_color+0x732) - 0xFFFF;
LCD_Clear(current_color);
}

void TFT_LCD_Init() {

TRISB = 0x00;

TRISA.F0 = 0;
TRISA.F1 = 0;
TRISA.F2 = 0;
TRISA.F3 = 0;
TRISA.F4 = 0;

LCD_CS_HI;
LCD_RESET_LO;
LCD_RS_LO;
LCD_RD_HI;
LCD_WR_HI;

// Reset controller
LCD_RESET_LO;
delay_ms(2);
LCD_RESET_HI;
delay_ms(2);

/*** Setup display For ILI9320 driver IC ***/
LCD_CS_LO; // Enable LCD
LCD_WriteReg(0xe5, 0x8000); //start osc
LCD_WriteReg(0x00, 0x0001);
delay_ms(10);
LCD_WriteReg(0xa4, 0x0001); //calb
LCD_WriteReg(0x07, 0x0000); //display control(1)
delay_ms(10);

/*** Display Setting ***/
LCD_WriteReg(0x01, 0x0100); //Driver output control (1)
LCD_WriteReg(0x02, 0x0700); //LCD driving control

// Check page 55 in the datasheet for more information about alignment
#if LCD_ALIGNMENT == VERTICAL
LCD_WriteReg(0x03, 0x1030); //Entry mode
#elif LCD_ALIGNMENT == HORIZONTAL
LCD_WriteReg(0x03, 0x1028); //Entry mode
#endif

LCD_WriteReg(0x04, 0x0000); //Resize control
LCD_WriteReg(0x08, 0x0202); //Display control (2)
LCD_WriteReg(0x09, 0x0000); //Display control (3)

/*** Power Control ***/
LCD_WriteReg(0x07, 0x0101); //power control 1 BT, AP
LCD_WriteReg(0x17, 0x0001);
LCD_WriteReg(0x10, 0x0000);
LCD_WriteReg(0x11, 0x0007); //power control 2 DC, VC
LCD_WriteReg(0x12, 0x0000); //power control 3 VRH
LCD_WriteReg(0x12, 0x0000); //power control 3 VRH
LCD_WriteReg(0x13, 0x0000); //power control 4 VCOM amplitude
delay_ms(20);

LCD_WriteReg(0x10, 0x16B0); //power control 1 BT,AP
LCD_WriteReg(0x11, 0x0037); //power control 2 DC,VC
delay_ms(50);
LCD_WriteReg(0x12, 0x013E); //power control 3 VRH
delay_ms(50);
LCD_WriteReg(0x13, 0x1A00); //power control 4 vcom amplitude
LCD_WriteReg(0x29, 0x000F); //power control 7 VCOMH
delay_ms(50);
LCD_WriteReg(0x20, 0x0000); //Horizontal GRAM Address Set
LCD_WriteReg(0x21, 0x0000); //Vertical GRAM Address Set

LCD_WriteReg(0x50, 0x0000); //Horizontal Address Start Position
LCD_WriteReg(0x51, 0x00EF); //Horizontal Address end Position (239)
LCD_WriteReg(0x52, 0x0000); //Vertical Address Start Position
LCD_WriteReg(0x53, 0x013F); //Vertical Address end Position (319)


LCD_WriteReg(0x60, 0x2700); //Driver Output Control 2
// LCD_WriteReg(0x61, 0x0001); //Base Image Display Control
LCD_WriteReg(0x61, 0x0003); //Base Image Display Control
LCD_WriteReg(0x6a, 0x0000); //Base Image Display Control

LCD_WriteReg(0x90, 0x0010); //Panel Interface Control 1
LCD_WriteReg(0x92, 0x0000); //Panel Interface Control 2
LCD_WriteReg(0x93, 0x0000); //Panel Interface Control 3

/*** GAMMA Control ***/
LCD_WriteReg(0x30, 0x0007);
LCD_WriteReg(0x31, 0x0403);
LCD_WriteReg(0x32, 0x0404);
LCD_WriteReg(0x35, 0x0002);
LCD_WriteReg(0x36, 0x0707);
LCD_WriteReg(0x37, 0x0606);
LCD_WriteReg(0x38, 0x0106);
LCD_WriteReg(0x39, 0x0007);
LCD_WriteReg(0x3c, 0x0700);
LCD_WriteReg(0x3d, 0x0707);

LCD_WriteReg(0x07, 0x0173);

LCD_CS_HI;

delay_ms(30);
LCD_CS_LO;
}

void LCD_Clear_ScrollDown(unsigned char TFT_Delay_Between,unsigned int TFT_Color) {

signed int TFT_Ring;

for (TFT_Ring=-1;TFT_Ring>=-320;TFT_Ring--) {

LCD_HorLine(0,239,320+TFT_Ring,TFT_Color);
LCD_HardwareScroll(TFT_Ring);
vdelay_ms(TFT_Delay_Between);
}
LCD_HardwareScroll(0);
}

void main() {

delay_ms(1000);
TFT_LCD_Init();

while(1) {

delay_ms(100);

LCD_PutPixel(100,100,2000);
LCD_PutPixel(200,100,1000);
LCD_PutPixel(100,200,200);
LCD_PutPixel(50,50,20);
}
}اینم شماتیک :

You can see links before reply



فکر نکنم مشکلی داشته باشه ولی کار نمی کنه :unh:
کسی میدونه مشکل چیه؟کسی یه هدر واسه راه اندازی این LCD تو مد 8 بیتی داره؟
فرقی نمی کنه واسه چه میکرویی باشه ولی حتما به زبون C باشه و خودتون راش انداخته باشین
پیشا پیش از هر همه تون ممنونم

sigma-mx
13-04-2012, 14:30
سلام مهندس . اتفاقا منم دنبال راه اندازی در مد 8 بیتی هستم . ولی تا حالا چیزی پیدا نکردم . فقط یه مثال اومده بود از یه لچ 573 استفاده کرده بود . یعنی سخت افزاری 8 رو به 16 تبدیل کرده بود .
ضمنا مندس حواست باشه میکرویی که استفاده کردی 5 ولته و السیدی 3.3 و تا 4 ولت تحمل داره ! نسوزونی السیدی رو ! اگرم راه بیوفته با این میکرو سرعتش خنده داره !! :0013:

sajjad_AD
13-04-2012, 14:37
ضمنا مندس حواست باشه میکرویی که استفاده کردی 5 ولته و السیدی 3.3 و تا 4 ولت تحمل داره ! نسوزونی السیدی رو !
سلام دوست من,ممنون از پاسخت,نه دیگه نسوزونی چیه؟!!!همه رو به 3.3 وصل کردم


اگرم راه بیوفته با این میکرو سرعتش خنده داره !! :0013:

فعلا که آزمایشیه


فقط یه مثال اومده بود از یه لچ 573 استفاده کرده بود . یعنی سخت افزاری 8 رو به 16 تبدیل کرده بود .

از این پچل بازیا خوشم نمیاد

sigma-mx
13-04-2012, 14:47
نه دیگه نسوزونی چیه؟!!!همه رو به 3.3 وصل کردم
مهندس جان دست من و تو نیست که ! به 3.3 وصل کردم دیگه چیه ! میکرو 5 ولتیه با 3.3 کار نمی کنه . اگه میخوای بهش 3.3 بدی باید از سری l یعنی 16lf84a استفاده کنی که سری l پیک تو ایران نیست !!!!
سری معمولی یا 5 ولت پیک از 4.2 ولت پایین تر بدی کار نمی کنه دیگه !!!

sajjad_AD
13-04-2012, 14:52
نه مهندس میکرو کار می کنه.
امتحانش کردم که میگم...
صفحه ی 3 دیتاشیتش هم که یه نگا بندازی رنج ولتاژ کاریشو از 2 تا 5.5 ولت درج کرده :wink:

sigma-mx
13-04-2012, 15:07
مهندس جان تمام pic ها تغذیشون از 2 تا 5.5 هست . منتها برای مدل های معمولی تا 4.2 کار میکنه و اگه بخوای از اون پایین تر بیای باید از حالت اسیلاتور توان پایین استفاده کنی . که فرکانسش در محدوده کیلو هرتره ! یا اینکه میکروت نوع L باشه . اینارو نگاه کن :


You can see links before reply

sajjad_AD
13-04-2012, 15:29
ممنون از راه نمایی هاتون ولی میکرو داره کار میکنه!!! بازم واسه اطمینان خاطر از صحت عملکرد میزنم به 5v و خروجی هاشو با مقاومت 3.3 میکنم اینجوری خوبه؟

sajjad_AD
13-04-2012, 15:43
از 18F452 استفاده کنم چی؟اخه تو دیتاشیتش محدوده ی ولتاژ رو نوشته ولی حداکثر فرکانسو طبق عکس ننوشته :

You can see links before reply

اینم مال 16F84 :

You can see links before reply

sigma-mx
13-04-2012, 15:50
ولی واسه اطمینان خاطر از صحت عملکرد میزنم به 5v و خروجی هاشو با مقاومت 3.3 میکنم اینجوری خوبه؟
آره این راه درسته .


از 18F452 استفاده کنم چی؟اخه تو دیتاشیتش محدوده ی ولتاژ رو نوشته ولی حداکثر فرکانسو طبق عکس ننوشته :
همشون مثل همن . اگه میخوای حتما با pic کار کنی یه شماره میکرو بهت معرفی کنم که هم 3.3 ولته و هم طراحی جدیده و هم فضای کدش بالاست . قیمتشم 5500 هست .

sajjad_AD
13-04-2012, 15:54
چرا که نه سیفوی من خب بگو دیگه :018:

sigma-mx
13-04-2012, 15:57
نمیگم :018:

18f26k20 . میکروی توپپیه با وجود قیمتش . برو دیتاشیتشو ببین . جوان هم داره .

sajjad_AD
13-04-2012, 16:06
پس من چند روز دیگه نتیجه رو همینجا میگم

sajjad_AD
14-04-2012, 00:00
الان دارم روش با PIC18F452 به همون روشی که گفتم کار می کنم ولی هنوز جواب نگرفتم,کسی در مورد هدری که گذاشتم نظری نداره؟
بازم از آقا سعید ممنونم و امیدوارم که منو بخاطر حرفایی که از روی بی سوادی زدم بخشیده باشی :hi:

sigma-mx
14-04-2012, 00:18
مهندس این حرفا چیه :hi:
یه نکته رو امروز یادم رفت بهت بگم راستی ... اگه از برد السیدی eca استفاده میکنی . حواست به پایه IM0 باشه . حتما در مورد السیدی اینو میدونی که برای کار در مد 8 بیتی باید پایه IM0 السیدی رو 1 کنی ! و نمی دونم درباره موضوع اون سه تا مقاومت روی السیدی و اینکه نعیین کننده نوع باس هستند چیزی شنیدی یا نه !
این رو گفتم چون پایه IM0 رو برد eca مثل اینکه کار نمی کنه !!! و باید السیدی رو از برد جدا کنی و یه تغییرات کوچیک توش بدی تا این پایه تازه عملکردش فعال بشه ...

sajjad_AD
14-04-2012, 00:28
:xبیشتر توضیح بده ینی چی که کار نمی کنه من فکر می کردم که IM1 و IM2 رو جوری وصل کردن که کار راحت بشه و فقط با 1 و یا 0 کردن IM0,مد 8 یا 16 رو انتخاب کنیم

sigma-mx
14-04-2012, 00:48
والا چی بگم . دیروز که تو مد 16 بیتی وصلش کردم گفتم بیام اینو تست کنم که اگه به پایه im0 یک بدم نباید کار کنه ( چون تو مد 8 بیت میره ) ولی همون طور که فکر می کردم . هیچ تغییری نکرد !!
تو قسمت فروش این السیدی هم تو eca نوشته که تو حالت 16 بیت تنظیم شده و تغییر دادن این حالت به کاربر واگذار شده !!!
من هرکاری کردم السیدی از جاش در نیومد . ترسیدم خراب بشه ! فعلا موندم چیکار کنم !

sajjad_AD
14-04-2012, 00:54
من درش اوردم روی مدارش دو تا مقاومت و یه دونه دیود و سیزده تا خازن ببینم چیکار میتونم بکنم...

sigma-mx
14-04-2012, 00:58
مهندس بی زحمت می تونی یه عکس واضح ازش بگیری و بزاری . این طوری منم میتونم کمک کنم ..

Doloop
16-04-2012, 08:13
مهندس من این عکس رو گذاشتم ببین برای شما هم اینطوریه
من یکی راه انداختم رو مد 16 بیتی که مقاومت رو روی R2 لحیم کردم
اگه هم روی R1 لحیم شه باید قطعا رو مد 8 بیتی راه اندازی بشه


You can see links before reply

sajjad_AD
16-04-2012, 09:32
سلام آقا حسین عزیز دست شما درد نکنه حق با شماست این مقاومت یه سرش به IM0 وسر دیگش با توجه به جایی که وصل میشه Gnd یا Vcc میشه,درست شد از همه ممنونم :hi:

sigma-mx
16-04-2012, 12:43
این مقاومت یه سرش به IM0 وسر دیگش با توجه به جایی که وصل میشه Gnd یا Vcc میشه
یعنی مهندس این خط IM0 در واقع pullup یا pulldown میشه ؟! اگه اینطور باشه که باید وقتی ما مستقیم به IM0 مثلا Vcc یا GND میدیم هم باید عمل کنه ؟ ولی من تست کردم هیچ تغییری نکرد !!


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

sajjad_AD
16-04-2012, 13:03
بله ديگه درست شد،اول در مورد im0 بگم که اصلا معلوم نيست که اون پايه اي که به عنوان im0 معرفي شده چيه!!!
با همون مقاومت بايد آپ يا دانش کرد همين هدري که گذاشتم عاليه و کار مي کنه،فقط واسه امتحان کردنش ناقصش کردم ولي اين اولي کامله و فقط مال avr.
هر وقت،وقت کردم کاملش مي کنم,ميذارمش اگه نه،دوستان خودشون کاملش کنن.در ضمن همونطور که گفتي سرعت کار با اون ميکرو و کلاک واقعا خنده داره
علامت سوالات زيادن چطور مگه راه اندازي کردن يه ال سي دي تو مدي که تعريف شده ولي معمول نشده غير ممکنه!!!سخت نگير سعيد جان

sigma-mx
16-04-2012, 15:35
خب به سلامتی..
مهندس من حواسم به پست اولت نبود که سورسش رو داری ... فکر کردم تازه می خوای بنویسی ...

nima_zeus
29-04-2012, 23:16
سلام دوستان

من یک ال سی دی از eca همون n96 خریدم ولی نمی دونم چه جوری از حالت 16 بیت به 8 بیت تغییرش بدم ؟

کسی از دوستان می تونه کمک کنه؟

اینم عکس روی فلت ای سی دی

ممنون

nima_zeus
01-05-2012, 11:00
سلام دوستان

من یک ال سی دی از eca همون n96 خریدم ولی نمی دونم چه جوری از حالت 16 بیت به 8 بیت تغییرش بدم ؟

کسی از دوستان می تونه کمک کنه؟

اینم عکس روی فلت ای سی دی

ممنون

کسی نیست جواب بده cry::cry::

من پست های قدیم رو خوندم ولی ماله من نه روی R1 و نه روی R2 هیچ مقاومتی نداره که

من جاش رو عوض کنم

کمککککککککککککککککککککککک

sigma-mx
01-05-2012, 13:52
مهندس یه عکس واضح تر از اون قسمت که مقاومت r2 هست بزار تا بهت بگم .:0013:

alamdar
01-05-2012, 20:45
من این ماژول lcd رو با برد دیسکاوری با هم خریدم

قراره به هم وصلشون هم بکنم!!

کسی اگر شرایط مشابه داره بگه با هم بریم جلو

Soheil74
02-05-2012, 15:36
مهندس یه عکس واضح تر از اون قسمت که مقاومت r2 هست بزار تا بهت بگم .:0013:
اینم یه عکس واضح تر:
You can see links before reply

arm-mohsen-avr
02-05-2012, 15:46
Lcd من هم مثل اینه و انگار اصلا به پایه im0 از تو وصل نیست :( من هم موندم چی کار کنم ...

sigma-mx
02-05-2012, 19:47
خب اینم از عکس جهت راهنمایی بکار انداختن پایه IM0 در السیدی N96 ..

You can see links before reply

نقاطی رو که با رنگ زرد پر کردم خطوط مسی هست . موقعیت دو جامپر هم که مشخصه .
دو جامپر از پایه بالاشون با هم مشترک اند که به قسمت تعیین حالت MODE السیدی رفته و از پایین سمت راستی به GND و سمت چپی به VDD یا همون 3.3 وصل شده .
در صورتی که می خواهید در حالت ثابت همیشه السیدیتون 8 بیت یا 16 بیت کار کنه .. نیازی به فعال کردن پایه IM0 که در ادامه توضیح میدم ندارید و تنها طبق نوشته کنار جامپر ها برای کار در مد 16 ، J2 و برای کار در مد 8 بیت ، J1 را لحیم کنید و میتونید از همون مقاومت 0 اهم که روی یکی از این دو هست استفاده کنید یا از یه تکه سیم یا مقاومت هم استفاده کنید .. معمولا بصورت پیش فرض چون در اکثر کاربرد های این السیدی در مد 16 بیت بکار گرفته میشه پس این جامپر روی J2 قرار داره که بنا به نیاز میتونید جاشو تغییر بدید ..

در روش بعد برای اینکه بتونید در عمل هم از مد 8 و هم از 16 بیت السیدی استفاده کنید ناچارید که پایه IM0 رو جهت کنترل مد باس بوسیله 0 و1 کردن این پایه بکار بگیرید . حقیقتا نمیدونم آیا تمامی این السیدی ها پایه IM0 اونها قطعه یا نه ! ولی از اونجایی که مشکل خیلیا کار نکردن این پایه در السیدیشون بود این آموزش رو گذاشتم ..
برای استفاده از این قابلیت باید دو جامپر J1 و J2 خارج بشه و محل مس بالای دو جامپر با یک سیم نازک لاک دار ( مثل سیم لاک دار ترانس یا هر نوع سیم پیچ ) به پایه IM0 روی برد ( محل اتصال فلت السیدی روی برد) لحیم بشه ( یعنی پایه 11) .
* توجه : علت اینکه گفته شد دو جامپر باید برای این حالت جدا بشه اینه که اگر این کار صورت نگیره مثلا درحالتی که پایه IM0 از محل جامپر ها به 0 متصل هست اگر ما از بیرون السیدی به پایه IM0 ، جهت تغییر مد 1 بدیم در اینحالت اتصال کوتاه پیش میاد !!!! پس حواستون باشه . البته اگه از مقاومت در حد کیلو بجای جامپر استفاده کرده باشید مشکلی پیش نخواهد آمد :0013:

امیدوارم که حالشو ببرید :o
یا حق

nima_zeus
02-05-2012, 22:04
ممنون مهندس

فقط یک مشکلی که هست اینکه مس هایه پایه ی بالایی r2 و پایه ی وسطی j4 از بین رفته

:mrgreen::mrgreen::mrgreen:


اخه از هر کی می پرسیدم یک چیزی می گفت بعد اینقدر جای اون مقاومت رو عوض کردم تا

مسش رفت..!!:x:x:x

چی کار کنم؟cry::cry::cry::

sigma-mx
02-05-2012, 22:26
یعنی هیچ جای لحیم روی پایه های بالایی جامپر ها نیست ؟!

sigma-mx
02-05-2012, 22:32
راستی اینم یادم رفت بگم ... اول با مولتی متر تست کنید ببینید از پایه 11 فلت السیدی ( im0) به بالای دو جامپر وصله یا نه ! اگه وصل باشه احتیاج به این کارا نیست (فقط باید جامپر ها رو در بیارید )ولی اگه راه نداد این عملیات رو انجام بدید .

nima_zeus
02-05-2012, 22:59
پایه ی 11 به پایه ی بالایی j4 وصله

یعنی الان روی حالت 8 بیته؟

پایه ی بالایی r2 هم که گفتم مسش رفته

چی کار کنم؟

sigma-mx
02-05-2012, 23:20
مهندس با این اطلاعات شما ... پایه im0شما وصله و فقط باید مقاومت یا جامپر سمت راستی رو در بیارید .
قبل از اینکه این کار رو بکنید برای اطمینان ، پایه im0 (یعنی 11 ) رو با مولتی متر چک کنید ببینید به gnd راه میده ؟ اگه بده درسته .. فقط چامپر رو باید خارج کنید ....... این السیدی ها 100 شکل مختلف داره !!!!!

nima_zeus
02-05-2012, 23:32
مولتی متر بوق نمی زنه ولی عددش عوض میشه

sigma-mx
02-05-2012, 23:47
خب پس جامپره اهم داره . یعنی مقاومت کم اهمه ! اگه درش بیاری بهتره .. فکر کنم دیگه مشکلی نداشته باشی .. :0013:
حالا اگه im0 رو 0 کنی 16 بیت میشه و اگه 1 کنی 8 بیت میشه ..

nima_zeus
02-05-2012, 23:52
روی j4 و r2 مقاومت نیست که مخوام بازش کنم

اون عکس ماله قبل از این که اون رو باز کنم

sigma-mx
02-05-2012, 23:59
خب پس الان مشکلی ندارید که ! برنامه 16 بیت رو بریزید و im0 رو 0 کنید باید ok باشه و البته ..... برای 8 بیت ..

nima_zeus
03-05-2012, 10:30
اخه این مدار من باید روی 8 بیت ثابت باشه .یعنی نیازی به 16 بیت ندارم

حالا ماله من هم که گفتم مس های پایه ی بالایی r2 رفته (همون j1 که شما گفتید برای 8 بیت باید به هم

وصل بشه) چی کار کنم؟ cry::

یعنی ال سی دی دیگه به درد نمی خوره!!!!!!!!

sigma-mx
03-05-2012, 12:57
خب عزیز من، اگه نمی تونی پایه مد السیدی رو با r2 اون داخل پول آپ کنی با پایه IM0 بیرون مدار پول آپش کن ..
اصلا به هیچ کدوم از اون جامپر ها و مقاومت ها احتیاج نداری ..! چرا ؟ چون خودت گفتی که پایه IM0 به پایه بالایی جامپر و مقاومت R2 وصله و این یعنی اینکه عملکرد پایه IM0 تو فعاله . پس با 0 دادن به این پایه از بیرون السیدیت تو مد 16 بیت و 0 دادن 8 بیت کار میکنه ...
منظورمو گرفتی ؟

nima_zeus
03-05-2012, 22:00
اخه من می خوام فقط روی مد 8 بیت باشه

و برنامه هم همین شکلیه

یعنی فقط روی 8 بیت تنظیم شده و من نمی تونم تغییر بدم

همون mp3 player اقای polestar

sigma-mx
03-05-2012, 22:25
ای بابا !! خب تقصیر من چیه مس فلت بردت رفته !! :unh:
اینطوری میگم : چون دیگه جایی برای جامپر گذاشتن روی R2 نداری . پس مجبوری به یه شکلی اون قسمت بالای جامپر ها و R2 که وصله به IM0 رو High کنی .. و همچنان من بی تقصیرم ... :0013:
حالا راحتترین کار اینه که اگرم داری از pcb آماده ( طراحی شده ) استفاده میکنی این پایه رو یجورایی به vdd مدارت برسونی ...

میخوای mp3 پلیر آقای polestar رو درست کنی ؟ همون که یه مگا 64 داره ؟ من شماتیکش رو دیدم و دارم . خب تو نقشه اون از مد 8 بیتی استفاده کرده و پایه IM0 السیدی رو هم به 3.3 زده . والا منو کاملا گیج کردی :baad:
اصلا تو از اولم نه مشکل السیدی داشتی نه مشکل نقشه و راه اندازی !!! :x
پایه IM0 ت هم که وصله پس دیگه مشکلی نداری . مدارو درست کن انشالله که همه چی OK هست ..

arm-mohsen-avr
09-05-2012, 00:28
خب اینم از عکس جهت راهنمایی بکار انداختن پایه IM0 در السیدی N96 ..

You can see links before reply this bar to view the small image.You can see links before reply

نقاطی رو که با رنگ زرد پر کردم خطوط مسی هست . موقعیت دو جامپر هم که مشخصه .
دو جامپر از پایه بالاشون با هم مشترک اند که به قسمت تعیین حالت MODE السیدی رفته و از پایین سمت راستی به GND و سمت چپی به VDD یا همون 3.3 وصل شده .
در صورتی که می خواهید در حالت ثابت همیشه السیدیتون 8 بیت یا 16 بیت کار کنه .. نیازی به فعال کردن پایه IM0 که در ادامه توضیح میدم ندارید و تنها طبق نوشته کنار جامپر ها برای کار در مد 16 ، J2 و برای کار در مد 8 بیت ، J1 را لحیم کنید و میتونید از همون مقاومت 0 اهم که روی یکی از این دو هست استفاده کنید یا از یه تکه سیم یا مقاومت هم استفاده کنید .. معمولا بصورت پیش فرض چون در اکثر کاربرد های این السیدی در مد 16 بیت بکار گرفته میشه پس این جامپر روی J2 قرار داره که بنا به نیاز میتونید جاشو تغییر بدید ..

در روش بعد برای اینکه بتونید در عمل هم از مد 8 و هم از 16 بیت السیدی استفاده کنید ناچارید که پایه IM0 رو جهت کنترل مد باس بوسیله 0 و1 کردن این پایه بکار بگیرید . حقیقتا نمیدونم آیا تمامی این السیدی ها پایه IM0 اونها قطعه یا نه ! ولی از اونجایی که مشکل خیلیا کار نکردن این پایه در السیدیشون بود این آموزش رو گذاشتم ..
برای استفاده از این قابلیت باید دو جامپر J1 و J2 خارج بشه و محل مس بالای دو جامپر با یک سیم نازک لاک دار ( مثل سیم لاک دار ترانس یا هر نوع سیم پیچ ) به پایه IM0 روی برد ( محل اتصال فلت السیدی روی برد) لحیم بشه ( یعنی پایه 11) .
* توجه : علت اینکه گفته شد دو جامپر باید برای این حالت جدا بشه اینه که اگر این کار صورت نگیره مثلا درحالتی که پایه IM0 از محل جامپر ها به 0 متصل هست اگر ما از بیرون السیدی به پایه IM0 ، جهت تغییر مد 1 بدیم در اینحالت اتصال کوتاه پیش میاد !!!! پس حواستون باشه . البته اگه از مقاومت در حد کیلو بجای جامپر استفاده کرده باشید مشکلی پیش نخواهد آمد :0013:

امیدوارم که حالشو ببرید :o
یا حق
با تشکر از شما پایه VDD LCD که شما با رنگ قرمز نشون دادین همون طرف پایین مقاومت r2 من وصله به پایه 11 یا همون IM0 و پایه های هر دو بالایی به هم وصل هستند و وقتی به سر اهم متر وصل می کنم که یه طرفش به زمین هست مقاومت 1000 رو نشون میده در حالت بازر
و پایه پایین j4 به زمین وصله ///
حالا با این حالت من چطور 8 بیت کنم ؟؟؟؟؟؟
باتشکر:0013:

sigma-mx
09-05-2012, 00:38
یعنی الان پایه im0 السیدی شما به vdd السیدی وصله ؟
پایه مشترک بالای r2 و جامپر چی ؟

arm-mohsen-avr
09-05-2012, 00:46
نه منظورم اینه که اون پایه که تو شکل نوشتین vdd با رنگ قرمز ، واسه من این پایه وصله به im0
طرف پایین جامپر به gnd وصله و پایه های مشترک رو نمی دونم کجا وصل شده و قتی اهم متر رو می زنم به زمین و این پایه های مشترک مقدار مقاومت 1000 رو نشون میده

sigma-mx
09-05-2012, 01:31
شما خودتون تغییری دادین ؟ اینطور که گفتین جامپر R2 وصله !! یعنی از Vdd به IM0 راه میده و این یعنی که تو مد 8 بیت قرار داره ..

arm-mohsen-avr
09-05-2012, 01:41
به عکس یک نگاهی بندازین :
یکیش به GND وصله و اونیکی به IM0 و مشترک رو نمی دونم کجا وصله :(
You can see links before reply

sigma-mx
09-05-2012, 01:53
ببین ابن الان تو مد 16 بیتیه . اول باید اون جامپر سمت راستی رو جدا کنی .بعد ببین قسمت بالای r2 و J4 که مشترکن به IM0 راه میده یا نه ..

arm-mohsen-avr
09-05-2012, 01:56
این مقاومت رو جدا کردم و تو مد16 بیت جواب داد و پایه مشترک به im0 وصل نیست :(

arm-mohsen-avr
09-05-2012, 01:57
بود و نبود مقاومت j4 فرقی نداره و تو مد 16 بیت جواب میده

sigma-mx
09-05-2012, 02:11
خب همه چی درسته . حالا همون سر مشترک بالای r2 و j4 رو به یک تکه سیم نازک ( سیم لاک دار مثل سیم ترانس) لحیم کن و سر دیگرش رو به محل اتصال پایه IM0 ( پایه 11 فلت ) رو برد لحیم کن . یعنی عملا با سیم اون ناحیه رو به IM0 وصل کردی ... کار تمومه ... حالا اگه IM0 رو 1 کنی میره تو مد 8 و اگه 0 کنی میره تو مد 16 بیت .. نتیجه رو اینجا بزار ..

arm-mohsen-avr
09-05-2012, 02:14
جامپر j4 رو باز کنم و این مراحل رو انجام بدم ؟ یا بزارم سر جاش ؟:o

sigma-mx
09-05-2012, 02:16
جامپر رو گفته بودم در بیاری !!! دیگه بهش احتیاجی نیست . هم r2 و هم j4 باید حتما خالی باشه !

alireza9900
09-05-2012, 16:47
@arm-mohsen-avr
مگه تو عکس نگفتی پایه پایین R2 به im0 وصله؟ خب یه سر r2 به im0 وصله و سره دیگه r2 هم به چیپ lcd هست و اگه j4 رو باز کنی بذاری روی r2 باید im0 کار کنه.

sigma-mx
09-05-2012, 17:11
با این کار بطور ثابت همیشه 8 بیت میشه . ولی اگه im0 رو فعال کنه از بیرون مدار هر دو حالت قابل کنترله .

alireza9900
09-05-2012, 18:14
نه اون جا که r2 هست به vdd وصل نیست به im0 وصله(اون سرشم به چیپ lcd). دقیقا این نوع lcd از 3 نوعی که من دیدم از همشون بهتره. خودم یدونه ازین دارم کیفیتشم از بقیه بهتره.

virtex6
08-08-2013, 17:48
سلام.اون جامپر به اون کوچیکی رو چجوری باید جدا کرد؟؟؟البته ببخشید سوالم سادست......:mrgreen:

Doloop
08-08-2013, 22:39
مهندس جدا کردن راحته با یه هویه میشه ولی اگه بخوای لحیم کنی باید حتما یه پنس یا چیزی شبیه این باشه (موچین) تا نگه داریش و لحیم کنیش :wink:

virtex6
09-08-2013, 09:47
مهندس جدا کردن راحته با یه هویه میشه ولی اگه بخوای لحیم کنی باید حتما یه پنس یا چیزی شبیه این باشه (موچین) تا نگه داریش و لحیم کنیش :wink:
حسین جان کمی بیشتر توضیح میدی باید چیکار باید بکنم؟من با لحیم کمی دستکاریش کردم,ولی از جاش تکون نخورد...:(

Doloop
09-08-2013, 11:11
اگه حرارت هویه رو به دو طرفش بدی جدا میشه البته اونقدر این جامپر ریزه به یک طرفش هم هویه بزنی کلا جدا میشه:wink: دیگه چیز خاصی نداره بخوام بیشتر توضیح بدم:0013: هویه رو یکم بیشترنگه دار مشکلی نداره ...

sajjad_AD
26-02-2014, 13:40
سلام :hi:

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

به سایت INANBO (You can see links before reply) یه سر بزنید برای همه LCD های تولیدیش کد سورس و کاتالوگ بسیار کاربردی گذاشته برای نمونه ILI9325 رو آپ لود کردم ببینید

اینم شماتیک پایه های این LCD :

7296

hassan1888
05-03-2016, 19:25
با عرض سلام و خسته نباشید خدکت همه ی پژوهشگران و علاقه مندان به الکترونیک و میکرو کنترلر؛
می خواستم نحوه ی راه اندازی lcd n96 را که در فروشگاه به فروش میرسه در حالت 8 بیتی آموزش بدم . همونطور که همه جا گفته میشه تغییر حالت عملکرد این ال سی دی از 16 به 8 بیتی توسط جابجایی یک مقاومت روی خود ال سی دی انجام میشه ولی کدوم مقاومت؟طبق عکسی که در بالا هست این مقاومت باید r1 و r2 باشه ولی برد پشت ال سی دی هایی که من و شاید خیلی ها خریده باشن با این عکس فرق داره. در مدلی که ما باهاش سر و کار داریم شما باید مقاومتی که در محل r4 لحیم شده را برداشته و اون را در محل r3 لحیم کنید تا با یک شدن پایه im0 ال سی دی در حالت عملکرد 8 بیتی قرار بگیره.
موفق و پیروز باشید و اگه کارتون راه افتاد ما را هم از دعای خیرتون بی نصیب نگذارین.
یا علی.