Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: secilcemal - 12 Eylül 2014, 22:42:46

Başlık: 12f683 aynı anda 2 pini high yapmak.
Gönderen: secilcemal - 12 Eylül 2014, 22:42:46
12f683 ile 3 adet ponömatik valf kontrol ediyorum, sorunum 2 adet valfi aynı anda açık tutamamak.

high GPIO.0
PAUSE 100
HIGH GPIO.2
pause 1000
şeklinde bir kısmını yazdığım kodda gpio.2 yi high yapmadan önce gpio.0 ı low a çekiyor.
Sorun nerede anlamadım, acaba pbp ile mi ilgili yoksa config ayarlarından mı ?
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: ipek - 12 Eylül 2014, 23:04:26
forumda şöyle bir açıklama buldum.

soru : her ikisininde en sonda aynı anda yanıp aynı anda sönmesini istiyorum



Porta.0=1 gibi komutlar bit bazında komutlardır.
Tek bite hükmeder.
Bir led'i aynı anda yakmak isterseniz byte bazında komut vermeniz gerekir.
PortA da çalıştığımıza göre ve Ledler PortA.0 ve PortA.1 de bağlı olduğuna göre önce PortA nın 0 ve 1 nolu bitlerinin dışındaki bitlerinin durumunu değiştirmememiz gerekiyor.
Bu nedenle;
Önce PortA=PORTA & %11111100 şeklinde porta nın diğer bitlerinin kopyasını alırız.
Sonra
PortA=PORTA+%00000011 şeklinde bir komut vermek yada PortA=(PORTA&%11111100) OR %00000011 şeklinde bir komut verirsek ilk iki biti HIGH yapmış oluruz.

Söndürmek için ise PORTA=(PORTA & %11111100) komutunu vermek yeterli olacaktır.
Böylece yalnızca 0 ve 1 nolu bitleri değiştirmiş diğerlerini olduğu gibi bırakmış oluruz.
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: secilcemal - 12 Eylül 2014, 23:37:37
Yani
gpio=%000011
şeklinde bir satır sorumun cevabımıdır?
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: F.T - 13 Eylül 2014, 00:32:35
program bu kadarmı?

mesaj birleştirme:: 13 Eylül 2014, 00:51:17

GPIO.0=1
PAUSE 100
GPIO.2=1
pause 1000

bide böyle dene.
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: mustafa_cmbz - 13 Eylül 2014, 01:26:35
şemanı görmeden programın kalan kısmını görmeden birşey söylemek zaman kaybı olur.

TRIS yazmaçlarını bir kontrol et.Geçen başıma geldi.
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: ete - 13 Eylül 2014, 10:13:34
İşin içinde selenoid olunca pic'in ilk selenoidi aktif etmesinin ardından Reset alması kuvvetle muhtemeldir.
Bana kalırsa iki selenoid de aynı anda aktif edilmelidir. Komutu önceden de belirtildiği üzere GPIO=%00000011 şeklindedir. Ancak daha doğrusu şöyle olmalıdır GPIO=(GPIO & %11111100) + 3 . Bu komut ile diğer pinlerin konumunu bozmadan yalnızca iki pini high yaparsınız.
Bir konuyada açıklık getireyim.
HIGH GPIO.0 komutu ile GPIO.0=1 komutu sonuç olarak aynı işi yapar. İkiside sıfır nolu port pinini HIGH yapar.
Ancak HIGH GPIO.0 komutu önce o pini çıkış yapar sonra pini high yapar. Diğeri ise pini çıkış kabul eder ve direk pini high yapar.

Olaya mantık açısından bakınca her iki komutunda aynı işlevi görüp ilgili pinlerin HIGH yapılmasını bekleriz. Ancak ilk pin LOW a çekiliyor ise ortada başka bir sorun var demektir. Programın gerisini görmeden fazla bir yorum yapılması imkansız.
Zira aynı sorunu komparatör pinleride yaratabilir. Tabiiki işlemcide Komparatör iptal edilmelidir. Analog pinlerde aynı sorunu yaratabilir dolayısıyla analog pinlerde iptal edlmelidir. Yapılmışmı? bilemiyoruz.
Ete
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: fbkaya - 13 Eylül 2014, 10:58:12
ete hocama katılıyorum.
İzolasyon için optokuplör ve schottky diyot kullandınız mı ? Pic ile selenoid in beslemeleri ayrı mı ? Eğer yapmadı iseniz yapıp tekrar deneyin.
Ama önce bir simülasyonunu yapın. Selenoid yerine led kullanarak isisde bir deneyin. Eğer aynı sorun oluyorsa yazılımsaldır.
Birde selenoidi neyle sürüyorsunuz ?
kolay gelsin
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: secilcemal - 13 Eylül 2014, 12:15:43
Tüm cevaplar için çok teşekkür ederim.
Gpio.0=1 komutu nedense çalışmıyor, Ete Bey in buna benzer bir yazısını daha önce gördüğüm için ilk onu denemiştim lakin hiç çalışmadı.
Kodun başına config ayarlarını
ASM
__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF
endasm
şeklinde ekleyip,
çıkış olarak
gpio=%000101 komutunu kullanınca aynı nda 2 pini birden high yapabildim.
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: secilcemal - 13 Eylül 2014, 12:30:22
Ete Bey su komut dizinini anlamadım.

"GPIO=(GPIO & %11111100) + 3 . Bu komut ile diğer pinlerin konumunu bozmadan yalnızca iki pini high yaparsınız."

GPIO & %11111100 su bölüm ilk 2 pin hariç çıkışları terslemez mi?

sonuca +3 eklediğimizde ise ilk 2 pin terslenir, ve sonuçta tüm çıkışları terslemiş olmaz mıyız?
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: siyah12 - 04 Ekim 2014, 23:31:51
MUHTEMELEN ŞEMADA PROBLEM VAR
Pic çıkışına 1K lık pullup direnci ve pik çıkışı ile transistor base arasına 10k seri direnc sorunu çözer diye düşünüyorum.
Başlık: Ynt: 12f683 aynı anda 2 pini high yapmak.
Gönderen: ete - 05 Ekim 2014, 17:39:04
Secilcemal,

GPIO=(GPIO & %11111100) + 3  Bu komut satırnda GPIO bitlerinin ilk ikisini set etmek ama diğerlerinin konumunu değiştirmemek amacı ile kullanılır.
GPIO & %11111100  komut satırı GPIO bitlerini alıp ilk iki bitini sıfırlar diğerlerini aynen bırakır. Bitleri terslemez.
Dolayısıyla ilk iki biti sıfırlayıp porta 3 eklersen ilk iki biti set etmiş olursun yalnızca diğerlerine dokunmadan tabiiki.

Ete