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 :) )
#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 ... }
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.