Nokia 3310 LCD

General discussion on mikroC.
Author
Message
NeoMatrix
Posts: 128
Joined: 17 Mar 2005 17:28
Contact:

Nokia 3310 LCD

#1 Post by NeoMatrix » 25 Apr 2005 18:16

Hello Every One

in this site there is 1 example with using pic and nokia 3310 lcd i have use pic16f628 and nokia lcd in that examples its using portc as in 628 there is not portc so i replace with PortC to PortB is this will work or not

i maded the circuit also but its not showing anything i have color lcd so i want to use that can u tell me is i have make any changes

i am waiting eagerly

NeoMatrix
Posts: 128
Joined: 17 Mar 2005 17:28
Contact:

PIC16F628 With Nokia 3310 LCD

#2 Post by NeoMatrix » 25 Apr 2005 18:57

no one in this forms who knows how to connect not even the easypic2 user team come on guys plsssss


i want to connect nokia 3310 and 3150i lcd with pic16f628 in that example its using pic18f458 plsss suggest me

LGR
Posts: 3204
Joined: 23 Sep 2004 20:07

#3 Post by LGR » 25 Apr 2005 20:08

The guy who wrote all of the Nokia code is Anton. I suggest that you send a PM to him.
If you know what you're doing, you're not learning anything.

anton
Posts: 807
Joined: 23 Sep 2004 09:16
Location: South-Africa
Contact:

#4 Post by anton » 25 Apr 2005 20:14

Hi NeoMatrix

Yes, you can use PortB. In the projects list there is a connecting diagram.

The code for the two lcd's are totally different. I'm busy with the code for the color Nokia 3510i LCD. If it is finish i'll upload it to mikroElektronika.

Here is the other topic with some pictures
http://www.mikroe.com/forum/viewtopic.php?t=1213

The problem with the P16 is the table of chars that is bigger than 255 bytes. I'll update the code and post it. :wink:

Anton :)
Last edited by anton on 25 Apr 2005 20:42, edited 1 time in total.

NeoMatrix
Posts: 128
Joined: 17 Mar 2005 17:28
Contact:

I did same

#5 Post by NeoMatrix » 25 Apr 2005 20:40

i did the same i replace the PortC to PortB and deleted some fonts and image i am just using font then also its not displaying anything the screen is just blank

anton
Posts: 807
Joined: 23 Sep 2004 09:16
Location: South-Africa
Contact:

#6 Post by anton » 25 Apr 2005 20:49

i did the same i replace the PortC to PortB and deleted some fonts and image i am just using font then also its not displaying anything the screen is just blank
Did you insert a 0.47uF cap between gnd and pin 7. I see on the project page it says 47uF
Another proud user of LV 24-33A Development System and mikroPascal PRO for dsPIC :)
PortA not working? Add CMCON := 7; PortD not working? Add ADCON1 := 6;
To paste code on the forum, please use the [b] Code [/b] button !! ;)

NeoMatrix
Posts: 128
Joined: 17 Mar 2005 17:28
Contact:

no

#7 Post by NeoMatrix » 25 Apr 2005 21:35

thanks for ur reply just i have last query and i will wait for 2 days so that u can write that nokia3310 progam in pic16f628

no i don't have 0.47uf i connected 47uf i think thats the problem thats why its not displaying anything

if u don't mind i have one more query

-----------------------------------------------------------------------------
in this site Pic Microcontrollers that in assembly and in that examples
7.7 Shift registers
7.7.1 Input shift register 74HC597
7.7.2 Output shift register (74HC595) and its rewritten in assembly its driving the leds

An example of how to use the HC595 macro is given in the following program. Data from variable TX is serially transferred to shift register. LEDs connected to the parallel output of the shift register will indicate the state of the lines. In this example value 0xCB (1100 1011) is sent so that the seventh, sixth, third, first, and zero LEDs are illuminated.
the code is

=======================================
;HC595.inc
HC595 macro Var,Var1
Local Loop
movlw .8
movwf Var1

LOOP rlf Var,f
btfss STATUS,C
bcf Data
btfsc STATUS,C
bsf Data

bsf Clock
nop
bcf Clock

decfsz Var1,f
goto Loop

bsf Latch
nop
bcf Latch

endm
=======================================

=========================================
HC595.asm
;=================================================================================
; Lesson7a.asm - example of double byte arithmetic
; 8-Jan-2003
;=================================================================================
;
processor pic16f84a
include <p16f84a.inc>
__config _XT_OSC & _PWRTE_ON & _WDT_OFF
;=================================================================================
cblock 0x0C
TX
CountSPI
endc

;****** Declaring The hardware ******************





;****** Structure of program memory **************

ORG 0x00
goto Main
ORG 0x04
goto Main

include "HC595.inc"

Main
banksel TRISA
movlw b'00011000' ;Intialilizing Port A
movwf TRISA ;TRISA <- 0x18
banksel PORTA
clrf PORTA

movlw 0xcb
movwf TX ;Fill Tx Buffer
HC595 TX,CountSPI
Loop goto Loop

End

================================================
this is code and the link is
http://www.mikroelektronika.co.yu/engli ... hapter.htm

i make this circuit same and wrote the progam in MPLAB its say that 1st it will glow 6,7,5,4,3,2,1 but all leds glowing at a time i can't modify the progam so i need in basic so that i can implment the above program by using shift registers of 74hc595

i don't no much assembly so i want this same code in basic so that i can understand clearly and which type its using i mean its a USART or SPI if i understand this in basic i think its easy for me to design moving message display of 5 5X7 Dot Matrix Leds



plsssssssssss can any bedy have the above code in mikrobasic plssssssssssssssssssssssssss
-

NeoMatrix
Posts: 128
Joined: 17 Mar 2005 17:28
Contact:

Helo To Connect Nokia 3310 LCD

#8 Post by NeoMatrix » 25 Apr 2005 21:40

and one more thing in that source code there is 1 procedure when i try to comiple by changing the device pic16f628 its giving error on this procedure

Code: Select all

-------------------------------------
sub procedure NOK_Chr(dim symlcd as byte)
dim k as byte
dim m as word

      NOK_Write(0x00,1)           '  Space between characters
      for k = 1 to 5
           m = (symlcd - 32)
           m = m * 5
           m = m + k
           m = m - 1
           NOK_Write(Font1[m],1)
     next k
end sub
---------------------------------------------
sub procedure NOK_Chr(dim symlcd as byte)
dim k as byte
dim m as byte

      NOK_Write(0x00,1)           '  Space between characters
      for k = 1 to 5
           m = (symlcd - 32)
           m = m * 5
           m = m + k
           m = m - 1
           NOK_Write(Font1[m],1)
     next k
end sub
so i changed that m as word to byte then its cmpile success due u think that this also 1 problem

NeoMatrix
Posts: 128
Joined: 17 Mar 2005 17:28
Contact:

no response

#9 Post by NeoMatrix » 26 Apr 2005 00:48

what happened to every one no response til now i am waiting since 3 hrs no reponse came

anton
Posts: 807
Joined: 23 Sep 2004 09:16
Location: South-Africa
Contact:

#10 Post by anton » 26 Apr 2005 08:35

Hi NeoMatrix

I was sleeping :lol:


Yes. If you dont use a cap between 0.1uf and 0.47 the LCD won't switch on. It's something to do with the booster voltage.

The P16 can't use a word to point to a value in an array thats why you have to change it to a byte.

I've splitted up the array into two diffrent arrays.

The code is finish but i'll upload it if i get home.

Anton :)

NeoMatrix
Posts: 128
Joined: 17 Mar 2005 17:28
Contact:

Nokia 3310 LCD

#11 Post by NeoMatrix » 26 Apr 2005 16:08

Hello Anton


happy to hear that u completed the code i am eagerly waiting last nighi not sleep just waiting to get the reply from u only i will buy the capacitor now i have 4.7uf can i use this of 1 uf is it compulsory to put 0.47uf when i come to home pls upload that code mdaslamknl@yahoo.com

anton
Posts: 807
Joined: 23 Sep 2004 09:16
Location: South-Africa
Contact:

#12 Post by anton » 26 Apr 2005 16:45

Hi NeoMatrix

Here is the source for the P16

Make a new unit and save it as NOKIA_LCD_16.ppas.

Now remember to include (uses) NOKIA_LCD_16 and not NOKIA_LCD_18 any more.

Please change the const values to match the correct line. My connection is different, so you have to change these values. :!:

Code: Select all

eg. const  ___NCS	: byte = 3; // If CS is connected to PortB, 3
 or const  ___NCS	: byte = 1; // If CS is connected to PortB, 1

Code: Select all

unit NOKIA_LCD_16;
//****************************************************************************//
// Written by ANTON RIECKERT
// anton.rieckert@gmail.com
//****************************************************************************//
implementation
//****************************************************************************//
Const   // To match your connection
     ___NCS   : byte = 3;    // PortB,3   -  CS   - Chip Enable
     ___NRES  : byte = 5;    // PortB,5   -  RES  - Reset Input
     ___NSCLK : byte = 0;    // PortB,0   -  SCLK - Serial Clock Input
     ___NDC   : byte = 2;    // PortB,2   -  DC   - Data / Command
     ___NSDA  : byte = 1;    // PortB,1   -  SDA  - Serial Data Input
//****************************************************************************//
const font5x7_1 : array[230] of byte =
   (0x00, 0x00, 0x00, 0x00, 0x00 ,  // sp
    0x00, 0x00, 0x2f, 0x00, 0x00 ,  // !
    0x00, 0x07, 0x00, 0x07, 0x00 ,  // "
    0x14, 0x7f, 0x14, 0x7f, 0x14 ,  // #
    0x24, 0x2a, 0x7f, 0x2a, 0x12 ,  // $
    0xc4, 0xc8, 0x10, 0x26, 0x46 ,  // %
    0x36, 0x49, 0x55, 0x22, 0x50 ,  // &
    0x00, 0x05, 0x03, 0x00, 0x00 ,  // '
    0x00, 0x1c, 0x22, 0x41, 0x00 ,  // (
    0x00, 0x41, 0x22, 0x1c, 0x00 ,  // )
    0x14, 0x08, 0x3E, 0x08, 0x14 ,  // *
    0x08, 0x08, 0x3E, 0x08, 0x08 ,  // +
    0x00, 0x00, 0x50, 0x30, 0x00 ,  // ,
    0x10, 0x10, 0x10, 0x10, 0x10 ,  // -
    0x00, 0x60, 0x60, 0x00, 0x00 ,  // .
    0x20, 0x10, 0x08, 0x04, 0x02 ,  // /
    0x3E, 0x51, 0x49, 0x45, 0x3E ,  // 0
    0x00, 0x42, 0x7F, 0x40, 0x00 ,  // 1
    0x42, 0x61, 0x51, 0x49, 0x46 ,  // 2
    0x21, 0x41, 0x45, 0x4B, 0x31 ,  // 3
    0x18, 0x14, 0x12, 0x7F, 0x10 ,  // 4
    0x27, 0x45, 0x45, 0x45, 0x39 ,  // 5
    0x3C, 0x4A, 0x49, 0x49, 0x30 ,  // 6
    0x01, 0x71, 0x09, 0x05, 0x03 ,  // 7
    0x36, 0x49, 0x49, 0x49, 0x36 ,  // 8
    0x06, 0x49, 0x49, 0x29, 0x1E ,  // 9
    0x00, 0x36, 0x36, 0x00, 0x00 ,  // :
    0x00, 0x56, 0x36, 0x00, 0x00 ,  // ;
    0x08, 0x14, 0x22, 0x41, 0x00 ,  // <
    0x14, 0x14, 0x14, 0x14, 0x14 ,  // =
    0x00, 0x41, 0x22, 0x14, 0x08 ,  // >
    0x02, 0x01, 0x51, 0x09, 0x06 ,  // ?
    0x32, 0x49, 0x59, 0x51, 0x3E ,  // @
    0x7E, 0x11, 0x11, 0x11, 0x7E ,  // A
    0x7F, 0x49, 0x49, 0x49, 0x36 ,  // B
    0x3E, 0x41, 0x41, 0x41, 0x22 ,  // C
    0x7F, 0x41, 0x41, 0x22, 0x1C ,  // D
    0x7F, 0x49, 0x49, 0x49, 0x41 ,  // E
    0x7F, 0x09, 0x09, 0x09, 0x01 ,  // F
    0x3E, 0x41, 0x49, 0x49, 0x7A ,  // G
    0x7F, 0x08, 0x08, 0x08, 0x7F ,  // H
    0x00, 0x41, 0x7F, 0x41, 0x00 ,  // I
    0x20, 0x40, 0x41, 0x3F, 0x01 ,  // J
    0x7F, 0x08, 0x14, 0x22, 0x41 ,  // K
    0x7F, 0x40, 0x40, 0x40, 0x40 ,  // L
    0x7F, 0x02, 0x0C, 0x02, 0x7F);  // M

const font5x7_2 : array[225] of byte = (
    0x7F, 0x04, 0x08, 0x10, 0x7F ,  // N
    0x3E, 0x41, 0x41, 0x41, 0x3E ,  // O
    0x7F, 0x09, 0x09, 0x09, 0x06 ,  // P
    0x3E, 0x41, 0x51, 0x21, 0x5E ,  // Q
    0x7F, 0x09, 0x19, 0x29, 0x46 ,  // R
    0x46, 0x49, 0x49, 0x49, 0x31 ,  // S
    0x01, 0x01, 0x7F, 0x01, 0x01 ,  // T
    0x3F, 0x40, 0x40, 0x40, 0x3F ,  // U
    0x1F, 0x20, 0x40, 0x20, 0x1F ,  // V
    0x3F, 0x40, 0x38, 0x40, 0x3F ,  // W
    0x63, 0x14, 0x08, 0x14, 0x63 ,  // X
    0x07, 0x08, 0x70, 0x08, 0x07 ,  // Y
    0x61, 0x51, 0x49, 0x45, 0x43 ,  // Z
    0x00, 0x7F, 0x41, 0x41, 0x00 ,  // [
    0x55, 0x2A, 0x55, 0x2A, 0x55 ,  // 55
    0x00, 0x41, 0x41, 0x7F, 0x00 ,  // ]
    0x04, 0x02, 0x01, 0x02, 0x04 ,  // ^
    0x40, 0x40, 0x40, 0x40, 0x40 ,  // _
    0x00, 0x01, 0x02, 0x04, 0x00 ,  // '
    0x20, 0x54, 0x54, 0x54, 0x78 ,  // a
    0x7F, 0x48, 0x44, 0x44, 0x38 ,  // b
    0x38, 0x44, 0x44, 0x44, 0x20 ,  // c
    0x38, 0x44, 0x44, 0x48, 0x7F ,  // d
    0x38, 0x54, 0x54, 0x54, 0x18 ,  // e
    0x08, 0x7E, 0x09, 0x01, 0x02 ,  // f
    0x0C, 0x52, 0x52, 0x52, 0x3E ,  // g
    0x7F, 0x08, 0x04, 0x04, 0x78 ,  // h
    0x00, 0x44, 0x7D, 0x40, 0x00 ,  // i
    0x20, 0x40, 0x44, 0x3D, 0x00 ,  // j
    0x7F, 0x10, 0x28, 0x44, 0x00 ,  // k
    0x00, 0x41, 0x7F, 0x40, 0x00 ,  // l
    0x7C, 0x04, 0x18, 0x04, 0x78 ,  // m
    0x7C, 0x08, 0x04, 0x04, 0x78 ,  // n
    0x38, 0x44, 0x44, 0x44, 0x38 ,  // o
    0x7C, 0x14, 0x14, 0x14, 0x08 ,  // p
    0x08, 0x14, 0x14, 0x18, 0x7C ,  // q
    0x7C, 0x08, 0x04, 0x04, 0x08 ,  // r
    0x48, 0x54, 0x54, 0x54, 0x20 ,  // s
    0x04, 0x3F, 0x44, 0x40, 0x20 ,  // t
    0x3C, 0x40, 0x40, 0x20, 0x7C ,  // u
    0x1C, 0x20, 0x40, 0x20, 0x1C ,  // v
    0x3C, 0x40, 0x30, 0x40, 0x3C ,  // w
    0x44, 0x28, 0x10, 0x28, 0x44 ,  // x
    0x0C, 0x50, 0x50, 0x50, 0x3C ,  // y
    0x44, 0x64, 0x54, 0x4C, 0x44);  // z
//****************************************************************************//
Procedure NOK_Write (data, mode : byte);
Var i : short;
Begin
     // Pull DC high for DATA or low for COMMAND
     If TestBit(mode,0) = 1 then SetBit(PortB,___NDC);
     If TestBit(mode,0) = 0 then ClearBit(PortB,___NDC);

     ClearBit(PortB,___NCS);   //       CS = low

     // Clock in 8 bits of data - Highst bit first
     For i := 7 downto 0 do
     Begin
          ClearBit(PortB,___NSCLK);                             // SCLK = low
          If TestBit(Data,i) = 0 then ClearBit(PortB,___NSDA)  // SDA = low
                                 else SetBit(PortB,___NSDA);   // SDA = high
          SetBit(PortB,___NSCLK);                               // SCLK = high
    End;
    SetBit(PortB,___NCS);     //        CS = high
End;
//****************************************************************************//
// Draws a character on screen at current possition
Procedure NOK_Chr(symlcd : Byte);
Var l : Byte;
    m : Byte;
Begin
      NOK_Write(0x00,1);          // Space between characters

      If (symlcd < 78) then
      Begin
           For l := 1 to 5 do
           Begin
                m := (symlcd - 32);
                m := m * 5;
                m := m + l;
                m := m - 1;
                NOK_Write(Font5x7_1[m],1);
           End;
      End;

      If (symlcd > 77) then
      Begin
           symlcd := symlcd - 46;
           For l := 1 to 5 do
           Begin
                m := (symlcd - 32);
                m := m * 5;
                m := m + l;
                m := m - 1;
                NOK_Write(Font5x7_2[m],1);
           End;
      End;
End;
//****************************************************************************//
// Set the current position for data (0<= x <= 84,  0<= y <= 5)
Procedure NOK_GotoXY(x,y : byte);
Var n, o : Byte;
Begin
     n := x;
     o := y;
     SetBit(n,7);
     SetBit(o,6);
     NOK_Write (o,0);
     NOK_Write (n,0);
End;
//****************************************************************************//
// Inverts Display - Here is still a bug. It only inverst once and doesn't
// want to invert back again
Procedure NOK_Invert;
Begin
     NOK_Write(0x0D,0);
End;
//****************************************************************************//
// Clear the LCD Data memory
Procedure NOK_Clear;
Var p, q, r : Byte;
Begin
     ClearBit(PortB,___NSDA);   // SDA = low - Data bit is low
     SetBit(PortB,___NDC);     // DC = high - Data mode
     ClearBit(PortB,___NCS);   // CS = low  - Chip Enable

     For p := 1 to 6 do //  for 6 rows
     Begin
          For q := 1 to 84 do   //    for 84 colums
          Begin
               For r := 1 to 8 do   //   for 8 loop (8 bits)
               Begin
                    ClearBit(PortB,___NSCLK);   //  SCLK = low  - Serial Clock Input
                    SetBit(PortB,___NSCLK);     //  SCLK = high - Serial Clock Input
               End;
          End;
     End;
     SetBit(PortB,___NCS);   // CS = high  - Chip Enable
     NOK_GotoXY(0,0);
End;
//****************************************************************************//
// Writes a string at x, y position (maks 14 char per row)  (0 <= x <= 84 , 0 <= y <= 5)
Procedure NOK_Out(x, y : byte; var sentance : array[14] of char);
Var v : byte;
Begin
     NOK_GotoXY(x,y);
     For v := 1 to length(sentance) do
     Begin
          NOK_Chr(sentance[v]);
     End;
End;
//****************************************************************************//
// Writes a string at current position
Procedure NOK_Out_CP(var sentance : array[14] of char);
Var v : byte;
Begin
     For v := 1 to length(sentance) do
     Begin
          NOK_Chr(sentance[v]);
     End;
End;
//****************************************************************************//
// LCD Initialization
Procedure NOK_Init;
Begin
     // Set initial status of LCD pins
     ClearBit(PortB,___NSCLK);          //    SCLK = low
     ClearBit(PortB,___NSDA);           //    SDA  = low
     ClearBit(PortB,___NDC);            //    DC   = low
     ClearBit(PortB,___NCS);            //    CS   = low
     ClearBit(PortB,___NRES);           //    RES  = low

     // Toggle LCD reset
     Delay_ms(200);
     ClearBit(PortB,___NRES);       //     RES = low
     Delay_ms(500);
     SetBit(PortB,___NRES);         //     RES = high

     SetBit(PortB,___NCS);         //     CS  = high
     NOK_Write(0x21,0);       //     Extended commands
     NOK_Write(0xc5,0);       //     LCD Vop
     NOK_Write(0x06,0);       //     Temp coef
     NOK_Write(0x13,0);       //     LCD Bias 1:48
     NOK_Write(0x20,0);       //     Standard commands
     NOK_Write(0x0c,0);       //     Normal Mode

     // Clear and position at top of LCD
     NOK_Clear;
     NOK_GotoXY(0,0);
End;
end.

Anotn :)

NeoMatrix
Posts: 128
Joined: 17 Mar 2005 17:28
Contact:

Nokia 3310 LCD

#13 Post by NeoMatrix » 26 Apr 2005 17:10

Thanks also anton

i appreciate ur effort

Hello anton

i appreciate ur effort and very thankful to u i am really sorry to disturb u as u told in the form i have to connect the capacitor of 0.1uf to 0.47uf in between this can i use 4.7 of its compulsory to use that only and how can i know that lcd is good not damage may be thats also 1 reason that its not displaying anything i will buy everything new and test when i have problems i will mail u u can reply me after ur exams finish u need to concentrate ur studies

once again sorry for disturbing u

good luck for ur exams freind

NeoMatrix :idea:

anton
Posts: 807
Joined: 23 Sep 2004 09:16
Location: South-Africa
Contact:

#14 Post by anton » 26 Apr 2005 20:25

The datasheet says 1uF. I'm using a 0.47uF and it's working fine.

And yes, I broke 3 LCD before i got the code right. It won't just blow for nothing. Program the pic, make sure the wires at the back don't toutch each other and then het the reset button a few times to send the init a few times after each other. :twisted: :twisted:

Hope you get it right.

Talk Later
Anton

NeoMatrix
Posts: 128
Joined: 17 Mar 2005 17:28
Contact:

Nokia 3310 LCD

#15 Post by NeoMatrix » 26 Apr 2005 21:01

yes i did the same connected the 0.47uf from 6th pin to 7th pin then also no displays i checked the all supplies with multimeter its display the voltages also in each pic i think the lcd is not good a i will buy new one then try thanks alot for helping me till now


bye

Post Reply

Return to “mikroC General”