Marcel Mushik Electronic Class Schedule with Wireless Network Access Helsinki Metropolia University of Applied Sciences Bachelor of Engineering Information Technology Thesis 19 January 2012
Abstract Author(s) Marcel Mushik Title Electronic class schedule with wireless network access Number of pages 42 pages + 4 appendices Date 19 January 2012 Degree Bachelor of Engineering Degree programme Information Technology Specialisation option Embedded Electronics Instructor(s) Kimmo Sauren, Principal lecturer This project is the initial research and development carried out for the possible implementation of electronic class schedules on the Leppävaara campus of Metropolia University of
Preface I would like to thank Antti Piironen and Anssi Ikonen for grabbing me in the hallway and proposing this project to me. This project has been a real good learning experience in many ways. I would like to thank Kimmo Sauren for help in debugging certain areas of the project. Without his assistance I might have not finished the project to the extent that I did.
Table of Contents Abstract Table of Contents List of Figures List of Abbreviations 1 Introduction 1 2 Digital Photo Frame and Memory Type 2 2.1 Digital Photo Frame General Operation 2.2 SD Card File System 2.3 SD Card Command Format 2 4 7 3 Cypress Programmable System on a Chip 3.1 PSoC Overview 3.2 PSoC Functionality 4 Microcontroller Interfaces 4.1 4.2 4.3 4.4 UART Communication SPI Communication WiFly WLAN Module Capacitive Touch 5 Microcontroller Environment of the Electronic Class Schedule 5.
8 Conclusions 39 References 40 Appendix 1: Microcontroller Specifications Appendix 2: Program Code Appendix 3: List of Electrical Components Appendix 4: Circuit Board Diagrams
List of Figures Figure 1: Flow Diagram of Basic Operation 1 Figure 2: User Controls of Digital Picture Frame 2 Figure 3: Screenshot of File Allocation Table Using HxD Hex Editor 5 Figure 4: Screenshot of Root Directory Table Using HxD Hex Editor 6 Figure 5: PSoC Designer SPI CMD 0 7 Figure 6 Response Token 8 Figure 7: SD Card Initialization Flowchart 9 Figure 8: PSoC Designer Digital and Analogue Blocks 11 Figure 9: Global Settings in PSoC Designer 12 Figure 10: UART Packet Const
List of Abbreviations ADC bps CRC CSR CPU DAC dB DHCP FAT Gnd JPG IP LCD MBR MCU MISO MMC MOSI NFS PSoC PWM RAM SCK SD SDHC SPI SS (CS) TCP/IP UART USART UDP USB WLAN Vcc - Analogue to Digital Converter - Bits Per Second - Cyclic Redundancy Check - Capacitive Sensor Relaxation Oscillator - Central Processing Unit - Digital to Analogue Converter - Decibels - Dynamic Host Configuration Protocol - File Allocation Table - Ground Electrical Connection - JPEG File, Joint Photographic Experts Group - Internet Pro
1 1 Introduction The goal of this project was to design a system that would retrieve class schedules over a Wireless Area Local Network (WLAN) and display the schedule on an electronic picture frame upon a user's requests. At the Leppävaara campus of Metropolia University of Applied Sciences, the method for delivering the schedules in the past was to post a paper schedule outside every classroom. This did not allow for easy schedule changes or last minute notifications.
2 requested file, and the MCU system will write that file to a Secure Digital Memory (SD) card that is shared by the digital photo frame. The digital photo frame can then, in normal operation, read the SD card and display the schedule as a picture to the user. The digital photo frame, being the only limitation of the project, was used because it is inexpensive compared to many embedded electronics design screens available for purchase as kits. 2 Digital Photo Frame and Memory Type 2.
3 seven inch screen and wide screen capability. The resolution of the unit is high, as the resolution is 800 x 480 or 16:10. The frame itself can be placed in the horizontal or vertical position. It includes a rotatable leg on the back to hold it up and give it the appearance of a traditional picture frame. It can be purchased with the choice of a black or white body color.
4 2.2 SD Card File System The SD memory card is a flash memory card which was originally designed to be used with audio and video devices as higher speeds and higher storage became necessary. Within the SD memory card there is a microcontroller that is designed to work directly with the flash memory chips. This microcontroller keeps current information on the internal workings of the SD card, as well as provides an interface for the user to the flash chips.
5 The first sector, the Master Boot Record (MBR), is reserved and contains the partition table and other vital information concerning how the memory is organized. It reserves the entire first sector of the card and typically includes information such as bytes per sector, sectors per cluster, reserved sectors, File Allocation Table (FAT) entries, number of root entries, and number of small sectors. This sector, too, is written only by the internal microcontroller as it keeps the organization of the card.
6 The next critical section of the memory is the root directory. This contains different entries, each 32 bytes long, for each file stored in memory. Figure 4 shows a root directory with one file. Figure 4: Screenshot of Root Directory Table Using HxD Hex Editor. Screenshot [1]. Shown in the file are examples of information given in the directory section.
7 2.3 SD Card Command Format There are two different modes of communication through the data lines of the SD memory card. The usual method used by host devices is the SD Bus mode, also called the SD mode. The other method is the SPI mode. Both modes have similar protocols but the SD mode allows for multiple data lines operating simultaneously. The SPI mode is slower than the SD mode but it is easier to implement and it is a well known interface.
8 The following four bytes in the command are 0x00. These are called the argument bytes. For a read or write operation the address would be given with these bytes. There is no argument for a command 0, so these are all given as 0x00. The final byte is the Cyclic Redundancy Check (CRC). This is used by the SD card to ensure that the information was read correctly.
9 The additional commands that are needed to distinguish which kind of card has been inserted can be seen in figure 7. Figure 7: SD Card Initialization Flowchart. Taken from SD Specifications Part 1 Version 2.00 [4, 16]. The flowchart in figure 7 can be programmed into the MCU unit to automatically distinguish the card type during the initialization of the SD card. After this is accomplished, normal operation can be followed until power has been taken away from the SD card.
10 3 Cypress Programmable System on a Chip 3.1 PSoC Overview The Programmable System on a Chip (PSoC) microcontroller is a very flexible addition to the microcontroller world. Its processor is of Harvard architecture and can run up to 24 MHz. The MCUs can have up to 16 KB of flash memory and 512 bytes of SRAM. Possible number of I/O ports can be up to 44 depending on which processor type is purchased.
11 Figure 8 shows the layout of these analogue and digital blocks and the basic structuring that the designer has to work with. Figure 8: PSoC Designer Digital and Analogue Blocks. Screenshot [3]. As figure 8 shows these blocks, once placed, can then be interconnected with visual routing. All busses that are available for use are visible as well as external pins that might need to be accessed by the user.
12 Once the blocks are set and the pin routes have been placed, global settings can be configured. Figure 9 shows the available global settings in the PSoC designer. Figure 9: Global Settings in PSoC Designer. Screenshot [3]. As can be seen in figure 9, in the global settings the user can set many global controls of the system, such as the speed of the Central Processing Unit (CPU) clock. The range of this will differ in various models.
13 transfer. This is handled within the body of the program code by calling the respective function and giving the required argument. Exploiting the use of the code can be beneficial to the user. If for example the user has used all the blocks available and cannot add external filtering, the implementation of a digital filter written in the C language can be used in the program. [6, 42-53.] 4 Microcontroller Interfaces 4.
14 The communication can be set up to be full duplex or half duplex. There are also options that can be exercised such as using a parity bit, character length, and a stop bit. More modern UART connections, renamed Universal Synchronous/Asynchronous Receiver/Transmitter (USART), have been designed to utilize clock signals. This gives them the ability to communicate synchronously or asynchronously, eliminating the need for start and stop bits.
15 4.3 WiFly WLAN Module The WiFly wireless unit is an off the shelf 802.11 WLAN module made specifically to interface with embedded electronic projects. This module makes it possible to bypass the complex procedure in making custom Transmission Control Protocol/Internet Protocol (TCP/IP) connections, as well as saving the large amount of memory that it would take to implement the protocol directly on the microcontroller. Transfer speeds of the wireless communication can reach up to 4 Mbps.
16 Once the WiFly unit is setup it can be taken out of command mode. Any further system changes can be made via a TCP/IP telnet session, given that the user knows the IP address of the WiFly unit [9]. In command mode there are many options the user can configure to suit the project's needs. There are options to use User Datagram Protocol (UDP) or TCP/IP protocols. There are data transfer rates that can be changed, along with buffer size and packet terminator characters to make custom size packets.
17 parameters of the oscillator circuit which change the speed at which the circuit oscillates. The oscillation comes from what is known as a Capacitive Sensor Relaxation Oscillator (CSR). Figure 12 shows the circuit layout of the CSR. Figure 12: Capacitive Sensor Relaxation Oscillator. Taken from Lesher Todd [10]. The circuit consists of a comparator, a switch, and a capacitance that comes from the layout of the buttons. The capacitor is first charged to a voltage level defined by the comparator.
18 The pads are then milled out of circuit board material and connected accordingly to the circuit. This can then be hidden behind glass or thin paper to visually enhance the technology. The layout of the sensor pad can be seen in figure 13. Figure 13: Capacitive Sense Button Layout. Taken from Cypress Capsense layout guidelines [12]. The button and ground plane are milled onto a printed circuit board. There is a separation gap between them, shown in figure 13.
19 5 Microcontroller Environment of the Electronic Class Schedule 5.1 Functional Division of Microcontrollers In this project two types of PSoC MCUs were used due to the fact that the MCU needed for the capacitive touch sensing did not have enough digital blocks to manage both the capacitive touch and the communication functionality. For the duration of this thesis work they will be referred to as the Control MCU and the Communications MCU. The PSoC microcontroller used for the Control MCU is a CY8C21534.
20 The system has been designed to have several sections of the unit function in a specific order. Every time the electronic class schedule is used, the unit follows the same function flow which is shown in figure 14. Figure 14: System Sequence Block Diagram. As can be seen in the figure, when a user touches a button, the Control MCU sends a logic 1 on the signal line that signifies the user’s button press. The Control MCU then turns on power, by way of block 1, to the Communications MCU.
21 that the picture frame may access the file on the SD card. The picture is shown for a specified amount of time after which the Control MCU will cut power to route 2 effectively turning off power to the enable read signal and electronic picture frame. The process can be initiated at any time by the user by pressing one of the buttons.
22 5.2 Design of Capacitive Touch User Interface The capacitive touch sense interface was designed for use with the CY8C21534-24PVXI PSoC MCU. The board was designed using PADS software according to touch button layout specifications given by Cypress Semiconductor Corporation [8]. The layout of the design can be seen in figure 16. Figure 16: PADS Software Capsense Board Design. Screenshot [16]. The component layout is first designed with PADS Logic.
23 5.3 Interfacing WLAN Module The interfacing of the WiFly module involved both hardware and software configuration. An external antenna was purchased for use with the Wifly unit, to give a boost of 2 decibels (dB) to the antenna system. The range of the internal antenna proved to be too weak for reliable communications. The physical connection to the WiFly unit is a common UART connection.
24 sending commands for delivery to the NFS. Dynamic Host Configuration Protocol (DHCP) was turned on so that the unit would automatically get any available IP address from the wireless network. The IP protocol was set to auto connect on power so that no command was needed from the MCU. The WiFly unit will be powered off when not in use so auto-connect on power up was a viable option. The UART communication parameters were set to 14400 baud rate with no parity bit.
25 WiFly and buffered as it is sent out of the UART connection. The MCU is programmed to enter this raw data directly to the SD card in 512 byte chunks using a FOR loop. The sector count that was received from the server program dictates the length of this loop for proper writing function. After all of the data is received from the UART connection the WiFly unit is no longer needed, and it is powered off by the Communications MCU. 5.
26 MISO, MOSI, SCLK, and SS were not taken directly from the SD card to the MCU as shown in the figure but rather switched through the HEF4066 bilateral switch integrated circuit [15]. Only during the time of reading the file for display will the enable signal to the HEF4066 and the power to the digital photo frame be turned on. This allows the photo frame, upon power up, to read that there is a new file on the SD card, as well as saving power while the unit is not in use.
27 Within the software of the MCU there are two arrays that are used in the writing of data to the SD card. The first is the FAT entry and the second is the Directory entry. The arrays can be seen in figure 19. Figure 19: SD Card File Information Arrays. Figure 19 shows the information that needs to be written to the SD card so that the file is recognized as a picture file. The only information that is modified is the size of the file when the MCU is retrieving information from the server program.
28 As the raw data starts to come in from the wireless unit, a continuous write command is first issued to the SD card, and data is written directly to the card. The write command used to make the data write function is similar to the command 0 that was shown in section 2.3. Figure 20 shows the continuous write command 25 as given via the SPI to the SD card. Figure 20: PSoC Designer SPI CMD 25. Screenshot [3].
29 continuous write command, the host device must fill the remaining space of the last sector with dummy bytes of the hex value 0x00 and then send the stop token in order to receive a data accepted token from the SD card. The stop token is a single byte of hex 0xFD.
30 6 Client-Server Functionality of the Electronic Class Schedule 6.1 Schedule File Server Overview The schedule file server program was designed to serve as a file server for the electronic class schedules, as well as creating the schedule picture files from data retrieved from the school schedule website. The functional block diagram can be seen in figure 21. Figure 21: Schedule File Server Functional Block Diagram.
31 The application was kept basic as the only function at that point in time was to listen out for file requests and send the files. Figure 22 shows how the listbox looks when the application is in operation. Figure 22: Server Program Application Console in Microsoft Visual Studio. Screenshot [19]. As shown in the figure, the text box shows the status of the server program. In this example it is listening out for an incoming request.
32 the school’s website and parsing information for that particular classroom. It then uses this data to create a text file version of the schedule and then converts it to a JPG picture file. Each classroom will have a separate JPG file for each day of the current week. The program can be set to create files on intervals of every 30 minutes so as to keep the schedules up to date for display.
33 representing the letter S as a start byte, signifying that it is ready for the raw data. Once the start byte is received the server program then starts to send the raw data of the schedule file. When all data has been sent, the connection is terminated and a message is shown on the listbox that the file has been sent. The server then returns to the idle mode and shows that it is again listening out for a request.
34 7 Discussion 7.1 Implementation Issues During this project there were several issues that needed to be overcome, which did not have simple solutions. These proved to be good learning points and areas for self development. The first issue was getting the write command to work with the SD card. The documentation for issuing commands to any SD card is difficult to find. Every SD card manufacturer has little differences in the way the cards are communicated with.
35 implemented to show outputs on the LCD. A separate SPI connection was programmed into the Communications MCU and output to the temporary MCU which ran on 5 volts and had an LCD. This way the whole system could stay at 3.3 volts and the responses from the SD card could be forwarded and displayed for debugging. Working with 3.3 volts resulted in problems in switching power to the individual areas of the system.
36 signals would not pass. This assumption proved to be wrong as it would still degrade the signal existing in the other switching device. With the HEF4066 left powered up and the enables held to Gnd when a separation of data lines is required, the system works as it is supposed to. 7.2 Results The electronic class schedule performs as it was designed. The user may select one of five buttons and receive the respective picture file on the screen.
37 Another area of development involving speed is seeing if the Bus mode of the SD card can be used with the PSoC MCU. Research into using the Bus mode was not done. During the project this concept was not seen in any other similar SD card embedded projects. If this can be accomplished, then three data lines would be available for the movement of data. The addition of extra memory to the unit could assist in enhancing the user experience.
38 The last area of development is the server program. This program could be developed further to show all files that have been parsed and turned into JPG files. It could give information such as size and the time they were created and show a list of the files in the working program window. The program could also show which electronic class schedule was connected to it and keep a small log of the communications it has done. Also the current design only handles one request at a time.
39 8 Conclusions The goal of developing a low priced system that could retrieve class schedules over the wireless network and present them on a screen for the user was met. A server program was written that can properly listen out for file requests and return the correct file to the unit which made the request.
40 References 1. HxD hex editor [computer program]. Version 1.7.7.0. Saarbrücken, Germany: mhnexus; April 3, 2009. 2. Grover James. SD card map [online]. Akron Ohio, USA: University of Akron. URL: http://www.ecgf.uakron.edu/grover/web/ee470/labs/SDCardMap.pdf. Accessed November 12, 2010. 3. PSoC Designer [computer program]. Version 5.1. San Jose California, USA: Cypress Semiconductor Corporation; December 27, 2010. 4. SD Association. SD Specifications Part 1 Version 2.00 [online]. URL: http://www.sdcard.
41 12. Cypress Semiconductor Corporation. Capsense layout guidelines [online]. San Jose, California, USA: Cypress Semiconductor Corporation. URL: http://www.cypress.com/?docID=2995. Accessed December 19, 2010. 13. Cypress Semiconductor Corporation. CY8C21534 datasheet [online]. San Jose, California, USA: Cypress Semiconductor Corporation. URL: http://www.cypress.com/?rID=3345. Accessed December 18, 2010. 14. Cypress Semiconductor Corporation. CY8C29466 datasheet [online].
42 23. Horowitz Paul, Hill Winfield. The art of electronics, second edition. Cambridge Massachusetts: Cambridge University Press; 2009. 24. Micrel . MIC5200 voltage regulator datasheet [online]. URL: http://pdf1.alldatasheet.com/datasheet-pdf/view/407520/MICREL/MIC52003.3BS.html. Accessed February 10, 2011.
Appendix 1 1(1) Microcontroller Specifications CY8C21534 Cypress - Clock 24 MHz - Operating voltage 2.4 V to 5.
Appendix 2 1(15) Program Code - Communication MCU Program //------------------------------------------------------------// Metropolia University of Applied Sciences // Marcel Mushik 24 April 2011 // Final year project - Electronic class schedule // Code: Control MCU program //------------------------------------------------------------// Include files ---------------------------------------------#include // part specific constants and macros #include "PSoCAPI.
Appendix 2 2(15) } else if ((PRT2DR & 0x40) == 0x40) { decision = 4; button_press(); } else if ((PRT0DR & 0x01) == 0x01) { decision = 5; button_press(); } } } // Button 1 P2.6 // Notes decision // Forwards decision to function // Button 1 P0.
Appendix 2 3(15) } SD_pwr_Switch(1); Timer8_Start(); // Turns on digital photo frame // Function description---------------------------------------// Timer which keeps count of timer interrupts. // Creates time before the photo frame automatically turns off.
Appendix 2 4(15) Program Code - Communication MCU Program //------------------------------------------------------------// Metropolia University of Applied Sciences // Marcel Mushik 24 April 2011 // Final year project - Electronic class schedule // Code: Communication MCU program //------------------------------------------------------------// Include files ---------------------------------------------#include // part specific constants and macros #include "PSoCAPI.
Appendix 2 5(15) Write_enable_Start(); // Makes ready Write_enable for operation Loading_LED_Start(); // Makes ready Loading_LED for operation Counter8_WritePeriod(0x60); // Sets period to 60 clocks Counter8_WriteCompareValue(0x30); // Generates a 50% duty cycle Counter8_Start(); // Starts counter // UART_Start(UART_PARITY_NONE); Enables UART SPIM_Start(SPIM_SPIM_MODE_0 | SPIM_SPIM_MSB_FIRST); // Sets SD SPI parameters SPIM2_Start(SPIM2_SPIM_MODE_0 | SPIM2_SPIM_MSB_FIRST);// Sets Debug SPI parameters while
Appendix 2 6(15) while(UART_cReadChar() == 0x00); // Scans for valid data data_size[0] = UART_bReadRxData(); // Stores Lowest byte of // file size data_size[1] = UART_cGetChar(); // Stores middle byte of file size data_size[2] = UART_cGetChar(); // Stores highest byte of file size // Find number of bytes left after all 512 size writes will be made file_size_partial = ((data_size[1]<<8)|data_size[0]) + 1; while(file_size_partial > 512) file_size_partial = file_size_partial - 512; file_size = file_size_pa
Appendix 2 7(15) write_data_init(0x00, 0x04, 0x00, 0x00); // Writes raw data start_token(); // Address sector 512, offset 40000 Counter8_WritePeriod(0x02); // Sets period to 2 clocks Counter8_WriteCompareValue(0x01); // Generates a 50% duty cycle UART_CPutString("S"); // Sends 'S' to show ready for raw data while(UART_cGetChar() == 0x00); // Waits for raw data to start coming write_data_raw(UART_bReadRxData()); for(i=0;i<511;i++) // Writes first sector of raw data { // Previous line read the 512th byte w
Appendix 2 8(15) // Function description---------------------------------------// Initializes SD card for SPI communications void card_initialize(void) { for(i=0; i < 2400; i++); for(i=0; i < 100; i++) { SPIM_SendTxData(0xFF); // set message to transmit while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; } // Delay // Clock train for SPI mode SD_SS_Switch(0); SPIM_SendTxData(0xFF); // set message to transmit while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; SPIM_SendTxData(0x40); // set messa
Appendix 2 9(15) SPIM_SendTxData(0x00); // set message to transmit while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; SPIM_SendTxData(0x00); // set message to transmit while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; SPIM_SendTxData(0x00); // set message to transmit while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; SPIM_SendTxData(0x00); // set message to transmit while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; SPIM_SendTxData(0x95); // set message to transmit while(!(SPIM_bRe
Appendix 2 10(15) // Function description---------------------------------------// Start token for continuous write command. void start_token(void) { SPIM_SendTxData(0xFC); // set message to transmit while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; } // Function description---------------------------------------// Sends one byte to SD card while write command is open.
Appendix 2 11(15) while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; Rdata = SPIM_bReadRxData(); for(i=0; i < 100; i++) { SPIM_SendTxData(0xFF); // set message to transmit while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; Rdata = SPIM_bReadRxData(); } CS_toggle(); while (Rdata != 0xFF) { SPIM_SendTxData(0xFF); // set message to transmit while(!(SPIM_bReadStatus() & SPIM_SPIM_SPI_COMPLETE)){}; Rdata = SPIM_bReadRxData(); } } // Function description---------------------------------------- // Sen
Appendix 2 12(15) Program Code – File Server Program //-----------------------------------------------------------// Metropolia University of Applied Sciences // Marcel Mushik 24 April 2011 // Final year project - Electronic class schedule // Code: File server program //-----------------------------------------------------------// Include files ---------------------------------------------using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.
Appendix 2 13(15) // Start listening server.Start(); // Displays information to listBox for user listBox1.Items.Add("Local IP address:"); listBox1.Items.Add(ip); listBox1.Items.Add("Listening on port:"); listBox1.Items.Add(port); listBox1.Items.Add(""); listBox1.Items.Add("Listening..."); // Creates an AcceptSocket for connection connection = server.
Appendix 2 14(15) // Adds file type to file name file += ".jpg"; // Opens file access stream FileStream data = new FileStream(file, FileMode.Open, FileAccess.Read); // Opens file FileInfo info = new FileInfo(file); int len = (int)info.Length; // Retrieves file size byte[] bLen = BitConverter.GetBytes(len); // Sends file size, bytes writer.Write(bLen, 0, 4); writer.Flush(); // Sends number of sectors in file bLen = BitConverter.GetBytes((len / 512) + 1); writer.Write(bLen); writer.Write(0); writer.
Appendix 2 15(15) { } // Program is stopped if an exception is present server.Stop(); RunServer(); } } while(message != "QUIT1"); catch (Exception error) { // error code can be added here } } // Function description--------------------------------------------- // Initializes form. public Form1() { InitializeComponent(); } // Function description--------------------------------------------- // Starts thread for communications.
Appendix 3 1(1) List of Electrical Components (1) Digital photo frame (1) WiFly WLAN module (1) CY8C21534 PSoC mictrocontroller (1) CY8C29466 PSoC mictrocontroller (1) HIN-232 Serial to UART (2) HEF-4066 Bilateral switch (3) MIC5200 3 V voltage regulator (1) J380BV PNP transistor (4) BC556 PNP transistors (5) BC546B NPN transistors (1) 4-pole on/off switch (1) Single pole on/off switch (1) Male DB9 serial connector (1) Micro SD to SD adaptor (5) 2 µF capacitor (1) 100 µF capacitor (1) 10 nF capacitor (1) 1
Appendix 4 1(3) Appendix 4: Circuit Board Diagrams
Appendix 4 2(3)
Appendix 4 3(3)