Sida 1 av 1

Problem med ADC (PIC)

Postat: 7 januari 2010, 17:16:11
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

Re: Problem med ADC (PIC)

Postat: 7 januari 2010, 17:28:50
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.

Re: Problem med ADC (PIC)

Postat: 7 januari 2010, 20:45:57
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?

Re: Problem med ADC (PIC)

Postat: 7 januari 2010, 21:54:40
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...

Re: Problem med ADC (PIC)

Postat: 8 januari 2010, 13:42:52
av Fettoskyffel
Och med manualen så menar du databladet + mplab hjälpfilerna?

Re: Problem med ADC (PIC)

Postat: 8 januari 2010, 13:51:49
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 ?

Re: Problem med ADC (PIC)

Postat: 8 januari 2010, 13:53:49
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"???

Re: Problem med ADC (PIC)

Postat: 8 januari 2010, 13:59:44
av Fettoskyffel
Så jag vet vart jag ska leta, har googlat mig till svar hittills.

Re: Problem med ADC (PIC)

Postat: 8 januari 2010, 14:00:52
av AndersG
OK. Läser du PICens datablad får du en bättre, strukturerad överblick.

Re: Problem med ADC (PIC)

Postat: 8 januari 2010, 14:01:51
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...

Re: Problem med ADC (PIC)

Postat: 8 januari 2010, 14:25:31
av AndersG
I första kodsnutten:

Kod: Markera allt

clrf   temp
clrf   ref
clrf   value

Re: Problem med ADC (PIC)

Postat: 8 januari 2010, 15:00:15
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.

Re: Problem med ADC (PIC)

Postat: 8 januari 2010, 15:08:25
av AndersG
Ah... Sorry. Naturligtvis!