Autor Tema: ALGUIEN ME PUEDE AYUDAR, MANEJO DE MAS DE UN PUERTO SERIE CON EL PIC16F876  (Leído 2443 veces)

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

Desconectado MGILAR

  • PIC10
  • *
  • Mensajes: 3
HOLA, BUEN DIA, TENGO UN PROBLEMA Y QUICIERA SABER SI ALGUIEN ME PUEDE DAR UNA AYUDADITA. ESTOY TRATANDO DE HACER UNA INTERFAZ QUE MANEJE MAS DE UN PUERTO SERIE, PERO ESTOY TENIENDO PROBLEMAS Y YA LE HE BUSCADO POR TODOS LADOS Y NO LE ENCUENTRO SOLUCION. EL PROBLEMA ES QUE CUANDO CONFIGURO PIN_B0 COMO RX Y PIN_B1 COMO TX, OBTENGO BASURA A LA SALIDA . Y CUANDO USO LOS PINES RX Y TX NORMALES (PIN_C7 Y PIN_C6) EL DATO SALE BIEN .

ALGUIEN ME PODRIA DECIR QUE ES LO QUE PUEDO ESTAR PASANDO POR ALTO, SE LOS AGRADECERIA MUCHISIMO.

LA MANERA COMO ESTAY CONFIGURANDO LOS PUERTOS DE SALIDA ES LA SIGUIENTE.

#use     rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8,parity=N,stream=HWPORT)

#use     rs232(baud=9600,xmit=PIN_B1,rcv=PIN_B0,bits=8,parity=N,stream=SOFTPORT1)

DE ANTEMANO MIL GRACIAS.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: ALGUIEN ME PUEDE AYUDAR, MANEJO DE MAS DE UN PUERTO SERIE CON EL PIC16F876
« Respuesta #1 en: 29 de Julio de 2004, 13:16:00 »
Paciencia...que ya te leímos en el otro post

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: ALGUIEN ME PUEDE AYUDAR, MANEJO DE MAS DE UN PUERTO SERIE CON EL PIC16F876
« Respuesta #2 en: 29 de Julio de 2004, 20:14:00 »
Debes tener en cuenta que al utilizar los pines C6 y C7 estas utilizando el hardware (USART) del PIC, lo que significa que se usara el estandar NRZ (NonReturn to Zero), lo que creo mas significativo en esto es que al transmitir el nivel pasivo de la señal es alto. El caso contrario al utilizar los pines B0 y B1, la comunicacion serial es por software lo que significa niveles distintos es decir el nivel pasivo de la señal es baja.

Debes estar utilizando el driver MAX232 creo esto que genera el problema. Yo he utilizado un pic16F84 para transmitir por dos puertos distintos y no he tenido problemas este pic maneja la comunicacion serial por software.
Se puede perfectamente algo asi:

#use rs232(baud=9600,xmit=B0,rcv=B1,Invert)
#use rs232(baud=9600,xmit=B2,rcv=B31,Invert)

A se me olvidaba cuando se cambian los pines con la instruccion #use rs232 es necesario agregar un retardo. He colocado retardos de 10 ms y funciona sin problemas.

kruskal


Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: ALGUIEN ME PUEDE AYUDAR, MANEJO DE MAS DE UN PUERTO SERIE CON EL PIC16F876
« Respuesta #3 en: 30 de Julio de 2004, 03:53:00 »
¿Quieres decir que si queremos contar con dos vías de transmisión serie conviene no usar la USART?
¿Qué es eso del nivel pasivo?
Saludos

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: ALGUIEN ME PUEDE AYUDAR, MANEJO DE MAS DE UN PUERTO SERIE CON EL PIC16F876
« Respuesta #4 en: 30 de Julio de 2004, 14:39:00 »
bueno, yo contesto desde mi experiencia en PBP ya que con C aún no me he puesto...
Es recomendable usar el MAX232, incluso casi es mejor usar el max233 y así evitar los dichososo condensadores...   pero igualmente el modo invertido funciona a la perfección...
y solo hay que poner 2 resistencias al circuito.

sobre el tema de utilizar la USART, y por otro lado transmisión serie por soft, no pienso que se creen incompatibilidades...
y sino, para evitar errores, usemos un 18F que tiene 2 usart, y yasta...



Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: ALGUIEN ME PUEDE AYUDAR, MANEJO DE MAS DE UN PUERTO SERIE CON EL PIC16F876
« Respuesta #5 en: 30 de Julio de 2004, 18:21:00 »
Eso de nivel alto es simple, esto es cuando no se estan transmitiendo datos la tension es Vcc (5V en TTL), en caso contrario al no estar enviando datos la señal esta en tierra (GND) o nivel bajo.

Deben considerar que al comunicarse con el PC no es necesario utilizar el driver MAX232, porque los computadores actuales soportan nivel TTL por la puerta serial. Es decir se puede conectar directo un pin del PIC al, PC claro limitando la corriente con una resistencia de 100 ohm, para evitar problemas

Yo creo que como estas usando dos pines de comunicacion serial  no deberias utilizar el USART del PIC 16F87 (que tiene solo 1) y realizar todo por software te quedara mas simple el circuito.

Kruskal

Salud2

Desconectado MGILAR

  • PIC10
  • *
  • Mensajes: 3
RE: ALGUIEN ME PUEDE AYUDAR, MANEJO DE MAS DE UN PUERTO SERIE CON EL PIC16F876
« Respuesta #6 en: 30 de Julio de 2004, 18:34:00 »
Gracias por tu propuesta kruskal, hice lo que me dijiste pero el problema aun sigue, es algo raro, estoy a prueba y error haber que sale, lo curioso es que estoy enviando un byte por el puerto, lo configuro con el puerto normal (PIN_C6)  y el byte sale bien sin nada agregado y cambio la configuracion con el pin_A0 (como Tx)  me arroja 2 bytes, pero el segundo byte casi siempre es cero y el primero no tiene nada que ver con el que estoy enviando.

El byte que estoy sacando es el 0x01, por el puerto normal  sale bien (01), y cuando lo envio por A0 sale FC 00.........y le he cambiado a otros bytes y obtengo dos bytes de salida.


Invertido y normal obtengo 2 bytes de salida por cada byte que envio. la velocidad que manejo es a 9600 baud.

otra cosa curiosa es la salida siempre es la misma para cada byte, es decir si le pongo 0x01 saca FC 00...para 0X05  saca 1C 00.

a, se me pasaba, el retardo de 10 ms en que parte debo colocarlo?

graciass a todos por su  ayuda.




Desconectado MGILAR

  • PIC10
  • *
  • Mensajes: 3
RE: ALGUIEN ME PUEDE AYUDAR, MANEJO DE MAS DE UN PUERTO SERIE CON EL PIC16F876
« Respuesta #7 en: 02 de Agosto de 2004, 13:31:00 »
YA HE SOLUCIONADO ESTE PROBLEMA...... NO HUBO NECESIDAD DE USAR invert , LA CONFIGURACION QUEDA NORMAL.

CONFIGURE 3 PUERTOS:

#USE RS232(BAUD=9600, XMIT=PIN_B0, RCV=PIN_B1, STREAM=COM_A)

#USE RS232(BAUD=9600, XMIT=PIN_B2, RCV=PIN_B3, STREAM=COM_B)

#USE RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, STREAM=COM_C)

Y FUNCIONAN A LA PERFECCION.

EL PROBELMA PROVENIA DEL TIMER0, AL PARECER SE GENERABA UN DESBORDAMIENTO Y NO PERMITIA QUE EL DATO SALIERA CORRECTO POR EL PUERTO. COMO LO MENCIONO kruskal , COMO EL PROCESO DE TRANSMISION SE HACE POR SOFTWARE, EL PROGRAMA NO ENTREGA EL DATO AL HUART Y REQUIERE UN POCO DE TIEMPO MAS DE LO NORMAL PARA SACAR EL DATO, PERO EL TIMER0 N0 LO PERMIATIA Y POR ESO SE GENERABA EL ERROR, BUENO ESA ES MI TEORIA, SI ALGUIEN MAS TIENE ALGUNA OTRA IDEA DE POR QUE PASABA ESTO SE LO AGRADECERIA.

EN UN INICIO EL TIMER0 ESTABA CONFIGURADO  ASI:

setup_timer_0(RTCC_INTERNAL);

Y LO QUE HICE FUE AGREGAR UN DIVISOR POR 2.

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);  

BUENO AMIGOS DE TODAS FORMAS MUCHAS GRACIAS Y AQUI SEGUIRE ADELANTE Y AL PENDIENTE DEL FORO POR SI BUELVO A TENER PROBLEMAS O SI PUEDO AYUDAR CON ALGO.  

SALUDOS DESDE HERMOSILLO, SONORA, MEXICO


 

anything