Şimdi Ara

PIC 16f84A geciktirme komutu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
30
Cevap
0
Favori
6.358
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • arkadaşlar ben PIC de bir program yazıcam iki komut arasında 1-2sn gibi bir süre beklemesini istiyorum nasıl olucak??
    PIC16F84A kullanıyorum 4mhz de çalıştırıyorum biraz gecikme olsun diye saçma sapan gereksiz satırlar eklemeyi denedim ama olmuyor PIC in hepsini hemen bitiriyor ve ben en son işlemi görüyorum...
    mesela sırayla ledleri yakmam gerekiyor ama enerjiyi verdiğim an hemen en son led yanıyor iki komutun arasına geciktirme komutu koyarsam sanırım sorun çözülür(geciktirme komutu diye birşey var mı bilmiyorum)
    1-2 sn bekleme için ne yapabilirim??



  • Hangi dil ?
  • timer kullan. boşu boşuna pic gecikecem diye bir rutinde dönüp durmasın bu arada başka işlemlerde yapsın mesela...
  • junior sanırım JDM Programmer yazıyo mpasm de derliyorum
  • Assembly de 3 döngülü gecikme yapabilirseniz 1 sn gibi süreler durabilirsiniz.Yapamazsanız yardımcı olmaya çalışırım.
  • GECIKME 
    MOVLW H'FF'
    MOVWF SAYAC3
    DONGU3
    MOVLW H'FF'
    MOVWF SAYAC1
    DONGU1
    MOVLW H'FF'
    MOVWF SAYAC2
    DONGU2
    DECFSZ SAYAC2,F
    GOTO DONGU2
    DECFSZ SAYAC1,F
    GOTO DONGU1
    DECFSZ SAYAC3,F
    GOTO DONGU3
    RETURN


    yukardaki asm için verilmiş gecikme döngüsüdür MOVLW 'FF' değerini değiştirerek gecikme zamanını degiştirebilrsiniz bu haliyle ne kadar gecikme saglar derseniz 256x256x256=16.777.216 işlem yapar eğer senin microişlemcin 4 MHz de çalışıyorsa bu sn de 4.000.000 işlem demektir 16777216/4000000=4.19sn gecikme yapar
  • quote:

    Orjinalden alıntı: coskun72

    GECIKME 
    MOVLW H'FF'
    MOVWF SAYAC3
    DONGU3
    MOVLW H'FF'
    MOVWF SAYAC1
    DONGU1
    MOVLW H'FF'
    MOVWF SAYAC2
    DONGU2
    DECFSZ SAYAC2,F
    GOTO DONGU2
    DECFSZ SAYAC1,F
    GOTO DONGU1
    DECFSZ SAYAC3,F
    GOTO DONGU3
    RETURN


    yukardaki asm için verilmiş gecikme döngüsüdür MOVLW 'FF' değerini değiştirerek gecikme zamanını degiştirebilrsiniz bu haliyle ne kadar gecikme saglar derseniz 256x256x256=16.777.216 işlem yapar eğer senin microişlemcin 4 MHz de çalışıyorsa bu sn de 4.000.000 işlem demektir 16777216/4000000=4.19sn gecikme yapar

    Hesabın doğru olduğunu emin misiniz?
    (Bilmediğim için soruyorum.)




  • Yapay Zeka’dan İlgili Konular
    Arduino Serial Print Sorunu
    2 yıl önce açıldı
    Digital clock 16f877
    18 yıl önce açıldı
    Daha Fazla Göster
  • quote:

    Orjinalden alıntı: coskun72

    GECIKME 
    MOVLW H'FF'
    MOVWF SAYAC3
    DONGU3
    MOVLW H'FF'
    MOVWF SAYAC1
    DONGU1
    MOVLW H'FF'
    MOVWF SAYAC2
    DONGU2
    DECFSZ SAYAC2,F
    GOTO DONGU2
    DECFSZ SAYAC1,F
    GOTO DONGU1
    DECFSZ SAYAC3,F
    GOTO DONGU3
    RETURN


    yukardaki asm için verilmiş gecikme döngüsüdür MOVLW 'FF' değerini değiştirerek gecikme zamanını degiştirebilrsiniz bu haliyle ne kadar gecikme saglar derseniz 256x256x256=16.777.216 işlem yapar eğer senin microişlemcin 4 MHz de çalışıyorsa bu sn de 4.000.000 işlem demektir 16777216/4000000=4.19sn gecikme yapar

    saol dediklerini deniycem şimdi




  • SAYAC1 SAYAC2 SAYAC3 NE OLUYOR?? sanırım bunlara hata verdi

    Error[113] H:\UYGULAMALAR\1.ASM 11 : Symbol not previously defined (SAYAC3)
    Error[113] H:\UYGULAMALAR\1.ASM 14 : Symbol not previously defined (SAYAC1)
    Error[113] H:\UYGULAMALAR\1.ASM 17 : Symbol not previously defined (SAYAC2)
    Error[113] H:\UYGULAMALAR\1.ASM 19 : Symbol not previously defined (SAYAC2)
    Error[113] H:\UYGULAMALAR\1.ASM 21 : Symbol not previously defined (SAYAC1)
    Error[113] H:\UYGULAMALAR\1.ASM 23 : Symbol not previously defined (SAYAC3)
  • Programın başına

    SAYAC1 EQU h'20'
    SAYAC2 EQU h'21'
    SAYAC3 EQU h'22'

    yazınız
  • arkadaşlar kodu kullanmaya çalıştım ama beceremedim heralde
    	list p=16f84A 
    include "P16F84A.inc"
    SAYAC1 EQU h'20'
    SAYAC2 EQU h'21'
    SAYAC3 EQU h'22'
    CLRF PORTB
    BSF STATUS,5
    CLRF TRISB
    BCF STATUS,5
    MOVLW b'01101111'
    MOVWF PORTB
    GECIKME
    MOVLW H'FF'
    MOVWF SAYAC3
    DONGU3
    MOVLW H'FF'
    MOVWF SAYAC1
    DONGU1
    MOVLW H'FF'
    MOVWF SAYAC2
    DONGU2
    DECFSZ SAYAC2,F
    GOTO DONGU2
    DECFSZ SAYAC1,F
    GOTO DONGU1
    DECFSZ SAYAC3,F
    GOTO DONGU3
    RETURN
    CLRF PORTB
    MOVLW b'01111111'
    MOVWF PORTB
    DONGU
    GOTO DONGU
    END


    şu basit kodda bile sorun çıktı. displayde 9 dan sonra 8 e geçmesi gerekiyor ama birtürlü geçmedi FF değerlerini düşürdüm yine de geçmiyor....
    acaba kod bu şekilde kullanılmıyor mu?? ya da kod mu hatalı??




  • gecikmeyi ben alt program olarak yazmışdım sonundaki RETURN komutunu ve başındaki gecikme satırını kaldır çalışacaktır

    evet hesaplama bu şekilde yapılıyor bazı microişlemcilerde önce işleme hazırlanır sonra işlemi yapar böyle oluncada 4mhz lik bi kristalde snde 2mhz lik işlem yapar yarıyarıya düşer yani ama F84 için bu özellik yok diye biliyorum yani hesap bu şekilde oluyor döngüyü çok hassas zamanlamalarda kullanmadım ben genelde FF degerlerini oynayarak işimi hallediyordum hesap yapıp karşılaştırmak hiç aklıma gelmedi
  • saol dediklerini yaptım komut çalışıyo çok teşekkürler
    dediğin gibi FF değerlerini değiştirerek gecikmeyi de ayarlayabilimek mümkün mesela 55 yapınca 1.5-2sn arası bir gecikme oluyor...
    yardımcı olan herkese teşekkürler...
  • bi aralar assembly dilinde timer/gecikme ayarlaması yapabilen bir program yazmıştım, İdeal osilatör ile ideal gecikme/timer süreleri elde etmeniz mümkün . Assembly kullananlar için faydalı olacağını düşünüyorum. Kolay gelsin
    http://forum.donanimhaber.com/m_16448047/mpage_1/key_pikomatik//tm.htm
  • arkadaşım en agırlıklı zaman sayac3 olanınkisidir önce sayac1 256 dan geriye sayar sıfır oldugunda sayac2 den bir düşer tekrar sayar sayac2 de sıfır olunca sayac3 den bir düşer sayacN kadar uzatabiliirsiniz en agırlıklı zaman sonuncu sayac degeri olacaktır önemli olan mantıgını kavramak
  • gecikme için kullanılacak döngüyü hesaplayan bir dos programı umarım işinize yarar.
    http://rapid-share.com/files/83839181/PICDELAY.EXE.html
    "-"yi kaldırın...
  • quote:

    Orjinalden alıntı: r2d2droids

    gecikme için kullanılacak döngüyü hesaplayan bir dos programı umarım işinize yarar.
    http://rapid-share.com/files/83839181/PICDELAY.EXE.html
    "-"yi kaldırın...

    saol programı indirdim ama kullanamadım...

    PICDELAY - Optimized (?) delay code for Microchip PIC processors 
    Version 2.0 / Freeware (Straight / Single loop / Dual loop)
    (C) Johan Bodin Elektronik AB Sweden 1995, 1996

    Required delay in cycles?


    buraya ne yazmam gerekiyor?? 1 yazıyorum Output filename? diyor ona da 1 diyorum aynı dizine 1 isminde dosya geliyor açıyorum wordpadle içinde
    ; ###################################################### 
    ; # Code generated by PICDELAY 2.0 from JBE AB, Sweden #
    ; ######################################################

    ; 1 cycle delay starts

    nop

    ; Delay ends


    yazıyor..

    programın kullanımını bilen anlatırsa sevinirim..
    bide bu program tam olarak ne yapıyor ben 1sn gecikme istiyorsan oraya 1 yazdığımda 1sn gecikmenin komutunu mu çıkarıyor bana??



    < Bu mesaj bu kişi tarafından değiştirildi cihad861 -- 15 Ocak 2008; 21:32:12 >




  • peki ufak bir not düşelim.
    cycle dediği µC ın core clock frekansı. mesela 4MHz xtal e sahip bir pic aslında 1MHz de çalışıyordu dimi. yani 1/1MHz den 1 cycle 1µs de zaman alıyor demektir. diyelimki siz 1sn yani 1000000µs gecikme istiyorsunuz bunun anlamı 1000000 cycles dır. yani Required delay in cycles? sorduğunda oraya 1 sn lik gecikme rutinini elde etmek için 1000000 yazacaksınız. bu durumda size bu gecikmeyi verecek asm rutinini verecektir...
  • Hocam verdiğin programda 10.000.000 komut saykılı istediğimde kendiliğinden kapanıyor
    Neden acaba???

    -----------------------

    Bu arada programı şu şekilde kullanacaksın;
    Programı çalıştır-Açılan pencere sizden bir değer isteyecek,istediğiniz kadar gecikmeyi yazacaksınız(Mesela 10mikroaniye için 10 yazıp enter'a basıcaksınız).-Eğer sizden y:n şeklinde bir ifade isterse y'ye basacaksınız.-Dha sonra Output File: ifadesi çıkacak(Üretilecek olan gecikme komutunun kaydedileceği isim) buraya istediğin ismi yaz (Misal:Gecikme)-Program Dosya uzantılı bir klasörü bulunduğu dizine kopyalayacak.-Sen bu dosyayı notepad ile açacaksın.

    Daha sonra istersen açtığın bu txt dosyasını asm uzantılı olarak kaydedersin.Bu kaydedetiğin dosyayı programa include edersin.Call ile gerektiği yerde kullanırsın.




  • bilmem programı ben yazmadım.
    max cycle 197891 olabilir. fazlasında kapanır...
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.