Autor Tema: Habilitar y desabilitar UART  (Leído 3789 veces)

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

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Habilitar y desabilitar UART
« en: 23 de Agosto de 2011, 00:02:04 »
Hola como estan, estoy programando un pic18f4410 para comunicacion uart en protocolo xon y para hacer confiable y no perder un dato he tenido que hacer lo siguiente:

Código: [Seleccionar]
      disable_interrupts(INT_RDA);
      if ((j>50) & (i==j))
      {  i=0;
         j=0;
         putc(xon);
      }
      enable_interrupts(INT_RDA);


Tengo dos dudas la primera es el putc(xon) esta pone el valor de xon en el buffer de transmision y sale, o espera a que se transmita todo xon y despues sale.
Y la segunda puedo habilitar y desabilitar la interrupcion por uart de esa manera tan seguida?, lo hize asi porque no puedo recibir un dato justo antes de hacer  i=j=0 porque ese dato nunca lo leeria.

saludos
Renato
control de movimiento

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Habilitar y desabilitar UART
« Respuesta #1 en: 23 de Agosto de 2011, 12:37:11 »
Yo no lo des-habilitaría, apagaría el módulo de recepción hasta que se pueda recibir datos, porque sino si ocurre una sobre-escritura el módulo se bloquea y hay que resetearlo.

Saludos!
« Última modificación: 23 de Agosto de 2011, 12:39:18 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Habilitar y desabilitar UART
« Respuesta #2 en: 23 de Agosto de 2011, 18:36:52 »
Según me parece lo que intentas es solicitar al DCE (Data Control Equipment es que reciba un dato) de allí utilizar XON o Request To Send como señal de control de flujo, así que debes esperar a que el DCE le diga al DTE [Data Terminal Equipment (tu PIC)]  recibe la señal Clear To Send para mandar el byte.

No creo que habilitar/deshabilitar las interrupciones sea necesario en este caso. Es precisamente la ventaja que se logra al incorporar control de flujo. Si la función putc (no lo creo) trabaja directamente el el modo de control de flujo, tienes que ver los detalles de su operación, de otro modo tendrás que hacerlo tu mismo.

Hay un libro de un autor que se llama Luicio Di Jasio que te puede aclarar muchas dudas al respecto. Existen dos versiones una para PICS de 16 bits y otra para PICs de 32 bits, aunque el PIC18 no cae dentro de esas familias, las similitudes de la UART son tales que te servirá. Tiene unos ejemplos muy pero que muy buenos para eso que quieres hacer.

Saludos
Reinier
« Última modificación: 23 de Agosto de 2011, 18:43:12 por reiniertl »

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Habilitar y desabilitar UART
« Respuesta #3 en: 25 de Agosto de 2011, 11:08:20 »
Si, mejor voy a quitar el habilitar y dasabilitar la uart como dice Suki puedo perder un dato ahi, lo que quiero hacer es un protocolo xon xoff solo tengo los dos pines 2 y 3 del puerto serie, envia xon y cuando llegan 50 bytes envia el xoff los bytes se almacenan en un buffer[], al mismo tiempo estos bytes son enviados a un dispositivo que los va pidiendo deacuerdo a su trabajo. Hay dos contadores "i" para el dispositivo y "j" para el uart, nunca i puede pasar a j tambien la transmision por uart es mas rapida que la enviada de bytes al dispositivo. Por tanto para que i alcance al j el j debe de detenerse con el xoff, cuando i=j hago i=j=0 y empieza a llenar el buffer denuevo

Esto en teoria confiando en la pc que respetara su protocolo software pero que pasaria si tiene virus o esta muy sobrecargada y le envia un byte mas al pic justo cuando este hace i=j=0, pues este ultimo dato no lo podria enviar al dispositivo y saldria una alarma pero este es un caso muy dificil de que ocurra.

saludos
control de movimiento

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Habilitar y desabilitar UART
« Respuesta #4 en: 27 de Agosto de 2011, 11:34:45 »
Una consulta con respecto al operador &. Yo uso esta sentencia if ((j>50) & (i==j)) con el operador bitwise pero si lo reemplazo por  if ((j>50) && (i==j)) tambien realiza la logica correctamente, pensada que el operador & era el AND pero este es con doble &&. Tendre algun incoveniente cuando lo implemente.
Lo mismo vale para los operadoradores | y ||.

saludos
control de movimiento

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Habilitar y desabilitar UART
« Respuesta #5 en: 28 de Agosto de 2011, 21:08:52 »
El operador & es el AND lógico, y el && es el AND lógico de comparación. En tu caso if ((j>50) && (i==j)) es lo correcto, la otra construcción puede darte problemas. Lo mismo vale para el resto de los operadores lógicos.

Saludos
Reinier

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Habilitar y desabilitar UART
« Respuesta #6 en: 29 de Agosto de 2011, 00:39:34 »
entendido gracias reiniertl
control de movimiento

Desconectado donvalles

  • PIC10
  • *
  • Mensajes: 35
Re: Habilitar y desabilitar UART
« Respuesta #7 en: 05 de Julio de 2013, 23:04:08 »
el amigo suky dice que puede apagar el modulo de recepcion. como se hace eso? porque en un momento determinado de mi soft no deseo entrar en la interrupcion de recepcion de la uart entonces yo desabilito la interrupcion pero siguen llegando datos a la uart estando desabilitado pero cuando habilito la interrupcion no anda mas la uart. entonces como apago y prendo el modulo de la uart?. Gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Habilitar y desabilitar UART
« Respuesta #8 en: 06 de Julio de 2013, 10:56:16 »
Podes darle una revisada al datasheet, existe un bit para poder encender o apagar el periférico.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Habilitar y desabilitar UART
« Respuesta #9 en: 06 de Julio de 2013, 17:51:41 »
Ese bit es SPEN del registro RCSTA ?? :shock: :shock:

Citar
bit 7 SPEN: Serial Port Enable bit
1 = Serial port is enabled (configures RXx/DTx and TXx/CKx pins as serial port pins)
0 = Serial port is disabled (held in Reset)
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Habilitar y desabilitar UART
« Respuesta #10 en: 06 de Julio de 2013, 18:28:11 »
Es una opción, pero solo se puede desactivar la recepción (CREN). Lo que pasa es que si se des-habilita la interrupción, al recibir bytes ocurre un overflow porque no se leen. Si el bit OERR está en 1, se inhibe la transferencia desde el registro RSR hasta el registro RCREG, por lo que es vital borrar el bit OERR, si estuviese activado.

O sea, se puede des-habilitar la interrupción, pero al volver a habilitarla seguramente va a ser necesario resetear la recepción.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado donvalles

  • PIC10
  • *
  • Mensajes: 35
Re: Habilitar y desabilitar UART
« Respuesta #11 en: 07 de Julio de 2013, 12:57:55 »
Gracias por responderme, yo habia leido tambien que en ccs la funcion setup_uart() 1on/0off, intente ver donde estaba el cuerpo de la funcion para ver que hacia o como estaba constituida pero no la encontre asi que el compilador sabe lo que hace, voy a hacer la prueba mañana como dice suki y les contare. Saludos.