You can still use a Timer interrupt with my KEYPAD.BAS routine. Just use the DEFINE SCAN_ONCE 1 in your settings.
Thread:
http://www.picbasic.co.uk/forum/showthread.php?t=3250
i've attach the latest version... just in case of.
You can still use a Timer interrupt with my KEYPAD.BAS routine. Just use the DEFINE SCAN_ONCE 1 in your settings.
Thread:
http://www.picbasic.co.uk/forum/showthread.php?t=3250
i've attach the latest version... just in case of.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Thanks for the quick response.
I have tried the code and it works. However there is an issue. I have a 4x4 setup but it acts like a 4x3 keypad. I can get digits 1 through 12. If I change the define as below to 4 col then nothing works. Im still checking but I think this is the same hardware setup I had before and it worked as a 4x4. Any suggestions?
TRISB = %11110000 'PortB first four bits outputs second four bits inputs
include "KeyPad.bas"
DEFINE KEYPAD_ROW 4 ' 4 ROW keypad
DEFINE KEYPAD_ROW_PORT PORTB ' ROW port = PORTB
DEFINE KEYPAD_ROW_BIT 4 ' ROW0 = PORTB.4
'DEFINE KEYPAD_COL 3 ' 3 COL keypad
DEFINE KEYPAD_COL 4 ' 4 COL keypad
DEFINE KEYPAD_COL_PORT PORTB ' COL port = PORTB
DEFINE KEYPAD_COL_BIT 1 ' COL0 = PORTB.1
DEFINE KEYPAD_DEBOUNCEMS 20 ' debounce delay = 20 50 mSec
DEFINE SCAN_ONCE 1
OPTION_REG.7=0 ' Enable internal crap pull-up
ADCON1=7 ' disable ADCs
PORTB = 0 '
ByteA var byte '
Thanks,
Homerclese
mmm, it's working here as suppose to. Using your code above on a 16F877, i tried with...
make sure you have disable the LVP mode and there's no faulty I/OsCode:<font color="#000000"> @ __CONFIG _XT_OSC & _LVP_OFF <font color="#000080">INCLUDE </font>"C:\PBP_PROG\INCLUDE_ROUTINES\KeyPad.bas" <font color="#000080">INCLUDE </font>"c:\PBP_PROG\EASYPIC4\LCD4.bas" <font color="#000080">DEFINE </font>KEYPAD_ROW 4 <font color="#008000">' 4 ROW keypad </font><font color="#000080">DEFINE </font>KEYPAD_ROW_PORT PORTB <font color="#008000">' ROW port = PORTB </font><font color="#000080">DEFINE </font>KEYPAD_ROW_BIT 4 <font color="#008000">' ROW0 = PORTB.4 </font><font color="#000080">DEFINE </font>KEYPAD_COL 3 <font color="#008000">' 4 COL keypad </font><font color="#000080">DEFINE </font>KEYPAD_COL_PORT PORTB <font color="#008000">' COL port = PORTB </font><font color="#000080">DEFINE </font>KEYPAD_COL_BIT 1 <font color="#008000">' COL0 = PORTB.0 </font><font color="#000080">DEFINE </font>KEYPAD_DEBOUNCEMS 20 <font color="#008000">' debounce delay = 20 50 mSec </font><font color="#000080">DEFINE </font>SCAN_ONCE 1 OPTION_REG.7=0 <font color="#008000">' Enable internal crap pull-up </font>ByteA <font color="#000080">VAR BYTE PAUSE </font>500 <font color="#000080">LCDOUT </font>$FE,1,"PRESS ANY KEY" Start: @ READKEYPAD _ByteA <font color="#000080">IF </font>ByteA <font color="#000080">THEN LCDOUT </font>$FE,$C0,<font color="#000080">REP </font>" "\2,$FE,$C0, <font color="#000080">DEC </font>ByteA <font color="#000080">ENDIF GOTO </font>Start
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
I will check further. I am using the f877 pic. Note that I tried changing this line to "4". Is that wrong?
DEFINE KEYPAD_COL 3 ' 4 COL keypad
Looking at it now I realize that its probably 0 to 3 which is 4 states or columns. So the above line should stay as it is?
Thanks,
Homerclese
using the previous but changing KEYPAD_ROW or KEYPAD_COL number it always work for me. Yeah, even a 1X1 keypad work... wooohoo how handy it is
Now, using a TIMER0 interrupt and DT-INT14, it looks like
and it's still working.Code:<font color="#000000"> @ __CONFIG _XT_OSC & _LVP_OFF <font color="#000080">INCLUDE </font>"C:\PBP_PROG\INCLUDE_ROUTINES\KeyPad.bas" <font color="#000080">INCLUDE </font>"c:\PBP_PROG\EASYPIC4\LCD4.bas" <font color="#000080">INCLUDE </font>"C:\PBP_PROG\INCLUDE_ROUTINES\DT_INTS-14.bas" <font color="#000080">INCLUDE </font>"C:\PBP_PROG\INCLUDE_ROUTINES\ReEnterPBP.bas" <font color="#000080">DEFINE </font>KEYPAD_ROW 4 <font color="#008000">' 4 ROW keypad </font><font color="#000080">DEFINE </font>KEYPAD_ROW_PORT PORTB <font color="#008000">' ROW port = PORTB </font><font color="#000080">DEFINE </font>KEYPAD_ROW_BIT 4 <font color="#008000">' ROW0 = PORTB.4 </font><font color="#000080">DEFINE </font>KEYPAD_COL 3 <font color="#008000">' 4 COL keypad </font><font color="#000080">DEFINE </font>KEYPAD_COL_PORT PORTB <font color="#008000">' COL port = PORTB </font><font color="#000080">DEFINE </font>KEYPAD_COL_BIT 1 <font color="#008000">' COL0 = PORTB.0 </font><font color="#000080">DEFINE </font>KEYPAD_DEBOUNCEMS 20 <font color="#008000">' debounce delay = 20 50 mSec </font><font color="#000080">DEFINE </font>SCAN_ONCE 1 <font color="#000080">ASM INT_LIST macro INT_Handler TMR0_INT, _TMR0Interrupt, PBP, yes endm INT_CREATE ENDASM </font>OPTION_REG=%00000100 <font color="#008000">' Enable weak-pull ups </font> <font color="#008000">' Prescaler assigned to Timer0 </font> <font color="#008000">' rate 1:32 </font>ByteA <font color="#000080">VAR BYTE </font>TMR0IF <font color="#000080">VAR </font>INTCON.2 <font color="#000080">PAUSE </font>500 <font color="#000080">LCDOUT </font>$FE,1,"PRESS ANY KEY" @ INT_ENABLE TMR0_INT Start: <font color="#000080">IF </font>ByteA <font color="#000080">THEN LCDOUT </font>$FE,$C0,<font color="#000080">REP </font>" "\2,$FE,$C0, <font color="#000080">DEC </font>ByteA <font color="#000080">ENDIF GOTO </font>Start TMR0Interrupt: @ READKEYPAD _ByteA TMR0=0 @ INT_RETURN
do a I/O test with LEDs and push button to see if there's any faulty.
KEYPAD_COL 3 really set the KeyPAd to 3 column, DEFINE KEYPAD_COL_BIT 1 will imply you're connected to PORTB.1, PORTB.2, PORTB.3
same for rows, DEFINE KEYPAD_ROW 4, 4 rows, DEFINE KEYPAD_ROW_BIT 4, so PORTB.4, PORTB.5, PORTB.6 and PORTB.7.
Last edited by mister_e; - 26th April 2007 at 17:13.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
The problem is that PORTB.0 not detecting
I swapped B.o and B.1 keypad lines - problem remains with B.0
Changed to another 16f877 chip - problem remains with B.0
I noticed your last post about
DEFINE KEYPAD_COL_BIT ' COL 1 = PORTB.1.
I am connected to PORTB pins 0 through 3. I had the setting above and changed it to:
DEFINE KEYPAD_COL_BIT 0 ' COL0 = PORTB.0
PORTB.0 now works but B.3 now does not.
It's like I'm scanning only 3 bits
Thanks,
Homerclese
0-3 is 4 bits, so you have to configure to 4 COLUMNs.
maybe 4 colums and 3 row now?
on the other hand my comments in the code above are not right... sorry
for a whole 4X4 keypad it should be
i have this setup on a EASYPIC4 board and their 4X4 keypad like thisCode:DEFINE KEYPAD_ROW 4 ' 4 ROW keypad DEFINE KEYPAD_ROW_PORT PORTB ' ROW port = PORTB DEFINE KEYPAD_ROW_BIT 4 ' ROW0 = PORTB.4 DEFINE KEYPAD_COL 4 ' 4 COL keypad DEFINE KEYPAD_COL_PORT PORTB ' COL port = PORTB DEFINE KEYPAD_COL_BIT 0 ' COL0 = PORTB.0 DEFINE KEYPAD_DEBOUNCEMS 20 ' debounce delay = 20 mSec DEFINE SCAN_ONCE 1
And using the internal pull-up.
their keypad schematic is bellow
http://www.mikroe.com/pdf/keypad_board_schematic.pdf
Last edited by mister_e; - 26th April 2007 at 20:18.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Bookmarks