Saludos!! El objetivo de este ejemplo usar la UART de nuestro microcontrolador (especĆficamente del PIC18F4620) y comunicarlo con nuestra PC para interactuar con el monitor serial X-CTU (pueden descargar la version que yo uso desde aquĆ, por cierto yo lo ocupo con Windows7 sin problemas), si lo prefieren pueden usar otro como el Hiperterminal, Putty o incluso el monitor serial de Arduino, como en mi PC no tengo un puerto serial voy a utilizar el FT232 para hacer el puente entre el uC y un puerto USB (usare un circuito mostrado anteriormente en el blog, aquĆ el enlace), tambiĆ©n pueden usar otro modulo o circuito que tengan.
La configuración del X-CTU usado para este ejemplo es el siguiente:
El circuito usado es bastante sencillo, se trata de tres LEDs conectado al puerto E de un PIC18F4620, los pines TX y RX se conectan al modulo FT232 (recordar que se invierten los pines para tener una comunicación exitosa), continuación el circuito usado:
El código que hace posible esto es el siguiente, primero mostramos la librerĆa para la UART, una forma sencilla y se debe de aclarar que la recepción de datos esta activado constantemente, se muestran los archivos uart.h y uart,c:
La configuración de los fuses del PIC queda de a siguiente forma:
Para nuestra archivo main.c tenemos en el bucle infinito una lectura de lo datos recibidos, después lo evaluamos con un switch y realizamos una acción dependiendo del dato recibido, que en este caso es encender los LEDs y devolver un mensaje del estado, el código queda de la siguiente forma:
AquĆ el vĆdeo del circuito en acción:
Donaciones:
La configuración del X-CTU usado para este ejemplo es el siguiente:
El circuito usado es bastante sencillo, se trata de tres LEDs conectado al puerto E de un PIC18F4620, los pines TX y RX se conectan al modulo FT232 (recordar que se invierten los pines para tener una comunicación exitosa), continuación el circuito usado:
El código que hace posible esto es el siguiente, primero mostramos la librerĆa para la UART, una forma sencilla y se debe de aclarar que la recepción de datos esta activado constantemente, se muestran los archivos uart.h y uart,c:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************************************* | |
* | |
* Libreria basica para usar la UART | |
* | |
******************************************************************************* | |
* FileName: uart.c | |
* Processor: PIC18F4620 | |
* Complier: MPLAB x IDE v3.51 & C18 v3.47 | |
* Author: Pedro SƔnchez (MrChunckuee) | |
* Blog: http://mrchunckuee.blogspot.com/ | |
* Email: mrchunckuee.psr@gmail.com | |
* Description: Eviar y recibir datos por la USART del uC y monitorear la | |
* informacion en la computadora. | |
******************************************************************************* | |
* Rev. Date Comment | |
* v1.00 27/01/2017 - Creación del firmware | |
* - Envio y recepcion de datos de forma sencilla | |
******************************************************************************/ | |
//*********** I N C L U D E S *************************************************/ | |
#include <p18f4620.h> | |
#include "uart.h" | |
/******************************************************************************* | |
* Function: void UART_Init(void) | |
* Description: Initialization of UART | |
* Precondition: None | |
* Parameters: None | |
* Return Values: None | |
* Remarks: 1. Enable Transmitter and select High Baud Rate in TXSTA | |
* 2. Select a value in SPGRB register to generate 9600 baud rate | |
* 3. Enable Serial port in RCSTA register | |
* 4. Enable continuous reception in RCSTA | |
******************************************************************************/ | |
void UART_Init(void){ | |
//Configure RC6/TX/CK and RC7/RX/DT as a UART | |
UART_RX_TRIS = 1; | |
UART_TX_TRIS = 0; | |
UART_TX_STATUS = 0; // Reset TXSTA | |
UART_RX_STATUS = 0; // Reset RCSTA | |
UART_TX_STATUS = 0x20; // Load TXSTA from TxConUser selected | |
SPBRG = BAUD_RATE; // Write baudrate to SPBRG | |
UART_RX_STATUS = 0x90; | |
BAUDCON = BAUD_CONTROL; | |
} | |
/******************************************************************************* | |
* Function: unsigned char UART_ReadByte(void) | |
* Description: Wait till a byte received from terminal | |
* Precondition: None | |
* Parameters: None | |
* Return Values: Return a byte received from UART | |
* Remarks: None | |
******************************************************************************/ | |
unsigned char UART_ReadByte(void){ | |
unsigned char recv_data; | |
while(!PIR1bits.RCIF); | |
recv_data = RCREG; | |
PIR1bits.RCIF = 0; | |
return (recv_data); | |
} | |
/******************************************************************************* | |
* Function: void UART_WriteByte (unsigned char data_byte) | |
* Description: Transmits a byte to terminal through UART | |
* Precondition: None | |
* Parameters: unsigned char send_data = Byte to transmit | |
* Return Values: None | |
* Remarks: None | |
******************************************************************************/ | |
void UART_WriteByte (unsigned char data_byte){ | |
TXREG = data_byte; // Also transmit USART status value | |
while (!TXSTAbits.TRMT); // wait here transmission to complete. | |
} | |
/******************************************************************************* | |
* Function: void UART_WriteString (unsigned char *mess) | |
* Description: Sends the string to terminal till it finds NULL character. | |
* Precondition: None | |
* Parameters: unsigned char *data_string = Pointer to display message | |
* Return Values: None | |
* Remarks: None | |
******************************************************************************/ | |
void UART_WriteString (unsigned char *data_string){ | |
while(*data_string != '\0'){ | |
UART_WriteByte(*data_string++); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* File: uart.h | |
* Author: MRCHUNCKUEE | |
* | |
* Created on 27 de enero de 2017, 10:03 PM | |
*/ | |
#ifndef UART_H | |
#define UART_H | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
/****PORT D E F I N I T I O N S ***********************************************/ | |
//UART PORT DEFINITIONS | |
#define UART_RX_TRIS TRISCbits.TRISC7 | |
#define UART_TX_TRIS TRISCbits.TRISC6 | |
#define UART_RX_STATUS RCSTA | |
#define UART_TX_STATUS TXSTA | |
/********* G E N E R I C D E F I N I T I O N S ******************************/ | |
#define BAUD_CONTROL 00 | |
#define BAUD_RATE 25 | |
/*********** P R O T O T Y P E S **********************************************/ | |
void UART_Init(void); | |
unsigned char UART_ReadByte(void); | |
void UART_WriteByte (unsigned char data_byte); | |
void UART_WriteString (unsigned char *data_string); | |
#ifdef __cplusplus | |
} | |
#endif | |
#endif /* UART_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef __WORD_CONFIG_H | |
#define __WORD_CONFIG_H | |
// Configuracion del PIC18F4620 | |
#pragma config OSC = INTIO67 //Uso del osc interno | |
#pragma config FCMEN = ON | |
#pragma config IESO = ON | |
#pragma config PWRT = ON | |
#pragma config BOREN = OFF | |
#pragma config WDT = OFF | |
#pragma config MCLRE = ON //Se activa el reset externo | |
#pragma config LVP = OFF | |
#pragma config XINST = OFF | |
#pragma config DEBUG = OFF | |
#pragma config CP0 = OFF | |
#pragma config CP1 = OFF | |
#pragma config CP2 = OFF | |
#pragma config CP3 = OFF | |
#pragma config CPB = OFF | |
#pragma config CPD = OFF | |
#pragma config WRT0 = OFF | |
#pragma config WRT1 = OFF | |
#pragma config WRT3 = OFF | |
#pragma config WRTC = OFF | |
#pragma config WRTB = OFF | |
#pragma config WRTD = OFF | |
#pragma config EBTR0 = OFF | |
#pragma config EBTR1 = OFF | |
#pragma config EBTR2 = OFF | |
#pragma config EBTR3 = OFF | |
#pragma config EBTRB = OFF | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************************************* | |
* | |
* Ejemplo basico para la USART | |
* | |
******************************************************************************* | |
* FileName: main.c | |
* Processor: PIC18F4620 | |
* Complier: MPLAB x IDE v3.51 & C18 v3.47 | |
* Author: Pedro SƔnchez (MrChunckuee) | |
* Blog: http://mrchunckuee.blogspot.com/ | |
* Email: mrchunckuee.psr@gmail.com | |
* Description: Eviar y recibir datos por la USART del uC y monitorear la | |
* informacion en la computadora. | |
******************************************************************************* | |
* Rev. Date Comment | |
* v1.00 25/01/2017 Creación del firmware | |
******************************************************************************/ | |
/************ I N C L U D E S *************************************************/ | |
#include <p18f4620.h> | |
#include <delays.h> | |
#include "Config_FUSES.h" //Only here | |
#include "uart.h" | |
/*********** P O R T D E F I N I T I O N S **********************************/ | |
#define LED1_TRIS TRISEbits.TRISE0 | |
#define LED1 LATEbits.LATE0 | |
#define LED2_TRIS TRISEbits.TRISE1 | |
#define LED2 LATEbits.LATE1 | |
#define LED3_TRIS TRISEbits.TRISE2 | |
#define LED3 PORTEbits.RE2 | |
/*********** L E D S T A T U S M E S S A G E ********************************/ | |
unsigned char mensajeLED1_ON[]=" LED 1 Encendido\r"; | |
unsigned char mensajeLED1_OFF[]=" LED 1 Apagado\r"; | |
unsigned char mensajeLED2_ON[]=" LED 2 Encendido\r"; | |
unsigned char mensajeLED2_OFF[]=" LED 2 Apagado\r"; | |
unsigned char mensajeLED3_ON[]=" LED 3 Encendido\r"; | |
unsigned char mensajeLED3_OFF[]=" LED 3 Apagado\r"; | |
unsigned char mensajeAllLED_ON[]=" LEDs Encendidos\r"; | |
unsigned char mensajeAllLED_OFF[]=" LEDs Apagados\r"; | |
/************** P R O T O T Y P E S *******************************************/ | |
void MCU_Init(void); | |
void main(void){ | |
unsigned char val_usart=0; | |
MCU_Init(); //Initilization of uC | |
UART_Init(); //Initilization of UART | |
while(1){ | |
val_usart=UART_ReadByte(); | |
Delay10KTCYx(100); | |
switch (val_usart){ | |
case 'a': | |
LED1 = 1; | |
UART_WriteString(mensajeLED1_ON); | |
break; | |
case 'b': | |
LED1 = 0; | |
UART_WriteString(mensajeLED1_OFF); | |
break; | |
case 'c': | |
LED2 = 1; | |
UART_WriteString(mensajeLED2_ON); | |
break; | |
case 'd': | |
LED2 = 0; | |
UART_WriteString(mensajeLED2_OFF); | |
break; | |
case 'e': | |
LED3 = 1; | |
UART_WriteString(mensajeLED3_ON); | |
break; | |
case 'f': | |
LED3 = 0; | |
UART_WriteString(mensajeLED3_OFF); | |
break; | |
case 'g': | |
LED1 = 1; | |
LED2 = 1; | |
LED3 = 1; | |
UART_WriteString(mensajeAllLED_ON); | |
break; | |
case 'h': | |
LED1 = 0; | |
LED2 = 0; | |
LED3 = 0; | |
UART_WriteString(mensajeAllLED_OFF); | |
break; | |
default: | |
LED1 = 0; | |
LED2 = 0; | |
LED3 = 0; | |
break; | |
} | |
} | |
} | |
/******************************************************************************* | |
* Function: void MCU_Init(void) | |
* Description: Configura opciones del sitema. Velocidad, entras y salidas | |
* Precondition: None | |
* Parameters: None | |
* Return Values: None | |
* Remarks: Oscilador interno = 4MHz, PLL activado, OSC = 16MHz | |
******************************************************************************/ | |
void MCU_Init(void){ | |
OSCCONbits.IRCF = 0b110; //Fosc = 4MHz | |
OSCTUNEbits.PLLEN = 1; //PLL enable Fosc = 16MHz | |
ADCON1=0xFF; //Entradas digitales | |
LED1_TRIS = 0; // | |
LED2_TRIS = 0; //LEDs como salidas | |
LED3_TRIS = 0; // | |
LED1 = 0; // | |
LED2 = 0; //Apagamos LEDs | |
LED3 = 0; // | |
} |
Descargas:
AquĆ el enlace directo para DESCARGAR los archivos disponibles, tambiĆ©n puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquĆ, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.
Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.
Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, asà también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.
0 Comentarios