avatar_jun

Eprom kullanımı

Başlatan jun, 03 Mayıs 2014, 12:27:40

jun

Merhaba arkadaşlar ve Ete hocam.Sizin eprom derslerinizi okuyarak bir devre yapmaya çalıştım.çalışması şu şekilde pic'e her voltaj geldiğinde sayı değişkeni bir artacak ve her sayıya göre portb den çıkış verecek.sayı artışı 3 ile sınırlı.isis similasyonunda çalışmasına rağmen devreyi yaptığımda çalışmadı sadece devamlı portb nin 0. biti çıkış veriyor.kullandığım kodlar aşagıdadır gözden kaçırdığım yada yanlış yaptığım birşeyler var ama bulamıyorum yardımcı olursanız sevinirim.

TRISA=0 
TRISB=0
CMCON=7
SAYI VAR BYTE   

READ 5, SAYI
IF SAYI=255 then
SAYI=0
Write 5, SAYI
ENDIF

IF SAYI>3 THEN
SAYI=0
Write 5, SAYI
ENDIF 

PORTA=0
PORTB=0   

'-------------------------------ANA PROGRAM ---------------------------------------------
BAS:
READ 5, SAYI
SAYI=SAYI+1 
write 5, SAYI
PAUSE 50
     
BASLA:
      IF SAYI=1 THEN
      PORTB=1
      endif
     
      IF SAYI=2 THEN
      PORTB=2
      endif
     
      IF SAYI=3 THEN
      PORTB=3
      ENDIF       
     
     GOTO BASLA            
     END                              

MS_59

Programı biraz değiştirdim sigorta ayarları ve işlemcinin çalışma frakansı tanımlı değildi onları ekledim
similasyonda çalışıyor gerçektede çalışması gerekir
işlemcinin dahili osc'si kullanıldığı için gerçekte bağlamana gerek yok

@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_Off              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
DEFINE OSC 4
TRISA=0:TRISB=0
PORTA=0:PORTB=0
CMCON=7
SAYI VAR BYTE
READ 5,SAYI
IF SAYI=255 then SAYI=1
SAYI=SAYI+1
IF SAYI>3 THEN SAYI=1
write 5, SAYI:PAUSE 10
BASLA:
   PORTB=SAYI
GOTO BASLA           
END
mehmet

jun

teşekkürler deneyeceğim

jun

Merhaba Arkadaşlar yine simülasyonda çalışıp gerçekte saçmalayan bir programla daha karşınızdayım,konu kirliliği olmasın diye buraya yazdım.Kuluçka çevirme sistemi yapıyorum zamanı geldiğinde çevir sinyali alan devremiz 3 defa döndükten 2 sn sonra durmasını istiyorum
algılamayı sınır swich i ile yaptım simülasyonda sıkıntısız çalışıyor ama devre gerçekte saçmaladı. swice 1 defa dokunduğunda bazen 2 defa dokunduğunda duruyor bazende hemen başlayıp duruyor,while wend döngüsünü de kullandım ama nafile,sigorta ayarlarını pic'e yüklerken programdan seçerek yüklüyorum,Ete hocamın anlattıklarının hepsini defalarca yapmama rağmen programın içine sigorta ayarlarını yazdığımda program derlenmiyor,belki sigorta ayarlarından da olabilir.Dosyalar aşağıdadır yardımlarınız için teşekkür ederim.

ete

Kesinlikle işlemcinin nimetlerinden yararlanmıyorsunuz.
Adam PORTB de dahili PULLUP koymuş siz PORTB yi boş bırakıp gidip girişleri PORTA ya bağlıyorsunuz.
Bir düşününbir kere bu adamlar neden yalnzıca PORTB ye dahili Pullup koymuşlar acaba diye.
Bu boşuna koyulmuş bir şey değil. ANlamı ise şu bütün giriş işlemlerini PORTB den yapın. Özellikle Buton anahtar vs gibi girişleri PORTB den yaparsanız birde bu girişlere pullup direnci bağlanmasına gerek kalmaz. Baskılı devre yaparkan bu büyük kolaylık sağlar.

Sigorta ayarı denilen ayarlar gurubunu her kes program içinde kullanabiliyor ve sen kullanamıyorsan bunun bir sebebi olsa gerek. Üzerine gidip sorunu bulmak senin açından daha hayırlı olurdu. Bunu yapmadığın için sürekli bu tür sorunlarla uğraşır durursun.

Buraya kadar nasihat aldın. Şimdi programa bakalım.
Programın yazılış mantığı çok şık değil ama çalışmaması içinde bir sebep yok.
Çevir sinyali alınca sistemin çalışması gerekir.
Manuel çevirme işlemi için daha sağlıklı kod yazmak gerekirdi. Onu ben yazayım;
       
      HIGH ROLE  'SW2 tuşuna basıldığı için buraya geldin o halde role aktif olmalı.
       PAUSE 100  '100 ms bekle en azından biraz aktif kalsın
       WHILE SW2=0:WEND  'tuşa hala basılıyor ise beklemeye devam et
       LOW ROLE                   'tuş bırakıldı o halde roleyi kapat
       PAUSE 100                  '100 ms bekle
       GOTO BASLA
    've başa dön.

Çevir kısmı için biraz daha iyi bir şey yazabilirdin.
Şöyle olabilir mesala;
CEVIR_BIR:       
        WHILE SW1=0:WEND               
        PAUSE 2000         
        SAYI=SAYI+1
        ENDIF
       
        IF SAYI=>3 THEN
          PAUSE 2000
          LOW ROLE
          GOTO BASLA
        ENDIF   
        while sw1=1:wend       
        GOTO CEVIR_BIR


Bu şekilde bir deneme yap. AMa sigorta ayarlarını mutlaka programa yerleştir. Yerleştirince nasılbir derleme hatası çıkıyor bunu açıkla birlikte çözüm bulalım.

Ete

jun

Nasihatların ve yardımların için teşekkürederim Ete abi,pek iyi olmasada bu seviyeye senin nasihat ve derslerin sayesinde geldim deneyip bildireceğim.

Powered by EzPortal