Aynı Anda Birden Fazla Led Yakmak

Katılım
26 May 2010
Mesajlar
5
Puanları
1
Arkadaşlar merhaba, pic ile ve CCS C ile ilgili ilk projem. O yüzden detaylı anlatırsanız sevinirim. Projemi özet geçersem; birkaç trafik direğinin ışıklarını kontrol edeceğim. Her direğin her bir lambasının yanıp sönme sürelerini bilgisayardan C#'tan gireceğim. Sağdan soldan araştıra araştıra, sora sora baya ilerledim. Sadece tek sıkıntım kaldı.

Şimdi tek direk için yapabiliyorum, C#'tan aldığım sayıları delay_ms()'lerin içine yerleştiriyorum. Ancak CCS C yukarıdan aşağıya çalışıyor, bu yüzden bir led yanıp sönmeden diğer ledi yakamıyorum. Yani aynı anda iki kırmızı ışığı yakamıyorum. Yada yanması için ikisinin de sürelerinin aynı olması gerekiyor. Direklerin ledleri ile ilgili komutları her direk için {} arasına alıyorum. Özetle tüm {}'lerin aynı anda çalışması için nasıl bir yol izleyebilrim? Teşekkürler.

Kodumun basit hali şu şekilde:

Kod:
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io (b)
#use fast_io (c)

unsigned long k1=1000; 
unsigned long s1=1000;
unsigned long y1=1000;

unsigned long k2=500;
unsigned long s2=500;
unsigned long y2=500;

void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

set_tris_b(0x00); //tümüyle çıkış olsun
set_tris_c(0x00); //tümüyle çıkış olsun
output_b(0x00); //Sıfırlayalım
output_c(0x00); //Sıfırlayalım

//Direk 1
{
output_high(pin_b0);
delay_ms(k1);
output_low(pin_b0);
output_high(pin_b1);
delay_ms(s1);
output_low(pin_b1);
output_high(pin_b2);
delay_ms(y1);
output_low(pin_b2);
}

//Direk 2
{
output_high(pin_c0);
delay_ms(k2);
output_low(pin_c0);
output_high(pin_c1);
delay_ms(s2);
output_low(pin_c1);
output_high(pin_c2);
delay_ms(y2);
output_low(pin_c2);
}

}

Teşekkürler.
 
kırmızı ışıklar yazdığın programın hangi uçlarını kullanıyor ? biraz daha açıklayıcı olursan yardımcı olabilirim
 
Sırayla bağladım. Yani b0 kırmızı, b1 sarı, b2 yeşil. Aynı şekilde c0 kırmızı, c1 sarı, c2 yeşil. Teşekkürler.
 
neden aynı anda yanmasını istediklerini seri bağlamıyosun ?
 
C yi fazla bilmediğimden ,Programı PBP de yazdım .
T1 ve T2 süreleri değiştirilerek trafik ışıkları farklı sürelerde çalışıyor

PBP programı:

TRISA=0
TRISB=0
PORTA=0
PORTB=0

A VAR BYTE
B VAR BYTE
C VAR BYTE
D VAR BYTE
T1 VAR BYTE
T2 VAR BYTE

T1=3 'bilgisayardan gönderilecek veriler
T2=4 'bilgisayardan gönderilecek veriler

A=0
B=0
C=0
D=3
HIGH C
HIGH D

BASLA:
A=A+1
B=B+1
IF T1=A THEN
LOW C
C=C+1
IF C=3 THEN C=0
HIGH C
A=0
ENDIF
IF T2=B THEN
LOW D
D=D+1
IF D=6 THEN D=3
HIGH D
B=0
ENDIF

PAUSE 1000

GOTO BASLA
END
 
#define k1 pin_b0
#define s1 pin_b1
#define y1 pin_b2
#define k2 pin_b3
#define s2 pin_b4
#define y2 pin_b5
void main()
{
int i;
int sl;
int sn;
int sn2;
int ksure = 1;
int ssure = 1;
int ysure = 1;
int ksure2= 1;
int ssure2= 1;
int ysure2= 1;
int durum1=0;
int durum2=0;

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
output_b(0x00);
while(1)
{
delay_ms(10);
sl++;
if(sl==100)
{
sn++;
sn2++;
sl=0;
}
if(sn<ksure & durum1 == 0)
output_high(k1);
if(sn>=ksure & durum1 == 0)
{output_low(k1); durum1 = 1;}

if(sn<ssure+ksure & durum1 == 1)
output_high(s1);
if(sn>=ssure+ksure & durum1 == 1)
{output_low(s1); durum1 = 2;}

if(sn<ssure+ksure+ysure & durum1 == 2)
output_high(y1);
if(sn>=ssure+ksure+ysure & durum1 == 2)
{output_low(y1); durum1 = 0; sn=0;}
//-----------------------------------------------------------------------------
if(sn2<ksure2 & durum2 == 0)
output_high(k2);
if(sn2>=ksure2 & durum2 == 0)
{output_low(k2); durum2 = 1;}

if(sn2<ssure2+ksure2 & durum2 == 1)
output_high(s2);
if(sn2>=ssure2+ksure2 & durum2 == 1)
{output_low(s2); durum2 = 2;}

if(sn2<ssure2+ksure2+ysure2 & durum2 == 2)
output_high(y2);
if(sn2>=ssure2+ksure2+ysure2 & durum2 == 2)
{output_low(y2); durum2 = 0; sn2=0;}

}
}

Dostum bunu yazdım ama işini görürmü bi incele...
 
Mrb.
Soğuk depoda kapağa montajladığım,kapak açık iken iletimi kesen,kapalı iken iletimde olan bir manyetik sensör takılı.
1.röle kapak açıldığında on olacak
2. 3600 sn bu durumda bekleyecek
3.süre sonunda buzzer devreye girecek
4.2500 sn sonra röle off olacak ve buzzerde röleden 5000 sn sonra off olacak.
Tabiki bu sıralamanın hangi aşamasında olursa olsun kapak sensörü iletime geçtiği anda döngünün neresinde olursa olsun duracak ve başa dönüp hazır bekleyecek.
Komut listesini çözemedim yardımınızı bekliyorum.böyle iki işi yapabiilecek bir program videosu veya buna benzer ek bir yöntem varsa yaparsanız sevinirim.
 
ne alaka konuyla
 
aynı anda farklı ledleri yakar gibi aynı işlemi yapabilecek bir yazılıma ihtiyacım var. konuşulan kodlarla yakın olduğu için bu yazıyı yazdım. yardımcı olacak bilgiliye ihtiyacım var.
 

Forum istatistikleri

Konular
127,952
Mesajlar
913,875
Kullanıcılar
449,599
Son üye
Gksn

Yeni konular

Geri
Üst