Problem med ADC (PIC)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Fettoskyffel
Inlägg: 15
Blev medlem: 23 januari 2007, 20:33:55
Ort: Falun

Problem med ADC (PIC)

Inlägg av Fettoskyffel »

Hallojsan!
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
Någon som kan hjälpa mig med detta eller har något tips, vad kan jag ha gjort fel?
Är det nåt mer ni behöver veta?

Tacksam för all hjälp

//Stefan
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med ADC (PIC)

Inlägg av sodjan »

Några småsker bara för att rensa koden lite...

Blanda inte RES och CBLOCK. Kör helst enbart med RES.
Får du inga som helst varningar vid "build" ?
Har du kolla på bankningen, ligger t.ex ADCON0 och GPIO i samma bank ?
Lägg till lite BANKSEL hur som helst så att du är säker.
Fettoskyffel
Inlägg: 15
Blev medlem: 23 januari 2007, 20:33:55
Ort: Falun

Re: Problem med ADC (PIC)

Inlägg av Fettoskyffel »

Okej, testade att byta till RES men när jag körde simuleringen och den kom till "clrf ref" så hoppar den ett steg bakåt?
Tog bort alla "clrf" och då går den vidare.
Lade till några "banksel", var det såhär du menade?
Testade att programmera och testa men det händer inget ändå.

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
temp		res		    1	
ref         res         1   ;Gräns för tändning av LED
value		res	        1


			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
	banksel ADCON0
	; 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 ledon
		    goto ledoff

ledon
	banksel GPIO
	movlw	b'00010000'
	movwf	GPIO

goto loop

ledoff
	banksel GPIO
	movlw	b'00000000'
	movwf	GPIO
goto loop	

end
Såhär ser det ut när jag kör "Build All":

Kod: Markera allt

Debug build of project `C:\Users\Englund\Documents\Analogin12f\Analogin12f.mcp' started.
Preprocessor symbol `__DEBUG' is defined.
Thu Jan 07 20:38:08 2010
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\Users\Englund\Documents\Analogin12f\12F683TEMP.err".
Clean: Deleted file "C:\Users\Englund\Documents\Analogin12f\12F683TEMP.cod".
Clean: Deleted file "C:\Users\Englund\Documents\Analogin12f\12F683TEMP.hex".
Clean: Deleted file "C:\Users\Englund\Documents\Analogin12f\12F683TEMP.lst".
Clean: Done.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p12F683 "12F683TEMP.ASM" /l"12F683TEMP.lst" /e"12F683TEMP.err" /d__DEBUG=1
Warning[203] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 60 : Found opcode in column 1. (clrf)
Warning[203] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 61 : Found opcode in column 1. (clrf)
Warning[203] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 62 : Found opcode in column 1. (clrf)
Warning[205] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 69 : Found directive in column 1. (banksel)
Warning[203] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 70 : Found opcode in column 1. (movlw)
Warning[203] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 71 : Found opcode in column 1. (movwf)
Warning[203] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 103 : Found opcode in column 1. (bcf)
Warning[203] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 116 : Found opcode in column 1. (goto)
Warning[203] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 122 : Found opcode in column 1. (goto)
Warning[205] C:\USERS\ENGLUND\DOCUMENTS\ANALOGIN12F\12F683TEMP.ASM 124 : Found directive in column 1. (end)
Loaded C:\Users\Englund\Documents\Analogin12f\12F683TEMP.cod.
----------------------------------------------------------------------
Debug build of project `C:\Users\Englund\Documents\Analogin12f\Analogin12f.mcp' succeeded.
Preprocessor symbol `__DEBUG' is defined.
Thu Jan 07 20:38:09 2010
----------------------------------------------------------------------
BUILD SUCCEEDED
Vet inte vad det betyder, är ju ganska många varningar..

Vad är det förresten för skillnad på cblock och RES?
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med ADC (PIC)

Inlägg av sodjan »

> Vet inte vad det betyder, är ju ganska många varningar..

Fixa dom i alla fall. Om inte annat så är det en bra övning.
I just detta fall så har du fel formattering på koden, det är
det som varningarna talar om för dig. Nu så kan de vara så
att MPLAB bygger koden korrrekt i alla fall, men varför chansa ?

Vad varningarna betyder framgår båda av själva varningen i sig,
men gav inte manualen en bättre förklaring ? Märkligt...

Kolla också varför den säger att den bygger med "DEBUG" och
stäng av det (om du inte har slagit på det med avsikt).

> Vad är det förresten för skillnad på cblock och RES?

Hur menar du ? Skillnader utöver det som dokumentationen säger ?
Kan du vara lite mer specifik kanske ?
Men helt kort kan man säga att det är *stor* skillnad,
CBLOCK och RES gör två helt olika saker.

Eftersom det inte framgår att du har RTFM så får du nog
göra det först och så tar vi frågor/svar sedan...
Fettoskyffel
Inlägg: 15
Blev medlem: 23 januari 2007, 20:33:55
Ort: Falun

Re: Problem med ADC (PIC)

Inlägg av Fettoskyffel »

Och med manualen så menar du databladet + mplab hjälpfilerna?
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med ADC (PIC)

Inlägg av sodjan »

Databladet har i princip ingenting med själva programmeringen (MPASM)
att göra. Databladet beskriver bara hur själva processorn fungerar.

När det gäller programmeringen i MPASM så talar jag om MPASM manualen.
Vad är problemet, varför frågar du det ?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9045
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Problem med ADC (PIC)

Inlägg av AndersG »

Japp, läs PICens datablad, alla 100+ sidorna från pärm till pärm. Likaså MPASM/MPLAB manualerna. Viktigt är att du har formatteringen rätt. Vad menar du eg med "crlf"???
Fettoskyffel
Inlägg: 15
Blev medlem: 23 januari 2007, 20:33:55
Ort: Falun

Re: Problem med ADC (PIC)

Inlägg av Fettoskyffel »

Så jag vet vart jag ska leta, har googlat mig till svar hittills.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9045
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Problem med ADC (PIC)

Inlägg av AndersG »

OK. Läser du PICens datablad får du en bättre, strukturerad överblick.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med ADC (PIC)

Inlägg av sodjan »

> Vad menar du eg med "crlf"???

Jag vet inte om jag är blind, men var hittade du det ?

> Så jag vet vart jag ska leta, har googlat mig till svar hittills.

Leta efter vadå ? Vad CBLOCK och RES är ? Eller leta efter manualen ?
Skit i Google! Använd det som Mcrochip har lagt ner jobb på att skriva ihop.
Google är komplett värdelöst för att kolla upp dessa saker...
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9045
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Problem med ADC (PIC)

Inlägg av AndersG »

I första kodsnutten:

Kod: Markera allt

clrf   temp
clrf   ref
clrf   value
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med ADC (PIC)

Inlägg av sodjan »

CLRF ja, men du frågade efter CRLF.
CLRF Clear f
Syntax: [ label ] CLRF f
Operands: 0 ≤ f ≤ 127
Operation: 00h → (f)
1 → Z
Status Affected: Z
Description: The contents of register ‘f’ are
cleared and the Z bit is set.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9045
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Problem med ADC (PIC)

Inlägg av AndersG »

Ah... Sorry. Naturligtvis!
Skriv svar