Autor Tema: REPLICAR PUERTOS  (Leído 2828 veces)

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

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
REPLICAR PUERTOS
« en: 04 de Febrero de 2007, 06:56:17 »
Hola de nuevo  :-/ :-/ :-/ :-/

Alguien tiene alguna idea de como puedo "replicar" la señal de TX y RX...

Es decir nosotros tenemos conectado el PC con el microcontrolador a través del RS232, hasta aqui es lo típico...pero si ahora queremos "duplicar" o sacar TODO(bit de inicio, datos, bit de parada, paridad...) lo que nos llega del TX y RX a otras patillas del PIC para enviar lo mismo a un módulo de RF, como sería el código o alguna idea de como implementarlo porque estoy muy perdido, ya que cuando hacemos getc o putc o cosas de esas sólo pillamos los datos, no cojemos ni el bit de inicio, parada, etc...

Gracias de nuevo chavales.

P.D: Les adjunto un pequeño esquema para que se entienda mejor.
« Última modificación: 04 de Febrero de 2007, 07:00:17 por c4_esp_VR »

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: REPLICAR PUERTOS
« Respuesta #1 en: 04 de Febrero de 2007, 17:53:26 »
Creo que tengo una solución al menos sobre papel ;D;D;D

#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)


#USE RS232(BAUD=19200, XMIT=PIN_C6, RCV=PIN_C7)

void main(void) {

      char c;

      while(TRUE)
      {
         if (kbhit())          //si el endpoint de salida contiene datos del host
            {
               c = getc();
               putc(c);
            }
         PIN_A0<=PIN_C6;
         PIN_A1<=PIN_C7;
      }
   }

Me da dos Warnings (averiguar las lineas  :D :D :D :D) Pone Warning 207 Code has no effect, que significa eso, el compilador se lo traga y no da problemas.

La solución viene de programar en VHDL para las FPGA´s donde existen señales y se asignan entre ellas de esta manera (<=), que pensais sobre esta solución, funcionará... a lo mejor se lo traga porque piensa que estoy comparando entre los dos pines...

Porque hay que pensar que no queremos una variable sino "duplicar" una señal, no se si esto es posible en los ucontroladores, creo que no pero es una buena pregunta para los más entendidos.
« Última modificación: 04 de Febrero de 2007, 18:33:15 por c4_esp_VR »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: REPLICAR PUERTOS
« Respuesta #2 en: 04 de Febrero de 2007, 18:35:46 »
¿y porqué no lo hacen por hardware? sería mucho más simple

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: REPLICAR PUERTOS
« Respuesta #3 en: 04 de Febrero de 2007, 18:37:49 »

         PIN_A0<=PIN_C6;
         PIN_A1<=PIN_C7;
     

Hola, esos warning (si no me equivoco), viene por esas dos instrucciones, tal como las tienes no estas haciendo una asignacion, sino una comparacion menor o igual, por eso al estar dentro de un if{}, el compilador te avisa de que no producen ningun "efecto". Si quieres hacer una asignación tienes que usar el = que es como se hace en C. En las comparaciones se usan >= (mayor o igual), <= (menor o igual), == (igual), != (distinto).

Saludos.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: REPLICAR PUERTOS
« Respuesta #4 en: 04 de Febrero de 2007, 18:41:30 »
¿¿¿¿¿Como se hace por HW?????, no conozco de ningún integrado que pasa una cadena de bytes a RS232...

Se supone que la UART del micro puede simular una comunicación serie RS232 por SW...donde se encuentra eso, como lo hace, que librerias usa...

Me cago en to, ahora me doy cuenta de la potencia de las FPGA´s  :mrgreen: :mrgreen: :mrgreen:
« Última modificación: 04 de Febrero de 2007, 19:42:07 por c4_esp_VR »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: REPLICAR PUERTOS
« Respuesta #5 en: 04 de Febrero de 2007, 22:20:34 »
Si usas niveles TTL, podrías usar un simple diodo colgado de la línea TX y la RX, un diodo por cada pin.

Esto te dará 4.3V de salida (si usas un diodo de silicio) o 4.8V si usas un diodo de germanio.

En ambos casos son niveles perfectamente entendibles por un hardware compatible TTL.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: REPLICAR PUERTOS
« Respuesta #6 en: 05 de Febrero de 2007, 04:51:29 »
Nosotros cuando ponemos en el PIC #use rs232(opciones), nuestro integrado lo que hace es que cuando le llegue unos pulsos por la patilla que recibe sabe interpretar gracias a la sincronización entre el PC y nuestro PIC (para ello ponemos en los dos sitios el baud rate igual), donde está la cabezera y el bit de parada, si ponemos un diodo simplemente, el integrado que lo recibe no sabe que hacer con eso pues ni está sincronizado ni sabe que protocolo está usando...

No sé si te refieres a eso...pero creo que he vuelto a encontrar la solución buscando en el manual de CCS ya que lo que queremos hacer no es más que una conexión de varios dispositivos por protocolo rs232.


#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)


#USE RS232(BAUD=19200, XMIT=PIN_C6, RCV=PIN_C7, stream=PC)

#USE RS232(BAUD=19200, XMIT=PIN_A0, RCV=PIN_A1, stream=RF)

void main(void) {

      char c;

      while(TRUE)
      {
         if (kbhit())          //si el endpoint de salida contiene datos del host
            {
               c = getc(PC); //Cogemos los datos que nos da el PC
               putc(c,RF); //y lo sacamos por la patilla A0 con protocolo RS232
            }
      }
   }

¿¿¿Realmente esto puede funcionar...???
« Última modificación: 05 de Febrero de 2007, 05:24:27 por c4_esp_VR »

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: REPLICAR PUERTOS
« Respuesta #7 en: 05 de Febrero de 2007, 19:02:39 »
Bueno ya está, solucionado  :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

Como siempre es una chorrada pero hay que hecharle horas, espero que a todo el mundo le sirva.

#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)


#USE RS232(BAUD=19200, XMIT=PIN_C6, RCV=PIN_C7, stream=PC)

#USE RS232(BAUD=19200, XMIT=PIN_A0, RCV=PIN_A1, stream=RF)

void main(void) {

      char c,d;

      while(TRUE)
      {
         if (kbhit(PC))          //si el endpoint de salida contiene datos del host
            {
               c = getc(PC); //Cogemos los datos que nos da el PC
               putc(c,RF); //y lo sacamos por la patilla A0 con protocolo RS232 
            }
           
         if (kbhit(RF))          //si el endpoint de salida contiene datos del host
            {
               d = getc(RF);//Cogemos los datos que nos da el el módulo de RF
               putc(d,PC);//y lo sacamos para el PC
            }
      }
   }


Si teneis alguna pregunta o alguna duda al respecto me la podeis preguntar por aqui  :mrgreen: :mrgreen: :mrgreen: