Pozdrav svima.Interesuje ne kako povezati referentvi napon na pic 16f88 ako merimo na pr 50V ? odnosno odakle ga uzimamo i na kojim pinovima povezati.U DS pise da se koriste pinovi
The ANSEL bits for AN3 and AN2 inputs must be configured as analog inputs for the
VREF+ and VREF- external pins to be used.
Ako moze neka semica ukratko kako dovesti VREF (a da nije Vdd i Vss ) na ovim pinovima i da li VREF uzimamo sa 5V napona napajanja ili sa napona koji merimo pa ga otpornicima smanjimo na na pr. na 2V i dovedemo na pic.
Pomoc oko referentnog napona za ADC 16f88
Moderators: pedja089, stojke369, [eDo], trax
Re: Pomoc oko referentnog napona za ADC 16f88
Opčenito, referentni napon je napon s kojim se uspoređuje neka vrijednost. U prijevodu referentni napon je konstantan. Što je referentni napon stabilniji (znaš njegovu stvarnu vrijednost), mjerenja su preciznija.
Kako bi mjerio veče napone od 5V, moraš koristiti otporničko djelilo.
Za mjerenje 50V možeš postaviti otporničko dijelilo u omjeru 1:9 .
Praktičan primjer. Spojiš dva otpornika u seriju. Prvom koji je spojen na masu postaviš vrijednost na R, a drugom koji je spojen na mjernu točku (u tvom slučaju 50V) postaviš vrijednost na 9R. R je bilo koja veličina otpornika, što veća manje utječe na mjerenu veličinu.
Zatim srednji izvod spojiš na jedan od analognih ulaza PIC-a te očitavaš tu vrijednost, a preračunavanjem očitane dobiš stvarnu. Mase su im zajedničke.
Uvijek postoje problemi, ali bitnij problem koji moraš zadovoljiti je da ti na PIC ne dođe preveliki napon jer bi moglo doči do uništenja PIC-a.
Zapravo ne trebaš mjenjati referentni napon, možeš ga postaviti na +5V odnosno na radni napon MCU-a.
Kako bi mjerio veče napone od 5V, moraš koristiti otporničko djelilo.
Za mjerenje 50V možeš postaviti otporničko dijelilo u omjeru 1:9 .
Praktičan primjer. Spojiš dva otpornika u seriju. Prvom koji je spojen na masu postaviš vrijednost na R, a drugom koji je spojen na mjernu točku (u tvom slučaju 50V) postaviš vrijednost na 9R. R je bilo koja veličina otpornika, što veća manje utječe na mjerenu veličinu.
Zatim srednji izvod spojiš na jedan od analognih ulaza PIC-a te očitavaš tu vrijednost, a preračunavanjem očitane dobiš stvarnu. Mase su im zajedničke.
Uvijek postoje problemi, ali bitnij problem koji moraš zadovoljiti je da ti na PIC ne dođe preveliki napon jer bi moglo doči do uništenja PIC-a.
Zapravo ne trebaš mjenjati referentni napon, možeš ga postaviti na +5V odnosno na radni napon MCU-a.
Re: Pomoc oko referentnog napona za ADC 16f88
To je uredu i meri mi tacno pa me interesuje cemu onda drugi VREF napon,da li se postize veca tacnost sa tim ?
Re: Pomoc oko referentnog napona za ADC 16f88
Mjenjanjem Vref se omogučuje mjerenje nekih veličina, a da se pritom iskoristi maksimalna rezolucija ADC-a.
Uzmimo za primjer da imaš neki senzor koji ti na izlazu daje napon u rasponu od 0-2V. Ti taj napon možeš pojačati pa dobitit raspon od 0-5V. Međutim sve ti se komplicira, moraš koristiti opamp (zahtijeva +/- 8V) i još neke stvari... Mjenjanjem referentnog napona na 2V ti si dobio maksimalnu rezoluciju (npr. ADC ti je 10bit) kojom pokrivaš mjerenje tog senzora.
Uzmimo za primjer da imaš neki senzor koji ti na izlazu daje napon u rasponu od 0-2V. Ti taj napon možeš pojačati pa dobitit raspon od 0-5V. Međutim sve ti se komplicira, moraš koristiti opamp (zahtijeva +/- 8V) i još neke stvari... Mjenjanjem referentnog napona na 2V ti si dobio maksimalnu rezoluciju (npr. ADC ti je 10bit) kojom pokrivaš mjerenje tog senzora.
Re: Pomoc oko referentnog napona za ADC 16f88
Zamolio bih sam za jos nesto.Evo ovaj kod radi kod mene super sa VREF Vdd Vss pa sam hteo da pitam sta bi sad trebalo izneniti u kodu za VREF 2V ? Nemam dovoljno razumevanja da shvatim zasto je na pr BROJ */ 500 ali nema veze snacicu se samo sto nisam nasao nikakav primer na internetu gde se koristi drugi VREF pa bih zmolio samo za tu izmenu da vidim sta i kako.
DEFINE OSC 4
DEFINE LCD_BITS 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 3
DEFINE LCD_LINES 2
pause 100
Define ADC_BITS 10
Define ADC_CLOCK 3
Define ADC_SAMPLEUS 50
ANSEL=%11111111
ADCON1=%10000000
ADCON0=%11000101
TRISA = %11111111
BROJ Var WORD
POCETAK:
ADCIN 0 , BROJ
BROJ = ( BROJ */ 500)>>2*10 ' mnozenje sa 4 jer je otpornicki niz 1:4
lcdout $FE, $80, "DC Volts=",DEC (BROJ/100),".", DEC2 BROJ,"V"
pause 10
GOTO POCETAK:
END
DEFINE OSC 4
DEFINE LCD_BITS 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 3
DEFINE LCD_LINES 2
pause 100
Define ADC_BITS 10
Define ADC_CLOCK 3
Define ADC_SAMPLEUS 50
ANSEL=%11111111
ADCON1=%10000000
ADCON0=%11000101
TRISA = %11111111
BROJ Var WORD
POCETAK:
ADCIN 0 , BROJ
BROJ = ( BROJ */ 500)>>2*10 ' mnozenje sa 4 jer je otpornicki niz 1:4
lcdout $FE, $80, "DC Volts=",DEC (BROJ/100),".", DEC2 BROJ,"V"
pause 10
GOTO POCETAK:
END
Re: Pomoc oko referentnog napona za ADC 16f88
Nisam se dosad susretao sa takvim zapisom, možda netko drugi zna.MIKI73 wrote:...Nemam dovoljno razumevanja da shvatim zasto je na pr BROJ */ 500 ali....
U datasheetu na stranici 117 nalazi se podatak o ADCON1 registru. Govori koju ulogu ima određeni bit registra.
treba obratit pozornost na 5. i 4. bit koji utječu na referentni napon. Postavljanjem 5. bita u "1" i 4. bita u "0" odabrano je da se za + pol referentnog napona uzme neki napon sa Vref pina dok je donji pol (-) minus spojen na masu.
Također se može postaviti mod u kojem se pozitivan pol referentnog napona dovodi na Vref+, a negativan pol referentnog napon dovodi na Vref-.
Tu možeš ograničiti mjerno područje na npr. 1-2V tj. da na tom rasponu dobiješ maks. rezoluciju od 1024
Prvi spomenuti slučaj bi izgledao ovako u tvom kodu:
Code: Select all
DEFINE OSC 4
DEFINE LCD_BITS 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 3
DEFINE LCD_LINES 2
pause 100
Define ADC_BITS 10
Define ADC_CLOCK 3
Define ADC_SAMPLEUS 50
ANSEL=%11111111
ADCON1=%10110000 'tu je napravljena izmjena
ADCON0=%11000101
TRISA = %11111111
BROJ Var WORD
POCETAK:
ADCIN 0 , BROJ
BROJ = ( BROJ */ 500)>>2*10 ' mnozenje sa 4 jer je otpornicki niz 1:4
lcdout $FE, $80, "DC Volts=",DEC (BROJ/100),".", DEC2 BROJ,"V"
pause 10
GOTO POCETAK 'Opcenito, tu nejde ":"
END
Re: Pomoc oko referentnog napona za ADC 16f88
Za ADCON1 sam znao posesavanja,mislio sam da li treba nesto oko monozenja izmeniti tj ovde
BROJ = ( BROJ */ 500)>>2*10 ' Ispravka od malopre.mnozi sa 10 jer su otpornici 1:10
ali nema veze,valjda ce se pojaviti neki gotov primer negde na internetu.Ovaj kod je provereno dobar,bez greske radi pa ako nekom treba moze slobodno iskoristiti.Otpornici su 30k i 3.3k
BROJ = ( BROJ */ 500)>>2*10 ' Ispravka od malopre.mnozi sa 10 jer su otpornici 1:10
ali nema veze,valjda ce se pojaviti neki gotov primer negde na internetu.Ovaj kod je provereno dobar,bez greske radi pa ako nekom treba moze slobodno iskoristiti.Otpornici su 30k i 3.3k
Re: Pomoc oko referentnog napona za ADC 16f88
Oprosti, krivo sam te shvatio.
Principijalno, ako mjeriš npr. napon od 0-50V onda jednostavno u programu tih 50V rascijepkaš na rezoluciju ADC-a. Konkretno 1023 dijela za 10bitnu rezoluciju.
Matematicki:
Mjereni napon = (Maks. napon/1023)*ocitana trenutna vrijednost ADC-a.
Sad ti to zapišeš kako god tebi to odgovara za računanje
Pričekaj, možda netko zna što konkretno onaj zapis radi.
Principijalno, ako mjeriš npr. napon od 0-50V onda jednostavno u programu tih 50V rascijepkaš na rezoluciju ADC-a. Konkretno 1023 dijela za 10bitnu rezoluciju.
Matematicki:
Mjereni napon = (Maks. napon/1023)*ocitana trenutna vrijednost ADC-a.
Sad ti to zapišeš kako god tebi to odgovara za računanje
Pričekaj, možda netko zna što konkretno onaj zapis radi.
Re: Pomoc oko referentnog napona za ADC 16f88
*/ je neko specijalno mnozenje u pbp.
U gornjem primeru pomnozi BROJ sa 500, zatim podeli 256.
U gornjem primeru pomnozi BROJ sa 500, zatim podeli 256.
Code: Select all
There are two special multiplication operators that allow large result values to be handled in a special way. These operators ignore some of the least-significant bytes of the result and return higher order bytes instead. With PBPW, this allows you to work (in a limited way) with 32-bit multiplication results. With PBPL, the top 32 bits of a 48-bit result are available.
The '*/' operator discards the least-significant byte of the result (byte0), and returns the 4 higher bytes to the result variable. If the result variable is a word or byte, the value will be truncated to fit.
W3 = W1 */ W0 ' Multiply W1 by W0, ignorebyte0 of the result, return byte1 and byte2 in W3
L3 = L1 */ L0 ' Multiply L1 by L0, ignore byte0 of the result, return byte1 through byte4 in L3
A simple way to think about '*/' is that it shifts the result 8 places to the right, resulting in an automatic division by 256. (This does not hold true if the result is a negative number.) This is useful for multiplying by non-integer constants.
If you wished to convert miles to kilometers, for example, you would need to multiply by a constant 1.6. PBP's integer math won't allow you to write "1.6" in an equation, but you can use '*/' to accomplish the same result:
kilometers = miles */ 410
' Same as kilometers = (miles * 410) / 256
The '**' operator is similar, but ignores two bytes instead of one. When using PBPL with long variable types, it returns byte2 through byte5 of the 48-bit result value. This gives a result that is shifted 16 places to the right, an inherent divide by 65536.
W2 = W0 ** 1000 ‘ Multiply W0 by 1000 and place the high order 16 bits (which may be 0) in W2