DST EINFÜHRUNG IN MRT (V2) Aufgabe: Reaktionstester 1. Pflichtenheft Taster an -PA0 8 LEDs an PCx LCD-Anzeige für Ergebnis Die LEDs an Port C sollten unerwartet irgendwann angehen! Jetzt wird die Zeit bis zum ersten Schließen am Port PA0 in 0.1ms Schritten ermittelt 1
DST EINFÜHRUNG IN MRT (V2) 2
DST EINFÜHRUNG IN MRT (V2) Aufgabe: Reaktionstester 1. Pflichtenheft Taster an -PA0 8 LEDs an PCx LCD-Anzeige für Ergebnis Die LEDs an Port C sollten unerwartet irgendwann angehen! Jetzt wird die Zeit bis zum ersten Schließen am Port PA0 in 0.1ms Schritten ermittelt 2. Pflichtenheft Der Reaktionstest - Kandidat sollte durch Betätigen des Tasters den Test starten! 3
DST EINFÜHRUNG IN MRT (V2) 4
DST EINFÜHRUNG IN MRT (REAKTIONSTESTER) 1. Pflichtenheft Die LEDs an Port C sollten unerwartet irgendwann angehen! Jetzt wird die Zeit bis zum ersten Schließen am Port PA0 in 0.1ms Schritten ermittelt 2. Pflichtenheft Der Reaktionstest - Kandidat sollte durch Betätigen des Tasters den Test starten! 3. Plichtenheft T Taste > 200ms T Start 5.. 10 Sekunden Wenn Bereit zum neuen Test Lauflicht an PC - LEDs 5
DST EINFÜHRUNG IN MRT (V2) 6
DST EINFÜHRUNG IN MRT (REAKTIONSTESTER) Die LEDs an Port C sollten unerwartet irgendwann angehen! Jetzt wird die Zeit bis zum ersten Schließen am Port PA0 in 0.1ms Schritten ermittelt Der Reaktionstest - Kandidat sollte durch Betätigen des Tasters den Test starten! T Taste > 200ms T Start 5.. 10 Sekunden Wenn Bereit zum neuen Test Lauflicht an PC LEDs 4. Pflichtenheft: Reaktionszeit < 1 Sekunde Nur Test, wenn Taste vor Startsignal noch nicht betätigt war! Entprellen des Tasters bei A/B, B/C und D/E (T Prell = 20 ms) 7
DST EINFÜHRUNG IN MRT (REAKTIONSTESTER) 8
DST EINFÜHRUNG IN MRT (V2) 9
DST EINFÜHRUNG IN MRT (REAKTIONSTESTER) Lauflicht: Warte auf Reaktionstest Start vom Anwender 10
DST EINFÜHRUNG IN MRT (REAKTIONSTESTER) 1 of 3 Lauflicht: int REAK_State = 0; // next State int REAK_Erg = 10000; // Ergebnis in 0.1ms Int REAK_Best = 10000; // Schnellste Reaktion void Reaktion_State_Machine_10kHz(void) { static unsigned int cnt = 10000; static unsigned int zufallszahl; switch(reak_state) { // --- states 0000.. 0039 --- Lauflicht mit Tastenabfrage --------------- case 0: { PORTC = 0b01111110; cnt=1000; REAK_State=5; if ((PINA&0b01)==0){REAK_State=100;} } case 5: { if (cnt > 0) {--cnt;} else {REAK_State=10;} if ((PINA&0b01)==0){REAK_State=100;} break;} case 10: { PORTC = 0b10111101; cnt=1000; REAK_State=15; if ((PINA&0b01)==0){REAK_State=100;} } case 15: { if (cnt > 0) {--cnt;} else {REAK_State=20;} if ((PINA&0b01)==0){REAK_State=100;} break;} case 20: { PORTC = 0b11011011; cnt=1000; REAK_State=25; if ((PINA&0b01)==0){REAK_State=100;} } case 25: { if (cnt > 0) {--cnt;} else {REAK_State=30;} if ((PINA&0b01)==0){REAK_State=100;} break;} case 30: { PORTC = 0b11100111; cnt=1000; REAK_State=35; if ((PINA&0b01)==0){REAK_State=100;} } case 35: { if (cnt > 0) {--cnt;} else {REAK_State=0;} if ((PINA&0b01)==0){REAK_State=100;} break;} } } default: break; 11
DST EINFÜHRUNG IN MRT (REAKTIONSTESTER) 2 of 3 Reaktionstester: void Reaktion_State_Machine_10kHz(void) { static unsigned int cnt = 10000; static unsigned int zufallszahl; switch(reak_state) { DST - MRT - Einführung II // --- --- User startet Reaktionstester ---------------------------------------------------------------- case 100: { PORTC = 0b11111111; cnt = 200; REAK_State=110; } case 110: { --cnt; if(cnt==0) {zufallszahl=5; REAK_State=200;} break;} // Taste betätigt Entprellen // --- --- Solange Taste betätigt - Zufallszahl zwischen 5.. 9 erstellen - case 200: { ++zufallszahl; if(zufallszahl > 9) {zufallszahl=5;} if ((PINA&0b01)!=0){REAK_State=300;} break;} case 300: { cnt = 200; REAK_State=310; } case 310: { --cnt; if(cnt==0) {cnt = 10000; REAK_State=400;} break;} // Taste passiv Entprellen } // --- --- Wartezeit bis Startsignel realisieren (die taste darf nicht betätigt werden) ------------------ case 400: { --cnt; if(cnt==0) {cnt = 10000; --zufallszahl; if(zufallszahl==0) {REAK_State=500;} } // Zeit um if((pina&0b01)==0) {REAK_Erg = 19999; REAK_State=700;} // Taste zu früh Error break; } } 09.10.2015 12
DST EINFÜHRUNG IN MRT (REAKTIONSTESTER) 3 of 3 Reaktionstester: void Reaktion_State_Machine_10kHz(void) { static unsigned int cnt = 10000; static unsigned int zufallszahl; switch(reak_state) { // --- --- Reaktionszeit messen (muß kleiner als 1 Sekunde sein) ----------------------------------------- case 500: { PORTC = 0b00000000; cnt=0; REAK_State=510; break;} // alle LEDs an // --- --- Warte auf Reaktion oder Fehler (keine Reaktion) ----------------------- case 510: { ++cnt; if ((PINA&0b01)==0){REAK_State=600;} if(cnt >= 10000) {REAK_Erg = cnt; REAK_State=700;} break;} // --- --- Reaktionszeit => ERG u. evtl. nach Best of Reaktionszeit -------------------------------------- case 600: { REAK_Erg = cnt; if(reak_erg < REAK_Best) {REAK_Best = REAK_Erg;} cnt = 200; REAK_State=610; } case 610: { --cnt; if(cnt==0) {REAK_State=700;} break;} // Taste betätigt Entprellen // --- --- Warte bis Taste wieder losgelassen ------------------------------------------------------------ case 700: { if ((PINA&0b01)!=0){REAK_State=800;} break;} } } case 800: { cnt = 200; REAK_State=810; } case 810: { --cnt; if(cnt==0) {REAK_State=0;} break;} // Taste passiv Entprellen // und von vorne 13
DST EINFÜHRUNG IN MRT (V2) Schnittstellen: Parallele Datenübertragung Serielle Datenübertragung Mixed Datenübertragung 14
PARALLELE DATENÜBERTRAGUNG Beispiel Drucker: 15
PARALLELE DATENÜBERTRAGUNG Beispiel Drucker: 16
PARALLELE DATENÜBERTRAGUNG Beispiel Drucker: 17
PARALLELE DATENÜBERTRAGUNG Beispiel Drucker: Wie schnell ist die Umschaltzeit? Intel i7-980x CPU CPU-Kerne: 6 Taktrate: 1,06.. 3,6 GHz Verlustleistung: 70.. 90 W Transistoren: 2,3 Milliarden Betriebsspannung (VCore):0,65.. 1,4 V 18
PARALLELE DATENÜBERTRAGUNG Beispiel Drucker: - Strobe 19
PARALLELE DATENÜBERTRAGUNG Beispiel Drucker: 20
SERIELLE DATENÜBERTRAGUNG Asynchron Synchron 21
SERIELLE DATENÜBERTRAGUNG Asynchron am Beispiel der V24 (RS232) Fester Schritt-Takt. Baudrate = Schritt_Takte pro Sekunde (9600 Bd = 9600 Bits / s) Ruhepegel = logisch 1 Startbit = log 0 Es folgen die 5.. 8 Bits ab Bit 0 also (2 0 ) (Beispiel: 5AH=0x5A=0b0101 1010) Das Paritätsbit ergänzt 1 auf gerade (odd) oder ungerade (even) z.b. odd Als Ende werden 1, 1½ oder 2 Stopbits 1 angehängt! 22
SERIELLE DATENÜBERTRAGUNG Asynchron am Beispiel der V24 (RS232) Baudrate 9600 Bd = 9600 Bits / s Bitzahl (5.. 8) 8 Parität gerade (odd) oder ungerade (even) Stoppbits 1, 1½ oder 2 Taktfehler < 5% (10Bit ~ 1/20 Halbbits ~ 5%) 23
SERIELLE DATENÜBERTRAGUNG (V24) Handshake am Beispiel der V24 (RS232) TXD RXD RTS CTS DTR DSR DCD Transmitted Data Received Data Request To Send Clear To Send Data Terminal Ready Data Set Ready Data Carrier Detect Pegel der V24 (RS232) Bd max (PC) = 115 200 Log 1-3 V.. -15 V Log 0 +3 V.. +15 V Kabellänge ~ 1 km 24
SERIELLE DATENÜBERTRAGUNG (V24) Startbit: Flankenerkennung (Synchronisierung) Sync Bit-Test Timertakt >= (Baudrate * 4 ) (Lösung mit f Takt = 4xBaudrate) 25
SERIELLE DATENÜBERTRAGUNG (V24) Startbit: Flankenerkennung (Synchronisierung) 26
SERIELLE DATENÜBERTRAGUNG (V24) Startbit: Fehlererkennung Sync Bit-Test 27
SERIELLE DATENÜBERTRAGUNG (V24) Startbit: Fehlererkennung 28
SERIELLE DATENÜBERTRAGUNG (V24) Datenbits: Einlesen & Speichern Sync Bit-Test 29
SERIELLE DATENÜBERTRAGUNG (V24) Datenbits: Einlesen & Speichern 30
SERIELLE DATENÜBERTRAGUNG (V24) Paritätsbit: Testen ob ok! Sync Bit-Test 31
SERIELLE DATENÜBERTRAGUNG (V24) Paritätsbit: Testen ob ok! 32
SERIELLE DATENÜBERTRAGUNG (V24) Stopbit: Testen ob ok & Ergebnis speichern Sync Bit-Test 33
SERIELLE DATENÜBERTRAGUNG (V24) Stopbit: Testen ob ok & Ergebnis speichern 34