Toplam 6 adet sonuctan sayfa basi 1 ile 6 arasi kadar sonuc gösteriliyor
  1. #1
    forum üyesi
    Üyelik tarihi
    Mayıs.2007
    Nereden
    istanbul
    Mesajlar
    46

    Standart CCS _UYGULAMALARI akım gerilim frekans degerlerini pc ile haberleştirerek pc den görm

    SELAM @arkadaşlar
    bir tane calışma yaptım umarım yeni arkadaşlara faydalı olur

    PROJE 3 fazlı A.C gerilimin ölcülmesi 1V-2V-3V akımın ölcülmesi I1-I2-I3 , motordaki sıcaklık bilgisini ve frekansı(max-250 hz) bilgisayara istege(basılan tuşa) göre göndemek birebir sehir şebekelrine uygulayabilecegim uygunluk ta gibi (daha uygulamadım!)

    volt kısmını ve frekans kısmını hallettim fakat akım ve sıcaklık sensörleri(yapımcıdan yapımcıya) farklılık gösterecegi için bu kısmı siz uyarlayın (unutmayın yazılımda refarans deger +5 v dur donanımın cıkışını buna göre uayrlayın max degeri +5 verebilcek sekilde ) sonra yazılım algoritmasında gerekli yerlere formulleri yazarak saglam ölçümler yapabilrsiniz gerekli yerleri yazılımda acıklayacagım )

    yazılım algoritmasını kabaca acıklayım klavyeden basılan tuşun ascı karsılıgı pice gönderilir bu kodu alıp bir switch( ) case; komutuyla istedigimiz işlemi yaptırması

    a=getc(); //klavyeden basılan tuşun ascı degerini al " a" degişkenine yükle
    switch(a) // a degeri neyse asagıdaki esit olan case komutunu calıştır
    {
    case 65:
    {
    set_adc_channel(0); // pin a0 daki analog girişi aktif et
    delay_us(20);
    c=read_adc(); // anolog degerin 10 bit cözünürlükteki degerini al
    // okudugumuz bu "c" degerini donanımın özelligine bakarak gerekli formule sokup pc gönderiyoruz
    c=c*100; //gerekli formulum gerilim için
    c=c/256;
    printf("\f\n\r1v=%3.2f" ,c); pc ye 32 bitlik ondalıklı olarak gönder
    }

    her bölüm bu şekilde oluşmaktır siz gerekli pc den gelen veriye göre gerekli AN (anolg girişi a0-a1-a2-a3-a4-a5-a6-a7) aktif edeerk degeri okuyup tekrar pc göndermek

    FORMUL sanırım kafanızı karıştırdı
    programda belirttigimiz gibi adc=10 bit cözünürlükte

    #device ADC=10

    refarans degerimiz +5 v olduguna göre benimde hattan maxumum 400 v ölcecegimi var sayarsak(direk fazı pice baglamıyoruz tabi :roll: ilk önce dogrultup saglam bi dogrultmacla sonra geilim bölücü dirençlerde maximum 400 v da 5 v verecek devreyi yapıyoruz))) maximum +5 degerini aldıgında adc degeri 1024 olucaktır ki bizimde maximum ölcme degerimiz 400v olark ayarlandı
    1024/400=2.56 yani adc okudugum degeri 2.56 ya bölücem
    formulle nasıl yaparız
    c=c*100;
    c=c/256;
    tamamen gördügünüz gibi donaımsal faktörlere göre formul yazıyoruz

    YORULDUM biraz dinlenebilirmiyim :roll: :roll:

    yazılımda diceksiniz bu neyi okuyor altta;
    case 75:
    {
    m=input_d();
    printf("\f\n\rfs=%3.2f" ,m);
    break;
    }
    arkadaşlar burdada bir tane pic 16f628 i frekans ölcmek için kullandım ve port b sini parelel olarak direk 16f877 port d sine bagladım veriyi bu sekilde okuyorum :cry: :cry: biliyorum hambalca ama siz bildiginiz veri alma yolalrını shift_right,left gibi bu komutları kullanarak daha az pinle işi götürüsünüz


    ASCI KOD;
    basında da bahsettigimiz gibi her tuşun ascı kodunu pice yolluyoruz benim yazılımda kullandıgım harflerin ve bir kısmın ascı kodlarını vericem siz uygulmayı genişletmek isterseniz kullanırsınız

    kullandıklarımın yanına // koyup acıklama yapıcam

    ALT+065 Karakteri ==> ( A ) // 1v degeri
    ALT+066 Karakteri ==> ( B )
    ALT+067 Karakteri ==> ( C )
    ALT+068 Karakteri ==> ( D ) //3v degeri
    ALT+069 Karakteri ==> ( E )
    ALT+070 Karakteri ==> ( F ) //1.akım degeri
    ALT+071 Karakteri ==> ( G ) //2.akım degeri
    ALT+072 Karakteri ==> ( H ) //3.akım degeri
    ALT+073 Karakteri ==> ( I )
    ALT+074 Karakteri ==> ( J ) // sıcaklık
    ALT+075 Karakteri ==> ( K ) // frekans
    ALT+076 Karakteri ==> ( L ) // reklam case 76 dan sonrasını silebilirsin ama uygulama için güzel biyazım bakamsızı tavsiye ederim
    ALT+077 Karakteri ==> ( M )
    ALT+078 Karakteri ==> ( N )
    ALT+079 Karakteri ==> ( O )
    ALT+080 Karakteri ==> ( P )
    ALT+081 Karakteri ==> ( Q )
    ALT+082 Karakteri ==> ( R )
    ALT+083 Karakteri ==> ( S ) // 2.ci volt degeri
    ALT+084 Karakteri ==> ( T )
    ALT+085 Karakteri ==> ( U )
    ALT+086 Karakteri ==> ( V )
    ALT+087 Karakteri ==> ( W )
    ALT+088 Karakteri ==> ( X )
    ALT+089 Karakteri ==> ( Y )
    ALT+090 Karakteri ==> ( Z )

    rasgele harf secmedim tabi klavyede bakarsanız A,S,D,F,G,H,J,K,L yan yanadır zorluk cekmessiniz


    GELELİM YAZILIMA;

    yukaridaki acıklamadan sonra herşey kabak gibi ordada :roll:


    #include<16f877.h>
    #device ADC=10
    #use delay(clock=4000000)
    #use fast_io(b)
    #use fast_io(d)
    #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
    long b,d;
    int a;
    float c,e,f,g,h,i,o,m;
    void main()
    {
    set_tris_b(0xff);
    set_tris_d(0xff);
    setup_adc_ports(ALL_ANALOG);
    setup_adc(adc_clock_div_2);
    output_b(0x00);
    set_adc_channel(0);
    delay_us(20);
    while(1)

    {
    a=getc();
    switch(a)
    {
    case 65:
    {
    set_adc_channel(0);
    delay_us(20);
    c=read_adc();
    c=c*100;
    c=c/256;
    printf("\f\n\r1v=%3.2f" ,c);
    break;
    }
    case 83:
    {
    set_adc_channel(1);
    delay_us(20);
    e=read_adc();
    e=e*100;
    e=e/256;
    printf("\f\n\r2v=%3.2f" ,e);
    break;
    }
    case 68:
    {
    set_adc_channel(2);
    delay_us(20);
    f=read_adc();
    f=f*100;
    f=f/256;
    printf("\f\n\r3v=%3.2f" ,f);
    break;
    }
    case 70:
    {


    set_adc_channel(3);
    delay_us(20);
    g=read_adc();
    g=g*100;
    g=g/256;
    printf("\f\n\rI1=%3.2f" ,g);
    break;
    }
    case 71:
    {


    set_adc_channel(4);
    delay_us(20);
    h=read_adc();
    h=h*100;
    h=h/256;
    printf("\f\n\rI2=%3.2f" ,h);
    break;
    }

    case 72:
    {


    set_adc_channel(5);
    delay_us(20);
    i=read_adc();
    i=i*100;
    i=i/256;
    printf("\f\n\rI3=%3.2f" ,i);
    break;
    }
    case 74:
    {


    set_adc_channel(6);
    delay_us(20);
    o=read_adc();
    o=o*100;
    o=o/256;
    printf("\f\n\rsicaklik=%3.2f" ,o);
    break;
    }
    case 75:
    {
    m=input_d();
    printf("\f\n\rfs=%3.2f" ,m);
    break;
    }
    case 76:
    {
    //yazım calışmasıdır silebilirsiniz


    printf("\f\n\r ***********************************");
    delay_ms(20);
    printf("\n\r * hazİrlayan=MICROCELL *");
    delay_ms(20);
    printf("\n\r * AKDENIZ UNIVERSTY *");
    delay_ms(20);
    printf("\n\r * ELEKTRONIK HABERLESME *");
    delay_ms(20);
    printf("\n\r *İLETİSİM =mursel_58@hotmail.com *");
    delay_ms(20);
    printf("\n\r *******NEOBİL KATKILARIYLA*********");
    delay_ms(30);
    printf(" \n\r1V=%3.2f" ,c);
    delay_ms(30);
    printf("\ 2V=%3.2f" ,e);
    delay_ms(30);
    printf("\ 3v=%3.2f" ,f);
    delay_ms(30);
    printf("\n\rI1=%3.2f" ,g);
    delay_ms(30);
    printf("\ I2=%3.2f" ,h);
    delay_ms(30);
    printf("\ I3=%3.2f" ,i);
    delay_ms(30);
    printf("\n\rsİcaklİk=%3.2f" ,o);
    delay_ms(30);
    printf("\ Hz=%3.2f" ,m);
    delay_ms(30);




    break;
    }
    }
    }
    }


    16 F628 İÇİN YAZILIM
    herzamnki gibi acıklama
    tabiki donanımsız olmassa olmuyor yaptıgımız devre sehir sebekesine uygun oldugu iiçin 0-250HZ sınır koymamız uygun olacaktır
    sebeke gerilimini dogrultmadan gerilim bölücü direnclerde ve bir diyotla (--)ternansını kaldırıp sadece (+) alternansı alıp sanideki sayısına bakarak frekansı bulmuş olucez ve port b ye bu degeri atıyacagız

    gerkli timer taşması için presacaler ve önbölücü degeri
    ön bölücü=2 kendi bölücüsü=256 ve timer taşma degeri =1953
    2x256x1940

    #include<16f628.h>
    #use delay(clock=4000000)
    float a;
    int c;
    #use fast_io(a)
    #use fast_io(b)
    #int_timer0
    void kesme (void)
    {
    a=a+1;
    if(a>=1953) // toplam 1 sn için taşma sayısı
    {
    output_b(c);
    c=0;
    a=0;
    }
    }
    main()
    {
    setup_timer_0(rtcc_internal|rtcc_div_2);//2*256=512us her kesme süresi
    enable_interrupts(INT_TIMER0);
    enable_interrupts(GLOBAL);
    output_b(0xff);
    while(1)
    {
    while(input(pin_a0)); // her yeni alternans gelmesi
    while(!input(pin_a0));
    c=c+1; //her alternansta 1 artır
    }
    }

    the END
    umarım yararlı bişeyler olmuştur biraz geniş ve derinlemesi girdim sayfayıda baya işgal ettim kusura bakmayın saygılar alttaki linktede proteusta simulasyon ile dogrulanamsı ve kodlar SELAMETLE /A.E.O
    http://dosya.cc/M_CROCELL.rar.html
    NOT : EKSİKLERİMİ VE GELİŞTİRMEK İÇİN BİLGİ VE DÜŞÜNCELERİNİZİ belirtiniz
    belirttigim gibi sadece gerilim ve frekans uygulamsı yapılmıştır akımı lem akım sensörleriyle gerilime cevirip pice uayrlayabilirsiniz
    veÜSTATLAR rs485 ile birden fazla pici kontrol etmek gibi uygulamalarınızı mümkünse aktarabilirmisin uygulama olarak
    Konu MURSEL tarafından (21.Haziran.2007 Saat 07:09 ) değiştirilmiştir.

  2. #2
    forum üyesi
    Üyelik tarihi
    Mayıs.2007
    Nereden
    istanbul
    Mesajlar
    46

    Standart int_rda interrubu ve int ext int ikisini nasıl kallanırız

    Kod:
    CCS de seri portla ilgili bazı işlemler yapmak istiyorum. Bu yüzden kabaca bir devre oluşturup aşağıdaki gibi bir deneme kodu yazdım. Kodda şunu istiyorum; Normal bir şekilde ledler yanıp sönerken, int_ext ile dışardan bir kesme geldiğinde ledler daha hızlı yanıp sönsün. ve pc ye Ihlal var alarmi durdurmak ici A'ya basin  bilgisini göndersinVe bu durum seri porttan bir karakter (mesela 'A') gelene kadar devam etsin. Yani int_ext kesme rutini int_rda kesmesi ile bir nevi iptal edilsin ve pic resetlensin istiyorum. Ama yazdığım kodda bir türlü seri porttan veri gelmiyo gibi. Yani int_rda rutini hiç çalışmıyor. Bu konularda daha yeniyim işin içinden çıkamadım yardımcı olursanız sevinirim..
    arkadaşımızın böle bi sorunu vardı cevabımı sizlerle paylaşmak istedim sade ve acık uygulama olarak cevab umarım işinizi görür






    Kod:
    #include <16F628.h> 
    #use delay(clock=4000000) 
    #fuses XT, NOWDT, NOPROTECT, PUT 
    #use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1) 
    long x=250;
    
    /////////////////////////////////////////////////////////////////////7
    #use fast_io(b) 
    #int_EXT 
    void ihlal() { 
    
     printf("\fIhlal var alarmi durdurmak ici A'ya basin"); 
      
    x=50;    // normal seviyenin 4 kat hızlı   
    }
    ////////////////////////////////////////////////////////////////7
    #int_rda 
    void durdur(void) 
    { 
    int c; 
    c = getc();
    while(1)
    {
    if(c==65)   // A karekterine basıncaya kadar   yavaşlamaz
       {
    x=250; // normal  seviyeye ayarla
    break;   //ve while döngüsnden cık  cıkmassa ben gelir cıkartırım
       }
     break;  // farklı bi tusa basarsada cık 
    }
    } 
      ////////////////////////////////////////////////////////////////
    void main(void) { 
    
         ext_int_edge( L_TO_H ); 
         enable_interrupts(INT_EXT); 
         enable_interrupts(INT_RDA); 
         enable_interrupts(global); 
                                      //programın başında kesmeler aktif edilmeli 
    
        
         SET_TRIS_B(0x03);  //1234 çıkış 567 giriş 0 kesme_girişi 
         output_B(0x00); 
          
             do{ 
              
             output_high(PIN_B3); 
             delay_ms(x); 
             output_low(PIN_B3); 
             delay_ms(x); 
              
         }while(1); 
    }
    alın uygulamasıda
    http://dosya.cc/microcelll.rar.html

    NOT SAYIN ADMİN bölümlere ayırma fikrini sorucaktım

  3. #3
    forum üyesi
    Üyelik tarihi
    Mayıs.2007
    Nereden
    istanbul
    Mesajlar
    46

    Standart Ce: CCS _UYGULAMALARI akım gerilim frekans uygulamsı ve genel donanımsa l anlatım

    merhaba arkadaşlar inturupts içinde yeni bir intrupt izin vererek diger interrupt ları kullnama şansımız oluyor yukarıdaki konuyla bagıntılı olarak

    örnek
    Kod:
    #int_EXT 
    void xxx() 
    { enable_interrupts(GLOBAL);
    tüm kesmeler izin ver bu şekilde diger intruplara izin vermiş oluyoruz  
    
    x=x+5
    delay_ms(1000);
    }
    bu komutumuzun koymamızın nedeni int geldiginde GIO biti 0 oluyor ver ikinic bir int gelmesi engellenmiş oluyor
    selametle

  4. #4
    ***Site Kurucusu***
    Üyelik tarihi
    Mart.2007
    Nereden
    Mersin
    Mesajlar
    545

    Standart Ce: CCS _UYGULAMALARI akım gerilim frekans uygulamsı ve genel donanımsa l anlatım

    mursel foruma yazdıklarını sen profahmet beye özel mail atarsan o gereğini yapar şuanda kampüsdeyim yogunum bir türlü el atamadım düşünceleriniz ve fikirleriniz her zaman forumumuz için önemlidir

  5. #5
    forum üyesi
    Üyelik tarihi
    Kasım.2008
    Mesajlar
    1

    Standart Cevap: CCS _UYGULAMALARI akım gerilim frekans uygulamsı ve genel donanımsa l anlatım

    link kırık sanırım tekrar yukleyebilirmisin MURSEL... ??

  6. #6
    forum üyesi
    Üyelik tarihi
    Mart.2010
    Mesajlar
    1

    Standart Cevap: CCS _UYGULAMALARI akım gerilim frekans uygulamsı ve genel donanımsa l anlatım

    ben picle güç faktörü ölçümü yapmak istiyorum yazılımda yardımcı olabilecek arkadas varmı??

 

 

Konu Bilgileri

Bu Konuya Gözatan Kullanıcılar

Şu anda 1 kullanıcı bu konuyu görüntülüyor. (0 kayıtlı ve 1 misafir)

Yetkileriniz

  • Konu Acma Yetkiniz Yok
  • Cevap Yazma Yetkiniz Yok
  • Eklenti Yükleme Yetkiniz Yok
  • Mesajınızı Değiştirme Yetkiniz Yok
  •