From d79f24cc277e31d7848f9683bac599339348aa44 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Thu, 13 Feb 2014 00:29:21 +0000 Subject: [PATCH] Finish up --- .gitignore | 1 + hw1/report.docx | Bin 42123 -> 47265 bytes hw1/report.htm | 158 ++++++++++++++++++++++++++++++++++++++++++++++++ vis/logger.py | 26 +++++--- vis/makefile | 3 + vis/visual.py | 9 +-- yue/main.cpp | 22 ++++--- yue/makefile | 3 + 8 files changed, 203 insertions(+), 19 deletions(-) create mode 100644 hw1/report.htm diff --git a/.gitignore b/.gitignore index eec85d6..1f72ef6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ *.o *.pyc *.swp +*.zip *~ __pycache__ xively diff --git a/hw1/report.docx b/hw1/report.docx index 4078b0686c646b0ec0a59ea0b3a63a8d9dcb2348..9ad42d62290f63438a98deca9f379a54e0af6af4 100644 GIT binary patch delta 40520 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 Be_;Rs delta 35342 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 diff --git a/hw1/report.htm b/hw1/report.htm new file mode 100644 index 0000000..9a869d7 --- /dev/null +++ b/hw1/report.htm @@ -0,0 +1,158 @@ + + +

Brief Description

+ +

The objective of this homework is to explore organizing embedded software + using mbed as the platform in context of a simple system. Sensor data flows + in the direction of: mbed → PC → Xively.

+ +

Embedded Target Design

+ +

The mbed code is organized in a single main.cpp file which invokes libraries + to read the sensor data. The Accelerometer, Magnetometer, and Touch Sensor + libraries were acquired through the mbed website and the Analog Input and + Output libraries were included in the mbed SDK.

+ +

The software consists of preemptable sensor loop running at a fixed rate, a + serial data receive interrupt handler, and a direct-memory access serial + transmitter. On each iteration of the sensor loop a time counter is checked + to determine which sensor are due for reading. Each sensor function polls + data from the sensor, packs the data into an output frame, and then write + the frame to the output queue.

+ +

Note: the sensor reading was originally performed in a timer interrupt + routine, however, it moved to a background task to minimize interference + with the reception of serial commands.

+ +

Data Logger Design

+ +The data logger is implemented as a Graphical User Interface using Python and +the GTK+ Toolkit. The source code is organized around the following classes: + +
    +
  • A Main class which performs basic initialization
  • +
  • A Config class for storing user preferences
  • +
  • A Device class to interfaces with the mbed using PySerial
  • +
  • A Logger class to transmit the recorded data to Xively
  • +
  • A Visual class to display the user interface
  • +
+ +

Data Collection

+ +

The mbed FRDM-KL46Z is responsible for data collection and sending it to the + host via Serial-over-USB. Sensors data is collected at a periodic rate and + is transmitted to the PC using the DATA_FRAME format shown below. The Serial + data transmit is handled by the KL46Z Direct-Memory Access (DMA) controller + so that data transmission does not block the CPU. When sensor data is ready, + it is packed and appended to a transmit buffer. At the end of the periodic + loop the DMA controller is enabled and data transmission begins

+ +

Commands are sent to the mbed using the COMMAND_FRAME format and are + processed using a serial interrupt handler. The handler parses the incoming + messages and performs command processing when a valid COMMAND_FRAME is + received.

+ +

Serial Message Formats

+ +

As is mentioned above, the mbed and communicate via UART, thus working based + on serial protocol. Since the mbed can be perceived as a slave to the PC, we + let the mbed collect and send DATA_FRAME, while PC is responsible for + generating COMMAND_FRAME. The frame structure is as follows:

+ +

Data Frame

+ + + +
1 Byte4 bits 4 bits 1 Byte (Varied Size)1 Byte
HEADERdataTypesnsTypedataNumdata TAIL
+ +

Field Descriptions

+ + HEADER: + + + + + +
0x02, constant, indicating the start of a frame
dataType:Data Type: + + + +
0- int81 - int162 - int32
3- uint84 - uint165 - uint32
6- float7 - double
snsType: Sensor Type:
    +
  • 0 - LIGHT_SENSOR
  • +
  • 1 - ACC_SENSOR
  • +
  • 2 - MAG_SENSOR
  • +
  • 3 - TOUCH_SENSOR
  • +
  • 4 - ADC_SENSOR
  • +
dataNum: Data number. Number of data pack in the frame
data: Sensor data. How it is packed is based on dataType and dataNum
TAIL: 0x0A, constant, indicating the end of a frame
+ +

Command Frame

+ + + +
1 Byte4 bits 4 bits 4 Byte 1 Byte
HEADERcmdTypesnsTypeIntervalTAIL
+ +

Field Descriptions

+ + + + + +
HEADER: 0x02, constant, indicating the start of a frame
cmdType: Command Type:
    +
  • 0 - START
  • +
  • 1 - STOP
  • +
  • 2 - SET_INT
  • +
Interval:sampling rate. Representing a float of 4 Bytes.
TAIL: 0x0A, constant, indicating the end of a frame
+ + + +

Sampling Rate

+ +

The following sampling rates were obtained for each sensor, and a combined + sampling rate when all sensors are sampling simultaneously. Data collection + was performed using a 230400 serial baud rate.

+ + + + + + + + + +
Sensor Sampling Rate
Accelerometer 560 Hz
Magnetometer 530 Hz
Touch Sensor 1930 Hz
Light Sensor 2414 Hz
Analog to Digital 820 Hz
All Combined 150 Hz
+ +

Online Submission

+ +
+
Code for mbed
+
http://mbed.org/users/andy753421/code/Sensors/
+ +
Code for PC
+
https://sites.google.com/a/g.ucla.edu/ibeaconnav/homework1/python.zip
+ + +
Video Link
+
(we will do a demo during office hours)
+
diff --git a/vis/logger.py b/vis/logger.py index bd394a1..a1cccf7 100644 --- a/vis/logger.py +++ b/vis/logger.py @@ -37,7 +37,7 @@ class Logger: self.queue.append(state) delta = datetime.utcnow() - self.last if delta.total_seconds() > self.config.maxrate: - self.flush() + return self.flush() # Private methods def flush(self): @@ -54,14 +54,26 @@ class Logger: if not self.running() or len(self.queue) == 0: return + # Limit data to 500 samples per upload + limit = 500 + upload = self.queue + if len(upload) > limit: + print("upload: cropping - %d -> %d" % + (len(upload), limit)) + upload = upload[0:limit-1] + self.feed.datastreams = [ - get(self.queue, 'acc'), - get(self.queue, 'mag'), - get(self.queue, 'tch'), - get(self.queue, 'lgt'), - get(self.queue, 'a2d'), + get(upload, 'acc'), + get(upload, 'mag'), + get(upload, 'tch'), + get(upload, 'lgt'), + get(upload, 'a2d'), ] - self.feed.update() + + try: + self.feed.update() + except Exception as ex: + return str(ex) self.last = datetime.utcnow() self.queue = [] diff --git a/vis/makefile b/vis/makefile index a866541..306cb36 100644 --- a/vis/makefile +++ b/vis/makefile @@ -8,3 +8,6 @@ test: clean: rm -rf *.pyc __pycache__ + +dist: + zip python.zip *.py xively/*.py diff --git a/vis/visual.py b/vis/visual.py index f2deed6..737e2d9 100644 --- a/vis/visual.py +++ b/vis/visual.py @@ -17,7 +17,7 @@ else: class Visual: FRAMES_PER_SEC = 60 # hz - RATES_PER_SEC = 10 # hz + RATES_PER_SEC = 1 # hz def __init__(self, config, device, logger): def get_objects(names): @@ -61,14 +61,14 @@ class Visual: if act.get_active(): self.status(self.device.connect()) else: - self.status(self.device.disconnect()) + self.device.disconnect() return True def on_xively(self, act): if act.get_active(): self.status(self.logger.connect()) else: - self.status(self.logger.disconnect()) + self.logger.disconnect() return True def on_flush(self, act): @@ -224,7 +224,8 @@ class Visual: # Private methods def status(self, msg): + status = self.builder.get_object("status") + status.pop(context_id=0) if not msg: return - status = self.builder.get_object("status") status.push(text=('Error: ' + msg), context_id=0) diff --git a/yue/main.cpp b/yue/main.cpp index 218b27a..150be36 100644 --- a/yue/main.cpp +++ b/yue/main.cpp @@ -87,7 +87,13 @@ MMA8451Q accSensor(PTE25, PTE24, MMA8451_I2C_ADDRESS); MAG3110 magSensor(PTE25, PTE24); TSISensor tchSensor; AnalogIn lgtSensor(PTE22); -AnalogIn a2dSensor(A0); + +AnalogIn a2dSensor0(A0); +AnalogIn a2dSensor1(A1); +AnalogIn a2dSensor2(A2); +AnalogIn a2dSensor3(A3); +AnalogIn a2dSensor4(A4); +AnalogIn a2dSensor5(A5); AnalogOut a2dOutput(PTE30); @@ -220,7 +226,7 @@ void clock1_interrupt(void){ static int ledCnt; // Write A2D output sine wave - a2dOutput.write(sin(a2dCnt * TIME_ACCURACY * (2*PI) * 0.1)); + //a2dOutput.write(sin(a2dCnt * TIME_ACCURACY * (2*PI) * 0.1)); // Send data through Serial if (accEnable && accCnt >= (int)(accTmr/TIME_ACCURACY+0.5)){ @@ -373,12 +379,12 @@ void sendTchInfo(void){ void sendA2dInfo(void){ float a2dData[6]; - a2dData[0] = a2dSensor.read(); - a2dData[1] = 0; - a2dData[2] = 0; - a2dData[3] = 0; - a2dData[4] = 0; - a2dData[5] = 0; + a2dData[0] = a2dSensor0.read(); + a2dData[1] = a2dSensor1.read(); + a2dData[2] = a2dSensor2.read(); + a2dData[3] = a2dSensor3.read(); + a2dData[4] = a2dSensor4.read(); + a2dData[5] = a2dSensor5.read(); int len = packToFrame(txFrame, SNS_A2D, TYP_F32, 6, a2dData); printStr("[A2D] data=%2.2f %2.2f %2.2f %2.2f %2.2f %2.2f\r\n", diff --git a/yue/makefile b/yue/makefile index 19f0bbb..86b2f59 100644 --- a/yue/makefile +++ b/yue/makefile @@ -6,5 +6,8 @@ LDFLAGS = -lm default: info install +dist: + zip mbed.zip makefile ../common.mk *.{c,cpp,h} */*.{cpp,.h} + -include ../config.mk -include ../common.mk -- 2.43.2