Embedded Programming

architectures
   Harvard, von Neumann
   RISC, CISC
   microprocessor, microcontroller
   FPGA, CPLD
   spatial

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
   LOGIC
   Megaprocessor
   8051
   PIC
   MSP
   AVR
   ARM
   PSoC, xCORE, Propeller, Lattice, NVIDIA

vendors
   Octopart
   Digi-Key
   Mouser
   Newark
   Farnell
   SparkFun
   Adafruit

AVR processors
   ATtiny10
   ATtiny45V
   ATtiny44A
   ATtiny814
   ATmega328P
   ATmega16U2
   ATxmega16E5
   ATxmega16A4U

tutorials

data sheets

packages
   DIP
   SOT
   SOIC
   TSSOP
   TQFP
   LQFP
   MLF, CSP, BGA

clocks
   types
      RC (10%, 1% calibrated)
      ceramic (0.5%)
      quartz (50 ppm)
   PLL
   instruction cycles
   overclocking

in-system development
   ISP (header, pads, clip, pins)
   bootloader
      Arduino, DFU, Micronucleus
   JTAG, PDI
   ICE

programmers
   ISP
      FabISP
      avrdude
      Arduino
   JTAG, PDI
      Atmel-ICE
      FabPDI
      GoodFET
      Raspberry Pi

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

C
   tutorial
   GCC
      make files (tabs)
      bit operations
   AVR Libc
      modules types math
   avr-libc, binutils-avr, gcc-avr, avrdude
   CrossPack
   Atmel
      Studio
      Linux, Windows toolchains

debugging
   "printf"
   gdb, ddd, Insight
   Atmel Studio

host communication
   RS232
      bit timing
   VT100/ANSI/ISO/ECMA terminal
      Screen Kermit Minicom Arduino
      pySerial miniterm.py rx.py term.py
      npm serialport serialport-list serialport-term
   USB
      software
      hardware
   FTDI
      libFTDI
      cable
      board
   echo hello-world
      hello.ftdi.44.py board components traces interior
      programming mods
      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

XMEGA
   features differences coding
   echo hello-world
      hello.ftdi.16E5.py board components traces interior
      hello.ftdi.16E5.blink.c hello.ftdi.16E5.blink.make
      hello.ftdi.16E5.ring.c hello.ftdi.16E5.ring.make
      hello.ftdi.16E5.echo.c hello.ftdi.16E5.echo.make

library

IDE
   Atmel Studio
   Arduino
   Eclipse AVR
   Firefly
   Scratch
   Modkit

boards
   Atmel
   Adafruit Olimex Polulu
   Arduino
      board + C libraries + IDE + bootloader + header
      Fabkit Fabio satshakit
      hello.arduino.328P.py board components traces interior
         Blink.pde boards.txt programming
         hello.arduino.328P.blink.c hello.arduino.328P.blink.make programming
      ATtiny Xmegaduino
      Create Codebender Ardublock

ARM
   SAM
   nRF52
      Fanstel
      hello-world
   STM32
      processor
         STM32F3 data sheet
      toolchain
         gcc-arm-none-eabi
         OpenOCD QStlink2 stlink
      programmer
         ST-Link V2
      software
         ST  STMCube
      boards
         STM32F3Discovery
            blink.zip programming
         Nucleo
   Systems
      Rasberry Pi MATE
      Beagle
      micro:bit
      mbed
   
Interpreters
   MicroPython CircuitPython
   BASIC
   FORTH
   AVRSH
   Espruino Tessel

assignment
   individual assignment:
      read a microcontroller data sheet
      program your board to do something,
         with as many different programming languages
         and programming environments as possible
   group assignment:
      compare the performance and development workflows
         for other architectures