26 Mayıs 2018, 04:33:25

Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d


Tips

Başlatan Pyrodigy, 14 Şubat 2018, 21:42:56

Pyrodigy

Merhaba Forumdaşlar;
Yaşadığım bir problem ve çözümü hakkında paylaşımda bulunmak istedim.
CCS de Delay fonksiyonunu hepimiz biliyoruz. ms ve saykıl gecikmeler yapabiliyoruz. Mümkün olduğunca bu fonk. kullanmayın. Hatta hiç kullanmayın.
Herşey yolunda gözüken program @Allegro hocamın önerdiği elektromanyetik röle testinde programın kilitlenmelerine yol açtı. Basit sayaçlar ile yaptığım aynı gecikmelerde ise hiçbir sıkıntı yaşamadım.
Bilginize
Not: Programınız bittikten sonra test için; bobini yük çeken bir röleyi işlemcinize yakınlaştırarak aynı besleme ile bobini sürekli tetikleyerek işlemcinizi gözlemleyin.
Sevgi ile kalın
Persistance is the name of the game in this business....

ibrahim96

Sorunun çözümü olan kodları paylaşırmısınız

izturk

Test yontemini anlayamadim. Biraz aciklayabilirmisin. Bobini yuk ceken derken kontaklarina mi yuk baglayacaz.
Kartla bobini ayni kaynaktan mi besleyecez

OptimusPrime

ne alakasi var, diye dusundun mu?
delay fonksiyonu ne kadar nop eklersem bu gecikmeyi elde ederim diye calismiyor mu? nasil oluyorda bu fonksiyon islemcini gurultude tikiyor? senin islemci normaldede tikaniyor olabilir mi?

Pyrodigy

15 Şubat 2018, 00:36:25 #4 Son düzenlenme: 15 Şubat 2018, 00:39:21 Pyrodigy
Alıntı yapılan: izturk - 14 Şubat 2018, 22:56:11
Test yontemini anlayamadim. Biraz aciklayabilirmisin. Bobini yuk ceken derken kontaklarina mi yuk baglayacaz.
Kartla bobini ayni kaynaktan mi besleyecez

Elbette
Bobini kalın bir röle bul, rölenin bobinlerine birkaç metre kablo bağla. Bobinlerini Çalışan Sistemin beslemesine sürekli temas ettir, Röle işlemciye yakın olsun. Şenliği seyret.
Sistemin Doğrudan 5 volt besleme ise işlemcin zarar görebilir dikkat et. 12V beslemeli sistem daha sağlıklı gözlemleniyor.

Alıntı yapılan: OptimusPrime - 14 Şubat 2018, 23:05:20
ne alakasi var, diye dusundun mu?
delay fonksiyonu ne kadar nop eklersem bu gecikmeyi elde ederim diye calismiyor mu? nasil oluyorda bu fonksiyon islemcini gurultude tikiyor? senin islemci normaldede tikaniyor olabilir mi?

C.1.Düşündüm ve çok şaşırdım.
C.2.evet öyle olması gerekirdi.
C.3.Bende anlamadım.
C.4.İlk yazdıklarımı tekrar oku.
Not: Test basit denemesi bedava
Persistance is the name of the game in this business....

OptimusPrime

dusundun, cok sasirdin, isin icinden cikamayinca delay fonksiyonuna faturayi kesip gonderdin, gibi geliyor bana. anlattiklarina bakilirsa. oyle bir denk gelmis sansa duzeltmis olabilirsin.

Pyrodigy

Alıntı yapılan: OptimusPrime - 15 Şubat 2018, 01:23:30
dusundun, cok sasirdin, isin icinden cikamayinca delay fonksiyonuna faturayi kesip gonderdin, gibi geliyor bana. anlattiklarina bakilirsa. oyle bir denk gelmis sansa duzeltmis olabilirsin.

Sana nasıl geldiği kimin umurunda. Ben tecrübemi yazmışım. Elektromanyetik Gürültüde kodunu test etmek isteyen eder. Sen etmez çalıştığı şekilde yürür gidersin.
Persistance is the name of the game in this business....

OptimusPrime

dusundun, sasirdin, sende anlamadin (C1, C3) ama tecrube olarak yazdin. olsun, iyi yapmissin canim ellerine saglik.  ;D
sinirlenmeye gerek yok. ;)

cetin1990

15 Şubat 2018, 02:53:08 #8 Son düzenlenme: 15 Şubat 2018, 02:58:56 cetin1990
Elektromanyetik Gürültüde kilitlenme donanımsal oluyor. Kod ile düzeltmek keşke mümkün olsa? Watchdog da işe yaramıyor.

1 ay kadar önce bahsetmiştik latch up denen olay. Delay yerine başka fonksiyon yazmakla düzelmezzz!

Pyrodigy

Alıntı yapılan: OptimusPrime - 14 Şubat 2018, 23:05:20
ne alakasi var, diye dusundun mu?
delay fonksiyonu ne kadar nop eklersem bu gecikmeyi elde ederim diye calismiyor mu?

Sorduğun soru bilginin ne kadar engin olduğunu kanıtlıyor. Senin anladığın dilden cevap veriyorum. Daha önce led yakmaktan başka bir program yazdığını zannetmiyorum ama al bir röle ile deneme yap. Röleyi nasıl kullanacağını bilmiyorsan İstanbul Bostancıdayım özelden telefon vereyim gel öğreteyim sana evlat.
Persistance is the name of the game in this business....

RaMu

Bencede şansa düzelmiş,
problemin veya çözümün
delay fonksiyonuyla alakası olması çok düşük.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

cetin1990

15 Şubat 2018, 03:00:36 #11 Son düzenlenme: 15 Şubat 2018, 03:05:34 cetin1990
Kilitlenmeyi biliyoruz. Görüyoruz.ispata gerek yok. Röle, trafo, bobin.. biz de başarıyla kilitleyebiliyoruz.

Çözüm nedir? Delay yerine  bin tane nop yazmak çözmez ki.

Eminseniz sorunlu kodu ve çözümlü kodu paylaşın. İnceleyelim.

Pyrodigy

15 Şubat 2018, 04:00:15 #12 Son düzenlenme: 15 Şubat 2018, 05:54:40 Pyrodigy
delay fonksiyonu ne kadar nop eklersem bu gecikmeyi elde ederim diye calismiyor mu?  diye soran arkadaş iyi okusun.
Burada CCS gibi bir derleyicinin bug ıını felan bulma gayreti içinde değilim. Ayrıca kimseye birşey ispat etmek durumunda hiç değilim. Sadece bir tecrübe paylaşmak istedim ama belliki bu yazdıklarım CCS ye laf kondurmayan veya birşeyler ispat etmek isteyen arkadaşların ağırına gitmiş:) İyi veya kötü bir tecrübeden faydalanıp testi denemek yerine klavye başında ahkam kesen bu tipler malesef elektroniğe başlamamı sağlayan bu foruma hiç yakışmıyor.
Ayrıca Şans ile hiç program çalıştırmadım. Böyle birşey nasıl oluyor onada inanmam. Şans ile program yazıldığına inannan tipler uzak dursun...

Neyse sıkıntının kaynağını merak edenler için uzun lafın kısası gelelim varsaydığım CCS nin otomatik gecikme alt programına,

CCS de İki farklı Gecikme kodu her ikiside 20 ms ( Yorumlar kodların içinde)
1.si CCS nin kendi otomatik gecikme fonksiyonu;
Kod Seç


.................... #use delay(internal=16MHz) // Delay_ms() fonksiyonu ile derleyici tarafından tasarlanan Alt Program
058F:  MOVLW  20
0590
:  MOVWF  05
0591
:  MOVLW  68
0592
:  MOVWF  04
0593
:  MOVF   00,W
0594
:  BTFSC  03.2
0595
:  GOTO   5A4
0596
:  MOVLW  05
0597
:  MOVWF  78
0598
:  CLRF   77
0599
:  DECFSZ 77,F
059A
:  GOTO   599
059B
:  DECFSZ 78,F
059C
:  GOTO   598
059D
:  MOVLW  2E
059E
:  MOVWF  77
059F
:  DECFSZ 77,F
05A0
:  GOTO   59F
05A1
:  GOTO   5A2
05A2
:  DECFSZ 00,F
05A3
:  GOTO   596

....................    delay_ms20 );// İle Delay_ms() alt program çağırılıyor. 
058C:  MOVLW  14
058D
:  MOVLB  01
058E
:  MOVWF  38



diğeri basit ve sade kullanıcı tanımlı yani benim tanımladığım bir delay

Kod Seç

....................    for(DUMMYSAYAC=0;DUMMYSAYAC!=8000;DUMMYSAYAC++){;}// 16MHZ -> 8000 x 0,25 ins.cy = 20 ms DELAY 
0C6C:  MOVLB  01
0C6D
:  CLRF   32
0C6E
:  CLRF   31
0C6F
:  MOVF   31,W
0C70
:  SUBLW  40
0C71
:  BTFSS  03.2
0C72
:  GOTO   477
0C73
:  MOVF   32,W
0C74
:  SUBLW  1F
0C75
:  BTFSC  03.2
0C76
:  GOTO   47B
0C77
:  INCF   31,F
0C78
:  BTFSC  03.2
0C79
:  INCF   32,F
0C7A
:  GOTO   46F


Şimdi bu Disassembly list i neden paylaştın diyecek olursanız. İşte Burada ASM + PIC16 ve PIC18 mimarisi devreye giriyor. ASM de 1K üzeri Programı olan 16F lerden başlamak üzere, 16F MIDRANGE ki bu benim şu an kullandığım ve 18F lerde KESMElerde, bol STACKlı alt program çağırmalarında VEKTOR ler, PAGE ler arası ve varsa BANK lar arası uzun dallanmalarda kesinlikle goto komutu tavsiye edilmez. Onun yerine branch komutu yani BRA kullanılır. Goto ile hata mesajı almaksızın programın 8 bit üzeri adres yollarında farklı saçma sapan yerlere dallanması muhtemeldir.
Bir diğer önemli husus ise yukarıda saydığım durumlarda Alt Program çağırmaları mutlaka CALL, LCALL , CALLW gibi Komutlar ile yapılır.
Zor koşullarda Besleme gerilimi ani düşüş/yükseliş eğilimlerinde aynı anda yukarıda saydığım durumlar esnasında program dallanmalarında, alt program çağırım ve geri dönüşlerde doğru komut çalışmaz ise problem yaşanmayacağını kim garanti edebilir ? ASM yazarken 16f midrange ve 18F lerde asla goto kullanmadım. Tüm Listeyi incelediğimde goto lar Page ve Vektör değişikliğinden sonra opcode adresi kısaltılarak dallanmış. Alt program çağırmalarında Call kullanılmış ama delay fonksiyonunda böyle bir komut yok. Call komutu çağrıldığında stack bilgisini hafızada tutar, return ile geri döndiğinde çağrıldığı yere sağlıklı dönüşünü sağlar.
Son olarak; ilk yazımda çalışan denenmiş, bilgisayar ortamında ve çeşitli iç/dış ortamlarda test edilmiş, (defalarca simüle edildiğinden bahsetmiyorum bile) programım, kendi beslemesiyle yoğun elektromanyetik gürültüye maruz kalmasından doğan sorunun delay fonk. kullanmayarak çözdüğümden bahsettim.
CCS nin delay fonk. hatalıdır diye bir iddiam yok, hiç te olmadı. Kodlarını Bu test ile denemekte herkes özgürdür.
Persistance is the name of the game in this business....

esensoy

Yoğun elektronik gürültüde o işlemcinin çalışacağını kim söyledi ki size?
En tehlikeli an "zafer" anıdır.

Pyrodigy

Onu Şans ile kod çalıştıranlara sormak lazım.
En zor koşulda çalışması için kod yazılır. Yok yazdım çalışıyo yeterli diyende var elbette. Onlara lafım yok.
Persistance is the name of the game in this business....