bir pinden hem giriş hem çıkış kontrol etmek

Başlatan bimühendis, 23 Şubat 2018, 14:44:25

bimühendis

Öncelikle herkese kolay gelsin
Ben bir pini hem giriş hemde çıkış olarak kullanmak istiyorum.Şöyle ki portb.2 den 5 saniye giriş verdiğimde motor çalışmaya başlayacak ve motor çalıştığı sürece portb.2 pinine bağli led high low olarak sürekli değişecek.eğer portb.2 ye tekrardan 5 saniye basılı tutarsam motor duracak portb.2 ye bağlı olan led de high low yapmayı bırakıp low a çekecektir .Ama high low süresinden ötürü ben basılı tutmasamda içerden high yaptırdığım için 5 saniye basılıymış gibi görüyor ve motoru durduruyor. yazdığım küçük kod parçacığı şöyledir;

   
If portb.2=1 Then
            If motor_izin<10 Then
            Inc motor_izin
            If motor_izin=10 Then
            If motor=0 Then
            motor=1
            Else
            motor=0
            EndIf
            EndIf
            EndIf
            EndIf
           
            If portb.2=0 Then motor_izin=0
            If motor=1 Then
            High PORTB.2
            DelayMS 20
            Low PORTB.2
            EndIf

           
Şimdiden teşekkür ederim.

ete

#1
Sorulan soruyu anlamakta zorlanıyorum. Kodlara bakarak anlayayım diyorum onda da eksikler görüyorum.
Bir pinin hem giriş hem çıkış olarak kullanılması mümkün ancak usulüne uygun olarak kullanılması gerekir.
LOW Pin veya HIGH Pin komutları o pinleri otomatik olarak çıkışa yapar. Zira bu komut önce OUTPUT PIN ve adından PIN=1 veya PIN=0 yapar. Birkomutla iki komut peşpeşe verilmiş olur. Ancak yazdığın kodlarda aynı pini GIRIS haline sokacak bir komut göremedim.
Ayrıca saniye bazında sürelerdenbahsetmişsin bu konu ile ilgili bir komut seriside göremedim.Şayet Motor_Izin değişkeni yada sayacı bunu yapıyorsa mesele yok ama kodun tamamını görmeyince insanın kafası takılıyor.

Bir pinin 20 ms süre ile HIGH yapılıp ardından LOW yapılması durumunda o pinin HIGH olduğunu göz ile takip edemezsin. Anlık bir HIGH durumu olur ve şayet pine bağlı bir led bağlı ise yandığını göremezsin. Süreyi uzatırsan da bu sefer PORTB.2 yi giriş olarak kullanmakda zorlanırsın.  Daha akıllıca algoritmalar geliştirmek gerekir. Ledlerin yanıp sönme süreleri kadar Timer gecikmeleri yaratılıp led yanacak ise bu sürelerde yakılıp söndürülür ve aynı zamanda pin kontrolüde yapılabilir. Olur gibi geliyor bana ama kesinleşmesi için oturup kafa yormak lazım.

Şayet bir pinin giriş olarak kontraolü gerekiryor ise ve o pin aynı zamanda çıkış yapılarak da kullanılıyor ise geçişlerde pinin giriş veya çıkış olarak yerine göre ayarlanması gerekir.
INPUT PORTB.2
   If portb.2=1 Then
        If motor_izin<10 Then
            Inc motor_izin
            If motor_izin=10 Then
               If motor=0 Then
                  motor=1
               Else
                 motor=0
              EndIf
            EndIf
        EndIf
   EndIf
'yukarıdaki komutlarda PORTB.2 yi çıkış yapacak komut olmadığı için yenie INPUT komutu vermeye gerek yok devam ediyoruz
   If portb.2=0 Then motor_izin=0
   If motor=1 Then
       High PORTB.2 'bu komut PORTB.2 yi çıkış yaptı
       DelayMS 20
       Low PORTB.2
   EndIf


Bir pine bağlı butonu 5sn süre ile basılı tutarken onun aynı zamanda çıkışa çevirmek bence pek mümkün değil Zira kullanacağın komut dizisi buna müsaade etmez. Ama bir bit değişkeni set ederek bu işi halledebilirsin. Şöyle ;
IF PORTB.2=0 THEN  'PORTB.2 de bağlı tuşa basılmış ise;
  BASILDI=1
  ....
ENDIF
Diğer komutlarınıda BASILDI=1 ise şeklinde şarta bağlayarak halledersin. Buton ne zaman bırkılmış yada bırakılacak ise o noktada BASILDI=0 yaparsın

Ete

Powered by EzPortal