Autor Tema: Paso a paso módulo USART con Interrupción en MBLAB XC8  (Leído 9726 veces)

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

Desconectado sebastianfpr

  • PIC10
  • *
  • Mensajes: 30
Paso a paso módulo USART con Interrupción en MBLAB XC8
« en: 15 de Abril de 2013, 18:45:18 »
Hola a Todos,

Hace poco empece a utilizar el nuevo entorno de desarrollo MPLAB X y el nuevo compilador de lenguaje C de Microchip, MPLAB XC8. En cuanto al entorno MPLAB X me ha gustado mucho ya que es una interfaz más enriquecida y agradable. El hecho de poder instalar distintas versiones del mismo compilador es muy interesante. Bueno, hay muchas cosas mas que agradan que de seguro ustedes se darán cuenta cuando empiecen a usarla con más frecuencia.

En cuanto al compilador C, MPLAB XC8 me gusta el hecho de poder utilizar las otras familia de PIC y no solo los 18F, aunque las librerías de periféricos solo están disponibles para los 18F (que mal!). Hay algunos problemas en las librerías de periféricos que no descomentan definiciones y es por eso que en algunas funciones aparecen con signo de exclamación en el código, esto es debido a que los prototipos de función no son declarados (por ejemplo prototipo de función de la función OpenUSART es: void OpenUSART ( unsigned char config,  unsigned spbrg). En este caso la librería pconfig.h es a que no descomenta las definiciones necesarias dependiendo del PIC utilizado.

Bueno, más adelante podemos revisar mejor lo anterior en más detalle.

A continuación les presente un vídeo paso a paso que realice en cuanto a mi experiencia inicial con el modulo USART usando interrupción con el compilador MPLAB XC8. En este ejemplo, se realiza la escritura y lectura de datos con un ejemplo sencillo. Espero les guste y les ayude.


El código es el siguiente:

Código: [Seleccionar]
/*
 * File:   main.c
 * Author: SebastiánPuenteR (sebaspr@outlook.com)
 *
 * Created on 14 de abril de 2013, 09:56 PM
 */

#include <xc.h>
#include <plib/usart.h> //Libreria para el manejo del modulo USART

#define EAUSART_V4  //Le especifica al compilador la versión de las funciones del mosdulo USART que se deben declarar.
                    //Esto lo debería hacer el compilador automaticamente pero debe haber un error y no lo hace.
char CaracterRx;
char MensajeTx[] = "Por favor digite una tecla: ";

void main(void) {

    OpenUSART(USART_TX_INT_OFF &
            USART_RX_INT_ON &       //Activar la interrupcion por la recepcion de dato del buffer de Rx del USART
            USART_ASYNCH_MODE &     //Modo asincrono (fullduplex)
            USART_EIGHT_BIT &       //8 bits de datos
            USART_CONT_RX &         //Recepción continua
            USART_BRGH_HIGH, 129);  //9600 Baudios
   
    INTCONbits.PEIE = 1; //Activamos interrupcion de perifericos
    INTCONbits.GIE = 1;  //Activamos las interrupciones globales

    while(BusyUSART());     //Se espera a que el buffer de Tx este libre
    putsUSART(MensajeTx);   //Se envía un string

    while(1);   //Bucle infinito
}

void interrupt Interrupcion()   //Funcion que atiende las interrupciones
{
    CaracterRx = ReadUSART();   //Se lee el dato que esta en el buffer de Rx del USART

    while(BusyUSART());
    putsUSART("\n\rUsted digito la tecla: ");
    while(BusyUSART());
    WriteUSART(CaracterRx);

    PIR1bits.RCIF = 0;  //Desactivamos la bandera de recepción en el buffer de entrada del USART
}

En unos días subiré un vídeo mostrando el funcionamiento del ejemplo creado.

Saludos,

SebastianPuenteR,
« Última modificación: 15 de Abril de 2013, 19:08:38 por sebastianfpr »
Todos los días la gente se arregla el cabello, ¿Por qué no el Corazón? - Che Guevara -

Sebastián Puente R.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #1 en: 15 de Abril de 2013, 19:41:29 »
Gracias por el aporte.

Buena pinta  ((:-))  :-/

En mi codigo me subraya con rojo OPENUSART,etc... pero compila correctamente,en los foros de microchip se habla de un problmea de ide,del compilador no porque si compila.


*Un dalle en tu código

El bit RCIF se limpia cuando el registro de recepción es leído.

Por otra parte algunos micros pueden manejar el control de los datos,es decir,pueden invertirlo.

Código: [Seleccionar]
BAUD_IDLE_RX_PIN_STATE_HIGH & BAUD_IDLE_TX_PIN_STATE_HIGH
Con esas lineas lo dejo en estado normal.Sin invertir.

Control de errores

Código: [Seleccionar]
    if(PIE1bits.RCIE && PIR1bits.RCIF)            // Did USART cause interrupt ?
    {
    /* EUSART Receive Interrupt Flag bit
       1 = The EUSART receive buffer, RCREG, is full (cleared when RCREG is read)
       0 = The EUSART receive buffer is empty
    */
      if (RCSTAbits.OERR)
        {
            rcByte = RCREG;  // clear the receiver fifo
            rcByte = RCREG;  // FLUSH
            RCSTAbits.CREN = 0;             // clear the OVR flag
            RCSTAbits.CREN = 1;
                                           
            clearRxBuffer();
            return;

        }// OVERRUN ERROR CLEARING

        if (RCSTAbits.FERR)
        {
            rcByte = RCREG;        //ReadUSART();   // remove the broken byte
                                            // send (prepare) error message
            clearRxBuffer();
            return;
        }// FRAMING ERROR CLEARING

        rcByte = RCREG;                     // ReadUSART();


        }

        return;
    }
//*********************************************************************//

Eso es lo que integro en mis programas.
Lo del return esta de sobra :P

Saludos!

Desconectado sebastianfpr

  • PIC10
  • *
  • Mensajes: 30
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #2 en: 17 de Abril de 2013, 01:28:34 »
Amigo muchas gracias por tus comentarios.

Citar
El bit RCIF se limpia cuando el registro de recepción es leído.

Me quedo sonando lo del Bits RCIF, entonces hice la prueba de escritorio con el simulador de MPLAB X y si lo comprobé, apenas se lee el registro RCREG(que es el que tiene el byte recibido) este bit bandera se pone en 0. Esto quiere decir entonces que para este caso, no ha necesidad de poner la instrucción: PIR1bits.RCIF = 0;

Saludos!
Todos los días la gente se arregla el cabello, ¿Por qué no el Corazón? - Che Guevara -

Sebastián Puente R.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #3 en: 17 de Abril de 2013, 01:33:05 »
Amigo muchas gracias por tus comentarios.

Citar
El bit RCIF se limpia cuando el registro de recepción es leído.

Me quedo sonando lo del Bits RCIF, entonces hice la prueba de escritorio con el simulador de MPLAB X y si lo comprobé, apenas se lee el registro RCREG(que es el que tiene el byte recibido) este bit bandera se pone en 0. Esto quiere decir entonces que para este caso, no ha necesidad de poner la instrucción: PIR1bits.RCIF = 0;

Saludos!

Asi es compa!

Eso viene definido en la hoja de datos.

Te recomiendo el control de errores,bueno el reinicio del modulo xD, quita muchos dolores de cabeza.

Saludos!

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #4 en: 24 de Abril de 2013, 10:46:43 »
Muy bueno el tutorial Sebastián. y gracias por compartir.  ((:-))
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado hector915

  • PIC12
  • **
  • Mensajes: 78
    • Blog Personal.
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #5 en: 28 de Abril de 2013, 22:25:25 »
me ah gustado mucho sin embargo ese mplabx me esta poniendo dolores de cabeza ahora al crear mis librerias propias.

Por ejemplo si yo deseo crear una libreria puertos.h ,al tratar de incluirla en mi programa principal me pone problemas y dice que no la encuentra .

SI hago uso de
#include "puertos.h" //tampoco funciona   :5] :5]

Alguien tiene idea o conoce  como crear librerias propias en mplabx.

Gracias.
if you can imagine it, you can embed it

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #6 en: 29 de Abril de 2013, 09:18:31 »
  ¿Tienes la librería en la misma carpeta que tu proyecto, o al menos en el path que busca MPLAB?

  Yo dejo una copia de la librería en la carpeta de mi proyecto y nunca tuve problemas al compilar.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado hector915

  • PIC12
  • **
  • Mensajes: 78
    • Blog Personal.
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #7 en: 30 de Abril de 2013, 11:34:28 »
finalmente me ah funcionado ,solo tengo una duda pequeñitica es posible agregar los fuses en una libreria aparte tambien  :lol: no se si a todos experimentan problemas.
if you can imagine it, you can embed it

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #8 en: 30 de Abril de 2013, 12:46:39 »
Hola Héctor. Si puedes hacerlo.
Si tienes problemas copia la salida del compilador y muéstrala para ver cual es el problema que estas teniendo.
Saludos
Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #9 en: 21 de Mayo de 2014, 19:44:05 »
hola
ando buscando el pdf para el uso de plib/usart.h o algun pdf donde se especifique el uso de las funciones pero no lo he encontrado, estoy usando un PIC24FJ. Apenas empiezo con XC16 y al iniciar el proyecto queda incluido stdlib.h, con estos ya puedo usar la UART?
« Última modificación: 22 de Mayo de 2014, 11:45:05 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #10 en: 21 de Mayo de 2014, 22:10:25 »
hola
ando buscando el pdf para el uso de plib/usart.h o algun pdf donde se especifique el uso de las funciones pero no lo he encontrado, estoy usando un PIC24FJ. Apenas empiezo con XC16 y al iniciar el proyecto queda incluido stdilib.h, con estos ya puedo usar la UART?

Para los pic24 viene una hoja especifica de cada modulo "Reference Manual", por lo menos así me quede con el c16.

DS39708B

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Paso a paso módulo USART con Interrupción en MBLAB XC8
« Respuesta #11 en: 22 de Mayo de 2014, 12:06:11 »
gracias akenafab  ;-)
no había puesto cuidado al inicio de este hilo, las funciones que buscaba solo están disponibles para los PIC18 :(
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA


 

anything