Uart Data Ready Mikroc
“Ready for PIC“ is one of MikroElektronika‘s compact prototyping boards for 28 and 40 pin PIC microcontrollers. The board comes with PIC16F887 microcontroller which is preprogrammed with an UART bootloader firmware and thus eliminates the need of an external programmer. The on-board USB-UART module allows the serial data transfer between the PIC and a PC using an USB cable. It has also got a reasonable size prototyping area to add more functionalities to the board as required. These features make this board an ideal candidate for doing embedded projects that require PC interfacing. This article first reviews the basic features of the Ready for PIC board and then demonstrates how to write a PC application in Processing (an open source programming language) to communicate with the board through the on-board USB-UART module.
UART Library. The UART hardware module is available with a number of PIC32 MCUs. The mikroC PRO for PIC32 UART Library provides comfortable work with the Asynchronous (full duplex). The function receives a byte via UART. Use the UARTDataReady function to test if data is ready first.
Ready for PIC board and PC interfacing using Processing
A brief review of Ready for PIC board
Ready for PIC is a compact development tool for 28/40 pin PIC microcontrollers. The board by default is equipped with PIC16F887 MCU placed in a DIP40 socket but it does provide connection holes to accommodate a 28-pin device. To program the MCU you can either use the pre-installed bootloader or an external programmer. For using an external programmer, you need to make a few adjustments on the board. Please read the User’s Manual for further instructions on this. Four 2×5 male header pins are available on the board for easy access to the MCU I/O pins. The on-board FT232RL chip provides a USB to asynchronous serial data transfer interface so that the MCU can communicate with a PC through a virtual COM port using a USB cable. The board has two LEDs marked with Rx and Tx which blink when data transfer via USB UART module is active. The board can also be used with a 3.3 V type PIC microcontroller. There is an on-board jumper for selecting between 5 V and 3.3 V supply voltage for the MCU.
On-board features and specifications
Little about Processing
Processing is an open-source software development environment designed for simplifying the process of creating digital images, animations and interactive graphical applications. Team rept redgate keygen maker download. It is free to download and operates on Mac, Windows, and Linux platforms. The Processing Interactive Development Environment (IDE) has the same basic structure as that of the Arduino IDE and is very easy to use. The programming language is so simple that you can create an interactive graphics with just a few lines of code. Here we will not discuss much of the graphics capability of Processing. We will rather focus on the Processing Serial library that will allow to transfer data between the PC and the Ready for PIC board.
Zoom forward to today. Electronics have changed a bit. Before they were relatively high power, high voltage devices. The standard that is 'RS232' dictates that a bit ranges from -12V to +12V. Modern electronics do not operate at such high positive and negative voltages. In fact, our 8051 runs 0V to 5V. So how do we get our 5V micro to talk the RS232 +/-12V voltages? This problem has been solved by the IC manufacturers of the world. They have made an IC that is generically known as the MAX232 (very close to RS232, no?).
The MAX232 is an IC originally designed by a company called Maxim IC that converts the +/-12V signals of RS232 down to the 0/5V signals that our 8051 can understand. It also boosts the voltage of our 8051 to the needed +/-12V of the RS232 protocol so that a computer can understand our 8051 and vice versa. To get our 8051 IC sending serial characters to a computer, we have to send these serial signals through a MAX232 circuit so that the computer receives +/-12V RS232 signals. Don't worry if you're working with a chip labeled 'ICL232' or 'ST232' - these are just generics of the MAX232. Everyone says 'MAX232'. The ICs all function the same and nearly all have the same pinout.
Uart Settings
- UART routines require you to specify the module you want to use. To select the desired UART, simply change the letter x in the prototype for a number from 1 to 2.
Number of UART modules per MCU differs from chip to chip. Please, read the appropriate datasheet before utilizing this library.
- Some MCUs have multiple UART modules. Switching between the UART modules in the UART library is done by the UART_Set_Active function (UART module has to be previously initialized).
- Some of the MCUs do not support UARTx_Init_Advanced routine. Please, refer to the appropriate datasheet.
Prototype | |
Returns | |
Description | The internal UART module module is set to:
Refer to the device datasheet for baud rates allowed for specific Fosc. |
MCU with the UART module. | |
// Initialize hardware UART1 and establish communication at 9600 bps |
void UARTx_Init_Advanced(unsigned long baud_rate, char adv_setting); | |||||||||||||||
Nothing. | |||||||||||||||
Configures and initializes UART module.
| |||||||||||||||
Requires | |||||||||||||||
Example | // Initialize hardware UART1 module and establish communication at 9600 bps, 8-bit data, even parity and 2 STOP bits UART1_Init_Advanced(9600, _UART_EVENPARITY, _UART_TWO_STOPBITS); |
Prototype | |
Returns |
|
Use the function to test if data in receive buffer is ready for reading. | |
MCU with the UART module. The UART module must be initialized before using this routine. See UARTx_Init and UARTx_Init_Advanced routines. | |
char receive; // read data if ready receive = UART1_Read(); |
Prototype | |
Returns | |
Description | The function receives a byte via UART. Use the UARTx_Data_Ready function to test if data is ready first. |
MCU with the UART module. The UART module must be initialized before using this routine. See UARTx_Init and UARTx_Init_Advanced routines. | |
char receive; // read data if ready receive = UART1_Read(); |
Prototype | void UARTx_Read_Text(char *Output, char *Delimiter, char Attempts); |
Nothing. | |
Reads characters received via UART until the delimiter sequence is detected. The read sequence is stored in the parameter output; delimiter sequence is stored in the parameter delimiter. This is a blocking call: the delimiter sequence is expected, otherwise the procedure exits (if the delimiter is not found).
| |
Requires | UART HW module must be initialized and communication established before using this function. See UARTx_Init and UARTx_Init_Advanced routines. |
Read text until the sequence “OK” is received, and send back what’s been received: Delay_ms(100); while (1) { if (UART1_Data_Ready() 1) { // if data is received UART1_Read_Text(output, 'OK', 10); // reads text until 'OK' is found } |
void UARTx_Write(char _data); | |
Nothing. | |
The function transmits a byte via the UART module.
| |
Requires | The UART module must be initialized before using this routine. See UARTx_Init and UARTx_Init_Advanced routines. |
unsigned char _data = 0x1E; UART1_Write(_data); |
Prototype | |
Returns | |
Description | Sends text via UART. Text should be zero terminated.
|
Requires | UART HW module must be initialized and communication established before using this function. See UARTx_Init and UARTx_Init_Advanced routines. |
Read text until the sequence “OK” is received, and send back what’s been received: Delay_ms(100); while (1) { if (UART1_Data_Ready() 1) { // if data is received UART1_Read_Text(output, 'OK', 10); // reads text until 'OK' is found } |
void UART_Set_Active(char (*read_ptr)(), void (*write_ptr)(unsigned char data_), char (*ready_ptr)()) | |
Nothing. | |
Sets active UART module which will be used by the UART library routines.
| |
Requires | Routine is available only for MCUs with two UART modules. Used UART module must be initialized before using this routine. See UARTx_Init and UARTx_Init_Advanced routines. |
// Activate UART2 module UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready); |
HW Connection