Skocz do zawartości

[BASCOM] Stan naładowania baterii


Pomocna odpowiedź

Napisano

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 😉

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.

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 😉


$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

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)

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

  • 9 miesiące później...

Dołączę się do tematu. Czy przy zastosowaniu kodu który podał Bobby należy stosować zewnętrzne odniesienie napięcia na aref? Czy można nić nie podłączać do aref, i będzie działać?

profesorek_96, przy wybraniu źródła napięcia odniesienia jako AVcc należy do Aref podłączyć kondensator. Wszystko jest w dokumentacji atmegi!

  • Lubię! 1

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ę?

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.

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.

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...