Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

PIC koruma

Başlatan 707yunus, 26 Ağustos 2008, 20:48:18

707yunus

selam arkadaşlar.

PIC ile bir sistem tasarladım.bu sistemin çeşitli butonları var.ben bu sistemde anahtarlı bir butonu şöyle kullanmak istiyorum.

kullanıcı anahtarlı butonu açtığında PIC ile ilgili bütün butonlar aktif olabilecek(8 buton var).anahtarlı butonu kapattığında ise butonlar pasif olacak.Fikri olan varmı?yardımlarınızı bekliyorum.

Selamlar..

protech06

Mesela kısaca bir ornek,  8 Butonun kontrol Rutinini Anahların baglı oldugu pic ucunun 1 yada 0 durumuna gore aktif veya pasif yapabilirsin. Yani Anahtarın baglı oldugu uc 1 ise program 8 buton işlevi icin ayırmıs oldugun rutine dallanır ve o dongude calısır  burdada anahtar ucunun 0 olup olmadıgını kontrol edip tekrar o donguden geri cıkabilirsin.

Tagli

Bence fiziksel değil de elektronik bir anahtar kullansan daha iyi olur. Mesela içine belli bir şifre yüklenmiş bellek çipini bir slota yerleştirip okutursun...

Program konusu pek çok şekilde çözülebilir. Butonlara cevap vermek haricinde sistemin düzenli olarak yapması gereken başka işler de var mı? Yani anahtar çevrilmemişse düzenek hiç mi çalışmayacak, yoksa çalışacak ama kullanıcıdan girdi mi kabul etmeyecek?
Gökçe Tağlıoğlu

707yunus

abi çalısacak kullanıcıdan girdi kabul etmeyecek.aklıma şöyle bir fikir geldi yarın denicem.butonları pasif yapmak için ilgili pinnleri çıkış olarak ayarlayacağım.akif yapmak içinde giriş olarak ayarlayacağım.

z

Anahtarli butonu PIC'in 5v hattina seri bagla.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

İşleme sokmadan önce pinlerden okuduğun değerleri (mesela 8 düğme port B'ye bağlı ise PORTB registerını) anahtarın durumuna göre h'FF' veya h'00' ile AND'leyebilirsin belki. Anahtar kapalıysa düğmeler basılmamış gibi algılanır. Tabi bu Port B kesmelerini kullanıyorsan işe yaramaz ama düğmelerin 8'inin de ayrı bacaklara bağlandığını varsayar ve Port B pin değişikliği kesmesinin de sadece 4 pin için geçerli olduğunu göz önünde bulundurursak muhtemelen düğmeleri bu şekilde kullanmıyorsun. Bir diğer mesele de anahtara tepkinin ne zaman olacağı. Eğer programın herhangi bir yerinde anahtar konumunun değişme ihtimali varsa B0'daki kesme kullanılabilir bunu algılamak için. Veya yazdığın program sürekli tekrarlanan kısa süreli bir döngüden oluşuyorsa döngünün başında da kontrol edebilirsin. Eğer sadece 4 düğme kullanmış olsan ve bunları Port B'deki 4 pinin değişmesi ile ilgili kesmeyle algılasan, anahtarın konumuna göre söz konusu kesmenin enable bitini açıp kapamak da işini görebilirdi.

Anahtarın elektronik olması durumunda işler biraz daha karışabilir. Gerçi çipi yerleştirdikten sonra bir düğmeye basıp (bunu mekanik olarak da yapabilirsin, çip yuvaya otururken bir düğmeyi ittirir mesela) kesme tetikleyerek aralarındaki iletişimi başlatabilirsin.

Ekleme: @z, bu durumda PIC çalışmaz (dediğini doğru anladıysam). Ama sistemin anahtar kapalıyken de çalışması isteniyor.
Gökçe Tağlıoğlu

erkan614

diğer 8 butonun 5v veya gndsini anahtar üzerinden vererek de halledebilirsin

707yunus

Alıntı yapılan: "erkan614"diğer 8 butonun 5v veya gndsini anahtar üzerinden vererek de halledebilirsin

hocam çok güzzel fikir.direnç üzerinden şaaseye bağlı olan butonlar basılınca lojik 1 geldiği için  anahtarlı buton çevrilince yine lojik 0 gelirse butonlar apasif olur.anahtarlı butonu tekrar çevirince butonlara basılsa aktif  olacağı için lojik 1 gelir. böylece yazılımla oynamaya hiç de gerek olmaz.

burada yardımları geçen arkadaşlara çokk teşekkür ederim.sorun donanımsal olarak @erkan614 ün fikriyle çözülmüştür..

mech

8 butonu diyotlar ile birleştir. Böylece tek tuşla hepsine aynanda basabilirsin.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

re3ii

16F877 rd0. anabuton RB.0 1 2 3 4 5 6 RB.7 buton

RA.0 1 2 3 4 5 6 RA.7  çıkıs




; at              : 27.08.2008 21:25:53


; Project File    : C:\DOCUME~1\BURAKA~1\BELGEL~1\8ANDGO.PIC

; Project Version : 1.0.2

; Created         : 26.02.2007 17:17:00

; Last change     : 27.08.2008 21:25:05

   PROCESSOR 16F877

   INCLUDE P16F877.INC

   RADIX DEC


   __IDLOCS H'0100'

   __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_ON & _XT_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF

; Diverses

ZERO   EQU Z   ; ZERO-Flag
CARRY    EQU C   ; CARRY-Flag


; Variable

S0   = 32   ; located in Bank 0
RAM   = 33   ; located in Bank 0

   ERRORLEVEL -302   ; disable warning (Bankswitching)
   ERRORLEVEL -306   ; disable warning (Pageswitching)

;****************************************
;Programmanfang
;****************************************

   ORG 0

   CLRF STATUS   ; switch to RAM-Bank 0
   MOVLW HIGH SYS_INIT   ; set page
   MOVWF PCLATH
   GOTO SYS_INIT
   RETURN

;****************************************
; Subroutines
;****************************************


;****************************************
;Initialisierung
;****************************************


SYS_INIT

   MOVLW B'00000000'
   MOVWF INTCON

; Ausgangs-Pegel setzen, bevor die Richtung gesetzt wird

   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   MOVLW B'00000000'
   MOVWF PORTA

   MOVLW B'00000000'
   MOVWF PORTB

   MOVLW B'00000000'
   MOVWF PORTC

   MOVLW B'00000000'
   MOVWF PORTD

   MOVLW B'00000000'
   MOVWF PORTE

   MOVLW 15
   BSF STATUS,RP0   ; Bank 1
   MOVWF OPTION_REG

   MOVLW 6   ; all Digital
   MOVWF ADCON1

; Richtung setzen

   MOVLW B'00000000'
   MOVWF TRISA

   MOVLW B'11111111'
   MOVWF TRISB

   MOVLW B'11111111'
   MOVWF TRISC

   MOVLW B'11111111'
   MOVWF TRISD

   MOVLW B'00000111'
   MOVWF TRISE

; init vars


; Clear RAM

   BCF STATUS,IRP
   MOVLW 32
   MOVWF FSR
CR1
   CLRF INDF
   INCF FSR,F
   
   BTFSS FSR,7
   GOTO CR1
   BSF FSR,5
CR2
   CLRF INDF
   INCF FSR,F
   MOVLW H'F0'
   SUBWF FSR,W
   BTFSS STATUS,ZERO
   GOTO CR2
   BSF STATUS,IRP
   MOVLW 16
   MOVWF FSR
CR3
   CLRF INDF
   INCF FSR,F
   MOVLW H'70'
   SUBWF FSR,W
   BTFSS STATUS,ZERO
   GOTO CR3
   MOVLW 144
   MOVWF FSR
CR4
   CLRF INDF
   INCF FSR,F
   MOVLW H'F0'
   SUBWF FSR,W
   BTFSS STATUS,ZERO
   GOTO CR4



;**********************************
;******* Haupt-Programm ***********
;**********************************

MAIN

;***************************************************
; UND - Gatter -> LG1
;***************************************************

LABEL_LG1_1
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BTFSS PORTD,0
   GOTO LABEL_LG1_FALSE

LABEL_LG1_TRUE
   BSF S0,0
   GOTO LABEL_LG1_ENDE
LABEL_LG1_FALSE
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BCF S0,0
LABEL_LG1_ENDE
;***************************************************
; UND - Gatter -> LG2
;***************************************************

LABEL_LG2_1
   BTFSS S0,0
   GOTO LABEL_LG2_FALSE
LABEL_LG2_2
   BTFSS PORTB,0
   GOTO LABEL_LG2_FALSE

LABEL_LG2_TRUE
   BSF PORTA,0
   GOTO LABEL_LG2_ENDE
LABEL_LG2_FALSE
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BCF PORTA,0
LABEL_LG2_ENDE
;***************************************************
; UND - Gatter -> LG3
;***************************************************

LABEL_LG3_1
   BTFSS S0,0
   GOTO LABEL_LG3_FALSE
LABEL_LG3_2
   BTFSS PORTB,1
   GOTO LABEL_LG3_FALSE

LABEL_LG3_TRUE
   BSF PORTA,1
   GOTO LABEL_LG3_ENDE
LABEL_LG3_FALSE
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BCF PORTA,1
LABEL_LG3_ENDE
;***************************************************
; UND - Gatter -> LG4
;***************************************************

LABEL_LG4_1
   BTFSS S0,0
   GOTO LABEL_LG4_FALSE
LABEL_LG4_2
   BTFSS PORTB,2
   GOTO LABEL_LG4_FALSE

LABEL_LG4_TRUE
   BSF PORTA,2
   GOTO LABEL_LG4_ENDE
LABEL_LG4_FALSE
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BCF PORTA,2
LABEL_LG4_ENDE
;***************************************************
; UND - Gatter -> LG5
;***************************************************

LABEL_LG5_1
   BTFSS S0,0
   GOTO LABEL_LG5_FALSE
LABEL_LG5_2
   BTFSS PORTB,3
   GOTO LABEL_LG5_FALSE

LABEL_LG5_TRUE
   BSF PORTA,3
   GOTO LABEL_LG5_ENDE
LABEL_LG5_FALSE
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BCF PORTA,3
LABEL_LG5_ENDE
;***************************************************
; UND - Gatter -> LG6
;***************************************************

LABEL_LG6_1
   BTFSS S0,0
   GOTO LABEL_LG6_FALSE
LABEL_LG6_2
   BTFSS PORTB,4
   GOTO LABEL_LG6_FALSE

LABEL_LG6_TRUE
   BSF PORTA,4
   GOTO LABEL_LG6_ENDE
LABEL_LG6_FALSE
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BCF PORTA,4
LABEL_LG6_ENDE
;***************************************************
; UND - Gatter -> LG7
;***************************************************

LABEL_LG7_1
   BTFSS S0,0
   GOTO LABEL_LG7_FALSE
LABEL_LG7_2
   BTFSS PORTB,5
   GOTO LABEL_LG7_FALSE

LABEL_LG7_TRUE
   BSF PORTA,5
   GOTO LABEL_LG7_ENDE
LABEL_LG7_FALSE
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BCF PORTA,5
LABEL_LG7_ENDE
;***************************************************
; UND - Gatter -> LG8
;***************************************************

LABEL_LG8_1
   BTFSS S0,0
   GOTO LABEL_LG8_FALSE
LABEL_LG8_2
   BTFSS PORTB,6
   GOTO LABEL_LG8_FALSE

LABEL_LG8_TRUE
   BSF PORTA,6
   GOTO LABEL_LG8_ENDE
LABEL_LG8_FALSE
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BCF PORTA,6
LABEL_LG8_ENDE
;***************************************************
; UND - Gatter -> LG9
;***************************************************

LABEL_LG9_1
   BTFSS S0,0
   GOTO LABEL_LG9_FALSE
LABEL_LG9_2
   BTFSS PORTB,8
   GOTO LABEL_LG9_FALSE

LABEL_LG9_TRUE
   BSF PORTA,7
   GOTO LABEL_LG9_ENDE
LABEL_LG9_FALSE
   BCF STATUS,RP0   ; Bank 0
   BCF STATUS,RP1   ; Bank 0
   BCF PORTA,7
LABEL_LG9_ENDE
;****************************************

   GOTO MAIN


   END

mech

pardon sorunu yanlış anlamışım. Butonların şaseleri ortak ya, şaseyi anahtarlarsan bütün butonları aktif/pasif yapabilirsin. Yazılıma gerek yok.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

707yunus

zaten erkan614 arkadaşımda öyle dedi.böylece butonlarda ister kesme olsun isterse programın istediği satırında ilgili komut olsun hiç farketmiyor.anahtar çevrildimi hepsi paasif oluyor.kendisine birdaha teşşekürlerimi iletiyorum