DIY Personal Fabrication Digitale Welt Juergen Eckert – Informatik 7.
-
Upload
kolman-morant -
Category
Documents
-
view
108 -
download
1
Transcript of DIY Personal Fabrication Digitale Welt Juergen Eckert – Informatik 7.
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-IngolstadtTitel: 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
#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
avrTest.c
Speichert Zwischenschritte ab
Bsp Fortgesetzt: Assembler Resultat
lds r25,alds r24,badd r24,r25sts res,r24
• ALU hat keinen direkten Zugriff auf SRAM• Werte müssen in Registern zwischengespeichert
werden• Benötigt 7 Takte
avrTest.s -- Auszug
Werte in Register laden
Addieren
Resultat zurück ins SRAM schreiben
2 Takte
2 Takte
2 Takte
1 Takt
Siehe Datenblattnächste Folie
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, ATMELhttp://www.atmel.com/images/doc0856.pdf
BSP Fortgesetzt: Binary Strom
• Instruktionen in Word (16bit) • AVR verwenden Little Endian Byteorder
Byte 1. 2. 0xABCD -> 0xCD 0xAB
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...avrTest.elf
BSP Fortgesetzt: Binary Strom
• add r24,r25– 2410 = 1816 = 110002
– 2510 = 1916 = 110012
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...avrTest.elf
BSP Fortgesetzt: Binary Strom
• lds r25,a
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...avrTest.elf
Platzhalter im Assemblercode
a = 006016 (= SRAM Startadresse)
BSP Fortgesetzt: Binary Strom
• lds r24,b
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...avrTest.elf
Platzhalter im Assemblercode
b = 006116 (= SRAM Startadresse + 1)
BSP Fortgesetzt: Binary Strom
• sts res,r24
... 90 91 60 00 80 91 61 00 89 0f 80 93 62 00 ...avrTest.elf
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)
AVR PICMeine Programmer VOR 2000 (damals kosteten Progammer ein Vermögen!):
Mikrocontroller w/o the pain: Arduino
• AVR ATmega• Open Source and Hardware• „Download, Plug and Play“• Bootloader (USB)• Viele Libraries und Boards
Foto:Wikipedia
1. USB
2.
22EuroKleiner ab 10€
Allzweckeingabe/-ausgabe (GPIO, General Purpose Input/Output)
• Ausgang: – 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)
AVR
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;V∈ CC+0.5V])
– Beschaltung (Mikrocontroller intern)• 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)
AVR
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
Field Programmable Gate Array (FPGA)
• Hardware programmieren (Schaltungsstrukturen)– Verilog HDL– VHDL
• Extrem flexible und schnell• Keine eigene Funktionalität • Nur digitale GPIOs
LB
LBLB
LB
IO
IO
IO
IO
IO
IO
IO
IO
Foto: Wikipedia
• Schaltmatrix: Verbindungsstruktur zwischen Logikblöcken (LB)
• Konfiguration wird bei Systemstart von externen Flash geladen
Logikblock
Flash Memory
Sehr komplex
FPGA: Taster-Led Bsp
for(i=0; i<MAX_BUTTONS; i++){ digitalWrite(led[i], !digitalRead(button[i]));}
Je mehr Aufgaben erledigt werden müssen desto langsamer ist er
Mikrocontroller FPGA
• Massive Parallelität• Egal wie viele LEDs-Taster,
Latenz ist immer gleich (instantan)
Pull-up nicht dargestellt
MAX_BUTTONS mal:
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
Ein Mikrocontroller hat noch wesentlich mehr Hardware Support,mehr dazu das nächste Mal
Foto: http://mlab.taik.fi
Attiny 85 Interrupt
Alternative zu Arduino:• GNU Toolchain:
avr-gcc + avr-libc (WinAVR, CrossPack AVR) + Eclipse Plugin
• AVR Studio (ATMEL)
Interrupt Zeitverlauf
• 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
Interrupt Interrupt Interrupt Interrupt
Lineares Programm
Interrupt Routine
PROBLEM!
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
(umständlich, Einschränkungen?)– Eigener Code auf Arduino Board (ohne Probleme)
AVRs ab 1Euro!!
PIC Microchip
• AVR (ATMEL) Alternative• Gleicher Preis- und Leistungsbereich• Mehr Variationen:
>600 verschiedeneChips
• Kostenloser C-Compiler
Foto: Wikipedia
Glaubenskrieg:AVR ↔︎ PIC
Im Prinzip ist es egal...
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
in Dev-Board enthalten(funktioniert auch für selbstgebaute Designs)
• Arduino Header• Für Einsteiger schwer
Foto: Embedded Artists
Alternative: STMicroelectronics
25 Euro
Even more BoardsEspruino• 72Mhz ARM (ST)• Kickstarter Projekt• Javascript mit Konsole!!
ESP8266• Xtensa LX3 32bit @ 80Mhz• WiFi per AT Befehle für 3€!!• Chinamodul ohne Doku!• Software Entwicklung: SDK
instabil! Nur für Experten!!
Foto: Espruino 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