ADC instellen bij een PIC16F877A

Alleen berichten met de trefwoorden “digitale voeding” worden getoond. Alle berichten tonen

Hallo allen,

Ik ben op dit moment bezig met het digitaal uitlezen van mijn labvoeding (van deze site).

Opzich werkt het goed, maar ik krijg de PIC niet goed ingesteld.
Dit is de situatie:

code:


------|--------26.6V
      |
      |
     ----    5V Naar port A.0
     |  |    |
     |	|    |
100K |	|<----
Pot  |	|
     |	|
     ----
      |
      |
      |
--------------GND

De refspanning gebruik ik van de voeding van de PIC. Deze is exact 5V, net als de 5V van de potmeter.
De GND van de uitgaande spanning is met doorverbonden met de GND van het IC.

Het Probleem is dat ik met de onderstaande code de uitgelezen spanning niet helemaal precies krijg.
Bij 26.6V krijg ik een uitgelezen spanning van 26,9 en bij 10V een uitgelezen spanning van 9.6V.

pic basic code:


DEVICE 16F877A ;We gebruiken een 16F877A type
CONFIG WDT_OFF, PWRTE_ON, LVP_OFF, HS_OSC  
XTAL 20

ALL_DIGITAL TRUE                              ;Alle ingangen digitaal
PORTB_PULLUPS ON                              ;Alle pullup weerstanden voor de B poorten +5V (aan)


DECLARE LCD_ENPIN = PORTB.2
DECLARE LCD_RSPIN = PORTB.1
                                                                     
CLEAR


 ADIN_RES = 10                  
 ADIN_TAD = FRC                 
 ADIN_STIME = 50                
 DIM RAWvolts AS WORD 
 DIM VOLTS AS FLOAT
 DIM RAWstroom AS WORD
 DIM STROOM AS FLOAT
 DIM UITspanning AS BYTE

 TRISA = %00000011               
 ADCON1 = %11000000             

 DELAYMS 500                    
 CLS
 
WHILE 1 = 1
 RAWvolts = ADIN 0
 VOLTS = RAWvolts / 38,45865
 
 PRINT AT 1,1, DEC1 VOLTS, "V    ", DEC4 RAWvolts

WEND
END

Hoe kan ik dit verhelpen?
Ik denk zelf dat het met de instelling van

pic basic code:

VOLTS = RAWvolts / 38,45865

te maken heeft, maar ik weet niet hoe ik dit in moet stellen.
Iemand ideeën?
Alvast heel erg bedankt.

Murphy's Law: Anything you try to fix will take longer and cost more than you think.
flash2b

Special Member

Voor mijn VAMT meter met 16F819 las ik 10x de ADIN in en deelde dit door 10 om een stabielere waarde te krijgen.

Ik zou met een hoogohmige spanning deler doen, met daarachter een op-amp. Zie IC2a (link hieronder), de negatieve voeding en de diode daarachter zijn dan niet nodig.

http://www.circuitsonline.net/forum/view/message/1340892#1340892

They say attention is a shovel. It's time to dig 'em out.
flash2b

Special Member

Je maximum te meten waarde is 5V. De CO labvoeding is maximaal 30V. Je zult dus een spannings deler van 5/30 = 1/6 moeten maken.

Als je een potmeter gebruikt van 2K5 dan moet je die in serie zetten met een een 12K5 weerstand. 2K5 / (2K5 + 12K5) = 1/6.

Dus 12K5 aan de V+, andere kant v/d 12K5 aan je potmeter, andere kan potmeter naar massa, en de loper naar de ingang van de op-amp.

Je kunt met je loper nu trimmen dat je met een 30V voeding tot het max van 5V komt.

Omdat jij als max 26.6V gebruikt, zul je zelf even de juiste waarde van die serie weerstand moeten uitrekenen.

Maak een for-next loop rond je ADIN statement, met een 10x lus tel je steeds de waarde van ADIN op in een variable, aan het einde van je for-next deel je die variable door 10.

pic basic code:


RAWvolts= 0
FOR X=1 to 10
 RAWvolts = ADIN 0 + RAWvolts
NEXT X
RAWvolts = RAWvolts /10
They say attention is a shovel. It's time to dig 'em out.