16F628 Entegresi kullanılarak Hazırlanmış ve Jalv2 ile kodlanmış 3 adet sayıcı devresi
ve kaynak kodları Yer almaktadır. Çalışma videoları içerisindedir.
1) 0-99 Sayıcı Devresi
0’dan başlayarak 99’a kadar saymak yapabilir. İleri ve geri saydırılabilmektedir.
2) 0-999 Sayıcı Devresi
0’dan başlayarak 999’a kadar saymak yapabilir. İleri ve geri saydırılabilmektedir.
3) 0-9999 Sayıcı Devresi
0’dan başlayarak 9999’a kadar saymak yapabilir. İleri ve geri saydırılabilmektedir.
Devreler PIC16F628 Mikrodenetleyicisi üzerine kurulu olup programı tarama yöntemi kullanılarak, Jalv2 dili ile yazılmıştır. Devre plakete yapıldığında sağ tarafta bulunan mavi çerçeve içindeki dirençler, sadece simülasyonun sağlıklı çalışması için kullanıldığından dolayı kullanılmayacaktır. Devreler de harici kristal yerine 16F628 içerisindeki kristal dahili osilatör kullanılmıştır. Uygulamada kristal elemanlarını kullanmaya gerek yoktur.
Sercan TEK
16F628 ile 0..99 İleri ve Geri Sayıcı Devresi
Geri butonuna basıldığında sayı 1 eksilir. İleri butonuna basıldığında ise sayı 1 artmaktadır. Sayı 99 olduğunda sıfırlanmaktadır.
Malzeme Listesi:
- 1 x 16F628
- 2 x 7 segmentli display(Ortak Katot)
- 3 x Buton
- 2 x Bc237 Transistör
- 7 x 330 Ohm Direnç
- 3 x 10K Direnç
- 2 x 1K direnç
- 1 x 100 nf Seramik Kondansatör
Jalv2 Kaynak Kodu :
-- ------------------------------------------------------------ -- Programın Adı : Sayıcı Devresi 0..99 (ileri - geri) -- Programcı : SsEeRrCcAaNn -- Sercan TEK -- -- Tarih : 12.11.2011 -- Kütüphaneler : 16F628a -- Compiler : Jalv2 2.4o -- ------------------------------------------------------------ ------------------------ Kullanılacak Pıc --------------------- include 16F628a pragma target clock 4_000_000 -- Kristal 4 MHZ pragma target osc INTOSC_NOCLKOUT -- Dahili OSC pragma target WDT DISABLED -- WDT Kapalı pragma target PWRTE ENABLED -- power up timer Açık pragma target MCLR External -- mclr pini kullanılıyor pragma target LVP DISABLED -- LVP Kapalı enable_digital_io() -- Tüm pinler Dijital ------------------ Pin Yönlendirme İşlemleri ------------------ portb_direction = all_output -- Portb komple çıkış (Display) alias display is portb pin_a6_direction = input -- Geri Butonu alias geri is pin_a6 pin_a7_direction = input -- İleri Butonu alias ileri is pin_a7 pin_a2_direction = output -- Onlar Display alias onlar is pin_a2 pin_a3_direction = output -- Birler Display alias birler is pin_a3 -- Başlangıç Ayarları birler = false onlar = false display = low -------------------------------------------------------------- var byte Sayi = 0 -- Artıp azaltacağımız Sayımız -- Gerekli Gecikmeleri Sağlayan Alt Program procedure bekle_1ms(word in n) is for n loop -- Döngü kadar 1 ms Gecikme Yap _usec_Delay(1000) -- 1 ms gecikme Yaratır. end loop end procedure -- Parametre olarak girilen sayının 7segment karşılığı verilir Function digit(byte in int) return byte is -- Ortak Katot case int of 0: return 63 1: return 6 2: return 91 3: return 79 4: return 102 5: return 109 6: return 125 7: return 7 8: return 127 9: return 111 end case end function -- Butonlara Basılıp basılmadığını Kontrol Eder procedure Buton_Kontrol is if (ileri == true) then -- İleri Butonuna Basıldı bekle_1ms(35) -- Buton Ark Süresi Gecikme sayi = (sayi + 1) % 100 -- Sayıyı 1 arttır 0..99 arası Kalsın end if if (geri == true) then -- Geri Butonuna Basıldı bekle_1ms(35) -- Buton Ark Süresi Gecikme if sayi > 0 then -- Sayı 0 dan büyükmü ? sayi = (sayi - 1) -- Büyük ise sayıyı 1 azalt end if end if end procedure -- Sayı değişkenini Displaylerde gösteren alt program procedure goster is for 20 loop -- 20*5 = her sayı 100 ms ekranda kalır display = digit(sayi / 10) -- Sayının onlar basamağı gösteriliyor onlar = high -- Onlar basamağı Aktif bekle_1ms(5) -- 5 ms Bekle onlar = false -- onlar basamağı Pasif display = digit(sayi % 10) -- Sayının birler basamağı gösteriliyor birler = high -- Birler basamağı Aktif bekle_1ms(5) -- 5 ms Bekle birler = false -- Birler basamağı Pasif end loop end procedure forever loop -- Sonsuz Döngü buton_kontrol -- Butonları Kontrol Et goster -- Sayıyı göster end loop
16F628 ile 0..999 İleri ve Geri Sayıcı Devresi
Devrede geri butonuna basıldığında sayı 1 eksilir. İleri butonuna basıldığında ise sayı 1 artmaktadır. Sayı 999 olduğunda sıfırlanmaktadır.
Malzeme Listesi:
- 1 x 16F628
- 3 x 7 segmentli display(Ortak Katot)
- 3 x Buton
- 3 x Bc237 Transistör
- 7 x 330 Ohm Direnç
- 3 x 10K Direnç
- 3 x 1K direnç
- 1 x 100 nf seramik kondansatör
Jalv2 Kaynak Kodu :
-- ------------------------------------------------------------ -- Programın Adı : Sayıcı Devresi 0..999 -- Programcı : SsEeRrCcAaNn -- Sercan TEK -- -- Tarih : 12.11.2011 -- Kütüphaneler : 16F628a -- Compiler : Jalv2 2.4o -- ------------------------------------------------------------ ------------------------ Kullanılacak Pıc --------------------- include 16F628a pragma target clock 4_000_000 -- Kristal 4 MHZ pragma target osc INTOSC_NOCLKOUT -- Dahili OSC pragma target WDT DISABLED -- WDT Kapalı pragma target PWRTE ENABLED -- power up timer Açık pragma target MCLR External -- mclr pini kullanılıyor pragma target LVP DISABLED -- LVP Kapalı enable_digital_io() -- Tüm pinler Dijital ------------------ Pin Yönlendirme İşlemleri ------------------ portb_direction = all_output -- Portb komple çıkış (Display) alias display is portb pin_a6_direction = input -- Geri Butonu alias geri is pin_a6 pin_a7_direction = input -- İleri Butonu alias ileri is pin_a7 pin_a1_direction = output -- Yüzler Display alias Yuzler is pin_a1 pin_a2_direction = output -- Onlar Display alias onlar is pin_a2 pin_a3_direction = output -- Birler Display alias birler is pin_a3 -- Başlangıç Ayarları birler = false onlar = false yuzler = false display = low -------------------------------------------------------------- var word Sayi = 0 -- Artıp azaltacağımız Sayımız -- Gerekli Gecikmeleri Sağlayan Alt Program procedure bekle_1ms(word in n) is for n loop -- Döngü kadar 1 ms Gecikme Yap _usec_Delay(1000) -- 1 ms gecikme Yaratır. end loop end procedure -- Parametre olarak girilen sayının 7segment karşılığı verilir Function digit(byte in int) return byte is -- Ortak Katot case int of 0: return 63 1: return 6 2: return 91 3: return 79 4: return 102 5: return 109 6: return 125 7: return 7 8: return 127 9: return 111 end case end function -- Butonlara Basılıp basılmadığını Kontrol Eder procedure Buton_Kontrol is if (ileri == true) then -- İleri Butonuna Basıldı bekle_1ms(50) -- Buton Ark Süresi Gecikme if sayi < 999 then -- Sayıyı 1 arttır 0..999 arası Kalsın sayi = (sayi + 1) else sayi = 0 end if end if if (geri == true) then -- Geri Butonuna Basıldı bekle_1ms(50) -- Buton Ark Süresi Gecikme if sayi > 0 then -- Sayı 0 dan büyükmü ? sayi = (sayi - 1) -- Büyük ise sayıyı 1 azalt end if end if end procedure -- Sayı değişkenini Displaylerde gösteren alt program procedure goster is var byte basamak[3] basamak[2] = byte((sayi / 100)) -- Yüzler basamağı Alındı basamak[1] = byte((sayi % 100)/10) -- Onlar Basamağı Alındı basamak[0] = byte((sayi % 100)% 10) -- Birler basamağı Alındı for 11 loop -- 11*4 = her sayı 44 ms ekranda kalır display = digit(basamak[2]) -- Sayının yuzler basamağı gösteriliyor yuzler = high -- Yüzler basamağı Aktif bekle_1ms(4) -- 4 ms Bekle yuzler = false -- Yüzler basamağı Pasif display = digit(basamak[1]) -- Sayının Onlar basamağı gösteriliyor onlar = high -- onlar basamağı Aktif bekle_1ms(4) -- 4 ms Bekle onlar = false -- onlar basamağı Pasif display = digit(basamak[0]) -- Sayının birler basamağı gösteriliyor birler = high -- Birler basamağı Aktif bekle_1ms(4) -- 4 ms Bekle birler = false -- Birler basamağı Pasif end loop end procedure forever loop -- Sonsuz Döngü buton_kontrol -- Butonları Kontrol Et goster -- Sayıyı göster end loop
16F628 ile 0..9999 İleri ve Geri Sayıcı Devresi
Geri butonuna basıldığında sayı 1 eksilir. İleri butonuna basıldığında ise sayı 1
artmaktadır. Sayı 9999 olduğunda sıfırlanmaktadır.
Malzeme Listesi:
- 1 x 16F628
- 4 x 7 segmentli display(Ortak Katot)
- 3 x Buton
- 4 x Bc237 Transistör
- 7 x 330 Ohm Direnç
- 3 x 10K Direnç
- 4 x 1K direnç
- 1 x 100 nf Seramik Kondansatör
Jalv2 Kaynak Kodu :
-- ------------------------------------------------------------ -- Programın Adı : Sayıcı Devresi 0..9999 -- Programcı : SsEeRrCcAaNn -- Sercan TEK -- -- Tarih : 12.11.2011 -- Kütüphaneler : 16F628a -- Compiler : Jalv2 2.4o -- ------------------------------------------------------------ ------------------------ Kullanılacak Pıc --------------------- include 16F628a pragma target clock 4_000_000 -- Kristal 4 MHZ pragma target osc INTOSC_NOCLKOUT -- Dahili OSC pragma target WDT DISABLED -- WDT Kapalı pragma target PWRTE ENABLED -- power up timer Açık pragma target MCLR External -- mclr pini kullanılıyor pragma target LVP DISABLED -- LVP Kapalı enable_digital_io() -- Tüm pinler Dijital ------------------ Pin Yönlendirme İşlemleri ------------------ portb_direction = all_output -- Portb komple çıkış (Display) alias display is portb pin_a6_direction = input -- Geri Butonu alias geri is pin_a6 pin_a7_direction = input -- İleri Butonu alias ileri is pin_a7 pin_a0_direction = output -- Binler Display alias Binler is pin_a0 pin_a1_direction = output -- Yüzler Display alias Yuzler is pin_a1 pin_a2_direction = output -- Onlar Display alias onlar is pin_a2 pin_a3_direction = output -- Birler Display alias birler is pin_a3 -- Başlangıç Ayarları birler = false onlar = false yuzler = false binler = false display = low -------------------------------------------------------------- var word Sayi = 0 -- Artıp azaltacağımız Sayımız -- Gerekli Gecikmeleri Sağlayan Alt Program procedure bekle_1ms(word in n) is for n loop -- Döngü kadar 1 ms Gecikme Yap _usec_Delay(1000) -- 1 ms gecikme Yaratır. end loop end procedure -- Parametre olarak girilen sayının 7segment karşılığı verilir Function digit(byte in int) return byte is -- Ortak Katot case int of 0: return 63 1: return 6 2: return 91 3: return 79 4: return 102 5: return 109 6: return 125 7: return 7 8: return 127 9: return 111 end case end function -- Butonlara Basılıp basılmadığını Kontrol Eder procedure Buton_Kontrol is if (ileri == true) then -- İleri Butonuna Basıldı bekle_1ms(50) -- Buton Ark Süresi Gecikme if sayi < 9999 then sayi = (sayi + 1) -- Sayıyı 1 arttır 0..9999 arası Kalsın else sayi = 0 end if end if if (geri == true) then -- Geri Butonuna Basıldı bekle_1ms(50) -- Buton Ark Süresi Gecikme if sayi > 0 then -- Sayı 0 dan büyükmü ? sayi = (sayi - 1) -- Büyük ise sayıyı 1 azalt end if end if end procedure -- Sayı değişkenini Displaylerde gösteren alt program procedure goster is var byte basamak[4] basamak[3] = byte(sayi / 1000) -- Binler Basamağı Alındı basamak[2] = byte((sayi % 1000) / 100) -- Yüzler basamağı Alındı basamak[1] = byte(((sayi % 1000) % 100) / 10) -- Onlar Basamağı Alındı basamak[0] = byte(((sayi % 1000) % 100) % 10) -- Birler Basamağı Alındı for 11 loop -- 11*4 = 44 ms biri gözüküyor display = digit(basamak[3]) -- Sayının binler basamağı gösteriliyor binler = high -- binler basamağı Aktif bekle_1ms(4) -- 4 ms Bekle binler = false -- binler basamağı Pasif display = digit(basamak[2]) -- Sayının Yüzler basamağı gösteriliyor yuzler = high -- Yüzler basamağı Aktif bekle_1ms(4) -- 4 ms Bekle yuzler = false -- Yüzler basamağı Pasif display = digit(basamak[1]) -- Sayının onlar basamağı gösteriliyor onlar = high -- onlar basamağı Aktif bekle_1ms(4) -- 4 ms Bekle onlar = false -- onlar basamağı Pasif display = digit(basamak[0]) -- Sayının birler basamağı gösteriliyor birler = high -- Birler basamağı Aktif bekle_1ms(4) -- 4 ms Bekle birler = false -- Birler basamağı Pasif end loop end procedure forever loop -- Sonsuz Döngü buton_kontrol -- Butonları Kontrol Et goster -- Sayıyı göster end loop
Uygulamalara ait proteus isis simülasyon ve jalv2 kod dosyaları: jalv2-ile-sayici-devreleri.7z
Şifre-Pass: 320volt.com
Yayım tarihi: 2011/11/13 Etiketler: jal counter, jal display, jal örnekleri, jalv2, jalv2 örnek, jalv2 sample, microchip pic projeleri, sayıcı devreleri
can not be open with proteus 7.10 :(((
merhaba öncelikle ellerinize sağlık fakat devre ISIS de hata veriyor nedeni ne olabilir?? Şimdiden teşekkkürler
Merhaba Ben bu devrelerden birini yapmak istiyorum.
Bu kullanılan entegre 16F628 kodlamamız mı gerekiyor yoksa direk entegreyi alıp kullanıyormuyuz….
Programlanması gerekiyor verilen kodlar ile.
Entegreyi aldığınızda içi boş geliyor.
selamlar;öncelikle çalışma çok güzel olmuş,elinize sağlık.verdiğiniz bu komutlarda butona basıp bıraktığımızda bir defa saysın istiyorsak hangi komutları hangi satıra girmemiz gerekli.program,butona basılı tuttuğumuz sürece saymaya devam ediyor.teşekkürler..
merhabalar.yazılımda butona basılı tutulduğu sürece sayım devam ediyor.bunu butona basıp çektikten sonra bir ileri veya geri gitsin istiyorsak,hangi kodu nereye yazmalıyız.teşekkürler.
Devrede kullanılan transistörler çok mu gerekliydi? Akım doğrudan entegreden çekiliyor (girerken de çıkarken de), transistörler en fazla lojik konum değiştiriyor, yazılımda bunu ters yapıp transistörler ortadan kaldırılabilirdi gibi duruyor. Yanlışım var mı?