0 - 9999 Sayıcı Problemi

Başlatan protech06, 07 Mayıs 2007, 20:27:37

protech06

Slm arkadaslar Foruma yeni katıldım. Ders için Assembly kullanarak    
0 - 9999 sayıcı yapacam elimde ortak katodlu 4 adet 7 segment display ve 4 adette 74hc595 var pic16f877 kullanıcam. 0-9999 sayıcı kısmını yapıyorum yalnız pic hafızasına yazmak ve okumada sorun yasıyorum

  Devremde  yukarı -  asağı ve kaydet tusu var  yukarı asagı tusları ıle 0 - 9999 arasında sayıcak ve istedigim bir sayıda kaydet tusuna basınca o anki sayıyı pic hafızada tutmalı devrenin enerjisini kesip tekrar verdiğimde ise kaydettiğim sayı displayde gozukecek. o sayıdan saymaya baslıyacam yukarı asagı   saymaya yani pic hafısanız kayıt yapıp okumak istiyorum

 bu konuda bilgisi olan arkadasların yardımlarını bekliyorum ornek bir sema yada kod

Logan

@protech06, aramıza hoşgeldin.Aşağıdaki kodlarda eprom belleğe yazma ve okuma mevcuttur.Kopyala ve direk programına yapıştır.Benim yaklaşık 4 sene önce yazdığım bir programdan alıntıdır çalıştığından şüphen olmasın :) Kolay gelsin.

Eprom okuma;
read
	bsf STATUS,6
	movlw h'33'         ; okunan adres
	movwf EEADR
	BSF STATUS,5
	BSF EECON1, 0
wait
	BTFSC EECON1, 0
	GOTO wait
	BCF STATUS,5
	MOVF EEDATA,W
	bcf STATUS,6
	MOVWF zaman1      ;  okunan register


Eprom yazma;
YAZ
	MOVF zaman1,w      ; yazılan register
	movwf zamans
	BANKSEL EEADR
	MOVLW 0X33     ; yazılan adres
	MOVWF EEADR
	BANKSEL TMR0
	movf zamans,w
	BANKSEL EEADR
	movwf EEDATA
	BANKSEL EECON1
	BSF EECON1,2
	MOVLW 0X55
	MOVWF EECON2
	MOVLW 0XAA
	MOVWF EECON2
	BSF EECON1,1
YAZ1
	BTFSC EECON1,1
	GOTO YAZ
	BANKSEL TMR0
	RETURN

Umarım işine yarar.kolay gelsin...
İmza.

protech06

hocam ilgine teşekkurler birde ben 74hc595 entegresine bilginin nasıl gonderileğini anlayamadım bunun baglantısı nasıl bir ornekle acıklayabılırmıyiz ?

Logan

@protech06, 74595 entegresinin en büyük özelliği, içerisinde LATCH bulunmasıdır.Mantık olarak 74164 entegresi ile aynı temeller üzerine oturtulmuştur.Data ucundan verilen bilgiyi, clock ucundan verilen kare dalga ile çıkışa aktarır.Yani Data ucuna "0" verirsek, clock ucunuda "1" ve hemen arkasından "0" a çekersek, "0" bilgisi çıkışa aktarılmış olur.Bu işlemi arka arkaya 8 kere yaparsak 1 byte lık bilgiyi çıkışa aktarmış oluruz.Fakat 74595 entegresinde bu yöntemin yanı sıra, 8 bitlik bilgiyi kaydırarak gönderdikten sonra 12 ve 13 nolu bacaklara da kare dalga göndermeliyiz ki içeride bulunan bilgi çıkışa aktarılabilsin.Yukarıda da bahsettiğimiz gibi entegre içerisinde bulunan latch, kaydırılan bilgiyi tutarak, kare dalga geldiği taktirde bir kerede yansıtır.Bu özelliği sayesinde 74595 entegresi, 74164 e nazaran daha çok tercih edilir. Umarım açıklayıcı olmuştur.  :)
İmza.

protech06

yapmak istedigim sema bu sekilde olacak  ,
pic877 , 20 mhz osc , 4 digit display ve  4 adet 74hc595 kullanılacak.

Logan

Evet sistem gayet mantıklı görünüyor herhangi bir sorun olacağını zannetmiyorum.74595 entegresinin iç yapısını veya datasheetini incelediysen içerisinde bulunan buffer ları görmüş olmalısın.Bu sebeple araya direnç atmasanda olur.
İmza.

Logan

@protech06, anladığım kadarıyla ASM konusunda oldukça yenisin. Doğrusunu söylemek gerekirse senin gibi yeni bir programcıya göre biraz ağır bir program :) 74595 entegresini kontrol eden ve bilgi gönderen ufak bir program yazdım.İyice incelemeni tavsiye ediyorum.
;************************************************
;  74595'e gönderen program	            
;************************************************
; SAYAC isimli register bizim 74595'e göndereceğimiz bilgiyi içeriyor.
GONDER
	BTFSS SAYAC,7    ;Bu kısımlarda bitler tek tek kontrol ediliyor.	                                   GOTO EKSI          ;Burada ise "0" ve "1" ihtimalleri yer alıyor.
	GOTO ARTI
DON
	BTFSS SAYAC,6
	GOTO EKSI1
	GOTO ARTI1
DON1
	BTFSS SAYAC,5
	GOTO EKSI2
	GOTO ARTI2
DON2
	BTFSS SAYAC,4
	GOTO EKSI3
	GOTO ARTI3
DON3
	BTFSS SAYAC,3
	GOTO EKSI4
	GOTO ARTI4
DON4
	BTFSS SAYAC,2
	GOTO EKSI5
	GOTO ARTI5
DON5
	BTFSS SAYAC,1
	GOTO EKSI6
	GOTO ARTI6
DON6
	BTFSS SAYAC,0
	GOTO EKSI7
	GOTO ARTI7
EKSI
	BCF data   ;Kontrol edilen bitin değeri "0" ise data "0" oluyor.
	BSF clock
	NOP
	BCF clock
	GOTO DON
ARTI
	BSF data  ;Burada ise "1".
	BSF clock  ; Bu datanın gönderilmesini sağlayan clock palsi
	NOP
	BCF clock
	GOTO DON
EKSI1
	BCF data
	BSF clock
	NOP
	BCF clock
	GOTO DON1
ARTI1
	BSF data
	BSF clock
	NOP
	BCF clock
	GOTO DON1
EKSI2
	BCF data
	BSF clock
	NOP
	BCF clock
	GOTO DON2
ARTI2
	BSF data
	BSF clock
	NOP
	BCF clock
	GOTO DON2
EKSI3
	BCF data
	BSF clock
	NOP
	BCF clock
	GOTO DON3
ARTI3
	BSF data
	BSF clock
	NOP
	BCF clock
	GOTO DON3
EKSI4
	BCF data
	BSF clock  
	NOP
	BCF clock  
	GOTO DON4
ARTI4
	BSF data
	BSF clock
	NOP
	BCF clock
	GOTO DON4
EKSI5
	BCF data
	BSF clock  
	NOP
	BCF clock  
	GOTO DON5
ARTI5
	BSF data
	BSF clock  
	NOP
	BCF clock  
	GOTO DON5
EKSI6
	BCF data
	BSF clock  
	NOP
	BCF clock  
	GOTO DON6
ARTI6
	BSF data
	BSF clock  
	NOP
	BCF clock  
	GOTO DON6
EKSI7
	BCF data
	BSF clock  
	NOP
	BCF clock  
	GOTO BITIR
ARTI7
	BSF data
	BSF clock  
	NOP
	BCF clock  
	GOTO BITIR
                
BITIR
                BSF enable   ;Bu kısımda ise latch aktif edilip bilgi çıkışa
                NOP              ;   aktarılıyor.
                BCF enable
                RETURN        ;Programın sonu  :)


Programı bu kadar uzun yazmamın sebebi anlamanı sağlamaktı.Umarım işine yarar.Kolay gelsin.
İmza.

protech06

Teşekkurler hocam deniyecem  bunu  bitince foruma gondercem diger arkadaslarada yardımı olur.