16 F 877 ile 0-99 butonlu ileri geri sayıcı

Başlatan macracanta, 20 Şubat 2012, 10:34:51

macracanta

Arkadaşlar herkese iyi günler

pic 16f877 ile butonlu 0-99 ileri geri sayıcı yapmaya çalıştım. Artırma işleminde sıkıntı yok ama eksiltmeye gelince istemediğim sonuçlar meydana geliyor.
resim eklemeye çalışacam ama ekleyemezsem yardım etmek isteyenlere mail de atabilirim. ayrıca programı aşağıya yazıyorum



TRISD=%00000111
TRISB=%00000000
TRISC=%00000000

P1 VAR WORD
P2 VAR WORD


K VAR WORD
L VAR WORD


ART VAR PORTD.0
EKS VAR PORTD.1
RES VAR PORTD.2

P1=200
P2=1000

L=0
K=0

PORTB=0
PORTC=0





BASLA:

PORTB=K
PORTC=L
PAUSE P1

RESET:


IF RES=0 THEN
K=0
L=0
ENDIF

ARTTIR:

IF ART=0 THEN   
WHILE ART=0
WEND
L=L+1
    IF L>9 THEN
    L=0
    K=K+1
    ENDIF
ENDIF




EKSILT:

IF EKS=0 THEN
WHILE EKS=0
WEND
L=L-1
    IF L=0 AND EKS=0 THEN
    L=9
    K=K-1
    ENDIF
ENDIF





GOTO BASLA

END

macracanta

ayrıca 2 ayrı display kullandım birini B portundan , diğerini C portundan ayrı ayrı  4511 entegreleriyle sürdüm Resmi yüklemeye çalıştım eğer olmadıysa linkleri var bakmak isteyenlere
[/url][/img]


ete

Öncelikle kullandığın buton kontrol mantığını çok da doğru olduğunu söyleyemiyeceğim.
Kullandığın değişkenleri neden WORD tipinde seçtin ? buda anlamsız. Mademki 0-99 sayacı yapıyorsun o halde değişkenlerin Byte cisniden olmalı. Önce bunların tipini değiştirmeni öneririm.
Tuş kontrollerinide aşağıdaki şekilde yaparsan daha uygun olur;
ARTTIR:

IF ART=0 THEN   
   L=L+1
   IF L>9 THEN
      L=0
      K=K+1
   ENDIF
WHILE ART=0:WEND
pause 50
ENDI

EKSILT:

IF EKS=0 THEN
    L=L-1
    IF L=255 then
       L=9
       K=K-1
    ENDIF
    WHILE EKS=0:WEND
    pause 50
ENDIF


Görünüşe göre tuşlar Pullup lı çalışmaktadır. Bunların her birine 10K lık birer pullup direnci bağlaman gerekiyor. Yok ise hemen bağlamalısın.
Ayrıca programda ne sigorta ayarı ne register ayarı hiç bir şey gözükmüyor.
A portu ile ilgili bir ayarlamada yapılmamış. Bu port default olarak Analog açılır. Şayet gerekli önlemleri almaz isen programın bile doğru çalışmayabilir.
Programın başına en azından ADCON1=7 komutunu koyman gerekiyor. Şayet kullandığın 16F877A ise birde CMCON=7 komutunuda ilave etmen gerekir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

macracanta

Hocam ilginize çok teşekkür ederim.
Dediklerinizi yaptım ve sonuç olumlu. Değişken tanımımda mı sıkıntı vardı ?.  Halbuki sıkıntı olmasın diye  WORD kullanmıştım. Ayrıca sigorta ayarlarının herzaman kullanılan yani default olan komutları nelerdir? Bi de a portunun ayarlamaları demişsiniz onu anlamadım ::(((

ete

#4
Önce sigorta ayarlarını verelim;

@ DEVICE pic16F877A       'işlemci 16F877a
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16F877A, PWRT_ON
@ DEVICE pic16F877A, PROTECT_ON
@ DEVICE pic16F877A, BOD_ON
@ DEVICE pic16F877A, XT_OSC

Define OSC 4

En altta yer alan Define komutunuda ihmal etme bu sistemin kaç MHz de çalıştığını gösterir. Bütün zamanlama komutlarıda bu komuta pararlel doğru çalışırlar.

16F877 de A portu ADC girişlerine ayrılmıştır. Buna E portu da dahildir. Hiç bir komut vermez isen bu portların pinleri Analog çalışırlar.
Her hangi bir analog dan digital e çevirim işin yok ise portları digital yapman gerekir. Bunu yapan komut;
ADCON1=7 komutudur.

877 nin birde A tipi vardır. 16F877A için bir ilave özellik daha avrdır buda A portunun Komparatör olarak çalışmasıdır. Bu da default olarak önce komparatör olarak çalışır. Komparatörü iptal ederseniz ki bunun komutu CMCON=7 şeklinde verilir. A portu bu sefer analog'a döner. Onuda iptal etmek için yine ADCON1=7 komutunu vermen gerekir.
Programın başına bu komutları koyup sonra TRISA ve TRISE registerlerinede uygun değerleri vermen gerekiyor. Hepsi çıkışise sıfır giriş olan pinler için "1" kullanman gerekir. Sende bu portlar kullanılmıyor. Bu durumda TRISA=0 ve TRISE=0 komutlarını vermen yeterlidir.

Her programın başlangıcına açılış gecikmesi verilemsi gerekir. Bu işlemci registerlerinin yerli yerine oturuması için gerekli süredir. Minimum 150 ms maksimum 300 ms dolayında verilebilir. Bunuda programına Basla satırından evvel eklersen hiçde fena olmaz.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

macracanta

Hocam verdiğiniz bilgiler için çok teşekkür ederim
bundan sonraki programlarda kesinlikle kullanacağım