<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://old.hacdc.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JoshuaHooper</id>
	<title>HacDC Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://old.hacdc.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JoshuaHooper"/>
	<link rel="alternate" type="text/html" href="https://old.hacdc.org/index.php/Special:Contributions/JoshuaHooper"/>
	<updated>2026-05-07T17:55:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://old.hacdc.org/index.php?title=AVR_Microcontroller_Class_2011&amp;diff=5560</id>
		<title>AVR Microcontroller Class 2011</title>
		<link rel="alternate" type="text/html" href="https://old.hacdc.org/index.php?title=AVR_Microcontroller_Class_2011&amp;diff=5560"/>
		<updated>2011-08-15T18:09:02Z</updated>

		<summary type="html">&lt;p&gt;JoshuaHooper: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Syllabus, course material, homeworks, photos, etc from an Introduction to Microcontrollers with AVR chips class can be found here.  &lt;br /&gt;
&lt;br /&gt;
Also see (and contribute to) [[Useful AVR Links]]&lt;br /&gt;
For info about the kit: [[Avr2011_kit]] and [[Avr2011 Programming The Kit]]&lt;br /&gt;
Or check out the old version of the course [[AVR Microcontroller Class 2009]]&lt;br /&gt;
&lt;br /&gt;
== Class 0: Introduction and Setup ==&lt;br /&gt;
&lt;br /&gt;
Hello World!  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Covers&#039;&#039;&#039;: What the AVRs are, what all the pins do, what they can do for you. A&lt;br /&gt;
brief tour of the toolchain, and getting your firmware up and running&lt;br /&gt;
on the chip.  Reading the datasheets.  How to make chips speak digital&lt;br /&gt;
to the outside world, pin-by-pin. Just enough C programming &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.diamondlinks.net &amp;lt;span style=&amp;quot;color:black;font-weight:normal; text-decoration:none!important; background:none!important; text-decoration:none;&amp;quot;&amp;gt;link building service&amp;lt;/span&amp;gt;] fundamentals to&lt;br /&gt;
make it work.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slides:&#039;&#039;&#039; [[Media:avr2011_class0.pdf]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lab&#039;&#039;&#039;: Building the kit and running a test LED flasher. &lt;br /&gt;
&lt;br /&gt;
For assembly instructions and more details on the class kit, see [[Avr2011_kit]].&lt;br /&gt;
How to program the class kit, see [[Avr2011 Programming The Kit]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Demo Code&#039;&#039;&#039;: [[Media: LED_Demo.tgz]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Homework&#039;&#039;&#039;: More soldering, and Cylon Eyes.  Optional extra credit: Simple POV toy (hint, make the timing around 2ms between updates and swing your arms).  Super bonus points: Make a neat POV toy. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OPC (Other People&#039;s Code)&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
[[Media: Pov demo.tar.gz]] An example POV toy.  This contains 4 different patterns; two diamonds, a trapezoid and a &#039;&#039;&#039;smiley face&#039;&#039;&#039;.  Also contains examples of using a character array to drive the POV toy, as well as use of constants to determine how the program runs.  - Will&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;: &lt;br /&gt;
* ATmega48P Datasheets (get both): [http://www.atmel.com/dyn/resources/prod_documents/8025S.pdf ATmega48P Summary Datasheet] and [http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf The Long ATmega48P Datasheet]  &lt;br /&gt;
* Bootloader appnote [http://www.atmel.com/dyn/resources/prod_documents/doc1644.pdf]&lt;br /&gt;
* [[Installing AVR Toolchain]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot-ATmega48-88-168.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Class 1: Digital and Serial I/O ==&lt;br /&gt;
&lt;br /&gt;
Interfacing with the real world is the soul of microcontrolling.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Covers&#039;&#039;&#039;: Gathering simple data from the world, and learn how to spit it back out.  A serial link with your computer enables all sorts of tricks, and enables the microcontroller version of printf debugging.  Some boolean logic comes in handy here.  Along the way, we&#039;ll learn a bunch about debouncing switches.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slides&#039;&#039;&#039;: [[Media:avr2011_class1.pdf]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Labs&#039;&#039;&#039;: More Cylon Eyes, All sorts of button-pressing demos, ASCII-to-binary keymapper, General-purpose serial LED display&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Demo Code&#039;&#039;&#039;: [[Media: avr2011_class1_demoCode.tgz]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HW&#039;&#039;&#039;: Ghetto logic probe and analyzer: read input on PORTC, display values on the LEDs, write out the value of PINC over serial, interpret/log/whatever using your laptop  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OPC (Other People&#039;s Code)&#039;&#039;&#039;:  [[microTweeter]] a silly little program to interface twitter with a microcontroller.  It is designed to post quotes from a file when a button is pressed on a microcontroller.  This was done as learning experience with python, serial communications and social media integration.  -Will G.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;: &lt;br /&gt;
* More than you ever wanted to know about debouncing: [http://www.ganssle.com/debouncing.htm A Guide to Debouncing]&lt;br /&gt;
&lt;br /&gt;
== Class 2: ADC and PWM: &amp;quot;Analog&amp;quot; I/O ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Covers&#039;&#039;&#039;: Learn about ways to fake analog data into and out of your microcontroller.  We&#039;ll learn how to switch logic states fast to emulate an analog output, and how to use the built-in analog-to-digital converters to measure the complex real-world.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slides&#039;&#039;&#039;: [[Media:avr2011_class2.pdf]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Demo Code&#039;&#039;&#039;: [[Media: avr2011_class2_demoCode.tgz]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Labs&#039;&#039;&#039;: Dimming LEDs, light-level meter, ghetto oscilloscope&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Homework&#039;&#039;&#039;:  Auto-dimming LED or basic light-level data logger&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;: You&#039;ll need to solder up the light sensors: [[http://wiki.hacdc.org/index.php/Avr2011_kit#Adding_the_Light_Sensor_for_Class_2_.28ADC.29 follow these directions]]&lt;br /&gt;
&lt;br /&gt;
== Class 3: Interrupts ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Covers&#039;&#039;&#039;: Interrupts call subroutines when certain conditions are true. They take a lot of the programming burden off your shoulders, enable the AVR to syncronize to external devices, and are great for super-fast response applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slides&#039;&#039;&#039;: [[Media: avr2011_class3.pdf]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Demo Code&#039;&#039;&#039;: [[Media: avr2011_externalInterrupt.tgz]], [[Media: avr2011_serialInterrupt.tgz]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Labs&#039;&#039;&#039;:  Bunch of pushbutton interrupt routines, light/dark transition sensor, non-blocking serial I/O&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Homework&#039;&#039;&#039;: Response-time-tester Game or &amp;quot;improved&amp;quot; interrupt-driven ghetto oscilloscope&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resources&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Class 4: Timers and Counters ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Covers&#039;&#039;&#039;: Timers and counters let you time and count events!  Up until now, we&#039;ve been doing a lot with for loops and delays to count the passing of time.  It&#039;s much easier and more precise to let the hardware do the timing.  When you add interrupts and timers together, the world becomes your oyster!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slides&#039;&#039;&#039;: [[Media: avr2011_class4.pdf]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Demo Code&#039;&#039;&#039;: [[Media: avr2011_counterClock.tgz]]  [[Media: avr2011_counterPWM.tgz]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Labs&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Homework&#039;&#039;&#039;: Response-time-tester Game or tone generator&lt;br /&gt;
&lt;br /&gt;
== Class 5: Flash, EEPROM, I2C, USB, SD Cards, GPS, and Life After AVR Class ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Covers&#039;&#039;&#039;: First, we&#039;ll cover using the internal flash memory and EEPROM for data storage.    Then I&#039;ll demo how to use other people&#039;s code/libraries and tie it in to our packages, interfacing with all sorts of random devices for fun and profit.  The final (optional) trick will be turning your classboard into a standalone AVR programmer so that you can program raw chips yourself, and outgrow the bootloader.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Labs&#039;&#039;&#039;:  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Homework&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Microcontrollers]]&lt;br /&gt;
[[Category:Classes]]&lt;/div&gt;</summary>
		<author><name>JoshuaHooper</name></author>
	</entry>
</feed>