LÜTFEN YARDIM EDİN 16F877 GLCD(GRAFİK EKRAN SİNÜS DALGASI ÇİZMEK)

Başlatan husam685, 18 Aralık 2011, 18:18:44

husam685

arkadaşlar girişe uygulanan anolog sinyal dijitale çevrildikten sonra grafik lcd de nasıl sinüs dalgası olarak gösterebilirim. yani girişe sinül dalgası oluşturacam A/D cevirme işlemini yapıp PIC 16F877 anlayacagı dijital bilgiye çeviriyorum ama bu bilgileri sinüs olarak nasıl grafik lcd de gösterebilirim bi nevi ekrana sinüs dalgası çizdirtecem lütfen yardım edin


husam685

slm kardes bana basit şekilde anlatırmısın verdiğin linklere baktım ama birsey anlamadım PIC16F877 AN1 ucuna analog giriş veriyorum daha sonra bunu dijitale çeviriyorum buraya kadar tamam ama grafik lcd de bu alınan değerleri nasıl sinüs dalgasına çevirebilirim.

Kabil ATICI

Değeri ölçün. Şimdi senin bir ölçeğin var. Ekranın 64 piksel yüksekliğinde ise girişin 0-5V aralığını  0-64 piksele denk gelecek şekilde ölçekliyorsun. Buna göre senin 2.5V  32. piksele den gelir.  Ama sorun şu buda grafik lcd'de ekran veri gönderimi nedeniyle 64 piksellik yükseklik 8 piksellik bölümlere ayrılmıştır. En basitinden gerilimini hangi aralığa denk geldiğini bulursun sonra bu gerilime denk gelen bit'e. Çözünürlüğün 5V/64

Ama burada ekrana doğrudan göndermek yerine önce işlemcinin ram bölgesinde ekrana göndermek istediğin görüntüyü oluşturur ve bunu ekrana gönderirsin.


ambar7

pisayisi

giriş analog ve sinus şeklinde bir işaret ise bunu çıkışta sinus olarak çizdirebilirsiniz. yani sabit bir analog işaretin çıkışı da düz çizgi olacaktır. Burda analog işaretin örnekleme zamanllarını bir matrist te data olarak kayıt ederek yeterli veri alındıktan sonra mesela 128x 64 pixel lcd için 64 örnek bir geçici matrise kayıt edilir. Sonra bu data yı adc işleminden bağımsız olarak point point çizdirirsiniz. lcd de nokta basmak pozisyon renk ayarlamak gibi özellikleri yapabildiğinizi varsayıyorum.
Murat

husam685

yapamadım kafayı yiyecem ne olur basit şekilde sanki glcd ile ilgili sadece yazı yazma bar cizme gibi include dosyalarındakilerini biliyormusum gibi anlatın yorum atan yardım eden arkadaşlara çok teşekkür ederim ama hala yapamadım :(

Klein

Sana bir tablo versem ,  bu tabloda  hangi sütunda hangi satıra nokta basacağın belli olsa bunu çizebilir misin?

Eğer çizersen, analog sinyali nasıl ekrana basacağını konuşalım. Eğer çizemiyorsan, konu grafik ekranı nasıl kullanırım konusu olur.

aşağıdaki linkte excell dosyası var. bu dosyanın 'A' sütunu grafik LCD nin sütunlarını , 'F' sütunu da   ilgili sütunun hangi satırına nokta basacağını gösteriyor.
Yandaki grafik de , bu tabloyu LCD'de gösterdiğinde ne görmen gerektiğini gösteriyor.
Bunu bir bas LCD'ye ondan sonra konuşalım.

http://hotfile.com/dl/137930307/c84337a/sinus.xls.html

-Hasan-

Merhaba;

GLCD ' de istediğiniz pixeli açıp kapatabiliyorsanız olay %50 çözüldü demektir. Gerisi hesap zaten. Ayrıca aşağıdaki başlığı incelerseniz çok iyi olur:

https://www.picproje.org/index.php/topic,35074.0.html

husam685

arkadaşlar dediğinizi yaptım tabloyu basmaya çalıştım ve grafik lcd ekranın . . . . . . böyle gidiş var, olmadı galiba komutlar.


#include <HDM64GS12.c>
#include <graphics.c>
int x=0;
int y;
int bilgi;
const  int digit[1024]={32,
34,37,40,42,45,48,50,52,54,56,58,59,61,62,62,63,63,64,63,63,62,62,61,59,58,56,54,52,50,48,45,42,40,37,34,
32,29,26,23,21,18,16,13,11,9,7,5,4,2,1,1,0,0,0,0,0,1,1,2,4,5,7,9,11,13,16,18,21,23,26,29,32,34,37,40,42,45,
48,50,52,54,56,58,59,61,62,62,63,63,64,63,63,62,62,61,59,58,56,54,52,50,48,45,42,40,37,34,32,29,26,23,21,18,16,13,11,
9,7,5,4,2,1,1,0,0,0};
#int_AD
void  AD_isr(void)
{
output_high(pin_b6);
delay_ms(250);
output_low(pin_b6);
}
void main()
{
setup_adc(adc_clock_div_32);
setup_adc_ports(ALL_ANALOG);
enable_interrupts(INT_AD);
enable_interrupts(GLOBAL);

glcd_init(ON);

while(true)
{
set_adc_channel(1);
delay_us(20);
bilgi=read_adc();
for(x=0;x<127;x++)
{
x++;
digit[y]++;
glcd_pixel(x,digit[y],ON);
delay_ms(250);
}


}

}




husam685

arkadaşlar yardımlarınız için çok teşekkürler ama bir türlü yapamadım yapmak istedgimi resimdeki gibi girişe uygulanan anolog girişi çıkışta sinüs dalgası gibi göstermek lütfen yardım edin şimdiden herkese teşekkürler

pisayisi

yazılan programda digit vektörü 128 nokta tanımlanmış siz bu data vektörü çizdiriyorsunuz. yeteri kadar örnek olmadığı için kopuk bir sinus işareti görünmekte. üstelik bu grafikle analog giriş arasında hiç bir bağlantı yok. tanımlanmış vektörü mü çizdirmek tek amaç .Bu durumda digit vektörünü 1024 nokta için tanımlatın matlabde hesaplatılabilir. çözünürlük artacağı için grafikteki kopukluk ortadan kalkacak. ancak projenizin analog girişle bir ilgisi kalmamış gibi görünüyor...
Murat

Pir-O

while(true)
{

    for(x=0;x<127;x++){
        glcd_pixel(x,digit[x],ON);
        delay_ms(100);
    }
}


şu şekilde dizideki verilere göre sinüs dalgası çizdirirsin. Eğer ADC'den veri okuyup çizdirmek istiyorsan farklı bir algoritma kullanmalısın. örneğin:

const  int dizi[128];
while(1)
{
    for(i=0;i<=127;i++){
        set_adc_channel(1);
        delay_us(20);
        dizi[i]=read_adc()/4;
    }    

    for(x=0;x<127;x++){
        glcd_pixel(x,digit[x],ON);
        delay_ms(100);
    }
}

husam685

kardes dediğin gibi yaptım zaten x degeri otomatikmen sıfırdan 126-127 ye kadar cıkıyor ama diger y dizi yani kordinat ise hiç gelmio senin verdiğin iki şeklide denedim ama grafik lcd de hiç birşey göremedim
kodlarımı aşağıya yazıom lütfen ilgilenirsen sevinirim.
#include <HDM64GS12.c>
#include <graphics.c>
int i,x;
const  int digit[128]={32,
34,37,40,42,45,48,50,52,54,56,58,59,61,62,62,63,63,64,63,63,62,62,61,59,58,56,54,52,50,48,45,42,40,37,34,
32,29,26,23,21,18,16,13,11,9,7,5,4,2,1,1,0,0,0,0,0,1,1,2,4,5,7,9,11,13,16,18,21,23,26,29,32,34,37,40,42,45,
48,50,52,54,56,58,59,61,62,62,63,63,64,63,63,62,62,61,59,58,56,54,52,50,48,45,42,40,37,34,32,29,26,23,21,18,16,13,11,
9,7,5,4,2,1,1,0,0,0};

#INT_AD
void ADC_kesmesi()
{
output_high(pin_b6);
delay_ms(250);
output_low(pin_b6);


}

void main()
{
setup_adc(adc_clock_div_32);
setup_adc_ports(ALL_ANALOG);
enable_interrupts(INT_AD);
enable_interrupts(GLOBAL);
glcd_init(ON);

while(true)
{

    for(x=0;x<127;x++){
        glcd_pixel(x,digit
  • ,ON);
            delay_ms(100);
        }
    }
    }

    burda digit
  • degeri benim tanımladıgım dosya ama yine lcd de hiç birsey göremiyorum kafam durdu resmen

fahri-

adc den önce lcd ye 1 adet nokta yazdır. noktanın yerini değiştir. düz bir çizgi çizdir. daha sonra sinüs çizdirmeye çalış.

Pir-O

Algoritmada bir problem yok düzgün çalışıyor. sinüs de düzgün bir şekilde çiziliyor. Devreyi çizdim programı yazdım gerisi sana kalmış artık.

https://rapidshare.com/files/2140009488/Glcd_Sinus.rar