AVR Programming:
Digital I/OSeptember 10, 2010
What is Digital I/O?
Digital – A 1 or 0 Input – Data (a voltage) that
the microcontroller is reading from an external source
Output – Data (a voltage) that the microcontroller is setting to be used by an external source
2
Where does this happen?
I/O Ports 6 8-bit I/O ports
(A-F) 1 4-bit I/O port (G) Most have an
alternate purpose
3
How do I access these pieces of metal in software?
They are memory mapped Certain memory addresses are reserved for I/O
Registers A few examples (Ports A-D):
4
55
Do I need to memorize those addresses? No! #include <avr/io.h> Each register and bit within it is defined for you
6
How does this look in code?
//set the bottom three bits of Port A to outputDDRA |= _BV(DDA0) | _BV(DDA1) | _BV(DDA2);
//output high on pins 0 and 2 of port APORTA |= _BV(PA0) | _BV(PA2);
//output low on pin 1 of port APORTA &= ~(_BV(PA1));
//set Port B to input DDRB = 0x00;
//read Port Bchar x = PINB;
7
What can we do with this on the robots?
Note: Pin 33 and 34 are PG0 and PG1
8
Stuff to try out
Reading from the push buttons – make sure to enable internal pull up (PORTG |= 3;)
Turning on the orbs Rapidly turning the orbs on and off
– Maybe even in patterns (off off on off off on…) Rapidly switching orb colors
– e.g. (blue green off blue green off…) Combinations of above You should not need the dragonfly library
9
Help/More Info
Datasheet:http://www.atmel.com/dyn/resources/prod_documents/doc2467.pdf