Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: eeburakdemir - 20 Şubat 2017, 12:03:35

Başlık: 18F66K80 EXT INT SORUNU
Gönderen: eeburakdemir - 20 Şubat 2017, 12:03:35
Herkese merhaba,
18F66K80 mcu kullanarak ticari bir proje yapmaktayım bu yüzden de sınırlı şekilde kod paylaşımı yapabileceğim şimdiden kusura bakmayın arkadaşlar. Resimde görüldüğü gibi sinyalleri geliyor ve düşen kenarda okuma işlemini gerçekleştiriyorum. Şebeke frekansını ölçeceğim fakat ext int çalışmıyor. Hiçbir şekilde tepki vermiyor. Harici olarak kendim sisteme sinyal verioyorum 1-50Hz arasında onu bile algılamıyor. Timer ve 2x16  Lcd şuanda çalıştı. Fakat timer içinde normal inp gibi okutmak istedim onu da okumadı.

    RCONbits.IPEN = 0;

    INTCONbits.INT0IE = 0;
    INTCONbits.INT0IF = 0;
    INTCON2bits.INTEDG0 = 0;
    ei();

Init kodları bunlar.

Osc komutları:

    /* Clock Configuration */
    OSCCON = 0x70;
    OSCCON2 = 0;
    OSCTUNE = 0;
    REFOCON = 0;
    Delay_ms(1000);
    while (!OSCCONbits.HFIOFS); // Wait for OSC Stable
    /* Clock Configuration */

(https://s16.postimg.cc/6ico28hpt/20170118_144636.jpg) (https://postimg.cc/image/6ico28hpt/)
Başlık: Ynt: 18F66K80 EXT INT SORUNU
Gönderen: Tagli - 28 Şubat 2017, 10:28:57
 INTCONbits.INT0IE = 1; olması gerekiyor. Başka bir hata var mı bilmiyorum ama kesmeyi hem kendi izin biti ile hem de genel izin biti yani GIE ile açmalısın. Öyle sanıyorum ki ei(); sadece GIE'yi açıyor. Bazı durumlarda PIE'yi de ayrıca açman gerekir.
Başlık: Ynt: 18F66K80 EXT INT SORUNU
Gönderen: tekosis - 28 Şubat 2017, 11:45:25
ticari kodlarını paylaşmana gerek yok ama yapacağın programı bloklar halinde ilerletirsen sıkıntıyı aşman kolay olur. şu şekilde bir program yaz bizde onun üzerinden yardımcı olmaya çalışalım. ext_int girişine 50hz bir kare dalga uygula, her düşen kenarla birlikte kesme oluştuğunda kesme alt programının içinde bir kayıtçının değerini 1 arttırsın ki kesmede sadece bu arttırma işlemini yap. ana programda bu kayıtçıyı kontrol et değeri her 50 oluşunda bir ledi toggle yap ve kayıtçıyı sıfırla. bu sayede peryodu 1sn olan bir led yakıp söndürme programı elde edersin. bu programı çalıştırırsan kodlarını esas projende kullanırsın.
Başlık: Ynt: 18F66K80 EXT INT SORUNU
Gönderen: eeburakdemir - 28 Şubat 2017, 12:01:50
Haklısınız , yoğunluktan dolayı da atamadım kodları. Halen sorunu çözemedim fakat daha önce de kullandığım şekilde kesme initlerini yaptığımda 0 haricinde 1, 2 , 3 kesmelerini kullanabiliyorum. Bu hafta sahadayım şirkete geçince atayım bloklar halinde. Fakat araştırırken şunu farkettim int0 low priority özelliğine sahipmiş default olarak. Bu biraz garip geldi. Çünkü vektör adresini bulamıyor ki kesmeye gidemiyor diye düşünüyorum. Diğerlerine gidip sadece buna gitmemesi de çok ilginç zaten. CCS C de yazılan kodda giriyor , Mplabx de yazıyorum girmiyor , mcc den yaptım yine girmedi. Düşünceleriniz için teşekkür ederim arkadaşlar @tekosis @Tagli

@Tagli o dediklerini hepsi açık, tekosis arkdasın dedıgı gibi paylaşınca kodları orada görülecek.

Bu arada sorunu capture 5 ile hallettim.