View previous topic :: View next topic |
Author |
Message |
Guest3 Guest
|
3x4 Keypad and 2x16 LCD |
Posted: Fri Apr 17, 2009 2:16 am |
|
|
Hi guys !
I am using one simulator software for simulating LCD and keypad.
http://tinypic.com/view.php?pic=29cxg6b&s=5
In this simulator I can define port's for each key.
ON/OFF is used as key press simulation.
So I took the flex_kbd driver as example for setting the port connection.
flex_kbd.c
Code: |
#define col0 PIN_E1
#define col1 PIN_A5
#define col2 PIN_C0
#define row0 PIN_E0
#define row1 PIN_C2
#define row2 PIN_C1
#define row3 PIN_E2
|
I set first key ( col0,row0) but when I run this program nothing happens: Code: |
#include <16F877.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#include <LCD.c>
#include <flex_kbd.c>
void main() {
char k;
lcd_init();
kbd_init();
lcd_putc("\f *LCD is ON* ...\n");
while (TRUE) {
k=kbd_getc();
if(k!=0)
if(k=='*')
lcd_putc('\f');
else
lcd_putc(k);
}
}
|
What's wrong with this code ? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Apr 17, 2009 11:39 am |
|
|
Two weeks ago, you asked this same question. You were given good
answers to solve the problem. You ignored those answers.
Here is the thread:
http://www.ccsinfo.com/forum/viewtopic.php?t=38401
Your schematic in your link above still has the same problem.
You are using pull-down resistors on the row pins, but they should be
pull-up resistors. |
|
|
Guest3 Guest
|
|
Posted: Tue Apr 21, 2009 3:01 am |
|
|
You are absolutely correct. I asked the same question because i have to wait for new hw design. So i was thinking to make the program on the simulator. I apologize for "double posting" but it was in good manner. |
|
|
John P
Joined: 17 Sep 2003 Posts: 331
|
|
Posted: Tue Apr 21, 2009 10:13 am |
|
|
And I'll say again what I said in the other thread--you're wasting components if you use resistors at all. Use Port B and enable the internal pull-ups. That's exactly what they're for. |
|
|
Guest
|
|
Posted: Wed Apr 22, 2009 3:58 am |
|
|
I agree with you and i will remove resistors in the next hardware design. In the meantime how to configure the program to read the keypad presented by simulator.
I can not change simulator settings, so i can't remove resistors.
All i can change are the ports settings. |
|
|
gonlo82
Joined: 10 Dec 2010 Posts: 5
|
Suggestions for Proteus simulations |
Posted: Fri Dec 10, 2010 3:44 pm |
|
|
Hello,
i've tried a lot of time to run this example in Proteus_7.2_SP6 and i don´t success. The last time I've copied your code and it was compiled without errors. I copied the diagram too and the lcd doesn´t show anything.
could you give me some help? _________________ I m working for me in electrical troobleshooting. Pic's Matter interest me a lot to improve my skills. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Dec 10, 2010 5:27 pm |
|
|
I don't have Proteus so there's no way for me to help you.
In other words, if Proteus has some bug, how can I see it ?
But I'll try anyway. Post your schematic. |
|
|
gonlo82
Joined: 10 Dec 2010 Posts: 5
|
The wiring diagram |
Posted: Mon Dec 13, 2010 5:13 am |
|
|
I send you the wiring diagram from proteus environment.
I attach you the code too. (this is an example from a pdf found in taringa website useful for amaters.)
Code: |
#include <16F876.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG//,NOPBADEN //No Debug mode for ICD
#use delay(clock=4000000)
#define LCD_TYPE 2
#define use_portb_lcd TRUE
#define use_portb_kbd TRUE
#include <lcd.c>
#include <kbd.c>
#define LCD_ENABLE_PIN PIN_C2
#define LCD_RS_PIN PIN_C1
//#define LCD_RW_PIN PIN_B6
#define LCD_DATA4 PIN_C4
#define LCD_DATA5 PIN_C5
#define LCD_DATA6 PIN_C6
#define LCD_DATA7 PIN_C7
void main()
{
char k;
int x;
lcd_init();
kbd_init();
port_b_pullups(TRUE);
lcd_putc("\fEscriba...\n");
while (TRUE)
{
k=kbd_getc();//lcd envia caracteres en ASCII a k
x=k-48;// se resta 48d=(0Ascii)=30hex
if(k!=0)
{
if(k=='*')
lcd_putc('\f');
else
lcd_putc(k);//imprime cararter
delay_ms(500);
printf(lcd_putc,"\f Car=%c",k);//imprime cararter
delay_ms(500);
printf(lcd_putc,"\f Car=%u",k);//imprime valor ASCII
delay_ms(500);
printf(lcd_putc,"\f Num=%u",x);//imprime valor numerico del caracter
delay_ms(500);
lcd_putc("\fListo...\n");
}
}
}
|
[img]
http://img697.imageshack.us/img697/9002/kbdlcdpic16f877.jpg
[/img] _________________ I m working for me in electrical troobleshooting. Pic's Matter interest me a lot to improve my skills. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Dec 13, 2010 2:52 pm |
|
|
Your schematic shows that pins A and B on the keypad are connected
together by mistake. Edit your schematic and fix it.
Quote: | #define LCD_ENABLE_PIN PIN_C2
#define LCD_RS_PIN PIN_C1
//#define LCD_RW_PIN PIN_B6
#define LCD_DATA4 PIN_C4
#define LCD_DATA5 PIN_C5
#define LCD_DATA6 PIN_C6
#define LCD_DATA7 PIN_C7 |
What is this code doing in your program ? Your schematic shows all
connections go to Port B. Why do you have this code above, which shows
mostly connections to Port C ? Delete all of the above lines. |
|
|
gonlo82
Joined: 10 Dec 2010 Posts: 5
|
LCD+KEYBORD PIC16F876 ON PROTEUS |
Posted: Mon Dec 13, 2010 8:25 pm |
|
|
The mistake on Proteus is corrected and the lines related with port c are erased. Do you have the same result during simulation? Persist the same error when the lcd doesn't show the value of each key.
In case of a bug in Proteus, do you have any suggestion to solve it? _________________ I m working for me in electrical troobleshooting. Pic's Matter interest me a lot to improve my skills. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 14, 2010 2:00 pm |
|
|
Post your compiler version and I'll test the ex_lcdkb.c program in
hardware for your version. |
|
|
gonlo82
Joined: 10 Dec 2010 Posts: 5
|
Proteus_7.2_SP6the version |
Posted: Tue Dec 14, 2010 2:41 pm |
|
|
the version is Proteus_7.2_SP6. I will follow trying because known people could fix it but in Assemble code.
Thanks from now _________________ I m working for me in electrical troobleshooting. Pic's Matter interest me a lot to improve my skills. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 14, 2010 2:43 pm |
|
|
Not Proteus. The CCS compiler version. |
|
|
|