Keypad i Kesme ile Kontrol--Yardım edermisiniz

Başlatan eee1984, 22 Şubat 2008, 09:46:03

eee1984

Slm Arkadaslar

Bi sorum olacak simdi ben keypad de herhangi bi tusa bastıgımda lcd de bastıgım tus gozukuyor ve keypad i surekli taramam gerekiyor yoksa keypad olayı çok stabil calısmıyor ve dolayısıyla taratmam gerekiyor ama beni dusunduren nokta su:

Yani ben tamam bir tusa basacagım bastıgım tusu ekranda gorecegim buraya kadar normal peki aynı zamanda pic e su tusa bastıgımda bana su çıkışı üret seklinde bi iş yaptırabilirmiyim yani pic surekli keypad i taramakla mesgul oldugu için sanki bana biraz duzgun calısmaz gb geliyor

Ama su yapılabilir yani keypad tarama programının içinde bu işi pic e yaptırırsam nasıl bi sonuc alırım bi fikir verebilirmisiniz acaba :oops:

remzi

Tarama işi sırasında gelen bilgileri kontrol edersin. eğer şu tuş basıldıysa veya sırasıyla şunlar geldimi diye kontol edip mikrodenetleyicinin herhangi bir pinini çıkış yaparsınız. Böylelikle bir vana veya pompa çalışarak su çıkışı meydana gelebilir...

parda

Merhaba;

Herhangi bir tuşa basıldığında kesme üreten bir tasarım yapmak ve kesme olsuştuğunda hangi tusa basıldığını bulmak şeklinde bir tasarım yapmalısın bu işin en ideal yolu budur bence diğer türlü çeşitli çambazlıklarlada yapılabilir ama bence en iyisi budur

Kolay gelsin
Bildiğim tek şey, hiç bir şey bilmediğimdir.

eee1984

Alıntı yapılan: "parda"Merhaba;

Herhangi bir tuşa basıldığında kesme üreten bir tasarım yapmak ve kesme olsuştuğunda hangi tusa basıldığını bulmak şeklinde bir tasarım yapmalısın bu işin en ideal yolu budur bence diğer türlü çeşitli çambazlıklarlada yapılabilir ama bence en iyisi budur

Kolay gelsin

Bana da kesme mantıklı geliyor ama su var kesmeyi meydana getirecek kosul yani herhangi tusa basıldıgında kesme meydana gelsin sartı nasıl yapılacak yani sonucta ben hangi tusa basıldıgını bilmiyorum neye gore yapacagım acıkcası kafam karıstı sizin bi fikriniz var mı :oops:

POWER

rb4....rb7 kesmeleri ile ilgili konuları araştırmalısın.ETE hocanın notlarında bu kesme kullanma şekli ayrıntılı anlatılmış tavsiye ederim.
TB6BKG

parda

Hergi bir tuşa bastığında kesme meydana gelmeli bu kesmede sen tarama yaparak hangi tuş olduğunu çözmelisin bu yöntemle pic in tek bir kesme girişini kullanarak yapmış olursun.

Birde porb nin son dört bitinin durumuna göre bir kesme var oda kullanılabilir (ben daha önce kullanmadım)
Bildiğim tek şey, hiç bir şey bilmediğimdir.

eee1984

Keypad i kesme yoluyla okutan elinizde bir ornek var mı acaba c yada basic ile yazılmıs fark etmez :oops: Yani kafamda canlandırmak adına  :cry:
Alıntı YapBirde porb nin son dört bitinin durumuna göre bir kesme var oda kullanılabilir (ben daha önce kullanmadım)
son 4 bit konum değişikliğinde meydana gelen kesme ile alakalı ama benim son 4 bitim satırlara baglı ve onlarda çıkış yani ben istemeden konum dğiştiremezler bu sanırım bana uymuyor acaba baska fikri olan var mı  :cry:

tyildizak

Hazır kod yok fakat klavye tarama programını yazabiliyorsan, ufak
eklemelerle halledebilirsin. İşin mantığı  şudur:

4 satır, 3 sütun kullandığını varsayalım, (telefon klavyesi)
Satırları portb 4-5-6-7'ye bağlıyorsun, sütunlar farketmez, portb 1-2-3 olabilir.

RBIE yi (INTCON.3= 1) aktif hale getiriyorsun.Böylelikle satırların bağlı bulunduğu portb üst bitlerinde herhangi bir elektriksel değişiklik olduğunda (klavyeye basılması sonucu) kesme gerçekleşiyor. Donanım da bu şekilde ayarlanmalı. Bu girişler pull-up yapılıp, her üç sütun 0 olmalı(ya da tam tersi) ki tuşa basıldığında birşeyler değişsin.

Program kesme vektörüne dallandığı anda kesme bayrağı ve kesme aktif etme bitini 0 yapıyorsun.
Tuşları tarayarak hangisine basıldığını buluyorsun. vs..


Edit:
Alıntı yapılan: "ben yazarken"
son 4 bit konum değişikliğinde meydana gelen kesme ile alakalı ama benim son 4 bitim satırlara baglı ve onlarda çıkış yani ben istemeden konum dğiştiremezler bu sanırım bana uymuyor acaba baska fikri olan var mı  

Bu durumda ya tarama sistemini değiştirin, satırlardan okutun
ya da sütunları rb-high'a bağlayıp kalan bacağı kullanmayarak gnd'a bağlayın

İlginç birşey yapayım derseniz:Main programda satırları da giriş yapın, nasılsa tarama yapılmıyor; kesme alt programında satırları TRIS ile çıkış yapın, sonra da tarayın.
Tekrar main'e dönünce satırları yine giriş yaparsınız.

eee1984

Alıntı yapılan: "tyildizak"Hazır kod yok fakat klavye tarama programını yazabiliyorsan, ufak
eklemelerle halledebilirsin. İşin mantığı  şudur:

4 satır, 3 sütun kullandığını varsayalım, (telefon klavyesi)
Satırları portb 4-5-6-7'ye bağlıyorsun, sütunlar farketmez, portb 1-2-3 olabilir.

RBIE yi (INTCON.3= 1) aktif hale getiriyorsun.Böylelikle satırların bağlı bulunduğu portb üst bitlerinde herhangi bir elektriksel değişiklik olduğunda (klavyeye basılması sonucu) kesme gerçekleşiyor. Donanım da bu şekilde ayarlanmalı. Bu girişler pull-up yapılıp, her üç sütun 0 olmalı(ya da tam tersi) ki tuşa basıldığında birşeyler değişsin.

Program kesme vektörüne dallandığı anda kesme bayrağı ve kesme aktif etme bitini 0 yapıyorsun.
Tuşları tarayarak hangisine basıldığını buluyorsun. vs..

Çok teşekkürler dostum eyw. ;)

Ama ETE hocanın programında son 4 bit i giriş olarak tanımla diyor bak istersen

Alıntı YapProgram RB (4-7) Değişiklik Kesmesi:

'****************************************************************
'*  Name    : KESME-RBCH.BAS                                     *
'*  Author  : [Erol Tahir Erdal]                                   *
'*  Notice  : Copyright (c) 2005 [ETE]                             *
'*          : All Rights Reserved                                  *
'*  Date    : 23.04.2005                                           *
'*  Version : 1.0                                                  *
'*  Notes   :                                                      *
'*          :                                                      *
'****************************************************************

PORTA=0:portb=0
TRISB=%11110000   'PortB tamamı giriş yapıldı.
TRISA=%00000000   'A portu tamamı çıkış yapıldı.
'-----------------------------------------------------------------
@ 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 Koruma kapalı
@ DEVICE pic16F628, MCLR_off         'MCLR pini kullanılmıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
'-----------------------------------------------------------------
ON INTERRUPT GoTo KESME      'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%10000000      'dahili Pull up dirençleri iptal edildi
INTCON=%10001000     'Kesmeler aktif ve RB CHANGE kesmesi aktif

CMCON=7       '16F628 de komparatör pinleri iptal hepsi giriş çıkış
'-----------------------------------------------------------------
DURUM  VAR BYTE
SYMBOL TUS=PORTB.0
SYMBOL LED=PORTA.0
SYMBOL RBIF=INTCON.0
'-------------------------------------------------------------------
BASLA:    'Ana program bölümü
     DURUM=PORTB
     PAUSEUS 100
     GOTO BASLA
 
DISABLE     'yeniden kesme oluşması önleniyor  
KESME:    ' burada kesme oluştu demektir.
      TOGGLE LED     'LED konum değiştirdi
      PAUSE 300
      DURUM=PORTB   Â‘PortB değeri okundu
      RBIF=0                      'INTCON.0=0 yapıldı yani RB CHANGE Bayrağı (flag) silindi.
      RESUME   'geldiğin yere dön.
      ENABLE         'kesmeler yeniden aktif.
End   

Buna ne diyorsun :cry:

eee1984

Alıntı yapılan: "tyildizak"
Edit:
Alıntı yapılan: "ben yazarken"
son 4 bit konum değişikliğinde meydana gelen kesme ile alakalı ama benim son 4 bitim satırlara baglı ve onlarda çıkış yani ben istemeden konum dğiştiremezler bu sanırım bana uymuyor acaba baska fikri olan var mı  

Bu durumda ya tarama sistemini değiştirin, satırlardan okutun
ya da sütunları rb-high'a bağlayıp kalan bacağı kullanmayarak gnd'a bağlayın

İlginç birşey yapayım derseniz:Main programda satırları da giriş yapın, nasılsa tarama yapılmıyor; kesme alt programında satırları TRIS ile çıkış yapın, sonra da tarayın.
Tekrar main'e dönünce satırları yine giriş yaparsınız.

Ya sizce sizin bu ilginç dediğiniz teknik çalışır mı bana pek normal gb gelmedi de yani olabilir mi gercekten  8O

tyildizak

Şöyle düşünün:
Satırlar rbhigh bağlı(4-5-6-7) rbigh bacakları giriş durumunda ve pull-up
RBHigh interrupt aktif yapılıyor.
Herhangi bir tuşa basılınca rbhigh bacaklardan herhangi biri pull-up direnç üzerinden + polarma alıyor ve kesme gerçekeşiyor.

Kesme alt programında rbhigh bacakları çıkış yapılıyor.
Bu sayede tarama yapılabiliyor.

Sizi tereddüde düşüren konuyu anlıyorum, anahtar şu: port konfigürasyonları sadece programın başında değil, daha sonra da istenildiği gibi değiştirilebilir.
(Aramızda kalsın, bu çok önemli, ne kadar az kişi bilse bizim için o kadar iyi olur)

Bu teknik özellikle az sayıda pinle normalden fazla iş görmek için kullanılır.
Bir lcd'li keypad uygulamam var, portb'nin 8 pini ile hem 4 bit modda lcd sürmüş, hem de klavye taramıştım. Buna ne dersiniz?

eee1984

Alıntı yapılan: "tyildizak"Şöyle düşünün:
Satırlar rbhigh bağlı(4-5-6-7) rbigh bacakları giriş durumunda ve pull-up
RBHigh interrupt aktif yapılıyor.
Herhangi bir tuşa basılınca rbhigh bacaklardan herhangi biri pull-up direnç üzerinden + polarma alıyor ve kesme gerçekeşiyor.

Kesme alt programında rbhigh bacakları çıkış yapılıyor.
Bu sayede tarama yapılabiliyor.

Sizi tereddüde düşüren konuyu anlıyorum, anahtar şu: port konfigürasyonları sadece programın başında değil, daha sonra da istenildiği gibi değiştirilebilir.
(Aramızda kalsın, bu çok önemli, ne kadar az kişi bilse bizim için o kadar iyi olur)

:D Ya ben sizden cevap gelmesini beklemeden denedim biraz ama calısmadı :( Belki gozden kacırdıgım bişey olmuştur siz de bi kontrol edermisiniz acaba  ;)

Alıntı YapDEFINE OSC 4 'Oscillator speed in MHz: 3(3.58) 4 8 10 12 16 20 24 25 32 33 40

'******LCD TANIMLAMALARI******
DEFINE LCD_DREG     PORTC 'LCD DATA BACAKLARI PORTC'YE BAGLI
DEFINE LCD_DBIT     0    'LCD DATA BITLERI HANGİ BITTEN BASLIYOR ??!
DEFINE LCD_EREG     PORTC 'LCD ENABLE BACAGI HANGI PORTA BAGLI
DEFINE LCD_EBIT     5    'LCD ENABLE BITI HANGI PORTA BAGLI  ??
DEFINE LCD_RSREG    PORTC 'LCD RS BACAGI HANGI PORTA BAGLI
DEFINE LCD_RSBIT    6     'LCD RS BACAGI HANGI BITE BAGLI   ???
DEFINE LCD_BITS     4     'LCD 4 BIT BAGLI
DEFINE LCD_LINES    2     'LCD KAC SIRADAN OLUSUYOR   satır sayısı

TRISB=%11110000 'PortB 4-7 giriş yapıldı.

ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%00000000 'dahili Pull up dirençleri aktif
INTCON=%10001000 'Kesmeler aktif ve RB CHANGE kesmesi aktif


'-----------------------------------------------------------------
SYMBOL RBIF=INTCON.0


BASLA: 'Ana program bölümü

PAUSEUS 100
GOTO BASLA

DISABLE 'yeniden kesme oluşması önleniyor
KESME: ' burada kesme oluştu demektir.
PORTB=0:TRISB=%00001111

portc=0:TRISC=0
lcdout $FE,1
LCDOUT $FE,$80,"ExE"
PAUSE 500
LCDOUT $FE,$C0,"2008"
PAUSE 500



lcdout $FE,1
pause 500

TUSBAK:
PORTB=%01111111
;ve ardından dikeyleri kontrol edecegiz.
IF PORTB =126 then TUS=7
IF PORTB =125 then TUS=8
IF PORTB =123 then TUS=9
IF PORTB =119 then TUS=10 '/"

PORTB=%10111111
IF PORTB=%10111110 then TUS=4
IF PORTB=%10111101 then TUS=5
IF PORTB=%10111011 then TUS=6
IF PORTB=%10110111 then TUS=11 'x tusu"

PORTB=%11011111
IF PORTB=%11011110 then TUS=1
IF PORTB=%11011101 then TUS=2
IF PORTB=%11011011 then TUS=3
IF PORTB=%11010111 then TUS=12 '- tusu"
PORTB=%11101111
IF PORTB=%11101110 then TUS=13 'ON/C tusu
IF PORTB=%11101101 then TUS=0
IF PORTB=%11101011 then TUS=14 '= TUSU
IF PORTB=%11100111 then TUS=15 '+ tusu"
PORTB=%11111111

IF TUS<10 THEN  LCDOUT $fe,2,"TUS=", Dec Tus ,"   "
IF TUS=10 THEN  LCDOUT $FE,2,"TUS="," /    "
IF TUS=11 THEN LCDOUT $FE,2,"TUS=", "X   "
IF TUS=12 THEN LCDOUT $FE,2,"TUS="," -    "
IF TUS=13 THEN LCDOUT $FE,2,"TUS=","ON/C   "
IF TUS=14 THEN LCDOUT $FE,2,"TUS="," =   "
IF TUS=15 THEN LCDOUT $FE,2,"TUS="," +  "


PAUSE 10

      RBIF=0                      'INTCON.0=0 yapıldı yani RB CHANGE Bayrağı (flag) silindi.
      RESUME   'geldiğin yere dön.
      ENABLE         'kesmeler yeniden aktif.

end


eee1984

Alıntı yapılan: "tyildizak"

Bu teknik özellikle az sayıda pinle normalden fazla iş görmek için kullanılır.
Bir lcd'li keypad uygulamam var, portb'nin 8 pini ile hem 4 bit modda lcd sürmüş, hem de klavye taramıştım. Buna ne dersiniz?
8O vayyy nasıl yaptın derim  :D

tyildizak


tyildizak

Programda hata görünmüyor gibi, bir an önce denemelisiniz.