Şimdi Ara

kesmeler ve frekans metre(isis te çalıştırabildim)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
12
Cevap
0
Favori
1.733
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • selam,
    sayın arkadaşlar bi devre yaptım orda frekans kontrolunu yapıyorm fakat çıkan frekansı okumak istiyorum bi türlü olayı tam anlamış değilim sanırım şöyle oluyor diğelim sinyali okuyoruz yükselen kenarında kesmeye gittik bir sonraki yükselen kenarına kadar zamanı sayıp kesme geldiginde saydıgımız zamanı ana programa göürüp işlicez fakat kesme konusunda 0 sayılırım olayı daha iyi aanlayabilmek için saat programı falan yazdım fakat bu frekans metre işini çözemedim

    ancak bugun, kesme geldiginde (örn: yükselen kenar)kesme alt programına gidip bir sonraki yükselen pals gelene kadar artan bir sayıyı yükselen pals geldiginde(burda kesme değilde if portb.0 = 1 then resume dedm ) ana prgoama yönlendiren bir program yazdım bununda hızı düşük oldu 100Hzde yani 10msn de 400'e kadar saydırabildirdim (4mhz krstal) bunun daha iyi bir yolu olmalı

    fikir verirseniz oralara yönelecem



    < Bu mesaj bu kişi tarafından değiştirildi cundali11 -- 29 Eylül 2007; 23:44:14 >







  • Timer kullanman daha iyi sonuçlar almana yarayacaktır. Kulakları çınlasın bir arkadaş vardı. Timer'a ne gerek var diyen....
    http://forum.donanimhaber.com/m_16071322/tm.htm

    bir timer kesmesi timerda taşma olup olmadığını, olduysa sayısını tutacak. TAŞMA_SAYISI=TAŞMA_SAYISI+1

    1. yükselen kenar kesmesi Timer'ı başlat.

    2. yükselen kenar kesmesi Timer'ın değerini oku. ANLIK_DEĞER=TIMER timer'ı sıfırla TIMER=0 ve yeniden başlat ayrıca taşmayı da sıfırla TAŞMA=0

    3. yükselen kenar kesmesinde 2.nin aynı
    4. yükselen kenar kesmesinde 2.nin aynı
    .
    .
    .

    ana programda da taşma sayısı ve timer'dan kesme de aldığın değere göre zamanı bulabilirsin.
    TOPLAM_ZAMAN = (TAŞMA_SAYISI*(2^TIMER_BIT_SAYISI))+ANLIK_DEĞER




  • açıklamanız için teşekkürler fakat bişey anlamadım bu kesme olaylarında hiç bişey bilmiyorum biraz daha açarmısınız
  • detaylı açıp kodu yazamıycam, sen init leri falan kendin yazarsın.

    #include <16Cxx.H>
    #use Delay(clock=4000000)
    int8 anlikdeger;
    int32 tasma, oncekitasma;
    int1 ilk;

    #INT_TIMER0
    timer_kesmesi()
    {
    tasma++;
    }

    #INT_RB0
    rb0_kesmesi()
    {
    if (ilk=0)
    {
    // timer'ı sıfırla ve başlat; TMR0=0;
    ilk=1;
    }
    else
    {
    oncekitasma=tasma;
    tasma=0;
    anlikdeger=TMR0;
    TMR0=0;
    }
    }

    main()
    {
    int32 period;

    ilk=0
    // diğer başlangıç gerekleri (initialization)


    while(1)
    {
    period=(tasma*255)+anlikdeger; // prescaler ve saat/4 ü unutmadan ;)
    printf(%d, period);
    }
    }




  • vallahi bu kadar uğraşmışın yazmışın söylemeye dilim varmıyor ama ben bu dilden anlamıyom pbp de yazıyodum ama genede saol uğraşıcam
  • o kadar uğraştım bir türlü çözemedim ama şunu yapabildim

    option_reg = %00101000
    intcon = %10100000

    on interrupt goto kesme
    say = 0
    tmr0 = 0
    basla:
    zaman = (say*256)+tmr0
    lcdout $fe,$80,"zaman:",#zaman
    goto basla
    disable

    kesme:
    say = say + 1
    intcon.2 = 0
    resume
    enable

    porta.4 ucundan giren palsleri saydırabilen bir program yazdım burda @zorbey77 arkadaşın dediklerinden faydalanarak ancak bu kadarını yapabildim

    benim dediğim frekans sayma işini pbp de nasıl yapabilirim diyelim ilk yükselen palste kesime götürdüm orda intcon.5 = 1 deyip tmr0 kesmelerini aktif ettim ve yükselen palse kadar tmr0 ı dahili saykılla saydırıp her kesimde say = say + 1 dedim peki bekledigimiz yükselen palste hesaplama işini nasıl yapacam bu konuda yardımlarınızı bekliyorum




  • arkadaşlar

    şöyle bi şey yaptım (tabi gene olmadı) ilk başta bo kesilimi aktif düşen kenar geldigi zaman tmr0 0 lanıp intcon.5 = 1 le tmr0 kesimini aktif kılıyom ve bir sonraki düşen kenarda (yani tmr0 ın ve b0 dan kesimin aktif oldugu düşen kenarda) tmr0 ı bi değişkene aktarıp tmr0 kesimini intcon.5 = 0 diyerek kapatıyom ve ana programa gidip tmr0ı lcd ye yazıyom tabi her 255usn de bir 0 landıgı için buraya 10000 - 5000hz değerlerini verdim ama bu degerlerde istedigim degeri göremiyom yani 10khz de 100 5khz de 200 sürekli sabit degerler çıkıyor eger bu sorunu çözebilirsem @zorbey77 in dediği işlemleri yapmaya çalışacam eksikliklerim ortada ben çözemedim bi zahmet el atın



    option_reg = %00001000
    intcon = %10010000

    on interrupt goto kesme
    say = 0
    tmr0 = 0
    say2 = 0
    basla:

    lcdout $fe,$80,#tmrr," "
    goto basla
    disable

    kesme:
    if (intcon.1 = 1) and (intcon.5 = 1) then
    tmrr = tmr0
    intcon.2 = 0
    intcon.1 = 0
    intcon.5 = 0

    goto atla
    endif
    if intcon.1 = 1 then
    tmr0 = 0
    intcon.1 = 0
    intcon.5 = 1
    intcon.2 = 0
    endif
    intcon.2 = 0
    atla:
    resume
    enable




  • pbp için :

    http://forum.donanimhaber.com/m_14022752/tm.htm



    < Bu mesaj bu kişi tarafından değiştirildi musallim -- 29 Eylül 2007; 18:48:15 >
  • @musallim, afedersiniz açlıktan dolayımı ben orda link bulamadım yoksa bi sorun mu var

    edit: tamam saolun düzelmiş



    < Bu mesaj bu kişi tarafından değiştirildi cundali11 -- 29 Eylül 2007; 18:51:36 >
  • Hangi sayfada olduğunu unuttum ve arama ile buldum.ETE diye aratmıştım.İçerisinde ete geçen yerleri işaretleyince iliştirilmiş linkler çalışmadı.Hatta yeniden yapıştırdım yine olmadı,aslında çalışıyormuş tabii.
    Sonra aynı sayfya normal yoldan erişip o şekilde başlığı kopyalayıp yapıştırınca sorun haloldu.
  • tekrar teşekür ederim dosyaları indirdim ama yarına kadar kendi yöntemimle çözemessem ordan faydalanmaya bakacam
  • arkadaşlar en sonunda yapabildim tabi daha isiste 4mhz lik kristal ile 60khz i okuyabildim(60090 olarak ) olsun bunada şükr diyorum program bu ustalar bi baksın ben bunu 877 de denedim 84 e geçirip hserout yolu ile yapacagım devreyle seri iletişimde bulunacam çünkü programın bu frekans sayıcı kısmında 1sn bekleyip geleni sayıyorum eger bunu benim programa koyarsam büyük aksamalar olur mecburen devreye bi 16f84 ilave edecem.

    ve @musallim ve ete abilerimi saolsun ama daha o notlara bakmadım ilerde artık boş bi zamanımda oralarıda bir geçsem iyi olacak


    option_reg = %00101000
    intcon = %10100000

    on interrupt goto kesme
    say = 0
    tmr0 = 0

    basla:
    pals = ((say*255)+tmr0)
    lcdout $fe,$80,#pals," "
    tmr0 = 0
    say = 0
    for i = 0 to 134
    for i1 = 0 to 134
    next i1
    pauseus 5
    next i
    goto basla
    disable
    kesme:
    say = say + 1
    intcon.2 = 0
    resume
    enable




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.