18f45k22 timer0 hakkında

Katılım
14 Nis 2018
Mesajlar
8
Puanları
3
Yaş
22
arkadaşlar öncelikle merhaba elimde 18f45k22 pici var ve bu picte timer0 ı kullanmam için gereken kodları internetten aradığım ve derlediğimde microC compailerı hiç bir türü kabul etmiyor. fakat aynı uygulamayı 16f877 ile çok kolay bir şekilde çalıştırıyorum benden istenilen 18f45k22 ile yapmam sadece bu picte timer0 uyandırıp saniyesi kullanmam gerek koduma ekleyip ödevi bitireceğim yardım ederseniz çok teşekkür ederim.tüm yorumlar benim için değerli şimdiden teşekkürler.bu arada rpm ölçer yapamak isteyenlere aşşağıya kodunu bırakıyorum herkese iyi çalışmalar.
Kod:
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;


//lcd Bağlantıların konfigürasyonunu  bitiriyorum

int artisB=0,kanat=1,deger=0;  //Düğmelerim için 3 tamsayı değişkenini bildiririm
float adim=0,rpm;               //Darbeler ve devir sayılarını ondalıklarla ölçmek için değişken tip değişkenlerimi beyan ederim
char ceviri[8],kanat1[7];    //Tamsayıya çevirmek ve metin dizgilerine geçmek
void main() {

     PORTB.RB6=0;
     TRISB.RB6=1;
     PORTB.RB7=0;
     TRISB.RB7=1;
     LCD_INIT();
     LCD_CMD(_LCD_CLEAR);
     LCD_CMD(_LCD_CURSOR_OFF);

     while(1){

     if(deger == 0){
            IntToStr(kanat,kanat1);
            LCD_out(1,1,"secim yapiniz");
            LCD_out(2,1,"kanat =");
            LCD_OUT(2,9,kanat1);
            if(PORTB.RB7 == 1){            //Bu düğmeye basılırsa, değer 1 olarak değişir ve başka bir işleve geçer
            deger = 1;
            LCD_CMD(_LCD_CLEAR);
            }
            if(PORTB.RB6 == 1){
            artisB=1;
            }
            if(artisB == 1 && PORTB.RB6 == 0){    // b portunda artış sağlanırsa pervanedeki kanat sayısında artış sağlanır.
                       artisB=0;
                       kanat++;
                       if(kanat>5){                //kanat sayısının sınırının girildiği if döngüsü
                       kanat=1;
                       }

            }
     }else{
           TMR0=0;
           delay_ms(500);
           adim=TMR0;
           rpm=(adim*60)*2/kanat; //Motorun dönüşünü Helis sayısına bölünerek TMR0 değerini RPM'ye dönüştürülüyor.
           FloatToStr(rpm,ceviri);
           LCD_CMD(_LCD_CLEAR);
           LCD_OUT(1,1,"Sercan Sozer");
           LCD_OUT(2,1,"RPM =");
           LCD_OUT(2,9,ceviri);
           }
     }
}
 
Moderatör tarafında düzenlendi:

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
749
Puanları
58
500mS içinde kanatlardan kaç değer
geldiğini nasıl anlıyorsunuz. Zira bu
zaman içinde sadece tmr0 değerini
okumuş oluyorsunuz.

RB0/INT kesmesi ile bir değişkeni
birim zamanda artırın.
 
Konu Sah
Sercan sözer
Katılım
14 Nis 2018
Mesajlar
8
Puanları
3
Yaş
22
500mS içinde kanatlardan kaç değer
geldiğini nasıl anlıyorsunuz. Zira bu
zaman içinde sadece tmr0 değerini
okumuş oluyorsunuz.

RB0/INT kesmesi ile bir değişkeni
birim zamanda artırın.

bu kaynağı ispanyol birisinden bulmuştum isis çiziminde clock olarak verdiğim frekansın rpmini doğru bir veriyor 4mhz kristal kullanıyor heralde birde timer0 zaten saniye cinsinden sayım yapan bir kesme gibi gördüm baktığım kaynaklardan yanlışsam düzeltin hocam bir türlü kesicileri anlayamadım okuldada öğretmediler ödev olarak bana denk geldi ayrıntılı bir kaynak varsa paylaşırsanız sevinirim.
edit= rpm=(adım*60)/kanat yaparak timer0clock una giriş veriyor ve 60a bölüyor RA4 portu
 

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
749
Puanları
58
İki kesme gerekli. Biri harici, biri
zaman kesmesi.
Kanat üzerinden manyetik veya
optik sensörlerden sinyal almalıyız.
Bu sinyal ile bir değişkeni artıracagız.
Bir de zaman kesmesi var. Belli bir
sürede oluşan kesme ayarlamalıyız.
Özellikle bir saniyeden az olmalı ki
daha çabuk değşiklikleri algılayabilelim.
Zaman kesmesi içerisinde, harici kesme
ile artırılan değişken genel değişkene
aktarılır. Bu değişken de sıfırlanır.
Bir sonraki ölçüme hazır olması için.
 
Konu Sah
Sercan sözer
Katılım
14 Nis 2018
Mesajlar
8
Puanları
3
Yaş
22
İki kesme gerekli. Biri harici, biri
zaman kesmesi.
Kanat üzerinden manyetik veya
optik sensörlerden sinyal almalıyız.
Bu sinyal ile bir değişkeni artıracagız.
Bir de zaman kesmesi var. Belli bir
sürede oluşan kesme ayarlamalıyız.
Özellikle bir saniyeden az olmalı ki
daha çabuk değşiklikleri algılayabilelim.
Zaman kesmesi içerisinde, harici kesme
ile artırılan değişken genel değişkene
aktarılır. Bu değişken de sıfırlanır.
Bir sonraki ölçüme hazır olması için.
hocam çok güzel diyorsun fakat 18f45k22 microC ile bu kesmeyi nasıl yapacağım ve bu saniyeyi nasıl elde edeceğimi bulamadığım onu danışıyorum bende
 

Sponsor Bağlantı

Forum istatistikleri

Konular
106,003
Mesajlar
746,757
Kullanıcılar
393,952
Son üye
oguzhanakbas

Yeni konular

Üst