Dip sviç hakkında bilgi yardım

Başlatan yanuma, 03 Kasım 2015, 15:36:27

yanuma

s.a iyi günler dip sviç hakkında bilgi öğrenmmek  istiyorum bir butona basıldıgında hangi siivici seçecegiini nasıl yapıypr   saygılarımla

ete

#1
Bu şema yanlış. Dipswitch pinleri hiç bir zaman HIGH olamıyor. Doğru bağlantı iki şekilde olabilir.
Birincisi dipsiwitch pinleri 10K direnç ile pullup yapılır pinler pic pinlerine bağlanır. DipSwitch diğer pinleri birleştirilip GND ye bağlanır.
Bu durumda açık olan switch ler pullup dan dolayı HIGH da durur. Kapalı olanlar ise dğer pinden GND alarak o pinin LOWda olmasını sağlar.

İkinci şekilde ,dipsiwitch pinleri 10K direnç ile pulldown yapılır pinler pic pinlerine bağlanır. DipSwitch diğer pinleri birleştirilip +5V ta  bağlanır.
Bu durumda açık olan switch ler pulldown dan dolayı LOW da durur. Kapalı olanlar ise dğer pinden +5V alarak o pinin HIGH olmasını sağlar.

Senin şemanda hem dipswitch diğer pinleri GND ye bağlanmış hemde Pulldown direnci ile desteklenmiş. Bu durumda o pinler nasıl HIGH olacaklar? Aslında bağlantı şeklin 2. tip bağlantıya daha yakın. DipSw nin GND ye bağlı olan ucunu +5V ta bağlarsan şema düzelmiş olacaktır.
Bu arada Buton bağlantında yanlış. Zira Buton pini 10K ile pulldown yapılmış. Basılmayı beklerken LOW da bekler bu pin. Peki butona basınca ne olur. Yine LOW olur. O halde Pic butona basıldığını nasıl anlayacak? anlayamayacak elbette.
İşlemcinin bir pindeki değişikliği anlaması için o pinin ya HIGH da beklemesi ve butona basılınca aynı pinin LOW olması (HIGH dan LOW a dönüş) yada LOW da beklemesi ve butona basılınca aynı pinin HIGH olması (LOW dan HIGH a dönüş) şeklinde değişiklikler olması gerekir ki işlemci değişikliği anlayabilsin.


Ete

yanuma

hocam düzelttim böyle olacak galiba

ete

Bana kalırsa yine olmadı. Bir sistem tasarlanırken switch - anahtar-buton gibi birimlerin hepsinin aynı logic konumda çalışması istenir.
Sende kimisi pullup kimisi pulldown olarak çalışıyor. Bu programlamada hata yapmana sebep olabilir.
Hangisini yapayım dersen en güzeli PULLUP lı olarak çalışmaktır. Zira malum işlemcilerin B portunda dahali pullup dirençleri mevcut.
Bu portu anahtar buton vs için kullanırsan hariçten direnç bağlamanda gerekmiyor. ne güzel bir özellik değilmi. Yalnızca yazılım ile (OPTION_REG.7=0) açıyor yada kapatıyorsun (OPTION_REG.7=1)
Bu nedenle en azından kendini bu yönde alıştırman amacı ile sende pullup lı yöntemi tercih etmelisin.
Buton bağlantın pullup lı olduğu düşünülürse dip-sw bağlantısınıda Pullup lı modele çevir. Yani,
Dip-Sw ortak birleşik ucu GND ye ve Dip-Sw pull dirençlerinide +5V ta bağlarsan işin tamam olacaktır.
Kontrol ederken gerek buton gerekse dip-sw pinlerinin LOW olup olmadıklarına bakacaksın. LOW olan aktif demektir.

Ete

yanuma

bu sefer oldu bence ama öğrenmek  istediğim swiç seçme dip swwiçte

ete

Şema şimdi teorik olarak doğru. Ama bir kusur daha var. Oda switchin mümkün olduğunca aynı porta bağlı olması gerekirdi.
Bu bir tasarım kusuru. Şu hali ile bakıldığında iki adet pin PORTA.4 ve PORTA.5 pinlerine bağlı diğer iki pin ise PORTE.0 ve PORTE.1 pinlerine bağlı.
Neden tek porta bağlı olması avantajlı pinleri okumaya çalıştığın zaman anlaşılacak bir durum.
Mevcut halde switchi kontrol etmek için iki işlem yapmak zorundasın.
DURUMA=(PORTA & %00110000)>>4   şeklinde yazılmış bir komut ile A portundaki iki pinin durumunu okuyabilirsin.
Bu pinlere bağlı switch kontakları kapalı değil ise DURUMA=3 bilgisini vermelidir. Zira pullup dirençleri nedeni ile pinler HIGH konumundadır. Bu komut ile o pinleri %xx11xxxx sayısı ile AND işlemine tabi tutuyoruz ve sonucu 4 bit sağa doğru kaydırıyoruz. PORTA.4 de bağlı kontak kapanır ise okunacak bilgi %10 yani 2 olacaktır. PORTA.5 deki kontak kapalı ise okunacak sayı %01 yani 1 olacaktır. Diğer iki pini okumak için benzer şekilde ,
DURUME=PORTE & %00000011. Bu komutda pinler doğru yerd eolduğu için kaydırma gerekmeyecektir. PORTE.0 daki kontak kapalı ise okunacak sayı DURUME=%10 yani 2 , PORTE.1 deki kontak kapalı ise okunacak sayı DURUME=%01 yani1 olacaktır. Hiç bir kontak kapalı değil ise okunacak sayı 3 ve her iki kontak da kapalı ise okunacak sayı sıfır olacaktır. Bu değerlendirme PORTA daki kontaklar içinde aynıdır.

Diyelimki dip-sw PORTB.0-1-2-3 pinlerine bağlanmış durumda.
DURUM=PORTB & %00001111 komutu ile hepsini okuyup okunan sayıya göre işlem yaptırmak mümkün olacak idi. Tek komut.  Kaalı kontak yok ise okunan sayı %1111 , ilk kontak kapalı ise okunacak sayı %1110 ikinci kontak kapalı ise %1101 şeklinde test etmek son derece kolay olacak idi. Bu yüzden bu tür anahtarlar her şeyden önce mümükün olduğunca B portuna bağlanmalı . En azından hepsi aynı porta bağlanmalıdır.

Ete

yanuma

#6
inşallah oldu
 PORTA=%00001111
PORTB=%00000000
TRISA=%00001111
TRISB=%00000000

cmcon=7

SYMBOL BUT1    =  PORTA.0     
SYMBOL BUT2    =  PORTA.1
SYMBOL BUT3    =  PORTA.2
SYMBOL BUT4    =  PORTA.3
SYMBOL START   =  PORTA.4
SYMBOL  HP     =  PORTB.0
SYMBOL  ROLE   =  PORTB.1
PAUSE 200


DURUM=PORTA & %00001111

ete

Bu şekilde olur. Gerisini getir bakalım.

Ete

yanuma

#8
hocam 2 tuş için örnek alabilirmiyim rica etsem   tuşa basıldıgında diger swiç nasıl seçeecek  DURUM=PORTA & %00001111 bu koddan sonra normal yapmam gereken aynı yazım kuralımı saygılarımla

yanuma

#9
hocam ben bu dip swiçlere zaman koymak istiyorum 2 dakika \ 200 saniye örnek

ete

Sorularını anlamakta zorlanıyorum. "Tuşa basıldığında diğer sw nasıl seçecek demişsin" diğer sw kim ?
Bu koddan sonra yapman gerekeni sen bileceksin ben değil. Aklından ne geçtiğini bilememki.
Burada temel amaç sw değerine bağlı olarak bir takım işler yapılması yada butona basılması durumnda ise daha başka iş yapılmasıdır.
Sw değeri nasıl okunacak anlattım. DURUM=PORTA & %00001111 komutu ;
- hiç bir sw kapalı değilse %1111 değerini alırsın.
- PORTA.0 daki sw kapalı ise %1110 değerini alırsın
- PortA.1 deki sw kapalı ise  %1101 değerini alırsın.
bu kadar bilgiye bakarak diğer sw ler kapanınca hangi bilgileri alacağınıda sen anlayacak yada bulacaksın. Bu bilgilere görede ne iş yapacaksan onu yapacaksın. Buton basılmış ise buton pini LOW basılmmaış ise buton pini HIGH olur bunu test ederek buton basılımı değilmi anlayacak ona görede ne yapacaksan yapacaksın.

Ete

yanuma000

#11
PORTA=%00001111
PORTB=%00000000
TRISA=%00001111
TRISB=%00000000

cmcon=7

SYMBOL BUT1    =  PORTA.0     
SYMBOL BUT2    =  PORTA.1
SYMBOL BUT3    =  PORTA.2
SYMBOL BUT4    =  PORTA.3
SYMBOL START   =  PORTA.4
SYMBOL  HP     =  PORTB.0
SYMBOL  ROLE   =  PORTB.1
PAUSE 200


DURUM=PORTA & %00001111



************buton ayarları*************

SYMBOL BUT1  1,5DAKİKA =
SYMBOL BUT2  2 DAKİKA  =
SYMBOL BUT3  3 DAKİKA  =
SYMBOL BUT4  5 DAKİKA  =

************************************

if START=0 THEN
ROLE=1
PAUSE =DURUM=PORTA & %00001111
ROLE1=0
PAUSE = DURUM=PORTA & %00001111

endif
GOTO ROLEAC

ete

Bana kalırsa önce BASIC DERSLERİ'ne biraz çalış. Komutlar nelerdir  nasıl kullanılıyorlar parametreleri nelerdir onları öğren ve örnekleri incele.
Çünki yazdığın kodlar baştan sona yanlışlarla dolu. hangi birisini söyleyeyimki. Gerek kod öğrenmede gerekse yazma işinde soru sorarak "Deneme yanılma" yöntemini kullanıyorsun ama bir yere kadar yürür bu iş. Ben yazayım hatamı başkası bulsun mantığı burada son buldu artık.
Ders çalışman gerekiyor. İşi baştan ele al ve sitede yer alan Basic Derslerini (14 adet ders) indir örnekleri teker teker yap üzerinden geç ve öğrenmeye çalış. Başka türlü olmaz bu iş.

Ete

yanuma000

teşekkür ederim hocam doğru söylüyorsunuz

yanuma000

#14
Erol hocam bu yolum doğrumu dakika nasıl yazılıyor bilmiyorum saygılarımla
[code
BAŞLA
IF START=0 THEN
if but1=0then
role=1
pause=1.5 dakıka
ELSE
IF BUT2=0 then
role=1
pause = 2dakıka
else
role=1
IF BUT3= 0 THEN
role=1
PAUSE = 3 dakıka
else
IF BUT4= 0 THEN
role=1
PAUSE= 4 dakıka
endIF
GOTO BAŞLA
]

Powered by EzPortal