Autor Tema: comando shiftout en pbasic de basic stamp  (Leído 1272 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado delmaks

  • PIC10
  • *
  • Mensajes: 11
comando shiftout en pbasic de basic stamp
« en: 09 de Junio de 2013, 17:59:17 »
hola amigos, tengo un sensor acelerometro MMA7455 de PARALLAX, el problema que tengo es que pense que era mas facil poder controlarlo, pretendo usar los datos enviados por el sensor para controlar dos motores, esto consiste en una plataforma en movimiento constante en el eje X y el eje Y. de la pagina de parallax baje un codigo para realizar las prubas del sensor, pero el problema es que me encontre con una funcion la cual no domino muy bien (SHIFTOUT) esta me sirve para enviar datos en seria de forma sincronica, antes ya he trabajado con esta funcion, pero no logro bien entender como trabaja en este codigo y me gustaria tambien poder modificarlo para usarlo en mi proyecto. bueno amigos aqui les dejo el codigo, para que alguien me pueda guiar, gracias. "el codigo de la pagina lo he modificado para trabajar en una primera instancia con la informacion que me entrega el sensor del eje X". el objetivo es detectar el movimento en inclinacion del eje X y corregir con un motor en el sentido contrario al movimiento que se esta generando.

este codigo solo lee el dato entregado por el eje X cuando se encuentra en movimiento, lo otro que no he podido lograr hacer es que cuando tengo el sensor en una superficie plana y nivelada este oscila entre 0 y 2 no logro dejarlo para que solo me entregue un cero y cuando lo mueva este comience a entregar un numero positivo o negativo sengun dependa el para el lado que lo incline.

' {$STAMP BS2}
' {$PBASIC 2.5}

X CON 25

ClkPin  PIN 0
DataPin PIN 1
CsPin   PIN 2

cordenadaX VAR Word

contador       VAR Word
datobuscado    VAR Byte
datorecivido   VAR Byte  ' dato recibido del sensor


'-----------------------------------
main:

contador = $16: datobuscado = %01100101:GOSUB datos_salida   " porque a la variable datobuscado le asignan este valor y no otro"

contador = $10: datobuscado = X& $ff:GOSUB datos_salida  " y luego a datobuscado se le asigna otro valor , esto es lo que no logro entender. gracias"

contador = $11: datobuscado = X >>8:GOSUB datos_salida

DEBUG CLS
GOSUB texto

'------------------------------------
lectura:

contador = $06:GOSUB datos_entrada
cordenadaX = datorecivido|($FF00*datorecivido.BIT7)


    DEBUG CRSRXY,48,3, SDEC cordenadaX, "  "
    DEBUG CRSRXY,30,6, ? cordenadaX

GOTO lectura



datos_salida:
DEBUG CLS
LOW CsPin
SHIFTOUT DataPin, ClkPin, MSBFIRST, [(contador|%1000000)<< 1]  "esta linea del codigo no la logro entender por completo , favor explicar que funcion cumple"
DEBUG CRSRXY,30,9, ? contador
SHIFTOUT DataPin, CLKPin, MSBFIRST, [datobuscado]
DEBUG CRSRXY,30,10, ? datobuscado
HIGH CsPin
RETURN

datos_entrada:

LOW CsPin
SHIFTOUT DataPin, ClkPin, MSBFIRST, [contador<<1] " al igual que esta"
SHIFTIN DataPin, ClkPin, MSBPRE, [datorecivido]
HIGH CsPin
RETURN

texto:

DEBUG CRSRXY, 30,3, "Coordenada X : "

RETURN