Şimdi Ara

Optik Sensör iLe RPM ÖLÇÜMÜ.. Yardım..

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
2
Cevap
0
Favori
853
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • CNY 70 i dönen motorun miline bağlayacağım tekerleğin üstüne çekmeyi düşündüğüm beyaz şerit ile CNY 70 ' den 1-0 geLişine göre geçen süreyi hesaplatıp Periyodunu bulup , V=60000/T den devir/dakika cinsinden hızını hesaplatmak istiyorum(periyot miLisaniye cinsinden olduğundan 60/[T*10^(-3)] = 60000/T oLmaktadır..)

    CNY70 den gelen sinyali RB0 kesmesiyle (düşen yükselen kenar) yapmaktayım.. Zamanı ise 50 ms de bi Değişken=Değişken+50; oLucak şekiLde timer2 ile hesaplatmaktayım..



    Program burda arkadaşLar , memLeketime dönücem , bu Proje yüzünden dönemiyorum... İNTERNETTE BUNUN HAZIRI VAR tarzında yorumLar yapmazsanız sevinirim , 16F877 iLe yapmak zorundayım (ki ayrıca hazırını götürünce Hocayı mı kandırmış oLurum yoksa kendimi mi :) )





    HATAMI BULUP DÜZELTEBİLEN ARKADAŞA DUACI OLACAĞIM ... :)





    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



    #include "D:\Documents and Settings\Administrator\Desktop\Dayi\dayi.h"

    #define use_portd_lcd TRUE
    #define LCD_ENABLE_PIN PIN_D0
    #define LCD_RS_PIN PIN_D1
    #define LCD_RW_PIN PIN_D2
    #define LCD_TYPE 2
    #include <lcd.c>
    #use delay (clock=4000000)


    int8 patates=0;
    int8 kofte=0;
    int8 patlican=0;


    #int_ext
    void KofteciGuzeli()
    {
    patlican=6000/kofte; // Her düşen kenarda Kesme oLuşturmak kaydıyLa geçen süreye bağlı olarak HIZ hesaplaması yapıp
    kofte=0; // Değeri PATLICAN değişkenine atıyoruz. Bundan sonra Köfte değerini sıfırlıyoruz ki , zaman hesaplaması
    } // tekrar sıfırdan başlasın ve motor her turu kaç saniyede tamamlayabiliyo hesaplayabilelim :)




    #INT_TIMER2
    void zaman()
    {
    kofte=kofte+50; // osilatör frekansına bağlı olarak 50 ms de bi kofte değişkenini 50 arttırıyoruz ...
    }




    void main()
    {
    lcd_init();
    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    setup_psp(PSP_DISABLED);
    setup_spi(SPI_SS_DISABLED);
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DIV_BY_16,240,13);
    ext_int_edge(H_TO_L);
    enable_interrupts(INT_EXT);
    enable_interrupts(GLOBAL);



    while(1)
    {
    lcd_gotoxy(1,1);printf(lcd_putc,"%02d Devir/Dakika",patlican); // "XX Devir / Dakika" yazdırıyoruz , XX değeri 100 ms de bir değişir.
    delay_ms(100);
    }

    }




    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------







  • Problem KöfteciGüzeli'ne kazık atman "köfte"yi 16 bitlik hazırlayacaksın Bende zamanında kasaplık yaptım bilirim bu işleri Ayrıca bir kaç iyileştirme için; mesela interrupt içinde bölme yapmak zorunda değilsin, bunu main() içinde halletmen projenin geliştirilebilirliği açısından daha iyi olur. Çünkü bölme işlemi de bir fonksiyondur. En azından benim bildiğim CCS sürümlerinde birden fazla fonksiyon yaratılmıyor. Sen daha sonra ana programda bölme kullanırsan çakışmaya yol açıp aynı fonksiyonun bitmeden tekrar çalıştırılmasına yol açabilirsin. Bu değişkenleri bozar. Bu yüzden bu işlem sırasında interrupt kapatmak zorunda kalırsın.




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.