View previous topic :: View next topic |
Author |
Message |
JairHdez
Joined: 30 Nov 2017 Posts: 9
|
PIC18F47k40 and GLCD with T6963C controller |
Posted: Thu Nov 30, 2017 3:00 pm |
|
|
Hello all,
I am new to ccs and this is the first time to work with an glcd. I'm tryin to use the driver provided in http://www.ccsinfo.com/forum/viewtopic.php?t=49389.
The parts of the code I changed were:
Code: |
//inside t6963.h
#byte PORTA = 0xF8D
#byte TRISA = 0xF88
...
#byte PORTB = 0xF8E
#byte TRISB = 0xF89
...
#byte PORTC = 0xF8F
#byte TRISC = 0xF8A
...
#byte PORTD = 0xF90
#byte TRISD = 0xF8B
...
#byte PORTE = 0xF91
#byte TRISE = 0xF8C
...
#define LCD_DATA PORTC // LCD data port
#define LCD_DATA_TRIS TRISC // LCD Data port Tris
#define STA0 PORTC0 // Check command execution capability
#define STA1 PORTC1 // Check data read/write capability
#define STA2 PORTC2 // Check Auto mode data read capability
#define STA3 PORTC3 // Check Auto mode data write capability
#define STA5 PORTC5 // Check controller operation capability
#define STA6 PORTC6 // Error flag. Used for screen peek and screen copy
#define STA7 PORTC7 // Check the blink condition
//Control pin setting
#define LCD_CE PORTD5 // LCD Enable control line pin number
#define LCD_CE_TRIS TRISD5 // LCD Enable control line direction pin #
#define LCD_RD PORTD6 // LCD Read control line pin number
#define LCD_RD_TRIS TRISD6 // LCD Read control line direction pin #
#define LCD_WR PORTD7 // LCD Write control line pin number
#define LCD_WR_TRIS TRISD7 // LCD Write control line irection pin #
#define LCD_CD PORTD4 // LCD Control/data Select line
#define LCD_CD_TRIS TRISD4 // LCD Control/data Select line direction
#define LCD_RST PORTD3 // LCD RST_ line
#define LCD_RST_TRIS TRISD3 // LCD RST_line direction
...
#define TEXT_HOME_ADDR 0x0000
#define GRH_HOME_ADDR 0x0200
#define CG_HOME_ADDR 0x1400
#define COLUMN 20 //Set column number to be e.g. 32 for 8x8 fonts, 2 pages
#define MAX_ROW_PIXEL 128 //MAX_ROW_PIXEL the physical matrix length (y direction)
#define MAX_COL_PIXEL 160 //MAX_COL_PIXEL the physical matrix width (x direction)
|
I changed those parts because the directions from portx and trisx are different in the pic I'm using and the one the driver was made for. Also my glcd is a cfag160128b and its dimensions are different.
When I try to compile the project I get the error *** Error 160 "glcd.c" Line 41(1,2): EXTERNal symbol not found mode
My whole project cnad be download here:
https://www.zipshare.com/download/eyJhcmNoaXZlSWQiOiIzNDVmMGFhMy1hZjExLTQ2MzctYjcwNC0wZGE4MjFhNmYzYzciLCJlbWFpbCI6ImphaXIuaGVybmFuZGV6QGRlb24uY29tLm14In0= |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9226 Location: Greensville,Ontario
|
|
Posted: Thu Nov 30, 2017 3:18 pm |
|
|
You must have changed something else....
Does the ORIGNAL driver and test program compile ?
If so then copy the original driver to say 'my_glcd.c' and then edit it NOT the original !
Recompile using your unmodified version, it should compile.
NOW do whatever editting you ned, recompile and test.
I don't have that GLCD, don't know which PIC you have so can't properly test the code. |
|
|
JairHdez
Joined: 30 Nov 2017 Posts: 9
|
|
Posted: Thu Nov 30, 2017 3:29 pm |
|
|
|
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9226 Location: Greensville,Ontario
|
|
Posted: Thu Nov 30, 2017 4:02 pm |
|
|
OK so now we know the 'glcdex1.c' is where the 'error' is...
1st line is
#include <16F877a.h>
which means 'glcdex1.c' is NOT a 'driver' rather it's a program. Specifically it's been designed for a 16F877 PIC. A 'driver' is a small program that control a device.
does the program 'glcdex1.c' compile ? if not, you'll have to decide to either fix that or try the one on the CCS forum but you cannot 'mix' the two of them ! Also you can't just 'copy' a proram for an 877 ,edit 'some of it' and expect that to work for another PIC , especially from a different 'family'. You have to read and understand every line of code, every register and every bit and then CONFIRM whatever changes YOU make are correct. Yes, it's a LOT of reading |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Nov 30, 2017 4:15 pm |
|
|
Quote: | When I try to compile the project I get the error *** Error
160 "glcd.c" Line 41(1,2): EXTERNal symbol not found mode
|
Edit t6963.h and remove the keyword 'extern' that is in front of the
four global variables.
I also get this message:
Quote: | *** Error 12 "pch_test.c" Line 36(41,50): Undefined identifier TO_16_BIT |
It's because you have typed in the constant incorrectly.
You have spelled it as "T oh", instead of "T zero".
After you fix those things, it should compile. |
|
|
JairHdez
Joined: 30 Nov 2017 Posts: 9
|
|
Posted: Thu Nov 30, 2017 4:18 pm |
|
|
I tried to compile the 'glcdex1.c' which it is using 't6963.c' and 't6963.h'. When I compile it I get me the 'error'. I'm not using the glcdex1.c in my project with the 47k40, I'm using the 't6963.c' and 't6963.h' in my program, the file I'm editing is the 't6963.h' I use in my program. Also I compare the 't6963.c' and 't6963.h' used in 'glcdex1.c' and the ones in the CCS forum using www.diffchecker.com and they are almost the same, the only difference is the CCS forum have one more functions to draw 3d figures. |
|
|
JairHdez
Joined: 30 Nov 2017 Posts: 9
|
|
Posted: Thu Nov 30, 2017 4:27 pm |
|
|
Thanks PCM, but this is weird,
Quote: |
I also get this message:
Quote:
*** Error 12 "pch_test.c" Line 36(41,50): Undefined identifier TO_16_BIT
It's because you have typed in the constant incorrectly.
You have spelled it as "T oh", instead of "T zero".
|
because if I try to compile with 'T(zero)' I get error, and if I compile with T(oh) The program compiles fine, and the timer runs fine in the hardware. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
JairHdez
Joined: 30 Nov 2017 Posts: 9
|
|
Posted: Thu Nov 30, 2017 4:45 pm |
|
|
My version is 5.070 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Nov 30, 2017 4:51 pm |
|
|
Your version is defective. It has both these constants spelled incorrectly:
Code: |
// One of the following may be OR'ed in with the above using |
#define TO_8_BIT 0x1000
#define TO_16_BIT 0x0000
|
Fix it by editing the 18F47K40.h file, and change those two lines to this:
Code: |
// One of the following may be OR'ed in with the above using |
#define T0_8_BIT 0x1000
#define T0_16_BIT 0x0000
|
|
|
|
JairHdez
Joined: 30 Nov 2017 Posts: 9
|
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9226 Location: Greensville,Ontario
|
|
Posted: Fri Dec 01, 2017 9:53 am |
|
|
OK.. let's talk basic HARDWARE...
What voltage is the PIC running at ?
What's the GLCD make/model/pcb ?
What voltage does it require? Most 'peripheral devices' these days are 3 volt and you can't connect them to a 5 volt PIC without 'logic level translation'.
Does the PIC actually run a 1Hz LED program? This is a basic test to 'flash an LED'. Yes, simple BUT it's really the first program to run as it'll confirm 1) hardware works, 2) compiler works, 3) programmer works.
Even IF the GLCD code is correct, you could have a small hardware problem.
Jay |
|
|
JairHdez
Joined: 30 Nov 2017 Posts: 9
|
|
Posted: Fri Dec 01, 2017 11:00 am |
|
|
OH I forgot to mention what glcd I'm using. I'm using the CFAG169128B, its datasheet says it can run with 5v. The pic is runnig at 5v. And the led is blinking at 1Hz I saw it in the oscilloscope.
All the hardware is connected in one protoboard. It is powered by a wall mounted power supply 9V/1.11A to two LM2596S modules, one to power the pic and the other to power the glcd. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19513
|
|
Posted: Fri Dec 01, 2017 11:07 am |
|
|
Why?.
The 2596 can deliver 3A. More than the wall wart can deliver. KISS and have a single supply.
Can you give a link to the LCD data sheet?. The part number is not being recognised. |
|
|
JairHdez
Joined: 30 Nov 2017 Posts: 9
|
|
|
|