|
|
View previous topic :: View next topic |
Author |
Message |
pekka1234
Joined: 28 May 2017 Posts: 83
|
PIC18F26K80 IO problem |
Posted: Mon Jan 01, 2024 7:22 am |
|
|
I have designing a new project. It need a small 2*16 LCD RC+8+2A-BIY-ESA. It doesn't work, because Enable pin doesn't work like other pins from 5V to 0. It works from 1.5V-0.9V.
I have looked other operations for this pin, but I have not found.
The only is SDO, but it is removed,
Maybe someone can help me?
Here is the code
#include <18F26K80.h>
#device adc=12
#use delay(internal=16MHz) // 500kHz, 1MHz, 2MHz,4MHx, 8MHz. 16MHz, 32MHz
int16 setup_oscillator(OSC_HFINTRC_16MHZ); //
#fuses NOWDT,NOPROTECT,noMCLR
#use rs232(UART2, baud=9600,ERRORS, STREAM = DEBUG) //debug print through the UART2 to PC
#use rs232(UART , baud=115200 ,errors,bits=8,parity=N, stop=1,receive_buffer=256)
void main(void)
{
port_a_pullups(0xFF) ; // these goes switch
// port_c_pullups(0xFF) ;
setup_ccp1(CCP_OFF ) ;
setup_ccp2(CCP_OFF ) ;
setup_ccp3(CCP_OFF ) ;
setup_ccp4(CCP_OFF ) ;
setup_ccp5(CCP_OFF ) ;
setup_spi(SPI_DISABLED );
setup_comparator(NC_NC_NC_NC );
setup_adc(ADC_OFF );
output_drive(PIN_C5);
while(1)
{
output_high(pin_C5); // RS =0
fprintf(DEBUG,"SPI disabled\r" );
fprintf(DEBUG,"Testing C5=1\r" );
delay_ms(1000);
output_low(pin_C5); // RS =0
fprintf(DEBUG,"Testing C5=0\r" );
delay_ms(1000);
}
}
I have two boards and they work similarly.
The schematic in here
http://probyte.fi/Can5.jpg
Regards
Pekka |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19539
|
|
Posted: Mon Jan 01, 2024 7:42 am |
|
|
Can you post a link to the data sheet for this display?. Your part number
doesn't match any I can find.
I suspect you are not understanding the pin connections it needs. It sounds
as if the pin you think is enable, is actually the Vee or Vo pin. If so this is a
bias voltage to adjust the contrast, not an enable.
No logic input to a display will require you to use a voltage of the range you
are describing. The logic inputs will accept logic signals.
As a further comment, an RC0802 LCD will be an 8*2, not a 16*2 display.
So for example:
[url]
https://www.tme.eu/gb/details/rc0802a-biy-esx/lcd-alphanumeric-displays/raystar-optronics/
[/url]
The Vo connection will normally be done with just two fixed resistors or
a pot. Once set you don't have to change it on modern displays. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9243 Location: Greensville,Ontario
|
|
Posted: Mon Jan 01, 2024 8:05 am |
|
|
hay, this old dinosaur FOUND the LCD datasheet ! I used the part number in the schematic he provided !
Seems like a 'normal' LCD module to me, 'low' is 0.6 or less, high is 70% of VDD or more.
Perhaps there's some internal peripheral that needs to be disabled for the LCD to work properly or perhaps a wiring error ? |
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
PIC18F26K80 IO problem |
Posted: Mon Jan 01, 2024 8:18 am |
|
|
I have CCS program version 5.115
Pekka |
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
|
Posted: Mon Jan 01, 2024 9:32 am |
|
|
Sorry, I mean 2*8 LCD
Pekka |
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
|
Posted: Mon Jan 01, 2024 9:35 am |
|
|
Well, I have two PCBs.
And I have tested both.
I think it is my fault, but I asked help.
I have always got help here.
Pekka |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9243 Location: Greensville,Ontario
|
|
Posted: Mon Jan 01, 2024 9:40 am |
|
|
You can probably use the CCS 'lcd driver', though I prefer the 'flex LCD driver'.
It's in the 'code library' as a 'sticky', top of the list as 'flexible LCD driver'.
download it, then make a COPY, call it 'myLCD...' or similar. Add THAT version to your program, make appropriate changes to pin uses. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19539
|
|
Posted: Mon Jan 01, 2024 9:59 am |
|
|
OK.
Standard 8*2 text LCD. The enable pin is normal logic. Doesn't use 1.5 to
0.9v. If you look it says it uses H->L voltage levels.
What on earth makes you think this pin needs these low levels?.
It doesn't.
I'd suggest you use the flex LCD driver in the code library.
Nothing you post shows you trying to talk to the LCD. All you are doing is
operating pin C5. C5 is the register select line. Won't do anything till
the LCD is initialised.
Just use the 16*2 driver, and change the setup lines to:
Code: |
#define LCD_DB4 PIN_C0
#define LCD_DB5 PIN_C1
#define LCD_DB6 PIN_C2
#define LCD_DB7 PIN_C3
#define LCD_E PIN_C4
#define LCD_RS PIN_C5
//#define USE_LCD_RW 1 //Remmed out, this is 6pin interface
|
You must pause for at least a couple of hundred mSec before trying to
talk to the LCD. |
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
|
Posted: Mon Jan 01, 2024 11:56 am |
|
|
Thank you for help Thelmah.
There was some mistake in my LCD driver .
I got almost two line of displays, but not perfect
The third and forth letter is blank on the both rows.
Look the picture
http://probyte.fi/LCDDriver.jpg
I took RW off and replayed it with suitable delay ( from some cycles to 1ms)
It may be wrong.
The main code is here
It works first rows with 5 sec delay, but then it started to run all the letters,
although I put it only 8 letter per row.
The rows go right, but the characters rolls from start charters to the end,
#include <18F26K80.h>
#device adc=12
#use delay(internal=16MHz) // 500kHz, 1MHz, 2MHz,4MHx, 8MHz. 16MHz, 32MHz
int16 setup_oscillator(OSC_HFINTRC_16MHZ); //
#fuses NOWDT,NOPROTECT,noMCLR
#use rs232(UART2, baud=9600,ERRORS, STREAM = DEBUG) //debug print through the UART2 to PC
#use rs232(UART , baud=115200 ,errors,bits=8,parity=N, stop=1,receive_buffer=256)
#include "flexdriver.c"
void main(void)
{
int i;
port_a_pullups(0xFF) ; // these goes switch
// port_c_pullups(0xFF) ;
setup_ccp1(CCP_OFF ) ;
setup_ccp2(CCP_OFF ) ;
setup_ccp3(CCP_OFF ) ;
setup_ccp4(CCP_OFF ) ;
setup_ccp5(CCP_OFF ) ;
setup_spi(SPI_DISABLED );
setup_comparator(NC_NC_NC_NC );
setup_adc(ADC_OFF );
lcd_init_custom_chars() ;
fprintf(DEBUG,"LCD_INIT\r" );
delay_ms(1000);
lcd_init() ;
lcd_gotoxy( 1, 1) ; // goto to place 1 to row 1
lcd_putc( 'A');
lcd_putc( 'B');
lcd_putc( 'C');
lcd_putc( 'D');
lcd_putc( 'E');
lcd_putc( 'F');
lcd_putc( 'G');
delay_ms(5000);
lcd_gotoxy( 1, 2) ;
lcd_putc( 'H');
lcd_putc( 'I');
lcd_putc( 'J');
lcd_putc( 'K');
lcd_putc( 'L');
lcd_putc( 'M');
;
lcd_putc( 'N');
delay_ms(5000);
while(1)
{
for(i=0;3<8+3; i++)
{
fprintf(DEBUG,"Row 1 %c\r" , i+'A');
lcd_putc( i+'C');
fprintf(DEBUG,"Row 1 %d %c\r" , i, i+'A');
}
lcd_gotoxy( 1, 2) ;// goto to place 1 to row 2
for(i=0;3<8+3; i++)
{
lcd_putc( i+'H');
fprintf(DEBUG,"row 2 Print %d %c\r" , i, i+'H');
}
}
}
Maybe I have to put my modified LCD code also
Pekka |
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
PIC18F26K80 IO problem |
Posted: Mon Jan 01, 2024 1:35 pm |
|
|
Thelmah
I got the problem, It was the other LCD, because the other LCD works normally.
I will clarify this.
Picrure
http;//probyte.fi/Picture1.jpg
There seems to be no problem in LCD.
==
There was in Can driver a problem.
I was bought TJA1040 drivers from TME (a Polish Electronic shop),
It looked like normal SMD 8-in device, but when I tried to put it to PCB. I can't know where is pin 1.
I tried to get help from TME. but they send only their sales address.
I tried to clarify from NPX, which is a manufacture of the device.
They send to me a datasheet, where there was pin 1 clearly marked,
Then I send to NPX picture of my device.
Then they explained which way the device is put on plastic roll.
So if you try to put this device with your hand is very difficult.
There was no marking of the pin 1.
Regards
Pekka |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19539
|
|
Posted: Tue Jan 02, 2024 5:36 am |
|
|
Pin 1 is not marked. The _row_ that is 1...4 is marked. If you look at the
top edges, one is beveled. This edge is the one that has the 1..4 legs.
This is a standard marking for some SO8 packages. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|