programming the atmega16 b. furman 14sep2010. mechatronics concept map system to control sensor...

16
Programming the ATmega16 B. Furman 14SEP2010

Post on 19-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Programming the ATmega16

B. Furman

14SEP2010

Mechatronics Concept Map

System toControl

Sensor

SignalConditioning

Controller(Hardware & Software)

PowerInterface

Actuator

UserInterface

PowerSource

BJ Furman 26JAN06

ME 106ME 154ME 157ME 195

ME 120ME 297A

ME 106ME 120

ME 106ME 190ME 187

ME 110ME 136ME 154ME 157

ME 182ME 189ME 195

ME 106ME 120

ME 106

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

main_RC.c Programmer’s block #include Initialization function, init();

DDRA, DDRB, and uart_init()

01234567

Test Your Comprehension Write a statement that will make all pins of

PORTC to be outputs DDRC = 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;

0xFF;

Structure of main() Look again at main_RC.c

init() printf_example()

Declaration of variables char, string, uint8_t, uint16_t, uint32_t, double

printf() format string

while(1) 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

Data Direction bit in DDRx register (read/write)

PORTxn 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

Make bits 5 and 3 of PORTB high and the rest low

Challenge:

Summary of Bit Manipulation Setting a bit (making it a ‘1’)

Bitwise OR the PORTx register with the corresponding bit mask Ex. PORTB | = _BV(3);

Clearing a bit (making it a ‘0’) Bitwise AND the PORTx register with the

corresponding complemented bit mask 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 portpins by reading the PINx register

Grabs all eight logic levels at the same time Ex. PORTA configured as inputs

PA0

PA1

PA2

PA3

PA4

PA5

PA6

PA7

VTG

unsigned char a_pins;

a_pins=PINA;

What is the content of a_pins:

binary:__________

hex:_____

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? PA0

PA1

PA2

PA3

PA4

PA5

PA6

PA7 VTG

Reading PORTA Pins Example

unsigned char testA;

DDRA=0;

testA=PINA;

What is the content of testA?

binary: 11111001

hex: F9 PA0

PA1

PA2

PA3

PA4

PA5

PA6

PA7 VTG