Wpis z mikrobloga

Mirki, ja znowu z pytaniem o #avr piszę, konkretnie mam problemy z odczytem z wielu portów ADC.

Korzystam z trybu pojedynczego odczytu z ADC, przed główną pętlą wywołuję configreADC() a później wielokrotnie w pętli w razie potrzeby, dwukrotnie metodę getAnalogInput z argumentami LIGHTLEVELADC = 1 (ADC1) oraz DARKLIGHTLEVEL_ADC = 5 (ADC5):

http://pastebin.com/T5gK4vfG

Problem jest taki, że jeden kanał wpływa na drugi. Z pierwszego czytam wartość z fotorezystora, a z drugiego z potencjometru. Zasłonięcie palcem fotorezystora (zmniejszenie jego odczytu) powoduje zmniejszenie odczytu z potencjometru i podobnie w drugą stronę.

Na obrazku pierwsza wartość to potencjometr, druga to fotorezystor. Kręcąc potencjometrem ze skrajnych pozycji (i tu warto zauważyć: odczyt potencjometru nie osiąga skrajnych pozycji ze względu na fotorezystor) zmienia się też odczyt z fotorezystora.

Co jest nie tak? Korzystam z ATmega8A. Moje zasilanie jak tu: http://1.bp.blogspot.com/-5t2i5CqKqxc/T4Sxzhwks_I/AAAAAAAAAWo/ObYLy3jXAJg/s1600/zasilanie_OK2_z_ADC.jpg

Nie chcę używać trybu Free-Running. Zwykle w trakcie pisania takiego wpisu dochodzę do rozwiązania problemu, ale nie tym razem..

atmega #atmega8 #mikrokontrolery #elektronika
Visher - Mirki, ja znowu z pytaniem o #avr piszę, konkretnie mam problemy z odczytem ...

źródło: comment_viKN1pTGgYd5dgxp8BR273jQXyt5Tdrw.jpg

Pobierz
  • 10
@Visher: Ustawienie preskalera na 64 niby pomogło:
ADCSRA|= (1 << ADPS2)|(1 << ADPS1); // Clock 64 division factor

ale jeżeli ktoś jest zainteresowany problemem proszę dać znac, nie mogę teraz wszystkiego sprawdzić bo już muszę iść na zajęcia :D
@m8se: pojemności mu się za wolno przeładowywały. Z tego powodu przestawienie przeskalera (wolniejszy pomiar) pomogło. ADC ma w sobie mały kondensator, który potrzebuje chwilę żeby się przeładować. Jak źródło napięcia ma sporą rezystancję, to może to potrwać dość długo.
@m8se: nie mam tam żadnych ledów, pisałem że mam tylko sekcję zasilania tak jak tam: prawa strona rysunku u mnie nie istnieje, jest za to potencjometr i dzielnik napięcia z fotorezystorem.
@aloalo83: między VCC a GND od programatora multimetr pokazuje nieskończenie wielką rezystancję..

ciekawe uzasadnienie za które bardzo dziękuję, natomiast pojawia się kolejne pytanie - jak to poprawić aby można było zejść do najniższego preskalera?
@Visher: nic nie zrobisz. Tu bardziej chodzi o rezystancję źródła napięcia które mierzysz. Generalnie zrobiłeś właściwą rzecz, tzn. Zwiększyłeś czas trwania każdego pomiaru (poprzez zmianę prescalera) i to rozwiązało problem. Brawo.

W sytuacji gdy nie można było zmienić elementów zewnętrznych, to było jedyne słuszne rozwiązanie.

@Visher:

By default, the successive approximation circuitry requires an input clock frequency between 50kHz and 200kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the input clock frequency to the ADC can be higher than 200kHz to get a higher sample rate. The ADC module contains a prescaler, which generates an acceptable ADC clock frequency from any CPU frequency above 100kHz.


Czyli jak masz zegar 8MHz