Autor Tema: AYUDA SRF02 Y PIC BASIC  (Leído 9361 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: AYUDA SRF02 Y PIC BASIC
« Respuesta #15 en: 11 de Febrero de 2008, 20:23:29 »
Excelente!! y si las comunicaciones I2C llevan las Resistencias  PULLUP.

Que buenoque ya te sirvio
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado SYLA0285

  • PIC10
  • *
  • Mensajes: 10
Lo prometido es deuda NAVAISIMO para todos amigos aquiva
« Respuesta #16 en: 15 de Febrero de 2008, 17:05:08 »
Bueno el siguiente código es para que no batallen mas con el sensor SRF02 y puedan medir perfectamente
utilizo 9600 baudios no hay paridad 1 bit de inicio 1 de paro 8 bits de datos, tienen que hacer una interfaz en visual
para poder ver los datos vía serial del pic pero cualquier duda me contactan:

'****************************************************************
'*  Name    : SRF02 CON COMUNICACION I2C.BAS                    *
'*  Author  : [set under view...options]                        *
'*  Notice  : Copyright (c) 2008 [set under view...options]     *
'*          : All Rights Reserved                               *
'*  Date    : 04/02/2008                                        *
'*  Version : 1.0                                               *
'*  Notes   : Este programa utiliza un SRF02 (sensor de         *
'*          : distancia ultrasónico) utiliza comunicación       *
'*          : I2C con el PIC16F877A y este pic a su vez se      *
'*            : comunica con la PC para enviar datos obtenidos  *
'****************************************************************
DEFINE OSC 4
DEFINE HSER_RCSTA 90h ' Configuración del modo de recepción del pic antes 90h
DEFINE HSER_TXSTA 24h ' Configuración del modo de transmisión del pic antes 24h
DEFINE HSER_BAUD 9600 ' Frecuencia con la que existe una correcta transferencia de datos
DEFINE HSER_SPBRG 25 ' Valor calculado según el valor del Oscilador y el rango de baudios
TRISB = %00000000 'A B C D _ _ _ _ deficinion de Salidas para el movimiento de motor de pasos
TRISC = %00000000 ' RX TX _ _ _ _ _ _ Configuración de pines receptores y transmisores del pic
CCP1CON = 0
ali VAR PORTB.3 ' Led de alimenación al sistema
RX VAR PORTC.7
TX VAR PORTC.6  ' Pines para puerto de recepción
B0 VAR byte[8]
B1 VAR byte[8]
PB VAR byte[8]
c var byte
I2CDataPIN  VAR PortC.4 '
I2CClockPIN  VAR PortC.3 '
medida VAR WORD
srfdevice VAR byte ' PARA SRF02 preprogramó los adress $E0
srfdevice = $E0
B0 = %00000000
srfregister0 VAR byte  ' es el COMMANDregister del SRF02
srfregister0 = $00
srfreadregister2 VAR byte 'registro de lectura
srfreadregister2 = $02
srfreadregister3 VAR byte 'registro de lectura
srfreadregister3 = $03
srfreadregister4 VAR byte 'registro de lectura
srfreadregister4 = $04
srfreadregister5 VAR byte 'registro de lectura
srfreadregister5 = $05
reset VAR byte 'registro que resetea el modulo SRF02
cmcommand VAR byte
cmcommand = 0  'Valor inicial para la variable de comandos
c = 0
high ali
ciclo:
  SERIN2 RX,84,100,ciclo,[BIN B0]
  If B0 = %10000000 then'SI LA CONDICION SE CUMPLE LA LECTURA SE HACE EN PULGADAS
   cmcommand = 80
  EndIF
  If B0 = %01000000 then'SI LA CONDICION SE CUMPLE LA LECTURA SE HACE EN CM.
   cmcommand = 81
  EndIf
  If B0 = %00100000 then'SI LA CONDICION SE CUMPLE LA LECTURA SE HACE EN uS
   cmcommand = 82
  EndIf
  If B0 = %00010000 then'SI LA CONDICION SE CUMPLE LA LECUTRA SE IMPRIMIRA EN M.
   cmcommand = 81
  EndIf
  If B0 = %00000000 then'SI LA CONDICION SE CUMPLE VUELVE A CICLO
    goto ciclo
  EndIf
  i2cwrite I2CDatapin, I2CClockpin, srfdevice,srfregister0, [cmcommand]' MANDA AL SENSOR $E0 REALIZAR MEDIDA
  pause 100
  i2cread I2CDatapin, I2CClockpin,srfdevice,$02,[PB]' REGISTRO 2 ULTIMA MEDIDA REALIZADA BYTE ALTO 
  pause 1000
  i2cread I2CDatapin, I2CClockpin,srfdevice,$03,[B1]' REGISTRO 3 ULTIMA MEDIDA REALIZADA BYTE BAJO
  pause 1000
  If B0 = %10000000 then'SI LA CONDICION SE CUMPLE LA LECTURA SE HACE EN PULGADAS
   HSEROUT["0",DEC2 PB,DEC2 B1]
  EndIF
  If B0 = %01000000 then'SI LA CONDICION SE CUMPLE LA LECTURA SE HACE EN CM.
   HSEROUT["0",DEC2 PB,DEC2 B1]
  EndIf
  If B0 = %00100000 then'SI LA CONDICION SE CUMPLE LA LECTURA SE HACE EN uS
   HSEROUT["0",DEC2 PB,DEC2 B1]
  EndIf
  If B0 = %00010000 then'SI LA CONDICION SE CUMPLE LA LECUTRA SE IMPRIMIRA EN M.
   HSEROUT[DEC2 PB,".",DEC2 B1]
  EndIf
  If B0 = %00000000 then'SI LA CONDICION SE CUMPLE VUELVE A CICLO
    goto ciclo
  EndIf 
         
GOTO ciclo

"Disfrutenlo" Saludos