Autor Tema: Enviar valor de variable entre dos pics  (Leído 3173 veces)

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

Desconectado chronos682

  • PIC10
  • *
  • Mensajes: 6
Enviar valor de variable entre dos pics
« en: 20 de Septiembre de 2015, 00:58:23 »
Buen día a todos, quisiera saber si hay alguna forma de que yo pueda enviar el valor de 2 variables entre dos pics 16f84a, a traves de CCS. Las dos variables son 2 números enteros que representan la cantidad de segundos que debe durar cierta acción, pero quiero que la configuración pase de un pic al otro en un solo sentido. No se si se pueda hacer con esos pics. Quedo atento a sus respuestas. De antemano muchas gracias.
« Última modificación: 20 de Septiembre de 2015, 01:02:24 por chronos682 »

Desconectado chronos682

  • PIC10
  • *
  • Mensajes: 6
Re: Enviar valor de variable entre dos pics
« Respuesta #1 en: 20 de Septiembre de 2015, 00:59:40 »
Buen día a todos, quisiera saber si hay alguna forma de que yo pueda enviar el valor de 2 variables entre dos pics 16f84a, a traves de CCS. Las dos variables son 2 números enteros que representan la cantidad de segundos que debe durar cierta acción, pero quiero que la configuración pase de un pic al otro en un solo sentido. No se si se pueda hacer con esos pics. Quedo atento a sus respuestas. De antemano muchas gracias.

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re: Enviar valor de variable entre dos pics
« Respuesta #2 en: 20 de Septiembre de 2015, 01:12:43 »
Si es posible. Puedes poner la parte de tu código para de ahí aconsejarte de una manera más precisa de como hacerlo?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Enviar valor de variable entre dos pics
« Respuesta #3 en: 20 de Septiembre de 2015, 01:18:33 »
Deberias poder hacerlo, creo que CCS crea un SPI o una UART por software cuando los pines que uno señala no poseen un modulo para eso.

Lo feo de los 16F84 es que no tienen NADA. fuera cualquier otro podrias haber usado una UART, un SPI, I2C , lo que tuvieras a mano.

Lo que si no te puedo ayudar es en el codigo, y tampoco se lo que va a tardar en enviar.

Desconectado chronos682

  • PIC10
  • *
  • Mensajes: 6
Re: Enviar valor de variable entre dos pics
« Respuesta #4 en: 20 de Septiembre de 2015, 10:09:00 »
Pues principalmente lo que necesito es una orientación sobre cuál protocolo es el mejor y más fácil de implementar para poder empezar mi código ya que he buscado en varias partes y en unas aconsejan i2c y entras comunicacion serial rs232 y en la mayoría de los casos los ejemplos son en assembler (que no manejo) y los que están en C son para otros pics. Agradezco cualquier ayuda.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Enviar valor de variable entre dos pics
« Respuesta #5 en: 20 de Septiembre de 2015, 10:51:06 »
Pues principalmente lo que necesito es una orientación sobre cuál protocolo es el mejor y más fácil de implementar para poder empezar mi código ya que he buscado en varias partes y en unas aconsejan i2c y entras comunicacion serial rs232 y en la mayoría de los casos los ejemplos son en assembler (que no manejo) y los que están en C son para otros pics. Agradezco cualquier ayuda.

Como te decia, lamentablmente tenes esos micros, tuvieras cualquier otro, incluso su "reemplazo" mas viejo, el PIC16F88 tendrias un modulo por hardware para comunicarte, hoy en dia hay muchos mejores a menos precio y mismos pines que ambos PIC nombrados. Si tenes las posibilidad de cambiar el PIC por que no lo has comprado hacelo.
Creo que nadie programaria un PIC16F84 en C por que posee muy poca memoria, entonces no podrias hacer MUCHO a mi parecer con el.

Volviendo al tema de que si ya tenes los PIC16F84 entonces, creo que el "mejor" protocolo seria el de un SPI. Ya que no es muy complejo, tendrias 2 salidas, en una el dato y el otro el CLK. Y seria algo asi enviarlo.

for(x=0;x<8;x++)
{
   if (dato & (1 << x)) output_high(PIN_DATO);
   else output_low(PIN_DATO);

   output_high(PIN_CLK);
   output_low(PIN_CLK);
}

Aunque te vuelvo a repetir, estoy con que CCS provee a traves del #USE SPI, algo asi como MASTER, y le agregas el SLAVE para tu receptor. Luego creo que no se pueden usar las funciones spi_write() y spi_read(), sino que se debe usar spi_xfer() al ser por software

#use spi(DI=PIN_B1, DO=PIN_B0, CLK=PIN_B2, ENABLE=PIN_B4,BITS=16)

Una cosa que tenes que tener en cuenta, es que esto es muy lento, ademas puede llegar a detener el programa de cada PIC y no se como se comportara cuando le llegue un dato y este haciendo otra cosa. Mientras que si hubieras tenido un modulo podrias haberlo realizado con interrupciones

Por que no una UART o un I2C ? Por que el protocolo es muy complejo. UART al ser asnicrono te permite utilizar una sola salida y nada mas para una comunicacion en un sentido. Pero al no llevar señal de clock requiere mas trabajo mandar un 0, o un 1 y ademas por cada byte que envias, son 11 bits que se envian.

I2C es aun peor. tiene el formato del SPI, pero tiene mas cosas ya que soporta muchos dispositivos, entonces tenes una direccion, en señal de stop, start, ACK, NACK, etc. En fin. SPI mejor. Si usas CCS proba lo que dije, cualquier ejemplo de SPI te serviria, cuando CCS se da cuenta que no existe un modulo lo hace por software.
« Última modificación: 20 de Septiembre de 2015, 11:00:07 por KILLERJC »

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Enviar valor de variable entre dos pics
« Respuesta #6 en: 20 de Septiembre de 2015, 13:10:14 »
Con el ccs puedes utilizar por ejemplo comunicacion por RS232, por software asi:

Citar
#include <16f84.h>

#fuses XT, nowdt
#use delay(clock= 4000000)

#use RS232(baud=9600,xmit=pin_B0,rcv=pin_B1)

void main()
{
   int dato1, dato2;
   dato1= 12;
   dato2= 20;
   printf("%u %u",dato1, dato2);
   
   while(true);
}

No obstante ten en cuenta que al ser un microcontrolador con poca memoria Flash y RAM no podras hacer programas muy grandes, lo mejor seria migrar a un micro como te indicaron arriba con mas prestaciones.  :mrgreen:

Saludos

Desconectado chronos682

  • PIC10
  • *
  • Mensajes: 6
Re: Enviar valor de variable entre dos pics
« Respuesta #7 en: 20 de Septiembre de 2015, 16:04:45 »
Muchas gracias a los dos por sus respuestas. Cuál microprocesador me recomendarían para cambiar los obsoletos 16f84a, tengo un programador k150 que no reconoce todos los pics, me pasó que compré un 16f887 y cuando lo fui a quemar no lo soportaba. Hay algún pic que tenga más funcionalidad y la misma cantidad de pines que el 16f84a para que no me ocupe más espacio. Muchísimas gracias por sus respuestas. Mientras tanto voy a probar con lo que me recomiendan a ver si soy capaz de hacerlo funcionar.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Enviar valor de variable entre dos pics
« Respuesta #8 en: 20 de Septiembre de 2015, 16:36:14 »
Tu mayor problema es tu programador. Es dificil darte un un PIC que ande, por que no se cuales soporta.

Reemplazos hay muchos

Ejemplo el PIC16F84A listado en microchip esta en 3.11 dolares
1.75K flash , 68b RAM, 68b EEPROM, max frec 20Mhz

http://www.microchip.com/ParamChartSearch/Chart.aspx?branchID=1012#

Mirando un poco los unicos que tienen 1 SPI / 1 UART / 1 I2C , son de 5V

Son:

PIC16F88 - 2.20 dolares - 7K memoria flash , 368 bytes RAM , 256 bytes EEPROM , oscilador interno de 8Mhz, maxima frec 20Mhz.
PIC16F1826 - 0.97 dolares - 3.5K memoria flash , 256 bytes RAM , 256 bytes EEPROM , oscilador interno 32Mhz, maxima frecuencia 32Mhz

El mas barato tiene incluso el doble de memoria y hasta oscilador interno, asi que te vas a olvidar de ponerle un cristal al PIC.

Nuevamente, lo que elijas va a depender solamente de tu programador.
Y tambien estaria bueno que eligieras el PIC por lo que tenes que hacer. Si necesitas PWM por ahi te conviene otro.
« Última modificación: 20 de Septiembre de 2015, 16:38:46 por KILLERJC »

Desconectado chronos682

  • PIC10
  • *
  • Mensajes: 6
Re: Enviar valor de variable entre dos pics
« Respuesta #9 en: 20 de Septiembre de 2015, 20:03:32 »
Gracias por tu respuesta. Creo que terminaré cambiando de pic. Aunque para este proyecto trataré de terminarlo en el que tengo porque ya está practicamente todo hecho. La idea de transmitir las variables de un pic a otro era para mostrar la variable en un display lcd de 16 x 2 ya que necesito muchos pines para esto y ya no dispongo sino de 5 libres en el pic, entonces la idea era usar otro pic 16f84a que tengo sin quemar al que le conectare el display y que la información que reciba desde el otro pic la muestre en pantalla. Es lo único que me falta porque ya lo que es el objetivo principal del programa que es controlar una compuerta a través de un servomotor ya lo tengo listo. No se si exista algun otro display que ocupe menos pines del pic y que sea fácil de manejar. Una vez más gracias por responder. Intentaré con todo lo que ustedes me han escrito y si me atasco en algún punto volveré por ayuda  ;-)

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Enviar valor de variable entre dos pics
« Respuesta #10 en: 20 de Septiembre de 2015, 21:05:09 »
Segun esto tu programador soporta varios pics que te podrian servir entre ellos el pic16f876A que bien podria servirte y el pic18F252 tambien  :mrgreen:

Por otro lado, hay tarjetas que covierten de RS232 (TTL) a LCD, como por ejemplo esta.

Saludos



 

anything