Monday, September 22, 2008

NOKIA 3310 LCD interfacing with ATmega8

Hi friends,
using graphic LCD in a project gives itreally a good look and flexibility of displaying different characters and shapes. But, the graphic LCDs are quite costly.
The NOKIA 3310 LCD provides a really low-cost solution to add a small graphic display into your project and also good for learning purpose. The LCD is SPI bus compatible, saving many pins for other uses. It operates at 3.3v.

Here is a small circuit for interfacing the 3310 LCD with AVR microcontroller ATmega8. The schematic includes LCD connection with SPI port of ATmega8 with other connections required by LCD. The 3.3v is generated using adjustable voltage regulator LM317 (I was not having any 3.3v regulator at the moment). An LED is also connected with microcontroller just for making sure that the controller is working, particularly when you don't see anything on the display!

Here is the schematic and the pin details of the LCD (click on the image to enlarge it):

The connector of LCD is 'touch' type. So, I made a small connecor PCB with tracks touching to the pins of LCD. The pcb was pasted at backside of LCD using cello tapes as shown in the back-view image

Here is a testing with Proteus ISIS Simulation:

The program routines are written in C with ICCAVR compiler. I've created a library for this display. The low-cost, easy availability has made me relly like this display.
I'm going to use it for
doing other stuffs, too!

3310 Library (ICCAVR)
3310 Library (AVR-GCC, winAVR, AVRStudio)
3310 project (CodeVision AVR)
Proteus Simulation Model (Simulation was done with CodeVision AVR Hex file)

Check out my thermometer project with this display:
Thermometer with Nokia3310

Download datasheets:
1. ATmega8
2. PCD8544 - nokia 3310 display controller



Shri Vethathiri Maharishi said...

very nice work dharmani

CC Dharmani said...

Thanks, man!

Balaji V said...

Can you just mail me the sources of this thermometer project?
My Email ID is vbalaji.acs@gmail.com

CC Dharmani said...

Ok man,
I've sent it, check it out in your mail!

Balaji V said...

Thanks dude...
I got it.

Arvind Gupta said...

pls tell me part no of a 3.3 volt regulator. I have bought a 3310 lcd and wanna try out ur lib. Thanks!

CC Dharmani said...

A very easily available 3.3v regulator is LM1117-3.3
You can also use an LM317 adjustable voltage regulator, where using a small potentiometer, you can get 3.3v or 5v whichever you want.

Walther Grube said...

Great job! I'm impressed with all your projects andd will follow your work to learn more about MCUs.

Avinash Gupta said...

Hello Mr Dharmani,

I have made this 3310+ATmega8L interface but nothing showing up!!!

My Setup
>>ATmega8L-8PU @ 1MHz internal
>>Power using 2 Pencil Batteries (1.5v each)

I have also gone through the code every thing looks ok for my Hardware setup


CC Dharmani said...

Hi Avinash,
are you getting atleast the LCD filled up with black dots? When the LCD is powered up, it shows the screen filled up with black pixels (may be of low contrast,but it'll be visible on sceen) just like the way alphnumeric LCD behaves when you power it on (there the upper line is usually filled with black matrix dots).

If you are not getting that, then there is a connection problem, check it out. If you have soldered directly on the LCD connector,chances are there that the thin transparent conductive layer (between the LCD connector & LCD screen) may have got some problem.

CC Dharmani said...

To Walther Grube:
Thanks for your comment, man! :)

Avinash Gupta said...

Thanks for reply!

My LCD is not showin any thing not even black pixel. Yes I have soldered directly on PINs and thats even two times(first time got some problem).

Also the connector has moved a bit.

Ok i will try with new one

tejas said...

Can u send a code of that interface of the 3310 LCD with ATMEGA 8 uc.
mail : tez_182@yahoo.co.in


tejas said...

do u have full version of uVision 3(KEIL), if possible then send me the setup of that also asap


CC Dharmani said...

Hi tejas, I've sent you the code files and I don't use that compiler.

Akshaya said...

I'm a beginner Mr.Dharmani i would like to know one thing if I use say a nokia 1110 how different will my schematic be. Does the 1110 use a different driver and what about the libraries will they be different. I m trying to get my hands on a 3310 but in case i don't. how do i go about it on a 1110? Thank you.

Jwildes said...


Can you send to me the pcb adapter file? I would like to try using this lcd.
Good job.

Best regards from Brazil.

abhi said...

To CC Dharmani,

i have interfaced 3310 LCD with atmega16(8mhz and 3.3v).it is not showing anything on display.
fuse bits selected: bootsz1,bootsz0,clkse3,clkse1,clkse0/

plz help me..thanks

abhi said...

To CC Dharmani
i have tried interfacing 3310 LCD with ATmega8L also.it is still not working.
connection and prog status:
1.connection as per your circuit diagram with 3.3V vtg regulator(1117).
2.i have put hex file given by u in controller.
3.fuse bits :hfuse:D9;Lfuse:E4;
8mhz frequency....

is there any way to check whether my LCD is working on not

CC Dharmani said...

Hi abhi,
How have you connected the LCD with the controller, by soldering wires directly on the display connector? IF yes, then there are chances that the connection may have problem. The connector is having a transparent conductive layer to make internal contact with the display, which is very thin. If you apply too much of heat, it may get damaged.
If you have another display, give it a try. A working display will show matrix of black dots (may be faint) on the screen, even if it is not initialized.
Check the connections again.

Nischay said...

Hello Dharma,
i have become regular visitor to your wonderful site! you have connected nokia lcd to SPI port of AVR, will the display work if i connected to i2c port, as i have some other device on spi port ( yes, you guessed it - its SD card) since SDAT and SCK are also there in i2c port. i want to know exactly which protocol is supported by Nokia 3310 display - SPI or i2c?

CC Dharmani said...

Hi Nischay,
the nokia 3310 LCd works on SPI bus only, you can't connect it on I2C bus.
Even if you have anything connected on the SPI bus, still you can use the LCD on the same bus, as each device on the SPI bus has a separate Slave Select (SS) pin. You can connect as many devices on the SPI bus as you want provided that you have a separate SS pin for each of those devices.

Ofcourse, there are other methods to connect devises in SPI bus (like Daisy Chain), but in your case, connect the 3310 LCD on the same bus, and just use another SS pin for LCD which you are not using for the SD Card

abhi said...

hello sir,

my previous LCD is not working ,so i brought a new LCD and made same PCB for connection as you made.but still its not working ..its getting 3.3v between pins 1 & 6.. but not showing any black pixel dots.

i have done connection for ATmega8 as per ur circuit diagram and .i have pburnt .hex code provided by u in thermometer project.

according to diag shown by you pin no 8 is near hole drilled for holding LCD?

for checking LCD is there any other connection than pin 1&6

Nischay said...

Hello Dharma, Thank you for clarifying my doubts. one more thing, from where did you buy 3310 display and how much it costs- i live in Hyderabad (A.P).here Electronics components shops don't sell these displays.

Balaji V said...

Dear Nishchay,
It is available in the Mobile market (Jagdeesh Market) in Hyderabad. I got that and it was working fine I got it working with ATMega32.

Nischay said...

Hello Balaji,Thank you !

before seeing your post,today morning i went to jadgish market and purchased the 3310 display, the vendor said it costs Rs.150, i bargained and got for Rs.130,i don't know if i paid more or less. i have just now finished making hand drawn pcb for connection,tommorrow i'll try to set it up with mega8

CC Dharmani said...

To Abhi:
Hi, if you are using the thermometer hex file, it may not show anything on display if the thermometer IC is not connected, as the code may hang during initialization itself. Put up your email ID here, or write to me on ccd@dharmanitech.com, I'll send you the code without the thermometer IC, just to display some text on the 3310 LCD

Nischay said...

Hello Dharma,
when i power up the bread board with atmega8 on the board,my display just shows black screen and just hangs, i directly soldered 8 thin wires to the lcd pins ( was very careful ), my mega8 is running at 8Mhz IntRC.

one more thing,i have ANDed y addr with 07h and ORed with 40h and x addr ANDed with 7Fh and ORed with 80h to set cursor, is this correct ?

abhi said...

please mail me routines and .hex file for "NOKIA 3310 LCD interfacing with ATmega8" on


smichael said...

Helo Dharmani
Can u send a code of that interface of the "NOKIA 3310 LCD interfacing with ATmega8"
mail: smichaelxx@tlen.pl
Thanks a lot

MANISH said...

@CC Dharmani
hello sir i saw your project its really fascinating.

i want to interface the same lcd with atmega 128 . what changes i should make in ur project to do so.

can you mail me the sourse code of your project.

Anonymous said...


I have AtMega128 and I want to interface my Nokia3310 LCD to it. Please give me some direction so as to how to proceed or how different my connections would become on Atmega128, compared to your Atmega8.
and also please mail me some files so that I can check my LCD display as to is it working or not.

Earlier I was told by someone that since my LCD has different controller(PCD8544), I cant run it with Atmega128 that has AVR. Please help me.

Looking forward for a speedy reply.


Balaji V said...

What you were been told was false. You can talk to the controller in LCD with any microcontroller for that matter.

Anonymous said...

In the circuit, I have PIN4 of LCD connected to PB0(ICP). Please tell me is it PB0 or ICP?
Thanking You,

CC Dharmani said...

Balaji said it correctly, you have been misinformed. Any microcontroller having SPI bus can be interfaced with this LCD easily, and mega128 is having it.
You won't have to change many things there.
No change in the DS1621 interface, as the mega128 is having the same
I2C (TWI) interface as the mega8.

For connecting the Nokia display, again there won't be ant change in
the SPI bus connection, just use the MISO, MOSI & SCK same way as
shown in my schematic. Only thing you have to ensure is that you
connect the same port pin which I used for connecting the chip-select
pin of the display, if you don't want to change the code.

That's all, you can compile the code again for the mega128, and there you go!!

CC Dharmani said...

To Naveen:
that pin is PB0, so connect it wherever PB0 comes in your new controller, don't bother about ICP

smhslh said...

may you send to me the code at my mail sameh167@hotmail.com
thanks for help

MANISH said...

@cc Dharmani..
sir can u mail me the code at

Anonymous said...

Hi Mr Dharmani, very nice work. can you send me the source code via e-mail?

My mail address is bongy@email.it thank you.

Josef said...

Thats very nice work! But my display still does not work. It even does not show black dots vhen it is not inicialized. I have display from mobile 3410 I thought that is the same as 3310 but I found that is not... So it will not work, does it? :) Could you send me source code and hex for simple LCD interfacing? I will try to get some 3310 display. By the way.... did you try to interface 3410 display? Thanks very much. pepajanda@seznam.cz

CC Dharmani said...

Hi Josef,
I haven't tried nokia 3410 display, so no idea whether it will work with this code or not.
I've sent you the code for 3310 lcd.

al said...

hello dharmani...
i already completed compile thermometer.hex from this schematic, but i not use thermometer,succes lcd is flame,but not appear character,just blank "black" lcd. i think connection schematic is true. i try just atmega8 and lcd.So,could you send me this file.hex..how to setting internal clock,i'm not understand..could you give me library .hex with use external clock just simple 4-12 mhz.

al said...

this my email (am8510@gmail.com)

ETM said...

I'm having a problem.
I've compiled my code writing to the display works. But the display is constantly blinking. The text appears but the background contrast is pulsating. Running the program to a constant while(1) do LcdUpdate decreases the intensity slightly but not much better. I'm running it on a MEGA8 at 4 or 8 MHz. BTW, what is the lowest frequency I can use?

praveen said...

hi ,
this praveen , i have ds1621 in my weather station project i am unable to check it out man , please send me the c code and full details about it please i am really in urgent to test it ,,

m.y said...

can you send me the source file of this project.



robotricks said...

Hello Dharmani Sir,
After seeing all posts i got interest to do the nokia lcd project. plz send me the code and hex file of he lcd interfacing with atmega8 without that temp ic.



rupesh said...

sir i want information to operate nokia 3310 lcd using at89s52 plz sir

praveen said...

hello cc dharamani i have got connected the circuits of 3310lcd with atmega 16 can you send me the source code and hex file to my mail id praveenat1985@gmail.com

aniket said...

Sir,i want to use nokia3310 display for my project.i have seen the lib files,would you plz send me the complete c code of interfacing 3310 with atmega8.i am also using RF comm in my project and having problems of noise being read by receiver.plz tell me the baud rate to be used.

sumit said...

gr8 work sir!!!
wil u provide a working 3310 LCD C code .....using Atmega 8?
i m waiting sir...
my email-id is

aniket said...

thank u very much!!!!

rupesh said...

Helo Dharmani
Can u send a code of that interface of the "NOKIA 3310 LCD interfacing with ATmega8"
Thanks a lot

aarti said...

hey can u tell me what ontent error in codevision avr

aarti said...

can u tell me what is flash error and address content error in codevision avr

Anonymous said...

Helo Dharmani
i work with codevision.
Can u send a code of that interface of the "NOKIA 3310 LCD interfacing with ATmega8" in codevision?
Thanks a lot

Anonymous said...

Nice work. What is the spacing and width you used to connect the pcb tracks to the lcd connector?

(pls send to txstart@gmail.com)

Do let us know because soldering to the connector is not so nice.


CC Dharmani said...

The center to center distance between the pins is 1.15mm. You can use pad width as 0.7mm and remaining (1.15-0.7) as space between the pads.

Mike said...

Hello -
nice work and the clean layouts are good to see. I am trying to get this 3310 lcd working with an arduino duemilanove (atmega328). can you suggest a schematic or photo for this layout? having a bit of confusion - some say sites resistors, others not, others caps & resistors. i would rather see a working example than destroy several lcds through trial and error. thanks.

Rohit said...

Hi dharmani,
My project is to reduce power dissipation in LCD, for that I have chosen atmega169 as the LCD controller. I will be varying the frame rate, duty refresh ratio to see how does power used changes. Which LCD can be used for this, graphical or alphanumeric, tell me the particular part no. Would I have to use another controller that would actually send the data to the LCD or with just atmega169, I would be able to perform all these functions?
Please help me.


Raman said...

Hello Dharmani....In the file 3310_routines.h, you have written the code

#define SET_RST_PIN PORTB |= 0x10

#define CLEAR_RST_PIN PORTB |= 0x10

Both these lines mean the same and the reset pin of the LCD controller is active low..So, I think it should be

#define CLEAR_RST_PIN PORTB&=~0x10

anant said...

Really nice project.I tried 3310 project with atmega8 that is available on net, but proteus simulation is showing garbage.Can you please send me your function library for lcd and a test hex file.

Cristi said...

Thumbs up :)
But why did you skip PB1?

Anonymous said...

Hiiii.... Dharmani...
Could you help me... to send C code and the LCD library...

i need it so much...

thank you so much for helping....

best regard.

rendemfer said...

Hiiii.... Dharmani...
Could you help me... to send C code and the LCD library...

i need it so much...

thank you so much for helping....

best regard.


percy said...

i really like your work
if you can please send me the source code.
i am working with atmega8.
my email id is percy.embedded@gmail.com

pratik said...

Hello, Mr. Dharmani.. Iloved the way you've described the topic. wish u good luck in your future endeavours!!
I have decided to follow along your lines to interface 3310 to ATmega8. It would immensely help me if you code send me the code files to


Thanks n GOOD LUCK!!

enj2010 said...

The link to the LCD Font Generator program is a dead link. I searched for a few hours for the program but can't find. Are you able to send to me?

immortal said...

can you please send me the code for this. I will set this up using the exact same setup as you. Thanks a lot in advance. My e-mail ID is find.the.immortal@gmail.com

Kustas said...

Hi, very cool man, thanks to you I built it from start, but can you pls send me the code, thanks very much,


Iman said...

Can you please mail me the sources of this 3310 LCD with atmega8 project?
My Email ID is sips.delphi@gmail.com

Anonymous said...

sir can u help me !

i want to interface nokia screen with atmeg2560. my email id is


Iulian said...


I did everything you said above in this article. I write a simple test string on the lcd. The string shows up but the screen blinks. I goes black, then white, again black, and so on. I can se the text only when is white. What can I do?
I think is something about the contrast, but I can't figure out what...
The LCD's power supply is a LM317. I do have put a 10uF capacitor on Vout. If I take that capacitor the screen goes dark, if I put it, it starts blinking.

My email is: iulian.matesica@gmail.com - but I think here is the best place for the solution. Maybe this is useful for other people.

CC Dharmani said...

Hi Lulian,

I hope you've solved the problem by now, as I also can't see what's wrong there. Certainly contrast is not a problem, unless you keep changing it in the software. Since contrast is adjusted only once during the LCD initialization in the code, it will remain the same, it wouldn't result in blinking.
Have a look at any part of the code which you might have modified.
This can also result if the capacitor you mentioned keeps charging discharging, may be result of faulty cap, I guess.
Or the worst thing, try with another display.

vinay7788 said...

sir,i wanna interface nokia 1110 with 8051,,does it suppports at commands,,,wats process???plz help me out...
my project is vehicle tracking system using gps & gsm in wich extracting info from gps receiver interfaced with 8051,sending that info(longitude,lattitude) to remote gsm mobile on request to the nokia 1110 interfaced with the same microcontroller

Nhivekar said...

Hi Dharmani
Thank you for sharing your work.
Can you tell what is the use of following function.

void LCD_setPixel ( unsigned char x, unsigned char y);

void LCD_clearPixel ( unsigned char x, unsigned char y);

Also I can able to display char only on line 1,2,3; other lines cant display any char.

what is the fault!

Ritesh_Rocks said...

Dharmani sir can you please mail me the source code for this thermometer....
my mail id is

Anonymous said...

How to test 3310 LCD before connecting to Microcontroller?
I have connected 10microF to Vout and ground and then connected 3V battery to Vdd and Ground. remaining all pins including reset pin left unconnected. But there was no any change in the display.

Do I need to connect Reset to Ground.? while testing?

Can anyone confirm this please?



thank you mas dharmani sampean emang apikan tenan,,,

Anonymous said...

hello dharmani,,,
I devartha from Indonesia, I'm very interested in your article and I feel very lucky to be able to read it ...
I need your help to give an example using the basic language program in Bascom avr ...
thanks before

Anonymous said...

hi, can i use the phone's board it has connectors for it but im not sure will it work or not my email:youssefaly1997@gmail.com
youssef aly

adi said...

Can you just mail me the sources of this thermometer project?
My Email ID is aditya.boby@gmail.com

ankit bhardwaj said...

sir , i am making a project on accelerometer and i want to connect my adxl 335 to the bread board
sir actually i am using adxl 335 PCBZ
which is very small (4mm x 4mm x 1.45mm LFCSP) and can't be soldered directly.
so how can i connect it with breadboard.
i don't want to use breakout board since i have already purchased the ic.

youssef said...

please send me the files required to make the pcb at youssefaly1997@gmail.com thank you

Wid said...

makasi banyak pak... sangat2 membantu

Berg said...


I'm trying to interface an Atmega8a with this LCD but nothing shows on the screen. The board connections are fine and SS, SCE and RST pins are connected as in your project.

The screen works. I doscovered that if I connect SCK to GND I get some random lines on the screen.

However, it seems that I can't use MISO pin as an output to make it high or low to reset the LCD.

So, I modified the library like this:

void LCD_reset()
SPCR &=~ 0x40; // disable SPI
PORTB &=~ 0x10 ; // clear RST pin to trigger a RESET on LCD
delay_ms(100); // delay required by screen...
PORTB |= 0x10 ; // set RST pin
SPCR |= 0x40; // re-enable SPI

void LCD_init ( void )



SET_SCE_PIN; //disable LCD

LCD_writeCommand( 0x21 ); // LCD Extended Commands.
LCD_writeCommand( 0xE0 ); // Set LCD Vop (Contrast).
LCD_writeCommand( 0x04 ); // Set Temp coefficent.
LCD_writeCommand( 0x13 ); // LCD bias mode 1:48.
LCD_writeCommand( 0x20 ); // LCD Standard Commands, Horizontal addressing mode.
LCD_writeCommand( 0x0c ); // LCD in normal mode.


So, what I did is to disable SPI while making MISO pin go low to reset the LCD and re-enabling the SPI afterwards. Still it does not work.

Do you have any idea what might be wrong?

Berg said...

And also, I'd like to know what's the reading of VOUT of the screen?

sagar savani said...


How to test whether 3310 LCD is working or not??

Anonymous said...


I have connected the lcd like you and it works. The only thing that makes me wondering is how come the MISO pin works as an output. In the datasheet it says that when SPI is enabled the MISO pin is configurated as an input. And if that is so then how is it possible that still the lcd gets reseted.
The other thing is the power supply of the lcd. I can not get it to work with 3.3V. If I wont the lcd to show images that are visible I have to use 4V minimum. I do not know exactly wich model of the NOKIA lcd I am using. Is it possible that I have an lcd that works on higher voltages? I tried almost everything but the logic level shifting. But if you design works without it then I don't know why my shouldnt.
Anyway great job for you and I hope I get your reply.

Anonymous said...

please reply on previous posts..

Anonymous said...

I want to interface nokia 3310 lcd with msp430f261x . Anyone who has worked on it ,kindly help me....

rishav said...

can v use Nokia 3315

Unknown said...

hey its great man...i am begnner and that i get it usefull thanks bro..

2011disaster said...

I searched the internet over full night, every one using the regular same LCD screen(16x2). this is first blog i found which uses a different type of LCD(nokia). where did u get the details of that LCD. Any your blog is really nice. thanks for sharing.


BENNOUR karim said...

i'm a beginner, and i would know step by step how to creat the pcb for lcd
my mail : bennour.md.karim@gmail.com

Ankit Maurya said...

hello Dharmani sir,
Sir I would like to interface nokia 6610lcd with avr in code vision avr. Could you provide the library for the same and proteus simulation model.

Thanking you,

Murali said...

Nice work done.

Checo said...

Hello there! Great Job!

May I ask if your library have some license?

I want to use it in a PIC project and I will port your library to CCS C, but I want to know if it okay to do that, and should I do in order to get the permission.

I will publish the source if I ever finish my project. Thanks!

CC Dharmani said...


this library doesn't have any license. You are free to use it the way you want. Enjoy!

Teja Raj said...

am using nokia3310 display..for my project called logic analyser...its displaying nothing when i give pulse
from a t.v remote...so i checked whether its workin or not...i gave power supply
its just displaying some lines for 2minutes. and disappearing..please help me..mail id:tejarazz22@gmailcom

Anonymous said...

I found old 3310 and want to use it.
I solder it up and connect to mega8
i turn power ON and nothing displays,
but when i turn OFF power it shows some random lines.
here is pic:

BENDER bender said...

I found old 3310 and want to use it.
I solder it up and connect to mega8
i turn power ON and nothing displays,
but when i turn OFF power it shows some random lines.
here is pic:

Muhammad Muqeem said...

nokia 3310 lcd interfacing is very good project but i want nokia 3310 or nokia 1100 or 1202 lcd interfacing in PIC Series microcontrollers

please give me help
and send me solustions
at my email muqeemcsk@gmail.com


Hariom said...

Sir thankyou!
This is the right place to get more stuffs,you always have something new in this site.
Sir i am using this lcd with avr studio4 including your routine file but didnt get any text out.sir my connection is very precise as in your diagram.i think there is something wrong in my main.c file
Sir please send me sample main.c source code ,my email is dubeyhariom4@gmail.com

CC Dharmani said...

Hi Hariom,

you can first try the LCD with one of the hex files available in the zip files that you download from this post, like the one I used in proteus simulation. This way, your connections and the LCD will be tested. Later on you can modify main file the way you want.

Anonymous said...


How do you create a white text on a black background?

Can you please give a sample code for it? I have been searching but did not find any code.

My objective is to create a scroll up and down, but the black background will be the one to move up/down on each row.

Hoping for your response.Thanks

Anonymous said...

Hi Mr. Dharmani,

I need to interface with Nokia 3310 LCD for a microcontroller project, but I am not familiar with soldering, moreover the pin are too small on the LCD. Is there a way I can interface with the LCD without soldering.

Thanks and Regards



USComponent said...

Thank you for sharing your article :) This is very helpful

Harold said...

Very nice post! :) Thanks for sharing..

Rajavel R said...

Good job :)Thank you for sharing.

PLC Training in Chennai said...

thanks for sharing

embedded training in chennai said...

This is very helpful

final year projects in chennai said...

Final Year Projects in Chennai

miezan said...

can you send me the source file of this project.



Alexei Lozovik said...

It is some mistake in SPI_INIT

I used spimode0 (CPOL=0 CPHA=0) sclk polarity for good work.

Syed Zain Nasir said...

You should also check The Engineering Projects because they have posted a lot of Arduino Projects and PIC Mirocontroller Projects and have also designed many new Proteus Tutorials. I hope you guys are gonna like them.

PLC Training Center in Chennai  said...

Thanks for sharing nice information.
Visit Excel Automation Solutions, the only Institute which offers you the best PLC Training in Chennai and also other relevant PLC Course Training in Chennai