Sürekli gelen input 2 output

Başlatan ahmet5454, 11 Mayıs 2022, 14:43:06

ahmet5454

Selamlar ustalarım
PORTA.0=1 THEN
PORTB.0=1
PORTB.1=1
Burda PORTA.0 pininden gelen bilgi ile PORTB.0 ve PORTB.1 ile1 led ve 1 röle cektiriyorum
Burda PORTA.0 dan 1 bilgisi sürekli geldiği için PORTB.1 i stop ettiremiyorum Bu örneği değişkenler ilede yaptım ama ne yaptıysam olmuyor.Yardimci olabilecek ustalarıma şimdiden tesekkurler

alisumer

#1
eğer porta.0=1 olursa bir yap demişsiniz ne yaptıysam olmuyor dediğiniz şeye porta0 ya 0 vermek dahil değilse o da porta0 a 1 geldiği sürece istediğinizi yapmış düzgün çalışmış yani.eğer bir buton ile bu işi yapıyorsanız ve sadece + kutup ile porta0 ı buluşturup sonrada butonu bıraktığınızda çıkışın değişmesini istiyorsanız ve olmuyor ise porta0 ı toprağa çekecek pulldown direnç kullanmadığınızdan olur.
CMOS teknolojisi mosfetler ile kurulduğundan birkere tetiklenen bacağın durumunu ya yazılımla değiştirilmeli yada donanım ile aksi halde enerji kesilene kadar aynı durumu koruyacaktır 
Hep meraktan

ahmet5454

Hocam PORTA.0 da buton yok sensor var sürekli PORTA.0=1 1 oluyor PORTB.0 ve PORTB.1 i 1 yapıyorum burda sorun yok ama PORTB.1 i 0 yapamıyorum çünkü PORTA.0 dan 1 geldiği için

ete

Çıkışın LOW yapılması yine bir şarta bağlı olarak yapılabilir.
Bu konuya senin karar vermen gerekir.
Birinci şartın Sensör 1 ise PORTB.0 ve PORTB.1=1 olacak bu tamam. Peki ne zaman bu çıkışlar sıfır (LOW) olacak? bunun tek şartı Sensörün sıfır olmasımıdır? öyle ise başka bir konum aramamak gerekir öyle değilmi.
Ama şöyle fikir yürütebilirsin. Sensör sürekli 1 ise PORTB.0 ve PORTB.1 atıyorum 1 dakika süre ile 1 olmuş ise ardından zorunlu LOW olacak ve LOW süreside en az 1 dak olacak gibi algoritma uygulanabilir.
Sen ortaya bir senaryo koymadığın için daha fazla yorum yapamıyorum.

Ete

ahmet5454

#4
Selamlar ete hocam PORTA.1 THEN PORTB.1=0 yapıyorum ama PORTA.0= 1 olduğu için sürekli PORTB.1 =1 olarak kaliyor.

ete

Aklın ile bir işlemciyi yenemiyorsun yani.
Ona diyorsunki PORTA.1=1 ise PORTB.1=1 yap. O ne yapıyor sürekli olarak PORTA.1=1 gördüğü için oda gidip PORTB.1=1 yapıyor.
Peki bu komut var iken sen PORTB.1=0 yapabilirmisin ? elbette yapamazsın çünki verdiğin ilk şart buna engel olur. O zaman bir işaret biti kullanman gerekir.
IF PORTA.1=1 and ISARET=0 THEN PORTB.1=1 
şeklinde bir kod satırı kullansan ve program başında ISARET (bit değişkeni) sıfırlanır yada zaten sıfır olarak başlayacağı için PORTA.1=1 olduğu ilk anda PORTB.1=1 olur.
Ardından bir başka şarta bağlı olarak (mesela bir buton koyarsın ve butona basınca )
IF BUTON=0 then
  ISARET=1
  PORTB.1=0
ENDIF
şeklinde bir kod yazarsan o pin LOW olur ve İSARET=0 olmadıkça yeniden sensöre bağlı olarak pin=1 olmaz.

Ete

ahmet5454

Ete hocam cok sagolun varolun sizin gibi değerli insanlar bu toplumdan eksik olmasın inşallah en kısa zamanda deneyeceğim çok tesekkurler

ahmet5454

Selamlar Ete hocam kodu çalıştırdım.Çok sağolun acaba program yapısı doğru mudur?
kontrol edebilirseniz çok sevinirim
Tekrar tekrar çok teşekkürler

@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF & _BODEN_OFF

TRISA=%11111111
TRISB=0
 

CMCON=%111  
VRCON=0
ISARET VAR BYTE

SYMBOL B=PORTA.0   
SYMBOL B_1=PORTA.1 
SYMBOL ROLE=PORTB.0 
SYMBOL BUZZER=PORTB.1
SYMBOL RESET=PORTA.2
PORTA=0
PORTB=0 
ISARET=0
pause 2000

BASLA:
 IF B=1 AND ISARET=0  THEN 
 
 ROLE=1
 BUZZER=1
 ENDIF
 IF B_1=1 THEN
 ISARET=1
 BUZZER=0
 ENDIF
 IF RESET=1 THEN ROLE=0:BUZZER=0:ISARET=0
 
GOTO BASLA

END

ete

ISARET değişkeni BIT cinsiden olsa daha iyi olur. Bit yerine BYTE yapmışsın bunu mesajımda belirtmiştim.
BYTE olması bir sorun teşkil etmez ancak lüzümsuz yere 7 bit'i de boşuna harcamış oluyorsun.

 
IF RESET=1 THEN ROLE=0:BUZZER=0:ISARET=0
Bu satırı bu şekilde pek kullanmak istemeyiz. Burada belki önemli değil ama Buzzer ve ISARET'in sıfır olması için mutlaka RESET=1 olması gerekir.
Doğrusu;
 
IF RESET=1 THEN 
   ROLE=0:BUZZER=0:ISARET=0
ENDIF
Başkada bir sorun görmedim.

Ete

ahmet5454

Çok sağolun varolun hocam işiniz gücünüz rast gelsin insallah iyi geceler

Powered by EzPortal