pcbway

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

Başlatan deroder, 25 Temmuz 2011, 01:56:30

deroder

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.

Projeyle ilgili video kaydı : http://www.dailymotion.com/video/xk3yz3_16f877a_tech#from=embed

Projenin asm kodu :
;--------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ım 4 7segmentin aynı anda yanık kalarak saydırılması.

Projenin proteus şematiği: http://www.wupload.com/file/66165916/Ar%C3%A7elik.DSN

yazici67

Arkadaşım programın sorunsuz çalışmalı... Sorun ISIS te. Farkındaysan zaman ilerlemiyor yani isis çok kasıyor ve dolayısıyla senin programın 10-20 kat yavaşlıyor. Çok büyük bir ihtimalle devre gerçekte çalışacaktır.Ayrıca ISIS sürümünü güncellemeni öneririm. ( Çünkü sorunun temel nedeni bu.)

subram


yazici67

@Subram arkadaşım fikrine katılmıyorum 7.6 SP4 versiyonu kullanıyorum ve kendi 7segmentli devrem tamamen doğru bir şekilde çalışıyor.Tabi bilgisayarın işlemcisi rami vs.de önemli

subram

hocam ben tarama işini kendi bilgisayarımda tam göremiyorum. şöylekiaynı nada yanması gerekirekn sıra ile yanıyor. ama gerçekte sorun yok devre güzel şekilde açlışıyor.

yazici67

Dediğim gibi ISIS versiyonunu güncelle birde işlemci gücün ve ram boyutun da önemli.En uygunu 2ghz pentium 4 veya üstü çift çekirdek işlemci ve 1 gb ram.

hawke

arkadasım senin sorunu tameamen bilgisayarın hızıyla ilgili 2,66 yada üstü 3mb cash önbelleği olan bir işlemci işini görebilir tabi daha hızlıları var ama  fiyat ona göre uygun ve en iyisini bulmaktır mesele
30 kupona alınmadı bu vatan

yazici67

Alıntı yapılan: hawke - 17 Ocak 2012, 16:41:42arkadasım senin sorunu tameamen bilgisayarın hızıyla ilgili 2,66 yada üstü 3mb cash önbelleği olan bir işlemci işini görebilir tabi daha hızlıları var ama  fiyat ona göre uygun ve en iyisini bulmaktır mesele
Katılmıyorum :) 1.80 GHz AMD işlemciyle bile rahat çalışır. Sadece bazı hileler yapmak gerekir. Tarama işini yapan transistörlerin çıkışlarına direnç bağlanırsa sorun olmuyor. :)