Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

ortalama alma işlemi

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

secretagent

arkadaş ben dc voltmetre yapıcam fakat şu işlemi yapamadım adc yi 20 kere okuyup ortalamasını alıp sonucu göstermek istiyorum.Çünkü direk göstermek istediğimde voltmetre sürekli değişiyor sabit kalmıyor.yardımcı olabilcek varmı acaba

Ankaralı

for i=0 to 19
toplam=toplam+adcdeğeri
next
sonuc=toplam/20

kabaca bu şekilde
@ NEXYS2

RcALTIN

Misal şöyle olabilir, okuduğunuz 20 tane veriyi bir diziye alın, diziyi büyükten küçüğe sıralayın, ilk 5 ve son 5'i atın...(yani görmezden gelin) Ortadaki 10 tanenin ortalamasını hesaplayın. Daha iyi sonuçlar alacağınızı düşünüyorum...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

serdararikan

#3
for i=0 to 15
      ort = (ort + adcdegeri)
next
ort = ort >> 4

şeklinde hesaplayabilirsin.bu işlem diğerlerinden daha hızlı çalışacaktır.

Maxim

Alıntı yapılan: RcALTIN - 22 Şubat 2011, 21:33:03
Misal şöyle olabilir, okuduğunuz 20 tane veriyi bir diziye alın, diziyi büyükten küçüğe sıralayın, ilk 5 ve son 5'i atın...(yani görmezden gelin) Ortadaki 10 tanenin ortalamasını hesaplayın. Daha iyi sonuçlar alacağınızı düşünüyorum...

buna bubble sort deniyor sanırım

RcALTIN

#5
Alıntı yapılan: Maxim - 22 Şubat 2011, 21:57:24
Alıntı yapılan: RcALTIN - 22 Şubat 2011, 21:33:03
Misal şöyle olabilir, okuduğunuz 20 tane veriyi bir diziye alın, diziyi büyükten küçüğe sıralayın, ilk 5 ve son 5'i atın...(yani görmezden gelin) Ortadaki 10 tanenin ortalamasını hesaplayın. Daha iyi sonuçlar alacağınızı düşünüyorum...

buna bubble sort deniyor sanırım

Sanırım büyükten küçüğe sıralama kısmı için evet.
http://tr.wikipedia.org/wiki/Kabarc%C4%B1k_s%C4%B1ralamas%C4%B1

arkadaşa bahsettiğim şeyin örnek kodlarınıda yazayım, tam olsun:
   //diziye öylesine 20 deger atıyorum
   int d[] = {36,1,2,4,44,7,3,7,3,9,23,43,1,24,34,23,11,72,37,15};
   int i, j, g, x = 5, toplam, ort;
   //sıralıyorum
   for (i = 0; i < sizeof(d);i++)
   {
      for(j=0; j < sizeof(d);j++)
      {
         if(d[i] > d[j])
         {
            g = d[i];
            d[i] = d[j];
            d[j] = g;
         }
      }
   }
   //başından ve sonundan x değeri kadarını yoksayıp, toplayıp ortalamalarını alıyorum
   for(i = x; i < sizeof(d) - x ; i++)
      toplam += d[i];
   ort = toplam / sizeof(d) - (x * 2);


kodları şimdi yazdım ve denemedim, diziboyutunun değişken olabileceğini düşünerek "sizeof(d)" yazdım, eğer sabitse görüldüğü yere direkt "20" yazılabilir, x değişkeni baştan ve sondan atılacak değer sayısını belirliyor...

ek: konuyu ccs c bölümünde sanıyordum, meğer basicmiş, artık mantığına bakarak uyarlarsınız...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

Mucit23

Arkadaşlar bu trueRMS  yönteminin matematiksel adı Harmonik ortalmamı oluyor. Burada adı geçen ortalama çeşidi aritmetik ortalama oluyor galiba. Burada RMS yöntemi ile ortalma alınsa daha iyi değilmidir.

serdararikan

Alıntı yapılan: mucit23 - 22 Şubat 2011, 23:44:16
Arkadaşlar bu trueRMS  yönteminin matematiksel adı Harmonik ortalmamı oluyor. Burada adı geçen ortalama çeşidi aritmetik ortalama oluyor galiba. Burada RMS yöntemi ile ortalma alınsa daha iyi değilmidir.

true RMS denen şey sinyalin anlık değerlerinin karelerinin ortalamasının kareköküdür.saf sinüs sinyali için RMS değer Vppx0.707 ile hesaplanabilir.Ama sinyalin formu değiştiğinde bu formül doğru değildir.bu yüzden her sinyalin gerçek etkin değerini yani RMS değerini hesaplayan ölçüm cihazlarına true  RMS ölçüm yapıyor denir.

RMS dediğimiz şeye gelince; RMS etkin değer demektir.açıklayacak olursak 10V tepe değerine sahip bir sinüs siyal ile 7.07V luk tam DC gerilim özdeş ısıtıcılara aynı sürede uygulanırsa ikiside aynı ısı enerjisini oluştururlar.
bunun anlamı 10V luk tepe gerilimine sahip sinüsün etkin değeri yani iş yapan kısmı 7.07V tur denir.

secretagent

arkadaslar verdiğiniz cevaplar için çok saolun

secretagent

dediğinizi yaptım ama ekranda hiçbi şekilde voltu göstermiypr ortalama alınca mikroc ile yazılmış kodu ekliyeyim belki yardımcı olursunuz.

unsigned char volt;
unsigned int volt_oku;
unsigned int i;
char *text;
long tlong,sonuc;

void main() {
  INTCON = 0;                              // Tüm kesmeler iptal edildi
  Lcd_Init(&PORTB);                        // Lcd_Init PORTB LCD için hazırlandı
  LCD_Cmd(LCD_CURSOR_OFF);                 // LCD kursör kapatıldı
  LCD_Cmd(LCD_CLEAR);                      // LCD de radtgele karekter oluşmaması için silindi

    delay_ms(500);
Lcd_Out(1,6,"ASLAN");
                                           // 1.satır6. karaktere bilgi yazıldı

  ADCON1     = 0x82;                       // ADC ayarları
  TRISA      = 0xFF;                       // PORT A  giriş yapıldı
  Delay_ms(100);
  text  = "VOLT : ";                      // BLİLGİLENDİRME TEXTleri
  while (1) {

    for(i=0;i=15;i++){
    volt_oku  =volt_oku + ADC_read(2);                // ADC 2 kanal okundu

         }
    sonuc=volt_oku/16;
    LCD_Out(2,1,text);                       //     TEXT i ekrana bas

    tlong = (long)sonuc * 3000;           // okunan volt mili volta çevriliyor
    tlong = tlong / 1022;                  // Mili volt Volta çevriliyor

    volt     = tlong / 1000;                 // X.,.. değeri atanıyor
    LCD_Chr(2,8,48+volt);                    // X değeri satır 2 8. karaktarden itibaren basılıyor

    volt = (tlong / 100)%10;             // .X,.. değeri atanıyor
    LCD_Chr_CP(48+volt);                     // X değeri satır 2 de kursörün bulunduğu yerden itibaren basılıyor



    volt = (tlong / 10) % 10;             // 0.1 volts d
    LCD_Chr_CP(48+volt);                     // satır 2 de kursörün bulunduğu yerden itibaren basılıyor
     LCD_Chr_CP('.');
    volt = tlong % 10;                    // 0.01 volt
    LCD_Chr_CP(48+volt);                     // satır 2 de kursörün bulunduğu yerden itibaren basılıyor

    LCD_Chr_CP('V');                       // elde edilen sonuca V birimi ekleniyor.

    Delay_ms(100);
    }                   // döngü kararsızlıkları için 1ms bekliyor

}

secretagent

sorunumu çözdüm herkese teşekkürler

Hattusa

#11
Alıntı yapılan: RcALTIN - 22 Şubat 2011, 23:19:49
Sanırım büyükten küçüğe sıralama kısmı için evet.
http://tr.wikipedia.org/wiki/Kabarc%C4%B1k_s%C4%B1ralamas%C4%B1

arkadaşa bahsettiğim şeyin örnek kodlarınıda yazayım, tam olsun:
   //diziye öylesine 20 deger atıyorum
   int d[] = {36,1,2,4,44,7,3,7,3,9,23,43,1,24,34,23,11,72,37,15};
   int i, j, g, x = 5, toplam, ort;
   //sıralıyorum
   for (i = 0; i < sizeof(d);i++)
   {
      for(j=0; j < sizeof(d);j++)
      {
         if(d[i] > d[j])
         {
            g = d[i];
            d[i] = d[j];
            d[j] = g;
         }
      }
   }
   //başından ve sonundan x değeri kadarını yoksayıp, toplayıp ortalamalarını alıyorum
   for(i = x; i < sizeof(d) - x ; i++)
      toplam += d[i];
   ort = toplam / sizeof(d) - (x * 2);


kodları şimdi yazdım ve denemedim, diziboyutunun değişken olabileceğini düşünerek "sizeof(d)" yazdım, eğer sabitse görüldüğü yere direkt "20" yazılabilir, x değişkeni baştan ve sondan atılacak değer sayısını belirliyor...

ek: konuyu ccs c bölümünde sanıyordum, meğer basicmiş, artık mantığına bakarak uyarlarsınız...

s.a. arkadaşlar ben proton kullanıyorum, ekteki yazılım tekniği yani 20 ortalama alıp, büyükten küçüğe doğru sıralayıp, baştan ve sondaki 5 er taneyi eleyip kalanı değerlendirme şeklini bir devremde uygulamak istiyorum.
SİZDEN RİCAM;
bunu proton yazılımına göre uyarlayabilecek bir arkadaş yokmu? bu benim için önem arzediyor.
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

picmanya

#12
Alıntı yapılan: serdararikan - 22 Şubat 2011, 23:55:03
Alıntı yapılan: mucit23 - 22 Şubat 2011, 23:44:16
Arkadaşlar bu trueRMS  yönteminin matematiksel adı Harmonik ortalmamı oluyor. Burada adı geçen ortalama çeşidi aritmetik ortalama oluyor galiba. Burada RMS yöntemi ile ortalma alınsa daha iyi değilmidir.
true RMS denen şey sinyalin anlık değerlerinin karelerinin ortalamasının kareköküdür.saf sinüs sinyali için RMS değer Vppx0.707 ile hesaplanabilir.Ama sinyalin formu değiştiğinde bu formül doğru değildir.bu yüzden her sinyalin gerçek etkin değerini yani RMS değerini hesaplayan ölçüm cihazlarına true  RMS ölçüm yapıyor denir.
RMS dediğimiz şeye gelince; RMS etkin değer demektir.açıklayacak olursak 10V tepe değerine sahip bir sinüs siyal ile 7.07V luk tam DC gerilim özdeş ısıtıcılara aynı sürede uygulanırsa ikiside aynı ısı enerjisini oluştururlar.
bunun anlamı 10V luk tepe gerilimine sahip sinüsün etkin değeri yani iş yapan kısmı 7.07V tur denir.

10V tepe değerine sahip bir sinüs siyal
bu ac sinyalin frekansı nedir.
ac sinyalin frekansı farkediyormu?

birde sinyalin yalnızca 0V. ile +10V. arasında değiştiğini, salındığındığını düşünelim.
sinyal pozitif dc ama, pwm li bir dc
pwm i iş yapan=%50, iş yapmayan=%50 olarak düşünelim
işin içine orta ve yüksek frekanslar girse sonuç nasıl olur.değişirmi?

yükü yine resistans olarak düşünebiliriz.

Hattusa

s.a.
arkadaşlar malum işlemci ile çalışıpta ADC okutması yapan arkadaşlarda her ne kadar hardware filtresi uygulasa da çoklu okuma yapıp ortalama alsada stabil bir ADC değeri yakalayamıyor. (en azından ben yakalayamadım  ;D)
yukarıda örnek kod yazmış olan RcALTIN arkadaşımızın vermiş olduğu linki incelediğimizde sıralama algoritmalarının karşılaştırılması yapılmış, ben fazla birşey anlamadım. aslında RcALTIN arkadaşımızın söylediği ve örnek yazdığı bubble sort (kabarcık ortalaması) tekniğini proton ile başarabilseydim tadından yenmezdi ya, henüz kendimizi o kadar geliştiremedik. sanırım bu işe amatör girmemizden kaynaklı...
herneyse konu ile ilgili sıralama algoritmalarının karşılaştırmasını gösteren tablo ve ilgili linki ekliyorum. bu konuda fikirlerini belirtecek arkadaşlara şimdiden teşekkür ediyorum. (biliyorum uzun uzadıya tartışmalar oldu ADC ortalaması ile ilgili yani yazılımsal filtreler ile ilgili ama ben ikna olamadım, yada kafam almadı)
bu konu ile ilgili örnek kod verecek, yöntem gösterecek arkadaşlardan yardımlarını bekliyorum.
konu ile ilgili link
http://tr.wikipedia.org/wiki/S%C4%B1ralama_algoritmas%C4%B1
ve tablo
[IMG]http://img511.imageshack.us/img511/4650/semmaa.jpg[/img]

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

t2

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