TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: lycans2005 en 20 de Abril de 2010, 02:24:26

Título: Ayuda SRF05 y 16f628a
Publicado por: lycans2005 en 20 de Abril de 2010, 02:24:26
Ayuda, no he podido hacer andar el sensor,
quiero medir distancia y mostrar en el lcd....
el codigo alparecer funciona pero no muestra la medicion

'DEFINICIÓN DE REGISTROS PARA EL LCD
DEFINE LCD_DREG PORTB  'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS
DEFINE LCD_DBIT 0      'DESDE EL BIT B.0 AL BIT B.3
DEFINE LCD_RSREG PORTB 'SELECCIÓN DEL PUERTO DEL REGISTRO
DEFINE LCD_RSBIT 4     'EN EL BIT B.4
DEFINE LCD_EREG PORTB  'UTILIZAR EL ENABLE EN EL PUERTO B
DEFINE LCD_EBIT 5      'EN EL BIT B.5

define OSC 4
DISPARO VAR PORTA.2          'PIN USADO PARA EL PULSO DE DISPARO
ECO     VAR PORTA.3          'PIN USADO PARA EL ECO
MEDIDA  VAR Word             'VARIABLE de 16 bits PARA ALMACENAR LA MEDIDA
TRISA = %00001000

proceso:
        pause 100            ' Pausa inicial para estabilizar el circuito (50ms)
        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:                               'Funcion de leer el 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
               PulsIn ECO,2,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
       End Select
   End

(http://s2.subirimagenes.com/otros/4385988cl.jpg)
Título: Re: Ayuda SRF05 y 16f628a
Publicado por: lycans2005 en 25 de Abril de 2010, 13:20:41
Bueno como nadie dijo nada...y despues de tanto trabajo por fin me dio
ahi va:

Esta vez lo hice con pic basic proton ya que me permite manejar numeros flotantes.
Esta en el modo 1, si alguien sabe como lograr trabjar en modo dor...por favor publiquen.

Tengo una duda, alquien me podria dcir como hago  para que los numero no parpaden tanto
es super canson ver esos numero cambiando y que se vean como apagandosen



SRF05 modo compatibilidad con SR04
'Carlos Andres Vargas C.
'lycans2005@hotmail.com
'Cualquier tipo de mejora  por favor enviarmela.

Device 16F628A              'PIC Utilizado
Xtal = 4                         'Oscilador de 4MHZ
' DEFINICIÓN DE REGISTROS PARA EL LCD
Declare LCD_Interface 4
Declare LCD_Lines 2
Declare LCD_DTPin PORTB.0   'UTILIZAR 4 BITS DEL PUERTO B PARA TX DE DATOS DESDE EL BIT B.0 AL BIT B.3
Declare LCD_ENPin PORTB.5   'UTILIZAR EL ENABLE EN EL PUERTO B, EN EL BIT B.5
Declare LCD_RSPin PORTB.4   'SELECCIÓN DEL PUERTO DEL REGISTRO,EN EL BIT B.4
'VARIABLES                
Dim  DISPARO   As PORTA.3    'PIN USADO PARA EL PULSO DE DISPARO
Dim  ECO       As PORTA.4       'PIN USADO PARA EL ECO
Dim  MEDIDA    As Word         'Variable para guardar la medida
Dim  dist_pulg As Word
Dim  dist_cm   As Float
'Factor de conversion
Dim cm   As  6
Dim pulg As  15
Low DISPARO                                               'set trigger pin to logic 0
main:
     GoSub proceso                                        'get sonar reading                                                            
     Print $FE, 1, "Dist:" , Dec2 dist_cm," cm"   'display the distance in cm con 2 decimales
GoTo main
End

proceso:
         DISPARO=0
         PulsOut DISPARO,5               'Se genera un pulso de 10uS (5x2uS)
         PulsIn ECO,1,MEDIDA           'Se mide la duracion del ECO
         'dist_pulg = (medida/pulg)     'Converte medida en pulgadas
         dist_cm = (MEDIDA/cm)        'Converte medida en cm
        
         If dist_cm <10 Then              'distancia menor a 10 cm arroja una advertencia                  
         Print $FE, $C0, "CUIDADO!"
         EndIf
          
         DelayMS 100                         'wait for 10us before returning to main
         Return


proceso2:
         PulsOut DISPARO,5               '10us init pulse
         Output DISPARO                   'dummy command (delay)
         RCIn  ECO,1,MEDIDA            'measure echo time
         'dist_pulg = (medida/pulg)     'Converte medida en pulgadas
         dist_cm = (MEDIDA/cm)        'Converte medida en cm  
         DelayMS 100                  'wait for 10us before returning to main
         Return
Título: Re: Ayuda SRF05 y 16f628a
Publicado por: Chrisbaf en 25 de Abril de 2010, 22:27:08
una pregunta cuando va a proseso 2
Título: Re: Ayuda SRF05 y 16f628a
Publicado por: lycans2005 en 26 de Abril de 2010, 14:47:50
una pregunta cuando va a proseso 2

jjeje  amigo creo que nunca, pero si se lo quito no me funciona....realmente no se que esta pasando
lo hice con base en muchos ejemplos que encontre.

prueba y me avisa
Título: Re: Ayuda SRF05 y 16f628a
Publicado por: augustocortes en 13 de Enero de 2013, 18:50:41
gracias lycans2005 ha funcionado es mi primer proyecto interesante ,te da muchos animos ,haber si consigo  hacer que funcione para aparcar mi coche , que tendrian que ser dos srf04 y display de 7 segmentos grandes,si alquien puede ayudar para mejorar el proyecto. Tampoco he conseguido quitarle el dichoso parpadeo pero he conseguido que no se muevan tanto los numeros decimales poniendo solo 1 Dec1 dist_cm.Hay os pongo foto montaje en protoboard.http://imageshack.us/photo/my-images/9/sam0380vg.jpg