Avr-Microcontrollers-in-Linux-Howto Revision History Revision 44 2009-04-20 17:13:07 Revised by: jdd obfuscate e-mail at the author demand Revision 43 2009-03-29 20:49:12 Revised by: ranjeeth Revision 42 2009-03-29 20:45:09 Revised by: jdd reverting after publication Revision 41 2009-03-29 20:41:59 Revised by: jdd edit to export docbook Revision 40 2009-03-28 21:07:57 Revised by: RickMoen Adjust style of mailto link to author's original preference. Revision 39 2009-03-28 21:05:45 Revised by: RickMoen Revert e-mail obfuscation, supply some missing punctuation, [re-]fix capitalisation, fix and clarify new run-on sentence. Revision 38 2009-03-23 18:21:24 Revised by: ranjeeth Revision 37 2009-03-23 18:19:51 Revised by: ranjeeth Revision 36 2009-03-23 17:20:32 Revised by: ranjeeth Revision 35 2009-03-23 17:19:47 Revised by: ranjeeth Revision 34 2009-03-23 10:26:00 Revised by: jdd publishing tests Revision 33 2009-03-23 10:25:06 Revised by: jdd Revision 32 2009-03-23 10:24:24 Revised by: jdd use of macro to obfuscate e-mail Revision 31 2009-03-23 10:11:47 Revised by: jdd change was only to export docbook without admonitions Revision 30 2009-03-23 10:09:15 Revised by: jdd Revision 29 2009-03-23 10:05:07 Revised by: jdd Revision 28 2009-03-23 09:58:40 Revised by: jdd adding the wiki as link Revision 27 2009-03-23 09:53:28 Revised by: RickMoen Insert needed space characters into "pin9", "pin10", "pin25" constructs Revision 26 2009-03-23 09:49:05 Revised by: RickMoen Make markup of all the software items mentioned be consistent Revision 25 2009-03-23 09:43:40 Revised by: RickMoen Remove a couple of stray commas. Revision 24 2009-03-23 09:41:30 Revised by: RickMoen Polishing up a few last bits of punctuation Revision 23 2009-03-23 04:11:31 Revised by: ranjeeth Revision 22 2009-03-23 04:10:34 Revised by: ranjeeth Revision 21 2009-03-23 04:09:07 Revised by: ranjeeth Revision 20 2009-03-17 16:20:27 Revised by: ranjeeth Revision 19 2009-03-17 16:18:33 Revised by: ranjeeth Revision 18 2009-03-16 19:10:30 Revised by: RickMoen Fix hyperlink, fix English diction of new sentence. Revision 17 2009-03-16 18:50:19 Revised by: ranjeeth Revision 16 2009-03-16 11:36:49 Revised by: RickMoen A couple of punctuation nits Revision 15 2009-03-16 11:21:14 Revised by: RickMoen Corrected numerous run-on sentences, punctuation and grammar errors, and questionable idiom. Revision 14 2009-03-15 10:27:24 Revised by: BordenRhodes Cleaned up basic grammar and spelling Revision 13 2009-03-15 09:52:41 Revised by: jdd Revision 12 2009-03-15 09:51:37 Revised by: jdd add link to the manual of avr-libc Revision 11 2009-03-14 21:47:18 Revised by: jdd end of basic conversion Revision 10 2009-03-14 21:40:18 Revised by: jdd Revision 9 2009-03-14 21:39:26 Revised by: jdd Revision 8 2009-03-14 21:33:04 Revised by: jdd add the image Revision 7 2009-03-14 21:27:59 Revised by: jdd Revision 6 2009-03-14 21:26:48 Revised by: jdd Revision 5 2009-03-14 21:25:13 Revised by: jdd Firts step - conversion fro html by jdd and basic format edition Revision 4 2009-03-14 21:22:37 Revised by: jdd Revision 3 2009-03-14 21:18:25 Revised by: jdd Revision 2 2009-03-14 21:13:09 Revised by: jdd Revision 1 2009-03-14 21:10:33 Revised by: jdd ------------------------------------------------------------------------ Table of Contents 1. HOWTO 2. AVR Microcontrollers in Linux HOWTO 2.1. Licence 2.2. What Is a Microcontroller? 2.3. Software Required 2.4. Hello World 2.5. Author 2.6. Last version 1. HOWTO AVR Microcontrollers in Linux HOWTO, Copyright (C) 2009 Ranjeeth p t (ranjeeth_gecmail[at]yahoo[dot]com) This HOWTO is for readers wishing to program an AVR microcontroller using a GNU/Linux machine. For burning your code, we will be using a parallel port. You may need other electronics components (like a few resistors, capacitors, parallel port connector, etc.), which can be bought from any electronics shop. ------------------------------------------------------------------------ 2. AVR Microcontrollers in Linux HOWTO 2.1. Licence Permission is granted to copy, distribute, and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2, or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". [http://wiki.tldp.org/LdpWikiDefaultLicence#GNUFreeDocumentationLicense] GNU Free Documentation License ------------------------------------------------------------------------ 2.2. What Is a Microcontroller? A microcontroller is a single-chip computer. It has internal RAM, ROM, timers, counters, interrupt circuitry, I/O ports, analog comparators, serial USARTs, analog to digital converters, watchdog timers, and a RISC architecture. When you are using a microprocessor, you cannot program it alone. You need other components, like RAM, ROM, timers, etc. For programming, you should know its architecture thoroughly: You must read the datasheet for your microcontroller. ------------------------------------------------------------------------ 2.3. Software Required binutils: Tools like the assembler, linker, etc. gcc-avr: The GNU C compiler (cross-compiler for avr). avr-libc: Package for the AVR C library, containing many utility functions. uisp: A Micro In-System Programmer for Atmel's AVR MCUs (for burning code to MCUs' memory). The following Atmel microcontrollers are supported by avr-gcc in Linux: at90s Type Devices at90s2313, at90s2323, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515, at90s8515, at90s8515, at90s8535, at90s1200. atmega Type Devices atmega103, atmega603, atmega8, atmega48, atmega88, atmega8515, atmega8535, atmega16, atmega161, atmega162, atmega163, atmega165, atmega168, atmega169, atmega32, atmega323, atmega325, atmega3250, atmega64, atmega645, atmega6450, atmega128. attiny Type Devices attiny22, attiny26, attiny26, attiny13, attiny13, attiny13, attiny13, attiny2313, attiny11, attiny12, attiny15, attiny28. Other AVR Devices avr2, at90c8534, at86rf401, avr3, at43usb320, at43usb355, at76c711, avr4, avr5, at90can128, at94k, avr1. binutils: Programs to manipulate binary and object files that may have been created for Atmel's AVR architecture. This package is primarily for AVR developers and cross-compilers. gcc-avr: The GNU C compiler, a fairly portable optimising compiler that supports multiple languages. This package includes C language support. avr-libc: Standard library used for developing C programs for Atmel AVR microcontrollers. This package contains static libraries, as well as needed header files. uisp: Utility to program AVR chips with object code created by gcc-avr. It supports in-system programming. You download the above packages untar, configure, and install it. If you are using Debian or Ubuntu, these packages are available in your distribution: Install them using apt or synaptic package manager. ------------------------------------------------------------------------ 2.4. Hello World We are writing hello world for the atmega8 microcontroller, which has a 28-pin, 8-bit, RISC architecture. Before proceeding, have a look at [http://www.nongnu.org/avr-libc/user-manual/] this manual about __avr-libc__, which will help you program better, and understand. Also, refer to the datasheets for the various AVR microcontrollers. Here is our first program: /* ledblink.c, an LED blinking program */ #include #include void sleep(uint8_t millisec) { while(millisec) { _delay_ms(1);/* 1 ms delay */ millisec--; } } main() { DDRC |=1<