+ All Categories
Home > Documents > 2 SerComm.1 - Basic Serial Communication SerComm.2 - ATmega16 Serial Communication SerComm.3 -...

2 SerComm.1 - Basic Serial Communication SerComm.2 - ATmega16 Serial Communication SerComm.3 -...

Date post: 24-Dec-2015
Category:
Upload: howard-montgomery
View: 228 times
Download: 1 times
Share this document with a friend
54
EE138 Serial Communication
Transcript
Page 1: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

EE138Serial Communication

Page 2: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

2

SerComm.1 - Basic Serial Communication SerComm.2 - ATmega16 Serial

Communication SerComm.3 - Examples & Debugging tool

Agenda & Acknowledgement

Special acknowledgement to Dr. Lam Phung of University of Wollongongfor sharing his lecture notes and lab notes!

Page 3: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

3© University of Wollongong, 2012.

An application of serial communication

An STK500 board is programmed to control a pan-tilt video camera, via aserial connection. In this lecture, you’ll learn to create such a program.

pan-tilt programmable video camera

null-modem connection

TXD = Port D.1RXD = Port D.0

Page 4: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

4© University of Wollongong, 2012.

SerComm.1 - Basic Serial communication

Computers transfer data in two ways: parallel and serial.

Parallel: Several data bits are transferred simultaneously, e.g. to

printers and hard disks.

Serial: A single data bit is transferred at one time.

Advantages of serial communication: longer distances, easier to

synchronise, fewer IO pins, and lower cost.

Serial communication often requires

Shift registers: convert a byte to serial bits and vice versa.

Modems: modulate/demodulate serial bits to/from audio tones.

Page 5: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

5© University of Wollongong, 2012.

Synchronous versus asynchronous

Synchronous serial communication

The clocks of the sender and receiver are synchronised.

A block of characters, enclosed by synchronising bytes, is sent

at a time.

Faster transfer and less overhead.

Examples: serial peripheral interface (SPI) by Motorola,

binary synchronous communication (BISYNC) by

IBM.Asynchronous serial communication

The clocks of the sender and receiver are not synchronised.

One character (8 or 7 bits) is sent at a time, enclosed between

a start bit and one or two stop bits. A parity bit may be included.

Examples: RS-232 by Electronic Industries Alliance,

USART of ATmega16

Page 6: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

6© University of Wollongong, 2012.

BISYNC Data framing examples

SYN SYN STX DATA FIELD ETX BCC PAD

BISYNC Control Characters SYN (16h): synchronisationSTX (02h): start of textETX (03h): end of textBCC: block checksum charPAD (FFh): end of frame block

Data Framing in Synchronous BISYNC

Page 7: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

7EE138 – SJSU

start bit LSB MSB stop bits

parity bit

1 0 0 0 0 10 0 0

Data Framing in Asynchronous Transmission

Sending character “A” (41h = 0100 0001)8-bit data, 1 start bit, 2 stop bits, even-parity

Receiver

Data framing examples

Page 8: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

8© University of Wollongong, 2012.

Serial communication terminology

Bit rate: number of bits sent per second (bps). Baud rate: number of signal units per second. If a signal unit is composed of n bits, then the bit rate is n times higher

than baud rate.

Parity bit: A single bit for error checking, sent with data bits to make the total number of 1’s even (for even parity) or odd (for odd parity).

Start bit: to indicate the start of a character. Its typical value is 0.

Stop bit: to indicate the end of a character. Its typical value is 1.

Page 9: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

9© University of Wollongong, 2012.

The RS-232 standard

The RS-232 (latest revision RS-232E) is a widely used standard for serial interfacing.

It covers four main aspects.

Electrical: voltage level, rise and fall time, data rate, distance.

Functional: function of each signal

Mechanical: number of pins, shape & dimension of connectors.

Procedural: sequence of events for transmitting data.

Page 10: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

10© University of Wollongong, 2012.

The RS-232 standard

It defines 25-pin D connectors. In many cases, 9-pin connectors are also used.

Male DB9 connector

1 2 3 4 5

6 7 8 9

Female DB9 connector

5 4 3 2 1

9 8 7 6

RS-232 specifies the bit rate up to 20Kbps, and the cable length up to 15m. In practice, it supports up to 56Kbps & 30m of shielded cables.

Page 11: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

11© University of Wollongong, 2012.

RS-232 9-pin connector

PinName

Description

1 CD Carrier Detect: DCE has detected a carrier tone

2 RXD Received Data: incoming data from DCE

3 TXD Transmit Data: outgoing data to DCE

4 DTR Data Terminal Ready: DTE is connected and turned on

5 GND Ground

6 DSR Data Set Ready: DCE is connected and turned on

7 RTS Request To Send: DTE has data to send

8 CTS Clear To Send: DCE can receive data

9 RIRing Indicator: synchronised with the phone’s ringing toneData Terminal Equipment (DTE) essentially refers to the computer.

Data Communication Equipment (DCE) essentially refers to a remote device or modem.

These terms are needed to explain the pin functions.

Page 12: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

12© University of Wollongong, 2012.

Modem connectionModem A

DCEComputer A

DTE

RXD

CD

CTSCTS

RXD

CD

DTR

TXD

DTR

TXD

DSR

GND

DSR

GND

RTSRTS

RIRI

Modem BDCE

RXD

CD

CTSCTS

RXD

CD

DTR

TXD

DTR

TXD

DSR

GND

DSR

GND

RTSRTS

RIRI

Computer BDTE

Phone Line

RS-2322 was originally used with modems to connect two PCs

over the public phone lines.

When computer A has data to send, it assert its RTS pin.

Modem A will assert its CTS when it is ready to receive.

Computer A transmits data through its TXD.

Page 13: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

13© University of Wollongong, 2012.

Null-modem connection

RS-232 is now mainly used to connect a microcontroller with PC or

peripheral devices (e.g. GPS receiver, infrared range finder, camera).

This configuration is known as null-modem.

Key idea:

Connect pin TXD of a DTE with pin RXD of the other DTE.

Wire other pins to support flow control.

DTEDTERXD

CD

CTSCTS

RXD

CD

DTR

TXD

DTR

TXD

DSR

GND

DSR

GND

RTSRTS

RIRI

Simplest cable

DTEDTE

RXD

CD

CTSCTS

RXD

CD

DTR

TXD

DTR

TXD

DSR

GND

DSR

GND

RTSRTS

RIRI

Full handshaking cable

Page 14: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

14

RS-232 interface and MAX232 chip

Logic RS-232 levels TTL levels1 [-15V, -3V] [+2V, +5V]

0 [+3V, +15V] [0V, +0.8V]

© University of Wollongong, 2012.

Compared to TTL

computer electronics,

RS-232 interface uses

different voltage levels.

A level converter is

required between RS-

232 interface and

TXD/RXD pins of

microcontroller.

MAX232 chip is often

used for this purpose.

Page 15: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

15© University of Wollongong, 2012.

Serial communication — An example

ultrasounddistance sensor

Bluetooth receiver

wirelessBluetooth transmitter

serial

The sensor sends data via a serial interface to Bluetooth transmitter.

A Bluetooth receiver, connected to a PC, is configured as a serial port.

A demo, created by Adrian Herrera, is shown in the lecture.

PCUSB

(virtual serial port)

Page 16: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

16© University of Wollongong, 2012.

SerComm.2 - ATmega16 Serial communication

ATmega16 provides three subsystems for serial communication.◦ Universal Synchronous & Asynchronous Receiver &

Transmitter (USART)◦ Serial Peripheral Interface (SPI)◦ Two-wire Serial Interface (TWI)

USART:

We focus on this subsystem in this lecture.

Supports full-duplex mode between two devices.

Typically used in asynchronous communication.

Start bit and stop bit are used for each byte of data.

Page 17: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

17© University of Wollongong, 2012.

ATmega16 Serial communication

Serial Peripheral Interface (SPI)

The receiver and transmitter share a common clock line.

Supports higher data rates.

The transmitter is designated as the master, the receiver as the

slave.

Examples of devices using SPI: liquid crystal display, high-speed

analogue-to-digital converter.

Two-wire Serial Interface (TWI):

Connect several devices such as microcontrollers and display

boards, using a two-wire bus.

Up to 128 devices are supported.

Each device has a unique address and can exchange data with

other devices in a small network.

Page 18: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

18© University of Wollongong, 2012.

Serial USART ─ An overview

USART of the ATmega16 supports◦ baud rates from 960bps to

57.6kbps,◦ character size: 5 to 9 bits,◦ 1 start bit,◦ 1 or 2 stop bits,◦ parity bit (optional: even or odd

parity).

Common baud rates are 19200, 9600, 4800, 2400, and 1200 bps.

Page 19: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

19© University of Wollongong, 2012.

Serial USART ─ Block diagram

a) TxD and RxD pins to other device

c) Register UBRR to set baud rate

b) Registers to configure/ monitor USART

d) Register UDR to store the sent/received byte

Page 20: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

20© University of Wollongong, 2012.

Serial USART ─ Hardware elements

USART Clock Generator: ◦ to provide clock source.◦ to set baud rate using UBRR register.

USART Transmitter:

to send a character through TxD pin.

to handle start/stop bit framing, parity bit, shift register.

USART Receiver:

to receive a character through RxD pin.

to perform the reverse operation of the transmitter.

USART Registers:

to configure, control, and monitor the serial USART.

Page 21: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

21© University of Wollongong, 2012.

Serial USART ─ Three groups of registers USART Baud Rate Registers

◦ UBRRH and UBRRL

USART Control and Status Registers

UCSRA

UCSRB

UCSRC

USART Data Registers

UDR

Understanding these registers is essential in using the serial port.

Therefore, we’ll study these registers in depth.

Page 22: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

22© University of Wollongong, 2012.

USART Baud Rate Registers

Two 8-bit registers together define the baud rate.

system clock frequency (Hz)baud rate =

16(UBRR +1)

system clock frequency (Hz)UBRR =

16 baud rate1

Example: Find UBRR registers for baud rate of 1200bps, assuming

system clock is 1MHz.

UBRR = 1000000/(16 × 1200) ─ 1 = 51d = 0033H.

Therefore, UBRRH = 00H and UBRRL = 33H.

C code

UBRRH = 0x00; UBRRL = 0x33;

01234567

089101112131415

register UBRRLregister UBRRH

URSEL

Page 23: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

23© University of Wollongong, 2012.

USART Control and Status Register A (UCSRA)

RXC TXC UDRE FE DOR PE U2X MPCM

01234567

1 when USART data register is empty

1 when no new data in transmit buffer (tx complete)

1 when receive buffer has unread data (rx complete)

1 when there is frame error

1 when there is data overun

1 when there is parity error

1 to double the transmission speed

1 to enable multi-processor com mode

Page 24: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

24© University of Wollongong, 2012.

USART Control and Status Register B (UCSRB)

RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8

01234567

1 to enable USART Data Register Empty Interrupt

1 to enable TX Complete Interrupt, valid only if Global Interrupt Flag = 1 and TXC = 1

1 to enable RX Complete Interrupt, valid only if Global Interrupt Flag = 1 and RXC = 1

1 to enable USART receiver: Pin D.0 = RXD pin

1 to enable USART transmitter: Pin D.1 = TXD pin

bit UCSZ2 to decide character size

Rx extra data bit for 9-bit character size

Tx extra data bit for 9-bit character size

Page 25: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

25© University of Wollongong, 2012.

USART Control and Status Register B (UCSRC)

URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL

01234567

To select USART modes: 0 asynchronous, 1 synchronous

Must be set to 1 to write to UCSRC. Note: UCSRC and UBRRH share same location.

To select stop bit modes: 0 1 stop bit, 1 2 stop bits

Clock polarity, used with synchronous

To select parity mode: 00 no parity, 10 even party, 11 odd parity

Used with UCSZ2 to select character size

Page 26: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

26© University of Wollongong, 2012.

Setting character sizeCharacter size (5, 6, 7, 8, 9) is determined by three bits

bit UCSZ2 (in register UCSRB),

bit UCSZ1 and bit UCSZ0 (in register UCSRC).

Example: For a character size of 8 bits, we set

UCSZ2 = 0, UCSZ1 = 1, and UCSZ0 = 1.

Page 27: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

27© University of Wollongong, 2012.

USART Data Register

Register UDR is the buffer for characters sent or received through the serial port.

To start sending a character, we write it to UDR.

unsigned char data;

data = ‘a’;

UDR = data; // start sending character

To process a received character, we read it from UDR.

unsigned char data;

data = UDR; // this will clear UDR

Page 28: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

28© University of Wollongong, 2012.

Serial USART ─ Main tasks

Task 1 - Initialising the serial port.

Task 2 - Sending a character.

Task 3 - Receiving a character.

Task 4 - Sending/receiving formatted strings.

There are 4 main tasks in using the serial port.

Page 29: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

29© University of Wollongong, 2012.

Task1 - Initializing serial port

Set USART communication parameters(data bits, stop bit, parity bit)

Set USART for asynchronous mode

Set baud rate

begin

end

Enable transmitter and receiver

Page 30: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

30© University of Wollongong, 2012.

Initialising serial port ─ Example

void USART_init(void){ // Asynchronous mode, no parity, 1 stop bit, 8 data bitsUCSRC = 0b10000110;

// Normal speed, disable multi-procUCSRA = 0b00000000;

// Baud rate 1200bps, assuming 1MHz clockUBRRL = 0x33;UBRRH = 0x00;

// Enable Tx and Rx, disable interruptsUCSRB = 0b00011000;

}

Initialise serial port of ATmega16 to baud rate 1200 bps, no parity,

1 stop bit, 8 data bits. Assume a clock speed of 1MHz.

Page 31: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

31© University of Wollongong, 2012.

Task2 - Sending a character

Write the character to register UDRfor transmission

begin

end

Has UDRE flag been set to 1?(register UCSRA)

Yes

No

Page 32: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

32© University of Wollongong, 2012.

Sending a character ─ Example

Write a C function to send a character through ATmega16 serial port.

void USART_send(unsigned char data){ // Wait until UDRE flag = 1

while ((UCSRA & (1<<UDRE)) == 0x00){;} // Write char to UDR for transmission

UDR = data; }

RXC TXC UDRE FE DOR PE U2X MPCMUCSRA

0 0 UDRE 0 0 0 0 0bit-wise

ANDBit-wise AND returns zero if bit UDRE = 0

Constant UDRE is defined in avr/io.h

#define UDRE 50 0 1 0 0 0 0 01<<UDRE

Page 33: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

33© University of Wollongong, 2012.

Task3 - Receiving a character

Read the received character from register UDR

begin

end

Has RXC flag been set to 1?(Register UCSRA)

Yes

No

Page 34: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

34© University of Wollongong, 2012.

Receiving a character ─ Example

Write a C function to receive a character via ATmega16 serial port.

unsigned char USART_receive(void){

// Wait until RXC flag = 1

while ((UCSRA & (1<<RXC)) == 0x00){;}

// Read the received char from UDR

return (UDR);

}

RXC TXC UDRE FE DOR PE U2X MPCMUCSRA

RXC 0 0 0 0 0 0 0bit-wise

ANDBit-wise AND returns zero if bit RXC = 0

Constant RXC is defined in avr/io.h

#define RXC 71 0 0 0 0 0 0 01<<RXC

Page 35: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

35© University of Wollongong, 2012.

Task4 - Sending/receiving formatted strings In ANSI C, the header file <stdio.h> has two

functions for formatted strings: printf and scanf.

Function printf sends a formatted string to the standard output device,

which is usually the video display.

unsigned char a, b;

a = 2; b = 3;

printf(“first = %d, second = %d, sum = %d”, a, b, a + b);

Function scanf reads a formatted string from the standard input

device, which is usually the keyboard.

unsigned char a, b;

scanf(“%d %d”, &a, &b); // get integers a, b from input string

Page 36: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

36© University of Wollongong, 2012.

Sending/receiving formatted strings

Being able to send/receive formatted strings through a serial port is useful in microcontroller applications.

To this end, we configure the serial port as the standard input and

output devices.

General steps:

1) Write two functions to send and receive a character via serial port.

2) In main(), call fdevopen() to designate the two functions as the

handlers for standard output and input devices.

3) Use printf/scanf as usual. Formatted strings will be sent/received

via serial port.

Page 37: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

37© University of Wollongong, 2012.

Tx/Rx formatted strings ─ Example#include <avr/io.h>#include <stdio.h>

int USART_send(char c, FILE *stream){ // wait until UDRE flag is set to logic 1

while ((UCSRA & (1<<UDRE)) == 0x00){;}UDR = c; // Write character to UDR for transmission

}

int USART_receive(FILE *stream){ // wait until RXC flag is set to logic 1

while ((UCSRA & (1<<RXC)) == 0x00){;}return (UDR); // Read the received character from UDR

}

int main(void){ unsigned char a; // … Code to initialise baudrate, TXD, RXD, and so on is not shown here

// Initialise the standard IO handlersstdout = fdevopen(USART_send, NULL);stdin = fdevopen(NULL, USART_receive);

// Start using printf, scanf as usualwhile (1){

printf(“\n\rEnter a = "); scanf(“%d”, &a); printf(“%d”, a); }}

Page 38: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

38© University of Wollongong, 2012.

SerComm.3 - Example application

The MCAM100 is a programmable pan-tilt video camera.

It is controlled via a serial connection: 8 data bit, 1 stop bit, no parity

bit, baud rate 9600bps.

Sending character ‘4’ or ‘6’ turns the camera left or right,

respectively.

We’ll write an ATmega16 program to rotate the camera repeatedly.

Page 39: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

39© University of Wollongong, 2012.

camera.c#include <avr/io.h>void delay(void){

for (int i = 0; i < 1000; i++) for (int j = 0; j < 100; j++)

asm volatile("nop");}

void USART_init(void){ UCSRA = 0b00000010; // double speed, disable multi-proc

UCSRB = 0b00011000; // Enable Tx and Rx, disable interruptsUCSRC = 0b10000110; // Asyn mode, no parity, 1 stop bit, 8 data bits// in double-speed mode, UBRR = Fclock/(8xbaud rate) - 1

UBRRH = 0; UBRRL = 12; // Baud rate 9600bps, assuming 1MHz clock}

void USART_send(unsigned char data){while ((UCSRA & (1<<UDRE)) == 0x00){;} // wait until UDRE flag = 1UDR = data; // Write character to UDR for transmission

}

int main(void) {unsigned char i;USART_init(); // initialise USARTwhile (1) {

for (i = 0; i < 10; i++){ // rotate left 10 times USART_send('4'); delay();

}for (i = 0; i < 10; i++){ // rotate right 10 times USART_send('6');

delay();}

}}

Page 40: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

40© University of Wollongong, 2012.

Debugging tool: Hyper Terminal

Sending/receiving data through serial port is useful for debugging a microcontroller program.

A program for monitoring serial data is Hyper Terminal

(It is part of Windows XP, its 3 files can be copied to run on Windows 7).

Hyper Terminal is used to

create a serial connection between the PC and the microcontroller.

send a text string to the microcontroller.

receive a text string sent from the microcontroller.

For example, let’s use Hyper Terminal to debug the program camera.c.

Page 41: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

41© University of Wollongong, 2012.

Debugging tool: Hyper Terminal

Step 1: ◦ Download and run camera.hex on the STK500 board. ◦ Remove the serial cable from RS232 Control connector.

Step 2:

Attach the serial cable to RS232 Spare connector.

Connect pin RXD RS232 Spare to pin D.0.

Connect pin TXD RS232 Spare to pin D.1.

Step 3:

Start program in Accessories | Communications | Hyper Terminal.

Configure Hyper Terminal for correct baud rate, parity, data bit, stop

bit, flow control.

Page 42: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

42© University of Wollongong, 2012.

Debugging tool: Hyper Terminal

1. Create a new connection that uses a COM port of PC

2. Setup COM port parameters that match the C program, & Connect

3. HyperTerminal displays all messages sent by our C program.

Code in camera.c:

USART_send('4');

USART_send('6');

Page 43: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

43© University of Wollongong, 2012.

Summary

What we learned in this lecture:◦Basics of serial communication.◦Serial communication subsystem in

ATmega16.◦Using serial port to send/receive characters

and formatted strings.

Page 44: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

Exercise

EE138 – SJSU

Page 45: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

45

EXAMPLE 2–6Sketch the serial and parallel representations of the decimal number 74. Given a clock frequency of 4 kHz. a) Find the time to transmit using each method. b) What is the state (1 or 0) of the serial line 1.2 ms into the transmission?

Solution: 7410 = 0 1 0 0 1 0 1 02.

Therefore, the increment of time at each falling edge increases by 0.25ms. Because each period is 0.25ms, 1.2ms will occur within the number 4 period, which, on the So line, is a 0 logic state.

Page 46: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

46EE138 – SJSU

ASCII Table

Page 47: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

47

Page 48: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

4848

Example:a) Find the overhead due to framing when transmitting the ASCII letter “A” (01000001).b) Calculate the time it takes to transfer 10,000 characters as in question a) if we use 9600 bps. What percentage of time is wasted due to overhead?

Solutions:a) 2 bits (one for the start bit and one for the stop bit). Therefore, for each 8-bit character, a total of 10 bits is transferred. b) 10,000 × 10 = 100,000 total bits transmitted. 100,000 / 9600 = 10.4 seconds; 2 / 10 = 20%.

Page 49: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

4949

Baud Rate in the AVR

In the AVR microcontroller five registers are associated with the USART. They are UDR (USART Data Register), UCSRA, UCSRB, UCSRC (USART Control Status Register), and UBRR (USART Baud Rate Register).

Desired Baud Rate = Fosc/ (16(X + 1))

where X is the value we load into the UBRR register. To get the X value for different baud rates we can solve the equation as follows:

X = (Fosc/ (16(Desired Baud Rate))) – 1

Assuming that Fosc = 8 MHz, we have the following:

Desired Baud Rate = Fosc/ (16(X + 1)) = 8 MHz/16(X + 1) = 500 kHz/(X + 1)

X = (500 kHz/ Desired Baud Rate) – 1

Page 50: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

5050

Examples:1) Find Baud Rate if UBRR = 67H = 103Solution:Desired Baud Rate = Fosc/(16(X + 1)) = 8MHz/(16(103+1)) = 4807 bps

2) Find the UBRR value needed to have the following baud rates: (a) 9600 (b) 1200 for Fosc = 8 MHz.Solution:Fosc = 8 MHz => X = (8 MHz/16(Desired Baud Rate)) – 1=> X = (500 kHz/(Desired Baud Rate)) – 1(a) (500 kHz/ 9600) – 1 = 52.08 – 1 = 51.08 = 51 = 33 (hex) is loaded into UBRR(b) (500 kHz/ 1200) – 1 = 416.66 – 1 = 415.66 = 415 = 19F (hex) is loaded into UBRR

Page 51: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

5151

Baud Rate Generation Block Diagram

Doubling the baud rate in the AVRThere are two ways to increase the baud rate of data transfer in the AVR: 1. Use a higher-frequency crystal (not feasible in many cases).2. Change a bit in the UCSRA register (U2X = 1).

Desired Baud Rate = Fosc / (8 (X + 1)) when U2x = 1

Page 52: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

52© University of Wollongong, 2012.

References

L. Phung, Lecture & Lab Notes, http://www.elec.uow.edu.au/avr/index.php

Atmel Corp., 8-bit AVR microcontroller with 16K Bytes In-System Programmable Flash ATmega16/ATmega16L, 2007,

[USART]. S. F. Barrett and D. J. Pack, Atmel AVR Microcontroller Primer:

Programming and Interfacing, 2008, Morgan & Claypool Publishers, [Chapter 8: Serial Communication Subsystem].

D. V. Gadre, Programming and Customizing the AVR Microcontroller, McGraw-Hill, 2001, [Chapter 7: Communication Links for the AVR Processor].

Page 53: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

53© University of Wollongong, 2012.

References

M. Mazidi, J. Mazidi, R. McKinlay, “The 8051 microcontroller and embedded systems using assembly and C,” 2nd ed., Pearson Prentice Hall, 2006, [Chapters 10].

M. Mazidi and J. Mazidi, “The 8086 IBM PC and compatible computers,” 4th ed., Pearson Prentice Hall, 2003, [Chapters 17].

P. Spasov, “Microcontroller technology the 68HC11,” 3rd ed., Prentice Hall, 1999, [Chapters 10].

H. Huang, “MC68HC12 an introduction: software and hardware interfacing,” Thomson Delmar Learning, 2003, [Chapter 9].

Page 54: 2  SerComm.1 - Basic Serial Communication  SerComm.2 - ATmega16 Serial Communication  SerComm.3 - Examples & Debugging tool Special acknowledgement.

54

J. Pardue, C Programming for Microcontrollers, 2005, SmileyMicros◦ [Chapters 1-6].

S. F. Barrett and D. J. Pack, Atmel AVR Microcontroller Primer: Programming and Interfacing, 2008, Morgan & Claypool Publishers, ◦ [Chapter 1]

http://www.mathcs.emory.edu/~cheung/Course/455/Syllabus/3-datalink/framing.html

The AVR Microcontroller and Embedded Systems: Using Assembly and C - Muhammad Ali Mazidi; Sarmad Naimi; Sepehr Naimi

Atmel Material◦ http://www.atmel.com/Images/doc2466.pdf◦ http://www.atmel.com/devices/atmega8515.aspx?tab=document

s◦ http://www.atmel.com/tools/STK500.aspx

STK500 User Guide http://www.atmel.com/Images/doc1925.pdf

References


Recommended