Arama butonu
Bu konudaki kullanıcılar: 1 misafir
7
Cevap
227
Tıklama
0
Öne Çıkarma
ekrana gelen verilerin ortalaması
Y
4 yıl
Er
Konu Sahibi

Arkadaşlar iyi çalışmalar öncelikle.Elimde bir sensör var lcd ye bağlı.Sensörden gelen verileri lcd ekrana veriyorum. Ama gelen veriler sabit değil.örneğin gelen ilk 5-10 verinin ortalamasını nasıl alabilirim



L
4 yıl
Yüzbaşı

Gelen verilerin istediklerinizi bir değişkende tutacaksınız daha sonra değişkenleri toplayıp 2 ye böleceksiniz.



R
4 yıl
Binbaşı

Yazdığınız kodları paylaşırsanız çözümler önerilebilir diğer türlü alacağınzı cevap;
10 tane değeri toplayın sonra 10'a bölün çıkan sonuç istediğiniz ortalama değer olacaktır.



Y
4 yıl
Er
Konu Sahibi

ccs c ile yazdım. ilk kod bu



#include <16f877A.h>
#device ADC=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(crystal=8MHz)
#use I2C(master, sda=PIN_d0, scl=PIN_d1, slow) //i2c ayarlari yapılıyor.


#define LCD_RS_PIN PIN_B4
#define LCD_RW_PIN PIN_B5
#define LCD_ENABLE_PIN PIN_B6
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#define LCD_DATA_PORT getenv("SFR:PORTD")
#include "MPU6050.C"
#include <lcd.c>
#include <math.h>


signed int8 A_data[6];
signed int8 temp_data[2];
signed int8 G_data[6];
signed int16 Xa=0,Ya=0,Za=0;
signed int16 temp=0;
signed int16 Xg=0,Yg=0,Zg=0;

void main()
{

set_tris_a(0x00); //(0b00000000);
delay_ms(2);
lcd_init();

printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"BUHARI");
lcd_gotoxy(1,2);
printf(lcd_putc,"ELEKTRONIK");
delay_ms(100);
mpu6050_init();
delay_ms(100);
printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"MPU6050 Ivme");
lcd_gotoxy(1,2);
printf(lcd_putc,"Sensoru");

printf(lcd_putc,"\f");

while(TRUE)
{
output_toggle(pin_a0);
signed int16 acc1,acc2,acc3;

A_data[0]=mpu6050_read(0x43);//(0x3B); //X eksen(LSB) ilk byte okunuyor
A_data[1]=mpu6050_read(0x44); //X eksen(MSB) son biti okunuyor
A_data[2]=mpu6050_read(0x45); //Y eksen(LSB) ilk biti okunuyor
A_data[3]=mpu6050_read(0x46); //Y eksen(MSB) son biti okunuyor
A_data[4]=mpu6050_read(0x47); //Z eksen(LSB) ilk biti okunuyor
A_data[5]=mpu6050_read(0x48); //Z eksen(MSB) son biti okunuyor

acc1=make16(A_data[0],A_data[1]);
acc2=make16(A_data[2],A_data[3]);
acc3=make16(A_data[4],A_data[5]);

printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"xa%d",A_data[0]);

lcd_gotoxy(9,1);
printf(lcd_putc,"xb%d",A_data[1]);

lcd_gotoxy(1,2);
printf(lcd_putc,"ya%d",A_data[2]);

lcd_gotoxy(9,2);
printf(lcd_putc,"yb%d",A_data[3]);

delay_ms(300);
}
}



R
4 yıl
Binbaşı

Aşağıdaki örneğe benzer bir mantık işinizi görecektir.

#define ORTALAMA_ADET 10 ile ortalama almak istediğiniz değeri seçin.
sonuçlar
ortalama_a1_sonuc
ortalama_a2_sonuc
ortalama_a3_sonuc

içerisine aktarılır, sizde bu değeri LCD de görüntüleyebilirsiniz. Kısa açıklamalar zaten kod içerisinde yapıldı. Syntax hataları olabilir belki, kodları derleme imkanım olmadı.






#include <16f877A.h>
#device ADC=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(crystal=8MHz)
#use I2C(master, sda=PIN_d0, scl=PIN_d1, slow) //i2c ayarlari yapılıyor.


#define LCD_RS_PIN PIN_B4
#define LCD_RW_PIN PIN_B5
#define LCD_ENABLE_PIN PIN_B6
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#define LCD_DATA_PORT getenv("SFR:PORTD")
#include "MPU6050.C"
#include <lcd.c>
#include <math.h>


signed int8 A_data[6];
signed int8 temp_data[2];
signed int8 G_data[6];
signed int16 Xa=0,Ya=0,Za=0;
signed int16 temp=0;
signed int16 Xg=0,Yg=0,Zg=0;

#define ORTALAMA_ADET 10
int ortalama_index = 0;

float ortalama_a1 = 0;
float ortalama_a2 = 0;
float ortalama_a3 = 0;

float ortalama_a1_sonuc = 0;
float ortalama_a2_sonuc = 0;
float ortalama_a3_sonuc = 0;

void main()
{




set_tris_a(0x00); //(0b00000000);
delay_ms(2);
lcd_init();

printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"BUHARI");
lcd_gotoxy(1,2);
printf(lcd_putc,"ELEKTRONIK");
delay_ms(100);
mpu6050_init();
delay_ms(100);
printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"MPU6050 Ivme");
lcd_gotoxy(1,2);
printf(lcd_putc,"Sensoru");

printf(lcd_putc,"\f");

while(TRUE)
{
output_toggle(pin_a0);
signed int16 acc1,acc2,acc3;

A_data[0]=mpu6050_read(0x43);//(0x3B); //X eksen(LSB) ilk byte okunuyor
A_data[1]=mpu6050_read(0x44); //X eksen(MSB) son biti okunuyor
A_data[2]=mpu6050_read(0x45); //Y eksen(LSB) ilk biti okunuyor
A_data[3]=mpu6050_read(0x46); //Y eksen(MSB) son biti okunuyor
A_data[4]=mpu6050_read(0x47); //Z eksen(LSB) ilk biti okunuyor
A_data[5]=mpu6050_read(0x48); //Z eksen(MSB) son biti okunuyor

acc1=make16(A_data[0],A_data[1]);
acc2=make16(A_data[2],A_data[3]);
acc3=make16(A_data[4],A_data[5]);

if (ortalama_index < ORTALAMA_ADET)
{
// Ortalama adet kadar değeri topla
ortalama_a1 += (float)acc1;
ortalama_a2 += (float)acc2;
ortalama_a3 += (float)acc3;
ortalama_index++;
}
else
{
// ortalama alınacak değere ulaşıldı.
// ortalamayı hesapla

ortalama_a1_sonuc = ortalama_a1 / (float)ORTALAMA_ADET;
ortalama_a2_sonuc = ortalama_a2 / (float)ORTALAMA_ADET;
ortalama_a3_sonuc = ortalama_a3 / (float)ORTALAMA_ADET;

// bir sonraki ölçüm için değişkenleri sıfırla
ortalama_a1 = 0;
ortalama_a2 = 0;
ortalama_a3 = 0;

ortalama_index = 0;

}

printf(lcd_putc,"\f");
lcd_gotoxy(1,1);
printf(lcd_putc,"xa%d",A_data[0]);

//-------------
// lcd yazma örneği lcd de hangi koordinata yazılacağını belirleyiniz.

lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a1 %f",ortalama_a1_sonuc;
lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a2 %f",ortalama_a2_sonuc;
lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a3 %f",ortalama_a3_sonuc;
//-------------
lcd_gotoxy(9,1);
printf(lcd_putc,"xb%d",A_data[1]);

lcd_gotoxy(1,2);
printf(lcd_putc,"ya%d",A_data[2]);

lcd_gotoxy(9,2);
printf(lcd_putc,"yb%d",A_data[3]);

delay_ms(300);
}
}





< Bu mesaj bu kişi tarafından değiştirildi rafet32 -- 18 Mart 2020; 14:1:32 >
Bu mesaja 1 cevap geldi.
Y
4 yıl
Er
Konu Sahibi

Rafet Bey dediğinizi deneyeceğim şu anda malzemeler yanımda değil. Kısa zamanda dönüş yaparım. Teşekkürler



Y
4 yıl
Er
Konu Sahibi

< Resime gitmek için tıklayın >


bu şekilde bir hata aldım. yazdığınız kodu erleyince


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @rafet32
R
4 yıl
Binbaşı

Üç satırın sonudanda parantez eksiği var. " );" Tırnaklar olmadan satır sonlarına bunları ekleyin.
Not: 3 değeride lcd_gotoxy(1,1) ile belirtilen komumunda üst üste yazacak, sizin lcd yerleşiminize bu kısmı düzenlemeniz gerekecek.


//-------------
// lcd yazma örneği lcd de hangi koordinata yazılacağını belirleyiniz.

lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a1 %f",ortalama_a1_sonuc);
lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a2 %f",ortalama_a2_sonuc);
lcd_gotoxy(1,1); printf(lcd_putc,"ortalama a3 %f",ortalama_a3_sonuc);
//-------------





< Bu mesaj bu kişi tarafından değiştirildi rafet32 -- 25 Mart 2020; 19:9:35 >


Bu mesajda bahsedilenler: @Yarım_Mühendis
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.