Pic 2 sensör 2 röle kodu

Marquelie

Üye
Katılım
27 Ocak 2014
Mesajlar
3
Puanları
1
Yaş
36
Merhaba arkadaşlar, 24v luk 2 sensör girişine bağlı olarak 2 röle kontrolü yapmak istiyorum. Sensör 1 önce 0 sonra 1 olduğunda 0.1 saniye bekleyip 1.röleyi açacak 0.2 saniye daha bekleyip 2. röleyi açacak tekrar 0.1 saniye bekleyip 2. röleyi kapatacak. 2. Sensör 1 olduğunda ise 1. röle kapanacak ve döngünün başına dönecek. Kod yazdım fakat interruptlarda sorun var sanırım sağlıklı çalışmıyor, yardımlarınızı bekliyorum.
 
Yazdığım kod şu şekilde

#include <main.h>
#int_EXT
void EXT_isr(void)
{
output_low(PIN_B1);
disable_interrupts(INT_EXT);
disable_interrupts(GLOBAL);
delay_ms(50);
}
void main()
{
while(TRUE)
{
if (!input(PIN_A0))
{
if(input(PIN_A0))
{
output_high(PIN_B1);
delay_ms(200);
output_high(PIN_B2);
delay_ms(100);
output_low(PIN_B2);
ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
delay_ms(50);
}
}
}
}
Devre simülasyonu da böyle

Adsız.jpg
 
selam
sanırım giyotin makası kumanda edeceksiniz. c dilini bilmiyorum fakat tüm işi burada kesme de gerçekleştirseniz daha basit olur ana döngü de hiç bir kod olmadan çalışsın pic.kesme gerçekleştiğinde ise kesme etiketinde yapmak istediğiniz tüm işlemleri yapın birde öneri olsun. 1. ve 2. röle cıkışlarını kumanda edecek olan zaman sürelerini 2 pot ile elle ayarlamayı da ekleyin yada mini switch ler ile kademeli olarak mesala 0.1+0.2+0.4+0.8 kullanım kolaylığı sağlar.
 
selam
sanırım giyotin makası kumanda edeceksiniz. c dilini bilmiyorum fakat tüm işi burada kesme de gerçekleştirseniz daha basit olur ana döngü de hiç bir kod olmadan çalışsın pic.kesme gerçekleştiğinde ise kesme etiketinde yapmak istediğiniz tüm işlemleri yapın birde öneri olsun. 1. ve 2. röle cıkışlarını kumanda edecek olan zaman sürelerini 2 pot ile elle ayarlamayı da ekleyin yada mini switch ler ile kademeli olarak mesala 0.1+0.2+0.4+0.8 kullanım kolaylığı sağlar.
Teşekkür ediyorum cevabınız için ancak benden istenen şey bu şekilde yani bir kod olacak ve yukarıda yazdığım işi yapacak, daha farklı bir yöntemle yapma şansım yok ne yazık ki.
 
Yazdığım kod şu şekilde

#include <main.h>
#int_EXT
void EXT_isr(void)
{
output_low(PIN_B1);
disable_interrupts(INT_EXT);
disable_interrupts(GLOBAL);
delay_ms(50);
}
void main()
{
while(TRUE)
{
if (!input(PIN_A0))
{
if(input(PIN_A0))
{
output_high(PIN_B1);
delay_ms(200);
output_high(PIN_B2);
delay_ms(100);
output_low(PIN_B2);
ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
delay_ms(50);
}
}
}
}
Devre simülasyonu da böyle

Ekli dosyayı görüntüle 15436

buradaki
if (!input(PIN_A0))
{
if(input(PIN_A0))
{

satırını açıklarmısın anlamadım
if (!input(PIN_A0)) burada a0 ın tersini alıyor
ve hemen altındada
if(input(PIN_A0)) a0 ın 1 olmasını sorguluyorsun galiba bir algoritma hatası var burada
ilk kodda tesini almandan sonra 2. kod gerçekleşesiye kadar bir döngüde bekletmen gerek aksi taktirde pic ilk koşul gerçekleşsede gerçekleşmesede devam edecek tir.
ilk koşul oluşunca ( if (!input(PIN_A0)) ) pic2. koşul olasıya kadar ( if(input(PIN_A0)) ) bir döngü içerisin de bekletmelisin mesela

c dilini bilmiyorum pbp kullanıyorum buradaki örnekten anlaya bilirsin umarın

if porta.0=0 then

bekle:
pause 10
if porta.0 = 0 then goto bekle
.
.
.
endif
 

Forum istatistikleri

Konular
129,842
Mesajlar
930,702
Kullanıcılar
452,686
Son üye
heisener123

Yeni konular

Geri
Üst