#include<16f628a.h>
#fuses intrc_io,nowdt,nomclr
#use delay(clock=4m)
void main(void)
{
set_tris_a(0xff);
set_tris_b(0x00);
setup_comparator(A0_A3_A1_A2);
while(true)
{
if(C1OUT ==1)
{
output_high(pin_b1);
}
if(C1OUT == 0)
{
output_low(pin_b1);
}
if(C2OUT ==1)
{
output_high(pin_b2);
}
if(C2OUT == 0)
{
output_low(pin_b2);
}
}
}
Kayan sinyal animasyonu yapmak istiyorum yazılımı kolay gibi duruyor ama sorun devre bağlantısı.Tek far için misal 20 LED diğer far için 20 led desek toplamda 12f683 ile 40 ledi nasıl kontrol edebilirim.16f877a bile olsa 40 tane çıkışı yok sonuçta.Burda çoklama gibi bir şey yapmak gerek ama onu nasıl yapabiliriz.Yalnız ledler grup olarak değil tek tek kontrolü olmasını istiyorum yani çıkışa transistor baglayip tek kanaldan 3 4 led kontrol etmek istemiyorum bu mümkün mü acaba?
YanıtlaSilhttps://www.sifirzero.com/2020/05/pic-programlama-ccs-c-5-ucla-8-led.html?m=0. Bu örnege bakarak gelistirebilirsiniz
SilBu yorum bir blog yöneticisi tarafından silindi.
SilInterrupt araştırdım ama hangisinin uygun olduğunu bulamadım.MCLR ile kesme yapmak istiyorum bu mümkün mü yoksa ill denetleyicinin tıme 0 ınt bacağından mı yapmam gerekiyor?
YanıtlaSilMclr ucu denetliyicilerin reset ucudur kesme yapmaz. Wdt kesmesine bak istersen
YanıtlaSilAraştırdım ama PIC'i resetlemeye yarıyormuş benim isteğim alttaki programda işlem bitmesini beklemeden butona 2. kez bastığımda diğer programa geçmesini sağlamak.While döngüsünde yazacağım programdan döngü sonsuz olduğu için butona kaç kere basarsam basayım diğer programa geçmiyor bunun için uygun kesme wdt midir yoksa başka bir kesme mi?
YanıtlaSil#include<12f683.H>
#fuses intrc_io,nomclr,nowdt,noprotect
#use delay(clock=4m)
void main()
{
set_tris_a(0x00);
output_a(0x00);
#define LED pin_a0
#define LED2 pin_a2
#define LED3 pin_a4
int x=0;
while(1)
{
if(input(pin_a3)==1)
{
x++;
if(x==1)
{
output_high(LED);
delay_ms(1500);
output_low(LED);
}
else if(x==2)
{
output_high(LED2);
delay_ms(1500);
output_low(LED2);
}
else if(x==3)
{
output_high(LED3);
delay_ms(1500);
output_low(LED3);
}
}
}
}
uzun basılı tutarmısın.
Sil#include <12f683.h>
#fuses NOWDT,INTRC_IO,NOMCLR,BROWNOUT
#use delay (clock=4000000)
//#use fast_io(a)
int x=0;
void main ()
{
set_tris_a(0x00);
output_a(0x00);
while(true)
{
if(input(pin_a3))
{
delay_ms(30);
x++;
while (input(pin_a3));
}
if(x==1)
{
output_high(pin_a0);//ileri
delay_ms(100);
output_low(pin_a0);//ileri
output_high(pin_a1);
delay_ms(100);
output_low(pin_a1);
output_high(pin_a2);
delay_ms(100);
output_low(pin_a2);
output_high(pin_a4);
delay_ms(100);
output_low(pin_a4);
output_high(pin_a5);
delay_ms(100);
output_low(pin_a5);
output_high(pin_a5);//geri
delay_ms(100);
output_low(pin_a5);
output_high(pin_a4);
delay_ms(100);
output_high(pin_a4);
delay_ms(100);
output_low(pin_a4);
output_high(pin_a2);
delay_ms(100);
output_low(pin_a2);
output_high(pin_a1);
delay_ms(100);
output_low(pin_a1);
}
if(x==2)
{
output_high(pin_a0);//ileri
delay_ms(100);
output_low(pin_a0);//ileri
output_high(pin_a1);
delay_ms(100);
output_low(pin_a1);
}
}
x=0;
}
Deney bordunda deneyemedim şuan ama proteusta denedim evet basılı tutunca değişiyor.Yazılımı anlamaya çalışıp kendi istediğim şekilde düzenlemeye çalışacağım, burada hangi kesmeyi kullandınız? İlgilendiğiniz için teşekkür ederim.
SilKesme kullanmadim.
Sil