Komutların işlenme süresi

Başlatan ziyaretci, 07 Temmuz 2012, 21:40:33

ziyaretci

 Merhaba

Şimdi 20mhz ile çalışan bir pic te  mesela ;

For(;;)
{
 output_a(xxx); 
 if(abc>1){g3++;}
}



Yukarıdaki bir tur döngüde ne kadar zaman geçer. Nano olsun micro olsun. Bunun bir hesaplaması var mı?

veya bir if deyiminin doğru olup olmadığını ne kadar sürede kontrol eder ve diğer komutlara geçer?


Okan AKÇA


ziyaretci

 Saat yazılımı yazdım da her saniyeyi içindeki komutlarla beraber tam 1 sn olarak ayarlamak için

ziyaretci

Alıntı yapılan: gerbay - 07 Temmuz 2012, 21:49:13
hocam hardware timer ile ya da osiloskop ile ölçmek en makul olanı.. hw timer ı döngünün başında resetle, başlat, forun sonunda değerini al, daha sonra bir yerlere gönder o değeri, istediğin aralığı ölçmüş olursun.  osiloskop ile ise başta ve sonda pin toggle etmek lazım


Teşekkürler öncelikle yol gösterdiğiniz için.

Hardware timer ı ilk defa duydum. Komut filan mı ?

mozkan87

Pic16f628A ile daha önce buna benzer bir uygulama yapmıştım. Timer1'in clock kaynağını dışardan 32kHz krıstal bağladım bu şekilde yaptığım denemelerde 7-8 saatte 3-4 saniye gibi bir kayma oluyordu ama bu benim için yeterliydi. Tahminim bu kaymada kullandığım krıstalin kaltesiz olmasından kaynaklanıyordu.

ziyaretci

#5
Alıntı yapılan: mozkan87 - 07 Temmuz 2012, 21:54:47
Pic16f628A ile daha önce buna benzer bir uygulama yapmıştım. Timer1'in clock kaynağını dışardan 32kHz krıstal bağladım bu şekilde yaptığım denemelerde 7-8 saatte 3-4 saniye gibi bir kayma oluyordu ama bu benim için yeterliydi. Tahminim bu kaymada kullandığım krıstalin kaltesiz olmasından kaynaklanıyordu.


  timer1 e dışarıdan harici clock bağlayarak  onu yazılıma nasıl duyarladınız. Yani her kesme sonucu mu digit göstergelerini aktif ettiniz?



pic in normal 1000 ms  si isis programından kaynaklanan normal 1 sn  den tolerans yapar mı?


Şuanda  yaptığım saat uygulamasında normal  saniye sinyaline  %60 lık bir oran kaldığında pic
delay_ms(774);
Bunu 775 yapsam çok yavaş kalıyor 774 yapsam biraz hızlı kaçıyor.

mozkan87

#6
Bu tip hassas zaman uygulamalarında proteusa güvenmeyiniz. 16f628A'nın RB6 ve RB7 pinine saat krıstali bağladım ve timer için gerekli değerleri hesapladım ve timer kesmasini kurdum. En hassas bu şekilde yapabilmiştim. Timer1 in clock kaynağını seçebiliyorsunuz ilgili açıklama datasheette var TMR1CS bitini set ederseniz timer1 in clock kaynağı harici oluyor. Dosyaları aradım ama bulamadım. Ben hitech c ile yapmıştım.

mesaj birleştirme:: 08 Temmuz 2012, 00:28:59

Yalnız dikkat edin programın en başına 2-3 saniye gibi uzunca bir delay ekleyin eğer eklemezseniz pickit ile tekrar program atamıyorsunuz. Yani en azından ben pickit3 ile atamamıştım. Picleri algılayamıyordu, sonradan brenner ile chipleri silince düzeldiler.

pea

delay_us komutu da var.
Çok hassassa , assembly'de yazın.Ya da derlenmiş projenin asm dosyasını inceleyin , kaç komut/kaç döngü tutacağını hesaplayın.
Komutların kaç döngü tuttuğu datasheette yazıyor.

ziyaretci

Alıntı yapılan: pea - 08 Temmuz 2012, 00:32:42
delay_us komutu da var.


delay_us  komutunda 1 sn 1 000 000 micro saniye yapıyor bunuda program algılamıyor :-\

pea

Alıntı Yapdelay_ms(774);
Bunu 775 yapsam çok yavaş kalıyor 774 yapsam biraz hızlı kaçıyor.
Buna ek olarak delay_us kullanabilirsiniz diye söylemiştim.
774 ms + x us olarak.

ziyaretci

Alıntı yapılan: pea - 08 Temmuz 2012, 01:48:59
Buna ek olarak delay_us kullanabilirsiniz diye söylemiştim.
774 ms + x us olarak.


tm @pea jeton şimdi düştü Özür dilerim. Teşekkürler fikir için.