çizgi izleyen 'delay' yardım

Başlatan tymaut, 19 Temmuz 2007, 19:19:42

tymaut

selam arkadaşlar, çizgi izleyen arabam için MPLAB kullanarak şöyle bir kod yazdım:

      include "P16f877.inc"  ; use definition file for 16F872

; configure the chip for a crystal oscillator, with code protection and watchdog timer off.

__CONFIG _CP_OFF & _XT_OSC &_WDT_OFF

;
      org 0x0000      ; start address = 0000h

; INITIALISE PORTS
; binary used to see individual pin level

      movlw b'00000000'       ; all port pins = low
      movwf PORTA
      movlw b'00000000'
      movwf PORTB
      movlw b'00000000'
      movwf PORTC

      bsf STATUS,RP0  ; set RAM Page 1 for TRIS registers

; initialize ports
; set all pins to outputs, and analog pins to digital.

      movlw b'00000000'       ; all IO pins = outputs
      movwf TRISA
      movlw b'11110000'
      movwf TRISB
      movlw b'11110000'
      movwf TRISC

      movlw b'00000110'       ; all analog pins = digital
     movwf ADCON1

      bcf STATUS,RP0  ; back to RAM page 0

; LED FLASH LOOP

Loop    
movlw b'00000000'
movwf PORTC

btfsc    PORTC,4
goto    sol
btfsc    PORTC,5
goto   sag
btfsc   PORTC,6
goto   duz
goto   Loop

sol   
bsf      PORTC,0
goto   Loop

sag
bsf      PORTC,1
goto   Loop

duz
bsf      PORTC,2
goto    Loop

END
------------

LED yardımıyla verdiğim girdilere istediğim çıktıları alabiliyor muyum diye bakyıorum. PortC nin 4. pinine 5V verdiğimde 0. pine bağlı olan led yanıyor fakat voltajı çekmeme rağmen yaklaşık 5 saniye yanmaya devam ediyor. Bu diğer bacaklar için de böyle.

CLKIN ve CLKOUT arasına 4KHz XTAL taktım.

Sorun sizce neden ?

aslan_korhan

Girişlere +5V'ye doğru 10K civarında birer pullup direnç bağladınmı?
Yani PIC'in bacağını boşta bırakmaman gerekiyor.

Bu arada Forumumuza hoş geldin...
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

tymaut

Alıntı yapılan: "aslan_korhan"Girişlere +5V'ye doğru 10K civarında birer pullup direnç bağladınmı?
Yani PIC'in bacağını boşta bırakmaman gerekiyor.

Bu arada Forumumuza hoş geldin...

evet bağlı. PIC çalışıyor fakat dediğim gibi input bacağına değidrdiğim %v u çektiğim zaman hemen sönmesini bekliyorum output ledinin ama olmuoyr. % sn fln bekleyip öyle sönüyor.

hoşbulduk :D

profahmet

portc nin ilk 4 bitini giriş yapmışın sonrada çıkış almaya kalkmışın.
devrede bir yanlışın olmalı.
neyse bu drumu düzeltsen bile sürekli lojik 1 çıkışı alamassın. portc nin pinlerinin 1 olduğunda ledin yanmasını istemişin ama sürekli döngü oluşur. 3 saykıl yanar ve tekrar test edene kadar söner. yani karedalga üretmiş oluyorsun. led biraz kısık yanar.
bu döngüyü önlemelisin.

tymaut

11110000 0,1,2,3. pinler output 4.5.6.7. pinler input demek değil mi ?

bir de dediğin döngü olayını anlamadım yardım edebilir misin

profahmet

giriş çıkış pinlerinde sorun yok. orası tamam. yazılımı incelerken uykusuz haldeydim kafam karışmış. kusura bakma.
döngü olayıda, butona basılı tutulduğu süre boyunca ledi sürekli yakıp söndürüyor. bunu önlemek için ya zaman gecikmesi kullan yada butonun bırakılmasını beklet. en iyi olanıda bu. aşağıdaki değişikliği yaparak dene.sorun düzelir.
sol 
bsf PORTC,0 
btfsc PORTC,4 
goto sol 
goto Loop 

sag 
bsf PORTC,1 
btfsc PORTC,5 
goto sag
goto Loop 

duz 
bsf PORTC,2 
btfsc PORTC,6 
goto duz 
goto Loop

tymaut

sorunu buldum arkadşlar :D

input pinlerini bi dirençle topraklamam yetti.