Şimdi Ara

16F877A--Timer0--Zero Cross Detect--CCS C Yardım lütfen

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
1.230
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar,

    16F877A mikrodenetleyicisine akım ve gerilim arasındaki faz farkını ölçmek için örnek sinyaller gönderiyorum.

    Amacım faz farkını ölçmek.

    Baya bir uğraştım ancak sonuç alamadım.

    Adc ye verdiğim 2 adet sinyalden birini referans kabul edip bunu okutmaya başladıktan sonra bu sinyalin sıfırdan geçtiği anda
    timer0 zamanlayıcısını başlattım. Aynı zamanda diğer sinyali adc den okutmaya başladım. bu sinyalde sıfırdan geçtiğinde
    x=get_timer0() ile timer0 bilgisini x değişkenine aktardım ve burdan hesaplama yoluna gittim ancak doğru sonuçlar alamadım.

    Lcd de görünen sonuçlar sürekli değişiyor simülasyon çalışırken.

    Kodlar şöyle;

    void main() {
    setup_adc(ADC_CLOCK_INTERNAL);
    setup_adc_ports(AN0_AN1_VREF_VREF);
    setup_psp(PSP_DISABLED);
    setup_spi(FALSE);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_CCP1(CCP_OFF);
    setup_CCP2(CCP_OFF);

    lcd_init();
    set_tris_a(0x03);
    set_tris_b(0x00);
    output_b(0x00);

    setup_timer_0(RTCC_INTERNAL | RTCC_DIV_32);

    while(1)
    {

    basla:

    set_adc_channel(1);
    delay_us(20);
    okunan2=read_adc();

    if(okunan2==0)
    {

    set_timer0(0);

    while(1)
    {
    set_adc_channel(0);
    delay_us(20);
    okunan1=read_adc();

    if(okunan1==0)
    {

    x=get_timer0();
    m=x*32; --> bölme oranıyla çarpıp geçen zamanı buluyoruz.
    y=0.018; --> 1us başına düşen derece.

    z=m*y;
    lcd_init();
    printf(lcd_putc,"\fguc kat = %f",z);

    goto basla;
    }
    }
    }
    }
    }
    }

    Timer0 zamanlayıcısını durduramadığım için doğru sonuçlar alamadığımı düşünüyorum. Pic 16 serisinin çoğunda timerın durdurma özelliği yokmuş pic 18 serisinden itibaren varmış yanlış bilmiyorsam.

    Ancak bir makalede aynı işlemci kullanılmış ve Timer0 zamanlayıcısını durdurarak içindeki bilginin alınıp cosfi nin hesaplaması yapıldığı yazılmış.

    Bilgisi olanlar yardım ederse çok makbule geçer.



    < Bu mesaj bu kişi tarafından değiştirildi merik and sago -- 1 Mayıs 2020; 19:31:53 >







  • Sinyal sıfıra gelmeden transistörler durduğundan dolayı offset verdim sinyale.

    Önceki sinyalin Ampl=5V tu. +-2.5V yaptım. Opamplarla doğrulttum. sonra 2.5v offset verdim.

    Sinyalim 2.5v ile 5v arasında sinüs dalga şeklinde. Yukarıdaki kodda okunan=read_adc() den sonra

    if(okunan==504) yazdım. Çünkü bu değer sinyalin en dip noktasına yani 2.5v ta denk geliyordu.

    Ancak lcd de gördüğüm faz açıları yanlış ve sürekli değişmekte.
  • Yazdığınız program kodlarını
    [code][/code] tagleri arasına alıp mesajınıza eklerseniz okunmasını kolaylaştırırısınız. Bu şekilde hangi parantez nerede açılmış nerede kapatılmış anlamak için ayrıca uğraşmak gerekiyor.
  • quote:

    Orijinalden alıntı: rafet32

    Yazdığınız program kodlarını
    [code][/code] tagleri arasına alıp mesajınıza eklerseniz okunmasını kolaylaştırırısınız. Bu şekilde hangi parantez nerede açılmış nerede kapatılmış anlamak için ayrıca uğraşmak gerekiyor.
    Yapamadım
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.