avatar_ete

PIC Basic Ders-06 (Kesme (INTERRUPT) Kullanımı)

Başlatan ete, 28 Ağustos 2011, 16:13:09

dogus

hocam şimdi datasheet'e baktım Fosc/4 yazıyormuş, son bir sorum var kesme kısmındaki komutlardaki gecikme neye göre belirlenir? basicten çıkan assembly dosyasında her komutu 1us saysak komut gecikmesini ona göre hesaplayabilirmiyiz, pratik bir yöntemmidir?

ete

Asm ye bakip hesaplayabilirsin ancak cok zor bir istir. Ben genellikle tmr1 sayacini komut oncesi sifirlar komut sonrasi degeri alir bir baska degiskene esitlerim o degisken deki deger komut gecikmesini verir.
Ete

dogus

tmr1'de fosc/4 alıyor gibi duruyor, açıkçası block diagramından pek bişey anlayamadım, ama deneyeceğim, çok teşekkür ederim yardımcı olduğunuz için

ete

Evet fosc/4 olarak alır ancak bölücülerde devrededir. 1/1 bölücü kullanırsan birerbir zamanı ölçmüş olursun.
T1CON registerinden ayarlanacak.

Ete

0nur

#19
Alıntı yapılan: ete - 03 Temmuz 2012, 17:06:59
Tmr0 kesmesi surekli sayma halinde olan tmr0 sayacinin 255 degerine ulasmasindan sonra olusur.
Tmr0 sayaci islemci yi calistiran hangi osc ise ondan puls alir. Bolme orani (option registerindedir) 1/1 alinirsa her clk plsinde bir sayar. Bolme orani 1/64 alinmis ise islemci osc sinin her 64 pulsinde bir sayar. Bu sekilde kısa surede kesme (1/1 bolme ile) ve daha uzun surede (1/256 bolme ile) kesme sureleri ayarlanabilir  Hatta tmr0 sayacina bir on yukleme degeri verilerek istenilen surede kesme yaratilebilir. Aksine bir komut vermez iseniz tmr0 normalde sifirdan saymaya baslar ve 256 ci saymada kesme olusur. Ama tmr0=200 derseniz sayma 200 den baslar ve 50 saymadan sonra kesme olusur. Sure hesabida soyle yapilir. Diyelimki islemci 4 mhz de calisiyor. Bu durumda bir komut cevrimi (yada tmr0 icin 1clk Palsi suresi 4mhz/4=1mhz ve peryot ise 1000000/1000000=1 us dir. Bu durumda 1/1 bolme oranina gore tmr0 255 sayarsa 256 us sonra kesme olusacak demektir.
1/2 bolme oranina gore 256 x 2= 512 us de kesme olusacak demektir. 1/64 bolme oranina gore ise , 256x64=16384 us de bir kesme olusacak demektir.
Herhalde artik tmr0 kesmesinin calisma mantigi anlasilmistir.
Ete

Merhaba,

PicProje sitesinde 20 msn de bir kesme oluşması için şöyle bir ifade yazmışsınız;
Alıntı YapTimer-0 kesmesini açacaksın.
Option registerinden bölme oranını 1/128 olarak ayarlayacaksın.
TMR0=115 değerini vereceksin.
Böylece her 20 ms de bir kesme oluşacak. Her kesme oluştuğunda led'in konumunu değiştirirsen istediğin olacaktır.
Unutma kesme den çıkmadan önce TMR0=115 değerini vermeyi ihmal etme.

Ete

Burada merak ettiğim 20 msn için neye göre hesap yaptınız ?

Normalde bize kesme süresini veren bağıntı

bölme oranı x 256 değeri.

Fakat burada 115 den başlat dediğiniz için benim aklıma gelen durum 115den başlayıp 256 ya kadar sayacağı için;

bölme oranı x (256-115) = kesme süresi

şeklinde.Fakat buda aynı sonucu sağlamıyor.

Denklemde bölme oranı sabit olduğuna göre;

128 x A = 20msn = 20.000us

Buradan sizin seçtiğiniz A katsayısı 156.25 gibi bir değer çıkıyor.Fakat bunun nasıl elde edildiğini anlamadım.



Birde http://www.microcontrollerboard.com/pic-timer0-tutorial.html linkine bakabilir misiniz?

Burada frekansı kullanmış fakat siz frekans peryodunu kullanmışsınız.Bir tezatlık var fakat ben anlayamadım durumu



ete

Timer hesabında sayacın kaçtan başlayıp kaça kadar sayacağı, bölme oranı , işlemci frekansı etkin rol oynar.
Verilen hesaplar 4 Mhzde yapılmıştır. İşlemci bunu kullanırken 4 e bölerek kullanır. buda her komut çevriminin 1 us olduğunu gösterir.
Şimdi hesabımızı yapalım.
Timer 115 den başlayacak o halde sayacağı miktar 256-115=141us dir. Bölme oranı 1/128 olduğu için her bir sayma işlemini 128 adet saymadan sonra sayac değeri 1 artacaktır. O ahalde 141 x 128= 18.048 us sayacak demektir. Buna yaklaşık 7 us komut gecikmesi eklenir ve toplam sonuç 18.055 olarak bulunur ki buda bu sistemin her 18 ms de bir kesme oluşturacağı anlamına gelir.
Hesabı neye göre yapmışım bende bilemedim. Ama doğru hesap budur. Bahsini ettiğin mesajı hatırlamadım yerinide bilemiyorum. Belki başka bir etken vardır ama sen yinede doğru hesabı yukarıdaki gibi yaparsın olur biter.

Hesap şeklini bir kere daha belirtiyorum. Önce 1 komut çevrimini bulacaksın. Bu işlemcinin her bir komut için harcadığı zaman birimidir. BU işlemci osc frekansının 4 e  bölünmesi ile hesaplanır. 4/4=1mHz dir. Peryod= 1/F dir. 1 burada 1 sn yeyi gösterir. Bunu us cinsinden yazarsak 1.000.000us dir. F ise OSC frekansını gösterir. Bunuda Hz cinsinden yazarsak  T=1.000.000/1.000.000=1 us dolarak bulunur.
Daha sonra bölme oranı bize o sayacın kaç adet sayma işlmeinden sonra bir artacağını gösterir. O halde sonucu bölme oranı kadar artırmalıyız. Geriye sayacın kaç kere sayacağını hesaplamak kalır. Kesme olayı sayacın değerinin 256 olması ile gerçekleşeceği için (yada 255 den sonra değeri bir artınca) başlangıç değerini 256 dan çıkarmamız gerekir.
Böylece SAYAC=256-Sayılacak değer * Bölme oranı * 1komut çevrim süresi + 7 adet komut gecikmesi bize gerçeğe en yakın

Ete



0nur

#21
Alıntı yapılan: ete - 06 Ağustos 2012, 08:48:05

Şimdi hesabımızı yapalım.
Timer 115 den başlayacak o halde sayacağı miktar 256-115=141us dir. Bölme oranı 1/128 olduğu için her bir sayma işlemini 128 adet saymadan sonra sayac değeri 1 artacaktır. O ahalde 141 x 128= 18.048 us sayacak demektir. Buna yaklaşık 7 us komut gecikmesi eklenir ve toplam sonuç 18.055 olarak bulunur ki buda bu sistemin her 18 ms de bir kesme oluşturacağı anlamına gelir.

Ete

Merhaba,

Burada 7 us komut gecikmesini eklediğinizde değer 18.048 us iken 25.048 us olması gerekmiyor mu ?


Birde önceki yazımda vermiş olduğum bağlantıda yer alan formule baktığımızda;


burada istediğimiz süreye göre F=1/T 'den bir değer buluyor.Örneğin 1 sn için frekans 1 hz çıktığında ,

                                                         Osilatör Frekansı
Genel Formülde      ----------------------------------------------------------------------     bağıntısını kullanarak Sayıcı değerini buluyor.
                                  4 * Bölme Oranı * (256-Başlangıç Değeri)* 1 Hz



Birde ders notlarınızda yer alan ifadeye baktığımızda;

Alıntı Yap1 us x 64 x 256 = 16384 us süre kullanacaktır. 1 sn = 1000 ms ve oda 1000.000 us ye esit oldugundan sayet 1.000.000 us degerini 16384'e bölersek 61 degerini buluruz. O halde her kesme oluştugunda bir baska degiskeni saydırır ve bunun degeri 61 den 62 ye geçtigi anda degerini sıfırlayıp saniye degerini bir artırırsak bir saniyelik saat palslarını yakalamıs oluruz. Bunu bir programda kullanarak da saat yapabiliriz.

Sayac hesabı yapmak için gecikme süresi değerini 1000.000 us ye bölmemiz gerekiyor.Fakat siz yukarıda

Alıntı YapBöylece SAYAC=256-Sayılacak değer * Bölme oranı * 1komut çevrim süresi + 7 adet komut gecikmesi bize gerçeğe en yakın

şeklinde ifade kullanmışsınız yani 1000000 e bölme yapmamışsınız. Fakat ders notlarında ise farklı bir durum var.

cevabınız için şimdiden teşekkür ederim.

ete

Onur,
Ders notlarını yenilerken senden editor olarak yardım isteyeceğim. Güzel inceliyorsun farkları bulmaktada üstüne yok doğrusu. Birazda yazılanlardan anlam çıkarmaya çalışsan her şey daha iyi olacak.
18048 us (18 bin 48 us) değerine 7 eklersen ne olur 48+7 gibi düşünürsen 55 bulunur ve sonuç 18.055 olur.
Bu sayıyı nereden çıkardık 141us ile 128 i çarparak elde ettik. O halde sonuç 18048 +7 = 18055 olur. Senin sonucu nerden çıkardın onu bilemem.

1000.000 ile 1.000.000 us aynı şeylerdir. Birinde nokta unutulmuş ama dikkat edersen 1 den sonra 4 sıfır var.
Her iki sayıda bir milyondur.

Ete



0nur

Alıntı yapılan: ete - 06 Ağustos 2012, 17:17:28
Onur,
Ders notlarını yenilerken senden editor olarak yardım isteyeceğim. Güzel inceliyorsun farkları bulmaktada üstüne yok doğrusu. Birazda yazılanlardan anlam çıkarmaya çalışsan her şey daha iyi olacak.
18048 us (18 bin 48 us) değerine 7 eklersen ne olur 48+7 gibi düşünürsen 55 bulunur ve sonuç 18.055 olur.
Bu sayıyı nereden çıkardık 141us ile 128 i çarparak elde ettik. O halde sonuç 18048 +7 = 18055 olur. Senin sonucu nerden çıkardın onu bilemem.

1000.000 ile 1.000.000 us aynı şeylerdir. Birinde nokta unutulmuş ama dikkat edersen 1 den sonra 4 sıfır var.
Her iki sayıda bir milyondur.

Ete

Merhaba,
Konuyu tam olarak anlamaya çalışıyorum fakat birkaç farklılık olunca benimde kafam karıştı o yüzden sormakta fayda gördüm. Çalışmalarınıza elbetteki yardımcı olmak isterim, çok ciddi güzel işler yapıyorsunuz ben ilk programlamayı sizin bu eğitim dökümanlarınız sayesinde öğrendim ve 5 yıldır birçok proje tasarımı gerçekleştirdim.Çok vakit ayıramamakla beraber bende projelerimi www.electrobotic.org adlı web sitemde yayımlıyorum.

Alıntı Yap
18048 us (18 bin 48 us) değerine 7 eklersen ne olur 48+7 gibi düşünürsen 55 bulunur ve sonuç 18.055 olur.
Bu sayıyı nereden çıkardık 141us ile 128 i çarparak elde ettik. O halde sonuç 18048 +7 = 18055 olur. Senin sonucu nerden çıkardın onu bilemem.

Ben burada sanırım 18,048'in virgülden sonraki kısmını küsürat şeklinde düşündüm sanırım o yüzden o şekilde yazdım.


Alıntı Yap1000.000 ile 1.000.000 us aynı şeylerdir. Birinde nokta unutulmuş ama dikkat edersen 1 den sonra 4 sıfır var.
Her iki sayıda bir milyondur.

Benim 1000000 e bölmekten kastım sizin SAYAC degerini yazarken
Alıntı Yap
Böylece SAYAC=256-Sayılacak değer * Bölme oranı * 1komut çevrim süresi + 7 adet komut gecikmesi bize gerçeğe en yakın

şeklinde ifade kullanmanız idi.Fakat derslerde

               1000 000
---------------------------------------------------------------------------
256-Sayılacak değer * Bölme oranı * 1komut çevrim süresi


denklemini kullanmışsınız.

Örneğin ben 50 sn de bir kesme oluşmasını istiyorum.

Bölme oranı ve timer set değerini neye göre belirlemeliyim?



Buradaki ifadeye göre ilk olarak gerekli frekansı f=1/T den hesaplıyoruz. Oda F=1000msn/50 -> F=20 Hz olarak bulunuyor.

Sonrasında bölme oranına neye göre karar vermeliyiz? Değere hangi oranla daha çok yaklaşıyorsak ona göremi belirlenmeli?
Bölme oranını 1:128 aldığımızı düşünür isek;

                                              1000.000
Counter  degeri=    --------------------------------------- = 1,52 olarak bulunuyor.
                                      128 * (256-0)* 20 hz


Siz yaptığınız hesapta ise buradaki frekans yerine 4 mhzlik bir osilatör kullanıldığını düşünülürse  F=  Fosc/4  = 1mHz = Timer frekansı olarak bulunur.Timer peryodu ise T = 1000000us/1000000hz  = 1 usn olarak bulunuyor.

Yani 4 mhzlik osilatör kullanma durumunda Timer peryodu daima 1usn diye düşünebiliriz.

Sizin  (eğitim dökümanlarındaki) kurduğunuz denklem ise;

                                        1 000 0000
Counter =   -------------------------------------------------
                  1usn x (256-BaşlangıçDeğeri)x Bölme Oranı

Yani sizin denkleme göre;

kesme süresini belirlemek için;

1usn x (256-başlangıç değeri) x Bölme oranı   -----> eşitliğini kullanıyoruz.

Sayıcı değerini bulmak için ise 1000 000 / Kesme süresi -------> eşitliğini kullanıyoruz.


Bu durumda örneğe tekrar dönecek olursak ,  50 msn için devrede 4mhz osilatör kullanıldığını varsayarsak,

Kesme süresi = 1usn x (256-Başlangıç değeri)*Bölme oranı

Bölme oranını 1/256 aldığımızda

50.000usn  = 1usn x (A) x 256

Burada 256- başlangıç değeri=A  olan A yı 195,3 =~ 195 olarak buluyoruz.Bu durumda başlangıç değerini 60 seçtiğimizde 50 msnde bir kesme oluşturabiliyoruz.

Sayıcı değeri ise derslerde yaptığınız gibi 1000000/ 50000
yaptığımızda , Sayıcı = 20 çıkıyor. Yani 20den 21 e geçtiği anda kesme oluşuyor.

Bu örnekte bir problem var mı ? Doğru mu ifade ettim bilemiyorum..

teşekkürler.




0nur

Merhaba,

Şuan istediğimiz gecikme süresine göre timer0'ın counter hesabının nasıl yapıldığını sizin dersteki hesabınız ile önceki vermiş olduğum bağlantı ile karşılaştırdığımda buldum.Ve kullanılan metod ;



Yukarıdaki denklemde ilk olarak istediğimiz gecikme süresini  F=1/T denkleminde yerine koyarak frekansı buluyoruz.

Sonrasında ise yukarıdaki denklemde Fout yerine yazıyoruz.Bölme oranı ve 256-Başlangıç değerini ona göre seçerek counter değerini bulabiliyoruz.

Örneğin sizin eğitimlerde yaptığınız uygulamadaki gibi 1 sn lik aralıklarla kesme oluşmasını istiyorsak,

F=1/T     =>  Fout= 1(sn)/1(sn)   = 1 Hz

Bulduğumuz frekans değerini

                                                Fosc
Counter =   ------------------------------------------------------------
                  4 x (256-Başlangıç Değeri)x Bölme Oranı x Fout

Denkleminde yerine yazıyoruz.Bölme oranı ve başlangıç değerini varsayımlar dahilinde kabul edip tam sayıya hangi değer ile yaklaşırsak ve değişken içerisine sığan (örn byte ise 255) onu seçmemiz en doğrusu.

Burada başlangıç değerini 0 kabul edip bölme oranında farklı değerler denediğimizde ;

1/4 için


                                              4.000.000 Hz
Counter =   ------------------------------------------------------------ = 976.5
                                       4 x (256-0)x 4 x 1Hz


1/8 için

                                              4.000.000 Hz
Counter =   ------------------------------------------------------------ = 488.28
                                       4 x (256-0)x 8 x 1Hz

1/16 için
                                              4.000.000 Hz
Counter =   ------------------------------------------------------------ = 244.14
                                       4 x (256-0)x 16 x 1Hz

1/32 için
                                              4.000.000 Hz
Counter =   ------------------------------------------------------------ = 122.07
                                       4 x (256-0)x 32 x 1Hz

1/64 için
                                              4.000.000 Hz
Counter =   ------------------------------------------------------------ = 61.03
                                       4 x (256-0)x 16 x 1Hz

1/128 için
                                              4.000.000 Hz
Counter =   ------------------------------------------------------------ = 30.5
                                       4 x (256-0)x 128 x 1Hz

1/256 için
                                              4.000.000 Hz
Counter =   ------------------------------------------------------------ = 15.2
                                       4 x (256-0)x 256 x 1Hz


Yukarıda 1:4 ile 1:256 bölme oranları için tüm sayıcı değerleri hesaplandığında görüldüğü gibi tam sayıya en yakın sonuç 1:64 de elde ediliyor.Elbette diğerlerindede başlangıç değeri ile oynanarakta ayarlamalar yapılabilir.

Anladığım durumu kabaca özetlemeye çalıştım, yardımlarınız ve yayınlarınız için teşekkür ederim.



ete

#25
Bu gibi konularda daha pratik olmak gerekir. Kimse oturup o kadar formülle uğraşmaz. Sen uğraşırım diyorsan lafım yok uğraş.
En pratik yöntem her zaman söylerim PicMultiCalc.exe isimli programı kullanmak. Yok onu kullanmam dersen, yine pratik metodu örnekle açıklayayım.

diyelimki 5 sn de bir kesme yaratacağım. 5sn= 5.000 ms = 5.000.000us dir. İşlemci 4 Mhz de çalışıyor ise her bir komut çevrimi 1us olduğuna göre önce bölme oranını bulmalıyım ve hangi timer'ı kullanacağımı (8 bit yada 16 bit) tespit etmeliyim.
TMR0 için en büyük bölme oranı 1/256 idi. 5.000.000'u 256 ya bölersem  19531 elde ederiz. Çıkan rakam 8 bitten büyük bir raka m olduğu için 8 bit timer kullanamam. O halde 16 bitlik TMR1 sayacını kullanmalıyım.
Bu sayacın en büyük böleni ise 16 dır. O halde 5.000.000 /16 = 312500 elde ederiz. Bu rakamda 16 bitden büyük olduğu için bir tedbir almadan 5 sn de bir kesme yaratılması imkansızmış diyebiliriz. Peki ne yapmalıyız o zaman, ikinci bir sayac daha kullanmak gerekir. Bu yöntemi saat projelerinde kullanmış idik.
Ama benim amacım direk kesme yaratabileceğim bir zaman süresi bulmak. Bu durumda 5 sn den vaz geçelim ve 1 sn de bir kesme oluşturmaya çalışalım.
1.000.000/16=62500 çıkıyor.  Ohalde ben 62500 * 16= 1.000.000 us sayarsam her 1 sn de bir kesme oluştururum demektir bu.
Peki 62500 saymak için sayacımı kaçtan başlatmalıyım hesabı gayet kolay 65536-62500=3036 eder. Şayet komut gecikmelerinide hesaba sokarsam sayacım (65535- 3036)*16+7= 1.000.007 sayacaktır. Bu ise sonucu pek fazla değiştirmez sanırım. Bölme oranınıda 1/16 alırsam işlem tamam demektir.
Ben böyle yapıyorum. Bir sürü formüle hiç gerek yok.
Bakalım PicMultiCalc bu işe ne diyor. 1/16 bölme oranı ile sayac başlama değeri 3036 olarak vermiş. Hata oranı ise %0,001 olarak verilmiş. KOmut gecikmesini kaldırrısan oran yinede pek değişmiyor.
Ete

0nur

Merhaba,

Dün forumda gezinirken bahsettiğiniz program ile karşılaştım ve gerçektende çok pratik birçok konuda kullanılabilecek iyi bir program.Benim bu konuyu bu kadar irdelememin sebebi ise, yaptığım çalışmanın mantığını anlarsam ileriki projelerde daha rahat çözüme ulaşabilir ve projenin geliştirilmesi noktasında daha hakim çalışmalar gerçekleştirebileceğimi düşünmem idi.

İnternetteki kaynaklar ve sizin örneklerinizle konuyu anladım.

teşekkürler

0nur

Merhaba,

Ders içeriğinde vermiş olduğunuz saat&röle uygulamasını incelerken şöyle birşey dikkatimi çekti.

Normal zaman saati sistemin çalışması ile başlıyor.Röleler için çalışan saat için sn den örnek vermek gerekirse sistem saati sıfırlandığı gibi röle saatide sıfırlanıyor.Bu durumda;

KESME:
      SAYAC=SAYAC+1  'kesme sayacı  1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme)
      IF SAYAC=61 then  '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us)
         SAYAC=0        'sayaç sıfırlanıyor
         SN[0]=SN[0]+1
         IF ROLE=0 then ATLA
         SN[ROLE]=SN[ROLE]+1        'saniye değeri bir artırılıyor
         
         
         
ATLA:    IF SN[0]=60 THEN  'saniye 60 olmuş ise 1 dakika süre geçti ohalde
               SN[0]=0
               SN[ROLE]=0        ' saniye sıfırlanıyor
               DAK[0]=DAK[0]+1
               DAK[ROLE]=DAK[ROLE]+1   ' dakika değeri bir artırılıyor
                  IF DAK[0]=60 then   'dakika 60 olmuş ise 1 saat süre geçti
                     DAK[0]=0
                    DAK[ROLE]=0         ' dakika sıfırlanıyor
                     SAAT[0]=SAAT[0]+1
                     SAAT[ROLE]=SAAT[ROLE]+1   ' saat değeri bir artırılıyor
                        IF SAAT[0]=24 THEN  'saat 24 olmuş ise 1 gün geçti
                           SAAT[0]=0
                           SAAT[ROLE]=0        'saat sıfırlanıyor
                           GUN=GUN+1     'gün değeri bir artırılıyor
                              IF GUN=365 THEN GUN=0  'gün 365 olmuş ise
                        endif                    'gün sıfırlanıyor 1 yıl geçti
                  ENDIF
            ENDIF
         ENDIF
         INTCON.2=0        'TMR0 Kesme bayrağı sıfırlanıyor
         RESUME
         ENABLE

yukarıdaki kodda kalın ile işaretlediğim yerlerden kaynaklanıyor.Onları ayrı bir IF döngüsünde değerlendirmek gerekmiyor muydu?

Birde

Alıntı YapHesaplanan degerden 4 çıkartır isek bize 1-4 arası degeri verir. Ancak ya deger 0 (sıfır) ise. Bu durumda 0-4 bize 65531 gibi bir deger verirki buda sistemin hata yapmasına sebep olur.

ifadenizde yer alan 0-4 arası 65531 gibi bir değer verir demişsiniz bunun sebebi nedir?

teşekkürler.

ete

Saniye sıfırlandığında saniye röleside sıfırlanacak ise onu ayrıca bir if döngüsüne bağlamak gereksizdir.
Aynı şeyi dakika ve saat içinde söyleyebiliriz.

Bir word değişkeni basic de işaretsizdir. Yani eksi değer alamaz demektir bu. O halde alabileceği değerler 0-65535 arasındadır.
Değeri sıfır olan bir değişkenden çıkarma yaparsanız otomatikman değeri 6553x değerine döner.
Daha basit anlatmak gerekir ise değeri sıfır olan bir word değişkeninden bir çıkartırsanız değeri 65535 olur.
2 çıkartırsanız 65534,  3 çıkartırsanız 65533 , 4 çıkartırsanız 65532 olur.

Normal matematikte bu değerler yerine -1, -2, -3, -4 gibi değerler alır değişken ama PBP da değişkenler işaretsiz olduğu için bir döngü gibi 0-65535 arasında döner durur. Değeri 65535 olan bir değişkene 1 eklerseniz değeri sıfır olur. 2 eklerseniz değeri 1 olur. Bunun gibi döngüden bahsediyorum.

Ete

Sormaya çalıştığın şey bu idi sanırım.


0nur

Alıntı yapılan: ete - 09 Ağustos 2012, 08:00:52
Bir word değişkeni basic de işaretsizdir. Yani eksi değer alamaz demektir bu. O halde alabileceği değerler 0-65535 arasındadır.
Değeri sıfır olan bir değişkenden çıkarma yaparsanız otomatikman değeri 6553x değerine döner.
Daha basit anlatmak gerekir ise değeri sıfır olan bir word değişkeninden bir çıkartırsanız değeri 65535 olur.
2 çıkartırsanız 65534,  3 çıkartırsanız 65533 , 4 çıkartırsanız 65532 olur.

Normal matematikte bu değerler yerine -1, -2, -3, -4 gibi değerler alır değişken ama PBP da değişkenler işaretsiz olduğu için bir döngü gibi 0-65535 arasında döner durur. Değeri 65535 olan bir değişkene 1 eklerseniz değeri sıfır olur. 2 eklerseniz değeri 1 olur. Bunun gibi döngüden bahsediyorum.

Ete

Sormaya çalıştığın şey bu idi sanırım.

Evet bu bahsettiğiniz durumu anladım.


Alıntı YapSaniye sıfırlandığında saniye röleside sıfırlanacak ise onu ayrıca bir if döngüsüne bağlamak gereksizdir.
Aynı şeyi dakika ve saat içinde söyleyebiliriz.
Fakat benim saniye konusunda söylemek istediğim şu idi; mesela ana saatin saniyesi 20 iken röle1 i çalıştırdık.Ana saatin saniyesi 60 olduğunda röle1 inki 40 olacak ve ana saatin saniyesi sıfırlanıp dakikası 1 artarken rölenin saniyesi 40 iken sıfırlanacak bu durumdan bahsetmiştim.

Powered by EzPortal