kevj
- 17th December 2007, 20:08
I'm pretty sure I've gone over this problem many times now and just can't figure out what's wrong. I can't get a simple input to register a button press.
I've got the button running straight from Vcc to the input with a 10k pull down on the output. I've put a scope probe right on the metal of the input pin itself and it's showing a very clean 5v on that pin when pressing the button so I know the circuit is good. The rest of the funtions (flash LED's) works fine also so I know the PIC is running.
I want the program to do something different when I startup with a button already pressed. Here's what I'm doing to test and no matter what I do, it's just not working.
The device is 16F684
define OSC 20 'Set PBP Osc clock to 20Mhz
CMCON0 = 0 'Turn off comparators, force set to 0 (off)
ANSEL = 0 'Turn off analog input for ports, set digital I/O
TRISA.0 = 1 'RA0 as Input
TRISA.1 = 1 'RA1 as Input
TRISA.2 = 1 'RA2 as Input
TRISC.0 = 1 'RC0 as Input
TRISC.1 = 0 'RC1 as Output
TRISC.2 = 0 'RC2 as Output
TRISC.3 = 0 'RC3 as Output
TRISC.4 = 0 'RC4 as Output
TRISC.5 = 0 'RC5 as Output
bpower VAR PORTA.0 'Power button RA0
boption VAR PORTA.1 'Option button RA1
Startup:
PAUSE 1000
IF PORTA.1=0 THEN
HIGH powerled
ENDIF
IF PORTA.1=1 THEN
HIGH linkled
ENDIF
No matter what I do, the powerled comes on, but Can't ever make the linkled come on (again it does work, later in the code I have it strobe between them and that works fine).
I've tried the above code with PORTA.1, with extra spaces between the = sign, using "bpower" and "boption" instead of the actual port names.
I've got the ANSEL set to 0 so they should be in digital mode. I've gone over all the other registers in the data sheet (noted in the I/O port section) and all of them seem to be where they should be.
Very frustrating. Please help. It's always something dumb that cuases the biggest troubles.
I've got the button running straight from Vcc to the input with a 10k pull down on the output. I've put a scope probe right on the metal of the input pin itself and it's showing a very clean 5v on that pin when pressing the button so I know the circuit is good. The rest of the funtions (flash LED's) works fine also so I know the PIC is running.
I want the program to do something different when I startup with a button already pressed. Here's what I'm doing to test and no matter what I do, it's just not working.
The device is 16F684
define OSC 20 'Set PBP Osc clock to 20Mhz
CMCON0 = 0 'Turn off comparators, force set to 0 (off)
ANSEL = 0 'Turn off analog input for ports, set digital I/O
TRISA.0 = 1 'RA0 as Input
TRISA.1 = 1 'RA1 as Input
TRISA.2 = 1 'RA2 as Input
TRISC.0 = 1 'RC0 as Input
TRISC.1 = 0 'RC1 as Output
TRISC.2 = 0 'RC2 as Output
TRISC.3 = 0 'RC3 as Output
TRISC.4 = 0 'RC4 as Output
TRISC.5 = 0 'RC5 as Output
bpower VAR PORTA.0 'Power button RA0
boption VAR PORTA.1 'Option button RA1
Startup:
PAUSE 1000
IF PORTA.1=0 THEN
HIGH powerled
ENDIF
IF PORTA.1=1 THEN
HIGH linkled
ENDIF
No matter what I do, the powerled comes on, but Can't ever make the linkled come on (again it does work, later in the code I have it strobe between them and that works fine).
I've tried the above code with PORTA.1, with extra spaces between the = sign, using "bpower" and "boption" instead of the actual port names.
I've got the ANSEL set to 0 so they should be in digital mode. I've gone over all the other registers in the data sheet (noted in the I/O port section) and all of them seem to be where they should be.
Very frustrating. Please help. It's always something dumb that cuases the biggest troubles.