adc çevrimde butona basma süresine göre çıkış belirleme

Başlatan blueboard, 25 Mart 2016, 08:58:32

blueboard

Ete Hocam, yapmak istediğim şu, adc çevrimi sonunda butona elimizi basıp çekersek c.1 portunun high, elimizi 1.5 sn ve üzeri miktarda basılı tutarsak c.2 portu high olacak. Kodu şu şekilde yazdım ancak çalıştıramadım

         

ANADONGU:   
pause 100
ADCIN 0, hamA   
.
.
.
.

IF HAMA > 569 AND HAMA < 700 THEN gosub karar   

GOTO ANADONGU 

karar:
ADCIN 0, hamA
sayac=0
if hama<700 then
WHILE hama<700
SAYAC=SAYAC+1
pause 1

IF SAYAC=<600 AND sayac < 1500  THEN   'portc.1=1
portc.1=1
pause 500
portc=0
endif

IF SAYAC=>1501 THEN    '  PORTc.2=1
PORTc.2=1
pause 500
portc=0
endif
WEND
PORTc=0

ENDIF

RETURN

Hata nerede? Teşekkürler.

ete

Bende sana sorayım BUTON nerede? Buton dan bahsediyorsun ama ortalıkta buton yok.
Ama programdaki hatan şu;
karar:
ADCIN 0, hamA
sayac=0
if hama<700 then
WHILE hama<700
SAYAC=SAYAC+1
pause 1
..
..
Wend

Bu bir döngü döngü şartı nedir? HAMA<700 ise sürekli bu döngünün içinde kal diyorsun.
Program döngüye giridi çünki HAMA<700 peki nasıl çıkacak o döngüden.? Çıkması mümkün değil.
Çünki ADC ölçümü yapmıyorsun böylece HAMA hiç değişmiyor hep 700 ün altında kalıyor.
Döngü içinde birde ADC ölçümü yapman gerekir ki program HAMA nın 700 den büyük mü küçükmü olduğunuda anlayabilsin.

Yalnız programla açıklamada istediğin şey farklı. Buton meselesi için örnekçalışma şekli şöyle olabilir.


IF BUTON=0 THEN  'şayet butona basıldı ise
   Sayac=0
   While Buton=0
      Sayac=sayac+1
       IF sayac=1500 THEN
            PORTC.2=1
             GOTO ATLA
       ENDIF
       Pause 1
    Wend
    IF SAYAC<1500 THEN PortC.1=1
ENDIF
ATLA:
......

Ete

blueboard

Ete hocam, şemayı ekledim.

ete

Ben vereceğimi verdim zaten. Şemana göre verdiğim kod daki Buton yazan yere sen kendi butonunu ayarlayacaksın.
Ete


blueboard

Ete Hocam, anlattıklarınızı anlayabildiğim kadar yapmaya çalıştım ama olmadı. Tekrar yardımınızı rica ediyorum. Yazılımı 16f716'ya göre düzenledim. Olması gereken senaryo şu:
Butona bağlı 30 ohmluk direnç var. Buna göre yapılacak ADC çavrimine göre sonuç belirlenecek.Eğer 30 ohmluk direncin bağlı olduğu butona  1.5 saniyeden daha az süre ile basılıp butondan elimizi çekersek B.7 high olacak. Eğer butona basarak 30 ohmluk direnci 1.5 saniyeden daha uzun süreli devrede tutacak olursak b.6 high olacak.  Bir bakabilir misiniz. Teşekkürler.

ete

Daha öğrenmen gereken epeyce iş var. Her şeyden önemlisi ne zaman GOSUB ne zaman GOTO kullanman gerektiğini bilmiyorsun.
GOSUB bir alt programı çalıştırmak için kullanılır. Oraya gidilir ve oradan tekrar aynı yere geri dönme mecburiyeti vardır. Dönme işlemi RETURN ile otomatik yaptırılır.

GOTO ise bir program parçasını çalıştırmak yada programa o parçadan devam etmek için kullanılır. Program oraya gider ancak dönme mecburiyeti yoktur. Gidilen yerde kalabilir program yada bir başka GOTO ile bir başka yere gönderilebilir.

Diğer konuda programın işleyişinin satır takibine dayandığını bilmemiş olman. Her neyse burada ders verecek değilim ama bu işi öğrenecek isen Basic Derslerini okuman gerekiyor. Bir kerelik burada yardımcı olacağım ama başka olmam bunuda bilesin.

Kodlarını düzelttim aşağıdadır. Temel fikir şöyle Programda ADC okumasını 8 bit üzerinden yaptığın için okuyacağın maksimum sayı 255 olacaktır. Butona basılmadığı zaman 2k2 üzerinden geen 5V ADC değerini 255 olarak okumana sebep olur. Butona basınca ADC girişi 30 ohm üzerinden GND ye çekilmiş olur ve okunan ADC değeri 3 olacaktır. Buna dayanarak okunan 255 ise butona basılmadı, okunan 255 den küçük ise (veya 3 ise) butona basıldı olarak kabul edip işlem yapıyoruz.

Ete

BASLA:                                     
    ADCIN 0, HAMA                               
    IF HAMA <255 then  '
       sayac=0
       while hama<255
          ADCIN 0, HAMA
          sayac=sayac+1
          IF SAYAC>1500 THEN ATLA
          PAUSE 1
       WEND
       IF SAYAC <1500 THEN
          PORTB.7=1
          PAUSE 1000
          PORTB.7=0
       ENDIF   
    ENDIF   
    GOTO BASLA
             
ATLA:
    PORTB.6=1
    pause 1000
    PORTB =0
    GOTO BASLA
                         
END

Powered by EzPortal