Pic Basic ile devrelerin kontrolü

Başlatan -ahmet-, 11 Şubat 2014, 22:16:22

-ahmet-

      Arkadaşlar; daha öncede devrelerin farklı zaman uzunluğunda sırayla çalıştırılması hakkında konu açmıştım. Aldığım cevaplar sayesin pic basic ile kod yazıp derledim ve isisde simülasyon yapıp çalıştırdım.Bir kaç sorum olacak.
Yaptığım çalışmayı biraz daha geliştirmek istiyorum ve yardımlarınızı bekliyorum.Soruların daha iyi anlaşılması için resim ekledim.
    1. SORU= Örneğin 5 tane fonksiyon var. Bu fonksiyonları pic'in B portundan çıkış alınarak sırasıyla çalıştırabilirim.Ama biraz farklı yapmak istiyorum.Mesela 5 tane fonksiyondan 2 tanesini devre dışı bırakıp, 3 tanesini sırasıyla çalıştırmak istiyorum.
Bu 5 fonksiyona ait ayrı butonlar olacak. 5 tane fonksiyonlardan hangilerinin sırasıyla gerçekleşmesini istiyorsam, o fonksiyonlara ait butona basıp fonksiyonu seçeceğim ve başlatma butonuna bastığımda seçtiğim fonksiyonlar sırasıyla çalışacak.Resimde 1. , 2. ve 4. fonksiyon seçili.
    2. SORU= 1. sorudaki fonksiyonlardan ayrı bir şekilde(fonksiyonlar arasında yok), örneğin klima olacak. Butona basıp klimayı çalıştırdıktan sonra butonlarla ısı ayarı yapabilirmiyim?
    3.SORU= Işık butonuna basıldığında ışık yanacak, aynı butona tekrar basıldığında ışık sönecek.
Kapı butonuna basıldığında PORTB.1 high olacak(motor sağa dönecek..5 saniye sonra PORTB.1 low olacak(motor duracak), 5 saniye sonra PORTB.2 high olacak( motor sola dönecek).5 saniye sonra PORTB.2 low olacak.(motor duracak. Kısaca anlatmak istediğim PORTB.1 kapıyı açacak, PORTB.2 kapıyı kapatacak.
    Bu işlemler ayrı piclerle yapılabilir, ama aynı pic üzerinde yapılabilinir mi?  Nasıl yaprım fikirlerinizi bekliyorum.




ete

Cevap-1: 5 tane fonksiyon  yada daha fazlası IF komutları ile test edilerek devreye sokulur yada sokulmaz.
IF komutlarını çalıştırabilmen için elinde ip ucu olması gerekir. İp ucunu da kendin açıklamışsın. Her bir fonksiyon için ayrı butonlar olacak demişsin. O halde işlem basit.
1. Nolu fonksiyon tuşuna basılmış ise (IF TUS1=0 THEN) şu işleri yap şeklinde emir vermek yeterli olur.
2. Nolu fonksiyon tuşuna basılmış ise (IF TUS2=0 THEN) şu işleri yap şeklinde emir vermek yeterli olur.
...
diğerleri içinde aynı test satırlarını yazmak yeterlidir. Bazen yapılacak iş çok olurs aişleri bir alt programda toplar ve komutu şöyle kullanırız. (IF TUS3=0 then GOTO ALT_UC) 3 nolu fonksiyon tusuna basılınca program ALT_UC isimli etikete gider ve orada başka bir yere yönlendirilinceye kadar ne varsa hepsini yerine getirir.

Fonksiyonların devre dışı bırakılması senin sisteminde tuşa basılmaması ile olur.

CEVAP-2:
IF TUS_KLIMA=0 then KLIMA_AC şeklinde bir komut ile klima fonksiyon tuşuna basılınca programı klimayı çalıştıracağın alt programa aktarırsın. Orada;
IF ARTIR=0 Then ISI=ISI+1
IF AZALT=0 Then ISI=ISI-1
şeklinde sıcaklık artırıp azaltmak elbette mümkün. Artırma ve eksiltmelerde sınırları kontrol etmekte yarar var. Örneğin artıra artıra 100 dereceye geldin daha fazla artırmasın diyorsan IF ISI=101 THEN ISI=100 şeklinde kısıtlama koymak lazım. Aynı şekilde azaltma içinde kısıtlama koymakta yarar var.

CEVAP-3: Sorduğun şekil TOGGLE çalışma ile ilgili dir.
IF TUS_ISIK=0 THEN TOGGLE ISIK
şeklinde bir komut kullanırsan ISIK tuşuna basılınca ISIK isimli çıkışın konum değiştirir. HIGH ise LOW yada LOW ise HIGH olur. Bunun matematiksel karşılığı şöyledir. ISIK=1-ISIK  bu işlemde her çelıştırıldığında ISK değerini 1 ise sıfır, sıfır ise 1 yapar.

IF TUS_KAPI=0 THEN
    PORTB.1=1
    SAYAC=0
    WHILE SAYAC<5000
      PAUSE 1
      SAYAC=SAYAC+1
    WEND
     PORTB.1=0
     PAUSE 5000
     PORTB.2=1
     PAUSE 5000
     PORTB.2=0
ENDIF

Görüldüğü gibi bütün işi tek bir pic yapabilir. Yeterki kafayı çalıştırıp neyi nasıl yapacağını bil.
Buradaki örneklerde 5 er saniyelik gecikmelerde program başka iş yapamaz. Çünki 5 sn lik sürenin dolması beklenir. Ama süre tutulmasını Kesme ile yaparsan sen başka işleri yapmaya devam ederken zaman tutulur ve dolduğunda gerekli açma yada kapatma işlemleri yapılabilir.
 
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

-ahmet-

Alıntı yapılan: ete - 12 Şubat 2014, 11:29:25
Cevap-1: 5 tane fonksiyon  yada daha fazlası IF komutları ile test edilerek devreye sokulur yada sokulmaz.
IF komutlarını çalıştırabilmen için elinde ip ucu olması gerekir. İp ucunu da kendin açıklamışsın. Her bir fonksiyon için ayrı butonlar olacak demişsin. O halde işlem basit.
1. Nolu fonksiyon tuşuna basılmış ise (IF TUS1=0 THEN) şu işleri yap şeklinde emir vermek yeterli olur.
2. Nolu fonksiyon tuşuna basılmış ise (IF TUS2=0 THEN) şu işleri yap şeklinde emir vermek yeterli olur.
...
diğerleri içinde aynı test satırlarını yazmak yeterlidir. Bazen yapılacak iş çok olurs aişleri bir alt programda toplar ve komutu şöyle kullanırız. (IF TUS3=0 then GOTO ALT_UC) 3 nolu fonksiyon tusuna basılınca program ALT_UC isimli etikete gider ve orada başka bir yere yönlendirilinceye kadar ne varsa hepsini yerine getirir.

Fonksiyonların devre dışı bırakılması senin sisteminde tuşa basılmaması ile olur.

CEVAP-2:
IF TUS_KLIMA=0 then KLIMA_AC şeklinde bir komut ile klima fonksiyon tuşuna basılınca programı klimayı çalıştıracağın alt programa aktarırsın. Orada;
IF ARTIR=0 Then ISI=ISI+1
IF AZALT=0 Then ISI=ISI-1
şeklinde sıcaklık artırıp azaltmak elbette mümkün. Artırma ve eksiltmelerde sınırları kontrol etmekte yarar var. Örneğin artıra artıra 100 dereceye geldin daha fazla artırmasın diyorsan IF ISI=101 THEN ISI=100 şeklinde kısıtlama koymak lazım. Aynı şekilde azaltma içinde kısıtlama koymakta yarar var.

CEVAP-3: Sorduğun şekil TOGGLE çalışma ile ilgili dir.
IF TUS_ISIK=0 THEN TOGGLE ISIK
şeklinde bir komut kullanırsan ISIK tuşuna basılınca ISIK isimli çıkışın konum değiştirir. HIGH ise LOW yada LOW ise HIGH olur. Bunun matematiksel karşılığı şöyledir. ISIK=1-ISIK  bu işlemde her çelıştırıldığında ISK değerini 1 ise sıfır, sıfır ise 1 yapar.

IF TUS_KAPI=0 THEN
    PORTB.1=1
    SAYAC=0
    WHILE SAYAC<5000
      PAUSE 1
      SAYAC=SAYAC+1
    WEND
     PORTB.1=0
     PAUSE 5000
     PORTB.2=1
     PAUSE 5000
     PORTB.2=0
ENDIF

Görüldüğü gibi bütün işi tek bir pic yapabilir. Yeterki kafayı çalıştırıp neyi nasıl yapacağını bil.
Buradaki örneklerde 5 er saniyelik gecikmelerde program başka iş yapamaz. Çünki 5 sn lik sürenin dolması beklenir. Ama süre tutulmasını Kesme ile yaparsan sen başka işleri yapmaya devam ederken zaman tutulur ve dolduğunda gerekli açma yada kapatma işlemleri yapılabilir.
 
Ete


Çok teşekkür ederim. Bir çok çalışmalarınızı gördüm. Bana çok yararlı oldu.
Yine sorum olacak.
1) Mesela ben klimayı röle ile kontrol etmeyi düşünüyorum.Galiba pic'den 5 v çıkış alınıyor. Röleyi bu 5 v ile açıp kapatırım diye düşünmüştüm. Yani klima tuşuna bastığımda PORTB.1 high olacak ve röle kontağını iletime sokarak röleye bağlı rezistans ve fan çalışacak. Isı ayarı tuşlarına bastığım zaman başka pinden mi çıkış alınacak yani rezistansın ısısını nasıl değiştirecek?

2) Örneğin klimayı çalıştırdıktan sonra butonlarla çalışma süresini ayarlayabilirmiyiz?
IF TUS_KLIMA=0 then KLIMA_AC
PAUSE 5000  >>>>buradaki 5000 ms' yi butonlarla değiştirebilirmiyiz?


3)Kapı komutlarıyla ilgili olarak;
    SAYAC=0
    WHILE SAYAC<5000
    PAUSE 1
    SAYAC=SAYAC+1

SAYAÇ, WHİLE SAYAÇ<5000 komutları ne işe yarıyor?
4)
@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_ON -- OFF
@ DEVICE pic16F628, PWRT_ON -- OFF
@ DEVICE pic16F628, PROTECT_ON -- OFF
@ DEVICE pic16F628, MCLR_ON -- OFF
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'XT_OSC - HS_OSC –

Bu kodları yazmam gerekiyormu? Açık ve ya kapalı olmaları neleri değiştirir. Sizce dahili mi, harici mi osilatör kullanmalıyım.


Kusura bakmayın biraz fazla soru sordum. Daha yeni başladım pic öğrenmeye ve ödevi hemen yapabilmek için acele ediyorum... Sizden aldığım cevaplara göre kod yazıp size paylaşacağım...
Teşekkkür ederim.

ete

Prensip olarak çok genel amaçlı sorulmuş soruları cevaplamam. Sende öyle sorular sormuştun.  Sorularının asıl amacını öğrenmeye yeni başlayan birisinin mantık yürütmekteki zorluğu olarak yorumlamış ve yardımcı olabilmek için cevap yazmıştım. Ancak şimdi öyle sorular soruyorsunki cevap bulmakta zorlanıyorum. Bir klimanın sıcaklığı nasıl değişir biliyormusun ? yada bu soruyu şöyle sormak lazım klima oda sıcaklığını nasıl değiştirir. Özellikle önceden ayarlanmış bir sıcaklığa nasıl getirir ve o sıcaklıkta nasıl tutar bunları biliyormusun. BUnları bilmeden ben sana bir rölenin sıcaklığı nasıl ayarlayacağını anlatsamda anlamazsın. Sorduğun sorulardan kestirmeden gitmekte olduğun zaten anlaşılıyor ama yolu dahada kısaltmak istiyorsunki bu çok yanlış bir şey. Bak ne söylemişsin!!!!
"1) Mesela ben klimayı röle ile kontrol etmeyi düşünüyorum.Galiba pic'den 5 v çıkış alınıyor. Röleyi bu 5 v ile açıp kapatırım diye düşünmüştüm. Yani klima tuşuna bastığımda PORTB.1 high olacak ve röle kontağını iletime sokarak röleye bağlı rezistans ve fan çalışacak. Isı ayarı tuşlarına bastığım zaman başka pinden mi çıkış alınacak yani rezistansın ısısını nasıl değiştirecek? "
Klima dediğin alet zaten rezistans la çalışmıyor gerçi haklı da sayılabilirsin her türlü alete klima diyorlar bu piyasada.
Her neyse Elinde bir kliman ve klimanın bir rezistansı ve birde fanı olduğunu düşünelim. Amacın klimanın ısısını değiştirmek değil, oda ısısını ayarlanmış sıcaklık derecesinde tutmak olmalıdır öyle değilmi?
O halde öncelike oda sıcaklığınıda ölçmen gerekir ki klima çalışınca ne kadar ısıtmış yada ısıtmamış anlayabilesin.
Bir odayı ısıtmak ve sıcaklığını ayarlanmış bir derece tutmanın türlü yolu vardır. Bunlardan önemli iki tanesi şöyledir.
- On - Off çalıştırma. Bu mantıkta , klima çalıştıkça ortam ısısı ölçülerek ayarlanmış sıcaklığa ulaşıp ulaşmadığı kontrol edilir. Ulaşmış ise klima kapatılır. Sıcaklık ayarlanan seviyenin biraz altına (histerisiz denilen aralığın altına) düşünce yeniden açılır. Bu şekilde aç-kapa yaparak sistem çalıştırılır. Çok önemli değilse ufak tefek sapmalar olmasına rağmen sistem sıcaklığı kontrol eder. Nedir sapma dersen 24 derece ayarladığın sıcaklık sensör görünceye kadar 25 derece olabilir.Yada 24 derecede tekrar çalışması gereken klima 23 derecede çalışabilir.
- İkinci yöntemde PID kontrolü yapılır. Bu çok karmaşık bir işlemdir. Sürekli olması gereken sıcaklık ile ölçülen sıcaklık arasındaki fark alınarak hata payı klimayı aç yada kapa komutlarına hata payı eklenerek komut verilir. BU işte birim zamanda yapılan ölçümleme ve başka faktörlerde eklenince sıcaklık ayarlanan seviyede çakılır kalır. Ancak bunu yapmak hiçde kolay değil. Bir sürü hesaplama ve Oransal kontrol, Türevsel kontrol, Integral kontrol parametrelerinin bulunmasıda hiçde kolay değildir. Henüz ben bile bu işi tam olarak beceremedim desem yalan olmaz.

Şimdi sen bana rezistansın sıcaklığını nasıl kotrol edeceğiz diye soruyorsun bir birimizden ne kadar uzakta olduğunuzu anlamışsındır umarım.

Sürekli olarak bir takım şeylerin ayarlanmasını soruyorsun. BU ödevinin bir parçası bunu anlıyorum. Ama bunları sormanı garipsiyorum. Genel sorduğun soruya bende şöyle genel bir cevap verebilirim. "İŞlemci ile çalışırken her şeyi ayarlayabilirsin."  Bu sana cevap olurmu? olmaz elbette çünki nasıl yapılacağını hala bilmiyorsun. Ama sende sonradan unutacağın yada karıştıracağın şeyleri soruyorsun.
Benden sana tavsiye böyle genel sorular soracağına işi yapmaya başla tıkandığın yerde kod vererek ve adım adım sorular sorarak devam et. Yoksa bir sonuca varamayacaksın. Zaten bu aşamadan sonra başka genel soruna cevap vermeyeceğim. Başkaları verirse verir.
Bir şeyi ayarlamak için soru sormak gerekmez. Ayarlayacağın şey süredir. Artır butonu süreyi artırır eksilt butonu süreyi azaltır. Bunun örneğini verdim sana çok mu zor bu ikisini bağdaştırmak?

WHILE ...WEND komutu şarta bağlı olarak bir döngüyü sürekli işleten bir komut şeklidir.
SAYAC değeri 5000 den küçük olduğu müddetçe aşağıdakileri yap demektir Türkçesi
PAUSE 1 '1 ms gecikme koy
SAYAC=SAYAC+1  'sayac değerini bir artır
WEND
bu sistem sayac=5000 oluncaya kadar çalışır sonuçta 5000 kere (pause 1) komutunu çalıştıracağı için 5000 ms lik süre geçmiş olurki buda 5 sn 'ye eşdeğerdir.
Bir işlemci sigorta ayarları olmadan yanlış çalışabilir. Bu ayarlar tercihen program içinden verilmelidir. Böylece ne ayar verdiğinizi görürsünüz. Vermeden derleme yaparsınız ancak hex dosyasını Pic'e yazarken manuel olarak bu ayarları vermeniz gerekir. Vermezseniz işlemci ya çalışmaz yada aklına estiği gibi çalışır.
Anlamları için uzun anlatım gereklidiir. Sen en iyisi her birini teker teker Google amcana sor daha iyi cevaplar alabilirsin.

Dahili OSC si olan bir işlemcide illaki harici OSC kullanmanın bir gereği yok diye düşünürüm. Yalnızca çok hassas zamanlama işleri yapılan programlarda harici bir OSC ile çalışma tavsiye edilebilir. Ayrıca dahili osc ler kısıtlı frekanslarda çalışır harici ise 20 Mhze kadar her türlü frekansta çalışır.

Ete

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