LCDInfo.com

http://www.lcdinfo.com
It is currently Sun Nov 24, 2024 17:14

All times are UTC + 2 hours




Post new topic Reply to topic  [ 2 posts ] 
Author Message
PostPosted: Fri Aug 22, 2008 19:39 
Offline

Joined: Fri Aug 22, 2008 19:32
Posts: 2
hi,
i have a nokia 6610/6100 lcd with philips controller(it has big contacts at the backside) . i am interfacing it with atmega32 at 1mhz and jtag disabled. i am using winavr WinAVR 20080430.

this is the code for making a multicolour box at the center of lcd.

please help me and correct this code i write(or say modified from the codes available on internet) ----


Code:
#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 1000000UL

#define SPIPORT PORTB
#define SPIDDR DDRB
#define CS 2
#define SDA 3
#define RESET 4
#define CLK 5

#define cbi(reg, bit) (reg&=~(1<<bit))
#define sbi(reg, bit) (reg|= (1<<bit))

#define CS0 cbi(SPIPORT,CS);
#define CS1 sbi(SPIPORT,CS);
#define CLK0 cbi(SPIPORT,CLK);
#define CLK1 sbi(SPIPORT,CLK);
#define SDA0 cbi(SPIPORT,SDA);
#define SDA1 sbi(SPIPORT,SDA);
#define RESET0 cbi(SPIPORT,RESET);
#define RESET1 sbi(SPIPORT,RESET);

#define byte unsigned char
byte n=0;
byte s1,s2;
byte r,g,b;

void sendCMD(byte cmd);
void sendData(byte cmd);
void shiftBits(byte b);
void setPixel(byte r,byte g,byte b);

void waitms(int ms)
{
  int j;
  for (j=0;j<ms;j++)
  {
   _delay_ms(1);
  }
 }

int main (void)
{
  int i;
 
  DDRB = 0xFF;

  SPIDDR=(1<<SDA)|(1<<CLK)|(1<<CS)|(1<<RESET); //Port-Direction Setup
   
//hardware reset

  CS0
  SDA0
  CLK1
 
  RESET1
  RESET0
 
  waitms(10);

  RESET1

  CLK0
  SDA1
  CLK1

  waitms(10);
 
 //Software Reset
  sendCMD(0x01);

 //Sleep Out
  sendCMD(0x11);
 
  //Set Constrast
  sendCMD(0x25);
  sendData(0x3F);

 //Booster ON
  sendCMD(0x03);

  waitms(10);
 
 //Display inversion on
  sendCMD(0x21);

 //Normal display mode
  sendCMD(0x13);

 //Data order
  sendCMD(0xBA);

 //Memory data access control
  sendCMD(0x36);

 //Colour 8 bit
  sendCMD(0x3A);
  sendData(2);

 // setup color lookup table
  sendCMD(0x2D);
 
  sendData(0);     // red 000 value
  sendData(2);     // red 001 value
  sendData(5);     // red 010 value
  sendData(7);     // red 011 value
  sendData(9);     // red 100 value
  sendData(11);    // red 101 value
  sendData(14);    // red 110 value
  sendData(16);    // red 111 value
  sendData(0);     // green 000 value
  sendData(2);     // green 001 value
  sendData(5);     // green 010 value
  sendData(7);     // green 011 value
  sendData(9);     // green 100 value
  sendData(11);    // green 101 value
  sendData(14);    // green 110 value
  sendData(16);    // green 111 value
  sendData(0);     // blue 000 value
  sendData(6);     // blue 001 value
  sendData(11);    // blue 010 value
  sendData(15);    // blue 011 value

 // nop
  sendCMD(0x00);
 
 //Display On
  sendCMD(0x29);
 
 //Column Adress Set
  sendCMD(0x2A);
  sendData(0);
  sendData(131);

 //Page Adress Set
  sendCMD(0x2B);
  sendData(0);
  sendData(131);
 
 // write some stuff (background)
  sendCMD(0x2c);
  for (i = 0; i < 18000; i++)
  {
    sendData(28);  // 28 is green
   }
   
   waitms(200);
   
       // draw a multi-colored square in the center of screen
  for (i = 0; i < 4096; i++){
    setPixel(i, (i % 64) + 32, (i / 64) + 32);
  }

  while(1==1)
  {
  // now add here your code
 
  }

}
   
   
 void shiftBits(byte b) {

  CLK0
  if ((b&128)!=0) SDA1 else SDA0
  CLK1

  CLK0
  if ((b&64)!=0) SDA1 else SDA0
  CLK1

  CLK0
  if ((b&32)!=0) SDA1 else SDA0
  CLK1

  CLK0
  if ((b&16)!=0) SDA1 else SDA0
  CLK1

  CLK0
  if ((b&8)!=0) SDA1 else SDA0
  CLK1

  CLK0
  if ((b&4)!=0) SDA1 else SDA0
  CLK1

  CLK0
  if ((b&2)!=0) SDA1 else SDA0
  CLK1

  CLK0
  if ((b&1)!=0) SDA1 else SDA0
  CLK1

}

void setPixel(unsigned char color, unsigned char x, unsigned char y)
{
  x += 2;                  // for some reason starts at 2
  sendCMD(0x2B);   // page start/end ram
  sendData(x);         
  sendData(132);       
  sendCMD(0x2A);   // column start/end ram
  sendData(y);            // for some reason starts at 2
  sendData(131);
  sendCMD(0x2C);    // write some shit
  sendData(color);
}

//send data
void sendData(byte data) {

  CLK0
  SDA1                                                 //1 for param
  CLK1

  shiftBits(data);
}

//send cmd
void sendCMD(byte data) {

  CLK0
  SDA0                                                 //1 for cmd
  CLK1

  shiftBits(data);
}




my configuration is ----

1 VDD 3,3V
2 Reset ------------- PORTB4
3 SDATA ------------ PORTB3
4 SCLK ------------ PORTB5
5 CS ------------ PORTB2
6 VLCD 3,3V
7 NC
8 GND
9 LED-
10 LED+ (6V)
11 NC


Top
 Profile  
 
 Post subject: example with atmega32
PostPosted: Sat Jan 17, 2009 20:04 
Offline

Joined: Thu Apr 03, 2008 7:29
Posts: 1
just use the schematic here, and the following crystal :) , the LCD itself need <15ns rise time and approx 6Mhz clock frequency for the SPI so 1 Mhz crystal doesn't enough to drive the LCD :( .

http://my.opera.com/kuriel/blog/2008/09/08/menggunakan-lcd-nokia-6610-sebagai-penampil-gambar-berwarna

sorry if my article not in english :lol:


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC + 2 hours


Who is online

Users browsing this forum: Google [Bot] and 6 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group