Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 4 kwi 2026, o 16:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
 Tytuł: Problem z ADC
PostNapisane: 10 lut 2015, o 17:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lip 2013
Posty: 420
Lokalizacja: Kraków
Pomógł: 17

Witam ;)
Piszę właśnie program do mojego robota ( line followera ) i potrzebuje mierzyć napięcie akumulatora ( a także napięcie na wyjściach czujników ).

Oglądnąłem pierwsze cztery poradniki z serii Mirka o ADC.
Pobrałem kod, lekko zmodyfikowałem i rozdzieliłem na pliki:


main.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


adc.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


adc.h
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dlaczego pierwszy pomiar napięcia jest rzędu 1V, dopiero po kilku czy tak kilkunastu obiegach pętli na wyświetlaczu pojawia się prawidłowy pomiar?

Przy kodzie takim jak wyżej nie jest to problemem, ale docelowo w robocie chcę aby pomiar napięcia z akumulatora był dokonywany np co min, a więc chciałbym mieć np funkcję pomiar_zasilania(); i aby po jej wykonaniu na lcd pojawiło się napięcie zasilania.

No i tu jest problem, ponieważ jak wywołam taką funkcję:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To na lcd dostaję np 0,5V Dlaczego??
Jedyne rozwiązanie jakie mi przychodzi do głowy to aby w funkcji wyżej dać np pętlę for ( obiegająca np 15 razy ), ale tu pojawia się kolejny kłopot ponieważ pomiary z czujników odbiciowych muszą być wykonywane jak najszybciej.

_________________
GreenBook i BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2015, o 18:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

W funkcji get_vol() jest zastosowane uśrednianie wyniku. Wyniki ładowane są do tablicy sr. Do wyliczenia średniej są brane wartości z wszystkich komórek tej tablicy. Więc jaki może być wynik średniej jeśli w tablicy jest jeden wynik pomiaru lub dwa a reszta jest pusta? Właściwy wynik pojawi się wtedy wszystkie komórki tablicy napełnią się wynikami pomiarów. I dlatego uśrednione napięcie wolno narasta.

Jeśli chcesz aby wynik pojawiał się szybciej a nie chcesz rezygnować z uśredniania to albo zmniejsz wielkość tablicy sr albo zwiększ częstotliwość odczytów z ADC. Wtedy tablica sr szybciej się napełni a tym samym uśrednione napięcie osiągnie właściwą wartość.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2015, o 18:23 
Offline
Użytkownik

Dołączył(a): 13 maja 2014
Posty: 135
Pomógł: 11

Witam

Kurde, ale jak zacząłem, to dopiszę (-: . Kolega powyżej ma rację (-: . Ponieważ "idx" masz jako "static", to kolejne pola tablicy próbek zapisujesz przy kolejnych wywołaniach tej funkcji. Dopiero powyżej wywołania o numerze "SR" obliczasz średnią z zebranych próbek napięcia, przed tym wywołaniem wartości zerowe w niezapełnionych polach tablicy powodują przekłamanie.

Pozdrawiam


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2015, o 20:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lip 2013
Posty: 420
Lokalizacja: Kraków
Pomógł: 17

Zmieniłem SR na 1, a skoro nie używam uśredniania to zmodyfikowałem jeszcze funkcję get_vol:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: kilkunastu sekundach ]

Dzięki za szybką pomoc ;)

_________________
GreenBook i BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO