jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
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:
------|--------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.
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
VOLTS = RAWvolts / 38,45865
te maken heeft, maar ik weet niet hoe ik dit in moet stellen.
Iemand ideeën?
Alvast heel erg bedankt.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
100k is veeel te hoog, max. 2k5 ingangsweerstand. (Zie datasheet)
Je kunt zo ook de spanning tot 26.6v opdraaien, dan blaas je de PIC input op.
[Bericht gewijzigd door Arco op vrijdag 27 juli 2012 16:15:37 (38%)]
flash2b
They say attention is a shovel. It's time to dig 'em out.
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
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
@ Arco.
Ja inderdaad, helemaal gelijk.
Heb t nu veranderd(en weer ingesteld op 5V) maar de gemeten spanning blijft gelijk helaas.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Schrijf dan eerst eens de gevonden waarde (rawvolts) naar het display, dan weet je of die klopt. Heb je de potmeter al vervangen door wat lagers?
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
@Flash2b:
Ik heb jou opstelling nagemaakt(met een op496), maar de uitgangsspanning van de opamp komt dan niet hoger dan 2.5V
@Arco:
Ik heb de potmeter inderdaad al vervangen.
De waardes zijn:
1023 bij 26.6V
998 bij 25V
798 bij 20V
591 bij 15V
383 bij 10V
176 bij 5V
0 bij 0V
En toen ging er bijna een lampje branden.
VOLTS = RAWvolts / 1023 * 26.6
Hiermee kom ik al in de buurt 10V is nu 9.8V, maar 26.6 V is wel netjes 26.6V
hadv
Just find out what you like and let it kill you
Inderdaad staat er in de datasheets dan de pot max. 2K5 mag zijn (soms wel 3K).
Dan is het wel erg grappig om te zijn dat MC zelf pots van 10K op de experimenteerprintjes zet.
Je meetwaarden zien er toch best redelijk lineair uit.
Pas even op met dit soort berekeningen:
RAWvolts is een Word.
VOLTS is een Float.
VOLTS = RAWvolts / 38,45865
Het zou zomaar kunnen zijn dat die 38,45865 wordt afgekapt op 38 (omdat RAWvolts een word is).
Dit zou je kunnen uittesten door te delen door bv 38,123. Zou een ander resultaat moeten opleveren.
En anders kun je nog altijd het volgende proberen
VOLTS = RAWvolts (gaat altijd goed)
VOLTS = VOLTS / 38,45865
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Ondertussen de 2de ADC ingang gesloop door er met mijn stomme kop 21V op te zetten. Vond ie niet leuk.
Dus nu gaan we verder met een PIC18F252. Na enig gepruts deze toch aan de praat gekregen en de config's achterwegen gelaten (dus aleen DEVICE 18F252 en XTAL 20 er neer gezet), omdat ik het niet voor elkaar krijg om deze goed neer te zetten.
@hadv:
ik heb inderdaad geprobeerd om het te delen door een ander getal te delen en er komt een ander getal uit.
Wat ik niet helemaal snap is dat ik moet opletten met WORD en FLOAT.
Is dit omdat het geheugen dan vol loopt en de PIC vast loopt? of is het om een andere reden?
De waarde word namelijk niet afgekapt of zo.
Hoe zou ik dit anders kunnen oplossen?
flash2b
They say attention is a shovel. It's time to dig 'em out.
Op 27 juli 2012 17:15:01 schreef jorim23:
@Flash2b:
Ik heb jou opstelling nagemaakt(met een op496), maar de uitgangsspanning van de opamp komt dan niet hoger dan 2.5V
Nee dat klopt, aangezien ik een externe 2.5V refentie gebruik (TL341). Als je 5V wilt zul je de spannings deler R9//R10 + R11 aan moeten passen !!
Je moet dan R11 iig verhogen.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Je deelt een word door een float. Het hangt van de compiler af wat die daar precies van maakt... Ik zou eerst een wat veiligere opstelling maken, zodat er niet meer dan 5V op de input kan komen.
Klopt 38,45865 trouwens wel? (normaal is de punt de separator, niet een komma)
[Bericht gewijzigd door Arco op vrijdag 27 juli 2012 22:03:43 (18%)]
jorim23
Murphy's Law: Anything you try to fix will take longer and cost more than you think.
Maar een Float is toch groter dan een Word?
ik heb trouwens even gekeken of het verschil maakt door de komma te veranderen met een punt, maar dat maakt niet uit.
@flash2b:
ik heb de volgende opstelling gemaakt:
------|--------26.6V
| -----
| |
---- 2K18 k
| | |
| | | |-----\ 2K7
2,5K | |<-------------3| + \ |-----|
Pot | | | | >1--|-| |----naar port A.0
| | | --2| - / | |-----|
---- | | |-----/ |
| 628 Ohm | |
| | |--------------|
| |
--------------GND
Maar de versterking wordt een verzwakking klopt dat?
Jij had het over de meting 10 keer uitvoeren en daar het gemiddelde van berekenen. Mag ik weten hoe jij dat gedaan hebt?
hadv
Just find out what you like and let it kill you
Compilers hebben zo hun eigen manieren om berekeningen met verschillende datatypen uit te voeren.
Vooral als het gaat om float-achtigen en integer-achtigen.
Dat Float groter is dan Word is niet belangrijk.
Ik heb het stukje even door de compiler gehaald en in de .asm gekeken.
Zo te zien doet-ie een keurige int16 naar float32 conversie.
flash2b
They say attention is a shovel. It's time to dig 'em out.
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.
RAWvolts= 0
FOR X=1 to 10
RAWvolts = ADIN 0 + RAWvolts
NEXT X
RAWvolts = RAWvolts /10
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik doe voor batterijspanningsmeting ook altijd een gemiddelde van een aantal metingen. Of:
((oude waarde * 4) + nieuwe waarde) / 5
werkt ook goed. Als je Vcc als Vref gebruikt, is dat veel te instabiel om een solide meetsignaal te krijgen. Bij 50mV rimpel (helemaal niet ongebruikelijk) spreken we al over een verschil van 11 stapjes bij 10 bits A/D.
Je kunt ook de PIC omwisselen voor een 16F1937 (pin-compatible), die heeft een interne Vref van 4.096V, heel handig...
flash2b
They say attention is a shovel. It's time to dig 'em out.
Vandaar dat ik een voor de Vref een TL431 gebruik en alles naar de 2.5V omreken. Maar je kan een TL431 ook op 5V of 4.096V instellen, of een externe 4.096V ref gebruikten.