PIC Mikrodenetleyici kullanılarak Sayısal Sayım Sayacı

Advertisement

  • Twitter
  • Facebook
  • Google+
  • Pinterest
  • Linkedin

Bu yazıda  PIC mikroişlemci 16F628A kullanarak 0-99 dakika sayaç nasıl pic ile kontrol ediliri göreceğiz.

Her mikro denetleyicinin içinde zamanlayıcı birimi vardır. Bir süreölçer, mikro denetleyici birimi içerisinde üretilen bir zaman sayma aygıtından başka bir şey değildir. Çok çeşitli pratik uygulamalar zamanlayıcıyı harekete geçirir. Örneğin, bir motoru 5 dakika boyunca AÇIK hale getirmeliyiz ve sonra belirli bir projenin bir parçası olarak KAPALI konuma getirmeniz gerekiyor; Bunu nasıl yapacağız Bir mikrocontroller ünitesi içindeki bir zamanlayıcı, bunu mükemmel bir şekilde uygulamamıza yardımcı olur. 5 dakikalık sayımı tam olarak saymak için bir zamanlayıcı kullanılabilir ve 5 dakika içinde SET değerini almış olan bitler, denetleyicinin bazı aygıtları / aygıtları KAPALI hale getirmesini programlamak için kullanılabilir.

Bir LCD’yi içeren herhangi bir projede, ilk adım LCD modülünü başlatmaktır.

Şimdi, röle ve anahtarları yapılandırmamız gerekiyor. Aynı kod snippet’i aşağıda verilmiştir.

İşte “sbit” ayar biti anlamına geliyor. Aynı şekilde “#define” komutu ile de yapabilirsiniz. Bu satır RA3 piminin Relay / RB0 pininin SS_Select vb. Olarak bilineceği anlamına gelir.

“Dijital geri sayım sayacı” projesinin adı çok aptalca gelse de, çalışması o kadar basit değil. Projeyi mükemmel bir şekilde açıklamak için devrenin bir proteus diyagramını aşağıda.

Devre şemasını inceleyerek, üç düğme görebilirsiniz. Bir düğme Başlat / Durdur işlevi ve diğer 2 düğme Birimler ve Onlu sayma içindir. LCD modülümüzü, düğme konfigürasyonlarına karşılık gelen ekran mesajlarıyla yapılandıracağız.

Bunlar LCD ekranında gösterilecek mesajlardır. Sistemi kontrol etmek için bazı diğer değişkenlere de ihtiyacımız olacak. Bu değişkenler, aşağıda verilen kod snippet’inde bildirilmiştir.

Sayma mekanizmasını şimdi anlıyoruz. Devre, kullanıcı başlangıçta sayım sınırını seçmek zorunda kalacak şekilde kablolanmaktadır. Kullanıcı yalnızca 1 ila 9 dakika arasında saymak istiyor ise, o zaman birimlerin düğmesine basması gerekiyor. 1 ila 99 dakika arasında saymakla ilgileniyorsa, Üniteler düğmesiyle birlikte Tens düğmesine basmanız gerekir. Limiti ayarladıktan sonra, zamanlayıcıyı başlatmak için Start / Stop düğmesine basmalıdır (bir basmalı düğme anahtarı ve aynı düğme anahtarı da zamanlayıcıyı durdurmak için kullanılır).

Not: – Zamanlayıcı işlemi, kullanıcı tarafından seçilen değere (birimler ve onlu anahtar) bağlı olduğundan, zamanlayıcıyı başlatmadan önce bazı olası hata durumlarını kontrol etmeliyiz. Kullanıcının birimleri veya onlu seçimi unuttuğunu ve doğrudan başlat / durdur düğmesine bastığını varsayalım; Bu senaryoda ne olması gerekiyor? Bu, yazılım içinde ele alınması beklenen bir hata koşulu var. Bu senaryonun üstesinden gelmenin yaygın bir yolu, zamanlayıcıyı ancak sınır değeri sıfırdan büyükse başlatmaktır. Aşağıda verilen kod snippet’inin bu durumu işlemektedir.

Umarım kod parçasını iyi anladın. Zamanlayıcı, yalnızca verilen sınır değeri sıfırdan büyük olduğunda başlatılacaktır. Bu durum, SS_select düğmesi (Başlat / Durdur düğmesi) basılı tutulduğunda her defasında kontrol edilir.

Bu iki düğmenin işleyiş şekli çok basittir. ‘Birimler’ düğmesine her basıldığında birim değişkeni 1 artırır; Değeri aşan 9 değerini sıfırlanır. Benzer şekilde ‘onlu’ düğmesi 10’luk birimlerle artar. İşlev Display_Digits (), LCD’de sayıları görüntülemek için bir altprogramdır. Aşağıdaki Display_Digits () alt programının kod parçasını görebilirsiniz.

Rakamlar, LCD ekranın 2. Satırı 11 sütununda gösterilir. Bu, kod satırı ile yürütülür: Lcd_Out (2,11, basamak);

Start_timer (zaman) adlı bir işlev fark ettiyseniz; Zamanı denetleyen alt programdır. Bu yüzden işlevi görelim.


“void start_timer(unsigned short MinVal)

{

unsigned short temp1, temp2;

Relay = 1;

ON_OFF = 1;

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,1,Message2);

Lcd_Out(2,1,Message5);

OPTION_REG = 0x80 ;

INTCON = 0x90;

for (i=0; i<MinVal; i++)

{

temp1 = (MinVal-i)%10 ;

temp2 = (MinVal-i)/10 ;

Lcd_Chr(2, 12, temp2+48);

Lcd_Chr(2, 13, temp1+48);

j=1;

do

{

Delay_ms(1000);

j++;

} while(((j<=60) && (Clear ==0)));

&nbsp;

if (Clear)

{

Relay = 0;

Delay_ms(500);

Lcd_Out(1,1,Message3);

INTCON = 0x00;

goto stop;

}

}

stop:

Relay = 0;

ON_OFF = 0;

unit = 0;

ten = 0;

clear = 1;

}

&nbsp;

void interrupt(void)

{

if (INTCON.INTF == 1)   // Check if INTF flag is set

{

Clear = 1;

INTCON.INTF = 0;       // Clear interrupt flag before exiting ISR

}

}”

Programımızda INTCON = 0x90; Ve zamanlayıcı, ayarlanan 00 sınırını aştığında. Bu, zamanlayıcı çalışmaya başladığında kesmeyi başlattığımızı ve ayarlanan değeri aştığında, tüm kesmeleri devre dışı bırakacağız demektir.
Röleyi, zaman ayarlandığında ve kullanıcı Başlat / Durdur düğmesine basarken bazen AÇIK duruma getirmek için kullanırız. Zaman rölesi ayarlanan değere ulaştığında / aştığında aynı röle kapanır.
İşte bu projenin bir donanım uygulaması.

 

Kaynak kodu
Bu dijital sayım zamanlayıcı projesi için komple kaynak kodu sağladık. Kaynak kodu, aşağıda verilen bağlantıyı kullanarak indirebilirsiniz.
Kaynak Kodunu İndirin [Dijital Geri Sayım Sayacı]
Not: – Umarım siz de projeyi gerçekten iyi anlamışsınızdır. Herhangi bir şüpheniz varsa lütfen yorum bölümünde sormaya çekinmeyin.

Leave a Reply

Your email address will not be published.
Required fields are marked *