Embedded Programming
Format: Lecture.
Assignment: (3h) Write a firmware for an electronics board using an 8bit microcontroller that uses an input and an output device. For example the hello-board from Electronics Design using the LED and Button from the board.
Learning Outcomes:
Upon successfully completing this class students will be able to:
Read a microcontroller datasheet
Understand the differences between the various microcontrollers available on the market
Understand the requirements of embedded software and be able to address simple embedded programming problems
Write, upload and debug a firmware for a microcontroller
Perform bit-wise operations and implement protocols using bit-banging
Make use of core concepts like interrupts, timers and registers
Explore and use the capabilities of the most popular digital components
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
- 8051
- PIC
- MSP
- AVR
- ARM, STM32, mbed
- PSoC, xCORE, Propeller
vendors
- Octopart
- Digi-Key
- Mouser
- Newark
- Farnell
- SparkFun
- Adafruit
AVR processors
- ATtiny10
- ATtiny45V
- ATtiny44A
- 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
- types
in-system development
- ISP (header, pads, clip)
- bootloader
- Arduino, DFU, Micronucleus
- JTAG, PDI
- ICE
programmers
- ISP
- FabISP
- avrdude
- JTAG, PDI
- Atmel-ICE
- ISP
assembly language
- hex file
- instruction set, opcodes
- mnemonics, directives, expressions
- gavrasm
- avr-as
- inline
C
- tutorial
- GCC
- AVR Libc
- modules types math
- avr-libc, binutils-avr, gcc-avr
- CrossPack
- Atmel Studio
debugging
- "printf"
- gdb, ddd, Insight
- Atmel Studio
host communication
- RS232
- bit timing
- VT100/ANSI/ISO/ECMA terminal
- Screen Kermit Minicom
- pySerial miniterm.py rx.py term.py
- npm serialport
- USB
- software
- hardware
- FTDI
- cable
- libFTDI
- echo hello-world
- 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
- RS232
XMEGA
- features differences coding
- toolchain
- ppa
- Atmel Linux Windows
- OS X
- echo hello-world
- hello.ftdi.16E5.cad 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
- Eclipse AVR
- Firefly
- Scratch
- Modkit
boards
- AVR
- Atmel
- Adafruit Olimex Polulu
- Arduino
- board + C libraries + IDE + bootloader + header
- Fabkit Fabio
- hello.arduino.328P.cad board components traces interior
- Blink.pde boards.txt programming
- hello.arduino.328P.blink.c hello.arduino.328P.blink.make programming
- ATtiny Xmegaduino
- Codebender Ardublock
- PSoC
- ARM
- Rasberry Pi
- BeagleBone
- PandaBoard
- Snappy
- AVR
Interpreters
- Python
- BASIC
- FORTH
- AVRSH
- Javascript
- Espruino Tessel iop.io
STM32
- processor
- STM32F3 data sheet
- toolchain
- gcc-arm-none-eabi
- OpenOCD QStlink2 stlink
- programmer
- ST-Link V2
- software
- ST
- STMCube
- board
- STM32F3Discovery
- blink.zip programming
- Nucleo
- STM32F3Discovery
- processor
assignment
- read a microcontroller data sheet
- program your board to do something, with as many different programming languages and programming environments as possible
- extra credit: experiment with other architectures