bant sistemi hakkında

Başlatan overtake, 06 Mayıs 2012, 16:54:29

overtake

merhaba bi bant sistemi tasarlamak istiyorum adım motoru ile mekanik kısmını tamamladım fakat pic programlamada yeni olduğum için programı yazmakta biraz zorlanıyorum eğer yardımcı olabilirseniz sevinirim:

yazmak istediğim program şu şekilde:
bant üzerinnde hareket eden bir cismi algılayacak iki sensör var
bant harekete başlayacak bir buton ile ileri veya geri farketmez.

ileri hareket : ilk sensörden bilgi gelince portc.1 ve portc.2 çıkış verecek sırası ile ve sürekli tekrar layacak  portc.1 ve portc.2 seklinde sonsuz döngüye girecek ta ki ikinci sensörden bilgi gelene kadar
geri hareket : ikinci sensörden bilgi gelince ise portc.3 ve portc.4 aynı sekilde sırası ile çıkış verecek ve sürekli tekrar edecek ilk sensörden bilgi gelene kadar.

fakat en önemli nokta mesela ileri hareket devam ederken ikinci sensörden bilgi geldi diyelim ve o anda portc.2 çıkış vermiş biz ikinci harekete portc4 ten başlayacağız  portc.1 çıkış vermişse o anda portc.3 ten ikinci harekete başlayacağız.

aynı sekilde geri harekette iken ilk sensörden bilgi geldiğinde portc.3 ile bitmişse portc.1 ileri harekete başlayacak portc.4 ile bitmnişse portc.2 ileri harekete başlayacak.

ve bu döngü sürekli devam edecek .

arkadaşlar tüm hafta sonu uğraşmama rağmen programı yazmayı beceremedim bir program yazdım fakat tekrar ettiremedim acıkcası
yazdığım program su sekilde .

device 16F877
trisc=%00000111
trisd=%00000000
dim buton as portc.0
dim sensor1 as portc.1
dim sensor2 as portc.2
dim butled as portd.1
dim sensorled1 as portd.2
dim sensorled2 as portd.3
dim ileri1 as portd.4
dim ileri2 as portd.5
dim geri1 as portd.6
dim geri2 as portd.7
dim durum as byte
dim adim as bit
portd=0
durum=0
adim=0


hareket1:
while sensor1=1
ileri1=1
delayms 300
ileri2=1
delayms 300
wend


hareket2:
while sensor2=1
geri1=1
delayms 300
geri2=1
delayms 300
wend


ete

İsteğini yeterince açıklayamamışsın. Üstelik kafandan geçenleri az da olsa yazdığın programada yansıtamamışsın. Yapabilsen bizimde anlamamız daha kolay olurdu.
İşin sensör bilgisine göre çıkış verme işlemini anladım. Ancak anlamda bir eksiklik var. Zira sanki "1 nolu sensörden bilgi geldiğinde PortC.1 ve Portc.2 çıkış verecek ve sürekli tekrarlayacak" şeklinde bir açıklamaya karşı benim yapmam gereken PORTC.1=1 ve PORTC.2=1 şeklinde bir komut vermekten ibarettir. Zaten sende anlmamaışsın galiba ki direk bu çıkışları 1 yapımışsın.  Ama yazdıklarının alt kısmında başka bir laf etmişsinki bu benim yapmam gereken hareketi değiştiriyor.
Zira "Fakat en önemli nokta mesela ileri hareket devam ederken ikinci sensörden bilgi geldi diyelim ve o anda portc.2 çıkış vermiş biz ikinci harekete portc4 ten başlayacağız  portc.1 çıkış vermişse o anda portc.3 ten ikinci harekete başlayacağız." açıklamasına göre sanki bu çıkışlar sürekli aktif olmayacaklar arada bir de veya peryodik olarak kapanacaklar da. Kısaca bu çıkışlardan birer puls alınacak sanırım. Peki puls alınacak ise peryodu nedir. Bir şey söylemez isen PORTC.1=1 derim hemen ardından PortC.1=0 derim buda bir pulsdır. Ama doğrusu bence;
PORTC.1=1:DELAY 10
PORTC.1=0:DELAY 10
şeklinde bir komuttur. Burada yer alan Delay komutları puls süresini belirler. Sen bu konuda hiç bir bilgi vermemişsin. Anlaşılan Sistem puls verme şeklinde çalışacak ama sıra ile yapacak bunu . Puls verme sırası hangisinde ise diğer çıkışlarda da başlama o çıkıştan yapılacak anlamına geliyor açıklamaların.

Ben anladıklarıma göre istediğini yazacağım. Yazdıklarına bakılırsa hiçde bütün hafta sonu uğraşılmış kodlar değil bunlar. Rastgele yazılmış birşeyler olarak görüyorum. Yazma işinde mantık vardır. Mantığınıza göre istenenleri yapmalısınız.
Önce adımlar şeklinde senaryoyu yazalım.
1. Bant çalışıyor yön önemli değil bir şekilde çalışıyor diyelim. Program ilk önce hangi sensörün aktif olduğuna bakacak ve ona uygun bölüme atlayacak. Burada sensör1 aktif ise ILERI sensör2 aktif ise GERI bölümlerine atlanması gerekiyor.
Bu nedenle ilk komutumuz ;
IF SENSOR2=1 THEN GERI1  şeklinde bir komut olacaktır. Yani sistem geri çalışıyor ise oraya git anlamında bir komuttur.
2. Zaten SENSOR2 aktif değilse otomatikman SENSOR1 aktif demektir ve program GERI1 e gitmedi ise bir alt satırdan devam edecektir.
Burada önce ILERI1 aktif edilip ardından sensör2 aktifmi ona bakılacak aktif ise iler1 aktif olduğu için program geri1 e gidecektir.

ILERI1:
ILERI1=1
IF SENSOR2=1 then 
   ILERI1=0 'ıleri çıkışını kapattık    
   GOTO GERI1 'ileri1 aktif iken sensör2 aktif olunca geri1 aktif başlanacaktır.
ENDIF
DELAY 10
ILERI1=0:DELAY 10

Ileri1 çıkışından bir pulss çıkartmış olduk. Ardından iler2 den bir puls çıkartacağız. Benzer şekilde çıkış high olduğu zaman gidip Sensör2 ye bakacağız. Aktif ise ve bizde iler2 aktif olduğundan program otomatikman geri2 ye atlayacaktır. Tabiiki ileri çıkışlarını kapatarak oraya gidilmesi gerekiyor (sanırım).
ILERI2:
ILERI2=1
IF SENSOR2=1 THEN
   ILERI2=0
   GOTO GERI2
ENDIF   
DELAY 10
ILERI2=0:DELAY 10
GOTO ILERI1


Benzer işleri bu sefer GERI kısmında da yapmamız gerekiyor.
GERI1:
GERI1=1
IF SENSOR1=1 THEN
  GERI1=0
  GOTO ILERI1
ENDIF  
DELAY 10
GERI1=0:DELAY 10
GERI2:
GERI2=1
IF SENSOR1=1 THEN 
   GERI2=0
   GOTO ILERI2
ENDIF   
DELAY 10
GERI2=0:DELAY 10
GOTO GERI1


Hepsi bu kadar.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

overtake

device 16F877
trisc=%00000111
trisd=%00000000
dim buton as portc.0
dim sensor1 as portc.1
dim sensor2 as portc.2
dim ileri1 as portd.4
dim ileri2 as portd.5
dim geri1 as portd.6
dim geri2 as portd.7
dim adim as byte
portd=0
adim=0


hareket1:
while sensor1=1
et1:
if sensor2=1 then call hareket2
if adim=3 then call har1
har1:
ileri1=1
adim=1

ileri2=1
adim=2

if adim=4 then call har2
har2:
ileri2=1
adim=2

ileri1=1
adim=1

goto et1
wend


hareket2:
while sensor2=1
et2:
if sensor1=1 then call hareket1
if adim=1 then call har3
har3:
geri1=1
adim=3

geri2=1
adim=4

if adim=2 then call har4
har4:
geri2=1
adim=4

geri1=1
adim=3

goto et2
wend


ete hocam bende sizin mesajınızdan önce uğraşarak böyle birşey cıkartmıştım sizin verdiiniz programda çalışmakta ilginiz için öncelikle teşekkür ederim

hibrit step motor kullanıyorum ve 6 uç var hafta sonu uğraşım derken mekanik kısmını halletmek ve az olan programlama bilgimi geliştirmekle geçti :) sonrasında ancak bunları cıkarabildim.

motorun çalışmasından bahsediyim isterseniz altı uç var ileri için sarı1 ve gri1 geri içinse aynı sekilde sarı2 ve gri2 seklinde renkleri ve numaraları olan uçlar var bu mesela bir ileri bir geri hareket yaptırmak istediğimde örneğin anahtarlama su sekildeyse : ileri= sarı-gri-sarı geri yapacaksak sonrasında : sarı-gri-sarı seklinde yapmak gerekiyor hangi renkle bitmişse o renkle ileri yada geri hareket yaptırmak gerekiyor zaten programda sıkıntı yaratan nokta oydu genelde onu halletmek ve mekanik kısmı uğraş verdi bana.

neticede verdiğiniz bilgiler için çok teşkkür ederim projeyi çalıştırıp tekrar bu konuya not edeceğim ve bir forum müdavimi kazandığınızıda belirtmek istiyorum