# sensor ultrasonido ping con pic16f628a



## koko1 (Nov 18, 2012)

Estoy usando el sensor ping de parallax para medir distancia. Ejemplo: se tiene una distancia de referencia cualquiera (en este caso 50 cm)  cuando la distancia sea menor, entonces la salida en un pin del pic sera alta (5v),(para activar un relay o encender un led) y que se mantenga en alto un tiempo (en este caso 5s para probar) caso contrario la salida del pic sera baja(0v), solo eso.

Estoy utilizando el pic16f628a, uso el puerto b.7 como entrada de sensor ping y el puerto a.1 como salida. 
El problema es que no obedece al programa del pic, ahí les dejo el código en pbp, haber si estoy haciendo algo mal.

```
define OSC 4 
Define    ONINT_USED    1
trisa.1=0

porta.1=0
ping var porta.0
Scale    var word                               'raw x 10.00 =uS 
Cm  var word                               '1/29.034(ancho**) 

Scale = 10 

cm = 2257 
Dist  var word                               'raw medida 
cem       var word 
main: 
 Goto Get_Sonar                               'leer el valor del sensor 
 after_Get_Sonar:                                                              
  cem =Dist ** Cm                      'convertir a centimetros 

    if cem<=50 then 
    high porta.1
    pause 5000
    goto main
    else
    low porta.1
    endif
    'pause 500
 GOTO main 
 Get_Sonar: 
  LOW Ping                               'hacer el disparo 0-1-0 
  PULSOUT  Ping, 1                 'activar sensor 
  PULSIN  Ping, 1, Dist          'medir el eco del pulso 
  Dist = Dist * Scale              'convertir a uS 
  Dist = Dist / 2                          
  goto after_Get_Sonar
```


----------



## D@rkbytes (Nov 19, 2012)

koko1 dijo:


> El problema es que no obedece al programa del pic


Saludos.
Te recomiendo que incluyas la palabra de configuración del PIC en la cabecera del programa.
Puedes usar algo como esto:

```
@ DEVICE PIC16F628A    ; Microcontrolador utilizado
; Palabra de configuración
@ DEVICE INTRC_OSC_NOCLKOUT,PROTECT_OFF,CPD_OFF,WDT_OFF,MCLR_OFF,PWRT_ON,BOD_OFF,LVP_OFF
;*******************************************************************************
```
Recuerda que el PIC16F628A tiene comparadores analógicos en el puerto A, y estas usando RA1 (AN1)
Para hacer el puerto A digital I/O tienes que establecer el registro CMCON con valor 7 (CM<2:0> = 111)
*CMCON = 7*

Suerte.


----------



## koko1 (Nov 21, 2012)

Gracias por la respuesta, creo que era lo único que faltaba ahora ya funciona, gracias de nuevo.


----------

