0-99 sayıcı 7 segment ile

Başlatan hmg, 04 Temmuz 2007, 10:10:58

hmg

arkadaşlar aşağıda 7 segment ile pic in b ve d portunu kullanarak 0-99 arası kronometre  yada sayıcı  için bir deneme yaptım fakat olmadı.
b portuna bağlı 7 seg. de 0 yazıyor ,d portundakinde ise 0-9 kadar durmadan yazıyor.ben burada b portunda 9 yazdımı d portunda 1 artış yapmak istedim. şimdiden tşk.iyi çalışmalar

main()
{
int sayac=0;
int sayac1=0;
charekran[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
charekran1[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
output_b(0x00);
output_d(0x00);
while(1)
{
for(sayac=0;sayac<10;sayac++)
{
output_b(ekran[sayac]);
delay_ms(500);
for(sayac1=0;sayac=9;sayac1++)
{
output_d(ekran1[sayac1]);
}
}
sayac=0;
}
}

MURSEL

for(sayac1=0;sayac=9;sayac1++)
hata ;)  sayaca 9 yüklemişin kosulun  sayac esitmi 9 a  for(sayac1=0;sayac==9;sayac1++)
bir = işateri daha koydum
hem 2 portu kullanmana gerek yok tek port la 4 pinlede 9999 sayıcı yapabilirsin 7 tanesi segmene 4 tanesi her dispilayin ortak ucuna teker teker baglanacak ve tarama yoluyla degerler gözükecek  tabi göz yanılmasından dolayı tüm degerler gözükecek bu mantıkla yapmaya calış

yazılımı algoritmasını incelemdim sadece o komutu görünce bildirmek istedim  


NOT her bi uygulama ve problem için aynı uygulama türlerinde konu başlıgı acmana gerek yokki  actıgın konun devamına problemlerini yaz  selametle kolay gelsin

hmg

mürsel kardeş ilgin için sağol. ama == koydum fakat birinci digit 9 oldu ve orda kaldı 2.digit ise sürekli 0-9 kadar yazıp yine yazıyor ve 1.digit 0 a dönmüyor.
iyi çalışmalar

erdinch

for(sayac1=0;sayac=9;sayac1++)


satırını

for(sayac1=0;sayac1<10;sayac1++)


şeklinde degiştirirsen sorunun büyük ihtimalle çözülecek.

Chan86

displayleri sürmek için ne kullandın acaba? onuda söylersen c de yardımcı olabilirim bende yaptım çünkü sayıcı

Chan86

4511 yada 7447 ilemi yaptın acaba onu bilmek istedim sorun yoksa devreni buraya verebilirsen daha iyi olur

hmg

chan86 kardeş ben displayi direk pic in portundan sürüyorum.anlıyacağınız ben bu işe yeni başladım ve temelden bunu deneyerek öğrenmek istiyorum.
bu yüzden sizden ipuçları istiyorum.çünkü elektronik ve proğram yazma tecrübem çok az.bir arkadaş pic te tek port kullanarak diğer portun 4 ucunu kullanarak 0-9999 sayıcı yapabilirsin dedi aslında en mantıklısı bu.

M_B

Merhaba Hmg arkadas;
asagıdakı linkte tarama yontemıyle yapılmıs sayıcı devresı ve kodları mevcut. Kodlar Hi-Tech C de yazılmıs degısıklık yaparak CCS C cevırebılırsınız. Kolay gelsın

http://www.biltek.tubitak.gov.tr/gelisim/elektronik/27.htm
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Chan86

evet 4 pin ucuyla 9999 sayıcı yapablirsin ama displayleri sürmek için bir entegre kullanman lazım eğer 4 pinle 4 9999 sayıcı yapacaksan istersen 4511 kullanmanı tavsiy3 ederim

hmg

biraz çalışma yardımlarınız sonucu 2 digit 7 segment için 18f4620 nin b ve d portlarını kullanarak 0-dan 99 kadar ekranda yazan aşağıdaki kodu yazdım.bu proğram proteus ta 0 dan 99 a kadar bir kez yazıyor sonra sadece 1.digit yani birler basamağını 0-9 kadar yazıyor. ve 10 lar basamağında hiç bir ışık olmuyor.
for ların yerini değiştirdim return ve goto kul.çalıştım ama tekrar 00 a döndüremedim döngüyü.



#include <18f4620.h>
#use delay(clock=4000000)
main()
{
int sayac=0;
int sayac1=0;
char ekran[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
char ekran1[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
output_b(0x00);
output_d(0x00);
for(;;)
{
for(sayac=0;sayac<10;sayac++)
{
output_b(ekran[sayac]);
delay_ms(200);
if(sayac==9){sayac1++;}
output_d(ekran1[sayac1]);
}
}
}

Chan86

3 tane for kullanman lazım
1 tanesi sonsuz döngü 1 tanesi 10lar basamağı için 1 taneside 1 ler basamağı için bunalrı dikkat eder yaparsan sana yardımcı olur hemen direk olarak vermek istemiyorum biraz çabalayıp kendin bulup öğrenmen  ;)
yapamazsan yardımcı olurum

hmg

chan86 kardeş.önceki mesajdaki kodda if yerine for döngüsü de kullandım ,yani dediğin gibi 3 for oldu ama olmadı.eğer yukarıdaki koda doğrusunu eklersen  sevinirim.3 gündür buna uğraşıyorum ,ilerleme oldu ama bazen takılıyorum ve ilerleyemiyorum.

Chan86

#include <18f4620.h>
#use delay(clock=4000000)
main()
{
int a=0;
int b=0;
char ekran[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
char ekran1[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
output_b(0x00);
output_d(0x00);
for(;;)
{
for(a=0;a<10;a++)
{
output_d(ekran1[a]);
for(b=0;b<10;b++)
{
output_b(ekran);
delay_ms(200);
}

}
}
}


bunu bir dene umarım isini görür

hmg

chan86 kardeş program çalıştı. teşekkürler.şimdi for döngülerini anlamaya uğraşıyorum.
iyi çalışmalar.....

hmg

arkadaşlar 2 digit 0-99 sayıcıyı ; 2 digiti 2 ayrı b ve d portunu kullanarak yardımlarınızla yaptım,şimdi ise 0-9999 4 digit ve ve 2  portu kullanarak ; birini 7 seg. uçlarına diğer portun 4 ucunu tarama için kullanıp yapmak istiyorum.ve burada artışlar tmr 0 kesmesi kullanarak yapılabilirmi.
örnek kod gönderir veya yazarsanız sevinirim.