AN1128 TCP/IP Networking: Internet Radio Using OLED Display and MP3 Audio Decoder Author: Howard Schlunder Rodger Richey Microchip Technology Inc. FIGURE 1: INTERNET RADIO DEMONSTRATION BOARD ICD 2 REAL ICE™ INTRODUCTION Internet Radios are defined as a “hardware device that receives and plays audio from Internet Radio stations or a user’s PC”. The audio is streamed to the radio using MPEG-1 Audio Layer 3 (MP3), Windows® Media Audio (WMA) or Advanced Audio Coding (AAC) compressed audio formats. The “radio stations” range anywhere from public AM or FM radio stations that broadcast over the air as well as on the Internet, to University radio stations down to any individual wishing to create their own radio station. The idea of an Internet Radio is not a new idea. You can buy commercially available Internet Radios, ranging in price from $129 US to $400 US, from companies such as Barix™, Logitech™/Slim Devices, Roku™ Labs and Philips®. Most of these make the connection using wired Ethernet; some have a wireless connection. Power Jack Ethernet Jack Heartbeat LED Headphone Plug OLED Display Push Button Switches The focus of this application note is to show how to create a low-cost Internet Radio that connects to SHOUTcast servers and plays MP3 audio. The hardware uses the PIC18F67J60 microcontroller with integrated 10Base-T MAC and PHY and an external MP3 audio decoder. The software uses the standard Microchip TCP/IP Stack with external serial SRAM buffering to ease the streaming of compressed audio data to the MP3 decoder. Figure 1 shows a picture of the Internet Radio Demonstration Board (DM183033) that is available for purchase on MicrochipDirect or through one of Microchip’s distributors. Figure 2 shows the block diagram for the Internet Radio design used in this application note. © 2009 Microchip Technology Inc. DS01128B-page 1 AN1128 FIGURE 2: INTERNET RADIO BLOCK DIAGRAM 23K256 x 2 RJ45 MagJack PIC18F67J60 ® 32-Kbyte Serial SRAM CS 32-Kbyte Serial SRAM SPI I/O Pins I/O Pins CS 10Base-T MAC/PHY I/O Pins MP3 Audio Connector +5V to +9V OLED Display 128 x 64 MCP1703 MAKING THE CONNECTION The heart of this design is the PIC18F67J60 microcontroller. This MCU has an integrated 10Base-T MAC and PHY peripheral in addition to the standard peripheral set of 64-pin PIC18 MCUs. It controls the entire process, from making the connection to the audio VS1011 server, to streaming the data to the MP3 decoder, to displaying status on the LEDs and OLED display and reading user input on the push button switches. While this particular application does not use many of the resources on the PIC18F67J60, it does have a full complement of peripherals. Table 1 shows the feature set for all PIC18FXXJ60 devices. PIC18F66J60 64K 3808 8192 39 11 2/3 1 Y Y 1 2 2/3 N PIC18F66J65 96K 3808 8192 39 11 2/3 1 Y Y 1 2 2/3 N N PIC18F67J60 128K 3808 8192 39 11 2/3 1 Y Y 1 2 2/3 N N PIC18F86J60 64K 3808 8192 55 15 2/3 1 Y Y 2 2 2/3 N N PIC18F86J65 96K 3808 8192 55 15 2/3 1 Y Y 2 2 2/3 N N PIC18F87J60 128K 3808 8192 55 15 2/3 1 Y Y 2 2 2/3 N N PIC18F96J60 64K 3808 8192 70 16 2/3 2 Y Y 2 2 2/3 Y Y Device Flash SRAM Data Program Memory Memory (bytes) (bytes) MSSP Ethernet TX/RX Buffer (bytes) I/O 10-Bit A/D (ch) CCP/ ECCP SPI Master I2C™ Timers PSP 8/16-Bit External Memory Bus Comparators PIC18FXXJ60 MICROCONTROLLER FAMILY FEATURES EUSART TABLE 1: Headphone Connector N PIC18F96J65 96K 3808 8192 70 16 2/3 2 Y Y 2 2 2/3 Y Y PIC18F97J60 128K 3808 8192 70 16 2/3 2 Y Y 2 2 2/3 Y Y DS01128B-page 2 © 2009 Microchip Technology Inc. AN1128 The second crucial piece of this application is the Microchip TCP/IP Stack. The Stack is what makes the connection to the audio server and then receives the audio stream for deployment to the MP3 decoder. The Stack is a suite of programs that provides services to all FIGURE 3: TCP/IP-based applications. You don't need to know all of the intimate details of the TCP/IP specifications to use the Stack. Microcontrollers using embedded TCP/ IP Stacks can be used to enable a myriad of applications, such as those shown in Figure 3. EMBEDDED ETHERNET ENABLED APPLICATIONS Lights Pool Leveler Entry Monitor Security Cell Phone Sprinkler System 10 Mbps Ethernet Thermostat Fire/Smoke Detector Office Phone Games Power Based on the TCP/IP reference model, the Stack is divided into multiple layers, where each layer accesses services from one or more layers below it. Per the specifications, many of the TCP/IP layers are “live”, in the sense that they not only act when a service is requested, but also when events like time-outs or new packets arrive. The Stack is modular in design and written in the C programming language. Typical © 2009 Microchip Technology Inc. implementations will use 30-60 Kbytes of code, depending on which modules are included, leaving plenty of code space on the PIC18FXXJ60 devices. Table 2 shows many of the supported protocols. The size of each protocol is not listed here in the application note but is available in the help files that come with the TCP/IP Stack. DS01128B-page 3 AN1128 TABLE 2: MICROCHIP TCP/IP STACK SUPPORTED PROTOCOLS Application Transport HTTP FTP SMTP Telnet SNMP NetBIOS UDP Bootloader Ping ICMP IPv4, ARP Ethernet – ENC28J60 or PIC18F97J60 Family The Microchip TCP/IP Stack software provides many essential services to implement the Internet Radio, including protocols, such as TCP, UDP, DHCP, DNS, IP and ARP. The Transmission Control Protocol (TCP) transports the main MP3 audio and metadata while providing flow control to prevent the SHOUTcast server from sending more data than can be held in the Internet Radio RAM at any given time. The User Datagram Protocol (UDP) transports DHCP and DNS packets. The Dynamic Host Configuration Protocol (DHCP) automatically provides the board’s IP address, gateway address, subnet mask and other configuration parameters when the Ethernet connection is first established. These configuration parameters tell the board how the network is organized and how to reach the Internet. The Domain Name System (DNS) is used whenever the user changes the current radio station. It converts the radio station’s static host name (ex: “scfire-dll-aa02.stream.aol.com”) into a potentially dynamic IP address (ex: 188.8.131.52) which the rest of the TCP/IP Stack protocols require. The Internet Protocol (IP) transports both TCP and UDP packets across the Internet to the correct destination. However, before the IP transport can be used, the Stack uses the Address Resolution Protocol (ARP) to obtain the Ethernet MAC address (ex: 00-04-A3-BE-EF-1E) associated with the local Internet gateway. All of these services work simultaneously, or in tandem, to establish the connection to the radio server and then ensure a robust user listening experience. These protocols all work in the background without requiring any manual user configuration or intervention. While this application is based on the PIC18FXXJ60 devices, the Stack has been optimized for use on any PIC18, PIC24, dsPIC® or PIC32 device with enough program memory. It includes support for the ENC28J60 Stand-Alone Ethernet Interface Controller for each of these device platforms. The best part is that the Stack is royalty-free and requires a no fee license agreement, restricting use to Microchip microcontrollers and digital signal controllers. The Stack can be downloaded at www.microchip.com/tcpip. The files for the Internet Radio are part of this distribution. DS01128B-page 4 DNS TCP Internet and Network Access Physical DHCP Now that we have the embedded application defined, we need to have the audio source. There are many sources of audio available off the Internet using file formats described previously. For this application, we will focus on the SHOUTcast protocol and servers. SHOUTcast is a freeware audio streaming technology developed by Nullsoft™. SHOUTcast only uses MP3 or AAC audio encoding and an HTTP-like protocol to transfer files from the server to the client. SHOUTcast is available in both server and client forms on Windows 95/98/ME/NT/2000/XP, Macintosh® OS X, FreeBSD™, Linux and Solaris™ at www.shoutcast.com. To make the connection from the PIC18F67J60 device to the SHOUTcast server, we must send it a message. The following example shows a typical data structure within the Internet Radio code used to establish the connection. EXAMPLE 1: stations.HumanName = "SKY.FM Top Hits, 96K"; stations.HostName = "scfire-dll-aa02.stream.aol.com"; stations.port = 80; stations.Message = "GET /stream/1014 HTTP/1.0\r\n" "Host: scfire-dll-aa02.stream.aol.com\r\n" "Accept: */*\r\n" "Icy-MetaData:1\r\n" "Connection: close\r\n\r\n"; The structure, stations[ ], holds the information for the various radio stations that are preprogrammed into the microcontroller. Metadata refers to information about the data. In the case of a SHOUTcast stream, metadata refers to the song name and artist. If metadata is not enabled, the human readable name of the radio station that is provided in the structure can be displayed. With metadata enabled, the station name can be automatically obtained from the SHOUTcast server during the initial connection phase. In the current application, the HumanName string is not used. We use the radio station name provided in the metadata from the SHOUTcast server. The remote DNS HostName is provided, specifying where on the Internet the SHOUTcast server is located. The TCP port through which the connection is made follows. Normally, the port is 80, but can vary depending on the setup of the SHOUTcast server you are connecting to. © 2009 Microchip Technology Inc. AN1128 The last piece is the Message to initiate the connection to the SHOUTcast server. The GET command specifies the name of the audio file or stream on the server. The Host specifies which target server we want to connect to. In some cases, there are multiple servers running through a single Internet IP address, and in most cases, the Host parameter is always identical to the HostName field. The Accept field indicates that we are interested in receiving any audio data type, not limited to MP3s alone. In addition to MP3s, the Internet Radio can also play uncompressed PCM WAV streams. Icy-metadata determines if song metadata should be inserted into the stream. The most common data inserted is artist name and song title. In the current application, we enable metadata and parse the incoming stream. Typically, the SHOUTcast server sends a variable length block of metadata after every 8192 bytes of audio. We must continuously check the location in the stream and extract the metadata. If the metadata was not filtered out of the stream, the audio decoder would play it, resulting in an audio glitch. The Connection: close field notifies the server that it should immediately disconnect our TCP client if the server runs out of data to send us. This generally occurs only during the initial connection phase if we provide an invalid GET string, or the server is overloaded and cannot handle another radio listener. By immediately disconnecting, we can attempt to automatically reconnect or give up and switch to a different radio station. The typical response from the SHOUTcast server is shown below. Each of the tags in this response starts with an Icy prefix. This is part of the SHOUTcast protocol. EXAMPLE 2: ICY 200 OK icy-notice1: <BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR> icy-notice2: SHOUTcast Distributed Network Audio Server/SolarisSparc v1.9.93atdn<BR> icy-name: S K Y . F M - Top Hits Music who cares about the chart order, less rap & more hits! icy-genre: Pop Top 40 Dance Rock icy-url: http://www.sky.fm icy-pub: 1 icy-metaint: 8192 icy-br: 96 icy-irc: #shoutcast icy-icq: 0 icy-aim: N/A © 2009 Microchip Technology Inc. The main information used by the Internet Radio application is the following: • icy-name – radio station name • icy-metaint – the interval at which metadata arrives in the audio stream • icy-br – the bit rate in kbps of the audio stream; the bit rate can also be read out of the MP3 decoder chip If the radio receives the icy-name SHOUTcast response, the MP3 client task will execute a callback function, allowing the main application to save the result. The callback is NewServerTitleProc(BYTE *strServerTitle), where strServerTitle is set to the contents of icy-name. The string is volatile and must be saved by the main application code if it wishes to continue using the string after returning from the callback function. The other tags are not meaningful for this application so are discarded automatically by the MP3 client task. Once we receive the server response, the audio stream follows, which we will discuss in the next section. Two useful pieces of information, usually transferred as metadata in the audio stream, are the song title and author. The MP3 client code checks at every metadata interval (icy-metaint), usually every 8192 bytes, for the following text: • StreamTitle='<artist name, song name>'; • StreamUrl='<url>'; The callback function, NewStreamTitleProc(BYTE *strStreamTitle), provides the contents of the StreamTitle metadata. Here again, the data is volatile and must be saved by the application. Providing this data makes a big difference in customer satisfaction with the Internet Radio because the song title and artist can be displayed. DS01128B-page 5 AN1128 DECODING THE AUDIO STREAM stripped off while being transferred out of the Ethernet module SRAM and are not stored in this external 32K x 8 SRAM. The TCP protocol communicates the amount of free space in this external SRAM chip back to the remote SHOUTcast server, permitting the SHOUTcast server to throttle the data transmission to prevent buffer overflow. Similarly, a large amount of free space communicated to the SHOUTcast server encourages the transmission of more audio data to prevent buffer underflow. The ~4 Kbytes of general purpose RAM inside the PIC18F67J60 are not enough to buffer the incoming audio stream and keep up when experiencing excessive packet loss on the Internet. The TCP transport protocol carrying the MP3 data across the Internet has a variable retransmission delay, which can be 300 ms or longer for packets that get lost. This requires a larger RAM buffer, which would allow the software to have enough audio data buffered which can compensate for these variable latency issues. The result of not enough RAM are clicks and pops in the audio output resulting from missing packets. In the main() program loop, the MP3Client.c application module periodically copies data out of the TCP buffer and into the second 32K x 8 SRAM chip. While being copied, the application strips out the song title and other metadata from the stream and displays it on the OLED. The second external SRAM is written with the raw MP3 stream with no extraneous metadata, allowing minimal processing before being finally copied into the VS1011 audio decoder. In order to provide more RAM, two external serial SRAMs from Microchip Technology (23K256) provide a total of 64 Kbytes; 32 Kbytes for the TCP layer and 32 Kbytes for the audio buffer. Figure 4 shows a flow diagram for the incoming stream for the server. The SPI SRAM chips are functionally isolated from each other; however, they are both serving the function of implementing FIFO buffers. In the first chip instance, the 32K x 8 SRAM bolts directly into the TCP module of the TCP/IP Stack. The TCP layer stores all incoming application layer data in this chip. This includes the MP3 stream with the embedded song title and other metadata. All TCP, IP and Ethernet headers are FIGURE 4: Periodically, during code execution, a timer expires and triggers the MP3Client.c application’s Interrupt Service Routine (ISR). In the ISR, the MP3 data is copied out of the second external SRAM and written directly to the VS1011 audio decoder. The VS1011 signals to the ISR when more data is required by asserting its DREQ signal output. DATA FLOW DIAGRAM USING EXTERNAL SERIAL SRAM Microchip Internet Radio PIC18F67J60 VLSI VS1011 MP3 Decoder and DAC MP3Client.c Application Interrupt Context MP3Client.c Application main() Context OLED display and push buttons SHOUTcast Shoutcast Server Server DS01128B-page 6 Internet Ethernet Module 8K x 8 SRAM 256K 32K xx 88 SPI SPISRAM2 SRAM 23K256 256K 32K x 8 SPI SPI SRAM SRAM 23K256 Microchip TCP/IP Stack (TCP Layer) © 2009 Microchip Technology Inc. AN1128 With the audio data buffered, we can stream it to the MP3 decoder. As mentioned before, we need to strip out the metadata; otherwise, the MP3 decoder tries to decode this as compressed audio data which results in blips in the reconstructed audio output. For this application, we selected the VS1011 MPEG Audio Codec from VLSI Solution Oy. This device contains all the necessary components for decoding and playing the audio stream: • High-performance, low-power processor core • Decodes MPEG 1.0 and 2.0 Audio Layer III, WAV, PCM and IMA ADPCM • Up to 320 Kbit/s MP3 • Volume, bass and treble controls • High-quality stereo DAC • Stereo earphone driver capable of 30Ω loads • Separate serial control and data interfaces © 2009 Microchip Technology Inc. Figure 5 shows a generic block diagram of the connection between the PIC18F67J60 and the VS1011. The following signals, with descriptions, are used: • • • • • • • SO – SPI serial output SI – SPI serial input SCLK – SPI serial clock xCS – SPI chip select for commands xRESET – chip Reset xDCS – SPI chip select for data DREQ – data request DS01128B-page 7 AN1128 FIGURE 5: MCU TO MP3 DECODER CONNECTIONS 2.7V AVDD Limits 2.5V-3.6V 10 μF 6.3V 100 nF AGND 2.7V DVDD Limits 2.5V-3.6V 10 μF 6.3V 100 nF GND VS1011 30 29 28 23 3 PIC® Microcontroller or Digital Signal Controller SO SI SCLK XCS XRESET DVDD DGND 22, 21, 20, 16, 4 8 AVDD OPEN 13 XDCS/BSYNC LEFT 18 XT1/HCLK RIGHT 17 XT2 GBUF 33 34 9 10 32 100K GND 33 pF 19, 14, 6 45, 43, 38 GND 46 39 42 GPD0 GPD1 GPD2/OCLK 44 GPD3/SDATA RCAP AGND 47, 41, 40, 37 TEST 1M 100 nF AGND 33 pF AGND 24.576 MHz Connect AGND to GND together as close to the chip as possible 100K 100K 100K 100K GND GND GND AGND 20 20 10 CN1 AVDD 100n 47n 10n 47n GND GND GND DS01128B-page 8 ESD protection type diodes should be used GND © 2009 Microchip Technology Inc. AN1128 Once the chip is configured, we only need to feed it data when it requests it. The occasional request to change volume, bass or treble is fed to the SPI control interface and does not interfere with data transfer. The software monitors the DREQ line from the VS1011, and while asserted, feeds data to the device. When DREQ goes high, it indicates that the VS1011 is capable of accepting at least 32 bytes of data. If DREQ goes low, the firmware stops sending data. As mentioned before, the VS1011 has controls for volume, bass and treble. We had to make some tradeoffs at this point. Our display was small and we only had three push button switches. Our goal was a simple user interface. We, therefore, only have control of radio station, volume and bass; treble was left out. Volume is controlled by the SCI_VOL register in the VS1011. It is a 16-bit register, with the upper 8 bits for the left channel and the lower 8 bits for the right channel. A value of 0 represents the highest volume and a value of 254 represents total silence. Each step represents a 0.5 dB increment. On power-up of the application, the volume of both channels is set to 31. The SetVolume(BYTE vRight, BYTE vLeft) function is used to modify the volume. It follows the device settings, where 0 is maximum volume and 254 is silence. Bass is controlled in a similar manner. The SCI_BASS register in the VS1011 contains controls for both bass and treble. Bass control has two settings: bass boost and frequency limit. The boost control value ranges from 0 to 15, with 0 being off and each step representing 1 dB of bass enhancement. The frequency limit also has a 2 to 15 range with each step representing increments of 10 Hz. The SetBassBoost(BYTE bass, BYTE gfreq) function is used to set both. USER INTERFACE Now that the hardware and software is set up and working, we need to provide status feedback to the user and allow them to control the application. The discrete LED provides a heartbeat from the TCP/IP Stack, indicating that the TCP/IP Stack is operating correctly. The application provides three push button switches for control. The push button switches are used to navigate the simple menu structure which is displayed on the OLED display. You can change the channel forward or backward, and increase or decrease the bass and volume levels. The OLED display allows the application to display the status of the Internet Radio. It provides the radio station name, the song title and artist, and also the navigation menu to change the radio station, bass and volume. This display is a monochrome, 128 x 64 display from OSD Displays, part number OSD-2864ASWAG01. © 2009 Microchip Technology Inc. OLED displays provide excellent contrast, high brightness, low-power, fast response times, wide viewing angles and several colors. The only two drawbacks to the display are the lifetime and burn-in. This display has a life of 10,000 hours at maximum brightness. The life can be extended by adding an ambient light sensor and dim the display according to the ambient light. The OLED displays can also suffer from burn-in of images displayed. It is therefore recommended that a screen saver is implemented when images are displayed for long periods of time. For the purposes of this application, the navigation menu is blanked after 60 seconds and the radio station name and song title and artist are constantly rotated at 1 character shift per second. This ensures that there is no static image displayed for more than 60 seconds. The particular display used in this application is available with SPI, I2C™, and both 68 and 80 series parallel interfaces. The only difference between the Serial and Parallel modes is that you can not read from the display in the Serial modes. The Parallel mode is implemented in this application because we wanted to use a put pixel subroutine which requires reading the contents of memory and then modifying one bit of data. The other feature of this display is that it provides a voltage boost driver circuit that can be used with an assortment of external components to create the 9-12V required for the drive circuit. The OLED display uses the SH1101A driver from Sino Wealth. The 132 x 64-bit RAM is organized as 8 pages, 0 through 7, as shown in Figure 6. The OSD Displays supplied OLED display has only 128 columns, and therefore, has 4 extra bytes. Note that the first column that is visible on the display starts at column 2, not 0, as one would expect. FIGURE 6: GRAPHIC DISPLAY DATA RAM FOR THE OLED DISPLAY Page 0 (Area Color Section) Page 1 (Area Color Section Page 2 Page 3 Page 4 Page 5 Page 6 Page 7 DS01128B-page 9 AN1128 Each page of the driver is arranged as shown in Figure 6. Each byte written to the display is shown vertically. This results in a page being 8 pixels high by 128 pixels wide. As Figure 7 shows, the Least Significant bit is towards the top of the page and the FIGURE 7: Most Significant bit is towards the bottom of the page. In the example shown, page 2 is selected and the fourth byte in the page is written with 0xFF, which turns all bits in that column on. PAGE 2 EXAMPLE SHOWING STRUCTURE OF RAM vs. WHAT IS DISPLAYED SEG0 SEG2 (First visible column) SEG131 LSb [D0] Page 2 •••••••••••• MSb [D7] This application displays an initial welcome screen. The opening graphic is 128 x 64 pixels and the image is stored in the file, OSDOLED.c. We use the function, oledPutImage(rom unsigned char *ptr, unsigned char sizex, unsigned char sizey, unsigned char startx, unsigned char starty), to write this image to the display. This function allows a variable image size and placement on the display. We provide a pointer to the array of data, the x and y size of the image, and also the x and y coordinates to start. The application also provides a font. The font is stored in the file, OSDOLED.c, and is only the characters from 0x20 to 0x7E on the ASCII chart. Since most applications don't use the characters outside this range, we remove them from the array to save memory. The font is 5 x 8 with the last line being blank. There are two functions associated with writing characters to the display. Characters can be written as 1 or 2 pages high using the functions, oledWriteChar1x(char letter, unsigned char page, unsigned char column) or oledWriteChar2x(char letter, unsigned char page, unsigned char column). Because of the structure of the display, font sizes are limited to page height boundaries. For one-page tall characters, you DS01128B-page 10 select the page and starting column. The character is written to the page at the starting column address. The function does not check to see if the starting column value is within the size of the display. For the two-page tall characters, the only difference is that the page states the 1st of two pages to display the characters. This function also performs no checking on location. In this application, pages 0 and 1 are used to display the song title. Pages 2 and 3 display the URL as obtained through the metadata. These pages are shifted from left to right, to display text longer than the width of the display. Page 4 displays the IP address obtained through DHCP. Pages 5-7 are used for menuing. Page 5 is only used on the submenus to display which submenu the application is currently in. Pages 6 and 7 display the action that is taken by pushing the corresponding push button switch. These pages disappear after 60 seconds as part of the screen saver. Any press of a push button switch will display the menu for input. To better understand the operation of this display, it is recommended that you obtain copies of the SH1011A data sheet and the OSD Displays OLED data sheet. See the “References” section for more details. © 2009 Microchip Technology Inc. AN1128 DEBUGGING INTERNET CONNECTIONS When developing applications using TCP/IP and Ethernet, you may find an instance where having a tool to debug an issue is required. When developing the SHOUTcast interface code, we used a tool called Wireshark to figure out what an application sends to a SHOUTcast server to initiate the stream, what the server responds with and how the metadata is embedded in the audio stream. Wireshark allows data to be captured from TCP/IP connections on your PC. You can use Winamp or other player software to make connections to SHOUTcast servers and capture the data streams. The other important piece of information acquired with Wireshark is the IP address and port number for these Internet Radio stations. This is needed to make the connection. Wireshark is a free download available at http://www.wireshark.org. FUTURE CONSIDERATIONS This application note was designed to provide an example of the capabilities of 8-bit microcontrollers running TCP/IP Stacks and interfacing to existing Internet infrastructure. There are many improvements that can be made to make the Internet Radio design more desirable and customer friendly. The first change is more for aesthetics than performance. Many handheld devices are using QVGA graphics LCDs to display information. These displays are quite powerful, ranging in colors from 256 to more than 65,000 colors. They are often packaged with a resistive touch screen that can replace any push button switches. The combination of the two can result in a very powerful user interface to the Internet Radio. Companies such as Ramtex Internation ApS, Segger Microcontroller Systems and Microchip offer graphics LCD libraries that greatly simplify the interface to the display and generation of objects, menus, etc. © 2009 Microchip Technology Inc. The second potential change to the application pertains to applications that require more processing power than the PIC18F67J60 can provide. Microchip offers a wide range of 16-bit microcontrollers that increase the performance up to 40 MIPs. The PIC24F microcontrollers offer 16 MIPs of performance and many peripherals, such as a Parallel Master Port (PMP) to interface to graphics LCDs or the Peripheral Pin Select (PPS) module that allows efficient use of I/O pins. Microchip also offers 32-bit microcontrollers in our PIC32 product line with all the same features of PIC24, with up to a 1.5 DMIPS/MHz core. To add the Ethernet interface capability, the ENC28J60 from Microchip provides the same Ethernet MAC and PHY used in the PIC18F67J60, but in a 28-pin stand-alone package with SPI connection. Finally, connections to a subscription-based audio streaming web site, such as Slacker™, Pandora, Live365, etc., can be developed to provide unique audio streaming capabilities. These services allow users to define playlists and select artists to tailor the audio stream to the listener. CONCLUSION At first, the idea of creating an Internet Radio on anything other than a 32-bit microcontroller may not seem feasible. Once the data rates of streaming audio are considered and application overhead is understood, the processing power of the PIC18F67J60 family of microcontrollers coupled with an integrated 10Base-T MAC/PHY can be used to create the basic platform for these radios. The extra bandwidth can be applied to enhance the user interface with touch screens and graphics LCDs. Many thanks to Professor Dr. Francesco P. Volpe and Christoph Stein from the Microcomputer Lab at the University of Applied Sciences Aschaffenburg in Germany for their innovative use of PIC microcontrollers in Ethernet applications. DS01128B-page 11 AN1128 MEMORY USAGE REFERENCES Total Flash program memory on PIC18F67J60 = 131,072 bytes SH1011A Data Sheet – www.sinowealth.com Total memory used by Internet Radio = 40 Kbytes VS1011 Data Sheet and Application Notes – www.vlsi.fi Main routine = 4.7 Kbytes 23K256 Data Sheet – www.microchip.com OLED driver (includes font and introductory image) = 2.7 Kbytes SHOUTcast – www.shoutcast.com VS1011 driver = ~1 Kbyte MP3 client = ~2.5 Kbytes Intro graphics image = ~1 Kbyte Font table = ~0.5 Kbytes Miscellaneous routines = ~2.6 Kbytes TCP/IP Stack protocols = ~26 Kbytes OSD-2864ASWAG01 – www.osddisplays.com Microchip TCP/IP Stack – www.microchip.com/tcpip PIC18F97J60 Family Data Sheet – www.microchip.com Original Internet Radio Design Prof. Dr. Francesco P. Volpe & Christoph Stein, Microcomputer Lab, University of Applied Sciences Aschaffenburg, Wuerzburger Strasse 45, D-63743 Aschaffenburg, Germany; [email protected] Protocols used = TCP, UDP, DHCP, PIC18F97J60 Ethernet driver, ARP, IP, DNS Total data memory on PIC18F67J60 = 3808 bytes Total data memory used by Internet Radio = 1820 bytes Audio and TCP/IP Stack buffering uses 64 Kbytes from the external serial SRAMs. DS01128B-page 12 © 2009 Microchip Technology Inc. +3.3V C16 1 MF C9 1 MF 10K R23 C10 .1 MF 2 10uH L2 16 15 14 13 12 11 10 9 8 7 6 5 4 3 D3 RE4 RF2/AN7/C1OUT RF3/AN8/C2INB RF4/AN9/C2INA RF5/AN10/C1INB/CVREF RF6/AN11/C1INA RF7/ SS1 VDDCORE/VCAP VSS RG4/CCP5/P1D MCLR RB3/INT3 RB2/INT2 RB1/INT1 RB0/INT0 RE0/P2D RE1/P2C .12 ohm 1% R24 MGSF1N02LT1 10 MF C20 D4 D5 D6 D7 D/C MCLR VS_CS XDCS DREQ D0 D1 17 D Q1 S ENVREG D5 RE5 G +3.3V C14 .1 MF MBR0520 18 +3.3V RF1/AN6/C2OUT RF1 1 D2 64 RE2/P2B 63 RE3/P3C 62 RE4/P3B 61 20 AVDD 19 xRESET RE5/P1C AVSS 60 RD0/P1B RA3/AN3/VREF+ RESET 59 RD1/CCP3/P3A 57 58 U1 PIC18F67J60 24 RA1/LEDB/AN1 23 R15 C34 6.8uF_Tant 110K 1% R16 930K 1% LEDB VSS 25 RA0/LEDA/AN0 LEDA 21 R/W RD2/CCP4/P3D C2 .1 MF 26 RA2/AN2/VREF22 VDD 56 VSS 55 VSS_TXPLL VDD 54 VDD_TXPLL RA5/AN4 27 +3.3V TPOUT+ 4.7 MF TPOUTVSS_OSC RB6/KBI2/PGC RB5/KBI1/PGM RB4/KBI0 VSS_RX TPIN- TPIN+ VDD_RX R2 1 MF R13 D7 D5 D3 D1 VPP R/W RESET +3.3V 820K VCOMH C19 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 IREF D6 D4 D2 D0 E D/C CS RC2 SCLK SO SI RB7 RB6 RB5 RB4 TPIN- TPIN+ 2.26K 1% +3.3V RESET RC2/CCP1/P1A RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RB7/KBI3/PGD VDD_OSC OSC1/CLKI OSC2/CLKO/RA6 VBREF FB SW C13 1000 pF C30 C15 .1 MF CS 53 RBIAS 52 29 RA4/T0CKI 28 E VSS_TX RC1/T1OSI/CCP2/P2A 50 TPOUT- 49 VDD_TX RC7/RX/DT 51 TPOUT+ RC0/T1OSO 30 RC6/TX/CK 31 © 2009 Microchip Technology Inc. 32 TXD RXD +3.3V 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 +3.3V J5 C8 33 pF TPIN- TPIN+ L1 C5 1 2 3 R25 R26 .1 MF TPOUT- TPOUT+ CS10-25.000MABJTR C7 33 pF 25 MHz Y1 +3.3V Jameco 252735 Power Supply 5V 2.5A NC GND SW VDD2 FB SENSE VBREF VDD1 C86 PS CS RES A0 WR RD VCOMH VPP D0 D1 D2 D3 D4 D5 D6 D7 IREF NC 4 3 2 1 C11 .1 MF +3.3V C6 .1 MF +3.3V C4 .1 MF +3.3V C1 .1 MF 2.2 MF C31 2 2 R12 R9 R8 R7 R5 R4 C3 .1 MF LEDB LEDA 2 180 180 49.9 49.9 49.9 49.9 2 Yellow Grn/Orn IN 1 GND OUT MCP1703-3302E/MB C29 .1 MF 3 08B0-1X1T-36-F 7 8 10 9 5 6 4 3 1 J1 220 MF C33 +3.3V J4 J5 J6 J7 J8 J3 J2 J1 RE5 SO 100K ICD Connector RB6 RB7 MCLR +3.3V RB4 10K 6 5 4 3 2 1 S1 +3.3V SO R34 RE4 100K +3.3V R10 +3.3V R33 4 3 2 1 4 3 2 1 U4 R6 U6 Vcc RF1 10K R14 5 6 7 8 5 6 7 8 180 +3.3V SI SCK HOLD N256S0830HDA 23K256 GND NC SO CS SI SCK HOLD Vcc N256S0830HDA 23K256 GND NC SO CS J4 RC2 S3 SCLK SI SCLK SI RB5 10K R11 +3.3V C39 .1 MF +3.3V C32 .1 MF +3.3V D3 S2 FIGURE A-1: TXD APPENDIX A: RXD +3.3V AN1128 SCHEMATICS INTERNET RADIO SCHEMATICS (SHEET 1 OF 2) DS01128B-page 13 CS10-24.576MABJ-UT C27 22 pF C28 Y2 R19 22 pF 1M VS_CS AVDD AVDD 24 23 22 21 20 19 18 17 16 15 14 13 NC xCS DGND4 DGND3 DGND2 DVDD2 XTALI XTALO DGND1 NC DVDD1 xDCS/BSYNC 11 +3.3V 10K R18 25 xDCS 12 NC NC DREQ 10 NC NC 26 GPIO3/SDATA NC 27 GPIO2/DCLK 9 29 SCLK 28 SCLK 8 AVDD U2 VS1011 30 DREQ 7 +3.3V 10K R17 31 SO SO SI SI NC 6 DVDD0 NC 5 NC TEST 32 4 DGND0 GPIO0/SPIBOOT 33 3 xRESET GPIO1 34 2 NC NC R22 NC AGND0 AVDD0 RIGHT AGND1 AGND2 GBUF AVDD1 RCAP AVDD2 LEFT AGND3 100K 1 NC NC DS01128B-page 14 35 37 38 39 40 41 42 43 44 45 46 47 48 R32 100K AVDD AVDD AVDD 10 10 C25 100 nF R30 R29 C38 100 nF C17 C36 10 nF C35 20 20 10 nF R21 10 MF R20 RIGHT LEFT C18 100 nF C23 100 nF 47 nF C37 10 R31 L3 AVDD 47 nF C26 10 MH +3.3V J2 MG054S05X150DP D4 5 4 3 2 1 FIGURE A-2: 36 xRESET AN1128 INTERNET RADIO SCHEMATICS (SHEET 2 OF 2) © 2009 Microchip Technology Inc. AN1128 APPENDIX B: SOFTWARE FLOWCHARTS Since the TCP/IP Stack is very large, the software flowchart is only for the main routine found in the MainDemo.c file. The files are part of the Microchip TCP/IP Stack distribution that can be found at www.microchip.com/tcpip. FIGURE B-1: MAIN ROUTINE SOFTWARE FLOWCHART (MainDemo.c) MainDemo.c Initialize Device NO Initialize TCP/IP Stack Time Elapsed = 60 secs? YES Initialize OLED menuState = IDLE Initialize VS1011 Clear OLED Lines 5,6,7 NO Time Elapsed = 0.5 sec? Time Elapsed = 1 sec? YES YES Toggle LED0 Station Name > 21 NO YES Shift Song Name Left 1 Character Call Stack and Protocol Tasks Is DHCP Bound? YES Song Name > 21 NO YES Shift Song Name Left 1 Character MP3ClientTask() Process Push Button Switches Time Elapsed = 16 secs? Track IP Address Renewals since Reset YES menuState = MENU Reset OLED to menuState © 2009 Microchip Technology Inc. DS01128B-page 15 AN1128 NOTES: DS01128B-page 16 © 2009 Microchip Technology Inc. Note the following details of the code protection feature on Microchip devices: • Microchip products meet the specification contained in their particular Microchip Data Sheet. • Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the intended manner and under normal conditions. • There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data Sheets. Most likely, the person doing so is engaged in theft of intellectual property. • Microchip is willing to work with the customer who is concerned about the integrity of their code. • Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not mean that we are guaranteeing the product as “unbreakable.” Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our products. Attempts to break Microchip’s code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act. Information contained in this publication regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyer’s risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights. Trademarks The Microchip name and logo, the Microchip logo, Accuron, dsPIC, KEELOQ, KEELOQ logo, MPLAB, PIC, PICmicro, PICSTART, rfPIC, SmartShunt and UNI/O are registered trademarks of Microchip Technology Incorporated in the U.S.A. and other countries. FilterLab, Linear Active Thermistor, MXDEV, MXLAB, SEEVAL, SmartSensor and The Embedded Control Solutions Company are registered trademarks of Microchip Technology Incorporated in the U.S.A. Analog-for-the-Digital Age, Application Maestro, CodeGuard, dsPICDEM, dsPICDEM.net, dsPICworks, dsSPEAK, ECAN, ECONOMONITOR, FanSense, In-Circuit Serial Programming, ICSP, ICEPIC, Mindi, MiWi, MPASM, MPLAB Certified logo, MPLIB, MPLINK, mTouch, PICkit, PICDEM, PICDEM.net, PICtail, PIC32 logo, PowerCal, PowerInfo, PowerMate, PowerTool, REAL ICE, rfLAB, Select Mode, Total Endurance, WiperLock and ZENA are trademarks of Microchip Technology Incorporated in the U.S.A. and other countries. SQTP is a service mark of Microchip Technology Incorporated in the U.S.A. All other trademarks mentioned herein are property of their respective companies. © 2009, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved. Printed on recycled paper. Microchip received ISO/TS-16949:2002 certification for its worldwide headquarters, design and wafer fabrication facilities in Chandler and Tempe, Arizona; Gresham, Oregon and design centers in California and India. The Company’s quality system processes and procedures are for its PIC® MCUs and dsPIC® DSCs, KEELOQ® code hopping devices, Serial EEPROMs, microperipherals, nonvolatile memory and analog products. In addition, Microchip’s quality system for the design and manufacture of development systems is ISO 9001:2000 certified. © 2009 Microchip Technology Inc. DS01128B-page 17 WORLDWIDE SALES AND SERVICE AMERICAS ASIA/PACIFIC ASIA/PACIFIC EUROPE Corporate Office 2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel: 480-792-7200 Fax: 480-792-7277 Technical Support: http://support.microchip.com Web Address: www.microchip.com Asia Pacific Office Suites 3707-14, 37th Floor Tower 6, The Gateway Harbour City, Kowloon Hong Kong Tel: 852-2401-1200 Fax: 852-2401-3431 India - Bangalore Tel: 91-80-3090-4444 Fax: 91-80-3090-4080 India - New Delhi Tel: 91-11-4160-8631 Fax: 91-11-4160-8632 Austria - Wels Tel: 43-7242-2244-39 Fax: 43-7242-2244-393 Denmark - Copenhagen Tel: 45-4450-2828 Fax: 45-4485-2829 India - Pune Tel: 91-20-2566-1512 Fax: 91-20-2566-1513 France - Paris Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79 Japan - Yokohama Tel: 81-45-471- 6166 Fax: 81-45-471-6122 Germany - Munich Tel: 49-89-627-144-0 Fax: 49-89-627-144-44 Atlanta Duluth, GA Tel: 678-957-9614 Fax: 678-957-1455 Boston Westborough, MA Tel: 774-760-0087 Fax: 774-760-0088 Chicago Itasca, IL Tel: 630-285-0071 Fax: 630-285-0075 Dallas Addison, TX Tel: 972-818-7423 Fax: 972-818-2924 Detroit Farmington Hills, MI Tel: 248-538-2250 Fax: 248-538-2260 Kokomo Kokomo, IN Tel: 765-864-8360 Fax: 765-864-8387 Los Angeles Mission Viejo, CA Tel: 949-462-9523 Fax: 949-462-9608 Santa Clara Santa Clara, CA Tel: 408-961-6444 Fax: 408-961-6445 Toronto Mississauga, Ontario, Canada Tel: 905-673-0699 Fax: 905-673-6509 Australia - Sydney Tel: 61-2-9868-6733 Fax: 61-2-9868-6755 China - Beijing Tel: 86-10-8528-2100 Fax: 86-10-8528-2104 China - Chengdu Tel: 86-28-8665-5511 Fax: 86-28-8665-7889 Korea - Daegu Tel: 82-53-744-4301 Fax: 82-53-744-4302 China - Hong Kong SAR Tel: 852-2401-1200 Fax: 852-2401-3431 Korea - Seoul Tel: 82-2-554-7200 Fax: 82-2-558-5932 or 82-2-558-5934 China - Nanjing Tel: 86-25-8473-2460 Fax: 86-25-8473-2470 Malaysia - Kuala Lumpur Tel: 60-3-6201-9857 Fax: 60-3-6201-9859 China - Qingdao Tel: 86-532-8502-7355 Fax: 86-532-8502-7205 Malaysia - Penang Tel: 60-4-227-8870 Fax: 60-4-227-4068 China - Shanghai Tel: 86-21-5407-5533 Fax: 86-21-5407-5066 Philippines - Manila Tel: 63-2-634-9065 Fax: 63-2-634-9069 China - Shenyang Tel: 86-24-2334-2829 Fax: 86-24-2334-2393 Singapore Tel: 65-6334-8870 Fax: 65-6334-8850 China - Shenzhen Tel: 86-755-8203-2660 Fax: 86-755-8203-1760 Taiwan - Hsin Chu Tel: 886-3-572-9526 Fax: 886-3-572-6459 China - Wuhan Tel: 86-27-5980-5300 Fax: 86-27-5980-5118 Taiwan - Kaohsiung Tel: 886-7-536-4818 Fax: 886-7-536-4803 China - Xiamen Tel: 86-592-2388138 Fax: 86-592-2388130 Taiwan - Taipei Tel: 886-2-2500-6610 Fax: 886-2-2508-0102 China - Xian Tel: 86-29-8833-7252 Fax: 86-29-8833-7256 Thailand - Bangkok Tel: 66-2-694-1351 Fax: 66-2-694-1350 Italy - Milan Tel: 39-0331-742611 Fax: 39-0331-466781 Netherlands - Drunen Tel: 31-416-690399 Fax: 31-416-690340 Spain - Madrid Tel: 34-91-708-08-90 Fax: 34-91-708-08-91 UK - Wokingham Tel: 44-118-921-5869 Fax: 44-118-921-5820 China - Zhuhai Tel: 86-756-3210040 Fax: 86-756-3210049 01/16/09 DS01128B-page 18 © 2009 Microchip Technology Inc.