avatar_fokas

Röle kontrolü

Başlatan fokas, 12 Ocak 2015, 13:54:01

fokas

merhaba ustalar
Sorunum yazdıgım derlemenin isis de çalışıp devrede çalişmaması.Devre  1var yak 0 var söndür şeklinde yazınca 4 rölede teker teker yanıp sönüyor vede aynı anda birden çok butona basılı ise hepside çıkış veriyor.
Bana herhangi biri bastığında onun çıkış vermesi diğerlerinin basılı olsada çıkış vermemesi

ISIS de çalışan dderleme:
TrisA=255
Trisb=0

@ DEVICE pic16F628                                              'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON                              'Watch Dog Timer açık
@ DEVICE pic16F628, PWRT_ON                            'Power on Timer açık
@ DEVICE pic16F628, PROTECT_OFF                      'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_ON                             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT       'Dahili osilatör kullanılacak
'----------------------------------------------------------------------
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'---------------------------------------------------------------------
SYMBOL TUS1=PORTA.1
SYMBOL TUS2=PORTA.2
SYMBOL TUS3=PORTA.3
SYMBOL TUS4=PORTA.4


LED1   VAR    PORTB.1
LED2   VAR    PORTB.2
LED3   VAR    PORTB.3
LED4   VAR    PORTB.4

PORTB=0


BASLA:   
        IF TUS1=0 THEN                          'Tuşa basılmadığı zaman Tus=1 dir basılınca 0 olur.
           HIGH LED1
           ELSE
           LOW LED1                                 ' LED'in durumunu değiştir yak veya söndür.
           WHILE TUS1=0                          ' hala tuşa basılı tutuluyor ise
           wend 
           PAUSE 20                                        ' bırakılıncaya kadar bekle.
        endIF            ' tuş bırakılınca buraya geç.
       
        IF TUS2=0 THEN                                      'Tuşa basılmadığı zaman Tus=1 dir basılınca 0 olur.
           HIGH LED2   ' LED                                'in durumunu değiştir yak veya söndür.
           WHILE TUS2=0                                    ' hala tuşa basılı tutuluyor ise
           wend
           PAUSE 20                                                ' bırakılıncaya kadar bekle.
        endIF                                                           ' tuş bırakılınca buraya geç.
         
       
        IF TUS3=0 THEN                                                 'Tuşa basılmadığı zaman Tus=1 dir basılınca 0 olur.
           HIGH LED3                                                          ' LED          'in durumunu değiştir yak veya söndür.
           WHILE TUS3=0                                                        ' hala tuşa basılı tutuluyor ise
           wend
           PAUSE 20                                                                 ' bırakılıncaya kadar bekle.
        endIF                                                                                  ' tuş bırakılınca buraya geç.
       
        IF TUS4=0 THEN
           HIGH LED4
           WHILE TUS4=0
           WEND
           PAUSE 20
        ENDIF
       

       
        GOTO BASLA

           END


Burda led yerine devrede röle var.

ete

Gerçek devrende pic in 4 nolu bacağında ne bağlı?

Ete

fokas


fokas

4.nolu pin = 4.7 k ile +5v  ta bağlı

Burak

#4
İlgili tuşa bastığın sürece mi ilgili rölenin çıkış vermesini istiyorsun  ?
Ω Gens Una Sumus Ω

Burak

#5
Eğer tuşa bastığın sürece röle çekicek tuşu bıraktığın zaman röle devre dışı olacaksa aşağıdaki kod işini görecektir .




@ DEVICE pic16F628                                              'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON                              'Watch Dog Timer açık
@ DEVICE pic16F628, PWRT_ON                            'Power on Timer açık
@ DEVICE pic16F628, PROTECT_OFF                      'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_ON                             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT       'Dahili osilatör kullanılacak
'----------------------------------------------------------------------
PORTB=%00000000   :   PORTA=%00000000
TRISB=%00000000    :   TRISA=%00011110   


CMCON=%0000111    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'---------------------------------------------------------------------
SYMBOL TUS1=PORTA.1
SYMBOL TUS2=PORTA.2
SYMBOL TUS3=PORTA.3
SYMBOL TUS4=PORTA.4


LED1   VAR    PORTB.1   
LED2   VAR    PORTB.2
LED3   VAR    PORTB.3
LED4   VAR    PORTB.4

PORTB=%00000000

BASLA:
   
while tus1=0
    high led1
    pause 20
wend
   
while tus2=0
    high led2
    pause 20
wend

while tus3=0
    high led3
    pause 20
wend

while tus4=0
    high led4
    pause 20
wend
       
PORTB=0 ' Tüm röleler devre disi

pause 20     
   
GOTO BASLA


Ω Gens Una Sumus Ω

fokas

Evet Fakat 1 tuşa basılı kaldığı sürece diger tuşlara basılsada çıkış vermemesi gerek.
Yani her zaman tek çıkış olacak.teşekkürler.

Burak

Bu yazdığım kod dediğinizi yapacaktır . Çünkü bir tuşa basılı tutulduğu sürece program küçük bir iç döngüde durmadan takılı kalacak . İlk bastığınızı bırakmadığınız sürece istediğiniz sayıda tuşa basın değişen hiçbirşey olmayacak .

Burak
Ω Gens Una Sumus Ω

fokas

Ustam 112 Komuta kontrol mek.Adına teşekkürler.
Bu devre ile telsize 4 mik bağlayacağım.Müsait olan cevap verecek.İki kişi aynı anda basıp parazıt ve sinyal kaybı yaşanmayacak.

Burak

Yardımcı olabildiysem ne mutlu :)
Ω Gens Una Sumus Ω

Burak

#10
Alıntı yapılan: fokas - 12 Ocak 2015, 15:09:37
Ustam 112 Komuta kontrol mek.Adına teşekkürler.
Bu devre ile telsize 4 mik bağlayacağım.Müsait olan cevap verecek.İki kişi aynı anda basıp parazıt ve sinyal kaybı yaşanmayacak.

Son anda yapmak istediğiniz şeyi tam ifade ettikten sonra kodda ufacık bi modifiyeye gidilmesi gerekliliği oluştu bende  .

Aşağıdaki kodu kullanırsanız sistem çok daha stabil çalışacaktır .





@ DEVICE pic16F628                                              'işlemci 16F628                               
@ DEVICE pic16F628, WDT_ON                              'Watch Dog Timer açık
@ DEVICE pic16F628, PWRT_ON                            'Power on Timer açık
@ DEVICE pic16F628, PROTECT_OFF                      'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_ON                             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT       'Dahili osilatör kullanılacak
'----------------------------------------------------------------------
PORTB=%00000000   :   PORTA=%00000000
TRISB=%00000000    :   TRISA=%00011110   


CMCON=%0000111    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'---------------------------------------------------------------------
SYMBOL TUS1=PORTA.1
SYMBOL TUS2=PORTA.2
SYMBOL TUS3=PORTA.3
SYMBOL TUS4=PORTA.4


LED1   VAR    PORTB.1   
LED2   VAR    PORTB.2
LED3   VAR    PORTB.3
LED4   VAR    PORTB.4

PORTB=%00000000

BASLA:
   
while tus1=0
    high led1
    pause 20
wend

PORTB=0 ' Tüm röleler devre disi
   
while tus2=0
    high led2
    pause 20
wend

PORTB=0 ' Tüm röleler devre disi

while tus3=0
    high led3
    pause 20
wend

PORTB=0 ' Tüm röleler devre disi

while tus4=0
    high led4
    pause 20
wend
       
PORTB=0 ' Tüm röleler devre disi

pause 20     
   
GOTO BASLA





Burak.
Ω Gens Una Sumus Ω

fokas

Usta teşekkürler bir önceki sorunsuz istediğim gibi çalıştı.
Bunda ne gibi bir değişiklik var acaba

Burak

Diyelim ki tuş1'e basıldı , röle 1 çekti , bu devam ederken tuş2'ye basılıyor röle2 çekemiyor çünkü program tuş1 döngüsünde kilitli kalıyor ... tuş1 bırakıldığında program röle 1'i kapatmaya zaman bulamayacak , çünkü röle2'yi çekecek programda kilitli kalacak , yani röle1 hala çekilmiş durumda dikkat ettiysen , aynı zamanda röle2'de çekili durumda... Bu programda , aynı anda iki rölenin açık kalması ihtimalini yok ettim ...

Baştan belirtseydin bu durumu daha hızlı çözüm bulabilirdik . ;)
Ω Gens Una Sumus Ω

fokas

Teşekkürler ustam iyi günler

Powered by EzPortal