Skocz do zawartości

[C] ADC atmega8


MasterFun

Pomocna odpowiedź

W ADCL mieszczą się tylko dwa bity.
No nie... L oznacza Low, czyli niską część słowa.

Jeśli mamy rozdzielczość 10-cio bitową, to wynik wyrównany jest do prawej, czyli w ADCL mamy 8 najmłodszych bitów, a w ADCH 2 najstarsze.

Jeśli mamy rozdzielczość 8-mio bitową, to wynik wyrównany jest do lewej, czyli w ADCH mamy 8 bitów, a ADCL nie jest używane.

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

Tak, przetwornik zawsze jest 10b i na to nie mamy wpływu. Jednak możemy zmieniać sposób wyrównania bitów do lewej, lub do prawej strony w rejestrach ADCL i ADCH. A jak chcemy mieć przetwornik 8b to ustawiamy sobie bit ADLAR w stan wysoki i w rejestrze ADCH mamy gotowy wynik w postaci 8b, ale pomiar nadal jest 10b.

Trochę to może gubić tych co programowali wcześniej w bascomie, bo tam się ustawiało czy chcemy mieć przetwornik 8,9, lub 10 bitowy.

  • Lubię! 1
Link do komentarza
Share on other sites

Ja dodam od siebie, że nie powinniśmy dzielić przez 1023, bądź 255, ale przez 256, 1024..

Z resztą taki wzór jest w nocie.

Wyobraźcie sobie przetwornik 1 bitowy. Czy 2^1 = 2. (Analogicznie 2 bitowy, 2^2=4).

Przy 1 bitowym mamy wartości od 0 do 1 (0,1). W 2 bitowym od 0 do 3 (0,1,2,3). ( Co 1 w obu przypadkach)

Teraz VRef powiedzmy 5V.

5V/2 = 2.5 V, a 5V/1 = 5V

5V/4 =1.25V, a 5V/3 = 1.66V

Teraz zgodnie z tym wzorem, ADC = (Vin*x)/Vref

Vin = 2.6V

ADC = 2.6* 1 / 5 = 0 -> ADC = 2.6* 2 /5 = 1 (i który jest poprawnie? 🙂 )

Oczywiście drugi przypadek, przetwornik 1 bitowy dzieli nam Vref na 2 wartości:

<0V ÷ 2.5V ) mamy logiczne 0.

<2.5V ÷ 5 V) mamy logiczne 1.

W pierwszym przypadku liczymy błędnie gdyż, logiczne 1 uzyskalibyśmy dopiero gdy Vin zrówna się z Vref.

Analogicznie dla 2 bitowego (00,01,10,11) :

0 - 1.25 V = 00

1.25 V - 2.5V = 01

2.5V - 3.75 V = 10

3.75V - 5V = 11

Jak widać wartość 3 (11) uzyskamy już przy Vin = 3.75V..

A gdybyśmy podzielili przez 3 to (11) byłoby przy 5V..

Są 4 bity? Są, więc dlaczego miałbym dzielić przez 3, a nie przez 4 powinniśmy dzielić/mnożyć przez 2^n, gdzie n to ilość bitów przetwornika

Zresztą wyjaśnia to cytat z noty:

The ADC converts an analog input voltage to a 10-bit digital value through successive

approximation. The minimum value represents GND and the maximum value represents

the voltage on the AREF pin minus 1 LSB.

Link do komentarza
Share on other sites

pawel, dzięki za info - opierałem się o skróconą notę ATmegi16 i tam nie było tej informacji, że przetwornik jest zawsze 10b. Widać pora przerzucić się na pełną notę.

regrom, hmm.. to jest ciekawe zagadnienie, nawet na Elektrodzie się o to kłócili. Ja wyszedłem z założenia, że ADC nie może zwrócić większej wartości niż rozdzielczość bitowa. Nie ma jak zwrócić 256 na 8 bitach. Stąd przyjąłem, że Vref = max(8bit) => 255. Rzeczywiście, w nocie dzielą przez 1024 a nie 1023, a to dlatego by maksymalna wartość przetwornika nie oznaczała "nieco mniej niż Vref .. Vref" tylko "Vref .. więcej niż Vref".

Sorry za wprowadzenie w błąd, errare humanum est 🙂

Link do komentarza
Share on other sites

No, o to chodzi że de facto, mierzymy do Vref, Wartość Vin = Vref, jest już przekroczeniem zakresu.

O to chodzi że jak mamy przetwornik 8 bitów to dzieli nam całe napięcie referencyjne na na 256 części, a nie 255. Podałem przykład wyżej na mniejszej ilości bitów.

Dzieląc przez 255 czy 1023 wprowadzamy sobie przesunięcie progów podziałowych, a co za tym idzie błąd pomiarowy. Przy dzieleniu przez 255, wartość ADC wyniosła by 255(1111 1111) dopiero przy 5V, ale ona pojawia się już przy około 4,982 V, jak ktoś mam dokładny miernik może sobie sprawdzić..

Tak samo wartość ADC = 0, nie jest tylko dla 0V, ale dla zakresu od 0V do 0.0195 V..

Ten błąd przy tym dzieleniu przy tak dużej liczbie bitów jest mały, ale jest błąd, kiedy dzielimy przez 255 czy tam mnożymy..

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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