öncelikle hayırlı forumlar
aşşağıdaki şema ile tek switch üzerinden ileri geri motor kontrolü yapmak istiyoruz lakin programlama konusunda yeterli olmadığımız için tam bir sonuç elde edemedik
devrenin çalışma sistemine gelincedevre ilk çalıştığında bekleme konumunda kalacak buton 0 olduğunda motor 2 saniye süreli çalışacak sonrasında beklemeye geçecek. buton açıldığında motorun 2 saniye süre ile geri dönmesi isteniyor
devrenin şuanki durumu çalıştığı anda motor bir yöne dönmeye başlıyor ve durmuyor butona basıldığında diğer yöne dönüyor yine durmuyor
programlama konusunda yardımlarınız esirgememenizi temenni ediyoruz iyi günler dilerim
(http://i.hizliresim.com/jzjmNL.gif)
isis şeması ve yapamadığımız program
http://www.dosya.tc/server33/lEfBRc/devre.rar.html (http://www.dosya.tc/server33/lEfBRc/devre.rar.html)
TrisA=255
Trisb=0
'---------------------------------------------------------------------------------------------------------------
CMCON=7
'---------------------------------------------------------------------------------------------------------------
PORTB=00001100
SYMBOL TUS= PORTA.0
SYMBOL LED= PORTB.0
symbol LED1= PORTB.1
SYMBOL LED2= PORTB.2
SYMBOL LED3= PORTB.3
BASLA:
IF TUS=0 THEN
HIGH LED
LOW LED2
PAUSE 2000
LOW LED
HIGH LED2
else
high led1
low led3
pause 2000
low led1
high led3
ENDIF
goto BASLA
END
PIC programlamayı pek bilmem ama şöyle bişey önerebilirim; Sen butona basılınca pine yüksek voltaj verip bırakıyorsundur büyük ihtimal. Yüksek voltajı verip 10ms sonra tekrar low'a çekersen sorunun hallolur gibi.
Kabaca algoritmayı yazalım;
değişkeni sıfırla
Buton 0 ise değişken artır, değişken 500 eşit mi? (bu sayı 2sn süre hesaplanana kadar artırılıp eksiltilebilir)
Eşit değil ise motoru ileri döndür, deği ise motor durdur.
değişkeni sıfırla
Buton 1 ise değişken artır, değişken 500 eşit mi? (bu sayı 2sn süre hesaplanana kadar artırılıp eksiltilebilir)
Eşit değil ise motoru geri döndür, değil ise motoru durdur.
Genel hatlarıyla böyle. Bunu if/else, while/wend, select/case komutlarıyla yapabilirsiniz.
Ancak süre çok kritik ise bunu başka yollar ile çözümlemek gerekir.
Kolay gelsin...
Bu şekilde yapılıp düzenlenmesi gerekli;
degisken var word
degisken = 0
basla:
while 1 '(sonsuz döngüde tutuluyor)
while tus = 0
degisken = degisken + 1
if degisken = 500 then ' (bu sayı 2sn süre hesaplanana kadar artırılıp eksiltilebilir)
'<ileri dönme işlemleri>
else
'<motor durdurma işlemleri>
degisken = 0 '(motor durunca değişken resetleniyor)
endif
wend
while tus = 1
degisken = degisken + 1
if degisken = 500 then '(bu sayı 2sn süre hesaplanana kadar artırılıp eksiltilebilir)
'<geri dönme işlemleri>
else
'<motor durma işlemleri>
degisken = 0 '(motor durunca değişken resetleniyor)
endif
wend
wend
Eksikler/hatalar olabilir...
Ek: Transistör bağlantılarınız da hatalı.