Programming the ATmega128

advertisement
Programming the ATmega16
B. Furman
14SEP2010
Mechatronics Concept Map
Power
Source
User
Interface
ME 106
ME 120
Controller
(Hardware & Software)
ME 106
Power
Interface
Signal
Conditioning
ME 106
ME 154
ME 157
ME 195
ME 106
ME 190
ME 187
ME 106
ME 120
Actuator
Sensor
ME 120
ME 297A
System to
Control ME 110 ME 182
ME 136 ME 189
ME 154 ME 195
ME 157
BJ Furman 26JAN06
Recap Last Lecture



Binary and hex numbers
Digital pins as inputs or outputs
Pins are bidirectional for digital I/O

DDRx (x=A, B, C, or D) register determines direction

8-bit register



a ‘1’ means
a ‘0’ means
7
6
5
main_RC.c



Programmer’s block
#include
Initialization function, init();

DDRA, DDRB, and uart_init()
4
3
2
1
0
Test Your Comprehension

Write a statement that will make all pins of
PORTC to be outputs

DDRC = 0xFF;
 DDRC = 0b11111111;
 DDRC = 255;

Write a statement that will make pins 5, 3,
and 1 of PORTC to be outputs, and the
rest inputs

DDRC = 0b00101010;
Structure of main()

Look again at main_RC.c


init()
printf_example()

Declaration of variables


printf()


format string
while(1)


char, string, uint8_t, uint16_t, uint32_t, double
Why?
PORTB = PINA;

Explain what is going on as a result of this statement
ATmega16 Port Pin Details
See the ATmega 16 data sheet, p. 50 - 67
 Port pins consist of three register (special
memory location) bits:


DDRx


PORTxn


Data Direction bit in DDRx register (read/write)
PORTxn bit in PORTx data register (read/write)
PINxn

PINxn bit in PINx register (read only)
PORT Pin
Schematic
ATmega16
Internal
Architecture
http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf
ATmega16 Features
http://www.atmel.com/dyn/resources/prod_documents/doc2467.pdf
Bit Manipulations

Examples of how to work with Port pins

Setting bits
 Clearing bits
 Toggling bits
Challenge:
Make bits 5 and 3 of PORTB high and the rest low
Summary of Bit Manipulation

Setting a bit (making it a ‘1’)

Bitwise OR the PORTx register with the
corresponding bit mask


Clearing a bit (making it a ‘0’)

Bitwise AND the PORTx register with the
corresponding complemented bit mask


Ex. PORTB | = _BV(3);
Ex. PORTB & = ~( _BV(3) );
Toggling a bit (making it flip)

Bitwise XOR the PORTx register with the
corresponding bit mask

Ex. PORTB ^ = _BV(3);
Pull-up Resistors

Pins configured as INPUTS can be ‘pulled
up’ to VTG

Why is this useful?
Puts an input pin in a known state (logic high) if no
external influence has pulled it down (to logic low)
 Example of a switch connected between a pin and
ground


How is it done?
When the pin is configured as an input, SET the
corresponding bit in PORTxn
 Undone by clearing the bit

Recap ATmega16 Digital I/O

Pins are bi-directional. Can configure as:



Inputs – _______ determines the pin voltage
Outputs – ______ determines the pin voltage
Direction determined by bits in DDRx register


Where x is A – D (and corresponds to all 8 pins associated
with the port)
If configured as output:

Program can specify a pin to be high (VTG) or low (GND) by
writing a corresponding 1 or 0 (respectively) to PORTx
register


Ex. To make Port C pins 7, 3, and 4 low, and the rest high
PORTC=___________; (write in binary, then in hex)
Recap ATmega16 Digital I/O, cont.

If pins configured as input, this means:

External device can pull pin voltage high or low


i.e. take up to VTG or take down to GND
You can determine the state of the port
pins by reading the PINx register
Grabs all eight logic levels at the same time
PA7
 Ex. PORTA configured as inputs

unsigned char a_pins;
a_pins=PINA;
What is the content of a_pins:
binary:__________
hex:_____
PA6
PA5
PA4
PA3
PA2
PA1
PA0
VTG
Recap ATmega16 Digital I/O, cont.

If pins configured as input, cont.:

Can turn pull-up resistors on or off by
writing a 1 or 0 to corresponding pins
in PORTx


A pull-up resistor internally connects a
pin to VTG to give it a defined state
(logic high, i.e., 1)
Ex. Write the code that will:
Make Port A pins inputs
 Turn on pull-up resistors
 Read the voltages on the pins and store
them in a variable, testA
 What is the value of testA in binary
and hex?

PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA0
VTG
Reading PORTA Pins Example
unsigned char testA;
PA7
DDRA=0;
PA6
testA=PINA;
PA5
What is the content of testA?
PA3
binary: 11111001
PA4
PA2
PA1
hex: F9
PA0
VTG
Download