Till att börja med vill jag säga att jag är nybörjare på detta, har hållit på med Basic Stamp i gymnasiet tidigare men inget mer och nu har jag kört fast.
Processor: 12F683
Det jag försöker göra nu är att läsa av ett värde från en tempsensor (LM35DZ) så att när det överstiger en viss temperatur så ska en led tändas.(ska i slutänden vara en fläkt)
Tempsensorn ger ifrån sig ca 0,25V på PIN-7(GP0) och referensen är +5V(Vdd).
Om jag skrivit rätt som jag tänkt så borde LED:en tändas så fort värdet på "temp" överstiger "0"(ref) men det gör den inte, har testat att lägga på +5V på PIN-7 men det händer inget.
Det är som att värdet på "temp" alltid är noll, oavsett hur hög spänning det är på PIN-7.
Jag har även testat att vända på det så LED:en ska släckas när det blir ett värde på "temp" men då släcks den aldrig istället.
Koden är tagen från ett exempel och sedan omgjord så den skulle passa för mig.
Kod: Markera allt
list p=12F683 ; list directive to define processor
#include <p12F683.inc> ; processor specific variable definitions
errorlevel -302 ; suppress message 302 from list file
__CONFIG _FCMEN_ON & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x7E ; variable used for context saving
status_temp EQU 0x7F ; variable used for context saving
c1 res 1 ; Counter for ADC delay
cblock H'20'
temp
ref ;Gräns för tändning av LED
value
endc
clrf temp
clrf ref
clrf value
banksel TRISIO
movlw B'00000001' ; en input resten output
movwf TRISIO
banksel ANSEL
movlw b'00000001'
movwf ANSEL
banksel ADCON0
movlw b'00000001'
movwf ADCON0
; ------------------------------------------------------
; Pick up the value from the ADC
; ------------------------------------------------------
loop
; Hang around a while to charge the cap
decfsz c1,F ; This is a longer wait
goto loop ; than needed but easy
; Start the conversion
bsf ADCON0,GO ; GO=1 starts conversion
; Wait for conversion to complete
Conv
btfsc ADCON0,GO ; Hardware clears GO
goto Conv ; when A/D complete
; Pick up the value
movf ADRESH,W ; Get top 8 bits
movwf temp ; Save into hi 8 bits
movlw b'00000000'
movwf ref
bcf STATUS, C
subwf ref, temp
movwf value
btfsc STATUS, C
goto ledoff
goto ledon
ledon
movlw b'00010000'
movwf GPIO
goto loop
ledoff
movlw b'00000000'
movwf GPIO
goto loop
end
Är det nåt mer ni behöver veta?
Tacksam för all hjälp
//Stefan