![](templates/subSilver/images/CCSLogo.jpg) |
![CCS C Software and Maintenance Offers](templates/subSilver/images/forumAd6.jpg) |
View previous topic :: View next topic |
Author |
Message |
nachgot
Joined: 24 May 2010 Posts: 7
|
LCD+ADC ON PIC16F877a WORK FINE SIMULATION, BUT NOT IN BOARD |
Posted: Tue May 25, 2010 2:44 pm |
|
|
hi, I need a help with my PIC program.
The program read ADC channel, and i need to send the value to lcd, what i can view the value on lcd?
This is my main code:
Code: |
#include <16f877a.h>
#device adc=10
#use delay(clock=4000000)
#fuses XT,NOWDT,PUT
#include <mod_lcd2.c>
void inttoc(int aa){
for (i=0;i=4;i++){
}
main(){
long int valor;
int32 val32;
setup_ADC_ports (RA0_Analog);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
lcd_ini();
while(TRUE){
valor=read_adc();
if (valor) valor +=1;
val32= (valor*4+((int32)valor * 113)/128);
lcd_escreve("\f");
lcd_escreve("Valor: ");
lcd_escreve(("%d",val32));
delay_ms(2000);
}
}
|
This is my library code:
Code: |
/********************************************************/
/* MOD_LCD.C - Biblioteca de manipulação de módulo LCD */
/* */
/* Autor: Fábio Pereira */
/* */
/********************************************************/
// As definições a seguir são utilizadas para acesso aos pinos do display
#ifndef lcd_enable
#define lcd_enable pin_d1 // pino enable do LCD
#define lcd_rs pin_d0 // pino rs do LCD
#define lcd_d4 pin_d4 // pino de dados d4 do LCD
#define lcd_d5 pin_d5 // pino de dados d5 do LCD
#define lcd_d6 pin_d6 // pino de dados d6 do LCD
#define lcd_d7 pin_d7 // pino de dados d7 do LCD
#endif
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 linhas
#define lcd_seg_lin 0x40 // Endereço da segunda linha na RAM do LCD
// a constante abaixo define a seqüência de inicialização do módulo LCD
byte CONST INI_LCD[4] = {0x20 | (lcd_type << 2), 0xf, 1, 6};
void lcd_envia_nibble( byte dado )
// envia um dado de quatro bits para o display
{
// coloca os quatro bits nas saidas
output_bit(lcd_d4,bit_test(dado,0));
output_bit(lcd_d5,bit_test(dado,1));
output_bit(lcd_d6,bit_test(dado,2));
output_bit(lcd_d7,bit_test(dado,3));
// dá um pulso na linha enable
output_high(lcd_enable);
output_low(lcd_enable);
}
void lcd_envia_byte( boolean endereco, byte dado )
{
// coloca a linha rs em 0
output_low(lcd_rs);
// aguarda o display ficar desocupado
//while ( bit_test(lcd_le_byte(),7) ) ;
// configura a linha rs dependendo do modo selecionado
output_bit(lcd_rs,endereco);
delay_us(100); // aguarda 100 us
// caso a linha rw esteja definida, coloca em 0
// desativa linha enable
output_low(lcd_enable);
// envia a primeira parte do byte
lcd_envia_nibble(dado >> 4);
// envia a segunda parte do byte
lcd_envia_nibble(dado & 0x0f);
}
void lcd_ini()
// rotina de inicialização do display
{
byte conta;
output_low(lcd_d4);
output_low(lcd_d5);
output_low(lcd_d6);
output_low(lcd_d7);
output_low(lcd_rs);
output_low(lcd_enable);
delay_ms(15);
// envia uma seqüência de 3 vezes 0x03
// e depois 0x02 para configurar o módulo
// para modo de 4 bits
for(conta=1;conta<=3;++conta)
{
lcd_envia_nibble(3);
delay_ms(5);
}
lcd_envia_nibble(2);
// envia string de inicialização do display
for(conta=0;conta<=3;++conta) lcd_envia_byte(0,INI_LCD[conta]);
}
void lcd_pos_xy( byte x, byte y)
{
byte endereco;
if(y!=1)
endereco = lcd_seg_lin;
else
endereco = 0;
endereco += x-1;
lcd_envia_byte(0,0x80|endereco);
}
void lcd_escreve( char c)
// envia caractere para o display
{
switch (c)
{
case '\f' : lcd_envia_byte(0,1);
delay_ms(2);
break;
case '\n' :
case '\r' : lcd_pos_xy(1,2);
break;
case '\b' : lcd_envia_byte(0,0x10);
break;
default : lcd_envia_byte(1,c);
break;
}
} |
Thanks for all!! ![Very Happy](images/smiles/icon_biggrin.gif)
Last edited by nachgot on Wed May 26, 2010 1:41 pm; edited 2 times in total |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
![](templates/subSilver/images/spacer.gif) |
nachgot
Joined: 24 May 2010 Posts: 7
|
RESOLVED! |
Posted: Tue May 25, 2010 3:13 pm |
|
|
Thanks PCM! |
|
![](templates/subSilver/images/spacer.gif) |
nachgot
Joined: 24 May 2010 Posts: 7
|
library |
Posted: Wed May 26, 2010 1:40 pm |
|
|
This code works fine in my simulation in Proteus.
But in my protoboard, doesn't work...
My LCD use a KS0066U microcontroller, and i use a PIC 16F877A for project.
The LCD power up, but not appear the text.
I need a library for this microcontroller LCD or, a 8 bit library, for test in my protoboard again!
Thanks! ![Very Happy](images/smiles/icon_biggrin.gif) |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed May 26, 2010 3:04 pm |
|
|
Check the connections between the PIC and the LCD.
Check the contrast voltage on the LCD. Set it for 0.4 volts. |
|
![](templates/subSilver/images/spacer.gif) |
nachgot
Joined: 24 May 2010 Posts: 7
|
|
Posted: Thu May 27, 2010 6:21 am |
|
|
The connections between LCD and PIC, are all ok.
I used other port of PIC, with a LED, to test the clock too...And the led is blinking.
The contrast, i used a 10K potentiometer, and the LCD does not display characters...
My LCD display is: APEX AXSC162A, this library, works fine with my LCD?
I need the 8 bit library, to test again with my LCD.
Thank You! |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu May 27, 2010 11:52 am |
|
|
1. Post a list of the connections between the PIC and the LCD.
2. Post the #define statements that you have at the top of the Flex lcd driveres. |
|
![](templates/subSilver/images/spacer.gif) |
Abdulla M.A.
Joined: 28 Mar 2010 Posts: 30 Location: Baghdad, Iraq
|
|
Posted: Thu May 27, 2010 12:05 pm |
|
|
When you turn on the circuit, is there any segments or cursor appear
on the LCD???
did you set the LCD setting, like
1-clear LCD.
2-set cursor at location 0.
3- number of used lines.
..........
Abdulla _________________ "A scientist can discover a new star, but he cannot make one. He would have to ask an engineer to do that."
"For an optimist the glass is half full, for a pessimist it's half empty, and for an engineer is twice bigger than necessary." |
|
![](templates/subSilver/images/spacer.gif) |
nachgot
Joined: 24 May 2010 Posts: 7
|
|
Posted: Thu May 27, 2010 2:23 pm |
|
|
If i turn on the circuit, the lcd will turn on the backlight, and doesn't appear nothing...
Yes, i have set my LCD correctly...
RD4 -> D4
RD5 -> D5
RD6 -> D6
RD7 -> D7
RD0 -> RS
RD1 -> E
Ground -> D0,D1,D2,D3,RW
I don't have idea, whats the problem.
I tested with other 2 LCD Display 16x2, but anything is the same problem ![Sad](images/smiles/icon_sad.gif) |
|
![](templates/subSilver/images/spacer.gif) |
Ttelmah
Joined: 11 Mar 2010 Posts: 19365
|
|
Posted: Thu May 27, 2010 2:37 pm |
|
|
Look again at the bias connection. If you apply power to an LCD of this sort, with _nothing_ sent to it from a processor, it'll normally wake up displaying one line of black squares. If these are not visible, it implies the bias voltage is not right.
Do you have a data sheet for this display?. The only reference a quick search for ASXC162 returned, was for a graphical LCD, not a character LCD, which the driver you are trying to use is for....
Best Wishes |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu May 27, 2010 2:38 pm |
|
|
Quote: | Ground -> D0,D1,D2,D3,RW |
1. You don't have to connect pins D0-D3 to ground. The LCD has
internal pull-ups on those pins. They are not floating.
2. Did you edit the Flex LCD driver to comment out this line ?
Quote: | // #define USE_RW_PIN 1 |
If you ground the R/W pin, you must comment out that line,
as shown above.
For Ttelmah,
This link shows it's a 16x2 LCD:
http://www.apexdisplay.com/products/stn/character/162.php.htm |
|
![](templates/subSilver/images/spacer.gif) |
Ttelmah
Joined: 11 Mar 2010 Posts: 19365
|
|
Posted: Thu May 27, 2010 3:01 pm |
|
|
I'm only finding it in EE-Times Asia, as a 128*64.
Thanks for the link that it is a character display. :-)
Best Wishes |
|
![](templates/subSilver/images/spacer.gif) |
nachgot
Joined: 24 May 2010 Posts: 7
|
|
Posted: Thu May 27, 2010 9:15 pm |
|
|
Ttelmah wrote: | Look again at the bias connection. If you apply power to an LCD of this sort, with _nothing_ sent to it from a processor, it'll normally wake up displaying one line of black squares. If these are not visible, it implies the bias voltage is not right.
Do you have a data sheet for this display?. The only reference a quick search for ASXC162 returned, was for a graphical LCD, not a character LCD, which the driver you are trying to use is for....
Best Wishes |
The one line of black squares appear.
But only this.
AXSC162, uses KS066U controller. ![Sad](images/smiles/icon_sad.gif) |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu May 27, 2010 10:17 pm |
|
|
Black squares means the LCD is not initialized, or is not initialized correctly.
1. Post the #define statements that you have at the top of the Flex lcd driver file.
2. Did you edit the Flex LCD driver to comment out this line ?
Quote: | // #define USE_RW_PIN 1 |
If you ground the R/W pin, you must comment out that line,
as shown above. |
|
![](templates/subSilver/images/spacer.gif) |
nachgot
Joined: 24 May 2010 Posts: 7
|
|
Posted: Fri May 28, 2010 2:35 pm |
|
|
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#define LCD_E PIN_D1
#define LCD_RS PIN_D0
//#define LCD_RW PIN_A2
// 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 1
//========================================
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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
|