Sida 1 av 2

[PIC]konstiga värden från ADC

Postat: 28 oktober 2010, 23:07:32
av Klas-Kenny
Jag skulle använda mig av ADC på en PIC16F886, men det ger mig helkonstiga värden!

Jag har en 10k Ohm Linjär pot kopplad till AN1 på PICen (pinne 1 --> +5V, Pinne 2 --> AN1, Pinne 3 --> 0V) samt åtta lysdioder med 100 Ohm motstånd i serie med varje till hela PortB.
Sen såklart +5V till VDD och 0V till VSS samt en 100nF kondensator mellan.

Nu vad som händer:
När jag vrider på poten så ska datan speglas rakt ut på LED'arna. Men när jag vrider, så ungefär halva varvet närmst jord ger ingenting alls på LED'arna, och sedan andra hälften ger hela skalan 0-255, men det går fortare och fortare, som att poten va logaritmisk.
Någon som varit med om något liknande? :?

Jag har resistansmätt poten, och det ger ett linjärt värde, har även testat med andra pottar (Annan 10k ohm, en 5k ohm samt en 25k ohm) och alla ger samma resultat.

Kod:

Kod: Markera allt

	list		p=16f886
	#include	<p16f886.inc>

	__CONFIG	_CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
	__CONFIG	_CONFIG2, _WRT_OFF & _BOR21V

cblock	0x20
Delay1
endc

org 0

Start
	bsf		STATUS,RP0
	clrf		TRISB
	movlw	b'10000000'
	movwf	TRISA
	movlw	b'00000000'
	movwf	ADCON1
	
	bsf		STATUS,RP1
	
	movlw	b'00000010'
	movwf	ANSEL
	
	bcf		STATUS,RP0
	bcf		STATUS,RP1
	
	movlw	b'01000101'
	movwf	ADCON0
	
Main
	call		Delay
	bsf		ADCON0,GO
	btfsc		ADCON0,GO
	goto		$-1
	
	movfw	ADRESH
	movwf	PORTB
	
goto	Main
	
Delay
	Delayloop
		decfsz	Delay1
		goto		Delayloop
Return

END
Kan tillägga att jag kört ADC på PIC16F690 med samma pot, och det har givit korrekta värden.

Re: [PIC]konstiga värden från ADC

Postat: 28 oktober 2010, 23:34:29
av sodjan
Använd BANKSEL istället. Vet inte om det hjälper, men
annars är det ingen mening med att kolla koden.

Re: [PIC]konstiga värden från ADC

Postat: 28 oktober 2010, 23:40:07
av Klas-Kenny

Kod: Markera allt

	list		p=16f886
	#include	<p16f886.inc>

	__CONFIG	_CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT
	__CONFIG	_CONFIG2, _WRT_OFF & _BOR21V

cblock	0x20
	Delay1
endc

org 0

Start
	banksel	TRISB
	clrf		TRISB
	movlw	b'10000000'
	
	banksel	TRISB
	movwf	TRISA
	
	banksel	ADCON1
	movlw	b'00000000'
	movwf	ADCON1
	
	banksel 	ANSEL
	movlw	b'00000010'
	movwf	ANSEL
	
	banksel	ADCON0
	movlw	b'01000101'
	movwf	ADCON0
	
Main
	call	Delay
	
	banksel 	ADCON0
	bsf		ADCON0,GO
	btfsc		ADCON0,GO
	goto		$-1
	
	banksel 	ADRESH
	movfw	ADRESH
	
	banksel 	PORTB
	movwf	PORTB
	
goto	Main
	
Delay
	banksel 	Delay1
	Delayloop
		decfsz	Delay1
		goto		Delayloop
Return

END
Där har du en hel massa banksel, koden fungerar dock precis lika illa som innan.

Re: [PIC]konstiga värden från ADC

Postat: 28 oktober 2010, 23:48:45
av sodjan
Kolla TRISA.

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 00:02:50
av Klas-Kenny
Aha!
Vilken miss, inte första gången jag gjort tabben att gå "fel håll" när jag satt bitar i TRIS-registerna.
Använde tidigare AN0 (Med samma dåliga resultat), då hade jag satt TRISA sådär, sen missade jag att ändra när jag bytte till AN1. Dock skulle den ju vara '00000001' inte '10000000' :doh: Intressant konsekvens det blev av detta dock, en felsatt TRIS gav ett icke linjärt resultat vid ADC :?

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 00:06:20
av sodjan
Ja, pinnen var utgång och försökte köra imot spänningen från
potten så länge den orkade, men till slut, när potten närmar sig en
ändläget, så orkar inte porten längre och spänningen stiger på pinnen.
Detta ser alltså ADCn. Helt normalt och förväntat resultat.

Det är inte heller helt OK för pinnen att göra så (kortslutning).

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 00:09:59
av bearing
Om nästan varje enkelt problem leder till en fråga här på forumet känner jag mig orolig för fortsättning. Du är ju en ung intelligent man. Vore det inte en bra erfarenhet att försöka lösa problemen själv? det kanske tar lite längre tid, men jag är säker på att den tiden kommer betala tillbaka sig senare genom att du får effektivare felsökningsrutiner.

Förövrigt - 100 ohm är väldigt litet. Strömmen blir nog högre än pinnarna klarar. Porten kommer dra uppåt flera hundra mA! (vilket är långt över specen)
Kan ju hända att kretsen hamnar i brown out p.g.a. detta, och startas om.

För att undvika kortslutning vid sådana här programmeringsmissar kan man koppla ett motstånd mellan potentiometern och pinnen.

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 00:14:02
av jesse
Det första jag hade gjort skulle vara att mäta spänningen på den ingången du kopplat till poten. Då ser du om det är något skumt där, eller om det bara är ett beräkningesfel i koden. Nu kom du ju på var det var ändå.

bearing: Jag har inget emot enkla frågor... men det är ju bra om man försökt lite själv först. Jag vet själv hur svårt det kan vara att se det uppenbara förrän någon påpekat det i forumet.

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 00:17:14
av sodjan
En enkel mätning av spänningen från potten *när den var ansluten* hade
visat att något var väldigt galet med hela konfigurationen/kopplingen.

(Ja, det var väl det som Jesse sa... :-) )

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 16:28:12
av Klas-Kenny
Sodjan: Ja där har man lärt sig något nytt!

Jag kunde inte tänka mig att ADC'n skulle se något alls ifall en I/O va felsatt, men ack så fel man kunde ha.

(Off topic: Fick borren idag, de ser superbra ut :wink: )

Bearing: Faktum är att jag lagt kanske en timme på att felsöka detta, utan resultat. Dock inser man ju nu i efterhand hur löjligt korkat det va :doh:

Kollade nu, det är visst 180 Ohm jag har, vilket vad jag vet ska vara helt ok i serie med en LED. Hade fel för mig då jag har LED'arna och motstånden på en liten modul jag lött ihop för ett tag sen.

jesse: Ja det borde jag klart gjort, jag mätte bara när jag kopplat ur den. Kunde inte tänka mig att µC'n skulle kunna förändra spänningen så. Men tydligen.

Precis, uppenbara fel är allt för lätta att missa, men andra ser det direkt.

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 16:33:56
av bearing
Enligt databladet får strömförbrukningen för alla portar sammanlagt vara 90 mA. Ifall 8 pinnar driver en LED blir det drygt 10 mA per pinne.

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 16:38:13
av Klas-Kenny
200mA vad jag kan se?

"Maximum current sourced by PORTA, PORTB and PORTE (combined)(2) .................................................. 200 mA" på s. 241 i Databladet.

Och det bör jag inte komma över med 8*20mA :)

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 16:42:53
av bearing
Jag har läst en senare revision av databladet. Vet ej varför de sänkt gränserna. I Appendix A finns revisionshistoriken.
http://ww1.microchip.com/downloads/en/D ... 41291F.pdf

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 16:48:37
av Klas-Kenny
Vart någonstans ser du något om 90mA?
Har kollat Appendix A, electrical specifications samt sökt efter "90 mA" utan resultat.

Re: [PIC]konstiga värden från ADC

Postat: 29 oktober 2010, 17:02:23
av bearing
Kapitel 17, sid 245, i databladet jag länkade till, med suffixet F i filnamnet. "Ditt" har suffixed D, och är preliminary.