Proton Serin ve TMR0 Kesmesi

Başlatan toprak, 12 Şubat 2013, 09:28:30

toprak

Proton programlama dilinde serin komutu şu şekilde kullanılabiliyor.

SerIn GPIO.0,140,50,GIT,[Wait("MEM"),AL]

Burada GPIO.0 bilginin alınacağı bacaktır(pıc12F675)
140 Baudrate yani bilgiyi alma hızı.
50   50ms bilgiyi bekler gelmezse program GİT etiketine dallanır.
AL gelen bilginin aktarılacağı değişkendir.

Sormak istediğim şu
Programda TMR0 kesmesi kullanacağım için TMR0 sayarken en az etkilenmesi için 50 milisaniye değerini en az kaç kullanmamı önerirsiniz.
Programın akışı içinde sadece gelen bilgiye göre işlem yaptıracağım.
Yani IF AL=77 THEN
           LED=1
       ENDIF
gibi gelen bilgiye göre işlem yaptıracağım.
      Bunun gibi gelen bilgi farklı birşey olunca zaman saydırma yani TMR0 kesmesini açma ve kapama olacak.
      Serin deki Bekleme süresi TMR0 ı etkiler mi.?
      Denemeler yapacağım ama görüşlerinizi öğrenmek isterim.
      Saygılar.

     Ek olarak dahili osilator kullanacağım.
     protonda da 12f675 için pbp daki
     define osccal_1k 1                    gibi komut var mı.?
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

est32

çomak sokmak gibi olmasın da, günlerdir uğraşıyorum sorun nerede diye daha dün fark ettim ki protonda 12F serisi pic programlamada serin komutu çalışmıyor. Belki versiyon fark edebilir fakat genelde yazılımsal rs232 de hem pbp hem de proton bazı sorunlar çıkarıyor.
Yapmam gereken şey uzaktaki bir 12f675'e sadece bir veri yollayıp tek pinden çıkış alabileceğim uyduruk bir programdı ama uzun süredir çalışmadı ve hatamı bulamadım. Vaktim kısıtlı olduğundan sorunu bulmam uzun sürdü. Aynı programı pbp de yazınca program çalıştı(protonun HSERIN ve HSEROUT (donanımsal) komutlarında hiç bir sorun yok).
Daha önceki bir çalışmamda da pbp de
SerIn GPIO.0,140,50,GIT,[Wait("MEM"),AL]
komutunda belli süre aşılınca GIT etiketine gitmesi gerekirken programın sürekli aynı satırda kaldığına şahit olmuştum. Umarım pbp'nin yeni versiyonlarında bu sorun aşılmıştır.

toprak

Alıntı yapılan: est32 - 16 Şubat 2013, 15:23:22
Daha önceki bir çalışmamda da pbp de
SerIn GPIO.0,140,50,GIT,[Wait("MEM"),AL]
komutunda belli süre aşılınca GIT etiketine gitmesi gerekirken programın sürekli aynı satırda kaldığına şahit olmuştum. Umarım pbp'nin yeni versiyonlarında bu sorun aşılmıştır.

Sayın est32 cevabınız için teşekkürler.
Yalnız belirtmek istediğim birkaç şey var. Yukarıda sizin de yazdığınız Serin komutunun yazılış şekli sadece benim bildiğim proton için geçerli.
PBP de bu komut zaten sürekli bekliyor. Orada sorun olmaması lazım.
Protonun bir farkı bu. Yani serin komutu ile programsal olarak iletişim yapıyorsun ve belli bir zaman sonra sürekli programı kontrol ediyor.
Benim de sorum zaten bununla ilgiliydi.  Bu bekleme süresi ne kadar olsa iyidir.
Ayrıca 12f675 için protonda da define osccal_1k 1  gibi bir komut var mı?

Yukarıda belirttiğiniz şekilde ben bir sorun yaşamadım.
Kullandığım proton versiyonu eski bir veriyon.
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

ete

Komutun kullanım şekli hem pbp hemde proton için aynıdır. Ama maalesef bu şekil hem pbp da hemde protonda çalışmaz. Çalışmayan şey komut satırında verilen timeut denilen bekleme süresidir.
Default olarak bu süre 65535 ms dir. Mantık olarak komut satırında verilen timeout süresi kadar beklenmesi gerekiyor ama ne hikmetse bu bekleme süresi kadar yapılmıyor ve program sürekli orada veri bekler konumda kalıyor. Bu sistem usart komutlarında hiç sorunsuz çalışmaktadır.
Bu nedenlen tavsiye olarak zorda kalmadıkça serin komutunu timeout süresi ile birlikte kullanmamaya çalışın. Buna ihtiyaç var ise usart komutumolarak heserin komutunu kullanın.
Ete

toprak

   
Alıntı yapılan: ete - 17 Şubat 2013, 07:50:09
Komutun kullanım şekli hem pbp hemde proton için aynıdır
Ete

Hocam bunu bilmiyordum. Yukarıda protonda yazdığım komutu sadece proton için geçerli sanıyordum.
Timeout süresinin işlemediğini bilmiyordum.
Ben pıc12F675 kullandıgım ıcın bu devrede usart kullanamam hocam.
Ama merak ettiğim serin komutuyla ister proton olsun ister pbp olsun ikisinde de timer0 kesmesinin istikrarlı çalışma sorunu olur mu?
Protonda serin ile timer0 kesmesi kullandım. İyi çalışıyor. Ama  daha önce pbpde denerken sorun yaşamıştım . Timer0 kesmesi çalışmamıştı.
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

Maxim

forumda başka bir yerde yazdığımı buraya aktarıyorum, bilginize.

normalde çok eskiden bu komutu proton için kullanmışım
Define    OSCCAL_1K    1    ' Calibrate internal oscillator

fakat

böyle bir komuta pickit2 satın aldığımdan beri hiç gerek olmadı
hemen şimdi bir 12F675 aldım ve pickit2 ye taktım, osc cal değeri 342C

pici sildim ve tekrar okudum, osccal değeri orada duruyor 342C
sonra üzerine bir program yükledim (osccal 1k falan satırı yok)
sonra okudum halen 342C orada
sildim 342C
tekrar yükledim 342C

NOT:
pickit2 de extradan oscal değer bulucu bir özellikte var hatırlatırım
hani yanlışlıkla o değer silinse bile yeniden yaratabilirsiniz
(tools bölümü altında)

toprak

Yukarıda Serin komutunda
SerIn GPIO.0,140,50,GIT,[Wait("MEM"),AL]
140 Baudrate yani bilgiyi alma hızı.

Baudrate hesabının nasıl yapıldığını biliyorum.
Fakat forumda şöyle birşey de okumuştum.

""
Haberleşmede baund modları 4 adettir bunlar
Mode=813 , Haberleşme hızı 1200 Baud
Mode=396 , Haberleşme hızı 2400 Baud
Mode=188 , Haberleşme Hızı 4800 Baud
Mode= 84 , Haberleşme Hızı 9600 Baud
                                                              ""
İlla ki bu değerlerin kullanılması şart mı? Mesela yukarıda 140 kullanılmış.( Modulun de o baudrate değerini desteklemesi gerektiğini biliyorum.)
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

Powered by EzPortal