Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięprocedura uśrednienia próbek z kompaktora - Bascom - jak ?
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
jak napisać w Bascomie procedurę pobrania 10ciu próbek (z jednego ADC(0)) by odrzucić 5 skrajnych, wybrać 5 środkowych wartości i policzyć z nich średnia - możne ktoś podpowiedzieć ?
z góry dziękuje
z góry dziękuje
- Darlington
- -
- Posty:574
- Rejestracja:12 lis 2007, o 18:18
- Lokalizacja:stąd!
pajaczek,
nie średnia ze wszystkich nie możne być (mam tak i nie jestem zadowolony).
pisząc odrzucić skrajne mam na myśli ze:
mamy np. 12 pomiarów i chcemy wybrać 6 środkowe czyli ignorujemy najwyższe wartości i najniższe, wybieramy ze środka "skali" (czyli pomiarów) i je dopiero dzielimy w tym wypadku przez 6.
czyli sprawdzamy kolejne pomiary, sortujemy je i odrzucamy (np. od największej do najniższej ) i w tym przykładzie odrzucamy 3 największe i 3 najniższe zostają nam 6 środkowych (nazwijmy je optymalne) z których dopiero policzymy średnia.
- mam nadzieje ze teraz jaśniej napisałem
nie średnia ze wszystkich nie możne być (mam tak i nie jestem zadowolony).
pisząc odrzucić skrajne mam na myśli ze:
mamy np. 12 pomiarów i chcemy wybrać 6 środkowe czyli ignorujemy najwyższe wartości i najniższe, wybieramy ze środka "skali" (czyli pomiarów) i je dopiero dzielimy w tym wypadku przez 6.
czyli sprawdzamy kolejne pomiary, sortujemy je i odrzucamy (np. od największej do najniższej ) i w tym przykładzie odrzucamy 3 największe i 3 najniższe zostają nam 6 środkowych (nazwijmy je optymalne) z których dopiero policzymy średnia.
- mam nadzieje ze teraz jaśniej napisałem
Witam
Wydaje mi się bez sensu wybieranie tylko środkowych lepiej to dodać podzilić przez ilość.
Ewentulnie jesli tak bardzo Ci na tym zależy zrobic tablicę z miejscem na 10 czy 12 pomiarów dim Pomiar(12) as word.
Potem tylko wybrać odpowienie miesjca z tablicy.
jakaś zmienna= pomiar(3)+pomiar(4)+pomiar(5)+pomiar(6)+pomiar(7) itd a potem podzielić.
Zamiast dzielic możesz użyć shift mniej obciąża procesor a efekt ten sam.
Ewentualnie opcja nr 3 to użyc tablicy i min i max
Wtedy będziesz mógł uzyskać wartość maxymalna i index gdzie ta wartośś jest zapisana.
Wydaje mi się bez sensu wybieranie tylko środkowych lepiej to dodać podzilić przez ilość.
Kod: Zaznacz cały
For Channel = 0 To 1
Przetwornik = 0
Przetwornik = Getadc(channel) 'pierwszy i drugi pomiar pomijamy
Przetwornik = Getadc(channel)
Przetwornik = 0
Przetwornik = Przetwornik + Getadc(channel) 'pomiar
Przetwornik = Przetwornik + Getadc(channel)
Przetwornik = Przetwornik + Getadc(channel)
Shift Przetwornik , Right , 4
Potem tylko wybrać odpowienie miesjca z tablicy.
jakaś zmienna= pomiar(3)+pomiar(4)+pomiar(5)+pomiar(6)+pomiar(7) itd a potem podzielić.
Zamiast dzielic możesz użyć shift mniej obciąża procesor a efekt ten sam.
Ewentualnie opcja nr 3 to użyc tablicy i min i max
Kod: Zaznacz cały
'-----------------------------------------------------------------------------------------
'name : minmax.bas
'copyright : (c) 1995-2005, MCS Electronics
'purpose : show the MIN and MAX functions
'micro : Mega48
'suited for demo : yes
'commercial addon needed : no
'-----------------------------------------------------------------------------------------
$regfile = "m48def.dat" ' specify the used micro
$crystal = 4000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
' These functions only works on BYTE and WORD arrays at the moment !!!!!
'Dim some variables
Dim Wb As Byte , B As Byte
Dim W(10) As Word ' or use a BYTE array
'fill the word array with values from 1 to 10
For B = 1 To 10
W(b) = B
Next
Print "Max number " ; Max(w(1))
Print "Min number " ; Min(w(1))
Dim Idx As Word , M1 As Word
Min(w(1) , M1 , Idx)
Print "Min number " ; M1 ; " index " ; Idx
Max(w(1) , M1 , Idx)
Print "Max number " ; M1 ; " index " ; Idx
End
tak, wiem, ale bardziej chodziło mi o Twoja prace i zaangażowanie.
a w temacie,
wytłumacz mi dlaczego funkcja:
zwraca w przypadku zwarcia do GND wartość 130 a przy 5V - 900 ?? - według mnie powinna dać 0/1023
a w temacie,
wytłumacz mi dlaczego funkcja:
Kod: Zaznacz cały
$regfile = "m16def.dat"
$crystal = 16000000
Config Adc = Single , Prescaler = Auto , Reference = internal
Dim Wart_ac1 as Word
Wart_ac1 = Getadc(0)
Zobacz tu:http://www.pg.gda.pl/~zbczaja/pdf/atmega16mmr.pdf
strona 39 na dole.
Masz wybrane wewnętrzne zródło napięcia odniesienia 2.56V
Hmm choć po przeliczniu 2.56v/1023=0.0025024437927664 jednostek
I teraz 900*0.0025024437927664=2.252199413489736 wychodiz dziwnie nie 2.56V
Coś jest nie tak pokaz schemat jak możesz.
strona 39 na dole.
Masz wybrane wewnętrzne zródło napięcia odniesienia 2.56V
Hmm choć po przeliczniu 2.56v/1023=0.0025024437927664 jednostek
I teraz 900*0.0025024437927664=2.252199413489736 wychodiz dziwnie nie 2.56V
Coś jest nie tak pokaz schemat jak możesz.
Dziwne nigdy nie miałem takiego przypadku.
Spróbuj wybrać inne ustawienie w config adc nie internal
help mówi że:
Link działa tylko wklej w google to jest polski PDF do mega16.
Spróbuj wybrać inne ustawienie w config adc nie internal
help mówi że:
Spróbuj na niższej częstotliwości daj inny kwarc lub zmien fusy na wewnętrzny 8Mhz.'The prescaler divides the internal clock by 2,4,8,16,32,64 or 128
'Because the ADC needs a clock from 50-200 KHz
'The AUTO feature, will select the highest clockrate possible
Link działa tylko wklej w google to jest polski PDF do mega16.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 37 gości