|
|
View previous topic :: View next topic |
Author |
Message |
pekka1234
Joined: 28 May 2017 Posts: 83
|
LCD and PIC16F2620 problem |
Posted: Sun May 05, 2024 10:05 am |
|
|
Hey. I have tried to solve this problem about two weeks.
I do level meter, but then I needed to use PIC18F2620.
It seems to be simple to replace PIC16F886.
My meter is here http://probyte.fi/LEVELMeter.jpg
and schematic is here http://probyte.fi/OK.jpg
I can't get simple LCD init to work.
I have tried with old (but PIC16) codes, changed to PIC18F code.
The LCD do not convert to 2 row and doesn't show any code.
How ever I have got LCDInit to work once, but I have not source code any more.
Have anybody a PIC18F and LCD code?
Or can you help me.
Pekka
Here is my code:
Code: |
/*=============================================
Project: Angelmeter with Murata sensor SCL3300-10
LCD RC-2002A-BIW-ES 2*20 characters
5V VCC
===================================================*/
#include <18F2620.h>
#device ADC=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT //Code not protected from reading
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES BROWNOUT //Reset when brownout detected
#FUSES PUT //Power Up Timer
#FUSES NOCPD //No EE protection
//#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOMCLR //Master Clear pin not enabled
#FUSES NOWRT
#fuses NOWDT //no restart_wdt
#include "pic18reg.h"
#use delay(clock=8000000, restart_wdt)
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7,errors, bits=8) // RS232 asetukset
#define LCD_ROW1 0x80
#define LCD_ROW2 0xA8
#define LCD_ROW3 0xC0
#bit PWM_BIT = PORTC.2
#byte SSPCON1 =0xfc6
#bit SSPEN =SSPCON1.5
#define CMD 0
#define DATA 1
#BIT DB3 = PORTB.3
#BIT DB2 = PORTB.2
#BIT DB1 = PORTB.1
#BIT DB0 = PORTB.0
#BIT RS = PORTB.4
#BIT ENABLE = PORTC.5
#include <string.h>
#include <ctype.h>
#BIT Underled = PORTC.0
#BIT SOUND = PORTC.2
#BIT Overled = PORTC.3
#define BUTTON PIN_B5 //button
#define PROS 0x25
#define EE_DELAY 3
#define EE_OFFSETHI 0
#define EE_OFFSETLO 1
#define EE_ANGLEMODE 4
#define EE_HYSTER 5
#define EE_TARGET 6
#define EE_TARGETDES 7
#define PAUSE_RELOAD 5
#define OFFSETVAL PIN_A7
#define HYSTERVAL PIN_A5
#define DISPLAYMODE PIN_A4
#define DISPLAYTEMP PIN_A3
#define DELAYVAL PIN_A2
#define TARGETKUL PIN_A1
#INCLUDE <stdlib.h>
char LCDBuffer[26];
unsigned int8 delay; //
int count, pauseTime =25,onsound=1;
unsigned int8 counter;
#define MAXCOUNT 5
int16 table[MAXCOUNT+1];
char c; //
void decode_message ( ) ;
void DisplayHyster();
int1 start=0;
void printlcd1();
void printLcd2();
void readsetup(void);
void clear_lcd();
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM ADdEss m
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Mode 4-bit, 2 rows = 0x28
0xc, // dislay on
1, // clear display
6 // move cusor pn step forwardsiirrä
};
/*=============================
==========================*/
void lcd_send_nibble(int8 nibble)
{
if ( nibble &1)
DB0 =1;
else
DB0 =0;
if ( nibble &2)
DB1 =1;
else
DB1 =0;
if ( nibble &4)
DB2 =1;
else
DB2 =0;
if ( nibble &8)
DB3 =1;
else
DB3 =0;
delay_us(1);
set_tris_c(0);
ENABLE =1;
output_high( PIN_C5);
delay_us(20);
ENABLE =0;
output_low( PIN_C5);
delay_us(10);
}
/*==============================================
========================================*/
void lcd_send_byte(unsigned int8 ASCII_CHAR, unsigned int8 n)
{
RS=1;
ENABLE=1;
if(ASCII_CHAR) // ASCII Data?
RS=1; // RS mode =1
else
RS=0; // RS_MODE =00 eli LCD command
delay_us(20);
ENABLE =0;
lcd_send_nibble(n >> 4); // Ensin Hi nibble
lcd_send_nibble(n & 0xf); // siten LOW nibble
if(!ASCII_CHAR)
delay_ms(1);
else
delay_ms(1); // 60 us riittää
}
/**********************************
init LCD
*********************************/
void lcd_init(void)
{
unsigned int8 i;
RS=0;
ENABLE =0;
delay_ms(20);
for(i=0 ;i < 3; i++)
{
lcd_send_nibble(0x03);
delay_ms(10);
}
lcd_send_nibble(0x02);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(CMD, LCD_INIT_STRING[i]);
delay_ms(10);
}
}
void row1( void) {
lcd_send_byte(CMD, LCD_ROW1);
}
/*void row1_5( void) {
lcd_send_byte(CMD, LCD_ROW1+8);
}
*/
void row2( void) {
lcd_send_byte(CMD, LCD_ROW2);
}
void clear_lcd(void) {
lcd_send_byte(CMD,1); // clear LCD
}
/*================
Display
==============*/
void printlcd1( void) {
unsigned int8 i=0;
char c;
row1();
for ( i=0; i<strlen(LCDBuffer); i++) {
c=LCDBuffer[i];
lcd_send_byte(DATA,c);
}
}
void printLcd2( void) {
unsigned int8 i,c;
row2();
for ( i=0; i<strlen(LCDBuffer); i++) {
c=LCDBuffer[i];
lcd_send_byte(DATA,c);
}
}
void lcddelayTxtRow2 ( void) {
sprintf(LCDbuffer, "Delay %ds " , delay);
printLcd2();// disply the rwault 2. row
}
// init Hardware
void initHardware ( void)
{
setup_oscillator(OSC_8MHZ);
restart_wdt();
restart_wdt();
setup_comparator( NC_NC_NC_NC);
setup_spi(FALSE); // THis must be before TRIS command !!
port_b_pullups(TRUE); // INTCON2.7 =0
set_pwm1_duty(520);
set_tris_a(0b11111111);
set_tris_b(0b11100000);
set_tris_c(0b000001111);
// enable_interrupts(INT_RDA );
// enable_interrupts(INT_TIMER0);
// enable_interrupts(GLOBAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256| RTCC_8_BIT);
setup_timer_2(T2_DIV_BY_16,255,1); //
pauseTime=0;
count=0;
setup_adc( ADC_CLOCK_INTERNAL );
setup_adc_ports( AN0 | VSS_VDD );
set_adc_channel(0);
SSPEN =0;
}
#INT_RDA
void receive (void)
{
}
#int_timer0
void t0_isr(void) {
if( count) {
count--;
return;
}
if(pausetime)
--pausetime;
else {
pausetime=5;
onsound= !onsound;
}
}
void logo( void)
{
sprintf( LCDBuffer,"Level meter");
printlcd1();
sprintf( LCDBuffer,"Probyte ");
printLcd2();
delay_ms(500);
}
/*********************************
**********************************/
void main(void)
{ int i;
delay_ms(1);
initHardware ();
restart_wdt();
Overled=1; // leda off
Underled=1; // leda off
counter=1;
start =0; // arRT INTERRUPT
count=0; // h
lcd_init(); // THE VEEY IMPORTANT FUCTION
printf("\rLCD init end");
for(i=0;i<MAXCOUNT;i++)
table[i]=0;//
while(1)
{
logo ();
delay_ms(500);
printf("\rProgram start ");
}
} |
And PIC18reg.h is here
Code: |
/*#include "pic18reg.h"
// 5.5.2024
*/
#byte DFLTCON = 0xF60
#BYTE CCP1CON = 0xFBD
#bit FLT3EN = DFLTCON.5
#BIT FLT2EN = DFLTCON.4
#BIT FLT1EN = DFLTCON.3
#BYTE CCPI1CON =0xFBE
#BYTE CCPI2CON =0xFBA
#BYTE PWM1CON =0xFB7
#BYTE T0CON = 0xFB5
#BYTE PORTA = 0x0F80
#BYTE PORTB = 0x0F81
#BYTE PORTC = 0x0F82
#BYTE PORTD = 0x0F83
#BYTE PORTE = 0x0F84
#BYTE TRISA = 0x0F92
#BYTE TRISB = 0x0F93
#BYTE TRISC = 0x0F94
#BYTE TRISD = 0x0F95
#bit TRIS5 =TRISC.5
#bit TRIS4 =TRISC.4
#BYTE LATB = 0xF8A
// rekisteriportit
#BYTE LATA = 0x0F89
#BYTE T3CON = 0xFB1
int16 MAXCNT;
#byte MAXCNT = 0xF64
#byte MAXCNTH = 0xF65
#byte MAXCNTL = 0xF64
#BIT CCP1_INPUT =PORTC.2
#BIT CCP2_INPUT =PORTC.1
#byte POSCNT = 0xF66
#byte POSCNTH = 0xF67
#BYTE POSCNTL = 0xF66
#byte VREG = 0xF68
#byte VREGH = 0xF69
#byte VREGL = 0xF68
|
|
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
LCD PIC18F2620 |
Posted: Sun May 05, 2024 10:24 am |
|
|
I have 5.115 version of CCS
Pekka |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19529
|
|
Posted: Sun May 05, 2024 11:59 am |
|
|
Your code will probably not work, because you have an INT_RDA, that does
not call a getc inside. If this triggers your processor will be hung.
INT_RDA, cannot clear the interrupt, unless the character is read. So
if this gets called, it'll be called 'forever' and all other operations will
stop......
On the LCD code, there is standard code with the compiler, or use
PCM_Programmer's LCD code in the code library. This works and in
simple reliable code. |
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
|
Posted: Sun May 05, 2024 12:33 pm |
|
|
I deleted INT_RDA off, but it has no meaning
The serial code is following:
LCD init end
Program start
Program start
Program start
Program start
==
The CCS LCD example is quite different and much more complicated.
I have tried to use it but can't get it work.
But I try it again. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9232 Location: Greensville,Ontario
|
|
Posted: Sun May 05, 2024 2:08 pm |
|
|
#1 delete ALL WDT code !!! You do NOT need the WDT at this stage and it can cause all sorts of weird problems.
#2 I have used PCM P's LCD driver on PIC18F46K22 products for years. It WORKS.
#3 delete ALL timers and other code, not necessary and can cause 'problems'
Concentrate on getting the LCD to display properly. I call that the 'Hello World' program.
When that works, copy, rename and edit the new program for more code. That way you can go back to the WORKING 'Hello Program' and try again. |
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
|
Posted: Mon May 06, 2024 12:42 am |
|
|
Temtronic
Thank for help.
I removed all WDT functions and cleared other not used parameters
I tried to load it to my PCB, but it doesn't work.
[/code]
/*=============================================
Project: Angelmeter with Murata sensor SCL3300-10
LCD RC-2002A-BIW-ES 2*20 characters
5V VCC
code:lcd.c and pic18reg.c
===================================================*/
#include <18F2620.h>
#device ADC=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT //Code not protected from reading
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES BROWNOUT //Reset when brownout detected
#FUSES PUT //Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOMCLR //Master Clear pin not enabled
#FUSES NOWRT
#include "pic18reg.h"
#use delay(clock=8000000)
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7,errors, bits=8) // RS232 asetukset
#define LCD_ROW1 0x80
#define LCD_ROW2 0xA8
#define LCD_ROW3 0xC0
#bit PWM_BIT = PORTC.2
#byte SSPCON1 =0xfc6
#bit SSPEN =SSPCON1.5
#define CMD 0
#define DATA 1
#BIT DB3 = PORTB.3
#BIT DB2 = PORTB.2
#BIT DB1 = PORTB.1
#BIT DB0 = PORTB.0
#BIT RS = PORTB.4
#BIT ENABLE = PORTC.5
#include <string.h>
#include <ctype.h>
#BIT Underled = PORTC.0
#BIT SOUND = PORTC.2
#BIT Overled = PORTC.3
#define BUTTON PIN_B5 //button
#INCLUDE <stdlib.h>
char LCDBuffer[26];
unsigned int8 delay; //
#define MAXCOUNT 5
char c; //
void printlcd1();
void printLcd2();
void clear_lcd();
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM ADdEss m
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Mode 4-bit, 2 rows = 0x28
0xc, // dislay on
1, // clear display
6 // move cusor pn step forwardsiirrä
};
/*=============================
==========================*/
void lcd_send_nibble(int8 nibble)
{
if ( nibble &1)
DB0 =1;
else
DB0 =0;
if ( nibble &2)
DB1 =1;
else
DB1 =0;
if ( nibble &4)
DB2 =1;
else
DB2 =0;
if ( nibble &8)
DB3 =1;
else
DB3 =0;
delay_us(1);
set_tris_c(0);
ENABLE =1;
output_high( PIN_C5);
delay_us(20);
ENABLE =0;
output_low( PIN_C5);
delay_us(10);
}
/*==============================================
========================================*/
void lcd_send_byte(unsigned int8 ASCII_CHAR, unsigned int8 n)
{
RS=1;
ENABLE=1;
if(ASCII_CHAR) // ASCII Data?
RS=1; // RS mode =1
else
RS=0; // RS_MODE =00 or LCD command
delay_us(20);
ENABLE =0;
lcd_send_nibble(n >> 4); // first Hi nibble
lcd_send_nibble(n & 0xf); // then LOW nibble
delay_ms(1); // 60 us is enough
}
/**********************************
init LCD
*********************************/
void lcd_init(void)
{
unsigned int8 i;
RS=0;
ENABLE =0;
delay_ms(20);
for(i=0 ;i < 3; i++)
{
lcd_send_nibble(0x03);
delay_ms(10);
}
lcd_send_nibble(0x02);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(CMD, LCD_INIT_STRING[i]);
delay_ms(10);
}
}
void row1( void) { // go row 1
lcd_send_byte(CMD, LCD_ROW1);
}
void row2( void) {// go to row2
lcd_send_byte(CMD, LCD_ROW2);
}
void clear_lcd(void) {
lcd_send_byte(CMD,1); // clear LCD
}
/*================
Display
==============*/
void printlcd1( void) {
unsigned int8 i=0;
char c;
row1();
for ( i=0; i<strlen(LCDBuffer); i++) {
c=LCDBuffer[i];
lcd_send_byte(DATA,c);
}
}
void printLcd2( void) {
unsigned int8 i,c;
row2();
for ( i=0; i<strlen(LCDBuffer); i++) {
c=LCDBuffer[i];
lcd_send_byte(DATA,c);
}
}
void lcddelayTxtRow2 ( void) {
sprintf(LCDbuffer, "Delay %ds " , delay);
printLcd2();// disply the rwault 2. row
}
// init Hardware
void initHardware ( void)
{
setup_oscillator(OSC_8MHZ);
setup_comparator( NC_NC_NC_NC);
setup_spi(FALSE); // THis must be before TRIS command !!
port_b_pullups(TRUE); // INTCON2.7 =0
set_tris_b(0b11000000);
set_tris_c(0b00001111);
SSPEN =0;
}
/*********************************
**********************************/
void main(void)
{
delay_ms(100);
initHardware ();
lcd_init(); // THE VEEY IMPORTANT FUCTION
printf("\rLCD init end");
while(1)
{
sprintf( LCDBuffer,"Hello World");
printlcd1();
delay_ms(500);
printf("\rProgram start ");
}
} [/code]
I have tried to load CCS LCD program, but it is very complicated.
Can you help me how to modify this program to 18F2620 and 4 bit data in port B.
RB4 - PIN_B0, RB5-PIN_B1, RB6 -PIN_B2, RB7-PIN B3, RS -PIN_B4 and Enable PIN_C5. WR pin is not used.
Pekka |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19529
|
|
Posted: Mon May 06, 2024 1:42 am |
|
|
As you have been told twice, use PCM_Programmers LCD driver (from the
code library here). This is much more flexible than the standard driver,
and is one of the really reliable bits of code, that makes life easier for
everyone. |
|
|
dyeatman
Joined: 06 Sep 2003 Posts: 1934 Location: Norman, OK
|
|
Posted: Mon May 06, 2024 3:25 am |
|
|
I have used PCM programmers LCD driver on numerous 16/18/24 and DsPICs
with no issues. Much easier than the CCS LCD driver and highly recommended. _________________ Google and Forum Search are some of your best tools!!!! |
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
|
Posted: Mon May 06, 2024 5:49 am |
|
|
OK
I found flex_lcd.c in here.
I modified it and tried with my LCD driver.
It worked !
The display was not clear, but there was some charters.
And two rows!
Then I tried it second and more times, but not more working?
Pekka
Code: |
// flex_lcd.c
// 6.5.2024
#include <18F2620.H>
#FUSES INTRC_IO
#device ADC=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT //Code not protected from reading
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES BROWNOUT //Reset when brownout detected
#FUSES PUT //Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOMCLR //Master Clear pin not enabled
#FUSES NOWRT
#use delay(internal = 8000000)
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7,errors, bits=8) // RS232 asetukset
void lcd_init();
void lcd_putc(string );
//==========================
void main()
{
delay_ms(1000);
printf("\rstart");
lcd_init(); // Always call this first.
printf("\rinit done");
lcd_putc("\fHello World\n");
lcd_putc("Line Number 2");
printf("\rAll done");
while(1);
}
// These pins are for the Microchip PicDem2-Plus board,
// which is what I used to test the driver. Change these
// pins to fit your own board.
#define LCD_DB4 PIN_B3
#define LCD_DB5 PIN_B2
#define LCD_DB6 PIN_B1
#define LCD_DB7 PIN_B0
#define LCD_E PIN_C5
#define LCD_RS PIN_B4
#define LCD_RW PIN_C4
// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.
#define USE_LCD_RW 0
//========================================
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc, // Display on
1, // Clear display
6 // Increment cursor
};
//-------------------------------------
void lcd_send_nibble(int8 nibble)
{
// Note: !! converts an integer expression
// to a boolean (1 or 0).
output_bit(LCD_DB4, !!(nibble & 1));
output_bit(LCD_DB5, !!(nibble & 2));
output_bit(LCD_DB6, !!(nibble & 4));
output_bit(LCD_DB7, !!(nibble & 8));
delay_cycles(1);
output_high(LCD_E);
delay_us(2);
output_low(LCD_E);
}
//-----------------------------------
// This sub-routine is only called by lcd_read_byte().
// It's not a stand-alone routine. For example, the
// R/W signal is set high by lcd_read_byte() before
// this routine is called.
#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
int8 retval;
// Create bit variables so that we can easily set
// individual bits in the retval variable.
#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3
retval = 0;
output_high(LCD_E);
delay_cycles(1);
retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);
output_low(LCD_E);
return(retval);
}
#endif
//---------------------------------------
// Read a byte from the LCD and return it.
#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
int8 low;
int8 high;
output_high(LCD_RW);
delay_cycles(1);
high = lcd_read_nibble();
low = lcd_read_nibble();
return( (high<<4) | low);
}
#endif
//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);
delay_us(60);
if(address)
output_high(LCD_RS);
else
output_low(LCD_RS);
delay_cycles(1);
delay_cycles(1);
output_low(LCD_E);
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
//----------------------------
void lcd_init(void)
{
int8 i;
output_low(LCD_RS);
printf("\rlow lcd_E\r");
output_low(LCD_E);
delay_ms(15);
for(i=0 ;i < 3; i++)
{
lcd_send_nibble(0x03);
delay_ms(5);
printf("%x send 3\r",i);
// getch();
}
printf("send2\r");
lcd_send_nibble(0x02);
// getch();
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(0, LCD_INIT_STRING[i]);
printf("lcd_send_byte %x\r",LCD_INIT_STRING[i]);
// If the R/W signal is not used, then
// the busy bit can't be polled. One of
// the init commands takes longer than
// the hard-coded delay of 60 us, so in
// that case, lets just do a 5 ms delay
// after all four of them.
//getch();
delay_ms(10);
}
}
//----------------------------
void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}
//-----------------------------
void lcd_putc(char c)
{
switch(c)
{
case '\f':
lcd_send_byte(0,1);
delay_ms(2);
break;
case '\n':
lcd_gotoxy(1,2);
break;
case '\b':
lcd_send_byte(0,0x10);
break;
default:
lcd_send_byte(1,c);
break;
}
}
|
|
|
|
pekka1234
Joined: 28 May 2017 Posts: 83
|
|
Posted: Mon May 06, 2024 12:55 pm |
|
|
LCD problem solved!
I got today LCD working.
It was Enable bit was open.
I had not operating PIN_C4 and I changed it to PIN_C5,
but it was under trimmer potentio meter and it was difficult to put in operation.
Anyway I am very thankful all who tried to help me.
I will return to my original program.
Here is my working LCD
http://probyte.fi/LCDDISPLAY.jpg
Pekka Finland |
|
|
|
|
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
|