TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Jisus en 16 de Octubre de 2009, 10:20:23

Título: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 10:20:23
Hola... necesito alguien que me de una mano... estoy haciendo un proyecto de RFID con el chip TMS3705.... el problema que estoy teniendo que no se como se activa y desactica el puerto serie por hard en el compilador CCS...
el tema es el siguiente para despertar el chip necesito mandarle con el pin TX una secuencia de bit con tiempos diferentes y luego activarlo para leer (RX) los datos q el chip me envia a una frec determinada de 15625 baud (byte de diagnostico y codigo de la tarjeta)... el problema que tengo es q yo utilizo para activar y desactivar el serie  setup_uart(true,RFID);  y para desactivar setup_uart(false,RFID);

pero el problema es q cuando lo activo la linea TX me la pone a 1 y no deberia pasar eso (para el tms3705 la necesito en 0, mientras leo el byte q me envia el RFID)... si no hay manera de hacerlo por funciones... si alguien sabe como hacerlo de forma manual en el CCS, osea tocando los registros del micro ... q me ayude... porq yo me eh fijado en la libreria 18f4550.h y no encuentro los registros... no entiendo como los utiliza este compilador... que por lo general deberian estar ahi... de ultima si el TX siempre se pone en 1 cuando se activa... me gustaria poder activar solo el RX para leer los datos... como ultima opcion

Bueno si alguien me puede ayudar... ya se que hay un tema abierto con el TMS3705 pero nadie me puede ayudar con el problema del CCS por eso abri este para ver si alguien me ayudar....

Desde ya muchas gracias a los q me puedan ayudar... JISUS   ;-)
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f45
Publicado por: MLO__ en 16 de Octubre de 2009, 11:05:45
Hola.

Mira AQUI (http://www.todopic.com.ar/foros/index.php?topic=27070.0)
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 11:26:13
gracias MLO ... justamente es ese el foro que decia q no me pudieron ayudar con el tema de la configuracion del CCS... de todas formas gracias...
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Suky en 16 de Octubre de 2009, 11:27:28
Podrías usar USART por soft (FORCE_SW en #use RS232) y creo que solucionarías el problema.

Saludos!
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f45
Publicado por: MLO__ en 16 de Octubre de 2009, 11:33:04
De hecho, NANO lo trabaja asi no? USART por soft.

Creo que por hard, no hay modo de hacer que se vaya a LOW el pin de Tx.
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 11:35:04
gracias SUKY... algo habia visto de eso... pero no explica mucho la ayuda al respecto... no tendrias algun ejemplo como para guiarme???....
vos decis q el problema de q se pone a 1 el TX por hard es asi en el 18f4550? osea por hard no lo podria hacer???
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 11:37:06
MLO... justamente NANO usa el por Hard para leer el RFID... yo probe con el emulado por soft y no leia nada... eso si el TX por soft no se levanta... por eso mi duda es si esta bien q por hard el TX quede en 1 o no?
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f45
Publicado por: MLO__ en 16 de Octubre de 2009, 11:41:31
mhh.

En los diseños en los que he trabajado con la USART por hard, siempre pone a HIGH el pin de Tx. De prontro usando USART por soft se tenga mas control sobre el pin de Tx.

O habria que probar, modificar el estado directamente de ese pin con un output_low(), pero no se ....

Saludos
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f45
Publicado por: MLO__ en 16 de Octubre de 2009, 11:55:01
con setup_uart(0); podes desactivar la USART y podes poner el pin de Tx a LOW con output_low()

Otra opcion:

Código: C#
  1. #use rs232(baud=9600, xmit=pin_b2, rcv=pin_b1, parity=N, bits=8, FLOAT_HIGH, FORCE_SW)

y pones a LOW el pin de Tx con output_low();. No te olvide de poner una resistencia de pullup en la linea de Tx para que funcione la transmision.

Saludos
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 11:57:31
si con output low ya probe pero si no desactivas el puerto serie no lo toma... la verdad q no se como nano lee entonces por Hard... porq se le deberia poner en 1 el TX... le voy a preguntar si no cambio el puerto pero creo q no...

Con respecto a tocar los registros de forma manual en el CCS se puede??? especificamente el del puerto serie... porq en ese caso creo q se puede activar solo el RX para leer... si alguien sabe como o donde tengo q buscar ... q me pase la data
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 11:58:59
el problema que ni bien lo activo para leer el RFID se pone automaticamente en 1 ... y lo necesito en 0 mientras leo el RFID
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 12:09:51
gracias MLO voy a probar eso q dijiste a ver q pasa... y despues les aviso
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 16:32:15
Bueno ahi probe con el FORCE_SW y anda bien lo de los pines ... no me tira el TX a 1... pero ahora no me lee el BYTE de diagnostico... me lee siempre 0x00 ... creo q el problema es q el FORCE_SW transforma el puerto serie por hard a serie por soft... y el problema que teniamos con el por soft era ese q siempre nos leia 0x00 ... no se si tendra q ver q lee el estado del pin o que....

O tal vez el serie por soft no se puede configurar en un baud=15625
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 17:38:19
bueno como me imaginaba... consulte con NANO y justamente por eso uso el puerto serie por hard porq el por soft no le dejaba leer los byte del RFID...

asi q si alguien tiene otra opcion para anular q se ponga en 1 el TX que no sea la FORCE_SW... en lo posible si sabe alguien como se tocan los registros manualmente en el CCS mejor....
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 17:43:56
lo que necesito es tocar el registro TXSTA... en el bit 5 TXEN poniendolo a 0 me desabilita solamente el pin TX que es lo q necesito... pero no se como maneja estos registros el CCS... no se si los ENMASCARA o algo en parecido...

si alguien aluna vez configuro algun registro manual en el CCS... que me avise... gracias
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: cerebro en 16 de Octubre de 2009, 18:02:27
Podes hacerlo metiendo una porción en asembler o algo así por ejemplo (configuracion del modo captura)

Código: [Seleccionar]
//------------------------------------------------------------------------------------
//definiciones

#byte CCP1CON =0x17
#byte TODAS_INT_ENABLE = 0x8B                  //habilitar todas las interrupciones

#bit CCP1M3 = CCP1CON.3
#bit CCP1M2 = CCP1CON.2
#bit CCP1M1 = CCP1CON.1
#bit CCP1M0 = CCP1CON.0
#bit CCP1ENABLE = 0x8C.2
#bit FLANCOS_Asen_O_Desen = 0x81.6              // 1->rising 0->falling

char i=0;
char bcd[10]={0b0000,0b0001,0b0010,0b0011,0b0100,0b0101,0b0110,0b0111,0b1000,0b1001};//BCD 0-9
boolean flanco=0;


//----------------------------------------------------------------------------------------

Código: [Seleccionar]

#INT_EXT

void interrupcion_ext(){
    flanco=!flanco;                         //complementa valor de modo

   if(!flanco)    CCP1M0 = 0;
//      setup_ccp1(CCP_CAPTURE_RE);          //SI -> ccp1 modo captura configurado flanco ascendente
   else   CCP1M0 = 1;
//      setup_ccp1(CCP_CAPTURE_FE);          //NO -> ccp1 modo captura configurado flanco descendente

}

espero te sirva. Saludos.
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Suky en 16 de Octubre de 2009, 21:15:46
Defines el bit que quieres modificar:

Código: C
  1. #bit TXEN=0x98.5  // Para 16F87XA

Y luego lo trabajas:

Código: C
  1. TXEN=1;
  2. TXEN=0;


Saludos!
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 22:35:31
gracias SUKY y Cerebro... osea si no entendi mal yo configuro por ejemplo

#bit TXEN=0x98.5;

 y luego lo uso como si fuera variable... y el mismo compilador se encarga de saber q es cada definicion??? osea si uso los mismo nombres de los registros de la hoja de datos del micro...

 si es asi lo unico q me falta entender q es ese 98 y el punto 5... ????? no entiendo que es? no se supone q el TXEN es un solo bit???
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Suky en 16 de Octubre de 2009, 23:13:25
No, en 0x98 si miras el datasheet del 16F87xA te das cuenta que es la dirección de TXSTA, y el 5 es la posición del bit. Muy clarito  ;-)


Saludos!
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: cerebro en 16 de Octubre de 2009, 23:15:36
 0x98  es la dirección de memoria (SRF) que estas accediendo con la directiva #byte, o sea el registro (byte) que querés modificar se encuentra en la dirección 0x98 y al utilizar 0x98.5 estas accediendo al quinto bit del registro directamente. El compilador no interpreta nombres ni nada por el estilo.  Podrías utilizar #byte Txenable o cualquier otro y el programa va a funcionar igual. una cosita  el "0x" denota un numero hexadecimal por ejemplo 0xFF o como en este caso 0x98
 saludos!!  ;-) 
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 16 de Octubre de 2009, 23:25:55
jajjaja gracias chicos...
lo del hexa lo sabia jajajja... y lo otro me lo imaginaba... es mas despues de la pregunta me puse a buscar en la hoja de datos a ver si era eso... pero no lo encontre jejeje despues lo voy a buscar mejor porq es bastante larga la del 18f4550....

muchas gracias por la mano... yo utilizo para un trabajo un micro freescale q los regitros estan todos definidos en la libreria del micro por eso no entendia como lo maneja el CCS
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Suky en 16 de Octubre de 2009, 23:56:52
En el caso del 18F4550 seria:

Código: C
  1. #bit TXEN=0x0FAC.5

Página 68  ;-)


Saludos!
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 17 de Octubre de 2009, 00:26:54
muchisimas gracias SUKY... ehi estan todos jajjaja... q maestro.... esperemos q mañana solucione lo del chip

Un Abrazo!!!
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 17 de Octubre de 2009, 10:42:55
no funciona... seteo en 0 el registro TXEN y es como q no me deja tomar el control porq no lo puedo hacer bajar a 0 nunca.... q bronca
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f45
Publicado por: MLO__ en 17 de Octubre de 2009, 14:05:23
Hola.

Al fin toco por SOFT?

Si quieres podrías gestionar la rutina de recepción por interrupción asignando el pin Rx a un pin con interrupcion (int_EXT, int_CCPx).

Saludos
Título: Re: Ayuda para activar y desactivar el puerto rs232 por Hard en CCS con el 18f4550
Publicado por: Jisus en 17 de Octubre de 2009, 14:07:59
bueno si alguien tiene otra manera de tomar el control del TX que me ayude...
lo q necesito es que quede en cero con el puerto serie por hard activado... pero no me me emule el puerto porq sino no me lee los datos... me lee 0x00 si lo emula...

yo opte por usar de tx cualquier otro pin y me lee perfecto... el tema q ahora no puedo escribir los registros...

asi q si alguien tiene otro metodo...