Not 19: Timer1 Kesmesi – 3 (Asenkron Sayıcı Mod)

Yayınlandı: 17 Temmuz 2012 / Microchip PIC Programlama...
Etiketler:, , , , , , , , , , , ,

  Timer 1’in en son işleyeceğimiz konusu olan asenkron sayıcı modu bu notumuzda derinlemesine inceleyeceğiz. Timer 1 bu modda çalışırken PIC’in dahili saat sinyalinden tamamen bağımsız olarak Timer1 registerının değerini arttırmaktadır. PIC uyku modunda bile olsa Timer1 bu modda saymaya devam eder. Tabiki bu modda harici bir saat kaynağı kullanılmak zorundadır. Harici saat kaynağı olarak bir osilatörden veya cihazdan gelen clock sinyali kullanılabileceği gibi, kristal osilatörlerde kullanılabilir.Timer1 modülünün içerisinde RB7 ve RB6 uçları arasına inşa edilmiş bir osilatör devresi mevcuttur ve dışarıdan bağlanacak kristal osilatör ile sayma yapabilir. Timer1 çok sık olarak bu uçlara bağlanacak 32.768 KHz değerinde bir kristal ile kullanılır. Kristalin bu değerde olmasının en önemli sebebi Timer1 registerının alabileceği maks değerin 655535 olması ve 65536 kez sayınca 0’a döneceği gerçeğidir.  32.768KHZ değerindeki bir kristalin üreteceği sinyalin periyodu 1/32768 = 0,000030517578125 saniye olacaktır. Yani her  0,000030517578125 saniyede bir kez Timer1 modülü sayma yapacaktır. Timer1 65536 kez sayma yapar ise 65536*0,000030517578125= 2 saniye yapar. 1 saniyede 1 kesme oluşması için ise Timer1 registerları içerisine 32768 değeri yüklenir. Bu sefer Timer1’in 65536’ya ulaşması için 65536-32768=32768 kalır. Yani timer1 kesmesinin oluşması için 32768 kez sayması gerekir. Bu durumda 32768*0,000030517578125=1 saniye yapar. Yani biz eğer 32.768KHz değerinde bir kristal kullanarak tam tamına 1 saniyede kesme oluşturabiliriz. Aşağıdaki şemada görüldüğü gibi bir devre ile LCD’de saydırma işlemi yapabiliriz.

Büyütmek için tıklayın.

Bu devrede dikkat edilmnesi gereken şey iki adet osilatörün kullanılmış olmasıdır. Birincisi PIC’e saat sinyali sağlayan 16f628A’nın dahili 4MHz’lik osilatörü, diğeri Timer1’i asenkron modda besleyen 32.768KHz’lik osilatör.  Bu şemada sadece 32.768KHz’lik osilatör görülmektedir haliyle.  Şemayla ilgili bir diğer husus ise LCD ve PIC’in besleme kısmının burada görülmemesidir. DC-5V yaklaşık 100mA   sağlayabilen herhangi bir kaynak ile devre beslenebilir. Şemada PIC’in besleme uçları görülmemektedir. Gerekli bilgileri PIC16f628A’nın datasheetinden edinebilirsiniz.  Şema ile ilgili söylemek istediğim bir başka şey ise ISIS’te PICler ve kristal osilatörlerin birbirinden pek haz etmemesi. Bu yüzden ben simülasyon programında osilatör değilde RB7 ucundan 32768Hz değerinde bir sinyal girdim. Fakat uygulamada kristalinizi 15pF değerinde kondansatörler kullanarak şemadaki gibi sorunsuzca bağlayabilirsiniz.

Şimdi gelelim kodlarımıza:

char saniye=0;
char txt[5];
//****************************************************
void kurulum()
{
Lcd_Custom_Config(&PORTB,3,2,1,0,&PORTA,0,1,2); //Data uçları portb'de , kontrol uçları porta'da.
Lcd_Custom_Cmd(Lcd_Cursor_off); // İmleci kapat.
Lcd_Custom_Cmd(Lcd_clear); //LCD'yi temizle.
trisb.f4=0;  //portb'nin 4. pini çıkış.
portb.f4=0;  //portb'nin 4. pini sıfır seviyesinde.
INTCON.GIE=1; //Tüm kesmeler aktif.
INTCON.PEIE=1; //Çevresel kesmeler aktif.
PIE1.TMR1IE=1;//Timer 1 kesmesi aktif.
T1CON.T1CKPS1=0; //Prescaler t1con'un 5 ve 4. bitleri "00" yapılarak 1:1 seçildi.
T1CON.T1CKPS0=0;
T1CON.T1OSCEN=1; //  PORTB'nin 7. pini giriş olarak kullanılıyor.
T1CON.NOT_T1SYNC=1;// asenkron mod.
T1CON.TMR1CS=1;// harici osilatör kullanılacak
T1CON.TMR1ON=1;//Timer1 çalıştırılıyor.
TMR1H = 0x80; //Tmr1 registerlarının içerisine 0x8000 değeri 16 bit olduğu için parça parça yükleniyor.
TMR1L = 0x00;
}
//****************************************************
void main()
{
kurulum(); //kurulum altprogramına git.
while(1)  //sonsuz döngü;
{
if(saniye>59)saniye=0;  //saniye değişkeni60 olur ise sıfırla.
ShortToStr(saniye,txt); //saniye değişkenini kcdde göstermek için stringe çevir.
Lcd_Custom_Out(1,1,txt);// lcd'nin 1. satır, 1.sütunundan itibaren txt dizisi içindeki yazıyı göster.
}

}
//****************************************************
void interrupt()
{
TMR1H = 0x80; //Tmr1 registerlarının içerisine 0x8000 değeri 16 bit olduğu için parça parça yükleniyor.
TMR1L = 0x00;
saniye++;  //saniye değişjeninin içeriğini 1 arttır.
portb.f4=~portb.f4; //PORTB'nin 4. pinindeki led durum değiştiriyor.
PIR1.TMR1IF=0; //Kesme bayrağı sıfırlandı.
}
//****************************************************

Bu kodu kullanarak ve üzerine az miktarda kod ekleyerek kendinize bir LCD’li saat yapabilirsiniz.
Bu not ile ilgili sormak istediklerinizi bana aşağıdan iletebilirsiniz.
Bu konu ile ilgili dosyaları buradan indirebilirsiniz.
İyi çalışmalar..

yorum
  1. F .K dedi ki:

    mükemmel bilgiler bileğinize yüreğinize sağlık Allah razı olsun…

  2. ismail dedi ki:

    çok teşekkürler okul gibi burası
    hocam tpic6b595 kullanarak 6 hane ileri geri sayıcı nasıl kodlanır data,latch ve clk sinyallerini nasıl kodla oluştururuz
    Allah razı olsun sizden

  3. hasankara dedi ki:

    void zaman_sayac()
    {
    if(TMR1L>0){i=TMR1L-1;TMR1L=TMR1L-i;arasaniye=arasaniye+i;}

    while(arasaniye>64){arasaniye=arasaniye-64; mikrosaniye=mikrosaniye+15625;

    while(mikrosaniye>1000){mikrosaniye=mikrosaniye-1000;milisaniye++;
    while(milisaniye>1000){milisaniye=milisaniye-1000;saniye++;}}}
    while(saniye>60){saniye=saniye-60;dakika++;}
    while(dakika>60){dakika=dakika-60;saat++;}
    while(saat>24)saat=0;
    }

    harici aktif ve osc enabled iken 32768 hz lik osc ile sağlıklı bi saydırma yaptıramıyorum. osc bağlı iken elimi yaklaştırınca saymaya başlıyor ve hedeflenenden daha hızlı sayıyor elimi uzaklaştırınca duruyor. kiimi zamanda olması gerekenden daha yavaş sayıyor eli yaklaştırınca tabi.

    harici aktif osc disabled iken elle dokununca veya kondansatör bağlayınca herhangi bi artış yok ama kristalin bi bacağı denetleyicinin ana kristalinin osc bacağına bağlayıp diğer bacağınıda t1ckı ya bağlayınca timerler sayma yapıyor . tabi müthiş hızlı bi şehilde ve dengesiz bi şekilde .

    harici aktif ve osc enabled iken yukarıdaki kod ile isiste çok net bi şekilde doğru sayma yapılıyor. osc disabled ikende isiste doğru sayma yapılmıyor. isis te t1ckı girişine pulse generator u ekledim 32768 hz de pulse veriyor. kristal takınca kristalin etkisi olmuyor çünkü. eğer clock pulse i ile çözeceksemde tmr0 modülüne yönelirim.

    daha önce saat entegresiylede çalışmalarım olmuştu onda hiç sorun olmuyordu sapasağlam sayma yapıyordu . olmadı yine saat entegresi kullanıp sout tan 32768 hz lik clock pulsi ürettirip tmr0 dan saydırıcam. saat entegresi biraz gereksiz gibi duracak ama sorunu çözemezsek mecbur o şekilde olacak.

    her türlü önerilerinize açığım ilgilerinizden dolayı şimdiden çok sağolun. hayırlı çalışmalar dileğiyle .

    • hasankara dedi ki:

      yaptığım hesaplamayı adım adım yazayım.

      1 pulse = 1/(2^15)sn ise(10^6 ile çarparsak) 1 pulse = (5^6)/(2^9) usn

      prescalere göre 8 pulse de TMR1L 1 artacak o halde 1TMR1L=(5^6)/(2^6) usn => 2^6TMR1L=5^6 usn

      sonuç olarak TMR1L nin değerinden 64 çıkarınca , mikrosaniye kaydedicisine 15625 değeri ekliyorum.

    • mikrodunya dedi ki:

      Proje dosyanızı gönderirseniz şemayla birlikte, bakabilirim.

      • hasankara dedi ki:

        isis simülasyonda tam istediğim gibi çalışmakta . pratikte sorun oluşmakta .

        onun dışında dahili osilatör kullanarak saydırma işlemi yapınca prescaler 1:4 oranındayken 100 dk da 1 saniye ileri kaydı , prescaleri 1:1 e getirdiğimde 25 dk da 1 sn geriledi. (gerçek denemelerde)

        prescaler in resetlenmesi gibi bir durum söz konusu olabilirmi ? yani 1:4 oranındayken normalde 4 komutta 1 TMR değeri artması gerekirken , herhangi bir sebepten dolayı (mesela TMR1 in değernin sık sık 0 lanması gibi ) bu oranda kısalmalar olabilirmi (1:3 gibi) ?

        benim tahminim normalde kristalde , sıcakıktan dolayı genleşme oluyor ve frekans düşüşü gerçekleşiyor . bu sebepten dolayıda normal şartlarda (yani prescalerde bu dediğim tarzda bi durum yoksa) , zamanlama olarak geriye kayması gerekir . 1:1 orandayken prescaler resetlenmesi gibi bi durum olmayacağından dolayı zamansal olarak geriye kaydı . ancak prescaleri 1:4 e getirince bazen 1:3 bazen 1:2 de TMR1 değeri arttı ve bu durum frekans düşümü durumundan baskın çıkarak 100 dk da 1 sn ileri kaydı.

        ilginizden dolayı teşekkür ederim.

      • mikrodunya dedi ki:

        Hocam kurmuş olduğunuz devre şeması, mümkünse devrenin fotosu ve proje dosyanızı paylaşırsanız yardımcı olabilirim. Böyle uzaktan ne desem boş. Çalışması lazım paylaştığım kodun.

  4. Ahmet dedi ki:

    merhaba hocam makalenizde pic uyku modunda iken timer1 sayıcısının sayacağını belirmişsiniz bunu açar mısınız? benim yaptığım uygulamada pici uyuttuğumda herşey duruyor timer1 de duruyor teşekkürler

  5. Ahmet dedi ki:

    hımm uyandığında o an hangi değerde uyandıysa o değeri gösterir ekranda yani peki hocam timer1 taşma kesmesi oluştuğunda pici uyadıramazmıyız

    • mikrodunya dedi ki:

      Hocam siz asenkron sayıcı modunu kullanacaksınız. Burada her kesme oluştuğunda işlemci uyanır. Datasheetin 7.3 bölümünden sayfa 52’den bakabilirsiniz.

  6. Ahmet dedi ki:

    hocam ccs c kullanıyoru ben ccs c de asenkron moduna aldığımda pic uyuyor bırdaha uyanmıyor taki dışardan harici kesme gelene kadar ccs c timer setup kodlar şu şekilde;

    setup_timer_1 (T1_EXTERNAL_SYNC|T1_CLK_OUT);

  7. özkan dedi ki:

    Hocam merhabalar, biliyorum burası yeri değil; ama size ulaşabileceğim başka bir yer yok. Belki başınıza gelmiştir. Bir çok MikroC kullanıcısı RF ile ilgili sorun yaşamakta, proteus ortamında çalıştığı halde gerçek ortamda çalışmama gibi bir sorun var. Hikmet Şahin hocamızın kitabında ki RF örneğinide gerçek ortamda çalıştıramadık. Hocam RF ile sadece aç kapa yapan ve gerçekte denediğiniz bir yazılımınız var ise benim ile paylaşabilir misiniz? Yaklaşık 3 aydan beridir çalıştıramadım. Elinizden geldiği kadar yardımcı olursanız çok sevinirim. E-mail : ozkanatas33@hotmail.com

  8. Ali ÇETİNKAYA dedi ki:

    Selamlar. Çalışmalarınız çok güzel teşekkür ediyorum. Benim bir sorum olacaktı. Ben microc de timerlerin bir arada olduğu bir program yazmaya çalışıyorum. kullandığım entegre 18f252. timer 0 ile sorunsuzca program işliyor. ve programın o süreçteki while döngüsü içindeki işlemleri yapabiliyorum. Timer1 de başka bir olayı kontrol etmeye çalıştığımda timer 0 çalışıyor ve while döngüsü bu süreçte kilitleniyor. doğal olarak timer1 de çalışmıyor. Benim sormak istediğim. iki timeri veya 18f252 nin içinde bulunan 4 timeri bir arada kullanmak istediğim zaman ne yapmalıyım. veya nasıl bir yol izleyerek timerler birbiri ile çakışmadan sonuç alabiliyim. Şimdiden teşekkür ediyorum. iyi günler.

    • mikrodunya dedi ki:

      Programınızı paylaşırsanız yorum yapabilirim. Kodlarınızı görmeden yorum yapmak çok zor. Kesme altprogramı içerisinde kesme bayraklarını ayrı ayrı kontrol edeceksiniz.

  9. Ali ÇETİNKAYA dedi ki:

    Kusura bakmayın kafamın yogunluğundan kodları paylaşmayı unuttumuşum.

    Kodlar bu şekilde.

    #define BUTON PORTA.F4
    #define PROB PORTC.F0
    #define MOTOR PORTC.F4
    #define LED PORTC.F7

    int kontrol;

    void interrupt(){
    if (INTCON.T0IF){
    MOTOR=~MOTOR;
    INTCON.T0IF=0; // TİMER 0 KESMESİNİ SIFIRLADIK.
    }
    if (PIR1.TMR1IE){
    PROB=~PROB;
    PIR1.TMR1IF=0; // TİMER 1 KESMESİNİ SIFIRLADIK.
    }

    }

    void main(){

    ADCON1 |=0x07; // analoğ dijital pinleri dijital olarak seçtim.

    kontrol=0; // kontrol değişkenine sıfır değerini attım.

    TRISC=0x00; // C portunun girişlerini ve çıkış pinlerini ayarladım.
    PORTC=0x00; // C PORTUNA İLK ZAMAN TÜM PİNLERİNİ SIFIRLADIM.
    TRISA=0xff;
    PORTA=0x00;

    // Timer0 Registers:// 16-Bit Mode; Prescaler=1:256; TMRH Preset=67; TMRL Preset=69; Freq=1,99997Hz; Period=500,0064 ms
    T0CON.TMR0ON = 1;// Timer0 On/Off Control bit:1=Enables Timer0 / 0=Stops Timer0
    T0CON.T08BIT = 0;// Timer0 8-bit/16-bit Control bit: 1=8-bit timer/counter / 0=16-bit timer/counter
    T0CON.T0CS = 0;// TMR0 Clock Source Select bit: 0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
    T0CON.T0SE = 0;// TMR0 Source Edge Select bit: 0=low/high / 1=high/low
    T0CON.PSA = 0;// Prescaler Assignment bit: 0=Prescaler is assigned; 1=NOT assigned/bypassed
    T0CON.T0PS2 = 1;// bits 2-0 PS2:PS0: Prescaler Select bits
    T0CON.T0PS1 = 1;
    T0CON.T0PS0 = 1;
    TMR0H = 0x67; // preset for Timer0 MSB register
    TMR0L = 0x69; // preset for Timer0 LSB register
    INTCON.T0IF=0; // TİMER 0 KESMESİNİ SIFIRLADIK.
    INTCON.T0IE=1; // TİMER 0 KESMESİNİ AKTİF ETTİK.
    INTCON.GIE=1; // TÜM KESMELERE İZİN VER.

    // Timer1 Registers:
    // Prescaler=1:4; TMR1 Preset=15536; Freq=100,00Hz; Period=10,00 ms
    T1CON.T1CKPS1 = 1;// bits 5-4 Prescaler Rate Select bits
    T1CON.T1CKPS0 = 0;//
    T1CON.T1OSCEN = 1;// bit 3 Timer1 Oscillator Enable Control: bit 1=on
    T1CON.NOT_T1SYNC=0;// bit 2 Timer1 External Clock Input Synchronization Control bit: 1=Do not synchronize external clock input
    T1CON.TMR1CS = 1;// bit 1 Timer1 Clock Source Select bit: 0=Internal clock (FOSC/4) / 1 = External clock from pin T13CKI (on the rising edge)
    T1CON.TMR1ON = 1;// bit 0 enables timer
    TMR1H = 0x3C; // preset for timer1 MSB register
    TMR1L = 0xB0; // preset for timer1 LSB register
    PIR1.TMR1IF=0;
    PIE1.TMR1IE=1; // TİMER 1 KESMESİNİ AKTİF ETTİK.
    INTCON.PEIE=1; //Çevresel kesmeler aktif.
    INTCON.GIE=1; // TÜM KESMELERE İZİN VER.

    while(1){
    if(BUTON) PROB=1;
    else PROB=0;

    }
    }

    timerler için bir program kullanıyorum. PIC Timer Calculator isimli. ingilizce yazılar programın kendisi ekliyor. programda sadece istediğimiz timer ayarlarını belirtip kodların oluşmasını bekliyoruz. programın kısaca calışma şekli bu. Cevabınızı merakla bekliyorum. iyi çalışmalar.

    • mikrodunya dedi ki:

      Timer1’in kesme oluşturup oluşturmadığını kontrol etmemişsiniz. Ayrıca Timer kesmeleri oluştuktan sonra TMRxH TMRxL değerlerini aşağıdaki örnekteki gibi tekrar yüklemelisiniz.

      void Interrupt()
      {
      if (TMR1IF_bit){
      TMR1IF_bit = 0;
      TMR1H = 0x3C;
      TMR1L = 0xB0;
      //Enter your code here
      }

      if (TMR0IF_bit){
      TMR0IF_bit = 0;
      TMR0H = 0x67;
      TMR0L = 0x69;
      //Enter your code here
      }
      }

  10. Ali ÇETİNKAYA dedi ki:

    program da 10msn de bir timer bir kesmesi oluşturdum. bu süreçte yaklaşık her 1.5 sn de olmak üzere timer 1 kesmesi oluşturmak istedim. Sizin yorumunuza göre kesmeleri kullandığım void interrput() kısmı içindeki if lerde diye anlıyorum takıldığım noktayı.

    • mikrodunya dedi ki:

      Yukarıdaki mesajımda verdiğim örneğe göre oluşturun kesmeleri..
      Probleminiz kesme oluşup oluşmadığını konrol ettirmeden işlem yapmaktan kaynaklanıyor.

  11. Ali ÇETİNKAYA dedi ki:

    Yorumunuz için teşekkür ederim. Peki INTCON.GIE=1; // TÜM KESMELERE İZİN VER. bu satırı hem timer1 hemde timer0 için yazmam gerekiyormu? yoksa bir tane yazsam en sonda yeterli mi?

  12. Ali ÇETİNKAYA dedi ki:

    #define BUTON PORTA.F4
    #define PROB PORTC.F0
    #define MOTOR PORTC.F4
    #define LED PORTC.F7

    int kontrol;

    void Interrupt()
    {
    if (INTCON.T0IF){
    INTCON.T0IF = 0;
    TMR0H = 0xB1; // preset for Timer0 MSB register
    TMR0L = 0xE0; // preset for Timer0 LSB register
    LED=~LED;
    }

    if (PIR1.TMR1IF){
    PIR1.TMR1IF=0;
    TMR1H = 0xB1; // preset for timer1 MSB register
    TMR1L = 0xE0; // preset for timer1 LSB register.
    for(kontrol=0;kontrol=150;kontrol++){
    MOTOR=~MOTOR;
    }
    }
    }

    void main(){

    ADCON1 |=0x07; // analoğ dijital pinleri dijital olarak seçtim.

    kontrol=0; // kontrol değişkenine sıfır değerini attım.

    TRISC=0x00; // C portunun girişlerini ve çıkış pinlerini ayarladım.
    PORTC=0x00; // C PORTUNA İLK ZAMAN TÜM PİNLERİNİ SIFIRLADIM.
    TRISA=0xff;
    PORTA=0x00;

    // Timer0 Registers:// 16-Bit Mode; Prescaler=1:1; TMRH Preset=B1; TMRL Preset=E0; Freq=1.000,00Hz; Period=1,00 ms
    T0CON.TMR0ON = 1;// Timer0 On/Off Control bit:1=Enables Timer0 / 0=Stops Timer0
    T0CON.T08BIT = 0;// Timer0 8-bit/16-bit Control bit: 1=8-bit timer/counter / 0=16-bit timer/counter
    T0CON.T0CS = 0;// TMR0 Clock Source Select bit: 0=Internal Clock (CLKO) / 1=Transition on T0CKI pin
    T0CON.T0SE = 0;// TMR0 Source Edge Select bit: 0=low/high / 1=high/low
    T0CON.PSA = 1;// Prescaler Assignment bit: 0=Prescaler is assigned; 1=NOT assigned/bypassed
    T0CON.T0PS2 = 0;// bits 2-0 PS2:PS0: Prescaler Select bits
    T0CON.T0PS1 = 0;
    T0CON.T0PS0 = 0;
    TMR0H = 0xB1; // preset for Timer0 MSB register
    TMR0L = 0xE0; // preset for Timer0 LSB register
    INTCON.T0IF=0; // TİMER 0 KESMESİNİ SIFIRLADIK.
    INTCON.T0IE=1; // TİMER 0 KESMESİNİ AKTİF ETTİK.
    INTCON.GIE=1; // TÜM KESMELERE İZİN VER.

    // Timer1 Registers:
    // Prescaler=1:1; TMR1 Preset=45536; Freq=1.000,00Hz; Period=1,00 ms
    T1CON.T1CKPS1 = 0;// bits 5-4 Prescaler Rate Select bits
    T1CON.T1CKPS0 = 0;//
    T1CON.T1OSCEN = 1;// bit 3 Timer1 Oscillator Enable Control: bit 1=on
    T1CON.T1SYNC = 1;// bit 2 Timer1 External Clock Input Synchronization Control bit: 1=Do not synchronize external clock input
    T1CON.TMR1CS = 1;// bit 1 Timer1 Clock Source Select bit: 0=Internal clock (FOSC/4) / 1 = External clock from pin T13CKI (on the rising edge)
    T1CON.TMR1ON = 1;// bit 0 enables timer
    TMR1H = 0xB1; // preset for timer1 MSB register
    TMR1L = 0xE0; // preset for timer1 LSB register.
    PIR1.TMR1IF=0;
    PIR1.TMR1IE=1;
    INTCON.GIE=1; // TÜM KESMELERE İZİN VER.

    while(1){
    if(BUTON) PROB=1;
    else PROB=0;

    }
    }

    Programda ön değerleri yükleyerek bir adım daha çalışmasını sağladım Çok teşekkür ederim. yanlız bir noktada daha bir durum var yine senkronize bir şekilde çalışmıyor. Son şekli gördüğünüz gibi hem kod fazlalıklarınıda sildim.

    • mikrodunya dedi ki:

      if (PIR1.TMR1IF){
      PIR1.TMR1IF=0;
      TMR1H = 0xB1; // preset for timer1 MSB register
      TMR1L = 0xE0; // preset for timer1 LSB register.
      for(kontrol=0;kontrol=150;kontrol++){
      MOTOR=~MOTOR;

      Kesme içerisinde böyle bir işlem yaptırılmaz. Bir değişken tanımlayın ve ana program içerisinde o değişkenin değerini kontrol ettirin. Değişken değeri de kesme de değişsin.
      Tam olarak nasıl bir problem oluyor peki?

  13. Ali ÇETİNKAYA dedi ki:

    Problemin büyük çoğunluğu Timerlerin ne olarak kullanacağımı bilemediğimden kaynaklandı. Allah razı olsun İşiniz gücünüz rast gitsin. Çalışmamı sonlandırdım. Ben Özellikle timer kesmelerinin içindede for işlemleri yaptırdığımdan dolayı çakışıyor ve sizinde ilk tespitiniz olan timerlerin ön değerlerinin yüklemediğimden dolayı imiş. Programı yazarken sizin timer çalışmalarınız çok yardımcı oldu. Tekrar teşekkür ederim. iyi günler.

  14. Mehmet Y dedi ki:

    Bu makaleden de fazlasıyla istifade ettim. Allah razı olsun. Emeğinize sağlık..

  15. Musa dedi ki:

    Hocam saat ne kadar sağlıklı çalışır ben saat entegresi kullandığım halde 1 gecede 1 sn geri kaldi. Acaba bu şekilde yapsam da kalır mı? Herkes osilatörden sorun diyor. Sizce bir dijital masaüstü saati nasıl yapılmalıdır. Her şey tamam kodları projesi baskı devresş denemeleri. Sadece hayata geçirmek istiyorum. Fakat 1 sn benim hevesimi kırdı bir öneriniz var mı?

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s