1. Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.
    Dismiss Notice

ATMega16l and Nokia5110 LCD issue

Discussion in 'AVR' started by darkestdream, Mar 30, 2015.

  1. darkestdream

    darkestdream New Member

    Joined:
    Mar 30, 2015
    Messages:
    1
    Likes:
    0
    I made a simple program wich has to turn all the display black and...it doesn't work. The LCD seems dead. Just the backlight is on. Here's the code

    Code (text):
    #include <avr/io.h>
    #define F_CPU 40000UL  //4 MHz
    #include <math.h>
    #include <avr/interrupt.h>
    #include <avr/power.h>
    #include <avr/sleep.h>


    typedef struct
    {
       unsigned int bit0:1;
       unsigned int bit1:1;
       unsigned int bit2:1;
       unsigned int bit3:1;
       unsigned int bit4:1;
       unsigned int bit5:1;
       unsigned int bit6:1;
       unsigned int bit7:1;
    } _io_reg;

    #define REGISTER_BIT(rg,bt)((volatile _io_reg*)&rg)->bit##bt


    #define LCD_RST REGISTER_BIT(PORTB,0)
    #define LCD_DC REGISTER_BIT(PORTB,1)
    #define SS_LCD REGISTER_BIT(PORTB,2)



    int main(void)
    {
       ioinit();
       spiinit();
       lcdinit();
       lcdclear();
       lcdfill();

     
       while(1)
       {

         
       }
    }

    void sleep30ms()
    {
     
       OCR1A=120;
       TCCR1B|=(1<<CS12)|(0<<CS11)|(1<<CS10)|(1<<WGM12);


       while(OCF1A==0)
       {
     
       }

       TCCR1B &=~(1<<CS12);
       TCCR1B &=~(1<<CS10);
       TCNT1=0;

    }


    void ioinit()
    {
       DDRB|=(1<<0)|(1<<1)|(1<<2);
    }

    void spiinit()
    {
             //SCK   MOSI   !SS
       DDRB |= (1<<7)|(1<<5)|(1<<4);
          //enable-master-fclk/128
       SPCR =0x53;


    }

    void lcdinit()
    {
       LCD_RST=0;
       sleep30ms();
       LCD_RST=1;
       lcdcommand(0x21);   //extend command
       lcdcommand(0x0B);   //contrast
       lcdcommand(0x04);   //temp coeff
       lcdcommand(0x14);   //bias mode 1:48
       lcdcommand(0x0C);   //lcd in normal mode
       lcdcommand(0x20);   //normal mode
       lcdcommand(0x0C);   //normal display
    }

    void lcdcommand(char data)
    {
       LCD_DC=0;
       SS_LCD=0;
       spiout(data);
       SS_LCD=1;
    }

    void lcddata(char data)
    {
       LCD_DC=1;
       SS_LCD=0;
       spiout(data);
       SS_LCD=1;
    }

    void spiout(char data)
    {
       SPDR=data;
       while(!(SPSR & (1<<SPIF)))
       ;

    }

    void lcdclear()
    {
       unsigned int i;

       for(i = 0; i < 504; i++)
       {
          lcddata(0x00);
       }
    }

    void lcdfill()
    {
       unsigned int i;

       for(i = 0; i < 504; i++)
       {
          lcddata(0xff);
       }
    }
     
  2. manoj soorya

    manoj soorya Member

    Joined:
    Aug 23, 2014
    Messages:
    238
    Likes:
    4
    Location:
    India
    Try this....


    Thank you
     

    Attached Files:

Share This Page