pptx - Computer Science 7

Report
DIY
Personal Fabrication
Digitale Welt
Juergen Eckert – Informatik 7
Fahrplan
• Mikrocontroller
• FPGAs (sehr knapp)
• Getting started...
• Übung
– Hands on
– Glühwein und Plätzchen
• 14.1. Gastvortrag: Michael Huth, Uni Eichstätt-Ingolstadt
Titel: Sharing Economy und Open Hardware –
eine sozialwissenschaftliche Betrachtung
Entwicklung
• 1947: Transistoren, Bell Labs
• 1958: Jack Kilby, Erfinder des Integrierten Schaltkreises
(IC), Texas Instruments.
• 1960er: Logikgatter beinhalten mehrere Transistoren in
einem Chip
• UND, ODER, NICHT, ...
• Transistor-Transistor-Logik (TTL): 74xx Serie
• Complementary metal-oxide-semiconductor (CMOS) auf MOSFET
Basis: 40xx Serie
• 1970er: Digitale Prozessoren
– 1971: Intel i4004 Mikroprozessor
– 1972: TMS1000 Mikrocontroller
Digitale Prozessoren
Mikroprozessor
• Universell einsetzbar
(z.B. Laptop, CPUs)
• Schnell, ben. viel Energie
• Viele externe Komponenten
Mikrocontroller
• Spezifische Anwendung
(z.B. Wandthermometer)
• Langsam, energiesparend
• Single-Chip Lösung
• TI erhält “Computer-On-A-Chip” Patent in 1973 (71 beantragt)
• Grenzen sind verwaschen
Mikrocontroller
ATtiny85, Atmel
•
•
•
•
Single-Chip
Low-Power
CMOS 8bit
AVR erweiterte
RISC Architektur
Wichtige Mikrocontroller
Komponenten
Hardware Unterstützung
Reduced Instruction Set Computer
RISC
• Ursprung: Komfortabler Befehlssatz für die
Assemblerprogrammierung (1980)
– Schnell ausführbare Befehle; meist 1 Takt
– Wenige Befehle
– Konstante Länge
– Keine Spezialbefehle
– General-Purpose Register
Kernstruktur
• Programmzähler (Program Counter)
– Zeigt auf aktuelle Stelle im Programm Code
(Flash, persistent, 10000 Write/Erase Cycles)
• Stapelzeiger (Stack Pointer)
– Zeigt auf oberstes Element des Aufrufstapels (Stack,
beinhaltet Sprungadressen, Variablen, ...)
• Arithmetisch-logische Einheit (ALU)
– Rechenkern
– Minimalst: Addieren, negieren und konjugieren
– Erweitert: Subtrahieren, multiplizieren, vergleichen, ...
(können durch Minimalfunktionalität auf kosten der
Rechenzeit nachgebildet werden)
Workflow
• Übliche
Programmiersprache C
• Andere Sprachen
möglich: Assembler,
Basic, C++, Javascript,
Python, ...
• Bibliotheken .a =
Sammlung an .o Files
• .elf= GNU executable
Bsp: 2 Zahlen aus dem SRAM addieren
avrTest.c
#include <avr/io.h>
uint8_t a=20, b=32, res;
int main(void){res=a+b;}
# avr-gcc -save-temps -mmcu=attiny85 avrTest.c
Speichert Zwischenschritte ab
Bsp Fortgesetzt: Assembler Resultat
Siehe Datenblatt
nächste Folie
avrTest.s -- Auszug
lds r25,a
lds r24,b
add r24,r25
sts res,r24
Werte in Register laden
2 Takte
2 Takte
Addieren
1 Takt
Resultat zurück ins SRAM schreiben
2 Takte
• ALU hat keinen direkten Zugriff auf SRAM
• Werte müssen in Registern zwischengespeichert
werden
• Benötigt 7 Takte
Bsp Fortgesetzt: Objekt / EFL File
# avr-gcc -g -mmcu=attiny85 -o avrTest.elf
avrTest.o
• AVR Befehle, deren Struktur und Zeit siehe
Datenblatt: 8-bit AVR Instruction Set, ATMEL
http://www.atmel.com/images/doc0856.pdf
BSP Fortgesetzt: Binary Strom
avrTest.elf
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...
• Instruktionen in Word (16bit)
• AVR verwenden Little Endian Byteorder
Byte
1. 2.
0xABCD -> 0xCD 0xAB
BSP Fortgesetzt: Binary Strom
avrTest.elf
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...
• add r24,r25
– 2410 = 1816 = 110002
– 2510 = 1916 = 110012
BSP Fortgesetzt: Binary Strom
avrTest.elf
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...
• lds r25,a
Platzhalter im Assemblercode
a = 006016 (= SRAM Startadresse)
BSP Fortgesetzt: Binary Strom
avrTest.elf
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...
• lds r24,b
Platzhalter im Assemblercode
b = 006116 (= SRAM Startadresse + 1)
BSP Fortgesetzt: Binary Strom
avrTest.elf
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...
• sts res,r24
Platzhalter im Assemblercode
res = 006216 (= SRAM Startadresse + 2)
HEX File - Uploadbare Datei
# avr-objcopy -j .text -j .data -O ihex
avrTest.elf avrTest.hex
• Binäre ELF Datei enthält zu viele (unnötige)
Informationen (wie verwendet Lib-Versionen)
• Flashspeicher extrahieren und in Intel HEX
Format bereit stellen :100000000EC028C027C026C025C024C023C022C0DF
:1000100021C020C01FC01EC01DC01CC01BC0112499
:100020001FBECFE5D2E0DEBFCDBF10E0A0E6B0E05E
:10003000E6E7F0E002C005900D92A236B107D9F7CD
:1000400020E0A2E6B0E001C01D92A336B207E1F7BE
:1000500002D00FC0D5CFCF93DF93CDB7DEB790914D
:10006000600080916100890F80936200DF91CF91E1
:060070000895F894FFCF93
:02007600142054
:00000001FF
Uploaden / Fashen / Brennen / …
• In-Circuit Serial Programming (ICSP)
– Mikrocontroller werden üblicherweise erst
programmiert, wenn sie auf die Platine gelötet
wurden
– In-System Programming (ISP)
– Joint Test Action Group (JTAG) auch zum debuggen
• Bootloader
– (Vor-) Installierter Code lädt HEX
Datei in Flash und führt es aus
– Seriell, USB, SD-Karte, ...
AVR Dragon: ISP + JTAG
KEINE DIY Programmer!!
• Nur original Programmer verwenden
– Spannungsanpassung, Schaltungsschutz
– Technischer Support (...es funktioniert einfach)
– Günstig (AVR MKII ab 30 Euro, keinen Klon kaufen)
Meine Programmer VOR 2000 (damals kosteten Progammer ein Vermögen!):
AVR
PIC
Mikrocontroller w/o the pain:
Arduino
2.
•
•
•
•
•
AVR ATmega
Open Source and Hardware
„Download, Plug and Play“
Bootloader (USB)
Viele Libraries und Boards
1. USB
22Euro
Kleiner
ab 10€
Foto:
Wikipedia
Allzweckeingabe/-ausgabe
(GPIO, General Purpose Input/Output)
• Ausgang:
AVR
– Tri-state
• Hohes Potential (Prozessorspannung z.B. 5V)
• Niedriges Potential (GND)
• Hochohmig (deaktiviert)
– Open-Collector / Open-Drain
• Ausgang ist Kollektor oder Drain eines Transistors/Mosfets
• Aktiv = GND
• Nicht Aktiv = Hochohmig; meist in Kombination mit Pull-up
– Achtung: Maximale Pin-Spannung beachten
– Maximale Ströme beachten („einige mA“)
• Meist mehr „Sink current“ (Strom in den Mikrocontroller) als
„Source current“ (Strom aus dem Mikrocontroller)
Allzweckeingabe/-ausgabe
(GPIO, General Purpose Input/Output)
• Eingang:
– Zustand
•
•
•
•
<VIL: low / 0
(z.B. 0.3VCC, ATtiny)
>VIH: high / 1
(z.B. 0.6VCC, ATtiny)
Dazwischen keine Zustandsänderung
Maximale Spannungen beachten!! (z.B. AVR Pin ∈ [-0.5V;VCC+0.5V])
– Beschaltung (Mikrocontroller intern)
AVR
•
•
•
•
Floating: „unendliche“ Eingangsimpedanz (ähnlich zu Gate bei Mosfet)
Pull-Up: Hochohmiger Widerstand (10k-100kOhm) nach VCC
Pull-Down: Hochohmiger Widerstand nach GND
Pull-Up-Down: Je nach Widerstandverhältnis stellt sich ein Mittelwert
ein (unbelastet)
Bsp: LED-Taster
• Taster: Pin 12 und GND
• LED: Pin 13 und GND
(mit Vorwiderstand)
• Wenn der Taster gedrückt
wird, leuchtet die LED
• Max. Verzögerung: X ns
• Max. Verzögerung mit 2
Taster und 2 LEDs : 2X ns
• 4 Taster+LEDs: 4X ns …
• CPU Zeit zu 100% belegt
Sehr komplex
Field Programmable Gate Array (FPGA)
• Hardware programmieren
(Schaltungsstrukturen)
– Verilog HDL
– VHDL
• Schaltmatrix: Verbindungsstruktur
zwischen Logikblöcken (LB)
• Konfiguration wird bei Systemstart
von externen Flash geladen
Flash Memory
• Extrem flexible und schnell
• Keine eigene Funktionalität
• Nur digitale GPIOs
IO
IO
IO
LB
LB
IO
IO
Foto: Wikipedia
LB
LB
IO
Logikblock
IO
IO
FPGA: Taster-Led Bsp
Mikrocontroller
FPGA
MAX_BUTTONS mal:
for(i=0; i<MAX_BUTTONS; i++)
{
digitalWrite(led[i], !digitalRead(button[i]));
}
Je mehr Aufgaben erledigt
werden müssen desto
langsamer ist er
Pull-up nicht dargestellt
• Massive Parallelität
• Egal wie viele LEDs-Taster,
Latenz ist immer gleich
(instantan)
Interrupts
• Auf (externe) Ereignisse muss nicht aktiv
gewartet werden (pollen)
• (Externe) Ereignisse können nicht linearen
Code (Interrupt Service Routine, ISR) zur
Ausführung bringen
Foto: http://mlab.taik.fi
Ein Mikrocontroller hat noch
wesentlich mehr Hardware Support,
mehr dazu das nächste Mal
Attiny 85 Interrupt
Alternative zu Arduino:
• GNU Toolchain:
avr-gcc + avr-libc (WinAVR,
CrossPack AVR) +
Eclipse Plugin
• AVR Studio (ATMEL)
Interrupt Zeitverlauf
Interrupt
Interrupt
PROBLEM!
Interrupt Interrupt
Lineares Programm
Interrupt Routine
• Interrupt Routinen bei AVR nicht verdrängbar,
bei komplexeren CPUs ist dies möglich
(Priorisierung)
• Interrupt Routinen so kurz wie möglich (kein
aktives Warten, siehe Folie zuvor)
• Interrupts können verloren gehen
t
Arduino Alternativen
•
•
•
•
•
Quick (and Dirty) Hacks Development
Sehr weit abstrahiert (it just works)
Gut zum lernen
Viele Libraries mit einem Klick geladen
Vordefinierte DEV-Boards mit bestimmten
Typen (groß, energiehungrig und teuer)
– Arduino Code auf eigenem Board möglich
AVRs ab 1Euro!!
(umständlich, Einschränkungen?)
– Eigener Code auf Arduino Board (ohne Probleme)
PIC Microchip
• AVR (ATMEL) Alternative
• Gleicher Preis- und Leistungsbereich
• Mehr Variationen:
>600 verschiedene
Chips
• Kostenloser
C-Compiler
Glaubenskrieg:
AVR ↔︎ PIC
Im Prinzip ist es egal...
Foto: Wikipedia
LPC NxP
• 32bit Prozessor, ARM Cortex-M0+ (bis M3)
• Mehr Speicher, schneller, weniger
Stromverbraucht, gleicher Preis (im Vgl. zu AVR)
• Frei Entwicklungsumgebung (Win, OS X, Linux)
• Programmer und Debugger
Foto: Embedded Artists
in Dev-Board enthalten
(funktioniert auch für
selbstgebaute Designs)
• Arduino Header
• Für Einsteiger schwer
Alternative: STMicroelectronics
25 Euro
Even more Boards
Espruino
• 72Mhz ARM (ST)
• Kickstarter Projekt
• Javascript mit Konsole!!
Foto: Espruino
ESP8266
• Xtensa LX3 32bit @ 80Mhz
• WiFi per AT Befehle für 3€!!
• Chinamodul ohne Doku!
• Software Entwicklung: SDK
instabil! Nur für Experten!!
Foto: Hackaday
Nächstes mal bei DIY…
Kommunikation
• UART
• SPI
• I2C
Jetzt in Übung
• Boards Hands on: LPC1769, LPC11U68, Arduino
Leonardo, ESP8266, Espruino, Papilio Pro
• Glühwein (auch Antialk) und Plätzchen

similar documents