# Recoger en pic varios datos desde rs232



## jgarcias2 (Feb 8, 2010)

Hola a todos, escribia para ver si me podian echar un cable. Como decia necesito recoger varios datos provinientes del puerto serie del pc, para mover el motor pap, o sea necesito guardar datos como velocidad, nº de pasos, direccion, etc...
Estoy programando en asm, con un pic 16f84 y la verdad que me estoy volviendo loco y no lo logro.

Os agradeceria una mano amiga.

Gracias. Saludos.


----------



## Meta (Feb 9, 2010)

Si se te queda corto el 16F84A usas el 16F88 que tiene más memoria.

Guarda los datos en la memoria RAM. Cuando ya tenga los datos que quieras, lo pasas a la memoria EEPROM interna del PIC o externa como el 24LC256 bajo protocolo I2C.

Luego con www.ic-prog.com o www.winpic800.com lo puedes leer. Lo que buscas se parece un Data Logger.

Saludo.


----------



## tecnogirl (Feb 9, 2010)

jagarcias2: Pero concretamente, cuál es el problema ?.

A ver si adivino:
- Sentido de giro: con 2 bits tienes:

00= Stop
01= turn to right
10= turn to left
11= not change

- No de pasos: 2, 4, 8,..., 32 (?). Con 6 bits tienes.

- Velocidad: 100, ..., 1023 rpm, con 8 bits tienes.

total 16 bits o dos posiciones en la memoria del PIC. 

Salu2.


----------



## jgarcias2 (Feb 9, 2010)

Ante todo gracias por ayudarme.

Lo de velocidad de giro y numero de pasos ya lo he solucionado con la respuesta anterior, pero ...

Como hago para recibir 16 bits en el 16f84, teneis alguna rutina ??? Es utilizando el pcl ???

Gracias. Saludos.


----------



## tecnogirl (Feb 9, 2010)

Para los 16 bits... 

a. Algunos PICs tienen puerto serial, lo cual facilitaria la comunicacion con el PC vias serial.

b. El 16F84A no lo tiene pero... podrias emplear dos pines de un puerto del PIC para hacerte el puerto serial. Solo necesitarias algunos componentes para adaptar el nivel de tension del RS232 a TTL para el PIC y la rutina.

c. Si te parece complicado, podrias probar dos pines del puerto paralelo para habilitar la comunicacion. En este caso seria sincronica, es decir, debes proporcionar una linea de datos y otra de reloj para que el PIC decodifique el tren de pulsos (los 16 bits). Esta me gusta.

Salu2.


----------



## Meta (Feb 9, 2010)

Utiliza dos bytes de 8 bits cada uno en la RAM. ¿Lo guardas en la RAM o otro sitio _(EEPROM)_?

Llama el primero así:

High = Byte alto.
Low = Byte bajo.

High - Low
01x0 - 07x0 ; en hexadecimal.

Si lo quieres en binario:
High - Low
b'00000001' - b'00000111'

Espero que lo entiendas.


----------



## giovamolina (Feb 9, 2010)

buenas noches estoy tratando de comunicar dos pics, como transmisor tengo el pic 12f629 y como receptor tengo un pic 16f84a, el programa he tratado de hacerlo en el compilador ccs, pero hasta ahora solo he logrado que transmitir a traveés del pic12f629, en la recepcion de los bits he tenido bastante problemas, si alguién pudiera guiarme o decirme que debo hacer para lograr reivir el dato me sería de mucha ayuda, gracias...


----------



## jgarcias2 (Feb 10, 2010)

Antetodo muchas gracias tecnogirl y meta.  

Pero os cuento, que seguro que me he explicado mal. Yo utilizo el 16f84, he adaptado dos pines del mismo para el puerto serie, y recibo bien los datos del pc (con el max232).
El problema viene cuando debo de almacenar los datos en la ram del micro y quiero diferenciarlos. Lo que quiero hacer es: 

enviar dos letras, una letra que se guarde en variable1 y la otra en variable2.

Meta: me podrias enviar una rutina para almacenar los datos que provienen del pc en High y Low???, 

No utilizo interrupciones en el 16f84, en bucle principal espero a que comienze la comunicacion y entonces recojo el dato en una variable.

Gracias. Saludos.


----------



## tecnogirl (Feb 10, 2010)

Primero, debo corregir mi post #3:

- No de pasos: 2, 4, 8,..., 32 (?). Con CINCO bits tienes.
- Velocidad: 100, ..., 1023 rpm, con NUEVE bits tienes.
total 16 bits o dos posiciones en la memoria del PIC.

jgarcias2: Para tu ultima consulta. Si usas mpasm, el ensamblador de Microchip
empleas la directiva CBLOCK. te adjunto la pagina del manual. Si usas otro ensamblador... busca la directiva equivalente.

Pero tengo una duda... dices: " y recibo bien los datos del pc (con el max232).
El problema viene cuando debo de almacenar los datos en la ram del micro y quiero diferenciarlos..."

Cómo sabes que recibes los datos de la PC en el PIC ?.
Si sabes que los recibiste es porque puedes acceder a ellos y entonces ?

Salu2.


----------



## jgarcias2 (Feb 10, 2010)

Gracias por contestar tecnogirl, 

pero el problema es guardar en dos variables distintas, o sea, el primer dato recibido se guarda en variable grupo1, la siguiente en grupo2, el siguiente dato recibido en grupo1, el siguiente dato recibido en grupo2, etc....

Los datos si que los recibo bien del pc, por que los envio de vuelta al pc y se muestran bien.

Postdata: agradeceria una rutina de interrupcion para recibir datos del pc por interrupcion externa, para el 16f84 (asm).

Gracias.


----------



## tecnogirl (Feb 10, 2010)

O sea, las comunicaciones estan bien... pero solo puedes manejar un valor por vez y entonces, el segundo valor enviado lo sobreescribe en el primero ?.

Si es eso, solo modifica tu programa de comunicaciones para poner el segundo valor en otra direccion de la ram!.. Salu2.


----------



## jgarcias2 (Feb 10, 2010)

Ok, eso estoy tratando de hacer.

Por cierto, tienes alguna rutina para el 16f84 para recibir datos mediante interrupcion en el rb0.???

Gracias.


----------



## tecnogirl (Mar 1, 2010)

giovamolina:
- Una aclaracion, el PIC es 12f629 o 16F629 ?
- Cómo sabes que ya puedes transmitir desde el 12f629 sin problema ?
- Entonces, te falla las rutina de comunicacion en el 'F84A ?

Usa el Hyperterminal de Windows para "alinear" el hardware y el software para las rutinas de comunicaciones seriales en el 'F84A. Cuando logres comunicar la PC con ese PIC ya no deberias tener problemas para comunicar los dos PICs tienes.

Saludos.


----------

