[ Brkic @ 26.11.2019. 08:42 ] @
Pozdrav,
treba mi da Arduino meri napon do 16vDC, preciznije 10.0v-16.0vDC, na samo jednu decimalu mi treba
našao sam gomilu primera ali nikako dobiti precizno merenje, uvek osciluje merenje u odnosu na unimer...pa odjednom počne meriti 2-3v manje nego prošli put...ma užas.
Arduino napajam sa stabilnih 5v (preko 7805)
otpornici za merenje napona su 10k i 1k sa 1%

ako neko ima dobar primer stabilnog Volt metra ?
[ goran_68 @ 26.11.2019. 08:52 ] @
Daj kod da vidimo zbog čega imaš greške u merenju.
[ Brkic @ 26.11.2019. 09:31 ] @
Iisprobao sam milion kombinacija formula i uvek osciluje merenje,
jedna od formula je

value = analogRead(analogInput);
vout = (value * 5.0) / 1024;
vin = vout / (R2/(R1+R2));

pratio sam i očitavanje na Analog IN i na unimeru meri isti napon a Arduino na ulazu meri 290-350 i samim tim menja se napon merenja.
Stavio sam i kondenzator od 1u na Analog IN ali nema promene.

Kako sam zaključio nije linearno pomeranje vrednosti na Analog IN sa pomeranjem napona.

Merim napon sa trafa gde se napon menja preko PWM i FET, ali ne bi to trebalo da ima veze jer Unimer meri jedno a Arduino drugo.

Buni me što Unimer miruje a Arduino osciluje po 0.5v na npr.13v, a kada pomerim napon na 15v Arduino meri 14.5v...znači nije linearno pomeranje AnalogIn vredosti...isto i pri smanjenju napona.

R1=10k, R2=1k i kondenyator 1u na Analog IN





[Ovu poruku je menjao Brkic dana 26.11.2019. u 10:59 GMT+1]
[ mikikg @ 26.11.2019. 10:42 ] @
Ceo problem potice od ulazne impedanse analognog ulaza, relativno je niska, ne znam tacno kod tog kontrolera ali recimo da je izmedju 2k i 10k, nije Hi-Z reda Mohm.

Dok ne stvavis jedan konverter impedanse, tj jedan jedinicni buffer sa OP-AMP, na primer OPA189 ili neki drugi "malo bolji" OP imaces te probleme, samo buffer pomaze.

OP se stavlja izmedju razdelnika i ulaza u kontroler, samo konvertuje impendansu, ne radi nikakvo pojacanje, ono je jedinicno =1.
[ goran_68 @ 26.11.2019. 11:30 ] @
Dovedi DC napon iz nekog ispravljača, promenljiv u tom opsegu (10V - 16V) pa onda uporedi vrednosti koje dobijaš instrumentom i tvojim mikrokontrolerom.

[Ovu poruku je menjao goran_68 dana 26.11.2019. u 12:41 GMT+1]
[ mikikg @ 26.11.2019. 11:31 ] @
Ovo gore sto sam pisao moze pre nego sto napravis da probas sa baterijom, uzmi bateriju 1.5V i prikljuci direktno na kontroler i meri tu vrednost, isto tako posle prikljuci dve baterije da ispadne 3V i meri tu vrednost unimerom i preko kontrolera, izmerene vrednosti moraju da budu drasticno tacnije i stabilnije, pazi na polaritet baterija kada prikljucujes.

To je samo zato sto baterija ima dosta nizu unutrasnju impedansu (imedansa izvora) i ne utice impedanza ulaza u A/D u tolikoj meri na krajnji rezultat merenja.
Zato se stavlja obicno ispred ulaza u A/D jedan OP-AMP sa nekim pojacanjem, u nasem slucaju 1, tu se dodatno stavljaju filteri i jose neke stvari za limitiranje koje ako upotrebis OPA189 ili OPA192 ne moras da dodajes spolja jer to sve ima u sebi.
[ Brkic @ 26.11.2019. 11:53 ] @
Bas sam mislio da probam sa baterijom i sa naponom iz PC napajanja pa vidim kako meri.

Ali posto meni treba kao krajnje merenje da merim taj izlaz iz trafa tu cu nesto morati dodavati.

Moze li primer sa nekim dostupnim OP-AMP-om ?? Negde sam naleteo da su koristili LM324
[ bogdan.kecman @ 26.11.2019. 12:55 ] @
bilo koji opamp, cak ce i uber spori 741 da zavrsi posao :D mada mu
treba malo jace napajanje ... a mozes neki fancy rail to rail da uzmes
.. mozes da uzmes i sample&hold kolo to ti je jos bolje .. na primer
LF398N http://www.ti.com/lit/ds/symlink/lf198-n.pdf

ovo sto ti je miki rekao je najlakse, obican buffer / voltage followe
circuit 1 na sledecem manualu
https://www.arrow.com/en/resea...undamentals-of-op-amp-circuits

a mozes u zavisnosti sta ti treba i peak detector da koristis .. (zadnje
kolo na toj strani) sa par sitnih izmena
[ Brkic @ 26.11.2019. 18:03 ] @
Evo spojio sam sve na PC napajanje i rezultati su sledeći

na 12.3v očitava izmedju 262-268
na 5.1v očitava izmedju 99-102
nc 3.3v očitava izmedju 59-61

Evo jednog zanimljivog podatka, ako je zanimljiv, Arduino sam spojio na 5v tj.5.1v i imam neki Cod koji cita VCC napon i on je 4.07v, a kada je bio spojen na trafo i 7805 očitavao je na VCC 3.5v

Ubacio razme formule za preračunavanje napona i uvek ima razlike, ako naštimam 12.3 onda odstupa na 3.3v i obrnuto.

Ne znam gde je zapelo
[ veselinovic @ 26.11.2019. 18:40 ] @
Meni ovo lici da ti seta referentni napon.
Vjerovatno si stavio da je napon napajanja referentni, a on seta.
Nemoj pogresno shvatiti, ali 7805 si blokirao kondenzatorima?
Jesi li probao neki drugi 7805, imao sam priliku vidjeti maltretirani 7805 koji radi ovako:
Kad ima neka potrosnja cca 100mA skroz korektno
kad se potrosnja smanji na nekih 5-6 mA pocne brljaviti sa nekim harmonicima i ima nestabilan napon.
Fino instrument u ruke pa zakaci nai 5V i mjeri. Vidi ima li neke korelacije u gresci i naponu od 5V.
Onda instrument direkt na analogni pin pa vidi ima li divljanja ili je stabilno.
E da, kad zavrsis ta mjerenja stavi neki kondenzator reda 100nF u seriju sa voltmetrom pa vidi ima li nekih AC komponenti na 5V.
Arduino nije bas u rangu Flukea, ali daje relativno korektne rezultate, bar meni.
[ Brkic @ 26.11.2019. 19:03 ] @
ok, moguće za 7805,
ali sada sam sve spojio preko PC napajanja, 5v sam opteretio sa 10R i dobio gore pomenute napone na izlazu napajanja.
Sada se Arduino napaja preko 5.1v od PC napajanja i merim njegove izlaze od 12v,5v i 3.3v

čak sam sada spojio na Aref pin 3.33v preko 10k i kako sam našao to bi trebalo stabilizovati napon... i sada ima malo veće ulazne vrednosti ali i dalje nije
linearan ulaz pa ima odstupanja na formuli za izračunavanja napona
sada 12v očitava na ulazu sa 436
5v očitava na ulazu sa 166
3.3v očitava na ulazu sa 100

i to opet nije linearno
[ vucko47 @ 26.11.2019. 19:38 ] @
Ako hoces da popravis ocitavanje moras koristiti referentni napon al taj napon nemoj da uzimas sa 7805 kao ni sa tog racunarskog napajanja. Koristi nesto kao tl431, lm4040... ili nesto slicno. Onda mozes raditi vise iscitavanja pa ispisivati srednju vrednost ili nadji neki sistem da dobijes sto pribliznije rezultate.
[ mikikg @ 26.11.2019. 21:20 ] @
Ne treba tu neka surovo dobra referenca, lepo "ustopovan" stabilizaror ce biti dovoljan.

Ja sam radio 18+ bit A/D konverziju kod STM32 bez reference, samo malo bolji stabilizator sam koristio, konkretno TPS73133 i to je sasvim OK.

Buffer/driver ispred A/D ulaza je obavezan, ne moze bez njega, zezace na sve strane i ne moze da se namesti da radi lepo bez njega, mora da se stavi!

Kod ovog Arduino se barata sa 10bit A/D rezolucijom.
[ mikikg @ 26.11.2019. 22:00 ] @
Konkretno o tome sam pisao ovde:



To je dan danas tacno (bez reference, bez spoljnjeg A/D konvertera, bez LED drajvera!) u +/-0.002V na 30V, pa izracunajte koliko je to i sa cime je napravljeno :)

Magicne reci su "OPA192 i TPS73133" ... :)
[ Brkic @ 26.11.2019. 22:09 ] @
Evo novih detalja,
uzeo drugi Uno što sam imao i sve radi skroz drugačije i stabilnije, sada linearno povećava vrednost ulaza na Analog In,
3.3 je tačan, 5.1 isto, jedino na 12 doda 0.1v, do 12 imam napon.

E sada pitanje je šta može biti sa prvim Uno što mu šetaju vrednosti ?

Ponovo sam probao prvi Uno i bez da ima napon na Analog In on pokazuje vrednosti i šetaju vrednosti i do 0.5v kada se preračuna!

Od OP-AMP imam lm741 i lm358, koji da uzmem i može neka preporuka šeme za njih ?

OPA189 ili OPA192 nisam nigde našao u prodaji.
[ ZAS011 @ 26.11.2019. 22:28 ] @
Tebi je nestabilno napajanje samog ATmega328.
Pogledaj malo šeme Arduino Uno (ima na netu kol'ko 'oćeš)
A mogao bi da koristiš i internu referencu koja je 1.1V.
[ mikikg @ 26.11.2019. 22:38 ] @
Citat:
Brkic:
Evo novih detalja,
uzeo drugi Uno što sam imao i sve radi skroz drugačije i stabilnije, sada linearno povećava vrednost ulaza na Analog In,
3.3 je tačan, 5.1 isto, jedino na 12 doda 0.1v, do 12 imam napon.

E sada pitanje je šta može biti sa prvim Uno što mu šetaju vrednosti ?

Ponovo sam probao prvi Uno i bez da ima napon na Analog In on pokazuje vrednosti i šetaju vrednosti i do 0.5v kada se preračuna!

Od OP-AMP imam lm741 i lm358, koji da uzmem i može neka preporuka šeme za njih ?

OPA189 ili OPA192 nisam nigde našao u prodaji.


To vec bolje radi i radi ocekivano, samo dodaj taj sto imas LM358 za pocetak po ovoj shemi:

Figure 25. Voltage Follower



Nozice za napajanje za pocetak stavi minus na 0V/GND i plus na 5V. Sa tom konfiguracijom ce dobro raditi sve sto dodje na A/D nozicu sto je u okviru od nekih 0.1V do 4.9V jer zbog limita OP-a ne moze to da ide potpuno do nule i potpuno do maksimuma napajanja, tehnicki ni rail-to-rail OP-ovi ne mogu to da rade jer i onim imaju neki napon saturacije i zbog toga mora da se prosiri opseg napajanja OP-a i to negativni rejl sa svega na primer -0.7V koji se dobije preko jedne Si diode i pozitivni rejl isto mora da bude veci bar za 1V da bi to radilo u punom opsegu bez problema.

Zato je zgodno u ovim "digitalijama" da MCU bude na 3.3V i da se onda od 5V dobiju pomereni (offsetovani) rejlovi za napajanje.


[Ovu poruku je menjao mikikg dana 27.11.2019. u 01:45 GMT+1]
[ mikikg @ 26.11.2019. 23:28 ] @
He he, da si bio na 6. jubilarnom skupu dobio bi shemu na majci :)

[ mikikg @ 27.11.2019. 01:09 ] @
Citat:
Brkic:
Evo novih detalja,
uzeo drugi Uno što sam imao i sve radi skroz drugačije i stabilnije, sada linearno povećava vrednost ulaza na Analog In,
3.3 je tačan, 5.1 isto, jedino na 12 doda 0.1v, do 12 imam napon.

E sada pitanje je šta može biti sa prvim Uno što mu šetaju vrednosti ?

Ponovo sam probao prvi Uno i bez da ima napon na Analog In on pokazuje vrednosti i šetaju vrednosti i do 0.5v kada se preračuna!

Od OP-AMP imam lm741 i lm358, koji da uzmem i može neka preporuka šeme za njih ?

OPA189 ili OPA192 nisam nigde našao u prodaji.



Odgovor na drugi deo pitanja sto prvi primerak plocice brljavi a drugi ne se svodi da na to da je dobro sto ti bar ova druga plocica radi i da je "pazis" jer prva plocica moguce da je ostecena, veoma su "nezni" ulazi u A/D konverter, ne sme da se predje dozvoljen napon, ako si makar jednom prikljucio makar na trenutak napon vec od npr 6V mozes da ostetis ulaz.
Jedino sto mozes da probas je drugi A/D ulaz, ako se isto ponasa onda je gubljenje vremena traziti sto sad ne radi kako treba, moguce je i da je do napajanja ali veca je sansa "przenje A/D ulaza", to se desava, jbg ...

Sto se tice OPA189 i OPA192 to ima samo kod Farnell, Mouser, Digi-key i direktno kod proizvodjaca na WEB ako si pravno lice ili ucenik/student. Ne traziti i kupovati to na drugom mestu, posebno ne kod kineza, sve su fejkovi.
[ Brkic @ 27.11.2019. 15:23 ] @
Hvala na pomoći i savetima,

probao sam sa LM358 kako je preporučeno i rezultati su sledeći:

-sa naponom iz PC napajanja sve radi OK stabilno, osciluje možda u 0.05v na 3.3v, 5v, 12v
-sa trafo bez opterećenja i PWM preko FET oscilacija na 14v je oko 0.2v.
-sa trafom i opterećenjem od 1.5A, PWM preko FET napon jako osciluje dok je na unimeru stabilan. Sto je viši napon npr.13v oscilacija na Arduinu je oko +/-3v tj.6v zajedno dok na unimeru pokazuje 13v stabilnih, a pri nižim naponima od npr. 6v oscilacija je oko +/-1v tj.ukupno 2v a na unimeru stabilnih 6v.
Sve je išlo preko LM358.
Arduino je merio napon na 1 sek.
Kako rešiti tu veliku oscilaciju ?

Još jedno pitanje,
zašto je tl431 bolji i precizniji od npr. LM7805, naravno u smislu da se TL431 podesi da bude na 5v ??

Oscilovanje napona sam umanjio uzimanjem proseka merenja na 3 sekunde i sada osciluje oko +/-0.10V na 15v
ali još to nije dobro.

[Ovu poruku je menjao Brkic dana 27.11.2019. u 18:51 GMT+1]
[ goran_68 @ 27.11.2019. 20:11 ] @
Citat:
-sa trafom i opterećenjem od 1.5A, PWM preko FET

Ako imaš osciloskop pogledaj kako izgleda napon koji meriš.
[ vucko47 @ 27.11.2019. 20:44 ] @
I kako izgleda napon sa kojim se napaja taj arduino. "Zakucaj" jedan tl431 na 2.5V i iskoristi ga kao eksternu referencu pa vidi sta se desava.
[ mikikg @ 28.11.2019. 12:53 ] @
Sad kada si stavio taj LM358 ispred ulaza u A/D imas mogucnost da stavis kondenzator izmedju ulaza u OP i prema masi (dakle ispred OP, ne posle OP, ne na nozicu od A/D) koji ce sluziti da malo ujednaci i filtrira napon.
Vrednost probaj koja ti vrsi posao, recimo izmedju 100pF do 10nF, veca vrednost ce bolje filtrirati ali ce sporije da reaguje, trebace mu na primer 1-2 sekunda da se napon "smiri".

Tebi to generalno lepo radi ali napon koji meris (koji jos uvek ne kontamo odakle ti i sta meris) je sam po sebi "promenljiv", nije stabilan tj apsolutno ravna linija nego ima neko setanje gore-dole i tako to kontroler i vidi.

Opet se vracam na primer sa baterijom, ako ti na primer sa baterijom od 1.5V to sve radi lepo i mirno onda tu nema sta dalje da se radi sa A/D, sve je to do napona koji dolazi do konvertera.
[ Brkic @ 28.11.2019. 15:25 ] @

Ovako si mislio mikikg ?

[ mikikg @ 28.11.2019. 15:36 ] @
Da tako, probaj razne vrednosti kondenzatora, idi slobodno i do 1uF, vidi sta ti najvise odgovara.

Otpornicki razdelnik ispred ulaza ti ostaje, ne moze bez njega u toj postavci sa kondenzatorom.

Ono sto si pisao u programu da si uzorkovao vise puta pa vadio prosek e to sad radi taj kondenzator analogno ;)
[ mikikg @ 29.11.2019. 15:35 ] @
Citat:
Brkic
Još jedno pitanje,
zašto je tl431 bolji i precizniji od npr. LM7805, naravno u smislu da se TL431 podesi da bude na 5v ??


TL431 pa i LM317 ima bolje tehnicke karakteristike od LM7805, to je mator regulator, sada ima neuporedivo boljih, TL431 je tehnicki izvor referetnog napona, samo to mu je uloga, malo stuje daje ali napon daje vrlo stabilno dok sa druge strane 7805 je snagas koji tera 1A, to dobro radi ali su mu ostale karakteristike truba.

Kada se barata samo sa digitalnim I/O na kontrolerima tu nije preterano problem regulatora napona, medjutim kada se umesa A/D ili D/A onda mora da se napajanje odradi malo bolje i to za pocetak prvo dobar regulator a spomenuh TPS73133 koji ima ADJ pin i koji se cak koristi kao mini remote-sensing kako bi doveo vrlo stabilan napon direktno do nozice kontrolera. Posle toga moze a i ne mora da se dodaje posebno referenca tj nesto poput TL431, pa preko LM4030, moze cak i LM10 i sve do LTZ1000 pa kako ko voli :)

Dobra stvar je sto ATmega328P i UNO plocica imaju vrlo finu opciju da se doda externi referetni napon na Aref pin, kada se to aktivira kroz program onda A/D uzima taj napon sa te nozice za maximum a nula pocinje od nule i to je cela nauka.
Stim sto pricamo ovde o 10bit A/D konverteru, bolje od TL431 nije potrebno osim ako hocete da oversemplujete A/D sto isto nije losa varijnata, tako moze da se digne za jos koji bit rezolucija, tada treba uzeti bolju referencu i bolji OP.
[ mikikg @ 29.11.2019. 16:03 ] @
Evo konkretna funkcija za filtriranje/oversampling (moving average), FILTER_OVERSAMP moze da bude bilo koja vrednost od 1, 2, 4, 8, 16, 32 ... 4096, 8192 ... dok ne "zakucate" kontroler, jede RAM memoriju :)

Ako je uloga tog MCU u "životu" da samo meri napon i to radi ceo dan a imate resursa viska, tu mozete da ih potrosite bar za nesto korisno :)

Upotreba je prosta, samo se rezultat sa A/D "provuce" kroz tu funkciju, ona ce tehnicki tek posle X-tog puta (FILTER_OVERSAMP) poceti da radi dok ne napuni buffer i posle toga radi svojim tempom.

Code:

//LPF
#define FILTER_OVERSAMP 64
int low_pass_filter(int x) {
    static long samples[FILTER_OVERSAMP];
    static int i = 0;
    static long total = 0;

    /* Update the moving average */
    total += x - samples[i];
    samples[i] = x;

    /* Update the index */
    i = (i==(FILTER_OVERSAMP-1) ? 0 : i+1);

    return total/FILTER_OVERSAMP;
}
[ korak @ 04.12.2019. 17:26 ] @
Moje skromni iskustvo.

Uvek je potreban bafer sa OP jediničnog pojačanja, osim u retkim izuzetcima.

Nikad ne očekujem da mi napon napajanja (Vcc) bude naponska referenca.
Zato na jedan od kanala dovedem napon sa neke naponske reference (ima ih da biraš, ja volim da koristim onu sa naponom 2.048V). Na taj način merim dva napona na osnovu kojih imam Nr i N, od reference i od napona Vx koji merim.

Nr = 1023*Vr/Vcc -> Vcc = 1023*Vr/Nr
N = 1023*Vx/Vcc = Nr*Vx/Vr -> Vx = Vr*N/Nr

Kao što se vidi N ne zavisi od Vcc. Ako se koristi moja omiljena referenca i naponi u mV, onda se množenje sa Vr svodi na šiftanje ulevo za 11 mesta.

Filtriranje merenog napona uvek radim softverskim filtriranjem vrednosti N.

Miki ti je dao kod filtra sa konačnim impulsnim odzivom dužine 64. Naravno on troši RAM, a ako želiš još veću vremensku konstantu, potrošićeš još više RAM-a.

Doduše, RAM se može uštedeti po cenu veće računice:

S1 = x1
S2 = (x1+X2)/2
.
.
Sn = ((n+1)*Sn-1+Xn)/n

što se u praksi svodi na

S = ((n+1)*S+X)/n


gde je S srednja vrednost, a x je ustvari N. Na kraju se primeni Vx = Vr*S/Nr


Ja koristim filtriranja sa beskonačnim impulsnim odzivom, koje se radi po praktićnoj formuli:

S = S + (x-S)/a

Uvek uzimam da je a = 2^m kako bi deljenje sveo na šiftovanje za m mesta udesno. Ovakav filter je ekvivalent NF RC filtru sa vremenskom konstantom dT*a, gde je dT vremenski razmak između uzastopnih konverzija. Prilikom šiftanja udesno, treba voditi računa da se ne izgube validni bitovi, takođe treba razliku x-S eksplicitno konvertovati u neki oznacen tip, na primeru int.

Na primer, ako je konverzija 10-to bitna, a čita se 16-to bitna vrednost konverzje, onda validni bitovi treba da budu najveće težine, tako da u očitanoj vrednosti na najnićim mestimaima 6 nula. Tih 6 bitova nisu validna pa m može da se kreće od 1 do 6.

Za veće vremenske konstante, gde je m veće, samo treba pravilno deklarisati varijable S i X, sa potrebni viškom bitova na najnižem mestu.

Inicijalna vrednost za S može biti bilo koja, a najčešće 0. Ako je prirodni format x 2 bajta, deklarišite ga kao 4 bajta, za veće m, pri čemu vrednost x upisujete u viša 2 bajta. Kada vam treba S vrednost, onda od nje uzimate viša 2 bajta.

Vrednosti koje daje ovaj filter se mogu uzimati u bilo kom trenutku, jer ne postoji vreme filtriranja kao kod prethodnog. Može da filtrira sa velikom vremenskom konstantom, bez da zahteva više RAM-a.

Ekvivalentnost sa RC filtrom se uočava u tome da se napon na kondenzatoru (S) uvećava proporcionalno razlici ulaznog napona (x) i napona na kondenzatoru, naravno kada se ta razlika integrali.

[Ovu poruku je menjao korak dana 04.12.2019. u 22:42 GMT+1]
[ mikikg @ 04.12.2019. 21:41 ] @
Hvala @korak na vrlo korisnim informacijama.

Sto se tice ustede RAM-a i generalno celekupne efikasnosti trenutno najzgodnije resenje je upotreba predvidjenih instrukcija za DSP koje rade sa minimalnim utroskom RAM-a i CPU resursa ali se obicno trosi ROM za smestanje koeficijenata za FIR i IIR filtere. Ima to sve vec predidjeno na dsPIC kontrolerima i ST ARM-u u malo drugacijem obliku dok Texas Instruments gura dedicated DSP jezgro (vise komada) u svoje ARM kontrolere za te potrebe i radi mnooogo brzoo.
[ korak @ 04.12.2019. 22:23 ] @
Da, generalno za dobro filtriranje treba DSP.

Međutim na ovoj temi pominjemo filtre prvog reda. Pa čak i kod koji si postavio je FIR filter koji ima impulsni odziv pravougaonog izgleda. Prava stvar da on ne bude pravougaonik, i onda bi njegov oblik bio u flash-u, ali onda ima mnogo množenja i sumiranja za šta bi bio neophodan DSP.

Nego sećam se kada je pre oko 10 god. na ovom pdf-u bilo svakog dana po par novih tema. Hobisti su radili u asembleru i poznavali su svoj MCU u prste. Nisu morale da im se objašnjavaju elementarne stvari, osim početnicima.

Sada je došlo novo vreme, Arduino, biblioteke funkcija i svašta još, i vidim da ljudi malte ne ne znaju sa čim rade (a i ne moraju), pa ih sapliću i neki banalni problemi, koje ne mogu da reše pa se obraćaju ovde za pomoć.

Poludeo sam kada sam nabavio pločicu sa ARM-om (1MB flash, 256KB RAM, 6 SCI, 3 SPI, Eternet i svašta još na 100 pina) a na njoj konektori po Arduino standardu - potpuna degradacija.

I sada je koristim da preko nje programiram svoje prototipske pločice.

Zbog svega toga retko posećujem ovaj pdf, pa kada vidim top temu sa odgovorom od pre 15 dana još više se razočaram.
[ Brkic @ 04.12.2019. 23:42 ] @
Ništa te nisam razumeo korak :-)

ajd prvo malo jednostavnije objasni ovo:
Citat:
korak:
Zato na jedan od kanala dovedem napon sa neke naponske reference (ima ih da biraš, ja volim da koristim onu sa naponom 2.048V). Na taj način merim dva napona na osnovu kojih imam Nr i N, od reference i od napona Vx koji merim.
Nr = 1023*Vr/Vcc -> Vcc = 1023*Vr/Nr
N = 1023*Vx/Vcc = Nr*Vx/Vr -> Vx = Vr*N/Nr

Kao što se vidi N ne zavisi od Vcc. Ako se koristi moja omiljena referenca i naponi u mV, onda se množenje sa Vr svodi na šiftanje ulevo za 11 mesta.

Filtriranje merenog napona uvek radim softverskim filtriranjem vrednosti N.

Koja je to referenca sa naponom 2.048V? Na koji od kanala ? ..i celu rečenicu i računicu ? :-)

Sada kao referentni napon koristim 2.5v preko LM431 i svejedno imam razliku kada merim napon baterije od 12v i 12v sa trafa, razlika bude 0.2v manje ili više meri ne znam sad mi mozak stao, unimer uvek meri 12v a Arduino 0.2v manje ili više ne znam sad.
Ulazni napon filtriram prosekom, imao sam 2 varijante,
sabiranjem ulaza u vremenu od 1 sekunde pa vadjenje proseka u odnosu koliko je bilo čitanja
i u vremenu od 1 sek uzimam Min i Max vrednost i od te 2 vrednosti napravim prosek.
Koliko se sećam u 1 sek je bilo oko 7500 merenja kada radi samo to u Loop-u


[ mikikg @ 05.12.2019. 11:39 ] @
BTW: Da ne bude zabune, to sto ja ne stavljam u mojim probama referencu za A/D to ne znaci da one ne trebaju - ja to namerno radim da bih video neke druge pojave.
Preporucio sam da prvo treba da se obezbedi fin stabiln napon za napajanje kontrolera, to je preduslov za uvodjenje dobre reference, sa takvim stabilnim naponom se onda napaja referenca i tada ona radi u najoptimalnijem rezimu.

U vezi problema "meri lepo sa baterijom od 12V a sa transformatorom ne", jedan od mogucih uzroka moze da bude GND-LOOPS.

Ako nije uradjeno dobro rutiranje vodova za GND moze da se desi da se prilikom prikljucivanja tog transformatora (i to samo jedan vod, npr minus) dodje do dodatnog protoka struje kroz nulti vod koji pravi tu razliku od 0.2V.
Dovoljna je vrlo mala struja kroz GND da napravi problem, reda manje od 1mA koji moze da se stvori vrlo lako kroz parazitvine kapacitivnosti i naizmenicnih smetnji koje se tu provuku.

Dakle, za A/D ili D/A mora da se uradi potpuno nuliranje GND linije, dakle princip ZVEZDE i razvodjenje GND linija jednu-po-jednu iz jedne-jedine grupisane GND tacke.
Koliko je ovo sve izvodljivo sa vec gotovom UNO plocicom to vec ne znam ...

[ korak @ 05.12.2019. 12:48 ] @
Citat:
Brkic:
Ništa te nisam razumeo korak :-)

ajd prvo malo jednostavnije objasni ovo:
Citat:
korak:
Zato na jedan od kanala dovedem napon sa neke naponske reference (ima ih da biraš, ja volim da koristim onu sa naponom 2.048V). Na taj način merim dva napona na osnovu kojih imam Nr i N, od reference i od napona Vx koji merim.
Nr = 1023*Vr/Vcc -> Vcc = 1023*Vr/Nr
N = 1023*Vx/Vcc = Nr*Vx/Vr -> Vx = Vr*N/Nr

Kao što se vidi N ne zavisi od Vcc. Ako se koristi moja omiljena referenca i naponi u mV, onda se množenje sa Vr svodi na šiftanje ulevo za 11 mesta.

Filtriranje merenog napona uvek radim softverskim filtriranjem vrednosti N.

Koja je to referenca sa naponom 2.048V? Na koji od kanala ? ..i celu rečenicu i računicu ? :-)

Sada kao referentni napon koristim 2.5v preko LM431 i svejedno imam razliku kada merim napon baterije od 12v i 12v sa trafa, razlika bude 0.2v manje ili više meri ne znam sad mi mozak stao, unimer uvek meri 12v a Arduino 0.2v manje ili više ne znam sad.
Ulazni napon filtriram prosekom, imao sam 2 varijante,
sabiranjem ulaza u vremenu od 1 sekunde pa vadjenje proseka u odnosu koliko je bilo čitanja
i u vremenu od 1 sek uzimam Min i Max vrednost i od te 2 vrednosti napravim prosek.
Koliko se sećam u 1 sek je bilo oko 7500 merenja kada radi samo to u Loop-u



LM4040 ima za 2,048V i 4,096V. Vezuješ je na bilokoji kanal koji ti je zgodan. Kada referencu vežeš na kanal, a AD koristi referencu Vcc, onda ti je opseg merenja od 0V do Vcc. Ako referencu vežeš na pin za referencu AD konvertora, onda ti je opseg merenja od 0V do napona reference.

Kakve god smetnje da imaš one su AC smetnje i filtriranjem se eleminišu, ali ne ako vršiš konverziju na 1s. Moraš češće da bi hvatao i smetnje i da bi one proćle kroz filter. Loš je postupak ako srednju vrednost računaš između max i min.

Problem može postojati ako je loše izvedena GND veza. GND arduina moraš vezati tako da kroz tu vezu ne prolaze druge struje osim od arduina, kao što je mika rekao u "zvezdu".

7500 merenja u sekundi je oko 133us po jednom merenju, što je sasvim dovoljno da isfiltrira AC smetnje. Integeral AC smetnji teži nuli sa vremenom integracije, a NF filtriranje vrši funkciju integraljenja.

Što se tiče računice ona je jednostavna, i mislim da sam je očigledno predstavio. U suštini, mereći referencu ti možeš da izmeriš koliki je Vcc (jer referencu smatramo apsolutno tačnom). Kada to znaš, onda u merenju napona Vcc zameniš vrednošću koji si dobio mereći referencu, i tako ti merenje ne zavisi od Vcc.

Ako još nešto nije jasno,pitaj.
[ Brkic @ 05.12.2019. 17:36 ] @
Joj ništa nisam razumeo sem da GND sredim max što mogu

jednu referencu dovedem na AREF
za AREF sam sa LM431, 2.5v, oko 7.5mA i elektrolit od 2.2uF i direktno isao na AREF

šta sa drugom referencom od 5v koju cu isto napraviti od LM431, sa drugom referencom napajam AD i merim istu tu ref.od 5v na jednom ulazu ?

napon napajanja (Vcc) moze sa 7805 ili isto neki Ref napon od 5v ?

opseg merenja AD to sve razumem.
[ korak @ 06.12.2019. 15:05 ] @
Veliki je korak da sreduš GND. To treba da bude po principu da GND arduina vežeš na GND izvora napona tako da kroz tu ćicu ide samo struja Arduina.

Ako referencu vežeš za neki kanal, onda ne moraš da vezuješ na ARF. Ali, ako ti je opseg merenog napona manji od napona reference, onda veži referencu na ARF, izbeći ćeš dodatno preračunavanje.

U obe varijante ti treba samo jedna referenca. Upotreba reference ima za cilj da konverzija ne zavisi od napona napajanja
MCU-a.Tada možeš koristiti 7805 za napajanje, iako je njegova tačnost u okviru 5%, on neće uticati na tačnost konverzije.

Spomenuo si 7500 merenja u sekundi, ako si ostao pri tome pogledaj kako si setovao ADC s obzirom na tu brzinu. 7500 merenja u sekundi znači jedno merenje za 133us, a vreme konverzije se može podesiti u opsegu od 13us do 260us (za ATmega328).
[ Brkic @ 06.12.2019. 16:44 ] @
Hvala na odgovoru,
ADC je setovan po Default na D5 je nakačen
Ali kada Loop radi i druge stvari onda je znatno manje očitavanje.
[ korak @ 06.12.2019. 17:43 ] @
Uredu.

Ali najbolje je da konverziju vršiš u interaptu gde će se očitati ADC i vrednost smestiti u određenu varijablu. Onda u glavnoj petlji samo pročitaš tu varijablu.
[ Brkic @ 06.12.2019. 18:12 ] @
Ok prihvatam mišljenje ali ne znam kako da ga sproverem, ako može neki primer.

Sada
1.ulaz očitavam A5 sa AD u jedan varijablu i posle 1 sec varijablu podelim sa brojem čitanja gde mi je za 19.4v imao ulaz 727.4

Sada trebam primeniti 2.ulaz sa referentnim naponom od 5v u izračunavanje 1.ulaza

AREF mi je 2.5v

sa 7805 napajam Arduino
[ bogdan.kecman @ 06.12.2019. 18:51 ] @
jbt al ste ga zakomplikovali :D ...

napajas duino sa 5V, super, kupi referencu 4.096V i vezi je na Aref.

na taj nacin si dobio da ti merenje ide od 0 do 4.096V (znaci izgubio si 1V, nista strasno, a dobio si preciznost brzinu i jednostavnost)

taj malac ima 10bitni adc, znaci raw adc vrednost koju citas ti ide od 0 do 1023

znaci

Code:

  WORD rawadc;
  WORD Vin;

  rawadc = readadc(0);
  Vin = rawadc << 2;  // vin = rawadc * 4


i u Vin imas vrednost u mV

sto se tice filtriranja, zavisi sta ti je potreba, za klasican voltmetar moving average je smor zato sto kad otkacis ulaz treba mu po sekunde, sekud a mozda i dve sekunde (zavisi kako iskonfigurises) da padne na nulu .. znaci za klasican, citas 8x i sabiras pa odbacis zadnja 3 bita (shiftas u desno) i to prikazes, ili ako imas vremena i memorije citas 10x i sabiras, cuvas min i max, oduzmes min+max i shiftas 3 puta u desno ..

i to ti je to, sve komplikovanije od toga je gubljenje vremena i novca jer ako ti treba bolje od toga mora pocnes od toga da ti treba bolji adc
[ bogdan.kecman @ 06.12.2019. 19:01 ] @


os ok referencu (0.5% + 100ppm/C)
https://store.comet.rs/Catalogue/Product/99258/

ili do jaja referencu (0.2% + 100ppm/C)
https://store.comet.rs/Catalogue/Product/16223/

prva je 30din, druga 70din ili tako nesto ..

lm431 je cool ali to "adjustable" ... kad ti trebaju te klasicne vrednosti (1.024, 2.048, 4.096 etc) kupis lepo profi referencu za kikiriki i ne razmisljas :D
[ korak @ 06.12.2019. 19:10 ] @
Citat:
Brkic:
Ok prihvatam mišljenje ali ne znam kako da ga sproverem, ako može neki primer.

Sada
1.ulaz očitavam A5 sa AD u jedan varijablu i posle 1 sec varijablu podelim sa brojem čitanja gde mi je za 19.4v imao ulaz 727.4

Sada trebam primeniti 2.ulaz sa referentnim naponom od 5v u izračunavanje 1.ulaza

AREF mi je 2.5v

sa 7805 napajam Arduino


Bogdan je stari vuk, on ti je objasnio direktno ono što treba da uradiš.

Moja preporuka je samo da konverziju radiš u interaptu, ako želiš filtriranje.
[ bogdan.kecman @ 06.12.2019. 19:21 ] @
Citat:
Brkic:
Ok prihvatam mišljenje ali ne znam kako da ga sproverem, ako može neki primer.


ne mozes tek tako da se igras sa interaptom na 328, posebno kad koristis arduino ide....

elem, imas
FrequencyTimer2 library

i onda nesto tipa:

Code:

#include <FrequencyTimer2.h>

volatile unsigned long keetah = 0;
unsigned long count;

void kita(void) {
  keetah++;
}

void setup() {
  Serial.begin(9600);
  delay(2);
  FrequencyTimer2::setPeriod(200);
  FrequencyTimer2::setOnOverflow(kita);
  FrequencyTimer2::enable();
}

void loop() {
  noInterrupts();
  count = keetah;
  interrupts();     
  Serial.println(count, DEC);
  delay(1000);
}


iliti u tvom slucaju nesto tipa

Code:

#include <FrequencyTimer2.h>

volatile unsigned long keetah = 0;
volatile unsigned long VIN = 0;

void kita(void) {
  static unsinged long adcdata=0;
  if (++keetah > 7) {
    adcdata += analogRead(A0);
  } else {
    // VIN = adcdata * 4 / 8
    VIN = adcdata / 2; // odbaci zadnji bit
    keetah = 0;
    adcdata = 0;
  }
}

void setup() {
  Serial.begin(9600);
  delay(2);
  FrequencyTimer2::setPeriod(100);
  FrequencyTimer2::setOnOverflow(kita);
  FrequencyTimer2::enable();
}

void loop() {
  unsigned long v;

  noInterrupts();
  v = VIN;
  interrupts();     
  Serial.print("Vin = ");
  Serial.print(v);
  Serial.println("mV");
  delay(1000);
}



obrati samo paznju D11 ce ti imati output 50% DC sa freq 1000000 / period
[ bogdan.kecman @ 06.12.2019. 19:24 ] @
i, da, obrati paznju, kucao sam direkt u ES poruku, moguce da ima neki bug :D, al valjda razumes ideju
[ bogdan.kecman @ 06.12.2019. 19:29 ] @
ako oces floating average onda nesto tipa:

Code:

#include <FrequencyTimer2.h>

volatile unsigned long VIN = 0;

void kita(void) {
   VIN =  (VIN * 3 + analogRead(A0) *4 ) / 4; // neka kompajler odluci sta ce kako shiftuje, svakako je brz matis
}

void setup() {
  Serial.begin(9600);
  delay(2);
  FrequencyTimer2::setPeriod(100);
  FrequencyTimer2::setOnOverflow(kita);
  FrequencyTimer2::enable();
}

void loop() {
  unsigned long v;

  noInterrupts();
  v = VIN;
  interrupts();     
  Serial.print("Vin = ");
  Serial.print(v);
  Serial.println("mV");
  delay(1000);
}
[ bogdan.kecman @ 06.12.2019. 19:32 ] @
ovako ti je bas jak filter
Code:

void kita(void) {
   VIN =  (VIN * 3 + analogRead(A0) *4 ) / 4; 
}


tu realno biras kako oces da seces pikove .. mozes da ides i naopacke tipa vrlo slab filter

Code:

void kita(void) {
   VIN =  (VIN  + analogRead(A0) * 12 ) / 4; 
}


ili neki srednji


Code:

void kita(void) {
   VIN =  (VIN  + analogRead(A0) * 4 ) / 2; 
}

[ korak @ 06.12.2019. 20:39 ] @
Bogdane, možda si napravio omašku, ili nisi dodatno objasnio.

Ako se uzme da se meri konstantni napon, onda po prvom napisanom kodu Vin -> Va0

Po drugom i trečem Vin -> 4*Va0.
[ bogdan.kecman @ 06.12.2019. 20:48 ] @
na koji deo mislis?


VIN = (VIN * 3 + analogRead(A0) *4 ) / 4;
VIN = (VIN + analogRead(A0) * 12 ) / 4;
VIN = (VIN + analogRead(A0) * 4 ) / 2;


analogread * 4 je VIN

u prvom imamo 3 * vinstari + vin = 3 stara merenja + 1 novo merenje i kada to onda podelimo sa 4 imamo filtrirano velicinu 1x

u drugom imamo 1x vinstari + 3 * vin, znaci 1 staro merenje + 3x novo merenje i podelimo sve sa 4 opet dobije 1x

u trecem 1x vinstari + 1x vin dakle 1 staro + 1 novo pa podelimo sa 2 opet dobijemo 1x


analogread() cita 0-1024, ako nam to predstavlja 0 do 4096mV znaci da 4 * analogread() daje vin


znaci u sve 3 varijante imamo dobar red velicine kao izlaz samo sto u prvom stara vrednost vredi 3/4 a nova vrednost 1/4, dakle jak filter koji ne sljivi mnogo brze promene, u drugom nova vrednost vredi 3/4 a stara 1/4 (dakle skroz obrnuto) sto znaci da reagujemo na brze promene ali ih ipak malo usporavamo, i treci, stara vrednost vredi 50% nova vredi 50% .. znaci nesto izmedju
[ korak @ 06.12.2019. 21:17 ] @
Ako je Va0 konstanta, kako vreme teče onda Vin novo teži Vin staro, pa se na kraju izjednače.

I: VIN = (VIN * 3 + analogRead(A0) *4 ) / 4;

4*Vin = 3*Vin+Va0
Vin = Va0

II: VIN = (VIN + analogRead(A0) * 12 ) / 4;

4*Vin = Vin+12*Va0
3*Vin = 12Va0
Vin = 4*Va0

II: VIN = (VIN + analogRead(A0) * 4 ) / 2;

2*Vin = Vin+4*Va0
Vin = 4*Va0

Proverio sam i numerički u MathCad-u.

Obrazac za ovu vrstu filtriranja je:

Vin = ((n-1)*Vin+Va0)/n

pa se dobija

n*Vin = (n-1)*Vin+Va0
Vin = Va0
[ korak @ 07.12.2019. 00:24 ] @
Uzgred, formula:

Vin = ((n-1)*Vin+Va0)/n

može da ima zgodniji oblik:

n*Vin = n*Vin-Vin+Vao

odnosno

Vin = Vin+(Va0-Vin)/n

gde nema množenja sa (n-1), a n može da se izabere da bude 2^m, pa da se deljenje svede na šiftanje udesno.
[ bogdan.kecman @ 07.12.2019. 09:42 ] @
Citat:
korak:
II: VIN = (VIN + analogRead(A0) * 12 ) / 4;

4*Vin = Vin+12*Va0
3*Vin = 12Va0
Vin = 4*Va0




kako si ovo izracunao :D

VIN = (VIN + analogRead(A0) * 12 ) / 4;

Va0 = analogRead(A0) * 4

dakle

analogRead(A0) * 12 = Va0 * 3

dakle

4 * Vin = Vin+3xVa0



[ Brkic @ 07.12.2019. 12:49 ] @
Probao sam oba koda i isto rade uz izmene al imam pitanja


sa ovim codom izračunava 1767mV-1768mV a unimer meri 18.85 V
Code:
#include <FrequencyTimer2.h>

volatile unsigned long keetah = 0;
volatile unsigned long VIN = 0;
static unsigned long adcdata=0;

void kita(void) {
  
  //keetah++;
  if (++keetah < 7) // ovde treba < umesto >
  { 
    adcdata += analogRead(A4);
  } 
  else 
   { 
     VIN = adcdata * 2.495 / 6;  // ovde 6 umesto 8 i 2.495 jer mi je AREF 2.495v
     //VIN = adcdata / 2; // odbaci zadnji bit
     keetah = 0;
     adcdata = 0;
   }
}

void setup() {
  analogReference(EXTERNAL);
  pinMode(5, OUTPUT);
  analogWrite(5,255);
  
  Serial.begin(9600);
  delay(2);
  FrequencyTimer2::setPeriod(400); // kada je 100 blokira se LOOP, na 400 proradi
  FrequencyTimer2::setOnOverflow(kita);
  FrequencyTimer2::enable();
}

void loop() {
  unsigned long v;
  noInterrupts();
  v = VIN;
  interrupts();     
  Serial.print("Vin = ");
  Serial.print(v);
  Serial.print("mV / IN ");
  Serial.println(analogRead(A4));
  delay(1000);
}


isti je rezultat i sa ovim codom 1767mV-1768mV a unimer meri 18.85 V
Code:

#include <FrequencyTimer2.h>

volatile unsigned long VIN = 0;

void kita(void) {
   //VIN =  (VIN * 3 + analogRead(A0) *4 ) / 4; // neka kompajler odluci sta ce kako shiftuje, svakako je brz matis
   VIN =  (VIN * 3 + analogRead(A0) *2.495 ) / 4;
}

void setup() {
  Serial.begin(9600);
  delay(2);
  FrequencyTimer2::setPeriod(400); // 100
  FrequencyTimer2::setOnOverflow(kita);
  FrequencyTimer2::enable();
}

void loop() {
  unsigned long v;

  noInterrupts();
  v = VIN;
  interrupts();     
  Serial.print("Vin = ");
  Serial.print(v);
  Serial.println("mV");
  delay(1000);
}



FrequencyTimer2::setPeriod(400); - koliki je ovo period, 1000=1 sec ??

kada sam na A0 pustio referentni napon od 5v i da bi mi ispisivao 5000mV trebala je formula
VIN2 = (adcdata2 * 2.444)*2, ispada da je IREF 2.444v ili grešim ?
Tu na tih 18.85v treba dodati još 0.0909 jer prolazi preko otpornika 10k i 1k da bi se uopšte mogao meriti

[Ovu poruku je menjao Brkic dana 07.12.2019. u 14:39 GMT+1]
[ korak @ 07.12.2019. 15:49 ] @
Shvatio sam da ti razdelnik čine otpornici 10K i 1K, što znači da ulazni napon deli sa 11.

ADC je 10-to bitni, daje vrednosti u opsegu od 0 do 1023- Zato malo doradi iskaz

VIN = adcdata * 2.495 / 6;

u:

VIN = (adcdata*2495*11/1024)/6

treba da dobiješ oko 18900-

Ako su ti otpornici u razdelniku 5% onda ocekuj toliku moguću grešku. Ako si u mogućnosti zameni ih sa 1%.
[ bogdan.kecman @ 07.12.2019. 15:51 ] @
Citat:

FrequencyTimer2::setPeriod(400); - koliki je ovo period, 1000=1 sec ??


mora pogledas FT2 dokumentaciju, ako se dobro secam to generise pwm 1000000 / x Hz na D11 pinu dakle setuje timer1/2 sa tim preskalerom ALI ti onda sa FrequencyTimer2::setOnOverflow(kita); zakacis funkciju kita() da se izvrsi na overflow, e sad ne secam se dal je overflow 8bit ili 16bit ako je 8bit onda ti se kita() izvrsi u slucaju setPeriod(1000)

1000000/1000 = 1000Hz
1000Hz / 256 = 3.9 puta u sekundi ti se izvrsi kita()

ako je 16bitni onda jos sporije ...

znaci tvojih 400 bi trebalo da izvrsava kita() 9.7 puta u sekundi

TREBALO!!!!

moz proveris tako sto ces u kita() upalis ugasis led umesto sto radis sve ovo pa izmeris :D ili pravilnije procitas doc za FT2 library :D ... ja sam ga koristio za generisanje frekvencije na D11 pre milion godina tako da ovo ostalo je vise manje educated guess



e sad, sto se tice citanja, poenta tih fancy referenci od 20-50din je da ubrza matis i pojednostavi stvari, odatkle 4.095-4.096 referenca, 2.047-2.048, 1.023-1.024 etc..

krenes za pocetak bez ikakvog filtriranja

Code:

#include <FrequencyTimer2.h>
#define REFERENCA 2495

volatile unsigned long VIN = 0;

void kita(void) {   
   // https://www.arduino.cc/reference/en/language/functions/math/map/

   VIN =  map( analogRead(A0), 0, 1023, 0, REFERENCA);
}

void setup() {
  Serial.begin(9600);
  delay(2);
  FrequencyTimer2::setPeriod(400); // 100
  FrequencyTimer2::setOnOverflow(kita);
  FrequencyTimer2::enable();
}

void loop() {
  unsigned long v;

  noInterrupts();
  v = VIN;
  interrupts();     
  Serial.print("Vin = ");
  Serial.print(v);
  Serial.println("mV");
  delay(1000);
}


to je da vidis sta ti je na A0 ... e sad sta si ti turio pre A0, nisam citao celu temu mnogo ste zakomplikovali .. ali dovedi napon sa baterije na A0 i vidi sta ces dobiti
[ korak @ 07.12.2019. 16:17 ] @
Citat:
bogdan.kecman:
Citat:
korak:
II: VIN = (VIN + analogRead(A0) * 12 ) / 4;

4*Vin = Vin+12*Va0
3*Vin = 12Va0
Vin = 4*Va0




kako si ovo izracunao :D

VIN = (VIN + analogRead(A0) * 12 ) / 4;

Va0 = analogRead(A0) * 4

dakle

analogRead(A0) * 12 = Va0 * 3

dakle

4 * Vin = Vin+3xVa0





Vrlo prosto, u prethodnom postu posle 8 sumiranja imaš iskaz:

VIN = adcdata / 2; // odbaci zadnji bit

što nisam povezao sa sledećim postom na koji sam se oslonio u odgovoru.

To je to.
[ Brkic @ 07.12.2019. 16:45 ] @
@korak
otpornici su mi 1%
VIN = (adcdata*2495*11/1024)/6
sada sa ovom formulom je OK, razlika izmedju unimera i Arduina je neka neznatna i razlika je konstantna na svim naponima kliko sam mogao na brzinu ispitati.

Ja sam u medjuvremenu uzeo formulu mereći Ref 5v na drugom Input i dobio
VCC=(5000.000/(adcdata2/6))/2; // VCC=2.444; AREF=4.495v

kada taj VCC ubacim dobijem za 0.05v više od tvoje formule ali konstantna je ralika
VIN = (adcdata * VCC / 6)/0.0909;


[ korak @ 07.12.2019. 23:41 ] @
Nisam dobro razumeo ovo sa 5V.

Kao doveo si na jedan ADC kanal 5V a referentni napon ti je 2,5V (2,495V). Ne verujem da si tako nešto uradio, jer znaš da napon koji se uvodi u ADC kanal ne treba da bude veći od referentnog napona, pa sam zbunjen.

[ Brkic @ 07.12.2019. 23:57 ] @
Nećeš verovati da sam u svoj zbrci to uradio i sve je ostalo čitavo.
I ja sam kasnije skontao šta sam uradio i još merio napon i radilo je to...
[ korak @ 08.12.2019. 00:08 ] @
Nisam očekivao da će nešto da crkne, ali samo merenje je nepredvidivo, nije pravljeno za tu situaciju.
[ Brkic @ 08.12.2019. 00:12 ] @
Sa tvojom formulom sada lepo meri, probao sam i na bateriju i na trafo i lepo radi.
Hvala na pomoći.
[ korak @ 08.12.2019. 01:01 ] @
Nema potrebe za zahvaljivanjem, forum i postoji za to.

Pomogao sam ti oko opštih stvari, ništa posebno, inače ako izuzmemo ARM ja radim sa mikrokontrolerom sa kojim niko ne radi na ovom forumu, ali svi se oni vrte oko istih stvari.
[ tomam @ 08.12.2019. 05:07 ] @

http://ww1.microchip.com/downloads/en/AppNotes/00002447A.pdf

Mozda ovo bude nekom interesantno :)
[ korak @ 21.12.2019. 17:43 ] @
Pade mi napamet, da podelim jedan tekst sa vama, možda će nekome biti interesantan.

Naime, često se piše o AD konverziji, a ponekada i o filtriranju ulaznog signala. Samom filtriranju se često ne posvećuje veča pažnja, važno je da radi konverzija.

Naravno da se mogu naći tekstovi koji se bave digitalnim filtriranjem, ali oni su akademski i nisu primenljivi na 8-o bitne mikrokontrolere koji dominiraju kod naših hobista. Ja sam sebe radi napravio uprošćenja koja su primenljiva na ovim mališama, sa zadovoljavajućim rezultatom. To sam zapisao da imam u svojoj arhivi, kako bih se podsetio kada mi bude trebalo.

Pokušaću da prikačim taj fajl.
[ bogdan.kecman @ 21.12.2019. 20:42 ] @
hvala za pdf koristan je i za ozbiljnije mcu, pri tome, mislim da jako
gresis sto mislis da se lokalni hobisti drze 8bita :D 90% je preslo sto
na novi arduino (32bit) sto na bluepill (32bit) sto na ozbiljnije
32bitne mcu kako su postali vrhunski dostupni (za ispod 5$ dobijes sve
sto ti treba da tuce 32bitno + ti ne treba programator, zabodes na usb i
vozi)
[ korak @ 21.12.2019. 21:32 ] @
Ja sam Bogdane "stari roker", jedan 8-o bitni i ARM MK64FN1M0VLL12 (256K+1M, 120MHz) i sve pokrivam.

Arduino obilazim u širokom krugu, kupio jedan, na njemu ARM 100 pina a po standarsu arduino R3 izvedeno na konektor 20-tak pinova, psovao sam sebe.

Ionako mi nije problem da napravim sve što mi treba i da hardver bude optimalan. Razvojni sistem ima procesor ekspert, gde zadam parametre internog modula, i on mi generiše kod za inicijalizaciju i korišćenje modula. Sve mi je pod kontrolom.

E sad, nemam više potrebe da jurim pare, biram šta ću da radim, polako, ali najbolje što mogu.
[ korak @ 21.12.2019. 21:56 ] @
Da dodam, nisu prešli na 32-o bitne, neki koriste razne gotove pločice a da ne znaju koji je procesor na pločici.

Sećaš se da su nekada znali u "sitna crevca" svoje PIC-ove, AVR-ove i druge. Ko danas zna tako ARM (mislim da tebe tu mogu da izuzmem), naravno da ne zna, dakle nisu osvojili tehnologiju 32-o bitnih MCU-a.

Gotova pločica, skinute biblioteke i teraj do prvog problema, a onda tu je ovaj forum. Pitanja su često trivijalna, a ranije ih nije bilo. Zato mi je ovaj pdf postao pomalo dosadan.

Sve se odvija u pravcu koji je jedan profesor lepo opisao rečima "imaćemo programere, ali nećemo imati inženjere".

Postajemo zavisni od onih koji prave pločice i pišu biblioteke funkcija za njih. Dobro za zaradu, ali loše, generalno, na duge staze. Ne mislim na komercijalnu zavisnost, to sve nije skupo, već na sužavanje znanja korisnika u odnosu na neku tehničku elitu koja je negde tamo daleko.