- Die markierte Linie ist die erste Ader
- Der Verpolschutz sagt, wo die 1 ist.
- Die Nr. 2 ist auf der anderen Seite, als der Verpolschutz
Hier ein Zusammenfassung aus der Spezifikation:
– Hat 2 Kabel: Serial Data (sda), Serial Clock (scl)
– Die Datenleitung ist im Ruhezustand auf ‚1‘ (pull up Widerstände notwendig)
– Start geht vom Datenkanal aus (siehe unten)
Serielle Datenübermittlung
Mit jedem Takt wird 1 Bit der Daten übermittelt.
Das Bit wird bei ‚1‘ im CLK ¨übernommen. Der Datenwechsel ist bei ‚0‘.
Start und Stop
Die Datenleitung steuert Start und Stop. Sie geht auf ‚0, wenn der CLK auf ‚1‘ ist. Normalerweise gibt es keinen Wechsel, wenn CLK auf ‚1‘ ist.
Empfangen der Bits
Mit jedem CLK wird 1 Bit empfangen.
Der Slave empfängt die Bits und legt sie in ein Register.
Schwingkreise können sich gegenseitig beeinflussen. So können sie sich z. B. ungewollt synchronisieren, was die Genauigkeit beschränken kann.
Frequenzdifferenz
Koppeln sich die zwei Systemen unterhalb der Lock-In-Schwelle, so schwingen danach beide mit derselben Frequenz.
N-mal Funktion parallel ausführen
__global__ void add( int *a, int *b, int *c){ . *c = *a + *b; } // Funktion add() wird 1-mal ausgeführt add<<< 1, 1 >>>( dev_a, dev_b, dev_c ); // Funktion add() wird N-mal ausgeführt add<<< N, 1 >>>( dev_a, dev_b, dev_c );
Die Variablen werden dadurch zu Arrays.
a -> a[N] , b -> b[N], c -> c[N]
Zugreifen auf die parallelen Prozesse
Jeder parallele Prozess läuft im Kernel in einem anderen Block. Jeder Block hat seine Id blockIdx.x .
a[1], b[1], c[1] laufen im Block 1.
c[0] = a[0] + b[0]
__global__ void add( int *a, int *b, int *c ) { . c[blockIdx.x] = a[blockIdx.x] + b[blockIdx.x]; }
.
Eine Funktion kann N-mal aufgerufen werden. Daraus entstehen N parallele Blocks im Kernel, die man über ihre Block-Id ansprechen kann.
Innerhalb eines Blocks können mehrere Prozesse (Threads) gestartet werden. Dies ist notwendig, wenn ein Vektor, auf mehrere Blöcke eingeteilt wird.
Jeder Block hat seinen Vektor. Doch innerhalb eines Vektors entstehen mehrere Prozesse.
__global__ void add( int *a, int *b, int *c ) { . c[ threadIdx.x blockIdx.x ] = . a[ threadIdx.x blockIdx.x ] + . b[ threadIdx.x blockIdx.x ]; }
Jedes Element des Vektors hat seinen Thread.
Einfaches Handling in Cuda
Cuda ist spezialisert auf das parallele Verarbeiten vieler Elemente (Vektoren).
Bsp:
8 Blocks (Funktion wird 8 mal ausgeführt) mit
Vektoren in der Funktion.
Jedes Element des Vektors kann per Thread-Index angesprochen werden.
Zugriff auf ein Element
Der Index des Elements ist einfach gebildet
int index = (blockIdx.x * Blocktiefe) + threadIdx.x int index = (blockId2.2 * 8) + threadId5.5 int index = ( 2 * 8 ) + 5 = 21
Elemente aus verschiedenen Threads und Blocks
Sofern man genau weiss, wie weit die Daten in den einzelnen Threads generiert sind, können Indizes unterschiedlicher Nummern verarbeitet werden
__global__ void add( int *a, int *b, int *c ) { . c[index12] = a[index63] + b[index20]; }
Dazu braucht es jedoch die Synchronisation der Prozesse, die über synctrheads() organisiert werden kann.
– modernere Version von C-objektive
– keine Strichpunkte
– wenig Sonderzeichen (vgl. import)
// datei.swift // inhalt (schlagwort) // // created by Katrin Bächli 19.10.15 // Linzenz
import Metal
var lenght:Int var doubleMatrix:[Double] var matrix:[Int16]
for n in 0...3 { . var1 = (matrix[n]); . }
if var1 < 12 { . return 0 . }
while value2 > value1 * 1.5 { . volume = value2 * 2 . }
class ProjectComponentSubject { . init(<variables>){ . // Klasseneigenschaften setzen . self.var1 = var1 . // Instanzeigenschaften setzen var2 = var3 * var4 . } . // Funktionen . func inverse() -> a_Buffer { . // Code . }
Vererbte Klasse
class ProjectComponentSubject : Parent, Interface { } class SwisscomRTSTCPConnect : NSObject, ADTCPSocketDelegate { . }
Nach dem Doppelpunkt kommen die Eltern und deren Schnittstelle.
TI stellte ein Board mit 10 Sensoren und App zur Verfügung, das CC26050STK Starter Kit.
Sensoren
Umgebungs- und Objekttemperatur, Feuchtigkeit, Druck, Höhe, Bewegung (neun Achsen), Geschwindigkeit, Drehzahl, Magnet und Licht.
Sensordaten auf Cloud
Mit der App können die Daten über die Cloud ausgelesen und weitergeleitet werden.
Entwickler Erweiterung
Zum Sensor Board gibt es eine Erweiterung für Entwickller: das SimpleLink SensorTag DevPack. Die Erweiterung beinhaltet ein JTAG Schnittstelle und eine IDE zum Debuggen und Programmieren.
Komponenten des Sensor Board
– zwei Prozessoren:
M3 als CPU und
M0 für RF (BLE )
– JTAG zum Programmieren/Debuggen
– Schnittstellen UART, I2S, SPI
– Sensor Controller
Datenblatt und Beschreibung
Der RF Chip DA14580
– Braucht zum Senden 4.9 mA.
– Braucht im Sleep Mode nur 600nA.
– Betriebsspannung von 0.9 V.
– Hat JTAG Schnittstelle (SWD)
– Hat einen BLE Core mit AES-128
für Single Mode
Je nach dem, welches Protokoll man benutzen will, wird ein anderer protocol stack heruntergeladen.
Ist eine Erweiterung zum SimpleLink Wireless Board von TI für niedere Datenraten mit dem Prozessor CC2650.