Skocz do zawartości

[BASCOM] Stan naładowania baterii


Dżony

Pomocna odpowiedź

Witam chciał bym wiedzieć jak można by zrobić prosty program dla ATmega8, który po rozładowaniu się baterii do danego poziomy przełączał by diodę z zielonej na czerwoną. Słyszałem że potrzebny jest przetwornik adc (który ATmega8 ma na szczęście wbudowany)

i o komendzie config adc i getadc. Tylko nie wiem jak się za to zabrać i jak powinien wyglądać nieskomplikowany schemat 😉 Za pomoc z góry dzięki 😉

Link do komentarza
Share on other sites

nieskomplikowany schemat

😉

Tak, musisz wykorzystać adc w medze, ale nie zapomnij o dzielniku rezystorowym. Ja zwykle podpinam 2 lipole przez 10k-10k, można by było niby lepiej dobrać te wartości, ale nadaje się. Adc musisz ustawić tak jak jest w helpie, skonfiguruj vref na avcc. Przy dobieraniu dzielnika musisz wiedzieć jaki stan mają max naładowane akumulatory (max max, nie nominalne 🙂 ) W programie odczytujesz tylko wartość z adc i jeżeli wartość adc < wartość progowa zamień diody.

Link do komentarza
Share on other sites

Dzięki wiesz ale był bym wdzięczny gdybyś mi to rozrysował i podał programik bo się dopiero uczę 😉 wiem że może proszę o dużo ale jak by Ci się chciało 😉

Link do komentarza
Share on other sites


$regfile = "m8def.dat"                                      'uC to m8

$crystal = X                                                'częstotliwość taktowania uC  - należy wpisać wartość! 1000000 dla 1MHz


'konfiguracja przetwornika ADC - preskaler najwyższy możliwy, vref = avcc (5v)
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Dim Pomiar As Word                                          'zmienna, do której będzie zapisywana wartość ADC

Config Portc = Input                                        'konfiguracja portuC jako wejścia


Start Adc                                                   'uruchamianie przetwornika

'trzeba tu jeszcze zapalić zieloną diodę

Do


Pomiar = Getadc(0)                                          'przykładowo podpinamy dzielnik do PC0 i z niego odczytujemy wartość

If Pomiar < 256 Then                                        'jeżeli wartość adc mniejsza od 256 to
Gosub Zapal_czerwona                                     'skocz do podprogramu "zapal_czerwona"
End If                                                      'koniec warunku

Loop

Zapal_czerwona:
'musi się tu znaleźć kod do zgaszenia diody zielonej i zapalenia czerwonej
Return

Mniej-wiecej coś takiego. W kodzie musisz dopisać jeszcze taktowanie prca i kilka linijek odpowiedzialnych za zapalnie/gaszenie diod, a na schemacie tam gdzie jest +5V podpinasz się do baterii, zapomniałem zmienić.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

W powyższym opisie BoBBy, jest kilka nieścisłości/luk. Po pierwsze mega8 w obudowie dip ma 6 kanałów ADC z czego 4 są 10-cio bitowe a dwa 8-mio bitowe, więc ot tak dowolnie podpiąć nie można. Rezystory w dzielniku dobiera się najczęściej 1% z wartości powyżej 100k żeby jak najmniejszy prąd płynął przez dzielnik, który cały czas rozładowuje baterie/akumulatorki.

Dżony, nie napisałeś czy chcesz mierzyć napięcie innego poziomu niż zasilające, np. zasilasz robota z kilku akumulatorków, ale poprzez stabilizator, w tym przypadku dzielnik napięcia trzeba tak dobrać, aby mierzone napięcie względem masy układu nigdy nie przekroczyło napięcia odniesienia.

Konkretną wartość napięcia można obliczyć ze wzoru:

Getadc(x)*Vref/1024 (dla 10-cio bitowego ADC)

Getadc(x)*Vref/256 (dla 8-mio bitowego ADC)

Link do komentarza
Share on other sites

no więc układ będzie w robocie zasilany z kilku akumulatorków albo baterii (ma to jakiś wpływ?) przez stabilizator 7805 😉 proszę o pomoc jak ma wyglądać poprawny program i jakie mają być te wartości rezystorów??😉 z góry dzięki

Link do komentarza
Share on other sites

Wydaje mi się że kod który jest podany zapali już diode gdy napięcie spadnie o 0,01953125V przy wykorzystaniu przetwornika 8 bitowego.

Gdy dioda miała by zareagować dopiero przy napięciu z zakresu 0-4V to musiałoby to wyglądać tak

If Pomiar <  204 Then                                   
Gosub Zapal_czerwona                                      
End If    

Czy dobrze myślę?

Link do komentarza
Share on other sites

W powyższym opisie BoBBy, jest kilka nieścisłości/luk. Po pierwsze mega8 w obudowie dip ma 6 kanałów ADC z czego 4 są 10-cio bitowe a dwa 8-mio bitowe, więc ot tak dowolnie podpiąć nie można.

Z całym szacunkiem coś mi tu nie leży. W karcie napisano tak:

Features
10-bit Resolution
0.5 LSB Integral Non-linearity
± 2 LSB Absolute Accuracy
13 - 260 µs Conversion Time
Up to 15 kSPS at Maximum Resolution
6 Multiplexed Single Ended Input Channels

I do tego to:

The ATmega8A features a 10-bit successive approximation ADC. The ADC is connected to an
8-channel Analog Multiplexer which allows eight single-ended voltage inputs constructed from
the pins of Port C.

Szczególnie to multiplexowanie wskazuje na to że wszystkie są 10 bitowe.

Jeśli chodzi o program do pomiaru napięcia to ja do swojego lipola używam czegoś takiego w bascom:

cela1 = 0
  cela1 = getadc(0)
  napiecie1 = cela1 / 24

    calypakiet = 0
    calypakiet = getadc(1)

    calypakiet = calypakiet * 2

    cela2 = calypakiet - cela1
    napiecie2 = cela2 / 24

co daje mi jako napięcie jedną liczbę. I tak na przykład dla napięcia na celę 4V da mi liczbę 40 i odpowiednio dla napięcia na przykład 3,2V da mi liczbę 32. Teraz wystarczy napisać warunek if...then i (chyba) po problemie.

Link do komentarza
Share on other sites

matrix, wszystko się zgadza, ani ja ani ty się nie pomyliliśmy. W aktualnych datasheetach na stronie atmela jest dokładnie to co napisałeś czyli 6 kanałów 10-cio bitowych w obudowie DIP. Ale w dokumentacji, którą mam na kompie i w dokumentacji, którą przed chwilą znalazłem na necie jest dokładnie to co napisałem wyżej. Na potwierdzenie moich słów link do dokumentacji.

Na szybko wrzucam screena z tej dokumentacji:

Nie chce mi się szukać dlaczego, ale zgodnie z tą dokumentacją ADC4 i 5 były ograniczone do 8 bitów.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.