Sometimes when I am developing and debugging a system I need to monitor some intermediate result. I do this by sending ASCII text serially to a "dumb terminal" such as HyperTerm. Believe me, I have a PC on my workbench running COMM on MSDOS just for this purpose.
I also have a microcontroller based "dumb terminal" using an mcu driving a 2x16 LCD character display. This is what I used when I was testing the LM35 to ADC output.
Here is the code to transmit serial data via the UART:
Notes:
1) The UART on the MSP430G2553 is named UCA0. Transmit Data, TXD is on port P1.2, pin-4. The UART is configured for 8 bits, no parity, one stop bit, 9600 baud.
2) The TXD signal is a logic level voltage 0 to 3.6V. You will need a RS-232 driver chip in order to generate RS-232 compatible voltages.
3) You can slow down the output repetition rate by increasing the value of DELAY. The current rate is about 60 times per second.
4) I have written the code to send one character at a time using the function putc( ). Later I will show a puts( ) function to output a character string.
This leads to the next project: A "dumb terminal" example using the MSP430, LCD and UART.
I also have a microcontroller based "dumb terminal" using an mcu driving a 2x16 LCD character display. This is what I used when I was testing the LM35 to ADC output.
Here is the code to transmit serial data via the UART:
Code:
// MSP430 - UART Example
// 2013.06.20 - MrChips
#include "io430.h"
#define DELAY 1000
#define CAL 451
#define LF 10
#define CR 13
short v;
char d[5];
void bin2bcd(unsigned short v)
{
short i;
for (i = 0; i < 5; i++)
{
d[i] = v % 10;
v = v/10;
}
}
void init(void)
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1OUT = 0;
P1DIR = 0x7F;
}
void initADC(void)
{
// initialize 10-bit ADC
ADC10CTL1 = INCH_7 + CONSEQ_2; // use P1.7 (channel 7)
ADC10CTL0 |= ADC10SHT_3 + ADC10ON + MSC;
ADC10AE0 |= BIT7; // enable analog input on channel 7
ADC10CTL0 |= ADC10SC + ENC; // start conversions
}
void initUART(void)
{
// initialize USCI = UART
// TXD is on P1.2, select secondary peripheral function
P1SEL_bit.P2 = 1;
P1SEL2_bit.P2 = 1;
UCA0CTL1 |= UCSSEL_2;
UCA0BR0 = 104; // set for 9600 baud
UCA0BR1 = 0;
UCA0CTL1_bit.UCSWRST = 0; // release RESET
}
void putc(unsigned char c)
{
while (UCA0STAT_bit.UCBUSY);
UCA0TXBUF = c;
}
void delay(unsigned long d)
{
unsigned long i;
for (i = 0; i < d; i++);
}
void main( void )
{
init();
initADC();
initUART();
while (1)
{
v = ADC10MEM;
v = v * CAL;
v = v >> 7;
bin2bcd(v);
putc(d[4] + '0');
putc(d[3] + '0');
putc(d[2] + '0');
putc(d[1] + '0');
putc('.');
putc(d[0] + '0');
putc(CR);
putc(LF);
delay(DELAY);
}
}
1) The UART on the MSP430G2553 is named UCA0. Transmit Data, TXD is on port P1.2, pin-4. The UART is configured for 8 bits, no parity, one stop bit, 9600 baud.
2) The TXD signal is a logic level voltage 0 to 3.6V. You will need a RS-232 driver chip in order to generate RS-232 compatible voltages.
3) You can slow down the output repetition rate by increasing the value of DELAY. The current rate is about 60 times per second.
4) I have written the code to send one character at a time using the function putc( ). Later I will show a puts( ) function to output a character string.
This leads to the next project: A "dumb terminal" example using the MSP430, LCD and UART.