View previous topic :: View next topic |
Author |
Message |
Guest09 Guest
|
LCD nokia clone + 16F877 |
Posted: Mon Jan 12, 2009 1:48 pm |
|
|
Hi dear friends.
I'm reading this post
http://ccsinfo.com/forum/viewtopic.php?t=26461&highlight=nokia+6100
so i was thinking to give a try with some cheap nokia 6100 clone (sparkfun).
Does anyone knows how to connect such LCD to 16F877 ?
Can i convert the code for use with 16F877 ? |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Mon Jan 12, 2009 5:27 pm |
|
|
The page on the Sparkfun site has lots of links to documents and code examples, even example code for a PIC16F87x written in CCS-C.
I've never seen an Electronics site with so much practical product info. What more do you want??? They even provide code for your processor!
Quote: | Can i convert the code for use with 16F877 ? | I don't know you can do it. |
|
|
Guest09 Guest
|
|
Posted: Tue Jan 13, 2009 2:03 pm |
|
|
I know i can't
I didn't buy this lcd yet because i got some old ones from nokia 3200.
I pull them out.
My problem is more on hardware side - for now :-).
There are few examples with picmicro and 6100 but I can't find some "how to connect" tutorial for 3200 LCD. I found pinouts but heeeee ?
Code: |
2 Gnd
3 MBus
4 Vpp
7 FBus Rx
8 FBus Tx
A Vbat+
B BSI
C BTemp |
Which pins on 16F877 should I use ? |
|
|
PICoHolic
Joined: 04 Jan 2005 Posts: 224
|
|
|
Guest
|
|
Posted: Wed Jan 14, 2009 7:41 am |
|
|
OK on the 16f877 side but what about LCD side ?
What pins of the LCD should i use, what is what.
Thank you for your help!.
LCD_RESET PIN_C0
LCD_CS PIN_C1
SPI_CLK PIN_C3
SPI_DI PIN_C4 //unused
SPI_DO PIN_C5
------------------------------------------
2 Gnd
3 MBus
4 Vpp
7 FBus Rx
8 FBus Tx
A Vbat+
B BSI
C BTemp |
|
|
dyeatman
Joined: 06 Sep 2003 Posts: 1933 Location: Norman, OK
|
|
Posted: Wed Jan 14, 2009 8:02 am |
|
|
The pinout is at the bottom of the page referenced by the first link you gave
http://www.sparkfun.com/commerce/product_info.php?products_id=569
Pin breakout from source code:
LCD_CS PIN_C1
SPI_CLK PIN_C3
SPI_DI PIN_C4 //unused (means you don't connect this one)
SPI_DO PIN_C5
From Sparkfun Pinout List:
1. VCC-Digital (3.3V)
2. RESET -------> LCD_RESET PIN_C0
3. SDATA -------> SPI_DO PIN_C5
4. SCK ----------> SPI_CLK PIN_C3
5. CS ------------> LCD_CS PIN_C1
6. VCC-Display (3.3V)
7. N/C
8. GND
9. LED GND
10. LED V+ (6-7V)
Looks pretty straightforward to me. |
|
|
Guest
|
|
Posted: Wed Jan 14, 2009 8:21 am |
|
|
Thank you dyeatman but i didn't buy this LCD yet.
Instead of this i found some old LCD's from cellular phones ( to save the environment :-) )
Sony ericsson t290
Sony ericsson t100
Nokia 3200
The pinouts that i posted are from nokia 3200.
2 Gnd
3 MBus ---
4 Vpp ---
7 FBus Rx ---
8 FBus Tx ---
A Vbat+
B BSI ---
C BTemp ---
I dont know what is FBus RX and TX, BSI, BTemp.
In cca 2 hours i will send photos and pinouts of other two model's, so please be so kind and help me out. |
|
|
dyeatman
Joined: 06 Sep 2003 Posts: 1933 Location: Norman, OK
|
|
|
Guest
|
|
Posted: Thu Jan 15, 2009 1:37 am |
|
|
What you are lisiting is the pinout of the phone not the LCD.
- aaaaaaaa, damn.
OK, i gonna try to connect it and see what will happen :-)
Thank you for your reply's ! |
|
|
Guest
|
|
Posted: Thu Jan 15, 2009 1:58 am |
|
|
Sorry, one more thing.
Do you know if there is some compatibile CCS driver for sony ericcson T100 LCD. I search for on the forum but whitout succes.
I am going to search for hardware connection.
Thank you. |
|
|
TYSON Guest
|
stuck, NOKIA 6100 knock off LCD to PIC18F4580 |
Posted: Fri Jan 23, 2009 4:03 pm |
|
|
Can anyone help?
I just purchased a nokia 6100 lcd last week from sparkfun and have modified code for my 18f4580 chipset, I have modified from the example provided with lcd breakaway board Marcus Russell wrote.
After modifiy code I have been abler been troubleshooting for several days now with no luck. All I have is a the backlight working with blue screen and I have verified that the clock signal from my pic looks correct.
Could someone take a look at my code to see if I am missing something?
I know its alot to ask.....
Also I have verified that the driver/controller is an EPSON S1D15G10
Code: | //// Marcus Russell, modified by Tyson
//// Russell Evolutions Inc.
//// Nokia 6100 LCD with Epson S1D15G10 Controller
//// sample initialization program for PIC16LF872 in CCS C 3-14-07
////
//// Based on Spark Fun Electronics Code by Owen Osborn 1-22-05
//// with thanks to David Carne of SFE for DISCTL help
//// and user 'Ttelmah' from CCS C forum for SSPEN bit idea for 9-bit hardware SPI
////
//// You are free to use this code for any purpose.
////
////
//// START OF HEADER FILE ////
//#include <16F872.h>
#include <18f4580.h>
//#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //Crystal Osc (20Mhz)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //Don't Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#device ICD=TRUE
//#fuses HS,NOWDT,NOPROTECT,NOLVP
//#use delay(clock=20000000)
#use delay(clock=20000000)
#define LCD_RESET PIN_D4
#define LCD_CS PIN_D5
#define SPI_CLK PIN_D6
#define SPI_DI PIN_D1 //unused
#define SPI_DO PIN_D7
#define REDLED PIN_E0
#define GRNLED PIN_E2
#define BLULED PIN_A2
#bit SSPEN = 0x14.5 // bit to turn on/off hardware SPI
// Epson S1D15G10 Command Set
#define DISON 0xaf
#define DISOFF 0xae
#define DISNOR 0xa6
#define DISINV 0xa7
#define SLPIN 0x95
#define SLPOUT 0x94
#define COMSCN 0xbb
#define DISCTL 0xca
#define PASET 0x75
#define CASET 0x15
#define DATCTL 0xbc
#define RGBSET8 0xce
#define RAMWR 0x5c
#define RAMRD 0x5d
#define PTLIN 0xa8
#define PTLOUT 0xa9
#define RMWIN 0xe0
#define RMWOUT 0xee
#define ASCSET 0xaa
#define SCSTART 0xab
#define OSCON 0xd1
#define OSCOFF 0xd2
#define PWRCTR 0x20
#define VOLCTR 0x81
#define VOLUP 0xd6
#define VOLDOWN 0xd7
#define TMPGRD 0x82
#define EPCTIN 0xcd
#define EPCOUT 0xcc
#define EPMWR 0xfc
#define EPMRD 0xfd
#define EPSRRD1 0x7c
#define EPSRRD2 0x7d
#define NOP 0x25
#define ENDPAGE 132
#define ENDCOL 130
//// START OF MAIN .C SOURCE FILE ////
//#include "<path to .h file cut from above>"
#use fast_io(C)
void pset(unsigned char color, unsigned char x, unsigned char y);
void spi_command(int);
void spi_data(int);
void main()
{
int16 i,x;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED, 0, 1);
set_tris_c(0x00); // all outputs, can change to mask only hardware SPI bits if needed
set_tris_d(0x00);
// reset display
for (x=0;x<10;x++){
output_low (SPI_CLK);
output_low (SPI_DO);
output_high (LCD_CS);
output_low (LCD_RESET);
delay_ms(100);
output_high (LCD_RESET);
//init'd, now drop CS to send commands/data and raise when finished
spi_command(DISCTL); // display control
spi_data(0x0C); // 12 = 1100 - CL dividing ratio [don't divide] switching period 8H (default)
spi_data(0x20); // 32 = (128/4)-1 (round up) number of display lines for scanning
spi_data(0x0C); // 12 = 1100 - number of lines to be inversely highlighted
spi_data(0x00);
spi_command(COMSCN); // common scanning direction
spi_data(0x01);
// 0 0 0 = 1 -> 80 81 -> 160
// 0 0 1 = 1 -> 80 81 <- 160
// 0 1 0 = 1 <- 80 81 -> 160
// 0 1 1 = 1 <- 80 81 <- 160
spi_command(OSCON); // internal oscialltor ON
spi_command(SLPOUT); // sleep out
spi_command(VOLCTR); // electronic volume, this is the contrast/brightness
spi_data(0x23); // volume (contrast) setting - fine tuning
spi_data(0x03); // internal resistor ratio - coarse adjustment
spi_command(PWRCTR); // power ctrl
spi_data(0x0f); //everything on, no external reference resistors
delay_ms(100);
spi_command(DISINV); // invert display mode
spi_command(DATCTL); // data control
spi_data(0x00); // normal display of page/column address, page scan direction
spi_data(0x00); // normal RGB arrangement
spi_data(0x01); // 8-bit grayscale
spi_command(RGBSET8); // setup 8-bit color lookup table [RRRGGGBB]
//RED
spi_data(0);
spi_data(2);
spi_data(4);
spi_data(6);
spi_data(8);
spi_data(10);
spi_data(12);
spi_data(15);
// GREEN
spi_data(0);
spi_data(2);
spi_data(4);
spi_data(6);
spi_data(8);
spi_data(10);
spi_data(12);
spi_data(15);
//BLUE
spi_data(0);
spi_data(4);
spi_data(9);
spi_data(15);
spi_command(NOP); // nop
pset(0b11100000, 0, 0); // red pixel top left (also sets start of bulk write, see pset routine)
for (i = 1; i <= 16900; i++) { // 130x130 = 16900
spi_data(0b11100000); // fill screen red
}
spi_command(DISON); // display on
//while (1) { // main program loop. just blinks A0 to show chip is running
for (i=0;i<3;i++){
output_toggle(REDLED);
output_toggle(GRNLED);
output_toggle(BLULED);
delay_ms(100);}
//}
output_high(REDLED);
}
}
void pset(unsigned char color, unsigned char x, unsigned char y){
// sets the starting page(row) and column (x & y) coordinates in ram,
// then writes the colour to display memory. The ending x & y are left
// maxed out so one can continue sending colour data bytes to the 'open'
// RAMWR command to fill further memory. issuing any other command
// finishes RAMWR.
x += 2; // for some reason starts at 2
spi_command(PASET); // page start/end ram
spi_data(x);
spi_data(ENDPAGE);
spi_command(CASET); // column start/end ram
spi_data(y);
spi_data(ENDCOL);
spi_command(RAMWR); // write
spi_data(color);
}
void spi_command(int dat){
output_low(LCD_CS); // enable chip
SSPEN = 0; // shut off hardware SPI allowing direct access to SPI in/out pins
output_low (SPI_DO); // output low on data out (9th bit low = command)
output_high (SPI_CLK);
delay_cycles(1); // send clock pulse
output_low (SPI_CLK);
SSPEN=1; // turn hardware SPI back on
spi_write(dat); // make PIC do the work for the command byte
output_high(LCD_CS); // disable
}
void spi_data(int dat){
output_low(LCD_CS); // enable chip
SSPEN = 0; // turn off hardware SPI allowing us direct access to SPI in/out pins
output_high (SPI_DO); // output high on data out (9th bit high = data)
output_high (SPI_CLK);
delay_cycles(1); // send clock pulse
output_low (SPI_CLK);
SSPEN=1; // turn hardware SPI back on
spi_write(dat); // make PIC do the work for the data byte
output_high(LCD_CS); // disable
} |
|
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Jan 23, 2009 4:15 pm |
|
|
Quote: | //#include <16F872.h>
#include <18f4580.h>
#bit SSPEN = 0x14.5 // bit to turn on/off hardware SPI |
Download the 18F4580 data sheet:
http://ww1.microchip.com/downloads/en/DeviceDoc/39637c.pdf
Look at this page on page 80 in the Acrobat Reader. It shows that
the SSPEN bit is in the SSPCON1 register.
Quote: | TABLE 5-2: REGISTER FILE SUMMARY (PIC18F2480/2580/4480/4580) (CONTINUED) |
Now look at this table on page 73 of the data sheet in the Acrobat reader.
What is the address of the SSPCON1 register for the 18F4580 ?
Find the correct address and modify the value shown in bold above.
Quote: | TABLE 5-1: SPECIAL FUNCTION REGISTER MAP FOR
PIC18F2480/2580/4480/4580 DEVICES |
|
|
|
hobiadami
Joined: 17 Oct 2006 Posts: 35 Location: City of Concrete
|
Nokia 6100 LCD |
Posted: Thu Jan 27, 2011 12:29 pm |
|
|
I'll try to interface the Nokia 6100 LCD to a pic 16F877a by using the CCS C software given at Sparkfun site.
Below are the images of the LCD that I found at a local cell phone spares shop for around 3.5$ each. It has got a green pcb and connecting wires so it should have an Epson controller. But on a page of LCD photos, an LCD similar to mine was listed as having the phillips controller. Is there a way to be sure? or can anyone verify it by its photos? Well I could have compiled the code and tested on the chip and LCD but asking on the forum might save some of my hair from going white I guess. Any help is appreciated. Thanks in advance.
http://img8.imageshack.us/i/dscn0005g.jpg/
http://img13.imageshack.us/i/dscn0007v.jpg/
http://img375.imageshack.us/i/dscn0006d.jpg/ |
|
|
|