Pic 16F877A ile 4 digit kare dalga sayacı (7 segment yanıp sönme sorunu)

deroder

Üye
Katılım
13 Tem 2011
Mesajlar
3
Puanları
1
Yaş
37
Başlıkta da belirttiğim gibi pic 16F877A'nın tock1 girişine gelen kare dalgayı düzgün saydırabiliyorum ama pic'in çıkışında saydığım değeri 7 segmente aktarırken 1'ler basamağı yanıp sönüyor sonra onlar basamağı yanıp sönüyor bu şekilde binler basamağına kadar bu flaş sorunu devam ediyor.

Konuyla ilgili video kaydı :

Projenin asm kodu :
Kod:
;--------Harici pulse ile numeratör projesi-----------

LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG h'3F31' ;__CONFIG b'11111100110001'
                 ;__CONFIG _CP_OFF &_WDT_OFF & _PWRT_ON & _XT_OSC &
                 ;_BODEN_OFF &_LVP_OFF & _CPD_OFF


;------DEĞİŞKENLERİN TANIMLANMASI-------
        SAYAC1            EQU    h'20'        ;SAYAC1 REGISTERININ ADRESİ  
        SAYAC2            EQU h'21'        ;SAYAC2 REGISTERININ ADRESİ
        BIRLER_BASAM    EQU h'22'      
        ONLAR_BASAM        EQU h'23'
        YUZLER_BASAM    EQU h'24'
        BINLER_BASAM    EQU h'25'


;------PROGRAM BELLEĞİNİN YAPISI-------
        ORG h'00'        ;RESET VEKTÖRÜ
        CLRF PCLATH        ;PROGRAM BELLEĞİNİN İLK 2KB'A KADAR OLAN BÖLÜMÜ
        GOTO BASLA        ;ANA PROGRAMIN BAŞLANGICI OLAN BAŞLAYA GİT
        ORG h'04'        ;İNTERRUPT ADRESİ YÖNLENDİRİCİSİ
        GOTO KESME_PROG     ;KESME ALT PROGRAMINA GİT
  
BASLA    MOVLW h'00'            ;W<-h'00'
        MOVWF BIRLER_BASAM    ;BIRLER_BASAM <-W
        MOVWF ONLAR_BASAM    ;ONLAR_BASAM <-W          
        MOVWF YUZLER_BASAM    ;YUZLER_BASAM <-W   
        MOVWF BINLER_BASAM    ;BINLER_BASAM <-W
      
        BANKSEL    OPTION_REG    ;BANK 1'E GEÇ
        MOVLW    b'11111000'    ;PSA (BİT 3)=1 SEÇİLEREK PRESCLAR TMR0 İÇİN GEÇERSİZ OLUP ORAN 1:1 OLMAKTADIR,TOCK1'DEKİ HARİCİ PULSELAR 1:1 ORANINDA TMR0'I ARTIRACAK
        MOVWF    OPTION_REG    ;PS=1 YANİ PULSE'IN DÜŞEN HER KISMINDA TMR0 BİR ARTIRILACAKTIR
        BSF        INTCON,GIE    ;TÜM KESME OLAYLARI İÇİN İZİN VERİLDİ
        BSF        INTCON,5    ;TMR0IE İÇİN İZİN VERİLDİ
        MOVLW    h'06'        ;W YAZMACINA 6 SAYISINI YÜKLE
        MOVWF    ADCON1        ;PORTA NIN DİJİTAL I/O YAPILABİLMESİ İÇİN ADCON1 REGISTERINA UYGUN DEĞER ATANDI
      
        MOVLW    h'00'        ;W REGISTERİNE 0'I YÜKLE
        MOVWF    TRISB        ;PORTB ÇIKIŞ YAPILIR
        MOVLW    h'F0'        ;W YA F0 YÜKLENİR
        MOVWF    TRISA        ;RA3,RA2,RA1,RA0 ÇIKIŞ YAPILDI
        BCF        STATUS,RP0    ;BANK0'A GEÇ
        MOVLW    h'FF'      
        MOVWF    TMR0
        CLRF    PORTA        ;PORTA TEMİZLENDİ JUNK DEĞERLER KALMAMASI İÇİN
        CLRF    PORTB        ;PORTB    "         "     "        "        "
      
DONGU    CALL    TARA_GOSTER
        GOTO    DONGU
      
KESME_PROG
        CALL    TARA_GOSTER
        BTFSS    INTCON,5
        GOTO     CIK
        BTFSS    INTCON,2
        GOTO    CIK
        MOVLW    h'FF'
        MOVWF    TMR0
        BCF        INTCON,2
      
;-------ARTIRMA İŞLEMİ


        INCF    BIRLER_BASAM,F    ;BİRLER BASAMAĞI BİR ARTIRILDI
        MOVF    BIRLER_BASAM,W    ;BİRLER BASAMAĞINI W'YE YÜKLER
        SUBLW    h'0A'            ;W=10-W
        BTFSS    STATUS,2        ;EŞİT İSE Z BİTİ 1 OLACAKTIR Z BİTİ 1 Mİ?
        GOTO    CIK                ;10 SAYISINA HENÜZ ULAŞILMADI KESMEDEN ÇIK
        MOVLW    h'00'            ;W REGİSTERİNE 0 YAZ
        MOVWF    BIRLER_BASAM    ;BİRLER BASAMAĞINA 0 YAZDIK
        BCF        STATUS,2        ;STATUS REGİSTERININ ZERO FLAG'İ SIFIRLANDI
      
        INCF    ONLAR_BASAM,F    ;ONLAR BASAMAĞI BİR ARTIRILDI
        MOVF    ONLAR_BASAM,W    ;ONLAR BASAMAĞINI W'YE YÜKLER
        SUBLW    h'0A'            ;W=10-W
        BTFSS    STATUS,2        ;EŞİT İSE Z BİTİ 1 OLACAKTIR Z BİTİ 1 Mİ?
        GOTO    CIK                ;10 SAYISINA HENÜZ ULAŞILMADI KESMEDEN ÇIK
        MOVLW    h'00'            ;W REGİSTERİNE 0 YAZ
        MOVWF    ONLAR_BASAM        ;ONLAR BASAMAĞINA 0 YAZDIK
        BCF        STATUS,2        ;STATUS REGİSTERININ ZERO FLAG'İ SIFIRLANDI
      
      
        INCF    YUZLER_BASAM,F    ;YUZLER BASAMAĞI BİR ARTIRILDI
        MOVF    YUZLER_BASAM,W    ;YUZLER BASAMAĞINI W'YE YÜKLER
        SUBLW    h'0A'            ;W=10-W
        BTFSS    STATUS,2        ;EŞİT İSE Z BİTİ 1 OLACAKTIR Z BİTİ 1 Mİ?
        GOTO    CIK                ;10 SAYISINA HENÜZ ULAŞILMADI KESMEDEN ÇIK
        MOVLW    h'00'            ;W REGİSTERİNE 0 YAZ
        MOVWF    YUZLER_BASAM    ;YUZLER BASAMAĞINA 0 YAZDIK
        BCF        STATUS,2        ;STATUS REGİSTERININ ZERO FLAG'İ SIFIRLANDI


        INCF    BINLER_BASAM,F    ;BINLER BASAMAĞI BİR ARTIRILDI
        MOVF    BINLER_BASAM,W    ;BINLER BASAMAĞINI W'YE YÜKLER
        SUBLW    h'0A'            ;W=10-W
        BTFSS    STATUS,2        ;EŞİT İSE Z BİTİ 1 OLACAKTIR Z BİTİ 1 Mİ?
        GOTO    CIK                ;10 SAYISINA HENÜZ ULAŞILMADI KESMEDEN ÇIK
        MOVLW    h'00'            ;W REGİSTERİNE 0 YAZ
        MOVWF    BINLER_BASAM    ;BINLER BASAMAĞINA 0 YAZDIK
        BCF        STATUS,2        ;STATUS REGİSTERININ ZERO FLAG'İ SIFIRLANDI


CIK
        RETFIE


;-----------------------------------------------------------------


TARA_GOSTER
      
        MOVLW    b'00001110'        ;1.DISPLAYA ENERJİ VERDİK
        MOVWF    PORTB              
        MOVF    BIRLER_BASAM,0        ;W YA BİRLER BASAMAĞINI ATTIK
        MOVWF    PORTA
        CALL    GECİKME            ;4 MS GECİKME (SEGMENTLERİN IŞIK VERECEĞİ SÜREYİ KAZANMASI İÇİN)
      
  
          
        MOVLW    b'00001101'        ;1.DISPLAYA ENERJİ VERDİK
        MOVWF    PORTB              
        MOVF    ONLAR_BASAM,0
        MOVWF    PORTA
        CALL    GECİKME
      


          
        MOVLW    b'00001011'      
        MOVWF    PORTB
        MOVF    YUZLER_BASAM,0
        MOVWF    PORTA
        CALL    GECİKME




        MOVLW    b'00000111'
        MOVWF    PORTB
        MOVF    BINLER_BASAM
        MOVWF    PORTA
        CALL    GECİKME


        RETURN
  
;--------------------------------------------------------------------


GECİKME
  
        MOVLW    h'07'
        MOVWF    SAYAC1
      
DONGU1  
        MOVLW    h'FF'
        MOVWF    SAYAC2
DONGU2
        DECFSZ    SAYAC2,F
        GOTO    DONGU2
        DECFSZ    SAYAC1,F
        GOTO    DONGU1
        RETURN
      
        END
Ben sorunun tara göster kısmında olduğunu düşünüyorum. Bakarsanız sevinirim. Amacın 4 7segmentin aynı anda yanık kalarak saydırılması.
 
gecikme programı pici çalıştırdığın kristal ile ayarladığın hızda çalışır yani proteusta picin frekansını değiştirerek yada gecikme alt programının sayacını azaltırsan daha hızlı olacak işlem yanıp sönmeyi göremeyeceksin..
 
pic i yeni öğrenmeye başladım. bana çalışabileceğim notlar elinizde varsa gönderebilir misiniz? teşekkür ederim.
 
Güzel proje güzel açıklanmış teşekkürler...
 
Arkadaşlar bütün yorumlar için yardımlar için teşekkürler. Projeyi pratikte kurduğumda yanıp sönme sorunu ortadan kalktı. Hepsini yanık şekilde görebiliyorum. Ancak binler basamağında 7 sayısını görüyorum nedense. Kare dalgayı verdiğimde 0000 dan 0001 gibi sayması gerekirken 7000 , 7001 , 7002 şeklinde sayıyor. Binler basamağındaki 7'nin sebebi nedir nasıl düzeltebilirim? Teşekkürler. :)
 
binler basamagındaki 7 segment baglantında sorun olabilir.
 
Arkadaşlar bütün yorumlar için yardımlar için teşekkürler. Projeyi pratikte kurduğumda yanıp sönme sorunu ortadan kalktı. Hepsini yanık şekilde görebiliyorum. Ancak binler basamağında 7 sayısını görüyorum nedense. Kare dalgayı verdiğimde 0000 dan 0001 gibi sayması gerekirken 7000 , 7001 , 7002 şeklinde sayıyor. Binler basamağındaki 7'nin sebebi nedir nasıl düzeltebilirim? Teşekkürler. :)


MOVF YUZLER_BASAM,0 !!!!!!!!!!!!!!!!!!!!!! (bu doğru olanı)

MOVF BINLER_BASAM (burada binler basamağının içine atmamışsın yani doğrusu aşağıda yazdığım gibi)


MOVF BINLER_BASAM ,0 olacak arkadaşım...kolay gelsin
 
Son düzenleme:
Aslında yavaş yavaş daha pratik bir dile geçseniz, hem sizin işiniz, hem de yardımcı olmak, kısacası herşey daha kolay olurdu.
Asm ile uğraşmayalı yıllar oluyor ve böyle basit bir kodu incelemek bile ciddi anlamda sıkıcı görünüyor.
Bu sebeple pioneer5900'e tebrikler, umarım sorun çözülmüştür.
 
Herkese çok teşekkür ederim. Şu an proje tam anlamıyla çalışıyor :) . Sorun pioneer5900'un dediği gibi kodun o satırındaymış. Düzelttim. Teşekkür ediyorum bütün yorumlar için :)
 
Aslında yavaş yavaş daha pratik bir dile geçseniz, hem sizin işiniz, hem de yardımcı olmak, kısacası herşey daha kolay olurdu.
Asm ile uğraşmayalı yıllar oluyor ve böyle basit bir kodu incelemek bile ciddi anlamda sıkıcı görünüyor.
Bu sebeple pioneer5900'e tebrikler, umarım sorun çözülmüştür.
teşekkürler..
 

Forum istatistikleri

Konular
128,119
Mesajlar
915,152
Kullanıcılar
449,823
Son üye
bulday

Yeni konular

Geri
Üst