90 likes | 184 Views
Learn how to utilize digital I/O ports to control external sources in AVR programming. Explore coding examples and practical applications for robots, such as reading push buttons and changing orb colors rapidly. No need to memorize addresses - everything is defined for you!
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