Guardar datos registro PIC

Saludo:

Tengo unos 10 bits que deseo guardar en un registro del PIC16f87a, estos bit puedo enviarlos uno por uno, lo que no se es como ir guardando estos bits en un registro para luego usar ese registro en un contador. esos bit serian un numero paso para que se repita x tarea.

Supongo que debo crear algun protocolo, es decir indicarle al pic que voy a empezar a enviar los datos, luego enviar el primer dato, luego el pic me dice que el primer dato ya llego, este me sirve para enviar el segundo dato y asi hasta completar los 10 bit.

Usaria un pin para envio de datos ( los 10bits), otro para indicar que ya llego el dato al pic, y uno para empezar el envio.

¿ O necesito mas pines?
¿Como voy guardando los bits en un registro?

Gracias.
 
Podrías usar el puerto serie USART (o AUSART, o UART, o EUSART depende del pic), con el que vas a poder recibir paquetes de 8 o 9 bits. Para lograr los 10 bits transmitís dos paquetes. Una vez que se reciben los 8 0 9 bits el PIC los pone automáticamente en el registro RCREG y a partir de ahí llevás el dato donde quieras.
Se usa una línea para recibir datos y otra para enviar, y nada más. Para enviar escribís al registro TXREG y se inicia la transmisión.
Bueno, leé sobre ese módulo, no creo que tengas problemas en encontrar información (en el sitio de microchip, en el foro, también es fácil encontrar librerías/código fuente para usarlo).
 
Gracias por su repuesta Ardogan.

El inconvniente es que todos los bits no estan listos al mismo tiempo para enviarlos al PIC de una sola vez , entonces cada vez que esten listos van llegando al PIC y este los va almacenado en ese unico registro. No se si me explique bien
[/img]
 
hola amgigo Gustavo....seria interesante que nos cuentes que es lo que quieres hacer...osea cual es la aplicaciones en especifico para proponer algun protocolo que ya exita...porque eso de hacer un nuevo protocolo pues lo veo no muy practico nose...por ejemplo si necesitas enviarle 10bits podriamos entenderlos como 10 comandos...y los envias por USART en modo asincrono....asi solo te intereseria digamos el bit de menor peson en cada dato esto por que los Micros ya tienen integrado este modulo que nos simplifica mucha en la programacion...pero si quieres....claro que si necesariamente tienen que ser bits podrias utilizar interrupciones...ahi le colocarias el reloj para saber de donde a donde es un bit...lees un pin que sera el bit y por el mismo lo envias en el peor de los casos (pero sencillo) utilizarias 4 bits.....sigo pensando que no es practico
 
Hola:

Lo que se pretende hacer es mover unos motores paso a paso, me explico,

(Practicamente lo que pretendo hacer es una mesa de coordenadas )

Tengo un modulo de adquision y generacion de datos por medio de PC que es un poco lento, y con este pretendia mover unos motores PaP. el problema es que al encargale el movimiento del motor a este hay veces se como pasos de PaP.

Bueno, entoces decidi encomendar la labor del movimento de los motores a un PIC que lo hace mucho mas rapido y usar este modulo para enviar los datos al PIC.

Las coordenadas del motor las tengo en decimal y hago una conversion en el PC para enviarlas por el modulo hacia el PIC de manera decimal serian mas de 10bits. exactamente 15 bits.

Entoces en esos bits esta el numero de pasos que tiene que dar el motor.

Deberia hacer llegar esos bits al pic, almacenarlos en algun registro, y luego utilizarlos para mover el motor siguiendo la secuencia, la cual seria

A B C D
sec1 1 1 0 0
sec2 0 1 1 0
sec3 0 0 1 1
sec4 1 0 0 1

Por ejemplo, tengo en el PC el numero 8 lo convierto en binario 1000, lo envio al pic, este lo guarda en un registro que posterimente lo usaria como contador, para mover la secuencia del motor, entonces deberia hacer la tabla anterior 2 veces por que cargue el numero 8. si cargara el numero 2 entonces haria hasta sec2, si cargara el 10 entoces haria

sec1
sec2
sec3
sec4

sec1
sec2
sec3
sec4

sec1
sec2
 
Gustavo84 dijo:
El inconvniente es que todos los bits no estan listos al mismo tiempo para enviarlos al PIC de una sola vez , entonces cada vez que esten listos van llegando al PIC y este los va almacenado en ese unico registro. No se si me explique bien
Mmmm no entiendo bien ésto.
Gustavo84 dijo:
Las coordenadas del motor las tengo en decimal y hago una conversion en el PC para enviarlas por el modulo hacia el PIC de manera decimal serian mas de 10bits. exactamente 15 bits.
Otra buena razón para usar el USART, si es que tenés un puerto serie en la PC.
Una vez que hacés la conversión en la PC enviás dos paquetes de 8 bits por el puerto serie hacia el PIC, el PIC los recibe y avanza los pasos que le diga la PC.
Para hacerlo simple siempre enviarías 16 bits, no importa si son 2, 8, 120 o 65535 pasos lo que le ordenás avanzar al PIC.
Un pseudocódigo muy simple (y muy discutible y optimizable, solo para dar una idea de como podría ser) para assembler en el PIC sería:
Código:
EsperarRecepcionContador:
  EnviarA_PC Listo_Para_Recibir  //para que la PC sepa que el PIC 
    //no está haciendo nada, solo esperando recibir el contador
  EsperarInicioRecepción
  recibir USART
  mover RCREG a Contador_Alto
  recibir USART
  mover RCREG a Contador_Bajo

Salto1:
  si Contador_Bajo=0
    irA Salto2:
  sino
    decrementar Contador_Bajo
    Avanzar 1 paso
  fin si
  irA Salto1
Salto2:
  si Contador_Alto=0
    ir a EsperarRecepcionContador
  sino
    decrementar Contador_Alto
    Contador_Bajo=255
    Avanzar 1 paso
    irA Salto1
  fin si
En que lenguaje o como programás la PC?. Tenés que tomar la precaución de que los parámetros de transmisión/recepción (velocidad, bit de paridad, bits de inicio y de parada) sean iguales en la PC que en el PIC.
Otras cosas que se podrían implementar sin mucha dificultad sería la velocidad de avance (tiempo entre paso y paso) y que trabaje con signo (para recorrer la secuencia en un sentido u otro)
 
Atrás
Arriba