99 00 geri sayıcı pic basic pro PIC16F84 7447 display göstergeli (otomatik)

guclusat

Tanınmış Üye
Süper Moderatör

Devre Şeması Analizi (PIC16F84A & 7447)

Şemaya baktığımızda donanımın ne kadar sade ve verimli kurulduğunu görebiliyoruz:
  • BCD Bağlantı Yapısı:
    • PORTB.0 - PORTB.3 (Alt Grup): U3 isimli 7447 entegresine gidiyor. Bu entegre Birler Basamağını (Sağdaki display) yönetiyor.
    • PORTB.4 - PORTB.7 (Üst Grup): U2 isimli 7447 entegresine gidiyor. Bu entegre ise Onlar Basamağını (Soldaki display) yönetiyor.
  • Osilatör Katı: Kristal (X1) ve 22pF kondansatörler (C1, C2) ile kararlı bir saat frekansı sağlanmış.
  • Reset Devresi: MCLR pinine bağlı olan R1 (1k) direnci, işlemcinin kararlı çalışması için +5V'a (Pull-up) çekilmiş.
  • Displayler: 7447 entegresi "Common Anode" (Ortak Anot) displayleri sürmek için tasarlanmıştır. Şemadaki displaylerin üst uçlarının +5V'a gitmesi de bunu doğruluyor.

Usta Tavsiyesi Notu:

"Arkadaşlar, şemada displayler doğrudan 7447'ye bağlı görünse de, fiziksel devreyi kurarken display ömrünü korumak ve aşırı akımı önlemek için her bir segment hattına (a, b, c, d, e, f, g) 330 Ohm direnç eklemenizi öneririm. Ayrıca Proteus simülasyonunda kristal değerini 4MHz veya 10MHz seçmeyi unutmayın."
99-0-geri-sayici-pic-basic-pro-pic16f84-7447.webp

Kod:
'% MICROCONTROLADORES PIC %

'AUTOR : BRYAM HUAMANCHUMO BACA
'LABORATORIO # 01c : CONTEO DESCENDENTE DE 99 A 00


I VAR BYTE
Unidad VAR BYTE
Decena VAR BYTE
X0 VAR Unidad.0
X1 VAR Unidad.1
X2 VAR Unidad.2
X3 VAR Unidad.3
X4 VAR Decena.0
X5 VAR Decena.1
X6 VAR Decena.2
X7 VAR Decena.3

TRISB = 0 'Salida

Inicio:
 
  For I = 99 TO 0 STEP -1
 
    Decena = I/10
    Unidad = I - Decena*10
 
    PORTB.0 = X0
    PORTB.1 = X1
    PORTB.2 = X2
    PORTB.3 = X3
    PORTB.4 = X4
    PORTB.5 = X5
    PORTB.6 = X6
    PORTB.7 = X7
 
    Pause 200
 
  Next I
 
GoTo Inicio
 
Son düzenleme:
PicBasic Pro derleyicisinin değişken tanımlama ve bit erişim kurallarına göre birkaç küçük teknik detay var.

Kodun şemadaki gibi hatasız çalışması için şu noktaları kontrol etmemiz lazım:

1. Değişken ve Bit Tanımlama Kontrolü

Kodda X0 VAR Unidad.0 şeklinde yaptığın tanımlama doğrudur. Ancak bazı PBP sürümlerinde değişkenin bitlerine bu şekilde isim verirken, ana değişkenin (Unidad ve Decena) doğru tanımlandığından emin olmak gerekir.

2. Matematiksel Ayrıştırma

Decena = I / 10 satırı onlar basamağını tam sayı olarak verir (Örn: 99 / 10 = 9).

Unidad = I - (Decena * 10) satırı da kalan birler basamağını verir (Örn: 99 - 90 = 9).

Bu kısım matematiksel olarak hatasız.

3. Port Çıkış Hızı

Koddaki Pause 200 değeri, sayıcının her bir saniyede 5 sayı düşeceği anlamına gelir ($1000ms / 200ms = 5$). Eğer tam 1 saniye aralıkla saymasını istiyorsan bu değeri Pause 1000 yapmalısın usta.

Kodun En Sağlıklı ve Kontrol Edilmiş Hali:

Şemadaki 7447 bağlantılarına (PortB.0-3 Birler, PortB.4-7 Onlar) göre kodun tam hali şudur:
Kod:
'****************************************************************
'* Adı    : 99-00 GERI SAYICI (7447 DESTEKLI)                  *
'* Yazar  : Bryam Huamanchumo Baca (Düzenleme: uydudoktoru)    *
'****************************************************************
DEFINE OSC 4                ' Kristal hızını tanımla (Şemaya göre)

I      VAR BYTE
Unidad VAR BYTE
Decena VAR BYTE

' Bit eşleştirmeleri (Şemadaki 7447 girişlerine göre)
X0 VAR Unidad.0  ' PortB.0 -> U3(A)
X1 VAR Unidad.1  ' PortB.1 -> U3(B)
X2 VAR Unidad.2  ' PortB.2 -> U3(C)
X3 VAR Unidad.3  ' PortB.3 -> U3(D)

X4 VAR Decena.0  ' PortB.4 -> U2(A)
X5 VAR Decena.1  ' PortB.5 -> U2(B)
X6 VAR Decena.2  ' PortB.6 -> U2(C)
X7 VAR Decena.3  ' PortB.7 -> U2(D)

TRISB = 0                   ' PortB'yi çıkış yap
PORTB = 0                   ' Başlangıçta ekranları temizle

Inicio:
  For I = 99 TO 0 STEP -1
 
    Decena = I / 10               ' Onlar basamağını ayır
    Unidad = I // 10              ' Birler basamağını ayır (Kısa yol: // mod alır)
 
    ' BCD veriyi bit bit PortB'ye aktar
    PORTB.0 = X0
    PORTB.1 = X1
    PORTB.2 = X2
    PORTB.3 = X3
    PORTB.4 = X4
    PORTB.5 = X5
    PORTB.6 = X6
    PORTB.7 = X7
 
    Pause 1000                    ' Tam 1 saniye bekleme (Gerçek zamanlı sayım için)
 
  Next I
GoTo Inicio                       ' Döngüyü tekrarla
End

Usta Gözüyle Kontrol Notu:

  • Şemadaki Kristal: Şemada kristal bağlı (X1), PicBasic'te kristal hızını belirtmek için DEFINE OSC 4 (veya kristalin kaç MHz ise o) eklemek zamanlamanın (Pause süresinin) doğru olması için kritiktir.
  • PortA: Şemada PortA boşta, kodda da kullanılmıyor. Bu doğru bir yaklaşım.
  • BCD Mantığı: 7447 entegresi girişine gelen 4 bitlik bilgiyi (Örn: 1001) ekranda "9" olarak gösterir. Kodun bu 4 biti doğru ayırıp göndermesi simülasyonun çalışması için yeterlidir.
 
Geri
Yukarı