The Fab Academy

Embedded Programming

architectures
   Harvard, von Neumann
   RISC, CISC
   microprocessor, microcontroller

memory
   registers
   SRAM
   EEPROM
   FLASH
   fuse

peripherals
   A/D
   comparator
   D/A
   timer/counter/PWM
   USART
   USB
   ...

word size
   8
   16
   32
   64

families
   8051
   PIC
   MSP
   ARM
   AVR, AVR32

processors
   ATtiny10
   ATtiny45
   ATtiny44A
   ATmega88PA
   ATmega1284P
   AT32UC3B164

packages
   DIP
   SOIC
   TSSOP
   TQFP
   MLF

vendors
   Digi-Key
   Mouser
   Newark

clocks
   RC
   ceramic
   quartz

assembly language
   hex file
   instruction set, opcodes
   mnemonics, directives, expressions
   AVR Studio
   avr-as
   gavrasm

C
   AVR Libc
   avr-libc, binutils-avr, gcc-avr
   WinAVR
   CrossPack

languages, interpreters, scripting
   Basic, Python, ...
   Scratch, Modkit, ...
   Processing Wiring Arduino

in-system development
   ISP
   ICE
   JTAG
   debugWire
   bootloader

programmers
   parallel: bsd
   serial: dasa
   USB: FabISP
   JTAG, debugWIRE: Dragon

debugging
   "printf"
   AVR Studio
   ddd, gdb, gdb-avr, avarice

serial communications
   RS232
   term.py
   VT100/ANSI/ISO/ECMA terminal
   Kermit
   Minicom

serial echo
   hello.echo.44.cad
   hello.echo.44.asm
   hello.echo.44.c
   makefile
   tiny44, use 20 MHz xtal, bsd cable: avrdude -p t44 -c bsd -U lfuse:w:0x7E:m
   tiny 44, load hex file, bsd cable: avrdude -p t44 -c bsd -U flash:w:hello.echo.44.hex

assignment
   - read an AVR data sheet
   - make serial and programming cables
   - add (at least) a button to the serial echo hello-world board
   - modify the serial echo assembly program to respond to the button
   - modify the serial echo C program to respond to the button