 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
cipko Član

Pridružen-a: Sre 22 Okt 2003 14:19 Prispevkov: 137 Aktiv.: 0.58 Kraj: velenje
|
Objavljeno: Pon Maj 18, 2009 10:34 am Naslov sporočila: Bascom AVR +Atmega8+analogna meritev |
|
|
Pozdravljeni!
Imam mali problem, ki ga s pomočjo Googla nisem uspel rešiti.
Torej, imam Pt sondo (0-150 st. C) s tokovnim izvorom 4-20mA. Ta tok ustrezno pretvorim in izvedem meritev na AD vhodu atmege8, na LCd pa prikažem tok in ustrezno temperaturo. Vrednosti temperature in toka (in tudi AD vrednosti 0-1023 delcev ) pa se zaradi pretvorbe malenkost spreminjajo - nihajo (pri določenem toku AD pretvorba niha med npr. 350 on 360 delci, kar ima za posledico nihanje temperature npr. za +-0.3 st.C, kar je zelo moteče). Zadevo sem sicer z zakasnitvijo prikaza malce ublažil, a to ni to.
Vprašanje je torej naslednje: kako v bascomu izmeriti in povprečiti npr. 10 meritev in jih šele nato prikazati na LCD.
Mogoče obstaja tudi kakšna hardwarska rešitev (razen kondenzatorja, ki ne reši zadeve)?
LP, Cipko |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pon Maj 18, 2009 10:44 am Naslov sporočila: |
|
|
Sestej 64 meritev zapored v 16-bitni spremenljivki, med meritvami naredi tako dolgo pavzo, kot si jo lahko najvec privoscis (ce zelis dobiti rezultat v eni sekundi, bo torej pavza dolga priblizno 1 / 64 sekunde), ter pred izpisom deli to spremeljivko s 64.
Zakaj ravno 64 ? Ravno toliko 10-bitnih odcitkov spravis v 16 bitov, torej dva bajta, okrogla stevilka (za racunalnik, ki uporablja binarni sistem seveda) pa pomeni, da je deljenje z njo samo serija bitnih pomikov, kar mikrokontroler izvede izredno hitro v primerjavi z deljenjem v desetiskem sistemu, ce MCU nima HW delilnika.
Nekaj nihanja bo se vedno ostalo (1/2 bita recimo), a bi morala stevilka skakati gor in dol precej manj, kot ti trenutno. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.46 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Pon Maj 18, 2009 11:08 am Naslov sporočila: |
|
|
Če ti stvari roliko nihajo imaš verjetno težavo pri napajanju. Kako imaš rešeno napajanje, kondenzatorje na napajanju, kondenzatoreje na vhodu AD-ja, .... |
|
Nazaj na vrh |
|
 |
cipko Član

Pridružen-a: Sre 22 Okt 2003 14:19 Prispevkov: 137 Aktiv.: 0.58 Kraj: velenje
|
Objavljeno: Pon Maj 18, 2009 12:52 pm Naslov sporočila: |
|
|
Pozdrav!
Sokrat: lepo napisano, ampak jaz tega ne znam programsko izvesti (mogoče ima kdo podobno kodo s katero bi experimentiral in si pomagal).
Mucek4: Ne, ni problem napajanja oz. blokiranja s kondiji (če isti vhod in isti program priključim napetostno preko istega napajalnika, mi meritev oz. LCD prikaz miruje - zgleda, da sonda ustvarja rahle nihaje toka, ki se zaznajo pri Ad pretvorbi kot sprememba za par delcev gor/dol , le to pa pri SW izračunu in prikazu prinese večje nihanje vrednosti
Nekje na forumu (ne najdem na katerem ) sem nekoč zasledil, da je nekdo izdeloval VA meter z atmego za usmernik in imel podobne težave za meritev toka - le kako (če sploh) je rešil težavo? |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.46 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Pon Maj 18, 2009 1:09 pm Naslov sporočila: |
|
|
Poglej. Bascoma ne poznam odlično, zato če bo kakšna napaka jo boš popravil:
Koda: |
dim spremenljivka as word
For A = 1 To 64
AD = beri_AD
spremenljivka = spremenljivka + AD
Next
vrednost = spremenljivka / 64 |
|
|
Nazaj na vrh |
|
 |
cipko Član

Pridružen-a: Sre 22 Okt 2003 14:19 Prispevkov: 137 Aktiv.: 0.58 Kraj: velenje
|
Objavljeno: Tor Maj 19, 2009 7:05 am Naslov sporočila: |
|
|
Hvala mucek4, bom ob kakšnem deževnem večeru poskusil zadevo izpeljati po tvojem predlogu. |
|
Nazaj na vrh |
|
 |
marko11 Član



Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 893 Aktiv.: 3.77 Kraj: Dobrepolje
|
Objavljeno: Sre Feb 10, 2010 9:16 pm Naslov sporočila: |
|
|
mucek4 je napisal/a: |
Poglej. Bascoma ne poznam odlično, zato če bo kakšna napaka jo boš popravil:
Koda: |
dim spremenljivka as word
For A = 1 To 64
AD = beri_AD
spremenljivka = spremenljivka + AD
Next
vrednost = spremenljivka / 64 |
|
Zanima me , če je to isto, če dobim isti rezultat ?
Koda: |
For I = 1 To 64 'povprečje 64 merjenj
'W je ADC vrednost
A = A + W
Next
A = A / 64
|
LP,marko |
|
Nazaj na vrh |
|
 |
klemen88 Član


Pridružen-a: Tor 01 Jan 2008 17:37 Prispevkov: 747 Aktiv.: 3.51 Kraj: Slovenj Gradec
|
Objavljeno: Sre Feb 10, 2010 11:53 pm Naslov sporočila: |
|
|
marko11 je napisal/a: |
mucek4 je napisal/a: |
Poglej. Bascoma ne poznam odlično, zato če bo kakšna napaka jo boš popravil:
Koda: |
dim spremenljivka as word
For A = 1 To 64
AD = beri_AD
spremenljivka = spremenljivka + AD
Next
vrednost = spremenljivka / 64 |
|
Zanima me , če je to isto, če dobim isti rezultat ?
Koda: |
For I = 1 To 64 'povprečje 64 merjenj
'W je ADC vrednost
A = A + W
Next
A = A / 64
|
LP,marko |
V For zanki moreš še prebrati analogno vrednost! Drugače je pa isto!
Koda: |
For I = 1 To 64 'povprečje 64 merjenj
W = Getadc(channel)
A = A + W
Next
A = A / 64
|
|
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Čet Feb 11, 2010 12:43 pm Naslov sporočila: Zakaj 64 |
|
|
Ali je kak razlog, da ste postavili potrebnih 64 meritev za izračun povprečja?
Ne bi billo 10 meritev dovolj?
Jaz bi morda naredil tako:
Koda: |
Dim Meritev(10) As Integer
Dim Indeks As Byte
Dim Povprecje As Integer
Dim I As Byte 'delovni bajt
' kadarkoli bi šel v meritev bi meritev dal v tabelo in takoj izračunal poprečje
Meritev(indeks) = Beriad
Incr Indeks
If Indeks > 10 Then Index = 1
Povprecje = 0
For I = 1 To 10 : Povprecje = Povprecje + Meritev(i) : Next
Povprecje = Povprecje / 10
..
' in naprej v program
|
|
|
Nazaj na vrh |
|
 |
marko11 Član



Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 893 Aktiv.: 3.77 Kraj: Dobrepolje
|
Objavljeno: Čet Feb 11, 2010 6:08 pm Naslov sporočila: |
|
|
Vilko;
razlog je ta, da mi ADC vrednost preveč niha, ko merim napetost, ki ni čisto enosmerna, če je napetost dovolj zglajena ADC nič ne preskakuje.
Vstavil sem to povprečje, pa sedaj zelo malo preskakuje - samo za eno ali dve ADC vrednosti.
Kako pa vi rešujete ta problem, ali se da še kako drugače to izpeljati?
Prosim za nasvet.
LP,marko |
|
Nazaj na vrh |
|
 |
MadMax Član


Pridružen-a: Pet 09 Sep 2005 22:16 Prispevkov: 4743 Aktiv.: 20.02
|
Objavljeno: Čet Feb 11, 2010 6:40 pm Naslov sporočila: |
|
|
Morda bi se povprečenje še malo dodelalo, z izločanjem obeh skrajnih vmesnih meritev pri povprečenju (max. in min. zabeležena vrednost znotraj enega povprečenja)... |
|
Nazaj na vrh |
|
 |
eddie Član

Pridružen-a: Sre 10 Dec 2003 21:02 Prispevkov: 723 Aktiv.: 3.05 Kraj: Severna primorska
|
Objavljeno: Čet Feb 11, 2010 9:37 pm Naslov sporočila: |
|
|
Še ena varijanta je za umirjanje signala, ki sem jo začel uporabljati zadnje čase in mi je všeč ker vsak cikel dobiš novo vrednost, ne rabiš prostora za seštevanje vzorcev, pa še kaj bi se našlo.
Pišem na pamet tako da mogoče ne bo do vejice in pike pravilno...
Ampak gre nekako takole:
Koda: |
Vrednost = 1/T *(VrednostIzADC) + (1-1/T)*VrednostStStanje
Vrednost... nova vrednost
T... konstanta, ki predstavlja "ojačanje"
VrednostIzADC... nova vrednost prebrana iz ADC-ja
VrednostStStanje... vrednost(izračunana) iz prejšnjega cikla
|
Kaj se dogaja? Vsak cikel prištejemo k vrednosti iz prejšnjega cikla samo del nove vrednosti. Tako smo sicer vedno malo v zaostanku ampak izhod pa je lepo glajen signal. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|