12F675 ADC Sorunu

Başlatan captain, 24 Kasım 2013, 14:20:35

captain

Herkese merhaba aranızda yeniyim

12f675 in AN2 bacağına LDR bağlıyorum ve 4 nolu bacaktan led yakmaya çalışıyorum. Ancak ldr üzerine ışığı yaklaştırdığımda led yanıyor biraz daha yaklaştırıyorum led sönüyor biraz daha yaklaştırıyorum led yanıyor sürekli böyle devam ediyor. LDR yerine 10K lık pot takıyorum yine aynı durum oluyor. Belli bir değere kadar led yanık kalsın belli bir değerden sonra sönmesini başaramadım.

yazdığım kod bu:

@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF
define osccal_1k 1
define osc 4

DEFINE ADC_BITS 10     
DEFINE ADC_CLOCK 1     
DEFINE ADC_SAMPLEUS 11

GPIO=0
TRISIO=%00000100
OPTION_REG.7=1
CMCON=7
ANSEL=%00000100
ADCON0=%10000000


sens VAR WORD
   
PAUSE 200
       
BASLA:
      ADCIN 2, sens
     
      if sens<100 then low GPIO.4
      if sens>100 then high GPIO.4
     
      PAUSE 100             
    GOTO BASLA 
END

ete

Bu sorunun cevabı için ldr nin bağlantı şeklini görmem lazım.
Ete

captain

#2
şimdi kodda yada devrede herhangi bir değişiklik yapmadım ama düzgün çalışmaya başladı yada farkında olmadan bir şey yaptım.
Ldr nin bir bacağını gnd ye diğer bacağını 1K dirençle VCC ye bağlıyorum VCC ile ldrnin bağlantı noktasını da pice giriyorum.
Bir sorunum daha var ldr aydınlığa çıktı diyelim led hemen sönmesin 5 sn durup öyle sönsun yani aydınlık olduğundan tam emin olsun bir iki saniyelik aydınlık olursa led yanmaya devam etsin ama pause komutuyla olmaması lazım çünkü diğer kontrolleri de yapmasını istiyorum.

şöyle bir algoritma aklıma geldi ama çözüm olmadı

if sens>100 then
         high gpio.2
  if sens<100
   for m=1 to 5000
        high gpio.2
   next m
if sens<100 then low gpio.2
endif


İlyas KAYA

sayın captain; Diğer kısımlara bakamadım sadece son eklediğiniz kodda olmaması normaldir çünkü sens'in büyük olduğu yerde if icra ediyor.
Ama küçüklüğünü anlamak için yine sens'in büyük olması gerekiyor.
Şu şekilde deneyin birde .



BEKLE VAR BYTE

BASLA:
      ADCIN 2, sens
     

if sens>100 then
high GPIO.4
BEKLE=0
ENDIF

     
IF sens<100 then bekle=bekle+1



IF BEKLE>=30 THEN       'PROGRAMDA 100MS BEKLEME VAR. BUNA GÖRE 100*30 = 3000 YANİ 3SN SONRA SÖNER
BEKLE=30
low GPIO.4
ENDIF


      PAUSE 100             
    GOTO BASLA 

END

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

captain

evet şimdi anladım teşekkür ederim birkaç sorunum var 12f675 te onları çözüp bu kodu hemen deneyeceğim.

Powered by EzPortal