[size=12]Programlamada Acil Yardım...[/size]

Başlatan laydinata1, 13 Ekim 2005, 20:01:31

laydinata1

Arkadaşlar yardım ederseniz sevinirim, sürmem gereken 4 transistör var. Bunlar sırasıyla 1. transistör 1 sn. sonra 2. transistör 1 sn sonra tekrar 1. transistör ve 1sn sonra 3.transistör sürülecek (basamak 1) 2 sn sonra tekrar 1.transistör tekrar sürülecek bu işlem (basamak 1) 39 defa yapıldıktan sonra 4.transistör sürülecek ve işlem bitecek. Tekrar en başa dönecek. Fakat transistörlerin sürülmeside en az 1 sn gerçekleşecek. Yardımlarınız için şimdiden teşekkürler...

voltito

Meraba!  Sitede gezerken senin sonunla karşılaştım; bi bakayım dedim. Sorununu çözmenin çok basit birkaç yolu var... Burada sa biraz bahsadicem, gerkli hesaplamaları artık kendin yaparsın. Şuan sana saceca nasıl kontrol edebileceğin hakkında biraz bilgi verecem gerisi sana ait... Kullanacağın devre konusunda çok geniş seçeneğinvar:

  Mesela en basit 16F84(A) entegresi yada 16F628 olabilir. (Neredeyse bütün PIC entegrelerinde çalışır...)

  Anladığım kadarıyla PIC ile pekte aran yok diye düşünüyorum oyüzden çook basit anlatıcam... İlk aklıma gelen (tek bir PIC chipi kullanarak yapman) mantığı aşırı basit ama bira uğraşmak gerektiren bir program yapman. (not: Eğer uyarlama yapmazsan program; açılır açılmaz bu işi yapacak, işini daha iyi görmesi için mutlaka değişiklik yap. Zaten gerekli değişiklileri yapmadan çalışmaz (KOPY/PASTE ile yaparsan) ).
Assenbly dilini kullandınığı umarak başlayalım:



  İlk önce çıkışları ayarlaman lazım, ben kolay olsun diye "b" portunu kullanacam... (programı direk can alıcı noktadan yazacam sen istediğin gibi kullanırsın)
__________________________________________

PROGRAM

    INCF      ASAMA, F
    MOVF     ASAMA, W
    ANDLW   B'00111111'    ;artık nekadar aşaması varsa okadar genişlet)
    CALL     TABLO
    MOVWF  PORTB             ; çıkış sayı sı nedeniyle portb yi seçtim)  
    CALL     SYN
    GOTO    PROGRAM

TABLO

    ADDWF  PCL, F
    RETLW   B'XXXXXXXX'   ; "X" yerine artık hangi transistöre akım vereceksen "1" yap diğeleri "0"
    RETLW   B'XXXXXXXX'   ; Bir sonraki durumda ne yapacağını yaz
    RETLW   B'XXXXXXXX'   ; Bir sonraki durumda ne yapacağını yaz
    RET...
    ...
    .
;Buraya kekadar aşama koyacaksan yaz

    CLRF     ASAMA
    GOTO    PROGRAM

SYN
;Buraya klasik bir gecikme programı yazacaksın... AMA kodların çalışması için geçen süreyi hesapyayıp ona göre hazırlamalısın yoksa zamanl ilgili işin olmaz (unutma kullandığın osilatörün 4 te birinde geçekleşir bu bir işlem süresine denk gelir) goto, call, retlw, return, decfsz (eğer register içindeki değer "0" ise  komutu 2 işlem süresi ister (kı

    END
;______________________________________________

İşin sorduğun tarafının bukadar olduğunu düşünüyorum

  İkinci olarak; eğer "ben saymakla uğraşmak istemiyorum diyorsan bir devreye daha ihtiyacaın olacak en basit "LM555" entegresi var yada kendin birtane yap yada başka enterede olur amaç 1 snlik osilatör takman)
SYN başlığı altına yazacağın stripti bunla geğiştir:
__________________________

SYN
   BTFSX    PORTY, Z ; "Y" yerine artık hangi portu kullanacaksan onu yaz
                               ; "X" yerine "1" demi "0" damı ilerleyeceğini yaz
                               ; "Z" yerine hangi bacağı kullanacksan
   GOTO     SYN
   RETURN
__________________________________



(not:kullanacağın enteğreye ve bacağa dikkat et anolok olarak çalışıyorsa hep hendini "1" görür...)
--------------------
Çok aşırı basit bir devre; niye bukadar uzattım diye kendime kızıyorum ama işine yarayacaksa ne ala...

  Ama eğer senin sorunu yanlış anladıysan ve binary olarak transitörleri sürmek istiyorsan yukarıda "ASAMA" diye yazdığım adresi "MOVLW PORTX" olarak geğişti (x yine kendin yazamn için)
  Gözümden kaçan yazım hatası olduysa kusuruma bakmayın prgramı ve yazıyı kontrol edemediğim için üzgünüm :cry: ( İstediğin herşeyi yazdığımı umarak iyi şanslar direrim .)

laydinata1

Selam mesajını yeni gördüm ağımda sanırım bir sorun vardı. İlk olarak pic le aram eskiden vardı şu sıralar ne dökümanım var nede başka kaynağım işin aslı evden uzağım programını deneyemedim ama eminim çalışır. Eğer mümkün olursa senden yeni bir ricam var ben picle zamanlama yapmak istiyorum bu mümkün müdür? Yapmam gereken yine aynı şekilde 4 rolem var ilk olrak 1. role 2 dakika sonrada 2. roleyi sürmem gerek fakat bu arada 3 ve 4. rolenin de bu 2 dakika içersinde 8 tur yapması gerek. Bu tur 13 sn 3 role sürülecek daha sonra da 1 sn ile 4 role bu bir tur yapacak 8 defa bu işlem tekrarlandıktan sonra 1 role bırakcak ve 2. role sürülecek ve tekrar olay başa dönecek şimdiden ilgin için sağol...İyi çalışmalar...

OG

Arkadaş yapmak istediğin çok basit bişey ama time durumları tam net yazılmamış.

Sen şöyle yazarsan daha kolay anlaşılır ve hemen çözüm gelir.

Başla
R1=1 R2=1 R3=0 R4=1
x saniye bu durumu koru sonra
R1=1 R2=0 R3=0 R4=1

gibi. Yani başlattık, R1, R2, R4 ü yaktık. x saniye sonra R2 yi söndürdük şeklinde alt alta yazarsan hemen çözüm bulursun.

Zaten aslında böyle yaptığında programı yazmış sayılırsın.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.