Close

analogReference – pomoc

Úvodní stránka Fórum Vaše projekty Arduino analogReference – pomoc

  • Toto téma obsahuje celkem 11 odpovědí. Do diskuze (3 diskutující) se naposledy zapojil uživatel peter57 a poslední změna proběhla před 7 roky a 5 měsíci.
Aktuálně je na stránce zobrazeno 12 příspěvků - 1. až 12. (celkem z 12)
  • Autor
    Příspěvky
  • #8843
    peter57
    Účastník

    Zdravím,
    píšu program který má za úkol přečíst analogové napětí baterie z které je napájen a indikovat stav pomocí LED. Dále má číst analogové napětí na posuvníku. z toho důvodu potřebuji měnit referenci.

    analogReference(INTERNAL);
    batt = analogRead(A6);

    tohle samo o sobě funguje, ale nefunguje pak čtení posuvníku a když udělám

    analogReference(INTERNAL);
    batt = analogRead(A6);
    analogReference(DEFAULT);
    joy = (analogRead(A0) / 2);

    tak už to nefunguje. a do batt to dává nesmyslná čísla.Jak mám tu referenci měnit?
    mám procesor mega328p (arduino pro mini)

    #8844
    posjirka
    Účastník

    neuvádíš jak je to zapojený …. máš tam stabilizator pro napájení mikroprocesoru, nebo přímo z baterie ?
    Pokud ze satbilizátoru tak bych baterii dal přes odporový dělič a měřil výsledke. Doporučuju vyopočítat pro napětí tak 2/3 reference. Tady se počítá s tím, že s emění napětí baterie a refernční napětí zůstává stejné.
    Druhá varinata je , že napájíš mikroprocesor přímo z baterie a tím pádem se ti mění i refernční napětí. v tom případě na baterii použij nějáký stabilizátor pro přesné refernční napětí (jen ne diodu ta je dost teplotně závislá), v nouzovém případě i klasický stabilizátor 7803 pro 3V. Pak budeš mít obrácenou logiku : snížení hodnoty analogvého pinu indikuje snížení napětí bateri / referenční napětí …

    Posuvník jako termín nechápu, předpokládám, že je to nějáký potenciometr připojený mezi zem a refenreční napětí, pak ti neovlivńuje funkci měření …

    #8845
    peter57
    Účastník

    Procesor je napájen přímo z baterie. Na ADC vstupu mám dělič který mi v závislosti na stavu baterie srazí napětí na cca 0,7-1,05 V proto používám tu referenci 1,1V.
    jak píšeš, REF napětí se mi mění v závisloti na stavu baterie což je pro mě dobře kvuli tomu posuvníku…jedná se o joy. funkci měření mi neovlivňuje. jen mi jde o program. Nějak přestává fungovat, když furt měním reference. když čtu napští na joy (což je dělič) potřebuju referenci v závisloti na napájení… aby byla 0 furt v 0 a aby byl celý rozsah použit. pro měření Baterie potřebuju referenci 1,1 V abych určil stav té baterie.
    joy

    Attachments:
    #8848
    peter57
    Účastník

    takhle to je zapojene… omlouvám se je to v malování

    Attachments:
    #8851
    posjirka
    Účastník

    jak jsem psal, místo odporu 100k použij nějáký pevný stabilizátor. …. pro začátek třeba tu mojí zatracovanou diodu … obyč. dioda 1b4001 katodou na zem, anodou na analogový pin.

    #8855
    peter57
    Účastník

    Moc děkuji za odpověď,
    jen nechápu úplně k čemu mi tam bude… ta dioda se otevře a bude na ní cca 0,7V a je jedno kdy to budu měřit ale vždy na ní bude toto napětí a ten odpor 400k na sobě bude mít zbytek.

    Muj problém je software… z nějakého důvodu vadí AD převodu když furt měním reference. Tak vlastně měla znít moje otázka… jak často popřípadě s jakýma podmínkami mohu měnit reference analogového napětí z napájecí a interní(1,1V) a z5.
    jde mi číst stav bateri tak jak to mám… funguje to super. ale musím pouřít vnitří referenci na 1.1V
    analogReference(INTERNAL);
    a když v kodu uplně v jiné metodě, která se pustí třeba 100ms po převodu mám kvuli měření joy
    analogReference(DEFAULT);

    tak přestane fungovat převod té baterie 🙁

    další HW řešení mě napadlo takové že bych nastavil referenci jen jednou a to na AREF kam bych přes stabilizátor přivedl 3.3V, který bych musel přivést i na joy. tím by joy fungoval a nasavil bych dělič třeba 1/2 takže napětí baterie by bylo 1,75-2,1 což se do 3.3 vejde ALE to znamená předělat DPS… furt si myslím že by to šlo nějak udělat kodem…

    #8864
    MiK
    Účastník

    Já si myslím, že problém nebude v referenci, ale v příliš velkých odporech v děliči na tom vstupu A6.

    Problém s příkazem analogRead() je v tom, že přepne multiplexer na požadovaný vstup a okamžitě načte hodnotu napětí. Jenže kvůli vnitřní kapacitě vstupu a velkému sériovému odporu se to měřené napětí nestačí ještě ustálit.

    Už jsem jednou podobný problém řešil a stačilo dát to měření napětí na A6 2x za sebou s nějakou krátkou pauzou:

    batt = analogRead(A6);
    delay(50);
    batt = analogRead(A6);

    Třeba tady o tom taky něco píšou (a tu pauzu mezi dvěma stejnými měřeními tam ani nemají):
    https://www.quora.com/Why-is-a-little-delay-needed-after-analogRead-in-Arduino

    Druhým řešením by bylo snížení (třeba 10x) hodnoty odporů v tom děliči.

    #8865
    peter57
    Účastník

    Taky jsem se někde dočetl o tomto problému dal jsem analogRead() asi 6x pod sebe, skoušel jsem to i s delay() nepomohlo to… a ten převod sám o sobě funguje naprosto super, dokuď neměním reference. Když tam jednou nastavím analogReference(INTERNAL); tak to funguje super.. když si na zdroji dám 4,2V tak LED krásně zeleně září. Postupně ubírám napětí tak to žloutne až červená a u 3,4V začne LED červeně blikat přesně tak jak to po ní chci.
    ale v tom momentu kdy se v kodu začne přehozavot analogReference(INTERNAL); a analogReference(DEFAULT); je furt ten DEFAULT zkoušel jsem to napsat i takto

    do{
    analogReference(INTERNAL);
    batt = analogRead(A6);
    }while(batt < 100);

    a tím se mi program zasekne…
    do batt se mělo uložit číslo od 0-1023 a v referenci na 1,1V pro napětí od 3,4-4,2 by hodnoty měli být 790 – 1000 +-

    #8868
    posjirka
    Účastník

    pánové ,proč to řešíte tak složitě ….
    vezměte si, že budete mít konstantní zdroj 0,7V (dioda).
    Když necháme refenreční napětí = napájecí napětí tak při 5V to bude třeba hodnota 200, když klesne napětí baterie na 3,5V tak to bude hodnota 400 (té konstaktny 0,7V) …

    #8869
    peter57
    Účastník

    jo takhle to bylo myšleno… já furt nechápal tu diodu v tom děliči…. ááha to by taky šlo a DPS by se nemuselo předělávat jen by se vyhodil ten odpor a hodila se tam ta dioda… beru to na vědomí… a moc děkuji… ale furt mě štve to, že to nejde udělat tak jak to mám napsané.. prostě nevím proč to nejde 🙁

    ještě mě došlo že se asi zapoměl dát kondenzátor na AREF a někde jsem myslím četl že i když se používá vnitřní reference že by tam měl být…

    #8872
    posjirka
    Účastník

    no já si myslim, že je to způsobeno použitím. měnit referenci a přitom mít zapojené na jiném analog.vstupu vyšší hodnotu je už z principu špatně. zkus zajet joystickem na s´tranu k zemi a zkus to . Případně dej Joystick na stejný potenciál jako je refernční napětí (nepoužívej interní) ….

    #8873
    peter57
    Účastník

    Tak pánové, moc děkuji za pomoc nakonec jsem tam dal tu diodu. Funguje to bez problému.

Aktuálně je na stránce zobrazeno 12 příspěvků - 1. až 12. (celkem z 12)
  • Pro reakci na toto téma se musíte přihlásit.