Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Düzenleyebilir misiniz acaba ?

Başlatan serdar546, 31 Mayıs 2014, 00:57:05

serdar546

arkadaşlar bir led devresi yaptım butona bastığımda çıkışı 0'a çekerek led yanacak ve timer0 saymaya başlayacak, 12 saat olduğunda a0'ı 1 yapacak ve bu sürekli tekrarlanacak. aşağıda verdiğim kodları düzenleyebilecek var mı acaba ?




#include <16F628a.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOMCLR //sigortalar ayarlanıyor, iç kristal kullanılacak ve mclr pullup kullanılmayacak
#use fast_io(b)  //hızlı giriş çıkış ayarı
#use fast_io(a)
#use delay(clock=4MHZ) //kristal ayarı
#byte INTCON=0x0B
#byte PIE1=0x8C
int i=0;
int1 a=0;int sn,dk,saat;
#int_timer0
ali(){

if(a==1)
{
{output_low(PIN_A0);}
set_timer0(217);
i++;
if(i==100)
{sn++; i=0;}
if(sn==60)
{dk++;sn=0;}
if(dk==60)
{saat++;dk=0;}
if(saat==12)
{output_high(PIN_A0);saat=0;}
}
}

void main()
{
INTCON=0b11000000;
PIE1=0b00100000;

   set_tris_b(0x01000000); //b portu giriş
   set_tris_a(0x00); //a portu çıkış
   port_b_pullups(TRUE); // portb pull-up dirençleri devrede
   output_a(0x00000001);
   output_b(0x01000000);
   delay_ms(1);
   setup_timer_0(rtcc_internal | rtcc_div_256);
   enable_interrupts(global);
   enable_interrupts(int_timer0);
   set_timer0(217);
while (TRUE){
if(input(PIN_b7)==1) //butona basıldığında timer0 çalışacak, A0'ı 0'a çekecek ve 12saat sonra A0'ı 1e çekecek(sürekli tekrar edecek)
{
delay_ms(300); //buton ark yapmaması için
a++;
}

if(a==2) //butona 1 kere basıldığında timer0 çalışacak, 2. kez basıldığında timer0 duracak
{
a=0;}

}}
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

abstruse

Uygulamada işi basitçe bitirmeyi düşün müşsünüz galiba da 12 saat boyunca gecikme saydırmak biraz tutarsız olabilir gibi geldi. bi saat entegresi kullanmayı istemez misiniz. Bu şekilde tam 12 saati de yakalayamazsınız galiba.

serdar546

bu yaptığım proje bitkiyi otomatik olarak belirli bir süre aydınlatmak için ve tam 12 saat olması şart değil, baskı devresini yaptığım için değiştirmek istemiyorum bunu hocaya göstermeme birkaç gün kaldı o yüzden yetiştiremem
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

serdar546

Alıntı yapılan: aliemremen - 31 Mayıs 2014, 09:06:18
Uygulamada işi basitçe bitirmeyi düşün müşsünüz galiba da 12 saat boyunca gecikme saydırmak biraz tutarsız olabilir gibi geldi. bi saat entegresi kullanmayı istemez misiniz. Bu şekilde tam 12 saati de yakalayamazsınız galiba.
bu uygulamayı test amacıyla 10sn de 1 yansın sönsün şeklinde yaptım ama isiste çalışmıyor. butona bastıktan sonra devamlı yanık kalıyor
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

abstruse

#4


Osilatör kullanmayacaksın.

#include <16f628a.h>

#FUSES NOWDT                    
#FUSES HS                      
#FUSES NOPUT                   
#FUSES PROTECT                 
#FUSES NOBROWNOUT              
#FUSES NOMCLR                   
#FUSES NOLVP                  
#FUSES NOCPD                    
#FUSES INTRC                   
#FUSES INTRC_IO                 

#use fast_io(a)
#use fast_io(b)

#use delay(clock=4000000)

#zero_ram

int32 sn;


#int_timer1
void timer1_kesme ()
{

sn++;
set_timer1(3035);
 
}

void main ()
{
   set_tris_a(0x00);
   set_tris_b(0x80);
   output_high(PIN_A0);

   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

   

   
   
   
   while(1)
{
if(sn==20)
{
   output_high(PIN_A0);
   sn=0;
}


  while(input(pin_b7))

{
  while(input(pin_b7));
   output_low(PIN_A0);
   set_timer1(3035);
   enable_interrupts(INT_timer1);
   enable_interrupts(GLOBAL);
   
}

}
}


sn değeri

12 saat için

12*60*60=0,5*(sn)
sn=86400


10 saniye için

10=0,5*sn
sn=20    değerini gireceksin şu an 10 saniye sonra sönsün e ayarlı yani sn=20

serdar546

#5
teşekkürler çalıştı :) if(sn==20) yerine if(sn==86400) yazıcam ve olay biticek sanırım
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

abstruse

Evet tam olarak öyle ben teşekkür ederim.

serdar546

Alıntı yapılan: aliemremen - 31 Mayıs 2014, 19:22:08
Evet tam olarak öyle ben teşekkür ederim.
hocam son bişey sorucam ben bu kesmeyi nasıl durdurabilirim? yani butona bastığımda kesme çalışacak. ama butona 2. bastığımda bunu algılamayacak
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

Kabil ATICI

disable_interrupts(int_timer1);

başka kesme kullanmıyorsan,
disable_interrupts(GLOBAL);
ilede olabilir.
ambar7

abstruse

Alıntı yapılan: serdar546 - 01 Haziran 2014, 10:34:30
hocam son bişey sorucam ben bu kesmeyi nasıl durdurabilirim? yani butona bastığımda kesme çalışacak. ama butona 2. bastığımda bunu algılamayacak
Peki ikinci basmada ne yapmasını istiyorsun ?

serdar546

Alıntı yapılan: aliemremen - 01 Haziran 2014, 12:11:51
Peki ikinci basmada ne yapmasını istiyorsun ?
ben bunu proteusta kurduğumda çalışıyor bir sorun yok. fakat led söndüğünde butona tekrar bastığımda kesme tekrar devreye giriyor ve süre bitmeden ledi tekrar yakıyor. benim ricam bunu delay ile yapıyormuşuz gbi butona bastığımızda çalışacak, butona 2. basmamızda bu işlemi algılamayacak
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

abstruse

Sehir disina ciktimda bilgisayarima ulasinca unutmazsam yardmci olaym.

serdar546

Alıntı yapılan: aliemremen - 03 Haziran 2014, 10:57:40
Sehir disina ciktimda bilgisayarima ulasinca unutmazsam yardmci olaym.

ne zaman ulaşırsınız acaba yarın proje teslim edilecek de :)
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.