Har köpt mig en ultrasonisk sensor som heter Parallax PING))), och försöker få den att fungera, men det går inget vidare.
Produktblad: http://www.parallax.com/Portals/0/Downl ... G-v1.6.pdf
Den fungerar på så sätt att (vad jag uppfattat det som iallafall) man skickar en kort puls till den via I/O pinnen som varar i ungefär 5 mikrosekunder, sedan skickar sensorn ut sitt ultraljud, och får tillbaka det. Sensorn svarar på samma I/O pin genom en annan signal, där våglängden på signalen avgör avståndet.
Har nu suttit och googlat och pillat i flera timmar, men får det inte att fungrera. Använder en PIC16F628, med PING))) kopplat till pin nr. 4, och en LED till pin nr. 0 på mikrokontrollern. Har kodat upp ett litet skript som gör att LED:en tänds så fort den får ett svar från sensorn. Jag har inte gjort något hårdvarufel, för när jag testade att köra in en annan strömkälla på pin nr. 4 och då tändes LED:en på pin nr. 0, som den skulle göra.
Det finns även en Activity LED på själva PING))):en som jag tror ska vara tänd när den jobbar. Så fort jag sätter ström i kretsen blinkar den LED:en till svagt i ett jättekort ögonblick, sedan aldrig igen. Har 5V som spänning, enligt produktbladet.
Är det någon som har erfarenhet av Parallax PING))) och kan peka ut vart mitt fel ligger? Här är min kod:
Kod: Markera allt
;--------Initialize assembler
LIST P=PIC16F628 ; Telling the assembler what kind of microcontroller we are using
#include "P16f628.inc" ; Converting words to hex. values
__config 0x3f18 ; Settings, such as watchdog, internal timers, etc. All turned off
;---------Macros
bank0 macro
bcf STATUS,RP1
bcf STATUS,RP0 ; BANK0 (Data Memory)
endm
bank1 macro
bcf STATUS,RP1
bsf STATUS,RP0 ; BANK1 (Data Memory)
endm
bank2 macro
bsf STATUS,RP1
bcf STATUS,RP0 ; BANK2 (Data Memory)
endm
bank3 macro
bsf STATUS,RP1
bsf STATUS,RP0 ; BANK3 (Data Memory)
endm
;---------Registers
cblock 0x20
; Nothing for now...
endc
;---------Program memory
org 0x00 ; The beginning of the program
goto Start
org 0x04 ; Interrupt Service Routine
; Nothing for now....
;##############
;----------Main
Start ; Starting by setting all pins as outputs
bank1
movlw b'00000000' ; Pin 5 needs to be an input pin
movwf TRISA ; Set the inputs and outputs of port A
movlw b'00000000' ; All outputs
movwf TRISB ; Set the inputs and outputs of port B
bank0
goto SendSIG
PingOut ; Make pin nr. 4 an output pin for sending trigger signal
bank1
movlw b'00000000'
movwf TRISA
bank0
return
PingIn ; Make pin nr. 4 an input pin for retriving an echo signal
bank1
movlw b'00010000'
movwf TRISA
bank0
return
SendSIG
call PingOut
bsf PORTA,4 ; Trigger signal, 5uS long
call Delay5uS
bcf PORTA,4
goto ScanningSIG ; Trigger signal, now sent. Start listning for echo signal
ScanningSIG
call PingIn
ScanningLoop
btfsc PORTA,4
bsf PORTA,0
goto ScanningLoop
;-----Delays---------------------------------------
Delay5uS ; A delay lasting for 5 micro seconds, including the "call"
goto $+1
return
;-----End------------------------------------------
Finish
end ; End of program