Tuş'a basma aparatı sorunu

Başlatan onurinci, 03 Mart 2025, 00:34:25

onurinci

Hocam selam

bir müzik player cihazının tuş takımına iki adet Optokuplör ile komut veriyorum , program tamda istediğim gibi çalışıyor sorun yok, Pot'tan ayarladığım süre kadar bir tuşa basıyor arkasından o tuşu bırakıp , diğer bir tuşa kısacık basıyor. gayet güzel çalışıyor. fakat Programda GPIO.2 heba olmuş , bana lazım o port , orada tuş vardı tuş'u kaldırdım , bir türlü GPIO.2 yi geri kazanamadım o satırlara dokunursam program çalışmıyor.bir yardım.......

DEFINE OSC 4
DEFINE OSCCAL_1K 1
#CONFIG
#LIST_12F675
 __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _BODEN_OFF
#ENDCONFIG
 
TRISIO= %00000001 : GPIO= 0 : CMCON= 7 : VRCON.7= 0 : ANSEL= %00110011 : ADCON0= %10000011
OPTION_REG.7= 0 :  WPU= %00000000     
 
DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50
 
RAW  VAR WORD
LAP  VAR WORD
Time VAR WORD 70
SN   VAR BYTE
 
GPIO.2= 1
SYMBOL   LED= GPIO.1
SYMBOL ATT= GPIO.5 : ATT= 0
      PAUSE 300
 
Start: ; *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*
     
      ADCIN 0,RAW
      LAP =((RAW)*/50)/5 + 5 ; Calcul
           
CNT: ;--------------------------------------------------------------------------
       pause 100
        Time= LAP
       T1CON= %00000001      'Timer Divide by  1/1 active         
          SN= 0             
         ATT= 0 ;--------
         LED= 1
CNT1: ;-------------------------------------------------------------------------       
        TMR1H= $0B : TMR1L= $DC  ' Timer Preset Value
                                 ' Interrupt 500mS Time       
          PIR1.0= 0              ' Flag Zeroing
    WHILE PIR1.0= 0
           IF GPIO.2= 0 THEN
           ATT= 1 : LED= 0 : T1CON= 0
 
     ENDIF
    WEND
          SN= 1-SN : IF SN= 1 THEN CNT1   
        Time= Time -1
        IF Time >0 THEN CNT1
        ATT= 1 : LED= 0 : Pause 300
        ATT= 0
   
        end

İlyas KAYA

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

onurinci

@İlyas hocam o portu kullanabilmem için aşağıdaki
           IF GPIO.2= 0 THEN
           ATT= 1 : LED= 0 : T1CON= 0
 
     ENDIF
IF ENDIF şartlarından kurtulmam lazım , onları ellediğim zaman program görevini yerine getirmiyor sıkıntı orada..

ete

Sorunu tam olarak anlamadım ama şunu biliyorum.
 IF GPIO.2= 0 THEN komut satırını bu şekilde kullanabilmen için GPIO.2 pinin giriş olarak atanmış olması gerekir. Sende bu pin çıkış olarak gözüküyor. Dolayısıyla o pini kullanamamış oluyorsun bir yerde. Bu nedenle Ilyas'ın önerisi doğru ve programınbaşındaki TRISIO komutunu düzeltmen gerekir.

GPIO.2 pini heba olmuş ne anlama geliyor pek bilemedim. Bana çağrıştırdığı şey o pinin fiziksel olarak bozulmuş olması. Genelde giriş pinlerine yüksek voltaj gelirse giriş özelliği bozuluyor ama çoğu zaman aynı pini çıkış yapınca çıkış olarak çalışıyor.
Bu durumda GPIO.2 pini bozuk ise ne yapmayı düşünürsün?. Bence o pin çıkış olarak çalışıyor ise Led pinlerinden birini giriş yapıp GPIO.2 nin fonksiyonunu ona aktarıp GPIO.2 yi led pini olarak kullanman.

Ete

onurinci

hocam sanıyorum izah edemedim, program görevini yerine getiriyor.eskiden timer başlasın diye basmalı buton vardı , onu iptal ettim. MCU'ya enerji verdiğimde timer başlıyor ve görevi bittiğinde duruyor, ta ki tekrar enerji verilene kadar GPIO.2 portuna eklentiler yapacağım. niye orada dursunki? ,yani kısaca GPIO.2'ye ihtiyaç olmadan program koşsun yapması gerekeni yapsın. galiba bu sefer daha net izah ettim.

ete

While - wend döngüsünün içini boşaltman yeterli.
Mantıklı düşünürsen GPIO.2 deki tuşa basmasan sistem çalışıp süre sonunda iş bitiyor.
Oradaki while- wend döngüsü tamamen 500ms lik süre dilimlerini saydırmak için koyulmuş.
İçinde de birde buton kontrolü koyulmuşki butona basınca iş süresinden önce bitirilsin diye.
Sen buton kontrolünü istemiyorsun o halde while'den wend'e kadar olan her şeyi sileceksin. Böylece program yine süre saymaya devam eder ama buton kontrolü yapmaz.

Ete

onurinci

hocam çok teşekkür ederim oldu .....

Powered by EzPortal