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



Teraz jest 28 kwi 2024, o 16:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
 Tytuł: ADC ?
PostNapisane: 7 lis 2012, o 17:53 
Offline
Użytkownik

Dołączył(a): 10 sie 2012
Posty: 91
Lokalizacja: Wąbrzeźno
Pomógł: 0

Witam. Mój program pobiera 100 wartości z ADC, a później obniża z nich średnią. Moje pytanie jest takie, dlaczego nigdy nie uda mi się uzyskać np. 10,71V uzyskam 10,70 V ; 10,73 V ; 10,76V. Ale nigdy nie uzyskam rozdzielczości co 0,01V. Wiem, że mikrokontroler(Atm8) ma przetwornik 10 bitowy, a ja do dzielnika napięcia używam rezystorów 1k i 10k, ale przecież wartość odczytana z przetwornika zmienia się np. w ciągu 0,1s raz jest 900, a raz jest 901.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: ADC ?
PostNapisane: 7 lis 2012, o 18:12 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

przede wszystkim to zmień tą linię

Cytuj:
ADMUX |= (ADMUX & 0xF8) | kanal;


na prawidłową - bo jest tu mały błąd i gdy zachce ci się mierzyć napięcie na więcej niż 1 kanale to będziesz miał ZONK'a , zaglądaj proszę na stronę z uaktualnieniami do książki

http://atnel.pl/uaktualnienia-programow-do-dvd.html

masz tam w tabelce:

Cytuj:
Błąd pomiaru napięcia za pomocą kilku kanałów w funkcji pomiar(), omawianej w książce, rozdział n/t ADC


poza tym skoro sumujesz 100 razy wynik z zakresu 0 -1024 to przecież może ci zabraknąć zakresu w zmiennej pm bo masz ją zdefiniowaną jako 16-bitową (uint16_t) :( ... więc od razu zwiększ typ dla pm na uint32_t

i np też zamiast robić jawne rzutowanie (chociaż to nie jest akurat błąd):

Kod:
pm=(uint32_t)pom/100;


to rób to tak:

Kod:
pm = pom / 100UL;


wygodniej

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: ADC ?
PostNapisane: 7 lis 2012, o 20:33 
Offline
Użytkownik

Dołączył(a): 10 sie 2012
Posty: 91
Lokalizacja: Wąbrzeźno
Pomógł: 0

To nie pomogło, dalej wyświetla cały czas na przemian 4,15V 4,18V
Jaka jest różnica jak się napisze:

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



a

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


chodzi mi o ADCSR



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: ADC ?
PostNapisane: 7 lis 2012, o 20:56 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

1. bierzesz sobie w łapki notę PDF swojego procka.
2. wchodzisz do rozdziału o ADC (z lewej strony)
3. wchodzisz na ostatni podrozdział w tymże rozdziale (zwykle nazywa się on Register Description) czyli opis rejestrów i masz tam nazwy wszystkich swoich rejestrów w procku.

w książce pisałem że jak się zaczyna coś robić z prockiem to tak trzeba postępować

wtedy byś zobaczył że w większości procków jeśli chodzi o ADC to masz rejestr ADCSRA (np w ATmega32) ale już np w ATtiny26 masz ten sam rejestr pod nazwą ADCSR

więc tym się to różni nie mówiąc już o tym że jak napiszesz w Eclipse ADCSR dla projektu z m32 - to wyskoczy ci w tej linii błąd

--------------

a odnośnie tego skakania jak mówisz 4.15 - 4.18 to w czym problem hmmm?

najpierw zastanów się do czego ci TAK dokładny pomiar co do drugiego miejsca po przecinku

potem weź pod uwagę jak zbudowałeś swój układ (masz jakiś zestaw uruchomieniowy? czy jakaś płytka stykowa ?) ... jak masz rozwiązane zasilanie ? czy jest filtrowanie itp itd - NIC o tym nie napisałeś - a to także ma i to OGROMNY wpływ na stabilne pomiary z ADC

no i kolejna sprawa - stosujesz zwykłą średnią arytmetyczną która nie zawsze jest najlepszym sposobem. Chcesz mieć bardziej precyzyjnie ? to w książce na DVD w przykładach masz uśrednianie ale taką fajną metodą (jest to tzw cyfrowy filtr dolnoprzepustowy) - średnia ciągnięta .... spójrz w kod i zobacz - bo z takim uśrednianiem zaczyna być jeszcze lepiej z wynikami

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: ADC ?
PostNapisane: 7 lis 2012, o 21:17 
Offline
Użytkownik

Dołączył(a): 10 sie 2012
Posty: 91
Lokalizacja: Wąbrzeźno
Pomógł: 0

Zasilanie na ADC mam przez cewkę 10uH. Projekt trochę zlutowany na płytce lutowanej, a trochę na stykowej.

------------------------ [ Dodano po: 1 minucie ]

Chodzi mi o to, że mi nigdy nie wyświetliło wartości pomiędzy tymi napięciami. I stąd moje pytanie dlaczego ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: ADC ?
PostNapisane: 7 lis 2012, o 21:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27227
Lokalizacja: Szczecin
Pomógł: 1041

No to napisałem wyżej ile może być powodów tego

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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