Hi All,
I'm a bit of a n00b when it comes to the PIC world, :-).
I have developed previously in C, Cobol, VB6 (and .net) and C++, however I have decided to use PIC Basic for my embedded projects. I started with the simple blink (with and without button input) with a few LEDs hanging off the various ports, then worked up to rotating beacons (using PWM).
My next mini learning project is to connect an LM35 to a 12F675. Along with the LM35 im connecting 3 LEDs, one white, one blue and one red simply to indicate a range of temps per color (i.e. if Temp < 30 then light the white LED etc) - Something I have got working through my Arduino and want to move to a more cost effective platform, :-).
I have spent a few evenings mulling over it and changing the code, flashing and testing with not much success. I think my issues are stemming from my lack of understanding of the various registers used i.e. ANSEL, TRISIO etc, although I think I have read the datasheet correctly its still not giving me the desired result.
Below is the code I have so far, please could you look and advise where I am going wrong?
Code:
'Using PIC 12F675 with White LED connected to Pin 7, Blue LED on Pin 6,
'Red LED on pin 7. Vdd is supplied as a regulated 5v to pin 1, Ground to pin 8.
'LM 35 connected to Vdd and Ground + Centre pin connected to Pin 3 (AN3)
'Pin 4 disconnected - Have tried connecting to Vdd with 10K res and turning MCLR_on with no sucess
@ device pic12F675,INTRC_OSC,wdt_off,pwrt_on,protect_off,MCLR_off
DEFINE CHAR_PACING 1000
DEFINE OSC 4 'Set internal osc. To 4MHz
'---------Define ADCin Parameters
DEFINE ADC_BITS 10 'set number of bits in result
DEFINE ADC_CLOCK 3 'set clock source (3=rc)
DEFINE ADC_SAMPLEUS 50 'Set sampling time in uS
'---------Define Vairables
samples VAR WORD ' Multiple A/D sample accumulator
sample VAR BYTE ' Holds number of samples to take
temp VAR BYTE ' Temperature storage
' clear Samples
LED0 Con 0 ' GPIO.0 = White LED
LED1 CON 1 ' GPIO.1 = Blue LED
LED2 CON 2 ' GPIO.2 = Red LED
'--------Configuring I/O PORTS
TRISIO = %010000 'set GPIO.0, GPIO.1, GPIO.2 as output (LEDs) & GPIO.4 as input
ANSEL = %00111000 ' Set ADC clock = Frc, GPIO.4, 1 = A/D
ADCON0 = %10000000 ' Right justify, use Vdd as Vref
CMCON = 7
'---------Main Program
'Flash White LED on Start
HIGH LED0
Pause 500
LOW LED0
TEMP_READ: 'Subroutine to measure temp
temp = 0 'Clear temp register
samples = 0 'Clear samples register
FOR sample = 1 TO 20 'Take 20 samples
ADCIN 3, temp ' Read AN3 into temp variable
samples = samples + temp
PAUSE 250 ' Wait 1/4 seconds per reading
NEXT sample
temp = samples/20 'Average over 20 samples (Every 5 seconds)
temp=(temp* 10)/2
if TEMP <20 then 'Less than 20deg - White LED
HIGH LED0
LOW LED1
LOW LED2
GOTO TEMP_READ
ENDIF
IF TEMP >20 AND temp <30 then 'Between 20deg and 30deg - Blue
LOW LED0
HIGH LED1
LOW LED2
GOTO TEMP_READ
ENDIF
IF TEMP >30 then 'Greater than 30deg - Red
HIGH LED2
LOW LED1
LOW LED0
GOTO TEMP_READ
endif
END
Bookmarks