Embedded Programming


architectures
   Harvard, von Neumann
   RISC, CISC
   microprocessor, microcontroller
   FPGA
   ALA

memory
   registers
   SRAM
   DRAM
   EEPROM
   FLASH
   fuse

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

word size
   8
   16
   32
   64

families
   8051
   PIC
   MSP
   AVR
   ARM
   STM32

vendors
   Octopart
   Digi-Key
   Mouser
   Newark
   Farnell

processors
   ATtiny10
   ATtiny45V
   ATtiny44
   ATmega168
   STM32F103

data sheets

packages
   DIP
   SOT
   SOIC
   TSSOP
   TQFP
   MLF, CSP, BGA

clocks
   RC (10%, 1% calibrated)
   ceramic (0.5%)
   quartz (50 ppm)

in-system development
   ISP (header, pads, clip)
   bootloader
   JTAG, debugWire
   ICE

programmers
   ISP
      AVRISP
      FabISP
      hello.ISP.44.cad board components traces interior firmware
      avrdude
   JTAG, debugWIRE
      Dragon

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

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

host communication
   RS232
      bit timing
   VT100/ANSI/ISO/ECMA terminal
      Kermit
      Minicom
      term.py
   FTDI
      cable
      libFTDI
      hello.ftdi.44.cad board components traces interior
         programming
         hello.ftdi.44.echo.c hello.ftdi.44.echo.c.make
         hello.ftdi.44.echo.interrupt.c hello.ftdi.44.echo.interrupt.c.make
         hello.ftdi.44.echo.asm hello.ftdi.44.echo.asm.make

IDE
   AVR Studio
   AVR Eclipse
   Arduino
      C libraries + IDE + bootloader + board
      Fabkit
      Fabio
      hello.arduino.168.cad board components traces interior
         programming
         Blink.pde hardware/hello.arduino/boards.txt
         hello.arduino.168.blink.c hello.arduino.168.blink.make
      ATtiny
   Firefly
   Scratch
   Modkit

Interpreters
   Python
   BASIC
   FORTH
   AVRSH

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

assignment
   read a microcontroller data sheet
   program your board to do something, in as many different programming languages
      and programming environments as possible