michael
Guest
Sat Oct 08, 2005 7:33 pm
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ę.
Adam Dybkowski
Guest
Sat Oct 08, 2005 9:27 pm
michael wrote:
Quote:
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.
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
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.
Miłosz K.
Guest
Sat Oct 08, 2005 10:05 pm
Adam Dybkowski napisał(a):
Quote:
Hmm, a gdzie tu filozofia?
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.
--
Miłosz Kłosowicz
------------------------------------------------
AVR : ISP,JTAG,moduły prototypowe (USB,CAN)
TYPO3: projekty, webhosting, sklepy internetowe
->
http://www.miklobit.com
------------------------------------------------
michael
Guest
Sun Oct 09, 2005 7:24 am
Adam Dybkowski wrote:
Quote:
michael wrote:
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.
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.
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ć.
michael
Guest
Sun Oct 09, 2005 7:43 am
michael wrote:
Quote:
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

.
Adam Dybkowski
Guest
Sun Oct 09, 2005 7:36 pm
michael wrote:
Quote:
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.
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ć.
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).
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.