Notlar..

320volt / Mikrodenetleyici Projeleri/

PIC16F877 İle lcd kronometre ve geri sayım devresi

Mikrodenetleyici Projeleri, blog arşivinde PIC16F877 İLE LCD KRONOMETRE VE GERI SAYIM DEVRESI konusu "ares* geri sayım devresi* isis* kronometre devresi* microchip pic projeleri* PIC16F877* picbasic pro* proteus* " ile etiketlendi

PIC 16F877 İLE LCD KRONOMETRE VE GERİ SAYIM DEVRESİ PICBASIC PRO

Bu devrede PIC 16f877 mikrodenetleyicisi kullanılarak LCD (Liquid Crystal Display) üzerinde kronometre ve geri sayım uygulaması yapılmıştır. Sayma işlemi için mikrodenetleyicinin TMR0 kesmesi kullanılmıştır. Devre tasarımı ve baskı devre işlemleri için Proteus ISIS ve Proteus ARES programları kullanılmıştır. Devreye ait akış diyagramı aşağıdaki gibidir.

Şekil 1:Akış diyagramı

lcd-kronometre-geri-sayim-akis-diagrami

Ön panel Görünümü

on-panel-lcd-buton-gorunum

1: Menüde yukarı hareket etme ve geri sayım sayacı değer artırma butonu,

2: Menüde aşağı hareket etme ve geri sayım sayacında değer azaltma butonu,

3: Seçili menüyü onaylama butonu,

4: Kronometre ve geri sayım sayacı için Başlat/Durdur/Devam etme butonu,

5: Kronometre ve geri sayım sayacı sıfırlama ve geri sayım sayacında saat, dakika, saniye değerlerinin seçilmesi,

Devre şeması ve baskı devre alt üst görünüm
kronometre-geri-sayim-devresi kronometre-geri-sayim-baski-devre kronometre-geri-sayim-pcb

Malzeme listesi ve fiyatlar

kronometre-geri-sayim-malzeme-listesi-maliyet

Devreye ait mikrodenetleyici kodları MicroCode Studio PlusPICBASIC PRO derleyicisinde yazılmış ve derlenmiştir. Derleme işlemi için bilgisayarınızda PBP246 ve MPASM assembly derleyici dosyaları bulunmalıdır.


'*****************************************************************

'*  DOSYA    : KRONOMETRE                                        *

'*  YAZAR    : HASAN ÜZÜLMEZ                                     *

'*  NOT      : KRONOMETRE VE GERİ SAYIM SAYACI                   *

'*  TARİH    : 08.03.2009 PAZAR                                  *

'*  Versiyon : 1.0                                               *

'*****************************************************************



@ device pic16f877 	'işlemci 16F877

@ device pic16f877, wdt_off  'Watch Dog timer kapalı

@ device pic16f877, pwrt_on  'Power on timer açık

@ device pic16f877, protect_off  'Kod Koruma kapalı



'---------------------------LCD TANIMLAMALARI[BAŞLA]----------------------------

Define LCD_DREG	PORTB	    'LCD data bacakları hangi porta bağlı?

Define LCD_DBIT		4		'LCD data bacakları hangi bitten başlıyor?

Define LCD_EREG	PORTB	    'LCD Enable Bacağı Hangi Porta bağlı?

Define LCD_EBIT		3		'LCD Enable Bacağı Hangi bite bağlı ?

Define LCD_RWREG PORTB 	    'LCD R/W Bacağı Hangi Porta bağlı?

Define LCD_RWBIT 	2 		'LCD R/W Bacağı Hangi bite bağlı ?

Define LCD_RSREG	PORTB	'LCD RS Bacağı Hangi Porta bağlı ?

Define LCD_RSBIT	1		'LCD RS bacağı Hangi Bite bağlı  ?

Define LCD_BITS		4		'LCD 4 bit mi yoksa 8 bit olarak bağlı?

Define LCD_LINES	2		'LCD Kaç sıra yazabiliyor

'---------------------------LCD TANIMLAMALARI[BİTİŞ]----------------------------



'-------------------------DEĞİŞKEN TANIMLAMALARI[BAŞLA]-------------------------

TRISA=%00011111

TRISB=0

TRISC=0

TRISD=0

TRISE=0

ADCON1=7

SIRA var byte

SECENEK var byte

SALISE var byte

SANIYE var byte

DAKIKA var byte

SAAT var byte

SAYAC VAR BYTE

TIP VAR BYTE

SALISEYENI var byte

SANIYEYENI var byte

DAKIKAYENI var bytE

SAATYENI var byte

MENU VAR PORTA.0

YUKARI var PORTA.1

ASAGI var PORTA.2

MODE VAR PORTA.3

DURDUR VAR PORTA.4

'-------------------------DEĞİŞKEN TANIMLAMALARI[BİTİŞ]-------------------------



'-------------------------LCD KARAKTER HAFIZASI[BAŞLA]--------------------------

LCDOUT $FE,$40, $00, $00, $00, $00, $00, $00, $00, $00   'CGRAM 0. ADRES " "

LCDOUT $FE,$48, $00, $04, $06, $1F, $06, $04, $00, $00   'CGRAM 1. "OK"

LCDOUT $FE,$50, $00, $00, $00, $00, $00, $00, $00, $00   'CGRAM 2. ADRES " "

LCDOUT $FE,$58, $1B, $0E, $11, $15, $17, $11, $0E, $00   'CGRAM 3. ADRES "kronometre"

LCDOUT $FE,$70, $04, $00, $0E, $04, $04, $04, $0E, $00   'CGRAM 6. "i"

'-------------------------LCD KARAKTER HAFIZASI[BİTİŞ]--------------------------



SAAT=0

DAKIKA=0

SANIYE=0

SALISE=0

SAATyeni=0

DAKIKAyeni=0

SANIYEyeni=0

SALISEyeni=0

clear

'----------------------------ANA MENU[BAŞLA]------------------------------------

BASLANGIC:

Lcdout $fe, 1

if asagi=0 then

   if sira<1 then

       call gecikme

       sira=sira+1

   else

       sira=0

   endif

endif

if YUKARI =0 then

   if sira<1 then

       call gecikme

       sira=sira-1

   else

       sira=0

   endif

endif

IF SIRA>1 THEN SIRA=1

LCDOUT $FE,$80,SIRA+1," KRONOMETRE"

LCDOUT $FE,$C0,SIRA," GER",6," SAYIM"

CALL GECIKME

SAAT=0

DAKIKA=0

SANIYE=0

SALISE=0

SAATyeni=0

DAKIKAyeni=0

SANIYEyeni=0

SALISEyeni=0

IF SIRA=0 AND MENU=0 THEN

while menu=0

wend

GOTO KRONOMETRE

ENDIF

IF  MENU=0 THEN

while menu=0

wend

goto GERI_SAYIM

endif

goto BASLANGIC

'----------------------------ANA MENU[BİTİŞ]------------------------------------



'---------------------------GERİ SAYIM[BAŞLA]-----------------------------------

GERI_SAYIM:

LCDOUT $FE,1

LCDOUT $FE,$83,"GER",6," SAYIM"

LCDOUT $FE,$C1,3," ",DEC2 SAAT,":",DEC2 DAKIKA,":",DEC2 SANIYE,":",DEC2 SALISE

call gecikme

IF DURDUR=0 THEN

while DURDUR=0

wend

IF SECENEK<2 THEN

SECENEK=SECENEK+1

ELSE

SECENEK=0

CALL GECIKME

ENDIF

ENDIF



IF SECENEK=0 THEN

   IF ASAGI=0 THEN

      IF SAAT=0 THEN SAAT=100

         SAAT=SAAT-1

         CALL GECIKME

   ENDIF

   IF YUKARI=0 THEN

   IF SAAT=99 THEN SAAT=-1

         SAAT=SAAT+1

         CALL GECIKME

   ENDIF

ENDIF



IF SECENEK=1 THEN

   IF ASAGI=0 THEN

      IF DAKIKA=0 THEN DAKIKA=60

         DAKIKA=DAKIKA-1

         CALL GECIKME

   ENDIF

   IF YUKARI=0 THEN

   IF DAKIKA=>59 THEN DAKIKA=-1

         DAKIKA=DAKIKA+1

         CALL GECIKME

   ENDIF

ENDIF



IF SECENEK=2 THEN

   IF ASAGI=0 THEN

      IF SANIYE=0 THEN SANIYE=60

         SANIYE=SANIYE-1

         CALL GECIKME

   ENDIF

   IF YUKARI=0 THEN

   IF SANIYE=>59 THEN SANIYE=-1

         SANIYE=SANIYE+1

         CALL GECIKME

   ENDIF

ENDIF

if mode=0 then

while mode=0

wend

TIP=1



if SALISE=0 AND SANIYE=0 AND DAKIKA=0 AND SAAT=0 THEN

GOTO GERI_SAYIM

ELSE



IF saat=>0 AND dakika=>0 AND SANIYE>0 THEN

SANIYE=SANIYE-1

ELSE

IF DAKIKA=0 AND SANIYE=0 THEN

IF SAAT>0 THEN SAAT=SAAT-1 : DAKIKA=59 :SANIYE=59

ENDIF



IF SANIYE=0 THEN

IF DAKIKA>0 THEN DAKIKA=DAKIKA-1 : sANIYE=59

ENDIF

ENDIF

salise=100



goto KESME_AYAR

ENDIF



else

if menu=0 then

while menu=0

wend

goto BASLANGIC

else

GOTO GERI_SAYIM

endif

ENDIF

'---------------------------GERİ SAYIM[BİTİŞ]-----------------------------------



'------------------------KRONOMETRE MENÜSÜ[BAŞLA]-------------------------------

KRONOMETRE:

LCDOUT $FE,1

LCDOUT $FE,$83,"KRONOMETRE"

LCDOUT $FE,$C1,3," ",DEC2 SAAT,":",DEC2 dakika,":",DEC2 saniye,":",DEC2 salise

CALL GECIKME

if mode=0 then

while mode=0

wend

TIP=0

goto KESME_AYAR

else

if menu=0 then

while menu=0

wend

goto BASLANGIC

else

GOTO KRONOMETRE

endif

endif

'--------------------------KRONOMETRE MENÜSÜ[BİTİŞ]-----------------------------



'-----------------------KESME KONFİGÜRASYONU[BAŞLA]-----------------------------

KESME_AYAR: 



ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git.

OPTION_REG=%10000101 'Pull up dirençleri İPTAL- Bölme oranı 1/64.

INTCON=%10100000 'Kesmeler aktif ve TMR0 kesmesi aktif

TMR0=0

IF TIP=0 THEN GOTO ARTIR

IF TIP=1 THEN GOTO AZALT

'-----------------------KESME KONFİGÜRASYONU[BİTİŞ]----------------------------- 



'----------------------------GERI SAYIM[BAŞLA]----------------------------------

AZALT:

LCDOUT $FE,$C3, DEC2 SAAT,":",DEC2 DAKIKA,":",DEC2 SANIYE,":",DEC2 SALISE

if mode=0 then

SALISEyeni=SALISE

SANIYEyeni=SANIYE

SAATyeni=SAAT

DAKIKAyeni=DAKIKA

while mode=0

wend

goto G_DURAGAN_ZAMAN:

else

goto AZALT

endif



G_DURAGAN_ZAMAN:

if durdur=0 then

HIGH PORTB.0

SAAT=0

DAKIKA=0

SANIYE=0

SALISE=0

SAATyeni=0

DAKIKAyeni=0

SANIYEyeni=0

SALISEyeni=0

endif

LCDOUT $FE,$C3, DEC2 SAATYENI,":",DEC2 DAKIKAYENI,":",DEC2 SANIYEYENI,":",DEC2 SALISEYENI

if mode=0 then

while mode=0

wend

goto G_DEVAM

else

if menu=0 then

CALL GECIKME

goto BASLANGIC

else

GOTO G_DURAGAN_ZAMAN

endif

endif



G_DEVAM:

SAAT=SAATyeni

DAKIKA=DAKIKAyeni

SANIYE=SANIYEyeni

SALISE=SALISEyeni

goto AZALT



'----------------------------GERI SAYIM[BİTİŞ]----------------------------------



'----------------------------KRONOMETRE[BAŞLA]----------------------------------

ARTIR:

LCDOUT $FE,$C3,DEC2 saat,":",DEC2 dakika,":",DEC2 saniye,":",DEC2 salise 



if mode=0 then

saliseyeni=salise

saniyeyeni=saniye

saatyeni=saat

dakikayeni=dakika

while mode=0

wend

goto K_DURAGAN_ZAMAN:

else

goto ARTIR

endif 



K_DURAGAN_ZAMAN:

if durdur=0 then

saatyeni=0

dakikayeni=0

saniyeyeni=0

saliseyeni=0

endif

LCDOUT $FE,$C3,DEC2 SAATYENI,":",DEC2 dakikaYENI,":",DEC2 saniyeYENI,":",DEC2 saliseYENI

if mode=0 then

while mode=0

wend

goto K_DEVAM

else

if menu=0 then

CALL GECIKME

goto BASLANGIC

else

GOTO K_DURAGAN_ZAMAN

endif

endif



K_DEVAM:

saat=saatyeni

dakika=dakikayeni

saniye=saniyeyeni

salise=saliseyeni

goto ARTIR

'----------------------------KRONOMETRE[BİTİŞ]----------------------------------



'------------------------KESME FONKSIYONU[BAŞLA]--------------------------------

DISABLE

KESME:

IF TIP=0 THEN

SAYAC=SAYAC+1

IF SAYAC=1 then

SAYAC=0

salise=salise+1

IF salise=100 THEN

salise=0

saniye=saniye+1

IF saniye=60 THEN

saniye=0

dakika=dakika+1

IF dakika=60 THEN

dakika=0

saat=saat+1

IF saat=99 THEN saat=0

ENDIF

ENDIF

ENDIF

ENDIF

ENDIF



IF TIP=1 THEN

SAYAC=SAYAC+1

IF SAYAC=1 then

SAYAC=0

SALISE=SALISE-1

IF SALISE=0 THEN

IF SANIYE<>0 THEN

SANIYE=SANIYE-1

SALISE=100

ENDIF

IF SANIYE=0 THEN

IF DAKIKA<>0 THEN

DAKIKA=DAKIKA-1

SANIYE=59

ENDIF

IF DAKIKA=0 THEN

IF SAAT<>0 THEN

SAAT=SAAT-1

DAKIKA=59

ENDIF

ENDIF

ENDIF

ENDIF

ENDIF

if SALISE=0 AND SANIYE=0 AND DAKIKA=0 AND SAAT=0 THEN GOTO GERI_SAYIM

ENDIF

INTCON.2=0

RESUME

'------------------------KESME FONKSIYONU[BİTİŞ]--------------------------------

GECIKME:

PAUSE 100

RETURN

END



Projenin tamamlanmış hali ve test aşamalarına ait resimler

lcd-kronometre-geri-sayim-picbasic-pro

lcd-kronometre-geri-sayim-picbasic-pro-2

lcd-kronometre-geri-sayim-picbasic-pro-3

lcd-kronometre-geri-sayim-picbasic-pro-4

lcd-kronometre-geri-sayim-picbasic-pro-5

lcd-kronometre-geri-sayim-picbasic-pro-6

lcd-kronometre-geri-sayim-picbasic-pro-7

PIC16F877 ile lcd kronometre ve geri sayım devresine ait tüm dosyalar isis simülasyon ares pcb ve kaynak picbasic pro yazılım dosyaları kronometre-gerisayim.rar

  • taha17

    abi cok tesekkurler ne desem bos ALLAH razı olsun

  • Mümin

    S.A Allah güç kuvvet versin. Gerçekten çok güzel bir çalışma. Peki saat geri sayımı bitirince buzzer dan ses vermesi için ne yapmamız lazım. Mesela 5 dakika saysın. 00 olunca buzzer dan ses çıksın. Foto Pozlama için.

    Saygılarımla
    Mümin Kalınkaya

  • Konyalı

    Baskı devrede dikkat ederseniz 33. pin Portb.0 ucu boşta yazılımda sürenin sıfırlandığı satırda

    if SALISE=0 AND SANIYE=0 AND DAKIKA=0 AND SAAT=0 THEN GOTO GERI_SAYIM

    bu pini aktif yaparsanız led veya buzzer bağlayabilirsiniz.Yalnız devre uygulayan bazı arkadaşlara göre biraz yavaş çalışıyo muhtemelen 5 dakikada 5-10 saniye sonra veya önce bitirebilir eğer hassas bi yerde kullanacaksanız düzgün çalışan bi sayacla kontrol edin ona göre fazla veya eksik değer girin.

    Kolay gelsin

  • Mümin

    S.A Hayırlı Ramazanlar dilerim.
    Vermiş olduğunuz bilgiden dolayı çok teşekkür ederim. Allah razı olsun.

    Saygılarımla
    Mümin Kalınkaya

  • bera

    Baskı devreyinin çıktıyı alırken orantılı çıkmadı büyük çıktı.Yardımcı olur musun?

  • CABBAR

    Selamün Aleyküm kardeş ellerine sağlık çok teşekkürler. sizden bir ricam olacak bu devrenin çizimlerinin orjinalleri lazım bana yardımcı olursanız sevinirim şimdiden teşekkürler.

  • samet

    Selamün Aleyküm ellerine sağlık çok teşekkürler. sizden bir ricam olacak bu devrenin çizimlerinin orjinalleri lazım bana yardımcı olursanız sevinirim şimdiden teşekkürler.

  • Konyali

    Aleyküm Selam yazının altında proje ile ilgili tüm dosya ve dökümanların bulunduğu “kronometre-gerisayim.rar” bağlantısını sanırım görmediniz. Bu bağlantıyı kullanarak dosyaları indirebilirsiniz.

  • samet

    Selam abi abi ben bu projeyi satın almak istiyorum satabilirmisiniz acaba ?

  • samet

    merhaba abi bunun örjinal dökümanını alabilirmiyim senden

  • mustafa

    selamün aleyküm abicim bu yaptığın devreyi ben satın almak istiyorum ben öğrenciyim ödev nedeniyle korınometreyi satın almak istiyorum lütfen abi çok önemli

  • Bekir Sayrım

    Selamün Aleyküm.

    Yapmış olduğunuz çalışma oldukça faydalı ve yararlı bir çalışma. Sizi tebrik ediyorum. Firmamızda bu cihazlardan kullanmak istiyoruz. Bizimle irtibata geçmenizi rica ediyorum

    Teşekkürler

    ARY OTOMOTİV
    Bekir Sayrım
    0216 312 62 00

  • taha çakır

    merhaba arkadaşlar. Bir konuda yardım isteyeceğim. Elinde bu kodun C’ye çevrilmiş hali olan var mı? yada çevirebilecek olan?

  • Y.ö

    Selamun aleyküm acaba devrenin display bağlanmış halini isis dosyası şeklinde koyar mısnız.

  • mustafa

    s.a kardeş programı yüklerken hata veriyor bunu nasıl düzeltebilirim

  • koray

    kardeşim bu klamenslerin bağlanma şeklini lcd ye net olarak gözüken bir resim vb. var mıdır ?

  • atakoz

    Devre çalışıyormu sorun varmı ona göre yapmayı düşünüyorum ??

  • atakoz

    Şu klemensi anlamadım nasıl oluyor 8*3(giriş) ??