Szukam programiku

Oct 08, 2005 5 Replies

Szukam jakiegoś gotowca programu w assemblerze, który wykorzystuje wewnętrzny przetwornik ADC ATmega i zawiara tablicę konwersji (dane z ADC na właściwe wartości). Potrzebuję ten programik żeby wykumać jak robi się konwersje wartości z ADC za pomocą tablicy. Z góry dziękuję.


Hmm, a gdzie tu filozofia? Przyjmujac, ze korzystasz z wewnetrznego napiecia referencyjnego 2,56V i mierzysz napiecie z rozdzielczoscia 10 bitow czyli 1024 wartosci to wartosc 0 oznacza 0V a wartosc 1023 oznacza 2,56V. Czyli jeden kwant przetwornika to 2,56V/1023 = około 2,5 mV. A więc jeżeli z pomiaru dostałeś np. wartość 321 to odpowiada to napięciu 321*(2,56V/1023) = około 803,3 mV. Wg mnie tablica konwersji zbędna. Mnożenie przez 2,5 [mV] wykonuje się nawet w asemblerze bardzo prosto. Pomnóż przez 2 i dodaj połowę pierwotnej wartości. Wynik wychodzi w mV.

Adam Dybkowski napisał(a):

No chyba że zależność jest nieliniowa... To wtedy w najprostszym przypadku odżałujesz pare kilo pamięci i wpiszesz tam wartosći , a adresem w tablicy wartosci będzie wartośc odczytana z ADC. Ale zwykle udaje się jakoś aproksymować zalezność i wtedy tylko trzeba badać przedział w ktrórym, miesci się wartośc z ADC i z tablicy pobierać współczynniki do funkcji aproksymującej. Ilość danych jest dużo mniejsza.

No właśnie masz rację z mnożeniem nie ma problemu. Dzielenie też można rozwiązać, ale wydaje mi się, że w przypadku dzielenia może ta operacja trochę długo trwać.

OKI trochę to trwało, ale skumałem. Dzięki :).

Często wystarczy przejść na wyższą rozdzielczość (np. operacje na liczbach 32-bitowych) i wykonać mnożenie operując w arytmetyce stałoprzecinkowej. Aby wynik pomiaru podzielić przez np. 33, wystarczy zamiast tego pomnożyć go przez 1/33 czyli około 1986/65536. Czyli wynik pomiaru pomnożyć przez 1986 a potem wziąć 2 starsze bajty iloczynu. Błąd zaokrąglenia jest poniżej 1 bitu. Dzielenie nie jest takie straszne jeżeli się dzieli zawsze przez stałą wartość - bo prościej mnożyć przez odwrotność a wiele procesorów ma mnożenie sprzętowe (w tym ATmega).

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required