PİC18F4550 - 09 SAYICI

Başlatan proger, 12 Aralık 2014, 18:40:43

proger

iyi günler 18f4550 ile  09 sayıcı tasarlamak istiyoruz


Devremizin proteusta ki hali bu şekildedir. Anlamadığım nokta osilatörsüzde çalışmaktadır 1 saniye aralıklarla butona basıldığında sayıcı 0 dan 9 a saymaktadır

Ancak devreyi kurduğumuzda

butona basıldığında tüm display yanmaktadır. Tekrar basıldığında yine aynısı cıkmaktadır. Display 7 segment katottur.

Devreyi kurarken 22pF lık kondansatörler ve 4MHz lik kristal kullandık.

Kaynak kodları aşağıdaki gibidir
#include <p18f4550.h>
#include <delays.h>
//                                   hgfedcba     ortak cathod display için
#define SIFIR         0b00111111
#define BIR            0b00000110
#define IKI             0b01011011
#define UC             0b01001111
#define DORT        0b01100110
#define BES            0b01101101
#define ALTI           0b01111101
#define YEDI          0b00000111
#define SEKIZ        0b01111111
#define DOKUZ     0b01101111
void main(void){
char segment[]={SIFIR,BIR,IKI,UC,DORT,BES,ALTI,YEDI,SEKIZ,DOKUZ};
int i=0;
TRISD=0;
while(1)
{
PORTD=segment;
Delay10KTCYx(100);
i++;
if(i==10)
i=0;
}
}

Sizce proteusta çalışıp , devrenin kurulduğunda çalışmamasının sebebi nedir ? Kodmu , osilatör mü yoksa kullanılan displaymi ?

selimkoc

#1
PORTD=segment;


burada sıkıntı var? segment dizi değişken ama dizi olarak kullanılmamış.

https://elektrokod.wordpress.com/2013/12/31/7-segment-sayici-0-9/ linkinde mikroc ile yapılmış örneği inceleyiniz.

F.T

Bu program pic basicmi?Pic basic bölümünde açılmış.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Mr.Java

#3
while(1)
{
for(i = 0 ;i<10;i++)
{
PORTD=segment [i];
Delay10KTCYx(100);
}
if(i==10)
i=0;
}