Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

ortalama alma işlemi

Başlatan secretagent, 22 Şubat 2011, 21:30:18

Hattusa

Alıntı yapılan: t2 - 23 Şubat 2011, 23:38:41
Proton

BUBBLE_SORT: 
          Repeat
            SWAP_OCCURED = 0
                                
              INDEX = 0
            Repeat
                If SAMPLE[INDEX] > SAMPLE[INDEX + 1] Then
                    SWAPTMP = SAMPLE[INDEX]
                SWAPTMP2 = ARRAY2[INDEX]
                    SAMPLE[INDEX] = SAMPLE[INDEX + 1]
                ARRAY2[INDEX] = ARRAY2[INDEX+1]
                    SAMPLE[INDEX + 1] = SWAPTMP
                ARRAY2[INDEX+1] = SWAPTMP2
                    SWAP_OCCURED = 1  
                Endif
                Inc INDEX
            Until INDEX = SAMPLES_TO_TAKE     
        Until SWAP_OCCURED = 0 
        Return


s.a. t2 ustam ilginiz için teşekkür ederim. yazmış olduğunuz kodda ADC okutmayı tanımlayan ifadeyi ve kaç adet okutacağımızı kaçını çıkaracağımızı vs anlayamadım. hocam bir daha bakabilirmisiniz. yani en azından satırların anlamlarını belirtme şansınız varmı? kusura bakmayın yaşımız geçkin anlama özürlüyüm.
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

t2

#16
Burada ADCli bir örnek verilmiş. Akü gerilimi ölçülüyor.  Belki işinizi görür:
http://protonbasic.net/content.php/489-GPS-code-example


ehliseyf

Standart sapma ile daha net sonuçlar alabilirsiniz.
Code'm mu oturturum !

t2

Nasıl alabiliriz hocam biraz anlatsana, Elimizde 1ms aralıklar ile alınmış 100 tane örnek var. standart sapma nasıl bir güzelik sağlayabilir?  Burada örneklerin başka bir değişkene bağımlığı mı analiz edilecek?.   Kel alaka gibi geldi bana. cahillğimize verin.

Hattusa

Alıntı yapılan: t2 - 24 Şubat 2011, 09:36:31
Burada ADCli bir örnek verilmiş. Akü gerilimi ölçülüyor.  Belki işinizi görür:
http://protonbasic.net/content.php/489-GPS-code-example

t2 ustam ilginiz için teşekkür ederim. şimdi linke bakıyorum, örnek güzele benziyor, inceyeyim.
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

Hattusa

#20
Alıntı yapılan: ehliseyf - 24 Şubat 2011, 10:07:55
Standart sapma ile daha net sonuçlar alabilirsiniz.

hocam üzerinde çalıştığım bir devrede 1 ms aralıklarla yazılım aralarında adc örneklemeleri alıyorum 20 ve 50 şer adet ve ADC lerimin içerisinde pik atan yani alakasız ve yüksek değerde ADC ölçümleri var onları yazılımla atmış olursam şayet bu ve buna benzer tekniklerle devre %50 verimli çalışacak. sizin öneriniz varmıdır.
ölçümlediğim ADC leri ortalama aldırmak yani hepsini toplayıp adc toplamına bölmek işe yaramadı.
hatta
örnek olarak
ADC_sonuc = (ADC_sonuc *0.8 ) + (ADC_ornek * 0.2)
bu teknik dahi işe yaramadı
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

Hattusa

s.a.
arkadaşlar bu yazılıma bir deneme yaptım, isisde kısmen çalışıyor, uygulamada sağlıklı çalışırmı bilmem, bir yerlerde eksik var ama bulamadım. birde alınan 10 örnekten baştan ve sondan 2 şer adet örneği çıkarıp kalan örneğin ortalamasını aldırma şansımız yokmu?
Device 16F877A
Xtal 4

Declare Adin_Res 10   ' Sets the number of bits in the result
Declare Adin_Tad 32_Fosc  ' Sets the ADC's clock source
Declare Adin_Stime 10   ' Allows the internal capacitors to fully charge
                                                                 
'-------------------------- LCD connection settings ------------------------
                                                                  
Declare  LCD_Type ALPHA   ' Alphanumeric LCD type
Declare  LCD_DTPin  PORTD.4   ' LCD data port
Declare  LCD_ENPin  PORTD.3   ' E line
Declare  LCD_RSPin  PORTD.2   ' RS line
Declare  LCD_Interface  4   ' 4-line or 8-line interface
Declare  LCD_CommandUs  100   ' Time to wait (in uS) between commands sent to the LCD
Declare  LCD_DataUs  50   ' Time to wait (in microseconds) between data sent to the LCD
Declare  LCD_Lines   4   ' How many lines the LCD has

ADCON1 = %10001110                                                            
'-------------------------- Ports settings ---------------------------------
   
TRISA = %00000001 
PORTA = 0
TRISB = %00000000
PORTB = 0
TRISC=  %00000000 
PORTC = 0
TRISD = %00000000
PORTD = 0
TRISE = %00000000
PORTE = 0


'BUBBLE SORT VARIABLES
    Symbol SaMPLeS_TO_TaKE = 10                ' numune sayısı
    Dim SwAPTmP As Word                        ' sıralama için geçici değişken
    Dim INdEX As Byte                        ' sıralamanın içine alındığı yer     
    Dim SWaP_OccUReD As Byte                ' sıralama tamamsa göster değişkeni
    Dim SaMpLE[SaMPLeS_TO_TaKE + 1] As Word ' örnekleri tutmak için oluşturulan dizi
    Dim N As Byte
    Dim SoNuC As Byte
 
 
 
 
 BATTERY_LEVEL:
        For N = 0 To SaMPLeS_TO_TaKE
        SaMpLE[N] = ADIn 0
        
        DelayMS 10 
    Next
    GoSub BUBBLE_SORT
    SoNuC = SwAPTmP * 0.00488
    
    Cls
    Print At 1,1, "INDEX:"
    Print At 1,7, Dec INdEX
    Print At 2,1,"SWAPTMP:"
    Print At 2,9, Dec SwAPTmP
    Print At 3,1,"SONUC:",Dec SoNuC, "  Volt"
    DelayMS 100                                                                                                                                                 
GoTo BATTERY_LEVEL

  
    
BUBBLE_SORT: 
Repeat
SWaP_OccUReD = 0        ' Clear flag that indicates swap.                                 
INdEX = 0
Repeat                                            ' For each cell of the array... 
If SaMpLE[INdEX] > SaMpLE[INdEX + 1] Then      ' Move larger values up. 
SwAPTmP = SaMpLE[INdEX]             ' ..by swapping them. 
SaMpLE[INdEX] = SaMpLE[INdEX + 1]
SaMpLE[INdEX + 1] = SwAPTmP
SWaP_OccUReD = 1  ' Set bit if swap occurred. 
EndIf
Inc INdEX
Until INdEX = SaMPLeS_TO_TaKE   ' Check next cell of the array. 
Until SWaP_OccUReD = 0     ' Keep sorting until no more swaps. 
Return
    
    End    
    
       




buda konu ile alakalı şema ve yazılım dosyası:
http://hotfile.com/dl/107150484/bc580f9/deneme.rar.html
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

picmanya

bu başlığı yakından takip ediyorum.
bir adc girişini çoklu okuyup üst üste toplayıp, sonucda ortalamasını aldığımda benimde değerlerim beklediğimin dışında çıkıyor.
burda yazılan, okumada ilk 5 en küçük ve son 5 en büyük değeri hesaba katmayın mantığındaki öneriyi  uygulayacağım.

hep programdan gidilmiş adc işlemci donanımına girilmemiş.ben adc referans beslemeye bir takım filtrelemeler yaptığımda daha iyi netice aldığımı programı hiç değiştirmeden gözle görünür derecede fark ettim.bunuda opamp bölümündeki yazımda belirttim.programdan öncelikli donanım var.sorun yaşayanlar donanımına ne derecede güveniyor?donanım süper diyebilirlermi?

Hattusa

s.a.
doanımsal olarak beslemeleri 100uF ve 100nF ve 10nF ile filtreledim. bazen 10nF fazla geliyor ama genellikle işlemciyi 100uF ve 100nF ile filtreliyorum. lcd yede 100nF takıyorum. yani +5v beslemede 2 tane 100nF 1 tane 100uF takılı, opamp girişinde yüksek geçiren filtre uyguladım yani 100uF ile sinyali alıp, 10k ile gnd ye şaseleyip veriyorum opampa, çıkışta 4k7 direnc ile 1uF cond. ve 1 tanede 1n4148 ile gnd ye şaseliyorum yani alçak geçiren filtre uygulamış oluyorum. burada hedef min. seviyede hata ile okutmak.
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

Maxim

birşeyler yapmaya çalıştım ama olmadı pek

tam ortadaki örneği almak istiyoruz.

Device 16F877A
Xtal 4

Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_ON, PWRTE_ON, WDT_OFF, XT_OSC

TRISA = %00000001
PORTA = 0
TRISB = %00000000
PORTB = 0
TRISC=  %00000000
PORTC = 0
TRISD = %00000000
PORTD = 0
TRISE = %00000000
PORTE = 0

ADCON1 = %10001110 

Declare Adin_Res 10   ' Sets the number of bits in the result
Declare Adin_Tad FRC
Declare Adin_Stime 10   ' Allows the internal capacitors to fully charge
                                                                 

Declare  LCD_DTPin  PORTD.4   ' LCD data port
Declare  LCD_ENPin  PORTD.3   ' E line
Declare  LCD_RSPin  PORTD.2   ' RS line
Declare  LCD_Interface  4   ' 4-line or 8-line interface
Declare  LCD_Lines   4   ' How many lines the LCD has
                                                       


'BUBBLE SORT VARIABLES
    Symbol SaMPLeS_TO_TaKE = 10                ' numune sayısı
    Dim SwAPTmP As Word                        ' sıralama için geçici değişken
    Dim INdEX As Byte                        ' sıralamanın içine alındığı yer     
    Dim SWaP_OccUReD As Byte                ' sıralama tamamsa göster değişkeni
    Dim SaMpLE[SaMPLeS_TO_TaKE + 1] As Word ' örnekleri tutmak için oluşturulan dizi
    Dim N As Byte
    Dim SoNuC As Byte
Symbol MIDDLE_SAMPLE = (SaMPLeS_TO_TaKE / 2) + 1 ' The middle sample of the samples taken


BATTERY_LEVEL:
        For N = 0 To SaMPLeS_TO_TaKE
        SaMpLE[N] = ADIn 0
       
        DelayMS 10
    Next
    GoSub BUBBLE_SORT
   
    SoNuC = SaMpLE[MIDDLE_SAMPLE]
    SoNuC = SoNuC * 0.00488
   
    'Cls
    Print At 1,1, "INDEX:",Dec INdEX,"  "
    Print At 2,1,"SWAPTMP:",Dec SwAPTmP,"  "
    Print At 3,1,"SONUC:",Dec SoNuC," Volt"
    DelayMS 100                                                                                                                                                 
GoTo BATTERY_LEVEL

 
   
BUBBLE_SORT:
Repeat
SWaP_OccUReD = 0        ' Clear flag that indicates swap.                                 
INdEX = 0
Repeat                                            ' For each cell of the array...
If SaMpLE[INdEX] > SaMpLE[INdEX + 1] Then      ' Move larger values up.
SwAPTmP = SaMpLE[INdEX]             ' ..by swapping them.
SaMpLE[INdEX] = SaMpLE[INdEX + 1]
SaMpLE[INdEX + 1] = SwAPTmP
SWaP_OccUReD = 1  ' Set bit if swap occurred.
EndIf
Inc INdEX
Until INdEX = SaMPLeS_TO_TaKE   ' Check next cell of the array.
Until SWaP_OccUReD = 0     ' Keep sorting until no more swaps.
Return


Maxim

bu, bubble sort
birde median filter var onu açıklayacak kimse varmı? nasıl çalışıyor o ?

Hattusa

Alıntı yapılan: pro-TR - 24 Şubat 2011, 14:40:31
s.a.
arkadaşlar bu yazılıma bir deneme yaptım, isisde kısmen çalışıyor, uygulamada sağlıklı çalışırmı bilmem, bir yerlerde eksik var ama bulamadım. birde alınan 10 örnekten baştan ve sondan 2 şer adet örneği çıkarıp kalan örneğin ortalamasını aldırma şansımız yokmu?
   
     

s.a.
arkadaşlar ya araştırmamda köşeli parantez içine alınan terimler en çok 255 16 bitlik işlemcilerde de 256 olabiliyormuş, bende simülasyonda neden 250 civarını geçemediğimi düşünüyordum.
acaba bunun başka bir yolu yokmu?
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

FUNKY


kod gayet güzel çalışıyor.   sample[n] dizisine 0 dan 9 a kadar karışık şekilde   rakamlar girdim   0 dan 9 a  sıraladı.

[IMG]http://img121.imageshack.us/img121/7252/bubblef.jpg[/img]

Uploaded with ImageShack.us



Symbol SaMPLeS_TO_TaKE = 9               ' numune sayısı
    Dim SwAPTmP As Word                        ' sıralama için geçici değişken
    Dim INdEX As Byte                        ' sıralamanın içine alındığı yer     
    Dim SWaP_OccUReD As Byte                ' sıralama tamamsa göster değişkeni
    Dim SaMpLE[SaMPLeS_TO_TaKE + 1] As Word ' örnekleri tutmak için oluşturulan dizi
    Dim N As Byte
    Dim SoNuC As Byte
    Dim sayi As Byte
    Dim a As Byte



basla:
sayi=0
  Repeat
  a =LookUp sayi ,[5,1,3,2,6,8,7,9,0,4]
  Inc sayi
  SaMpLE[N]=a                            'dizin içeriğini  sample[n] e kopyala
  Inc N
  Until sayi=10

GoSub BUBBLE_SORT
Print At 1,1,"sample:",Dec SaMpLE[0],Dec SaMpLE[1],Dec SaMpLE[2],Dec SaMpLE[3],Dec SaMpLE[4],Dec SaMpLE[5],_

                       Dec SaMpLE[6],Dec SaMpLE[7],Dec SaMpLE[8],Dec SaMpLE[9]
GoTo basla
   
BUBBLE_SORT:

Repeat
SWaP_OccUReD = 0        ' Clear flag that indicates swap.                                 
INdEX = 0
Repeat                                            ' For each cell of the array...
If SaMpLE[INdEX] > SaMpLE[INdEX + 1] Then      ' Move larger values up.
SwAPTmP = SaMpLE[INdEX]             ' ..by swapping them.
SaMpLE[INdEX] = SaMpLE[INdEX + 1]
SaMpLE[INdEX + 1] = SwAPTmP
SWaP_OccUReD = 1  ' Set bit if swap occurred.
EndIf
Inc INdEX
Until INdEX = SaMPLeS_TO_TaKE   ' Check next cell of the array.
Until SWaP_OccUReD = 0     ' Keep sorting until no more swaps.


Return
    End   
   

Hattusa

#28
s.a.
aşağıda 2 kanaldan adc okuması yapıyorum ADCOKU1 ve ADCOKU2 olarak bunları lookup gibi bir yere nasıl atacağım, bir türlü çözemedim. yani 10 kez okuttuğumda registerin içerisine atmalıyımki bubble sort1 ve bubble sort2 de büyükten küçüğe sıralatabileyim. bu şekliyle adc değerlerini atacağım noktayı belkirtemediğim için derleyici hata veriyor. çözüm için önerilerinizi bekliyorum arkadaşlar

Alıntı YapDevice 16F877A
Xtal 4

Declare Adin_Res 10   ' Sets the number of bits in the result
Declare Adin_Tad 32_Fosc  ' Sets the ADC's clock source
Declare Adin_Stime 10   ' Allows the internal capacitors to fully charge
                                                                 
'-------------------------- LCD connection settings ------------------------
                                                                 
Declare  LCD_Type ALPHA   ' Alphanumeric LCD type
Declare  LCD_DTPin  PORTD.4   ' LCD data port
Declare  LCD_ENPin  PORTD.3   ' E line
Declare  LCD_RSPin  PORTD.2   ' RS line
Declare  LCD_Interface  4   ' 4-line or 8-line interface
Declare  LCD_CommandUs  100   ' Time to wait (in uS) between commands sent to the LCD
Declare  LCD_DataUs  50   ' Time to wait (in microseconds) between data sent to the LCD
Declare  LCD_Lines   4   ' How many lines the LCD has

ADCON1 = %10000010                                                           
'-------------------------- Ports settings ---------------------------------
   
TRISA = %00011111
PORTA = 0
TRISB = %00000000
PORTB = 0
TRISC=  %00000000
PORTC = 0
TRISD = %00000000
PORTD = 0
TRISE = %00000000
PORTE = 0

Symbol fR = PORTE.0
Symbol OrNk1 = PORTE.1
Symbol oRnK2 = PORTE.2

Dim PaLs As Word
Dim fReK As Word
Dim OrNeK1 As Word
Dim oRnEk2 As Word

PaLs = 500
fReK = 8000
OrNeK1 = 200
oRnEk2 = 50

'-------------------BUBBLE SORT DEĞİŞKENLERİ--------------------------
Symbol NuMuNeSaY1 = 10
Symbol nUmUnEsAy2 = 10
Dim gDegIsKeNa As Word
Dim GdEgIsKeNb As Word
Dim nDeX1 As Byte
Dim NdEx2 As Byte
Dim AdCoKu1 As Word
Dim aDcOkU2 As Word
Dim StAmAm1 As Byte
Dim sTaMaM2 As Byte
Dim SaMpLe1[NuMuNeSaY1 + 1] As Word
Dim sAmPlE2[nUmUnEsAy2 + 1] As Word
Dim N1 As Byte
Dim N2 As Byte
Dim X As Byte



AyArT:
GoSub TARAMA
GoSub BUBBLE_SORTA
GoSub BUBBLE_SORTB

Cls
Print At 1,1, Dec SaMpLe1[X]
Print At 2,1, Dec AdCoKu1
Print At 3,1, Dec X
DelayMS 10
GoTo AyArT

TARAMA:
X = 0

Repeat
fR = 1
DelayUS 500
fR = 0
DelayUS 200
OrNk1 = 1
DelayUS 5
AdCoKu1[N1) = ADIn 1    '1 adc okuması'bu KISIMLARDA HATA VERİYOR
DelayUS 5
OrNk1 = 0
DelayUS 50
oRnK2 = 1
DelayUS 5
aDcOkU2[N2] = ADIn 4  '2 adc okuması 'BU KISIMLARDA HATA VERİYOR
DelayUS 5
oRnK2 = 0
DelayUS 8000


Inc N1
Inc N2

Until X = 10

Return

BUBBLE_SORTA:
Repeat           
StAmAm1 = 0                                             
nDeX1 = 0           
Repeat               
If SaMpLe1[nDeX1] > SaMpLe1[nDeX1 + 1] Then                   
gDegIsKeNa = SaMpLe1[nDeX1]               
SaMpLe1[nDeX1] = SaMpLe1[nDeX1 + 1] 
SaMpLe1[nDeX1] = gDegIsKeNa                 
StAmAm1 = 1                 
EndIf               
Inc nDeX1           
Until nDeX1 = NuMuNeSaY1             
Until gDegIsKeNa = 0         
Return

BUBBLE_SORTB:
Repeat           
sTaMaM2 = 0                                             
NdEx2 = 0           
Repeat               
If sAmPlE2[NdEx2] > sAmPlE2[NdEx2 + 1] Then                   
GdEgIsKeNb = sAmPlE2[NdEx2]               
sAmPlE2[NdEx2] = sAmPlE2[NdEx2 + 1] 
sAmPlE2[NdEx2] = GdEgIsKeNb                 
sTaMaM2 = 1                 
EndIf               
Inc NdEx2           
Until NdEx2 = nUmUnEsAy2             
Until GdEgIsKeNb = 0         
Return

vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

Hattusa

Alıntı yapılan: FUNKY - 24 Şubat 2011, 20:24:48

kod gayet güzel çalışıyor.   sample[n] dizisine 0 dan 9 a kadar karışık şekilde   rakamlar girdim   0 dan 9 a  sıraladı.

   

s.a. hocam lookup dizinine atılan değer adc değeri olarak belirleyebilirmiyiz. yani değişken atayabilirmiyiz. birde lookup sanırım 8 bitte 255 e kadar müsade veriyor, yani bu 8 bit demek mi oluyor yani 5v/256 gibi ;D ya kafam durdu saçmalamaya başladım...
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>