Ditching the Arduino

Wat is Arduino?

  • Hardware Boards
  • Embedded Software
  • Ontwikkelingsomgeving
  • Rapid Prototyping

Voor wie is de arduino gemaakt?

Niet voor ons

Is het Arduino platform voldoende?

Nee

Wat is de Arduino niet

  • Efficiënt
  • Licht Gewicht
  • Onthullend
  • Performant
  • Programmeertaal

Praktisch Voorbeeld: Memory Usage

Using the Arduinio libraries


#include <Arduino.h>

void setup()
{
    pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
}
    

Compiled size: 1034 bytes (3.2%)

Without the Arduino library


#include <avr/io.>
#include <util/delay.h>

int main(void)
{
    DDRB = 1 << 5;
    while (1)
    {
        _delay_ms(500);
        PORTB ^= 1 << 5;
    }
  return 0;
}
    

Compiled size: 158 bytes (0.5%)

Praktisch Voorbeeld: Efficiëntie

Snelheid digitalWrite vs bitflip

Arduino is geen taal

  • Arduino is C/C++
  • Het Arduino software framework is gebaseerd op wiring
  • .ino zijn "wannabe" .cpp files

main.cpp

Blink

Om een programma te generen voor een Arduino board is er nog heel wat achterliggend proces nodig. Het framework verstop dit voor ons, zodat we moeilijk een beeld kunnen schetsen van de werking.

Is Arduino geschikt voor ons?

Ja

Maar ...

A great engineer will do for a quarter what a mediocre (at best) engineer takes a dollar to do.

De kostprijs van hardware

Arduino Uno

Kostprijs ≈ 25 euro

Standalone ATmega328p

Kostprijs ≈ 2.5 euro
Dit is geen grondige analyse

Wat zijn de voordelen van het Arduino platform

  • Out of the box features
  • Snel werkend prototype
  • Programmeren via USB
  • Bootloader
  • Hardware Abstraction Layer

Hardware Abstraction Layer

HAL Is Resuable Code

Reuable Code is Portable

Resuable Code Is Portable

Resuable Code Is Portable

Resuable Code Is Portable

Hardware Abstraction Layer

Arduino is een HAL

Dus de minpunten van een HAL zijn

  • Niet Efficiënt
  • Zwaar Gewicht
  • Limieten capaciteiten

Ter Conclusie:

Arduino is een goed start punt maar we moeten verder met microcontrollers

Wat is er beschikbaar?

Computer Systemen

  • Desktop Computers / Servers
  • Single Board Computers
  • System on Chip
  • Microcontrollers



Er zijn er nog vele meer!

"Full Stack"

"Bare Metal"

Computer Systemen

Server: Dell R710

Single Board Computer: Raspberry Pi

System on Chip: Diagram

Single Board Computer: Raspberry Pi

Computer Systemen

Desktop Systemen

  • Zeer krachtig
  • Zeer modulair
  • Niet specifiek
  • Out of the box
  • Grote vormfactor
  • Hoge prijs

Single Board Computer

  • Krachtig
  • Beperkte modulariteit
  • Niet specifiek
  • Out of the box
  • Integreerbare vormfactor
  • Hoge prijs

System On Chip

  • Minder Krachtig
  • Geen modulariteit
  • Specifiek
  • Vereist programming
  • Integratie nodig
  • Betaalbaar

Single Board Computer

  • Zwak
  • Geen modulariteit
  • Specifiek
  • Vereist programming
  • Integratie nodig
  • Disposable

Een Microcontroller Selecteren?

Selectie Criteria

  • Vereisten v/d microcontroller
  • Kostprijs
  • Beschikbare know-how
  • Leveranciers

Selectie Fases

  • Producent
  • Microcontroller familie
  • Type

Selectie Criteria

Selectie Criteria

Volgende Microcontroller?

Selectie Criteria

Chip Criteria

  • # Bits
  • Clk Freq
  • GPIOs
  • Communicatie
  • Power Comsumptie
  • Geheugen

Ecosysteem

  • Programmer
  • Toolchain
  • Software Library
  • IDE
  • Development Boards
  • Debugger

Vendor

  • Atmel
  • Texas Instruments
  • Microchip Technologt
  • NXP
  • Resenas
  • Silicion Labs

Arduino Ecosysteem

Programmer

Bootloader Based

Debugger

Niet beschikbaar op de arduino

Software Library

Arduino.h
Wiring

Arduino Ecosysteem

IDE

Java based

Toolchain

AVR GCC

Arduino Ecosysteem

Arduino Boards

Er is veel keus

Afkicken van Arduino

  • Welke microcontroller gaan we kiezen?
  • Hoe gaan we dat aanpakken?
    • Werking microcontrollers in het algemeen
    • Tooling
    • Werking van de mcu componenten

We kiezen voor de microcontroller...

ATmega328p

Algemene werking microcontrollers

Microprocessor (CPU)

  • Het brein
  • Doet bewerkingen op data
    • Haalt data op
    • Rekenkundige bewerkingen
  • Niet standalone
  • Pheripherals nodig

Zilog Z80 PCB

Standalone Z80 PCB op Eurocard (16cm x 10cm)

Microcontroller

  • "Standalone"
  • Meer dan rekenkundige bewerkingen
  • Afmetingen 8mm x 35mm

Verschil

Z80

ATmega328p

Verschil

3 Soorten Pinnen
  • Adres pinnen (A0 - A15)
  • Data pinnen (D0 - D7)
  • Control pinnen (INT, WR,RD)

Microcontroller

  • "Standalone"
  • Meer dan rekenkundige bewerkingen
  • Afmetingen 8mm x 35mm

Bouwstenen Microcontroller

CPU
  • ALU
  • Register File
  • Program Counter
  • Stack Pointer
  • Status & Control

Bouwstenen Microcontroller

Analoge IO
  • ADC
  • Comperator
  • Kwantiseren van data
Digitale IO
  • HIGH
  • LOW

Bouwstenen Microcontroller

Timer / Counter
  • 2 - 3 Counter
  • Timestamping
  • Event Counters
  • Interval Metingen

Bouwstenen Microcontroller

Interrupt Controller
  • Onderbreken van het programma
  • Speciale hardware interrupts
  • Intern of Extern
Memory
  • Program / Data Memory
  • DMA
  • Memory Types

Bouwstenen Microcontroller

Seriële Interfaces
  • UART
  • I2C
  • SPI
  • ...

Central Processing Unit

  • ALU
  • Register File
  • Program Counter
  • Stack Pointer
  • Status & Control

Wordt aangestuurd mbv een instructieset

Instruction Set

Mnemonics & Opcodes

Opcodes
  • Operation Code
  • Bytecode dat de CPU kan interpreteren
Mnemonics
  • Ezelsbruggetje voor de opcode
  • Human Readable

ADD | ADC | ADIW | SUB | SUBI | JMP | AND | OR

Wat voor taal hebben we nu beschreven?

Assembly

Instructie Voorbeeld

Instruction Types

  • Arithmetic
  • Branch
  • Data

Instruction Types

  • Bit
  • Controle

High Level To Machine Code

Arduino vs C/C++ vs Assembly

"Arduino" C/C++ Assembly
Voordelen
  • Zeer snelle ontwikkelingstijd
  • Zeer Portable
  • Snelle ontwikkelingstijd
  • Portable
  • Meer controle
  • Snelller
Nadelen
  • Bulky
  • Traag
  • BMI is Oke
  • Meer vatbaar voor bug
  • Langere ontwikkeltijd

Wees gerust we houden het tot C/C++

Arithmetic Logic Unit

In
  • Status
  • Opcode
  • 2 Intgers Operands
Out
  • Status
  • Integer Resultaat

Arithmetic Logic Unit

In
  • Status
  • Opcode
  • 2 Intgers Operands
Out
  • Status
  • Integer Resultaat

Register File

  • Werkgeheugen processor
  • Snelste memory
  • Index register
  • Instructies worden op data vanuit de register file toegepast

Program Counter

  • aka Instruction Pointer
  • Adres van volgend instructie
  • Update na uitvoeren instructie
    • Volgen adres
    • Jump adres
  • Initieel: 0x0000

Stack Pointer

    • Gereserveerd & Opeenvolgend
    • Push & Pop
    • FILO
    • Houdt bij
      • Lokaal gedeclareerde variablen
      • Return address

Geheugen Types

AVR Geheugen Map

  • Sketch - Flash
  • Variablen - SRAM
  • EEPROM - Alleen maar wanneer aangesproken

Microcontroller Architectuur

Von Neumann Architectuur

Heeft 2 klok cycli nodig om 1 instructie uit te voeren

Harvard Architectuur

Heeft 1 klok cycli nodig om 1 instructie uit te voeren

Von Neuman Cycle

  • Fetch-Decode-Execute
  • 3 Fases
    1. Fetch: Ophalen Opcde
    2. Decode: Decoderen van Opcode
    3. Execute Uitvoeren van Opcode

Special Function Register

  • GPR
    • General Purpose Register
    • Opslagen van willekeurige data
  • SFR
    • Special Function Register
    • Vaste Locatie in het geheugen voor een specifieke functie

Special Function Register