Pic motor kontrolü sorunu yardım...

Başlatan karizma, 25 Temmuz 2014, 20:39:31

karizma

ö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


isis şeması ve yapamadığımız program
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


ArifAhmet

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.
Yaşasın Open Source!

mehmet

#2
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ı.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"