pic te istenileni sırası ile yapma konusunda yardım

Başlatan Elektronikprojem, 31 Aralık 2015, 16:15:30


ete

Her şeyden önce bir Giriş Pini nedir Çıkış Pini nedir bunu öğrenmen gerekiyor.
Pic pinleri seçimli olarak hem giriş hemde çıkış pini olarak çalışabiliyor. Bunu ayarlayan ise TRIS registeridir. Her portun bir TRIS registeri vardır. 8 bitlik bu registerin her bir biti o portun pinlerini temsil eder. Bu registerde hangi biti "1" yaparsan temsil ettiği pin GİRİŞ pini olur. "0" olanlar ise çıkış pini olarak kalır. Sen PORTC nin tamamını GİRİŞ pini olarak ayarlamışsın. Çünki verdiğin değer TRISC=%11111111 şeklinde. Şimdi diyorsunki PORTC.7 de Buzzer bağlı. Buzzer çıkış pininde çalışır girişte değil. O halde yapman gereken TRISC=%01111111 şeklinde değer vermek.

Şimdi demişsinki "başlama butonuna basarsam " programda bir başlama butonu tanımlamamışsın kimdir hangi pine bağlı basınca pine LOW mu veriyor HIGH mı veriyor bunları açıklaman lazımki bizde bir şeyler anlayıp yorum yapabilelim.
Yazdığın kod parçasına bakalım şimdide;

IF PORTC.0=1 then
LCDOUT $FE,1, "TEST BASLADI"
PAUSE 250
ENDIF

IF PORTC=%01100000 then
LCDOUT $FE,1, "TEST OK"
PAUSE 250
ELSE
LCDOUT $FE,1, "KONUM ARIZALI"
PAUSE 200
HIGH PORTC.7

PORTC.0 da ne var ise ki sanırım başlama butonun budur ona basınca ekrana Test başladı yazıyor. Ama bu buton yalnızca başladı yazısını ekrana vermek için kullanılmış hiç bir şeyi aktif etmiyor. Eksiklik burada.

Sonrasında program PORTC.7 ve PORTC.6 ya bakıyor ikiside HIGH mıdır?. Birine buzzer bağladığını söylüyorsun o zaman ilk konumda o pin HIGH olamayacağı için otomatikman ELSE çalışıp ekrana KONUM ARIZALI yazdırıp HIGH PORTC.7 komutu ile Buzzer pini önce Çıkış pinine çevriliyor sonra o çıkışa HIGH veriliyor. Anlayacağın sonradan Buzer pinini Çıkış pini yapıyorsun. Başlangıçta bunu yapman gerek.

Şimdi PORTC.6 de ne olduğunu bilsem daha fazla akıl verirdim ama bilmediğim için bir şey söylemem mümkün değil maalesef.
Bu nedenle sorularınıza şema ekleyin diye sürekli tekrarlıyorum ama nafile eklemiyorsunuz ben ne yapayım.

Ete


Elektronikprojem

#17
Portc.6 ve portc.5 e buton bağlı.yazilimda da o şekilde portc.5 ve portc.6 ya basınca "test ok" yazıyor . Portd.0 a da buzzer bağlı.orda bir hata yapmışım yazıyı gönderince fark ettim ve düzenledim semayi da ekledim hocam. Ama sorun su bu pic e elektrik verdiğim anda konum arızalı yazmasin benim ilk başta portb.0 a basmami beklesin ardından ben o butona basınca kontrolü yapsın eger ki c.5 ve c.6 o anda basılı değilse o anda yazsın istiyorum kendi bilgim dahilindeki her şeyi denedim ama sonuç vermedi. Sayı diye bir değişken tanimlasam diye düşündüm ama çok buton var sayı degiskenini nasıl degistirecegimi bulamadım o da olmadi kısacası .sizden bu konuda yardım bekliyorum. Büyük yazı için kusura bakmayın böyle bir kural olduğunu bilmiyordum.iş bilgisayarindan yazarken fark edemedim zaman kısıtlı olduğu için

ete

Uyarı!!!!!;
Mesajlarını büyük harf kullanarak yazma. Bu forum dilinde kızarak bağırma anlamına geliyor. Bilmediğini düşünerek bu uyarıyı yapıyorum. Mesajını yeniden küçük harfli olarak düzenle. Yoksa sileceğim.

Madem PortC.7 de bir şey bağlı değil o halde neden programda;
IF PORTC=%11000000 Then şeklinde bir komutun var. O pin hiç bir zaman High olamayacak bunları düşünmen gerekiyor.
Son mesajında %11000000 yerine %01100000 şeklinde giriş kontrolü yapılacağını belirtmişsin. Sürekli değişiyor bunları çoktan aşmış olman gerekirdi. Hala donanımda kararsızsın gibi gözüküyor.

Her neyse madem sistem PortC.0 tuşuna basılınca test yapsın ve c5 ve c6 basılı değil ise ekrana Konum Arızalı yazsın istiyorsun PORC.0 testini bu işe dahil etmen gerekiyor. aşağıdaki gibi;

IF PORTC.0=1 Then
     IF PORTC=%01100000 Then
         LCDOUT $FE,1, "TEST OK"
         PAUSE 250
     ELSE
         LCDOUT $FE,1, "KONUM ARIZALI"
         PAUSE 200
         HIGH PORTC.7
     ENDIF
ENDIF


Ete

Elektronikprojem

Hocam portc.7 ye hiç bir zaman 1 vermedim yanlış okumuş olabilir misiniz.

Elektronikprojem

Yazdıklarımızı yarın deneyeceğim hocam ama su anki yazilimda test başladı yazmaz.
IF PORTC.0=1 Then
LCDOUT $FE,1, "TEST BAŞLADI"
pause 250
     IF PORTC=%01100000 Then
         LCDOUT $FE,1, "TEST OK"
         PAUSE 250
     ELSE
Olarak yazsam bir sıkıntı olur mu

ete

En son mesajımda verdiğim kod örneğini senin yazdıklarından kopyaladım. En altta ne yazıyor?
High portc.7 diye bir komut var orada benmi yanlış görüyorum?
Ete

Elektronikprojem

Hocam dediğim gibi ışte orada buzzer var diye hesapladim ardından portd.0 a bağladım tris leri ayarlarken orayı giriş olarak ayarladigim için şimdi portc.7 yi çıkış olarak ayarlayıp oraya da bağlayabilirim aslında

Elektronikprojem

Günaydın,
Hocam denedim ama bir kaç eksiklikler var sanki . çünkü motor anahtarı hızlı çeviriyor bunun hızına yetişmek için ne yapmalıyım yani ekran devreye ayak uyduramıyor bu nedenle çoğu zaman konum arızalı yazıyor.Portb.0 a bastıktan itibaren test  başlıyor ve anahtarın sağlamlık kontrolü toplamda 2 buçuk saniye civarında sürüyor.yani  böyle test cihazları yapanlar bu işi nasıl yapıyor anlamış değilim .
saygılar


İlyas KAYA

Hangi motor ?

Siz şu işi baştan sona bir anlatsanız da biz de anlasak olmaz mı ? Her defasında başka bir şey çıkıyor ortaya.
Taksit taksit anlatım yapıyorsunuz. Neden bütün senaryoyu yazmıyorsunuz ?

İnanın 2 sayfadır halen ne yapmak istediğinizi ben anlayamadım.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ete

Bir step motora adım bilgisi belirli bir gecikme ile verilirse motorun dönüş hızını bu gecikme ile azaltır yada artırabilirsin. Önceki verdiğin koda parçalarına bakarsak kullandığın gecikme sabit olarak 10ms. Bana kalırsa programın başında;
SURE VAR BYTE şeklinde bir değişken tanımla.
BASLA satırından evvel SURE=30 şeklinde bu değişkene sabit bir değer ver.
Sonra programda adım bilgileri arasında yer alan ;
PAUSE 10 komut satırlarını,
PAUSE SURE olarak değiştir.
Bu şekilde çalıştırınca yaklaşık motorun dönüş hızı 3 kat yavaşlayacaktır. Daha da yavaşlaması için SURE=30 yerine 40 veya 50 yazarsın. Böylece hızı istediğin gibi kontrol etmiş olursun.

Ete

Elektronikprojem

Sayın İlyas Kaya ,
Olayı en başa çekiyorum.
Ben çevirmeli anahtarın kontaklarının çalışıp çalışmadığını anlayacağım bir test aleti yapmak istiyorum .
Bu anahtar 0-1-2-3 konum ilerleyen bir anahtar. Anahtarın resmini ekledim bu anahtarda resimde görüldüğü gibi terminaller var ve bu terminaller benim devreme buton olarak bağlı. Anahtarımda 5 terminal var ve bunların her biri bir buton olarak düşünün. Bu terminallere 1a,2a,3a,5a,6a diye isimler koydum.Devrede de 1a terminalini portb.1 e, 2a terminalini portb.2 ye, 3a terminali portb.3e, 5a terminali portb.5 e, 6a terminali portb.6 ya bağlı .portb.0 a da testi başlatması için buton bağladım.

Şimdi anahtarın iç yapısına geleyim.
Anahtarın 0. konumunda hiç bir kontak basılı değil.
Anahtarın 1. konumunda 1a,3a,5a terminalleri kısa devre (portb.1,portb.3,portb.5)
Anahtarın 2 konumundaa 2a, 5a terminalleri kısa devre (portb.2, portb.5)
Anahtarın 3. Konumunda 5a,6a terminalleri kısa devre (portb.5, portb.6)

Anahtarın her konumu arasında 60 derece açı var yani 0 konumundan 1 konumuna geçerken 60 derece açıyla aynı şekilde 1 konumundan 2 konumuna geçerken de 60 derece açıyla çevriliyor.Böyle devam ediyor .
Bu anahtarı step motor ile çevirip sağlam mı değilmi diye kontrol etmek istiyorum.
resimde görüldüğü gibi annahtarı step motora bağladım.Normalde motor ve anahtar sabit duracak şu an deneme yaptığım için ben dönüşü sırasında elimle tutuyorum.

Şimdi gelelim nasıl çalışacağına;
1)Anahtar 0 konumundayken başlama butonuna (portb.0) a basınca motor yaklaşık olarak 60 derece dönme yapıyor.
2)60 derece dönme yapınca anahtar 0 konumundan 1 konumuna geliyor. Burda da 1a,3a,5a (portb.1,3,5) eğer kısa devreyse yani basılı ise motor 60 derece daha dönüyor.
3)Bu sefer anahtar 1 konumundan 2 konumuna geçiyor.Bu konumda da olması gereken 2a ve 5a nın (portb.2,portb.5) kısa devre (basılı) olması.Eğer bu şart sağlanırsa motor bi 60 derece daha dönüyor.
4)Bu sefer anahtar 2 konumundan 3 konumuna geçiyor. buradaki şart da 5a ve 6a nın kısa devre (basılı) olması.Eğer istenilen şart sağlanırsa motor anahtarı 0 konumuna geri getiriyor. Yani 180 derece geriye dönüyor. 

Yani motor 60+60+60=180 derece ilerliyor ardından ilk başladığı konuma geri geliyor.
Her 60 derecede bir butonla şartlar var o şartlar olursa ilerleme yapıyor.Devrem şu anda bu şekilde çalışıyor.
Diyelim ki bozuk bir anahtar var ve bu anahtarın 5a yani portb.5 e takılı olan terminali kısa devre olmuyor. ben bu anahtarı bağladım ve başlama butonuna bastım.
motor 60 derece döndü programda bakacak 1a,3a,5a basılı mı . E 5a basılı değil o zaman arıza verecek. İşte bu sırada devreye bir buzzer bağladım.Buzzer portb.7 ye bağladım. Normalde buzzer kontrol sırasında hata var ise çalacak. Ama devreye enerji verir vermez çalıyor başlama butonuna basınca haliyle şartlar sağlandığı için susuyor. Gerekli yazılımı daha önceden göndermiştim ama tamamen düzenleyip o şekilde tekrar ekledim. Yani sorun şu buzzer enerji verince çalmasın.Ben devreye enerji vereceğim başlama butonuna basacağım test başlayacak o anda istenilen şart olmazsa buzzer çalacak. Yani Anahtarda bir hata görünce .
Bir de; devreye bir tane lcd ekran bağladım kaçıncı konumda hata olduğunu yazmak için  yazdığım sorun çözülürse eğer lcd sorunu da çözülür diye düşünüyorum .

Elektronikprojem

Ete hocam belirlenen sürenin bu olması gerekiyor o yüzden 10 ms olarak ayarlı

İlyas KAYA

Teşekkür ederim. Çükür bütün bilinmeyenler ortaya döküldü. Şuan yüzeysel okudum ama detaylara ineceğim. Sakin bir akşamda olayı ayrıntısı ile inceleyip eksik kısımları detaylandırırım.

2 tane PIC neden kullanma ihtiyacı duydunuz ?
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Elektronikprojem

#29
Ben teşekkür ederim kusura bakmayın kafa karışıklığı olmasın diye o şekilde kısa anlatmaya çalıştım ama o daha da karıştırdı.İlk başta step motor devresini yaptım sonradan ekran ekledigim için bi daha baskı devre çıkartmamak için bu şekilde oldu. Bu arada şunu da söyleyeyim anahtarın terminalleri aynı zamanda ekranda ki devreye de bağlı ama ekran kısmı fazla kafa karıştırmasın asıl olan kısım cozulse ekran kısmının çözüleceğine inanıyorum tekrardan tesekkurler

Powered by EzPortal