Får ej till 2 AD-kanaler på pic16f676

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Oldis
Inlägg: 6
Blev medlem: 28 december 2007, 16:40:00
Ort: Skövde

Får ej till 2 AD-kanaler på pic16f676

Inlägg av Oldis »

Hej

Jag håller på med ett litet projekt där jag med en pic16f676 ska mäta två analoga signaler och presentera dessa på en 16*2-LCD.

Efter mycket kodletande och testande har jag lyckats få till allt utom att läsa två analoga signaler! Att mäta en signal fungerar hur bra som helst och värdet visas snyggt och prydligt på displayen.


Någon som kan ge några tips så att jag kan få till det allra sista?

Först en fungerande en-kanals a/d-omvandling

Kod: Markera allt

	
        movlw	b'00000001'
	movwf	TRISA			; set A to all outputs

	movlw	b'00000001'
	movwf	ANSEL			; turn on analog input 0

	movlw	b'11100001'		; A/D kanal 0
	movwf	ADCON0

	bcf		ADCON1,ADCS2		; set ADCS<2:0> = 001 ->
	bcf		ADCON1,ADCS1		; Sample Time 8*Tosc
	bsf		ADCON1,ADCS0		; from Data Sheet

	bcf		STATUS,RP0		; select Register Bank 0

	bcf		ADCON0, ADFM		; set shift left
	bcf		ADCON0, VCFG		; set reference voltage = Vdd
	bsf		ADCON0, ADON		; turn on A/D converter
.
.
.

loop
	call	Delay100
	bsf		ADCON0, GO		; acquire a sample
wait_for_sample1
	btfsc	ADCON0, NOT_DONE
	goto	wait_for_sample1

	movf	ADRESH, W
	movwf	counter1

Kod: Markera allt


	movlw	b'000011'
	movwf	TRISA			; set A to all outputs

	movlw	b'00000011'
	movwf	ANSEL			; turn on analog input 0 & 1


	bcf		ADCON1,ADCS2		; set ADCS<2:0> = 001 ->
	bcf		ADCON1,ADCS1		; Sample Time 8*Tosc
	bsf		ADCON1,ADCS0		; from Data Sheet

	bcf		STATUS,RP0		; select Register Bank 0

	bcf		ADCON0, ADFM		; set shift left
	bcf		ADCON0, VCFG		; set reference voltage = Vdd
	bsf		ADCON0, ADON		; turn on A/D converter
.
.
.

loop
	call	         Delay100
	movlw	      b'11100001'		; A/D kanal 0
	movwf	      ADCON0
	bsf		ADCON0, GO		;Starta omvandling 1
wait_for_sample1
	btfsc	      ADCON0, NOT_DONE
	goto	      wait_for_sample1

	movf	    ADRESH, W
	movwf	    counter1

        call	        Delay100
	movlw	      b'11100101'		; A/D kanal 1
	movwf	      ADCON0
	bsf		ADCON0, GO		;Starta omvandling 2
wait_for_sample2
	btfsc	ADCON0, NOT_DONE
	goto	wait_for_sample2

	movf	ADRESH, W
	movwf	counter2
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

acquisition time ?
Oldis
Inlägg: 6
Blev medlem: 28 december 2007, 16:40:00
Ort: Skövde

Inlägg av Oldis »

Jag vet inte riktigt om jag hänger med, men ...

Som insignal nu när jag labbar har jag använt en 10M trimpot som spänningsdelare för att ge en variabel insignal. Enl. specen såg jag nu att rekommendationen är max 10k impedans på den analoga källan.

Kan det vara så enkelt?
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

10MOhm!? :shock:
Ja, prova med något med lägre resistans!
Oldis
Inlägg: 6
Blev medlem: 28 december 2007, 16:40:00
Ort: Skövde

Inlägg av Oldis »

Tänkte inte på det. Den låg ju bara där och väntade på att användas :D

Ser det icke-fungerande kodexemplet i övrigt ut att vara rätt tänkt? Jag har inte lyckats hitta några exempel och nu har jag tyvärr inte grejjerna tillgängliga, så jag får försöka ge mig till tåls tills imorgon men det är svårt när det känns så nära...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Acquisition time !
Oldis
Inlägg: 6
Blev medlem: 28 december 2007, 16:40:00
Ort: Skövde

Inlägg av Oldis »

Sodjan:

Och med Acquisition time menar du?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Samma sak som databladet.
Oldis
Inlägg: 6
Blev medlem: 28 december 2007, 16:40:00
Ort: Skövde

Inlägg av Oldis »

Sodjan:

Tack för det uttömmande svaret...

Hade jag förstått databladet så hade jag inte behövt ställa frågan på ett forum öht.

Men menar du TACQ, som de i ett exempel räknat fram till 19.72µs? Som jag tolkar som minsta tid efter att man aktiverat en AD-kanal? Är det isf inte enklare att skriva att jag har placerat min fördröjning fel?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Är det isf inte enklare att skriva att jag har placerat min fördröjning fel?

Och hur fasen ska jag kunna veta vet ??
Det framgår inte *varför* du gör ett anrop till Delay100.
Det kan ju vara av någon annan orsak än just "Acquisition time"...
Och att *gissa* vad du tänkte när du skrev koden kommer jag inte att göra.

> Hade jag förstått databladet...

OK, peka på vad är otydligt så reder vi ut det.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Från databladet kap 7.2 sidan 47:
After the analog input channel is selected (changed),
this acquisition must be done before the conversion
can be started.
Är det den delen som är otydlig ?

Vad det står är att "efter att AD ingången är vald (bytt) så måste
man vänta ett tag ("acquisition time") innan man startar en ny
konvertering".

OK ?

Var det svårtolkat eller hade du bara låtit bli att läsa det ?
Såg du det inte efter att jag hade gett dig ett tips om att
kolla upp acquisition time första gången ? Hela kapitel
7.2 heter ju "A/D Acquisition Requirements"...
Oldis
Inlägg: 6
Blev medlem: 28 december 2007, 16:40:00
Ort: Skövde

Inlägg av Oldis »

Jag skummade nog lite för fort igenom den delen, ja. Jag har tittat på det men inte tillräckligt noga, uppenbarligen, eftersom jag har lagt in en fördröjning mellan omvandlingarna men inte efter kanalbytet.

Tack för hjälpen sodjan, det var första och sista gången. RTFM och svar med liknande innebörd dödar iaf nöjet för mig att ta genvägen som andras kunskaper innebär.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Tack för hjälpen sodjan,...

Ingen orsak ! Alltid lika kul att hjälpa till.
Notera dock att acquisition time bara är en gissning från min sida. Du
får väl testa lite och se om det hjälper att göra som det är dokumenterat.

Du kan även ta ett par minuter och kolla denna tråd, den kan ge en del
uppslag och ider inför din nästa fråga :
http://elektronikforumet.com/forum/viewtopic.php?t=6057
Skriv svar