Operacje na danych binarnych (byte, word) to w procedurach pomiarowych NA01 mniejszość, często charakter takich argumentów ginie w niezbędnych operacjach zmiennoprzecinkowych. Nie ma chyba potrzeby aby przechodzić na większą rozdzielczość pomiaru A/D z dwóch powodów. Po pierwsze AD8307 ma współczynnik detekcji 25mV/1dB a więc prawie jeden rząd więcej niż rozdzielczość przetwonika A/D a poza tym procedury zwiększenia rozdzielczości nie są banalne i wymagają zaawansowanego filtrowania oraz złożonych operacji matematycznych obciążających procesor, powiększających kod programu itp. Zamiast więc zwiększać rozdzielczość pomiaru można zastosować interpolację wyników pomiędzy punktami pomiarowymi. Nie wydaje się jednak aby w mierniku klasy NA01 potrzebne było tak wyrafinowane działanie. Nie analizowałem dokładnie wpływu błędów zaokrągleń na wynik pomiaru ale biorąc pod uwagę współczynnik 25mV/1dB można powiedzieć, że sięga on w najgorszym przypadku jedynki na poziomie ok. 70 (najmniejsze mierzone sygnały) czyli mniej niż 1.5%. O wiele ważniejsze, niż absolutna wartość tłumienia w dB jest często uzyskanie wiedzy o kształcie zależności w pasmie, poznanie miejsca rezonansów itp. W końcu, mierzone wartości muszą być zobrazowane na wyświetlaczu (128/64) o funkcjonalnej rozdzielczości pionowej 56 linii (8 najwyżej położonych linii używam do komunikacji, opisów) więc nawet jeśli wynik pomiaru będzie nieskończenie dokładny to i tak zostanie pokazany z dokładnością 1.8%.
L.J.
Masz rację na wyświetlaczu nie będzie dużej różnicy ale przesyłając dane do komputera wykres będzie dużo dokładniejszy. ADC atmegi nie należy do najlepszych jego niedokładność może wynosić nawet 3 LSB. Napięcie odniesienia nawet bez nadpróbkowania pozwoli małym kosztem zwiększyć dokładność pomiaru i uniknąć przynajmniej kilku operacji zmiennoprzecinkowych(typ float). Niedawno w pewnym projekcie eliminując trzy operacje na danych typu float mogłem zejść z atmegi32 na atmegę16 a to już spory zysk. Przy nadpróbkowaniu nie stosujemy skomplikowanej filtracji bo niewielki poziom szumów jest nam potrzebny do jej prawidłowego działania. Oversampling nie jest taki straszny. W załączniku umieszczam artykuł o podstawach próbkowania.
Faktycznie, oversampling w tej wersji nie jest specjalnie skomplikowanym algorytmem. Nie wprowadzę go jednak do bieżącego algorytmu pomiarowego NA01 ze względu na znaczące zwiększenie ilości operacji wymaganych na każdy dodatkowy bit dokładności. Zysk z takiej procedury spowolni pracę w czasie rzeczywistym miernika z jednej strony a wynik i tak nie będzie zauważony. Szykuję jednak wersję oprogramowania do współpracy z PC gdzie algorytm pomiarowy zapewniał będzie zewnętrzny program więc powstaną możliwości uzyskania dowolnego scenariusza i dokładności pomiarowej. Miernik reagował będzie na polecenia: ustawienia częstotliwości pomiarowej, opóźnienia o zadanym okresie czasu oraz na polecenie odczytu danych. Możliwe więc będzie wielokrotne odczytanie wartości dla ustalonej na czas próbkowania częstotliwości a więc droga do oversamplingu będzie otwarta ;-)
L.J.
Jeśli chcesz zrobić urządzenie do współpracy z komputerem to proponowałbym zastosowanie zewnętrznego przetwornika A/D oraz galwaniczne oddzielenie części analogowej od cyfrowej a zwłaszcza komputera od urządzenia pomiarowego. Komputery wytwarzają tak silne zakłócenia że 16 bitowa karta dźwiękowa używa tylko 12 najstarszych bitów.
blejders stosowanie bardziej rozdzielczego przetwornika niż w atmedze jest pozbawione sensu (oversamplingu zresztą też, wspomniałem o nim w kontekście zakłóceń) spójrz na liniowość detektora
Rafale, znaczne zwiększanie rozdzielczości przetwornika nie ma sensu ale 12 bitów zwłaszcza stosując napięcie 4,096v pozwoli na lepszą aproksymację wyników co zmniejszy wpływ nieliniowości przetwornika A/D atmegi. Producent podaje że całkowita niedokładność przetwornika może sięgać 3LSB dla wersji TQFP mikrokontrolera.
Blejdersie a jaka jest liniowość przetwornika ad? Nie ma sensu mierzyć lepiej niż sam detektor daje bo nic to nie da. Jeśli chce się większej rozdzielczości w mV na dB wystarczy zmniejszyć odniesienie do około 3V a że liczby nie są w mV na dB równych co to przeszkadza i tak jak pisał Leszek nachylenie przetwornika też nie jest równe bo wynosi 25mv/db.
W profesjonalnych zastosowaniach Atmegi gdzie nie jest wymagana mega rozdzielczość odczytu
nikt nie stosuje tego kłopotliwego (w produkcji i kosztach) dławika. Np. urządzenia stosowane w pojazdach (LPG).
Do takich banalnych pomiarów z odwzorowaniem na graficznym LCD wystarczy rozdzielczość 1 bajtu.
Coś do poczytania:
http://www.elektroda.pl/rtvforum/topic1062920.html
Rafale jeśli tak przedstawiasz sytuację to zgadzam się z tobą ale moim założeniem było wyeliminowanie działań na ułamkach. Atmega nie posiada struktury sprzętowej odpowiedzialnej za działania zmiennoprzecinkowe więc każde działanie na ułamkach wymusza na kompilatorze wygenerowanie długiego i skomplikowanego kodu programu, widać bardzo dobrze gdy podejrzymy kod w asemblerze(lub będziemy symulować go w VMLAB). Jeśli nie chcemy bawić się w nadpróbkowanie możemy pozostać przy 10 bitach ale zastosować napięcie 4,096v co da nam równe 4mV na działkę. Na niedokładność przetworników A/D wpływją takie parametry: Offset error, gain error, integral non-linearitY, differential non-linearity, oraz absolute accuracy który jest sumą wszystkich poprzednich. W atmegach absolute accuracy może wynosić typowo od 1 do 3LSB czyli jeśli Aref wynosi 5V a rozdzielczość 10 bit to w najgorszym przypadku absolute accuracy wyniesie 3*4,88mV=14,6mV.
blejders - tu prawie wszyscy kol. "kodują" w C lub w "basdownie" i REF "binarny" jaki proponujesz nie zrobi na kol. żadnego wrażenia
Wygodni są bo liczy za nich kalkulator
Może to i dobre ?