Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: Maxim - 29 Mart 2022, 16:36:21

Başlık: Yavaş şekilde Analog okuma??
Gönderen: Maxim - 29 Mart 2022, 16:36:21
önce nasıl anlatabilirim onu düşünüyorum.

bir voltaj okuması yapacağız, o kolay
diyelim analog girişimize 15 volt verdik tak lcd ekranda 15.0 volt çıktı
(tabi gerekli gerilim bölücüler, kondansatörler var)

şöyle bir şeyi nasıl yaparız? algoritma nasıl olmalı?
girişe 15 volt verince ekranda 0.0 yazıyor ya, oradaki değerimiz yavaş yavaş yukarıya doğru çıksın?
mesela 0 dan 15 e gelmesi 3 saniye sürsün

yada şöyle anlatayım
ibreli voltmetre düşünün, girişine 15 volt verince ibre yavaş yavaş sağa doğru yükselsin
tak diye çıkmasın. (15 volt bir örnek elbette)


önce okuduğumuz değerleri bir yerde tutup arttırarakmı ekrana vermeli ne yapmalı?
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: Mucit23 - 29 Mart 2022, 16:40:44
Moving Average yaparsanız istediğiniz olur. Moving average boyutu ile sample hızı sizin yükseliş hızınızı belirler.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: MCansız - 29 Mart 2022, 16:47:59
Merhabalar

median filter kullanın ve fonksiyon parametrelerinde örnekleme zamanını ve örnekleme katarını yükseltin

https://github.com/binarymaker/moving-median-filter
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: mehmet - 29 Mart 2022, 17:33:24
https://kiritchatterjee.wordpress.com/2014/11/10/a-simple-digital-low-pass-filter-in-c/
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: fide - 29 Mart 2022, 18:59:06
float dizi[100];
int i;
int  sayac;
int32 sum;

for (i=0;i<100;i++)
{
   dizi[i]=0;
}

while(1)
{
i++;
if (i>=100)
{i=0;}
dizi[i]=read_adc(0);

sum=0;
for (sayac=0;sayac<100;sayac++)
{
sum+=dizi[sayac];
}
result=sum/100;

}

Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: Melih1802 - 29 Mart 2022, 21:31:10
Alıntı yapılan: Maxim - 29 Mart 2022, 16:36:21önce nasıl anlatabilirim onu düşünüyorum.

bir voltaj okuması yapacağız, o kolay
diyelim analog girişimize 15 volt verdik tak lcd ekranda 15.0 volt çıktı
(tabi gerekli gerilim bölücüler, kondansatörler var)

şöyle bir şeyi nasıl yaparız? algoritma nasıl olmalı?
girişe 15 volt verince ekranda 0.0 yazıyor ya, oradaki değerimiz yavaş yavaş yukarıya doğru çıksın?
mesela 0 dan 15 e gelmesi 3 saniye sürsün

yada şöyle anlatayım
ibreli voltmetre düşünün, girişine 15 volt verince ibre yavaş yavaş sağa doğru yükselsin
tak diye çıkmasın. (15 volt bir örnek elbette)


önce okuduğumuz değerleri bir yerde tutup arttırarakmı ekrana vermeli ne yapmalı?


ADC girişini okuması için bir TIMER koyun, her TIMER da ANALOG girişi okuyarak LCD ye yazsın.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: eti - 29 Mart 2022, 22:36:01
önce okunan değerin %80i ile sonra okunan değerin %10 unu toplayın.
oranları değiştirebilirsiniz.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: Sozuak - 30 Mart 2022, 11:35:08
2 türlü yapabilirsin. İlk olarak yazılımsal bir filtreleme şart. Sabit gerilim olsa bile okunan değer oynak olur. Ya adc bit derinliğini yüksek tutup  yüksek değerlileri alıp basamak değerini düşürürsün ya ortalama alırsın vs. 2 kademede de okunacak değeri  gerekiyorsa bir diyot üzerinden rc devresine uygularsın oradan yavaş yükselir ama düşerken de yavaş düşer.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: Erol YILMAZ - 30 Mart 2022, 11:39:46
Alıntı yapılan: eti - 29 Mart 2022, 22:36:01önce okunan değerin %80i ile sonra okunan değerin %10 unu toplayın.
oranları değiştirebilirsiniz.

bu yöntem güzel,,, fakat oranların toplamı 1 olmalı.  %80 ise diğeri %20.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: Sozuak - 30 Mart 2022, 12:07:58
Erol abi şöyle %80 ile %10 toplayıp 2 ile çarpıp beşe böleceksin. Sonuç 1947 ise 13 çıkar değilse 45 ekle  en sonunda bulduğun rakamın son iki hanesi rastgele bir sayı olur. Onu da bir yerlerde gösteririz.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: tunayk - 30 Mart 2022, 12:31:50
Alıntı yapılan: Erol YILMAZ - 30 Mart 2022, 11:39:46bu yöntem güzel,,, fakat oranların toplamı 1 olmalı.  %80 ise diğeri %20.
Bu yöntem dijital RC filtre aslında. Oran korunarak değerler 1yeni+99eski/100, 1yeni+199eski/200 gibi de kullanılabilir.
Bu filtrenin dezavantajı son değere hiç bir zaman ulaşamıyor. Örneğin sinyal 15V a ulaştığında bunun çıkışı 14.999... veya sıfıra düştüğünde 0.00011... gibi kalıyor. artış azalış küçüldükçe, bölüm sonuçları sonsuz küöülmeye doğru gidiyor.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: fahri- - 30 Mart 2022, 13:05:24
100 örnek değil de 10-20 örnekle sonuç hızlandırılabilir.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: Epsilon - 30 Mart 2022, 13:35:17
Ekrana yazdırılacak sonuç voltajı bir procedure içinde örneğin 5,4,3 ve 2 ye böldürüp herbirini en küçük değerden başlayıp örneğin 0,5 saniye gösterilip sonra sonuç prosedurüne gönderilir

Tabiki bu arada sırada ölçüm yapmak gibi bir uygulama için uygun olur herhalde.Eğer sistemde devamlı düşük değerden yukarıya çıkan voltajı gösterecekse pek anlamlı olmayabilir.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: Andromeda - 30 Mart 2022, 14:22:53
..gelen voltaj nasıl değişip geliyor bilmiyorum ama,
diyelim 15 volt geldi ve okundu..sonra 0 dan 15 kadar olan sayıları sırayla ekranda yazsak..
sonra tekrar okunsa..
soruyu anlamadım mı yoksa..?
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: Maxim - 05 Nisan 2022, 08:59:15
Beyler, hepinize ayrı ayrı teşekkür ediyorum.
yazdıklarınızın tamamını harfi harfine not aldım
üzerinde çalışıyorum

genelde moving filter tavsiye edildi
araştırmalarım sonrasında median filter sanki 1 tık daha iyi gibi duruyor
şu an hangi yöntem daha uygun belli değil
sağolun
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: MCansız - 05 Nisan 2022, 11:47:43
Alıntı yapılan: Maxim - 05 Nisan 2022, 08:59:15Beyler, hepinize ayrı ayrı teşekkür ediyorum.
yazdıklarınızın tamamını harfi harfine not aldım
üzerinde çalışıyorum

genelde moving filter tavsiye edildi
araştırmalarım sonrasında median filter sanki 1 tık daha iyi gibi duruyor
şu an hangi yöntem daha uygun belli değil
sağolun

merhabalar
Filtreler için parametreler aynı olduğunu varsayarsak. Eğer okumalarda istenmeyen değişimler oluyorsa (adc vb.) moving median filtre kullanarak okumayı stabilleştirir ama değişimler yavaş artmaz hızlı yansır. Moving Average filtre kullanırsanız değişimler yavaş yansır ama istenmeyen değişimlerden etkilenecektir.

Eger hatta parazit durumu olmuyor ise direk Moving Average filtresi kullanılabilinir. Parazit durumlarından kurtulmak için önce moving median filtresi sonra Moving Average filtresi kullanılabilinir.
Başlık: Ynt: Yavaş şekilde Analog okuma??
Gönderen: eelkin - 05 Nisan 2022, 22:24:58
Merhaba, internetten hazır bir kod sanırım bu işini görür.

Alıntı Yapgirişe 15 volt verince ekranda 0.0 yazıyor ya, oradaki değerimiz yavaş yavaş yukarıya doğru çıksın?
mesela 0 dan 15 e gelmesi 3 saniye sürsün

numReadings değişkeninin değerini arttırdıkça gereçek değere yaklaşma süresi uzar. Değer arttıkça denetleyici içindeki kaynak kullanımıda artacaktır. Dilersen araya beklemede koyabilirsin.

const int numReadings = 10;

int readings[numReadings];     
int readIndex = 0;             
int total = 0;                 
int average = 0;               

int inputPin = A0;

void setup() {
  // initialize serial communication with computer:
  Serial.begin(9600);
  // initialize all the readings to 0:
  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
  }
}

void loop() {
  // subtract the last reading:
  total = total - readings[readIndex];
  // read from the sensor:
  readings[readIndex] = analogRead(inputPin);
  // add the reading to the total:
  total = total + readings[readIndex];
  // advance to the next position in the array:
  readIndex = readIndex + 1;

  // if we're at the end of the array...
  if (readIndex >= numReadings) {
    // ...wrap around to the beginning:
    readIndex = 0;
  }

  // calculate the average:
  average = total / numReadings;
  // send it to the computer as ASCII digits
  Serial.println(average);
  delay(1);        // delay in between reads for stability
}