Reset Problemi ?

Başlatan oguztkn, 01 Mayıs 2012, 20:27:18

oguztkn

Arkadaşlar yaptığım minisumo nun reset problemi var picin mclr pinini 10k ile +5volt a ve button ile de şase ye bağladım fakat program resetlenmiyor (programın başında 5 sn bekleme var onu yapmıyor).Acaba bunun sebebi nedir ?

Mucit23

#1
Reseti kapatmış olabilirsin. Hangi yazılımla yazıyorsun ve Hangi işlemciyi kullanıyorsun bilmiyorum ama Sigortalarda basic İçin MCLRE_off gibi bir komut varsa reset çalışmaz.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

oguztkn

Kullandığım dil basic pic de 16f876a sigortalarda aşağıdaki gibi
@DEVICE pic16F876A
@DEVICE pic16F876A,WDT_OFF
@DEVICE pic16F876A,PWRT_ON
@DEVICE pic16F876A,PROTECT_OFF
@DEVICE pic16F876A,XT_OSC

eksik mi var sigortalarda

Mucit23

Hayır sigortalar doğru olsa gerek...
Problem olmayacaksa yazılımını eklermisin
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

oguztkn


Mucit23

Yazılımsal olarak bir problem göremedim ben. Sadece Pause 4900 gibi bir delay kullanman yanlış. Bunun yerine for döngüsüyle bir delay yap. Pause çalıştığı zaman kesme çalışmaz.
Başka birşey aklıma gelmiyor. Bence donanıma yoğunlaş.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

16F876A kullanıldığına göre MCLR ile ilili bir sigorta ayarı olamaz.
Donanım doğru ise ki anlattın şekil doğrudur işlemcinin reset etmesi gerekir.
Belkide ediyor ama sen göremiyor olabilirsin. Bu nedenle;
Önce boş bir pin varsa ona bir led bağla (220 ohm seri direnç ile). O pini çıkış olarak ayarla.
Basla satırından evvel led pini önce Hıgh yap sonra Pause 100 sonra LOW yap sonra pause 100 şeklinde orada bir led flash'ı oluştur. Program ilk başlarken bu flash olayını görebileceksin.
Aynı şekilde reset tuşuna bastığın zamanda o flash olayını görmen gerekir.

Programda kesme kullanıldığına göre
INTCON=%10001000  ;Kesmelerin oluşması için gerekli ayarlar
on interrupt goto Kesme
komut satırlarını alta taşı ve tam olarak Basla satırından bir önceki satıra yerleştir.
Böylece kesme henüz açılmadan pause 4900 komutu ile led flashından kaynaklanan iki adet pause 100 komutlarının kesme ye olan zararlarını engellemiş olursun.
Bu şekilde bir dene ve sonucu bildir lütfen.

Ete

oguztkn

Hocam sizin dediğiniz flash olayını yaptım o zaman reset işe yarıyor acaba benim yazdığım programın nersesinde sorun var birde mucit23 arkadaşımın dediği for olayını yapamadım onu nasıl yapabilirim ?


Flaş için yazdığım program :
@DEVICE pic16F876A
@DEVICE pic16F876A,WDT_OFF
@DEVICE pic16F876A,PWRT_ON
@DEVICE pic16F876A,PROTECT_OFF
@DEVICE pic16F876A,XT_OSC
Define OSC 4     
TRISA=%00000000 
TRISB=%00000000 
TRISC=%00000000 
Option_REG.7=0   
ADCON1=7         
CMCON=7
;INTCON=%10001000         
;on interrupt goto Kesme
low PORTC.7
pause 2500
Basla: 
    high PORTC.7
    pause 100
    low PORTC.7
    pause 100
    goto basla
    end

Mucit23

For döngüsünü şu şekilde yapacaksın. Yine Delay kulanacaksın ama küçük küçük delaylar olacak.
Mesela X adında word tipi bir değişkenimiz olsun.

Sonra Aşağıdaki gibi bir komut yazalım.

For x=1 to 4900
Pause 1
Next

Bu komut dizisi Pause 1 komutunun 4900 defa çalıştırır. Her komut işlendiğinde 1 ms gecikme yarattığı için 4900ms gecikme yaratmış olursun. Tabi komut gecikmelerinide sayarsak bu süre 5Sn yi bulur.
For ile Next arasına 1 den fazla komut yazabilirsiniz.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

oguztkn

peki flash ta çalışıyor reset benim programda neden çalışmıyor olabilir ?

ete

Senin programda da reset çalışıyor acak sen fark etmiyorsun bence.

Basicde kesme oluşsa bile program o anda çalıştırdığı basic komutunu bitirmeden kesme etiketine gidemez.
Düşünsene ;
Pause 4900 komutu çalışırken süreninen başında kesme oluşsa program 4900 ms bekledikten sonra kesme etiketine gidecektir.
Halbuki bunun yerine şunları yazsan;
For I = 0 to 30000
  Pauseus 5
next
Program en fazla 5us bekleyecek kesmeye gitmek için.
Bu arada hemen belirteyim Pause 1 şeklinde kullandığın zaman program 1000us bekler kesmeye gitmek için buda uzun bir süredir işlemcilerde. Bu süreyi ms değil us olarak kullanmak en doğrusudur. Döngüyü uzatın ama Pause kullanmayın. For--Next döngüsününde komutgecikmesi olacağını hesaba katın.
Mesela, 10 ms gecikme yaratmak için vereceğiniz döngü;
For I=1 to 1000
   Pauseus 10
Next
teorik olarak hesaplarsanız 1000 x 10= 10000us = 10 ms lik süre yaratması gerekirken bu süre 15000us leri bulur. Bunun sebebi her bir for next döngüsüde bir gecikmeye sebep olur.

Ete

oguztkn

#11
peki hocam programı şu hale getirdim :

@DEVICE pic16F876A
@DEVICE pic16F876A,WDT_OFF
@DEVICE pic16F876A,PWRT_ON
@DEVICE pic16F876A,PROTECT_OFF
@DEVICE pic16F876A,XT_OSC
Define OSC 4     
TRISA=%00000000 
TRISB=%11110000 
TRISC=%00011111 
Option_REG.7=0   
ADCON1=7         
CMCON=7       
I var word
in1   var PORTB.0
in2   var PORTB.1
in3   var PORTB.2
in4   var PORTB.3
qrdA  var PORTB.6
qrdB  var PORTB.7
qrdC  var PORTB.4
qrdD  var PORTB.5
mz80  var PORTC.0
pna1  var PORTC.1
pna2  var PORTC.2
pna3  var PORTC.3
pna4  var PORTC.4

PORTB=0
PORTA=0
PORTC=0
Pause 300

Basla:
high in1
high in2
high in3               
high in4
     if mz80=0 then
       gosub ileri 
       while mz80=0       
       wend
     endif
    goto basla
ileri:
    high in1
    low  in2
    high in3   
    low  in4
    return
    end
böyleyken resetin çalışması gerekmiyor mu enerji verdiğimde 5 saniye bekliyor ve normal program çalışıyor ama resete basınca sanki low in1 low in2 high in3 low in4 yazmışım gibi davranıyor ama reset atmıyor

ete

Yazdığın programı biraz değiştirdim. Onu yükle ve yeniden dene bakalım.
PORT ları açılışta önce bir sıfırlamak gerekir. Çünki port açılırken rastgele açılır. Bazı pinler low da kalır bazıları high da kalırlar.
Bu nedenle önce portları sıfırlayıp sonra ne değer vereceksen verirsin. Bende öyle yaptım.
Koyduğun döngüsel gecikme fazlaca bekletme yapıyor. Şimdilik az bir gecikme koydum. Bu koyduğum 300 ms lik gecikmeye açılış gecikmesi denir. Mutlaka gereklidir. Bu gecikme esnasında işlemci registerlerini ayarlar ve verilmesi gerken ön yükleme değerleri verir.
Onu bir dene ve sonucu bildir bakalım.
Ete

oguztkn

programı göremedim nerden indireceğim acaba ?

ete

Kendi bir önceki mesajında yazdığın programı oradan al ve derle. Değişikliği yazdıklarınüzerinde yaptım.

Ete

Powered by EzPortal