LCDInfo.com
http://forum.lcdinfo.com/

6610/6100 lcd and atmega32
http://forum.lcdinfo.com/viewtopic.php?f=9&t=2497
Page 1 of 1

Author:  rahuljin [ Fri Aug 22, 2008 19:39 ]
Post subject:  6610/6100 lcd and atmega32

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

Author:  kuriel [ Sat Jan 17, 2009 20:04 ]
Post subject:  example with atmega32

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:

Page 1 of 1 All times are UTC + 2 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/