Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: karizma - 25 Temmuz 2014, 20:39:31

Başlık: Pic motor kontrolü sorunu yardım...
Gönderen: karizma - 25 Temmuz 2014, 20:39:31
ö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

Başlık: Ynt: Pic motor kontrolü sorunu yardım...
Gönderen: ArifAhmet - 25 Temmuz 2014, 22:06:18
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.
Başlık: Ynt: Pic motor kontrolü sorunu yardım...
Gönderen: mehmet - 25 Temmuz 2014, 23:01:04
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ı.