0-99 sayacı

Başlatan ömer faruk, 31 Aralık 2013, 05:20:51

ömer faruk

merhaba arkadaşlar ben tarama yöntemi ile 0-99 sayacı yapmak istiyorum 1 ileri 1 geri ve birde reset butonu olan resimdeki gibi 2 ayrı 7segment display şeklinde yapmak istiyorum kullanılacak entegreler 1adet 16f628 1adet 7448 ve2 adet transistör  isis çizim leri ve PIC kodlarının en basit şekilde anlatabilirmisiniz veya bana yollaya bilirmisiniz .

ayrıca ben bu resimdeki  sayacı kendi kodlarımla oldugu şekildede çalıstırmak istedim yanlız bir yerden sonra displayler kendi kendine rakam atıyo belli belirsiz bununda nedenini merak ediyorum PIC kodları



#include <16F628.h>

#fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO, NOBROWNOUT,NOMCLR
#use delay(clock=4M)
int dizi[]=(0,1,2,3,4,5,6,7,8,9);
int sayi=0,birler,onlar;
void main(){
set_tris_a(0x00);
set_tris_b(0x00);
output_low(PIN_A0);
output_low(PIN_A1);
for(;;){
birler=sayi%10;
onlar=sayi/10;
output_high(PIN_A1);
output_b(dizi[birler]);
delay_ms(20);
output_low(PIN_A1);
output_high(PIN_A0);
output_b(dizi[onlar]);
delay_ms(20);
output_low(PIN_A0);
sayi++;
if(sayi==100)sayi==0;

}}

bu şekilde yazdım ama sorun cıkıyor sizce nerde hata yapıyor olabilirim.



ve lütfen 1. isteğimi benim kodlarımdan anlasıldıgı gibi kolay ve anlasılır yazarsanız sevinirim şimdiden teşekurler.

AKadirY

#1
#include <16F628.h>

#fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO, NOBROWNOUT,NOMCLR
#use delay(clock=4M)
int dizi[]=(0,1,2,3,4,5,6,7,8,9);
int sayi=0,birler,onlar;
int sayac=0;
void main(){
set_tris_a(0x00);
set_tris_b(0x00);
output_low(PIN_A0);
output_low(PIN_A1);
for(;;){

sayac=25;

while (sayac>0)
{
sayac--;

birler=sayi%10;
onlar=sayi/10;
output_high(PIN_A1);
output_b(dizi[birler]);
delay_ms(20);
output_low(PIN_A1);
output_high(PIN_A0);
output_b(dizi[onlar]);
delay_ms(20);
output_low(PIN_A0);
}
sayi++;
if(sayi==100)sayi==0;

}}

senin yazdığın programda yaklaşık 40ms de bir rakam değiştiği için sayıları göremiyorsundur. kırmızıyla yazdığım kodlarla döngü oluşturarak yaklaşık bir saniyelik bekleme sağlamış oldum. sayac değişkeninin değerini değişierek süreyi ayarlayabilirsin. proteusda deneme şansım olmadı.kolay gelsin.

Yusuf usta

forumda 628A ile yapılmış 7 segment display ile 0-99 ileri geri sayıcı devresi var. onun kodlarını indir bak kıyasla.

konu linki:
https://elektronikprojeler.com/index.php/topic,2891.15.html

ikinci sayfada pcb çizim için düzeltilmiş hali.rar dosyası var. birinci sayfada da kodlar ve isis çizim var.

Mühendislik Diplomayla olmaz. İnsanı adam eden, bilgi değil görgüdür.

ömer faruk

AKadirY bey
yazdıgınız şekilde yaptım isite çalıstırdıım ama 99-91-92-90 diyor ve sonrasında sıkıntılar olusuyor.kendi kendine bişeyler yapıyo benim bunda direttiğim sey defterimde yazan hocamızın yazdırdıgı kodlerın aynısını yazmama ragmen neden calısmıyor sorunu bulamıyorum.

Probody

belki yardımcı olabilir bu.. 877 ile 0-99 sayıcı


#include <16F877.h>
#fuses   hs,nowdt
#use  delay (clock=20000000)
#use  fast_io(d)
#use  fast_io(a)

int   i,x,sayi,birler,onlar;
const int   digit[10]={0x3f,0x06,0x5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

#int_timer0
Void kesmetimer0()
{
set_timer0(61);
i++;
if(i==99)
{
i=0;
sayi--;
if(sayi==-1)
sayi=99;
}
}
void main ()
{
set_tris_d(0x00);
set_tris_a(0x00);
i=0;
sayi=99;
enable_interrupts(global);
enable_interrupts(int_timer0);
setup_timer_0(rtcc_internal/rtcc_div_256);
set_timer0(61);
while(1)
{
birler=sayi%10;
onlar=sayi%10;
output_a(0x02);
output_d(digit[birler]);
delay_ms(5);
output_a(0x01);
output_d(digit[onlar]);
delay_ms(5);
}
}

Hızlı Yanıt

Not: Bu konu bir moderatör tarafından onaylanmadan görüntülenmeyecektir.

Adı:
E-Posta:
Doğrulama:
Lütfen bu kutuyu boş bırakın:
IRFP250 Nedir:
kısayollar: göndermek için alt+s veya önizleme yapmak için alt+p'ye basın