90 likes | 174 Views
AVR Programming: Digital I/O September 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.
E N D
AVR Programming: Digital I/O September 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
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
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):
Do I need to memorize those addresses? No! #include <avr/io.h> Each register and bit within it is defined for you 5
How does this look in code? //set the bottom three bits of Port A to output DDRA |= _BV(DDA0) | _BV(DDA1) | _BV(DDA2); //output high on pins 0 and 2 of port A PORTA |= _BV(PA0) | _BV(PA2); //output low on pin 1 of port A PORTA &= ~(_BV(PA1)); //set Port B to input DDRB = 0x00; //read Port B char x = PINB;
What can we do with this on the robots? Note: Pin 33 and 34 are PG0 and PG1
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
Help/More Info Datasheet: http://www.atmel.com/dyn/resources/prod_documents/doc2467.pdf