Embedded Programming
architectures
- von Neumann, Harvard
- RISC, CISC
- microprocessor, microcontroller
- GPU, TPU
- FPGA, TinyFPGA, ASICs, difference
memory
- registers (instructions)
- SRAM (fast)
- DRAM (big)
- EEPROM (non-volatile)
- FLASH (programs, strings)
- fuse (configuration)
peripherals
- ports
- A/D
- comparator
- D/A
- timer/counter/PWM
- USART
- USB
- …

word size
- 8
- 16
- 32
- 64
processor families
vendors
packages
- common packages
- DIP
- SOT
- SOIC
- TSSOP
- TQFP
- LQFP
- BGA

Embedded Programming Languages
- assembly language
- hex file
- instruction set, opcodes
- mnemonics, directives, expressions
- avr-as
- inline
- C
- Interpreters
- AVRSH
- BASIC
- FORTH
- Espruino
- MicroPython CircuitPython
Generative AI
- Coding
- embedded
Operating Systems
in-system development
- ISP (AVR)
- UPDI (AVR 0,1-series)
- software
-
pyupdi install: pip3 install intelhex pylint pyserial
program: python3 pyupdi.py -d your_processor -c your_port -b your_baud_rate -f your_hex -v
-
hardware
-
- software
- JTAG (ARM)
- software
- [OpenOCD]j(http://openocd.org/)
- EDBG program: edbg -b -t target_type -pv -f binary_file read fuses: edbg -b -t target_type -F r,*,file_name write fuses: edbg -b -t target_type -F w,high_bit:low_bit,bit_value
- hardware
- software
- bootloader (all)
development environments
development boards
debugging
- debugging
- hardware
- Atmel ICE
- inspect, reflow solder joints
- check component orientation, values
- verify data sheets
- confirm connector orientation
- measure supply voltages
- probe I/O signals
- software
- blink LED
- add print statements
- use embedded debugger
- hardware
simulation
clocks
- types
- RC (10%, 1% calibrated)
- ceramic (0.5%)
- quartz (50 ppm)
- PLL
- Crystal, Resonator, difference
host communication
- RS232
- bit timing
- VT100/ANSI/ISO/ECMA terminal
- USB
- FTDI
Development Board Examples
- XIAO pinout hello.button-blink.RP2040 board components traces interior hello.button-blink.RP2040.1.ino 1.py 2.ino 2.py video blink-echo.ino blink-echo.py ws2812.py video Pico Doom
- ESP32-C3 XIAO pinout hello.button-blink.C3 board components traces interior hello.button-blink.C3.ino hello.button-blink.C3.py video
-
ESP32-WROOM-32 module [versions]{https://www.espressif.com/en/products/modules} ESP32-WROOM-echo board components traces traces+exterior holes interior echo.ino video ring.ino Python video
- ESP32
- ESP8266
- ATtiny412
- hello.t412.blink components traces interior
timing blink.ino video - hello.t412.echo components traces interior
UART echo.ino video - Pinout (for Arduino IDE)

- hello.t412.blink components traces interior
- ATtiny45
- hello.ftdi.45 components traces interior pin re-use
ports port.c port.make port.ino port.write.ino
echo.ino echo.serial.ino video - Pinout (for Arduino IDE)
- hello.ftdi.45 components traces interior pin re-use
- ATtiny1614
- hello.t1614.echo components traces interior
echo.ino video - Pinout (for Arduino IDE)

- hello.t1614.echo components traces interior
- ATSAMD11C
assignment
- individual assignment:
- browse through a microcontroller datasheet (rp2040), datasheet (esp32-c3)
- (using a software simulator) program your microcontroller board to do something,
- with as many different programming languages and programming environments as possible