logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Obsługa ADC w ATmega88PA w BASCOM: Monitorowanie napięcia zasilania i baterii awaryjnej

FastProject 04 Gru 2020 12:10 495 1
  • #1 19088952
    FastProject
    Poziom 28  
    Witam,
    trzeci dzień męczę się z obsługą ADC w ATmega88PA.

    Buduję układ gdzie chce sprawdzać, czy jest właściwe napięcie zasilania i czy bateria awaryjna ma właściwe napięcie.
    Oto mój kod i schemat pomiaru
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod

    Obsługa ADC w ATmega88PA w BASCOM: Monitorowanie napięcia zasilania i baterii awaryjnej
    Pomiar napięcia 12V za pomocą dzielnika, napięcie odniesienia 1,1V z ATmega88.
    Pomiar napięcia baterii (3xAA), aby nie pobierać z niej prądu dzielnikiem realizuję poprzez pomiar względem napięcia zasilania 5V. Pomiar nie jest dokładny ale wystarczy do określenia że bateria jest już słaba.

    Problem polega na tym, że gdy cały powyższy program jest skompilowany to oba pomiary następujące po sobie nie działają. Działa albo jeden pomiar, albo drugi, ale zazwyczaj oba są zakłamane, tzn niepoprawnie mierzą napięcia.

    Jednak gdy działa tylko z jeden z pomiarów (np wyłączę całą sekwencję pomiaru napięcia zasilania 12V ) to pomiar napięcia baterii działa poprawnie. I odwrotnie, jak nie mierzę baterii a samo napięcie 12V to też jest ok.

    Inaczej... to działa:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    To samodzielnie też działa:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Ale oba pomiary następujące po sobie już nie działają.

    O co tu chodzi? Czy zmiana napięć odniesienia potrzebuje jakiejś specjalnej sekwencji, jakiegoś czasu aby zaczęło to działać?
    Proszę o wskazówki.

    Dodano po 2 [godziny] 46 [minuty]:

    EDIT: wygląda, na to że mam podobny problem jak inni z pomiarem napięcia w odniesieniu do napięcia 1,1V. https://www.avrfreaks.net/forum/setup-time-when-measuring-internal-vref-atmega88

    Po dodaniu kilku opóźnień i odrzuceniu pierwszego pomiaru po zmianie kanału ADC i zmianie napięcia referencyjnego pomiar zaczął działać poprawnie.

    Aktualnie tak to wygląda, ale jeszcze eksperymentuje :
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Wygląda na to, że po przełączeniu z napięcia referencyjnego z VCC (5V) na 1,1V procesor potrzebuje kilka ms na ustabilizowanie i spadek napięcia na C=100nF z 5V, na 1,1V.
  • #2 19095566
    bart-projects
    Poziom 29  
    Bascom też zawsze mierzy ADC dwa razy bo przewiduje zmianę kanału ADC. Gdyby ktoś używał tylko jednego wejścia to może sobie zakomentować pierwszy odczyt i będzie szybciej..

    Obsługa ADC w ATmega88PA w BASCOM: Monitorowanie napięcia zasilania i baterii awaryjnej

    Czekając na tylko jeden bit to chyba zamiast While-Wend lepiej użyć Bitwait. To tworzy dokładnie taka samą konstrukcję jaka jest w bibliotece.

    Co do pomiaru baterii to również mógłbyś to robić poprzez dzielnik napięcia i VREF=1.1 tylko wtedy, by niepotrzebnie nie rozładowywać baterii masę dzielnika podłącza się pod jakiś wolny pin procesora. Ustawiasz na nim stan niski i mierzysz a potem wystawiasz wysoki. To się może sprawdzić :D

    A jeśli to Cię nie urządza a te pomiary nie robisz w kółko tylko co określony czas to po można po pomiarze drugiego napięcia od razu zmienić MUX i wystartować konwersję. Potem wpadasz tam np. za minutę i już odpada Tobie te czekanie 10ms i tylko robisz jeden pomiar :D No chyba że się nie spieszy...
REKLAMA