pic16f84 ile binary desimal 0-15 sayıcı pbp
Daha önce burada yayınladığım binary sayıcı devresini biraz geliştireyim dedim. Önce kafamdaki şemayı isiste çizip daha sonra pic basic pro ile kodları yazıp derledim. Tabi baya uğraştırdı. Kodları düzenlemek ve simulasyonda deneyip çalıştırmak gerçekten zevkli oluyor. Aşağıda simulasyonun çalışırken çekilmiş videosunu da izleyebilirsiniz. Ayrıca bas kodu ve devre şemasıda aşağıda mevcut.
4520 binary üretecinin değerlerini pic16f84a ile okutup 2 adet 7 segment displaye aktardım. Aynı zamanda ledler ilede binary sayılar gözlenebilir. Clock üreteci olarak isis clock kullandım. Ama siz devreyi yapmak isterseniz 555 timer ile yapılmış bir osilatör kullanın. Yazının başlangıcında referans verdiğim linkte 555 osilatör mevcut. Aşağıdaki linkten gerekli dosyaları indirebilirsiniz. (hex pbp isis devre şeması pdf jpg)
Devreyi kurmak isteyenlere hatırlatma yapmak isterim. Bu bir simulasyon. Gerçek uygulamada pbp kodları üzerinde zaman ayarları ile oynamak gerekebilir. Çünkü kodlar arası süre simulasyon osilatör frekansı ile senkronize durumda. İşlemci için gerekli parametreleri pbp başlangıcında verdim. Kodları yazarken 15 rakamını displaylere aktarmak istediğimde 16f84 adres limiti aşıldı benzeri bir uyarı aldım. Ve yanlış işlemci seçtiğimi farkettim :) Ama sorun değil 15 zaten 4 adet 1 rakamından ibaret...
pic16f84a ile binary desimal sayıcı download
Alternatif indirme linki:
pic16f84a ile binary desimal sayıcı download
4520 binary üretecinin değerlerini pic16f84a ile okutup 2 adet 7 segment displaye aktardım. Aynı zamanda ledler ilede binary sayılar gözlenebilir. Clock üreteci olarak isis clock kullandım. Ama siz devreyi yapmak isterseniz 555 timer ile yapılmış bir osilatör kullanın. Yazının başlangıcında referans verdiğim linkte 555 osilatör mevcut. Aşağıdaki linkten gerekli dosyaları indirebilirsiniz. (hex pbp isis devre şeması pdf jpg)
Devreyi kurmak isteyenlere hatırlatma yapmak isterim. Bu bir simulasyon. Gerçek uygulamada pbp kodları üzerinde zaman ayarları ile oynamak gerekebilir. Çünkü kodlar arası süre simulasyon osilatör frekansı ile senkronize durumda. İşlemci için gerekli parametreleri pbp başlangıcında verdim. Kodları yazarken 15 rakamını displaylere aktarmak istediğimde 16f84 adres limiti aşıldı benzeri bir uyarı aldım. Ve yanlış işlemci seçtiğimi farkettim :) Ama sorun değil 15 zaten 4 adet 1 rakamından ibaret...
pic16f84a ile binary desimal sayıcı download
Alternatif indirme linki:
pic16f84a ile binary desimal sayıcı download
devre şeması:
class="BLOG_video_class" width="460" height="380" contentid="dc5856c166c8b4e">
pic basic pro bas kodu:
'****************************************************************
'* Name : BİNARY DESİMAL 0-15 SAYICI.BAS *
'* Author : [Davut Naci Kaya] *
'* Notice : Copyright (c) 2010 *
'* : All Rights Reserved *
'* Date : 07.03.2010 *
'* Version : 1.0 *
'* Notes : binar desimal 0-15 sayıcı *
'* : elektroinfo.blogspot.com *
'****************************************************************
@ DEVICE pic16F84A
@ DEVICE pic16F84A, WDT_on
@ DEVICE pic16F84A, PWRT_ON
@ DEVICE pic16F84A, PROTECT_OFF
@ DEVICE pic16F84A, XT_OSC
PortA=0
TrisA=011111
PortB=0
TrisB=000000
SAYI VAR BYTE
BIRLER VAR BYTE
ONLAR VAR BYTE
PORTB=0
SAYI=0
PAUSE 100
BASLA:
If (PortA.0=1) AND (PortA.1=0) AND(PortA.2=0) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' BİR
ENDIF
If (PortA.0=0) AND (PortA.1=1) AND(PortA.2=0) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' İKİ
ENDIF
If (PortA.0=1) AND (PortA.1=1) AND(PortA.2=0) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' ÜÇ
ENDIF
If (PortA.0=0) AND (PortA.1=0) AND(PortA.2=1) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' DÖRT
ENDIF
If (PortA.0=1) AND (PortA.1=0) AND(PortA.2=1) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' BEŞ
ENDIF
If (PortA.0=0) AND (PortA.1=1) AND(PortA.2=1) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 200 ' ALTI
ENDIF
If (PortA.0=1) AND (PortA.1=1) AND(PortA.2=1) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 175 ' YEDİ
ENDIF
If (PortA.0=0) AND (PortA.1=0) AND(PortA.2=0) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 250 ' SEKİZ
ENDIF
If (PortA.0=1) AND (PortA.1=0) AND(PortA.2=0) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 250 ' DOKUZ
ENDIF
If (PortA.0=0) AND (PortA.1=1) AND(PortA.2=0) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 150 ' ON
ENDIF
If (PortA.0=1) AND (PortA.1=1) AND(PortA.2=0) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 150 ' ONBİR
ENDIF
If (PortA.0=0) AND (PortA.1=0) AND(PortA.2=1) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 150 ' ONİKİ
ENDIF
If (PortA.0=1) AND (PortA.1=0) AND(PortA.2=1) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 250 ' ONÜÇ
ENDIF
If (PortA.0=0) AND (PortA.1=1) AND(PortA.2=1) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 250 ' ONDÖRT
ENDIF
If (PortA.0=1) AND (PortA.1=1) AND(PortA.2=1) AND(PortA.3=1) Then
GOTO DUR ' ONBEŞ OLMADAN BİTER... PIC16F84 ADRESS LİMİTİ DOLDUĞU İÇİN...
ENDIF
BIRLER=SAYI DIG 0 'birler ve onlar hanesi seçimleri
ONLAR= SAYI DIG 1
PORTB=240 BIRLER '4511 LE enable disable kontrolleri
LOW PORTB.5
PAUSE 300
HIGH PORTB.5
PAUSE 100
PORTB=240 ONLAR
LOW PORTB.4
PAUSE 300
HIGH PORTB.4
PAUSE 100
GOTO BASLA
DUR:
END
'* Name : BİNARY DESİMAL 0-15 SAYICI.BAS *
'* Author : [Davut Naci Kaya] *
'* Notice : Copyright (c) 2010 *
'* : All Rights Reserved *
'* Date : 07.03.2010 *
'* Version : 1.0 *
'* Notes : binar desimal 0-15 sayıcı *
'* : elektroinfo.blogspot.com *
'****************************************************************
@ DEVICE pic16F84A
@ DEVICE pic16F84A, WDT_on
@ DEVICE pic16F84A, PWRT_ON
@ DEVICE pic16F84A, PROTECT_OFF
@ DEVICE pic16F84A, XT_OSC
PortA=0
TrisA=011111
PortB=0
TrisB=000000
SAYI VAR BYTE
BIRLER VAR BYTE
ONLAR VAR BYTE
PORTB=0
SAYI=0
PAUSE 100
BASLA:
If (PortA.0=1) AND (PortA.1=0) AND(PortA.2=0) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' BİR
ENDIF
If (PortA.0=0) AND (PortA.1=1) AND(PortA.2=0) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' İKİ
ENDIF
If (PortA.0=1) AND (PortA.1=1) AND(PortA.2=0) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' ÜÇ
ENDIF
If (PortA.0=0) AND (PortA.1=0) AND(PortA.2=1) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' DÖRT
ENDIF
If (PortA.0=1) AND (PortA.1=0) AND(PortA.2=1) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 125 ' BEŞ
ENDIF
If (PortA.0=0) AND (PortA.1=1) AND(PortA.2=1) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 200 ' ALTI
ENDIF
If (PortA.0=1) AND (PortA.1=1) AND(PortA.2=1) AND(PortA.3=0) Then
SAYI=SAYI+1 :PAUSE 175 ' YEDİ
ENDIF
If (PortA.0=0) AND (PortA.1=0) AND(PortA.2=0) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 250 ' SEKİZ
ENDIF
If (PortA.0=1) AND (PortA.1=0) AND(PortA.2=0) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 250 ' DOKUZ
ENDIF
If (PortA.0=0) AND (PortA.1=1) AND(PortA.2=0) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 150 ' ON
ENDIF
If (PortA.0=1) AND (PortA.1=1) AND(PortA.2=0) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 150 ' ONBİR
ENDIF
If (PortA.0=0) AND (PortA.1=0) AND(PortA.2=1) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 150 ' ONİKİ
ENDIF
If (PortA.0=1) AND (PortA.1=0) AND(PortA.2=1) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 250 ' ONÜÇ
ENDIF
If (PortA.0=0) AND (PortA.1=1) AND(PortA.2=1) AND(PortA.3=1) Then
SAYI=SAYI+1 :PAUSE 250 ' ONDÖRT
ENDIF
If (PortA.0=1) AND (PortA.1=1) AND(PortA.2=1) AND(PortA.3=1) Then
GOTO DUR ' ONBEŞ OLMADAN BİTER... PIC16F84 ADRESS LİMİTİ DOLDUĞU İÇİN...
ENDIF
BIRLER=SAYI DIG 0 'birler ve onlar hanesi seçimleri
ONLAR= SAYI DIG 1
PORTB=240 BIRLER '4511 LE enable disable kontrolleri
LOW PORTB.5
PAUSE 300
HIGH PORTB.5
PAUSE 100
PORTB=240 ONLAR
LOW PORTB.4
PAUSE 300
HIGH PORTB.4
PAUSE 100
GOTO BASLA
DUR:
END
Yorumlar
Yorum Gönder