Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
17/10/2012 #2261


cesarim dijo: Ver Mensaje
Buenos dias amigos aca dejo un pequeño aporte se que no es un proyecto grande pero estoy empezando a practicar programas en basic para hacer funcionar motores y este es un circuito con motor inversor de giro espero les agrade la idea final es ponerlo en mi casa para mover las cortinas jejeje y empiezo probando con motor dc
este es el codigo por favor si podria mejorarse espero puedan aportar y ayudarme a mejorar este proyecto
el pulsador necesita un retardo de 500 ms por tema de ruido
Código:
cmcon=7
DEFINE OSC 4            
TRISB = $F0
TRISA = $FF
        
OPEN    VAR PORTA.0
CLOSE   VAR PORTA.1

GIR1    VAR PORTB.0 
GIR2    VAR PORTB.1
SEN1    VAR PORTB.7
SEN2    VAR PORTB.6

low GIR1
low portb.1
low portb.2
LOW SEN1;=0

      Main:
        IF OPEN THEN GOSUB ABRIR
        IF CLOSE THEN GOSUB CERRAR     
 
   ABRIR: 
     pause 500
      IF OPEN THEN 
       HIGH gir1
        LOW GIR2
      ENDIF
       
      CERRAR: 
       PAUSE 500
        if close then
         low gir1
          high gir2
        endif
  GOTO MAIN

END
aca adjunto el diseño en proteus y el archivo hex el codigo del programa lo dejo aca mismo
Hola...tal vez algo como el adjunto es una de las tantas formas que se puede hacer .
Saludos.
Código:
@ DEVICE pic16f628A, INTRC_OSC_NOCLKOUT 'Reloj interno solo.-
@ DEVICE pic16f628A, WDT_OFF ' Watchdog Timer desconectado.-
@ DEVICE pic16f628A, PWRT_ON ' Power-On Timer conectado.-
@ DEVICE pic16f628A, BOD_ON ' Brown-Out Detect conectado.-
@ DEVICE pic16f628A, MCLR_ON ' Master Clear Externo conectado;desconectado.-
@ DEVICE pic16f628A, LVP_OFF ' Low-Voltage Programming desconectado.-
@ DEVICE pic16f628A, CPD_OFF ' Data Memory Code Protect desconectado.-
;@ DEVICE HS_OSC ; Oscilador a cristal

cmcon=7
DEFINE OSC 4            
TRISB = $F0
TRISA = $FF

i var byte        
OPEN    VAR PORTA.0
CLOSE   VAR PORTA.1

GIR1    VAR PORTB.0 
GIR2    VAR PORTB.1
SEN1    VAR PORTB.7
SEN2    VAR PORTB.6

low GIR1
low portb.1
low portb.2
LOW SEN1;=0
' Programa Principal
Main:
        IF OPEN THEN ' Si presiono OPEN
            for i = 1 to 10
             pause 50  ' espero 50 ms
            if open = 0 then goto main ' si se suelta antes de 10 X Pause50ms voy al inicio
            next i
         GOSUB ABRIR ' Voy a abrir
        endif
        IF CLOSE THEN 
            for i = 1 to 10
             pause 50
            if close = 0 then goto main
            next i 
        GOSUB CERRAR
        endif
          pause 50 ' espero 50ms si no se cumple ninguna de las dos condiciones 
        GOTO MAIN  ' retorno a la rutina principal 
' Abre Cortina 
ABRIR: 
     HIGH gir1 ' Encender Gir1
     LOW GIR2  ' Aseguramen que Gir2 este apagado
     repeat  ' Repetir 
       pause 50  ' Esperar 50ms
     until  open = 0 ' hasta que "OPEN" sea soltado
     low gir1 ' Apagar Gir1
     return  'Volver a la llamada
' Cierra Cortina     
CERRAR: 
        low gir1
        high gir2
        repeat
           pause 50
        until close = 0 
        low gir2  
        return 

END
Ric.
18/10/2012 #2262


Amigo que version usas del basic yo uso el microcode pic basic pro y me sale error cuando compilo tu programa justo en el UNTIL y el REPEAT podrias ponerlo como adjunto por favor para poder descargar tu version que usas el tema es que yo de mi pc no puedo descargar programas si no es con permiso del servidor que me da internet muchas gracias

---------- Actualizado después de 3 minutos ----------

mi version es un demo creo por que aveces cuando hago mucho codigo me sale en ingles que devo comprar la version original por ser este un demo
18/10/2012 #2263


cesarim dijo: Ver Mensaje
Amigo que version usas del basic yo uso el microcode pic basic pro y me sale error cuando compilo tu programa justo en el UNTIL y el REPEAT podrias ponerlo como adjunto por favor para poder descargar tu version que usas el tema es que yo de mi pc no puedo descargar programas si no es con permiso del servidor que me da internet muchas gracias

---------- Actualizado después de 3 minutos ----------

mi version es un demo creo por que aveces cuando hago mucho codigo me sale en ingles que devo comprar la version original por ser este un demo
La versión que uso es la 4 del MicroCode Studio y el compilador es el PicBasicPro 2.6...no se a que te refieres con adjuntar si ya lo que adjuntado en el archivo Motor prueba2.zip...te puedo pegar el hex compilado por aquí
Código:
:100000002828A301A200FF30A207031CA307031C9A
:1000100023280330A100DF300F200328A101E83E90
:10002000A000A109FC30031C1828A00703181528FC
:10003000A0076400A10F152820181E28A01C222844
:1000400000002228080083130313831264000800B1
:1000500007309F008316F0308600FF308500831242
:1000600006108316061083128610831686108312DC
:1000700006118316061183128613831686138312C4
:100080006400051C53280130B80064000B303802AE
:1000900003185228323001206400051850284028E7
:1000A000B80F452869206400851C66280130B80017
:1000B00064000B30380203186528323001206400D8
:1000C000851863284028B80F58287B20323001203B
:1000D0004028061483160610831286108316861095
:1000E000831232300120640005187128061083162F
:1000F0000610831208000610831606108312861459
:1001000083168610831232300120640085188328FC
:0E0110008610831686108312080063008D2867
:02400E00703F01
:00000001FF
Lo mio solo fue una ejemplo de la forma que se puede hacer...toma la idea y lo resuelve con las instrucciones que soporte la versión del compilador que tengas de eso se trata al aprender.

Ric.
18/10/2012 #2264


Saludos
no amigo si lo he probado tu circuito y funciona bien pero si yo quiero modificar tu programa para hacer otras pruebas me bota error en las variable UNTIL y REPEAT y me sale que tengo que comprar la version original del pic basic pro. eso siempre me sale ya que el que logre descargar es un demo
yo casi no puedo descargar programas de aca mi maquina ya que el internet lo tengo bloqueados algunos programas por eso te pedia si tienes el instalador del microcode que usas para yo poder instalarlo claro si se podria por favor

---------- Actualizado después de 2 minutos ----------

no amigo si lo he probado tu circuito y funciona bien pero si yo quiero modificar tu programa para hacer otras pruebas me bota error en las variable UNTIL y REPEAT y me sale que tengo que comprar la version original del pic basic pro. eso siempre me sale ya que el que logre descargar es un demo
yo casi no puedo descargar programas de aca mi maquina ya que el internet lo tengo bloqueados algunos programas por eso te pedia si tienes el instalador del microcode que usas para yo poder instalarlo claro si se podria por favor

---------- Actualizado después de 36 minutos ----------

Amigos podrian decirme en que estoy fallando en este codigo por favor les rogaria me den una manito se que para algunos es talvez ya demasiado facil ,pero yo aun batallo con los codigos. quiero activar foco0 con boton0 y desactivarlo con boton1 les agradesco su apoyo aca les dejo el codigo
Código:
@ DEVICE PIC16F628
@ DEVICE MCLR_On
@ DEVICE INTRC_OSC 
@ DEVICE WDT_OFF 
@ DEVICE LVP_OFF 
@ DEVICE BOD_OFF 
@ DEVICE PWRT_OFF
@ DEVICE CPD_ON 
@ DEVICE PROTECT_ON 
DEFINE OSC 4 

CMCON=7

TRISA = $FF
TRISB = $FC
PORTB = $0

Boton0      VAR PORTA.0
Boton1      var PORTA.1
Foco0       VAR PORTB.0
Foco1       VAR PORTB.1

low foco0
low foco1
boton0=0
boton1=0

 Main:
    if boton0 then Time0
 goto main   
  
  Time0:
   if boton0 then
      pauseus 1
     high foco0
     if foco0 then gosub Salto   ;no se si es necesario esta llamada pero si elimino esta linea
                                         ; igual no me funciona   
    endif 
   while BOTON0 :wend
   
   Salto:
   if boton1 then
    pauseus 1
     low foco0
   ;endif
   endif
    while boton1 : wend  
 while BOTON0 :wend 
  goto main 

end
18/10/2012 #2265

Avatar de kiyero

programar interruptor con picbasic pro
Hola amigos, he estado algo ocupado y había dejado de lado el estudio de programación de pics en picbasic pro, tengo una duda y es la siguiente:

Debido a la temporada navideña que se avecina, me he propuesto hacer un secuenciador de luces con múltiples efectos, pero la traba o dificultad del asunto es que en lo poco que he estudiado no sé como hacer una rutina para que con un solo botón vaya cambiando los efectos, es decir, presiono el interruptor en RA0 y se genera el primer efecto, vuelvo a presionar RA0 y pasa al segundo efecto y así sucesivamente, ya tengo la rutina de los efectos (he hecho como 12), tan pronto aclare la duda con su ayuda y haya terminado el programa, los subiré para aquellos que quieran hacerlo lo puedan implementar

El pic a utilizar es un 16F877A

Gracias por su ayuda
18/10/2012 #2266


Una consulta quiero realizar lo sgte:
tengo 2 pulsadores uno A y otro B, si A lo presione 1 vez y después B se debe prender una vez un led
Si presione A 5 veces y después B se enciende el led 5 veces
Y así sucesivamente
A es el numero de veces que debe prender mi led y B es como mi enable o mi habilitador
me pueden dar la idea no el programa, de como se puede hacer eso mas o menos
18/10/2012 #2267


Saludos
amigo mira en los primeros ejemplos nuestros amigo dejaron este codigo que te pueda orientar mucho ahi te lo pongo
Código:
;Proyecto con 2 pulsadores y 3 leds ; cuando es accionado P1(primer pulsador) se 
;enciende un led ubicado en RB2 durante un segundo,lo mismo pasa si se acciona 
;P2 con otro led ubicado en RB3 , pero si son accionados al mismo tiempo un 
;tercer led (RB4)parpadeara 5 veces duante 300mls se uitliza pic 16F877A.

@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz 

;configuracion de pines 

led1 var portb.2               ;ubicacion del primer LED en RB2 del pic 16F877A 
led2 var portb.3               ;""""                        RB3
led3 var portb.4                ;""""""""""""""""""""       RB4
p1 var portb.0                  ;"""""""del primer pulsador RB0 """"""""""""
p2 var portb.1                  ;"""""""segundo pulsador   RB1
x var byte                      ;variable x con capacidad de 255


; lectura de pulsadores
inicio
if p1=0 then encender   ; pregunta si se acciono el pulsador 1 ir a encender
PAUSE 200
if p2=0 then encender1  ;  """ pulsadodor2 ir a encender 1
PAUSE 200
if (p1=0) AND (p2=0) then encender2  ; """"pulsador1 y pulsador2 ir a encender2
PAUSE 200
goto inicio                   ; crea un bucle cerrado


encender:                    ;rutina encender
high led1                 ; enciende led 
pause 1000                   ;espera 1seg
toggle led1                ; apaga led
pause 1000
goto inicio                   ;ir a inicio

encender1:
high led2                 ; enciende led 
pause 1000                   ;espera 1seg
toggle led2                ; apaga led
pause 1000
goto inicio 

encender2:
for x=0 TO 4           ; repite cinco veces 
high led3                ; enciende led 
pause 300                   ;espera 300mls
low led3                ; apaga led utilice comando low que cumple la misma 
                         ;funcion que toggle que cambia la configuracion
                         ;de un bit es decir si esta en ALTO LO PASA A BAJO
                         ;y viceversa
pause 300
NEXT                   ; SIGUIENTE HASTA QUE SE REPITE 5 VECES
goto inicio 
end                            ;fin del programa
18/10/2012 #2268
Moderador

Avatar de D@rkbytes

Alever89 dijo: Ver Mensaje
Una consulta quiero realizar lo sgte:
tengo 2 pulsadores uno A y otro B, si A lo presione 1 vez y después B se debe prender una vez un led
Si presione A 5 veces y después B se enciende el led 5 veces
Y así sucesivamente
A es el numero de veces que debe prender mi led y B es como mi enable o mi habilitador
me pueden dar la idea no el programa, de como se puede hacer eso mas o menos
Como este es un curso de PICBasic Pro, no esta por demás adjuntar un ejemplo de como se puede lograr.
Veras que usando PBP se puede hacer lo que quieres muy fácil.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar LED_Counter.rar (10,2 KB (Kilobytes), 113 visitas)
18/10/2012 #2269


amigos diganme por favor cual es mi error le he puesto que encienda un led para ver si entra a la rutina salto y logra pendrer el led pero no me obedece el boton1 les dejo el codigo para ver si me pueden orientar por favor
Código:
CMCON=7

TRISA = $FF
TRISB = $F0
PORTB = $0

Boton0      VAR PORTA.0
Boton1      var PORTA.1
Foco0       VAR PORTB.0
Foco1       VAR PORTB.1
Foco2       VAR PORTB.2
Foco3       VAR PORTB.3

Flag0       var bit

high foco2
low  foco1
low  foco0

 Main:
    if boton0 then Time0
 goto main   
  
  Time0:
   if boton0 then
      pauseus 1
      low foco1
       high foco0
        if foco0 then
       gosub salto
        else
       RETURN
     endif
    endif 
   while BOTON0 :wend
   ;return
   
 Salto:
  if foco0 then
  pause 1000
   high foco3
   if boton1 then
    ;if PORTA.2 then
    pause 1200
    low foco3
     toggle foco2
    endif
   endif
   while BOTON0 :wend
 ;goto main

end
---------- Actualizado después de 2 minutos ----------

como poder saber si es mi programa o es el programador donde estoy compilando mis codigos
18/10/2012 #2270


cesarim dijo: Ver Mensaje
no amigo si lo he probado tu circuito y funciona bien pero si yo quiero modificar tu programa para hacer otras pruebas me bota error en las variable UNTIL y REPEAT y me sale que tengo que comprar la version original del pic basic pro. eso siempre me sale ya que el que logre descargar es un demo
yo casi no puedo descargar programas de aca mi maquina ya que el internet lo tengo bloqueados algunos programas por eso te pedia si tienes el instalador del microcode que usas para yo poder instalarlo claro si se podria por favor

---------- Actualizado después de 2 minutos ----------

no amigo si lo he probado tu circuito y funciona bien pero si yo quiero modificar tu programa para hacer otras pruebas me bota error en las variable UNTIL y REPEAT y me sale que tengo que comprar la version original del pic basic pro. eso siempre me sale ya que el que logre descargar es un demo
yo casi no puedo descargar programas de aca mi maquina ya que el internet lo tengo bloqueados algunos programas por eso te pedia si tienes el instalador del microcode que usas para yo poder instalarlo claro si se podria por favor

---------- Actualizado después de 36 minutos ----------

Amigos podrian decirme en que estoy fallando en este codigo por favor les rogaria me den una manito se que para algunos es talvez ya demasiado facil ,pero yo aun batallo con los codigos. quiero activar foco0 con boton0 y desactivarlo con boton1 les agradesco su apoyo aca les dejo el codigo
Código:
@ DEVICE PIC16F628
@ DEVICE MCLR_On
@ DEVICE INTRC_OSC 
@ DEVICE WDT_OFF 
@ DEVICE LVP_OFF 
@ DEVICE BOD_OFF 
@ DEVICE PWRT_OFF
@ DEVICE CPD_ON 
@ DEVICE PROTECT_ON 
DEFINE OSC 4 

CMCON=7

TRISA = $FF
TRISB = $FC
PORTB = $0

Boton0      VAR PORTA.0
Boton1      var PORTA.1
Foco0       VAR PORTB.0
Foco1       VAR PORTB.1

low foco0
low foco1
boton0=0
boton1=0

 Main:
    if boton0 then Time0
 goto main   
  
  Time0:
   if boton0 then
      pauseus 1
     high foco0
     if foco0 then gosub Salto   ;no se si es necesario esta llamada pero si elimino esta linea
                                         ; igual no me funciona   
    endif 
   while BOTON0 :wend
   
   Salto:
   if boton1 then
    pauseus 1
     low foco0
   ;endif
   endif
    while boton1 : wend  
 while BOTON0 :wend 
  goto main 

end
A la primera parte de tu pregunta no puedo por que violaría el reglamento del foro y por que no funciona el código es porque con algo así lo resuelves
Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 18/10/2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16f628A, INTRC_OSC_NOCLKOUT 'Reloj interno solo.-
@ DEVICE pic16f628A, WDT_OFF ' Watchdog Timer desconectado.-
@ DEVICE pic16f628A, PWRT_ON ' Power-On Timer conectado.-
@ DEVICE pic16f628A, BOD_ON ' Brown-Out Detect conectado.-
@ DEVICE pic16f628A, MCLR_ON ' Master Clear Externo conectado;desconectado.-
@ DEVICE pic16f628A, LVP_OFF ' Low-Voltage Programming desconectado.-
@ DEVICE pic16f628A, CPD_OFF ' Data Memory Code Protect desconectado.-

DEFINE OSC 4 

CMCON=7

TRISA = $FF
TRISB = $FC
PORTB = $0

Boton0      VAR PORTA.0
Boton1      var PORTA.1
Foco0       VAR PORTB.0

low foco0
boton0=0
boton1=0

Main:
    if boton0 then high foco0
    if boton1 then low foco0
goto Main   

end
Ric.
18/10/2012 #2271


Saludos
te agradesco mucho amigo por tu ayuda en serio es algo sencillo que no se me habia ocurrido y hasta le puso las famosas banderas para ver si mejorba pero nada gracias amigo seguire practicando espero puedan seguir despejando mis dudas y poder yo mejorar en mis programas y pues haber si en algun momento logro ayudar a alguien jeje

por el momento ya me estoy metiendo con otro codigo que me empieza a doler la cabeza jejeje pero seguire hasta lograrlo gracias muchas gracias

---------- Actualizado después de 14 minutos ----------

amigo derrepente estoy tratando de hacer algo que no se puede o corringanme para poder aprender ya llevo buen rato con este nuevo codigo que a diferencia del anterior cuando dejas de pulsar recien activa el led se me ocurrio hacerlo trabajar con tiempo diferente y he aqui el problema
Código:
@ DEVICE PIC16F628
@ DEVICE MCLR_On
@ DEVICE INTRC_OSC 
@ DEVICE WDT_OFF 
@ DEVICE LVP_OFF 
@ DEVICE BOD_OFF 
@ DEVICE PWRT_OFF
@ DEVICE CPD_ON 
@ DEVICE PROTECT_ON 
DEFINE OSC 4 

CMCON=7

TRISA = $FF
TRISB = $FE
PORTB = $0

Boton0      VAR PORTA.0
Foco0       VAR PORTB.0

I           var byte

low foco0
boton0=0

 Main:                                  ;boton0
    if boton0 then gosub Time1 ;si detecta un 1 logico supuestamente con un retardo de 
    pause 1000                      ;de 1 seg entonces ire a la rutina Time1

    if boton0 then gosub Time0 ;si este mismo boton detecta 1 logico pero con un retardo de
    pause 100                        ;de 100 ms entonces salto a otra rutina diferente en este caso
                                          ;Time0 
 goto main 
  
  Time0:
   if boton0 then
    ;pause 20
   if not boton0 then
   pauseus 1
    toggle foco0
   endif 
   endif
   goto main
   
  Time1:
   if boton0 then
    ;pause 20
   if not boton0 then
   pauseus 1
   for i = 1 to 6 
    high foco0
    pause 50
    low  foco0
    pause 50
   next  
   endif 
   endif
   
 goto main
end
La idea es que cuando un mismo pulsador detecte un 1 logico pero con tiempo de activacion diferente en estos casos tiempo de 1 seg y el otro tiempo de 100ms salte a las rutinas que le indico y me realize eltrabajo adecuado pero no logro hacerlo
el detalle es que solo lo hace en mi mente por que aca no lo logro hacer solo hace una nada mas de las dos rutinas y eso es modificandolo a cada rato el codigo ojala me puedan ayudar y espero no causar tantas molestias de verdad muchas gracias
19/10/2012 #2272


"cesarim" Una forma seria esta:
Código:
'****************************************************************
'*  Name    : BotonTiempo.BAS                                   *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 19/10/2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16f628A, INTRC_OSC_NOCLKOUT 'Reloj interno solo.-
@ DEVICE pic16f628A, WDT_OFF ' Watchdog Timer desconectado.-
@ DEVICE pic16f628A, PWRT_ON ' Power-On Timer conectado.-
@ DEVICE pic16f628A, BOD_ON ' Brown-Out Detect conectado.-
@ DEVICE pic16f628A, MCLR_ON ' Master Clear Externo conectado;desconectado.-
@ DEVICE pic16f628A, LVP_OFF ' Low-Voltage Programming desconectado.-
@ DEVICE pic16f628A, CPD_OFF ' Data Memory Code Protect desconectado.-
cmcon=7
DEFINE OSC 4            
TRISB = $FC
TRISA = $FF
PORTB = 0
PORTA = 0
I var byte

Foco0 var PORTB.0
Boton0 var PORTA.0

Main:
    if boton0 then
         repeat
         pause 10
         i = i + 1
         until boton0 = 0
         if i =< 20 then
         goto Time1
         else
         goto Time0
         endif
    endif
    pause 10
    
goto Main
'---------------------
Time0:
      i = 0
      toggle foco0
      pause 10
goto main
'----------------------
Time1:
     
      for i = 1 to 6
      high foco0
      pause 50
      low foco0
      pause 50
      next i
      i = 0
goto main
END
Analiza la lógica de lo que tratas de hacer desde el punto de vista de un procesador o computadora y comenta las lineas de lo que escribes de tal forma que te ayuden en la tarea al re-leer lo hecho(ahora y en el futuro ya que no siempre razonamos igual) y tomate tu tiempo para analizarlo desde distintos puntos de vista...siempre ve de menor a mayor escribiendo códigos cortos y probando su funcionamiento y/o comportamiento son algunas de las recomendaciones que te hago.
Saludos.

Ric.
19/10/2012 #2273


ok amigo te agradesco mucho tu ayuda empezado por el manejo simple de pùlsadores y he logrado algunos programas sencillos pero cada vez este tema se vuelve mas grande y mas grande y es muy bonito e interesante te agradesco mucho por tu ayuda y tu tiempo en verdad muchas gracias por apoyarme
19/10/2012 #2274


Amigo disculpame que siga incomodando por que es que me vota error en los comandos UNTIL y REPEAT yo uso el microcode studio pic basic pro sera este compilador el que me genera para poder descargarme otro pbp podria recomendarme algun pbp bueno el cual me permita trabajar hasta con usb y todo eso les agradesco su apoyo

---------- Actualizado después de 5 minutos ----------

como podria reemplazar estos dos comandos para poder compilarlo ya que no puedo ver su funcionamiento del codigo que me enviastes amigo
19/10/2012 #2275


gracias D@rkbytes era justo lo que estaba necesitando
19/10/2012 #2276

Avatar de Nano24

Hola amigos, por aca les traigo un código en picbasic, se trata de calcular distancias por ultrasonidos, es la primera vez que me compro un sensor de este tipo, el HC-SR04, tengo un PIC16F877A que uso para el caso de la medición, bueno la cosa es que ya tengo el programa pero no entiendo, cuando el PIC inicia el programa me envía al LCD 44 cm sin estar apuntando a algún objeto cercano, el sensor tiene un alcance de hasta 450 cm, veo que muestra un error cuando empieza a detectar algún objeto, le acerco la mano a unos 30cm de distancia y me da lecturas de 4cm, como puedo corregir el error? Le he tratado de modificar la ecuación que dice "MEDIDA = MEDIDA / 54" MEDIDA es una variable de peso WORD. Denme una mano para ver como puedo corregir el error.

Código:
define OSC 4
TRISB = 0
TRISC = %00000010
DISPARO VAR PORTC.0         'PIN USADO PARA EL PULSO DE DISPARO
ECO VAR PORTC.1             'PIN USADO PARA EL ECO
MEDIDA VAR Word             'VARIABLE de 16 bits PARA ALMACENAR LA MEDIDA
Define   LCD_DREG   PORTB  'bit de datos del LCD empezando
Define   LCD_DBIT   4      'por B.4 ,B.5, B.6 y B.7
Define   LCD_RSREG  PORTB  'bit de registro del LCD conectar
Define   LCD_RSBIT  3      'en el puerto B.3
Define   LCD_EREG   PORTB  'bit de Enable conectar en el
Define   LCD_EBIT   2      '"puerto B.2 
PAUSE 500
LCDOUT $FE,1
;*******************************************************************************
PROCESO:
pause 10
disparo = 0          'Inicializa el valor de DISPARO
PulsOut DISPARO,5    'Manda un pùlso de disparo para empezar a medir
GoSub LEER_ECO       'Llamada a funcion para leer el ancho del eco recibido
GoTo proceso         'Vuelve e iniciar cuando se ha leido el eco
;*******************************************************************************
LEER_ECO:  
   Select Case eco                 'si hay eco no manda pulso de disparo
            Case 1                      'Si no nay eco
                  GoTo proceso          'Vuelve a iniciar el proceso 
                  Case 0                      'Si hay eco                 'Funcion de leer el eco
PulsIn ECO,1,MEDIDA          'Lee el acho del pulso de eco y lo guarda en medida
medida = MEDIDA/54                           'para convertir en cm
Lcdout $fe, 1, "DISTANCIA:", #medida, " cm" 'Muestra el valor medido en el LCD
If medida <10 Then 
lcdout $FE, $C0                                              
Lcdout "Cuidado"                            'Aviso
EndIf
GoTo proceso            'Vuelve a lanzar el proceso                              'Vuelve a lanzar el proceso
 End Select
End
Imágenes Adjuntas
Tipo de Archivo: jpg 22.jpg (34,0 KB (Kilobytes), 25 visitas)
20/10/2012 #2277

Avatar de LaElectronicaMeOdia

Nano24 dijo: Ver Mensaje
Hola amigos, por aca les traigo un codigo en picbasic, se trata de calcular distancias por ultrasonidos, es la primera vez que me compro un sensor de este tipo, el HC-SR04, tengo un PIC16F877A que uso para el caso de la medicion, bueno la cosa es que ya tengo el programa pero no entiendo, cuando el PIC inicia el programa me envia a la LCD 44 cm sin estar apuntando a algun objeto cercano, el sensor tiene un alcance de hasta 450 cm, veo que muestra un error cuando empieza a detectar algun objeto, le acerco la mano a unos 30cm de distancia y me da lecturas de 4cm, como puedo corregir el error? Le he tratado de modificar la ecuacion que dice "MEDIDA = MEDIDA / 54" MEDIDA es una variable de peso WORD. Denme una mano para ver como puedo corregir el error.
Estaba pasando por estos lugares y me llamo la atencion tu pregunta, yo nunca he manejado ese modulo de ultrasonido pero compre un "metrometro ultrasonico" y como el tuyo no mide menos de 30cm Aprox, estaba buscando la ficha tecnica de mi metrometro y no la encontre pero mira esta Tambien dice que mide de 30cm a 9mts asi que no creo que sea un error tuyo
20/10/2012 #2278


Nano24 dijo: Ver Mensaje
Hola amigos, por aca les traigo un codigo en picbasic, se trata de calcular distancias por ultrasonidos, es la primera vez que me compro un sensor de este tipo, el HC-SR04, tengo un PIC16F877A que uso para el caso de la medicion, bueno la cosa es que ya tengo el programa pero no entiendo, cuando el PIC inicia el programa me envia a la LCD 44 cm sin estar apuntando a algun objeto cercano, el sensor tiene un alcance de hasta 450 cm, veo que muestra un error cuando empieza a detectar algun objeto, le acerco la mano a unos 30cm de distancia y me da lecturas de 4cm, como puedo corregir el error? Le he tratado de modificar la ecuacion que dice "MEDIDA = MEDIDA / 54" MEDIDA es una variable de peso WORD. Denme una mano para ver como puedo corregir el error.

define OSC 4
TRISB = 0
TRISC = %00000010
DISPARO VAR PORTC.0 'PIN USADO PARA EL PULSO DE DISPARO
ECO VAR PORTC.1 'PIN USADO PARA EL ECO
MEDIDA VAR Word 'VARIABLE de 16 bits PARA ALMACENAR LA MEDIDA
Define LCD_DREG PORTB 'bit de datos del LCD empezando
Define LCD_DBIT 4 'por B.4 ,B.5, B.6 y B.7
Define LCD_RSREG PORTB 'bit de registro del LCD conectar
Define LCD_RSBIT 3 'en el puerto B.3
Define LCD_EREG PORTB 'bit de Enable conectar en el
Define LCD_EBIT 2 '"puerto B.2
PAUSE 500
LCDOUT $FE,1
;************************************************* ******************************
PROCESO:
pause 10
disparo = 0 'Inicializa el valor de DISPARO
PulsOut DISPARO,5 'Manda un pùlso de disparo para empezar a medir
GoSub LEER_ECO 'Llamada a funcion para leer el ancho del eco recibido
GoTo proceso 'Vuelve e iniciar cuando se ha leido el eco
;************************************************* ******************************
LEER_ECO:
Select Case eco 'si hay eco no manda pulso de disparo
Case 1 'Si no nay eco
GoTo proceso 'Vuelve a iniciar el proceso
Case 0 'Si hay eco 'Funcion de leer el eco
PulsIn ECO,1,MEDIDA 'Lee el acho del pulso de eco y lo guarda en medida
medida = MEDIDA/54 'para convertir en cm
Lcdout $fe, 1, "DISTANCIA:", #medida, " cm" 'Muestra el valor medido en el LCD
If medida <10 Then
lcdout $FE, $C0
Lcdout "Cuidado" 'Aviso
EndIf
GoTo proceso 'Vuelve a lanzar el proceso 'Vuelve a lanzar el proceso
End Select
End
Hola...Te sugiero que leas la documentación del modulo que estas usando...si no lo tienes esta aquí http://www.micropik.com/PDF/HCSR04.pdf y adaptes el programa a los tiempos sugeridos por el fabricante. Aunque no tengo experiencia con esos módulos me parece que la cuestión pasa por allí y no por la formula que también esta incluida en la documentación.
Saludos.

Ric.
20/10/2012 #2279

Avatar de Nano24

ricbevi dijo: Ver Mensaje
Hola...Te sugiero que leas la documentación del modulo que estas usando...si no lo tienes esta aquí http://www.micropik.com/PDF/HCSR04.pdf y adaptes el programa a los tiempos sugeridos por el fabricante. Aunque no tengo experiencia con esos módulos me parece que la cuestión pasa por allí y no por la formula que también esta incluida en la documentación.
Saludos.

Ric.
Gracias por la respuesta, voy a chequear el documento para ver que le puedo mejorar, aunque me puse a inventar con la formula y la deje MEDIDA = MEDIDA/4 de 34 la reduje a 4 y tiene mas precisión que antes.
20/10/2012 #2280


Saludos
Amigo ricbevi te agrdesco mucho tu ayuda me descargue otro microcode studio y me funciona de maravillas tu codigo ya no me bota error en esos dos comandos muchas gracias estoy estudiando tu codigo para poder entender su losgica como tu me dices gracias por corregirme y enseñarme

---------- Actualizado después de 25 minutos ----------

amigo ya logre modificarlo a tres pulsaciones con tiempos diferentes funciona genial muchas gracias amigo te agradesco mucho por tu ayuda uno por que pude cambiarme de microcode y este si funciona genial si tienes algun link de un programador que pueda hacer codigo con usb y todo eso te agradeceria me ayudaras para poder descargarlo y otro por tu apoyo incondicional por tus conocimientos a todos los que nos apoyan voy a tratar de hacer tiempos diferentes y luego lo subo gracias
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.