ADC ortalaması alma

Başlatan blueboard, 10 Temmuz 2015, 00:06:46

blueboard

Ete Hocam, yabancı bir kaynakta ADC çevrim sonucunun daha az hata payı ile okunmasıyla ilgili bir PBP dosyası buldum. Kullanılan yöntem sizin daha önce benzer örnek olarak verdiğiniz bir konuda yer alan "Bubble Sort" yöntemine benziyor. Ancak sanırım komut dosyasının son kısmı eksik veya ben eksik olarak algıladım. PBP dosyasında kullanılan değişkenleri anlaşılması daha kolay olsun diye Türkçe değişkenlerle değiştirdim.
Burada ortalamayı hangi mantıkla alıyorlar. Ve diyelim ki ADC 'nin ortalaması 25 ise portb.1=1 olsun,
ADC 'nin ortalaması 150  ise portb.2=1 olsun.
Normalde bunun yazılımı  basittir.Yani
IF HAM = 25 THEN PORTB.1=1
IF HAM = 150 THEN PORTB.2=1 dememiz gerekir. Ancak ekteki PBP dosyasına bu iki komutu nerede ilave etmemiz gerekir? Dosyayı ekliyorum. Teşekkür ederim.

ete

Bu program parçası okunan değerleri XOR yöntemi ile küçükten büyüğe doğru sıralamakta sonrada en ortadakini alarak ortalama elde etmektedir. Kullanılan XOR öntemi bir nevi yerdeğiştirme mantığıdır. A>B ise Anın değeri ile B nin değerleri yer değiştirmektedir. Avantajı tek döngü ile işin halledilmesidir. Başka bir farkı yok.
Sonuçta bu bir alt program şeklinde çalışmakta ve geri dönen değer TOPLAM  =  OKUNAN[ORTALAMA] şeklinde olduğundan,
programında GOSUB ADC den sonra,

IF TOPLAM = 25 THEN PORTB.1=1
IF TOPLAM = 150 THEN PORTB.2=1

şeklinde kullanılması uygun olacaktır.

Ete

blueboard

Teşekkür ederim,deneyeceğim.

blueboard

#3
Ete Hocam, anlattıklarınızdan anladığım kadarıyla bir şeyler yapmaya çalıştım ama olmadı. Hata veya hatalarım nerede? Tüm dosyaları ekliyorum.

ete

Programlama bilgin çok az. Çalışacak şekilde düzelttim. Yalnızca Basla satırından sonrakileri aşağıdakilerle değiştir.

Ete

BASLA:               
       HAM=0
       GOSUB ADC_AL
       IF TOPLAM = 25 THEN PORTB.1=1   : pause 500 : portb=0
       IF TOPLAM = 127 THEN PORTB.2=1  : pause 500 : portb=0

       goto basla       
'
' ======================= İstatistiksel Veri işleme ============================
'-------------------------------------------------------------------------------
ADC_AL:

ADCIN  1, OKUNAN[HAM]
HAM = HAM + 1 
If HAM < ORNEK then ADC_AL

HAM = 0

Ara_hesap:   
If OKUNAN[HAM + 1] < OKUNAN[HAM] then               
        OKUNAN[HAM] = OKUNAN[HAM] ^ OKUNAN[HAM + 1]   
    OKUNAN[HAM + 1] = OKUNAN[HAM] ^ OKUNAN[HAM + 1]   
        OKUNAN[HAM] = OKUNAN[HAM] ^ OKUNAN[HAM + 1]   
If HAM > 0 then HAM = HAM - 2
endif

HAM = HAM + 1 
If HAM < ORNEK then goto Ara_hesap '
TOPLAM  =  OKUNAN[ORTALAMA]
return
'
'===============================================================================
end

blueboard

Ete Hocam,çok teşekkür ederim,çalıştı. Bilgimin az olduğunun farkındayım. Bundan dolayı kendimi geliştirmek için sürekli bir şeylerin peşinde koşuyorum.Tekrar tekrar teşekkür ederim.

Powered by EzPortal