TRISIO on PIC12F683, I have a bit stuck midway
I'm having a hard time trying to figure out why I have pin 7 at 1.247 volts when it has a 10K pull up resistor to Vdd (3.86V). It is connected to a momentary switch. I have disconnected pin 7 from the switch and the switch goes to 3.8 volts with the pull up.
It looks like I have pin 7 GPIO.0 set as an output.
Overview: I have two LED's and two switches. Switch S2 works OK electrically. But S1 is stuck in mid voltage and never goes high. It goes to zero when I press it. Also, It is never read as low even when I press it or the other switch S2
I can't figure out why this is happening.
Here is the code:
Code:
----------------------------------------------------------------------------------------------------------
' PIC12F683 SOIC-8 Pin Assignments:
' Pin 1 Vdd +3.8V Power, Battery Voltage +2.5 - 4.5V
' Pin 2 GP5 Out GreenLED Driven by 2N2222, High = LED ON
' Pin 3, GP4 Out RedLED Drivven by 2N2222, High = LED ON
' Pin 4 GP3 In Switch (S1), Low = Pressed
' Pin 5, GP2 N/C
' Pin 6, GP1 N/C
' Pin 7, GP0 In Switch (S2), Low = Pressed
' Pin 8, Vss Supply Ground
'
' Using INTRC Oscillator
INCLUDE "modedefs.bas" ' Mode definitions for Serout
DEFINE OSC 4
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF
CMCON=7
INTCON = %10001000 'internal oscillator
OSCCON = %01110000 ' 8mHz
CMCON0 = 7 'Comparators off
GPIO = %00000000 'outputs low
TRISIO = %00001111 'GP0-GP3 as input
'======== SET UP VARIABLES & INITIAL VALUES ====================================
GreenLED CON 5 ' Alias Green LED Drive, High = LED ON, Pin 2 Green
RedLED CON 4 ' Alias Red LED Drive, High= LED ON, Pin 3 Red
SwitchS1 VAR GPIO.0 ' Alias Lip Switch, Low = Pressed, Pin 4
SwitchS2 VAR GPIO.2 ' Alias Switch S1, Low = Pressed, Pin 5
'Pin 4 is set for external MCLR and has a 5.9K pull up
N VAR BYTE ' Counting Variable, used in Auto-OFF Routine
Low GreenLED
Low RedLED
N=0
StartLoop:
N=N+1
High GreenLED
Low RedLED
PAUSE 1000
If S1 = 0 Then N=0
If S2 = 0 Then N=0
Low GreenLED
High RedLED
PAUSE 1000
If N=10 Then
Low GreenLED
Low RedLED
NAP 7
EndIF
GoTo StartLoop ' Repeat
END
TRISIO on PIC12F683, I still have an input problem
I still can't read momentary push buttons on GPIO.0 and GPIO.3. I simplified the code. I think (and could be wrong) that PBP sets the TRISIO bits depending on if the High or Low is used or if the pin is used in an If statement.
Here is the simplified code that doesn't work yet.
' PIC12F683 SOIC-8 Pin Assignments:
' Pin 1 Vdd +3.8V Power, Battery Voltage +2.5 - 4.5V
' Pin 2 GP5 Out GreenLED Driven by 2N2222, High = LED ON
' Pin 3, GP4 Out RedLED Drivven by 2N2222, High = LED ON
' Pin 4 GP3 In Switch (S1), Low = Pressed
' Pin 5, GP2 N/C
' Pin 6, GP1 N/C
' Pin 7, GP0 In Switch (S2), Low = Pressed
' Pin 8, Vss Supply Ground
'
' Using INTRC Oscillator
INCLUDE "modedefs.bas" ' Mode definitions for Serout
DEFINE OSC 4
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_ON & _CP_OFF
INTCON = %10001000 'internal oscillator
OSCCON = %01100000 ' 4mHz
CMCON0 = 7 'Comparators off
GPIO = %00000000 'outputs low
'TRISIO = %00001111 'GP0-GP3 as input
TRISL = %1111
TRISH = %1111
'======== SET UP VARIABLES & INITIAL VALUES ====================================
GreenLED VAR GPIO.5 ' Alias Green LED Drive, High = LED ON, Pin 2 Green
RedLED VAR GPIO.4 ' Alias Red LED Drive, High= LED ON, Pin 3 Red
SwitchS1 VAR GPIO.0 ' Alias Switch S2, Low = Pressed, Pin 7
SwitchS2 VAR GPIO.2 ' Alias Switch S1, Low = Pressed, Pin 5
'Pin 4 is set for external MCLR and has a 5.9K pull up
N VAR BYTE ' Counting Variable, used in Auto-OFF Routine
Low GreenLED
Low RedLED
StartLoop:
Pause 10
If SwitchS1 = 0 Then
High GreenLED
ELSE
Low GreenLED
EndIf
PAUSE 10
If SwitchS2 = 0 Then
High RedLED
ELSE
Low RedLED
EndIf
PAUSE 1000
GoTo StartLoop ' Repeat
END