<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5963718918139647263</id><updated>2011-12-13T16:02:22.971-08:00</updated><title type='text'>H  I  F  I  D  U  I  N  O</title><subtitle type='html'>ARDUINO FOR HI-FI</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default?start-index=101&amp;max-results=100'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>111</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-8507067317689871057</id><published>2010-03-31T13:34:00.000-07:00</published><updated>2011-01-23T18:47:07.837-08:00</updated><title type='text'>Continue reading HIFIDUINO...</title><content type='html'>... at &lt;a href="http://hifiduino.wordpress.com/"&gt;hifiduino.wordpress.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/TTzn37rm4oI/AAAAAAAAFoI/8iEHOhiuzzQ/s1600/P1050160.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/TTzn37rm4oI/AAAAAAAAFoI/8iEHOhiuzzQ/s400/P1050160.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-8507067317689871057?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/8507067317689871057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=8507067317689871057' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8507067317689871057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8507067317689871057'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/03/continue-reading-hifiduino.html' title='Continue reading HIFIDUINO...'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/TTzn37rm4oI/AAAAAAAAFoI/8iEHOhiuzzQ/s72-c/P1050160.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-8600279117953121593</id><published>2010-03-22T21:48:00.000-07:00</published><updated>2010-03-22T21:51:39.190-07:00</updated><title type='text'>Another Musiland 01 Mini mod</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6hILFuRuXI/AAAAAAAAFQA/ssV8-qLTWAg/s1600-h/P1020569.JPG" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img alt="" border="0" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6hILFuRuXI/AAAAAAAAFQA/ssV8-qLTWAg/s400/P1020569.JPG" style="clear: both; float: left; margin: 0px 10px 10px 0px;" /&gt;&lt;/a&gt;I removed the capacitors I installed in the backside of the board (&lt;a href="http://hifiduino.blogspot.com/2010/01/latest.html"&gt;see here&lt;/a&gt;). Instead I removed the capacitor from the switching supplies -power traces cut- (220 uf) and replaced the capacitors of the linear regulators (10 uf). Another advantage of getting the mini...&lt;br /&gt;&lt;div style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-8600279117953121593?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/8600279117953121593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=8600279117953121593' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8600279117953121593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8600279117953121593'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/03/another-musiland-01-mini-mod.html' title='Another Musiland 01 Mini mod'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/S6hILFuRuXI/AAAAAAAAFQA/ssV8-qLTWAg/s72-c/P1020569.JPG' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5741261207806503317</id><published>2010-03-20T18:08:00.000-07:00</published><updated>2010-03-22T10:43:09.532-07:00</updated><title type='text'>Buffalo II DAC</title><content type='html'>(Click to enlarge)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6ahYeeY42I/AAAAAAAAFOg/edfxzaoUb_M/s1600-h/P1020565.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6ahYeeY42I/AAAAAAAAFOg/edfxzaoUb_M/s400/P1020565.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S6aeSsRgemI/AAAAAAAAFOY/dAXAyfWqC6A/s1600-h/P1020559.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S6aeSsRgemI/AAAAAAAAFOY/dAXAyfWqC6A/s400/P1020559.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6aaqBOfvGI/AAAAAAAAFOI/SVCLdhEv0TU/s1600-h/DSC_0407.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6aaqBOfvGI/AAAAAAAAFOI/SVCLdhEv0TU/s400/DSC_0407.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S6aYxFes5RI/AAAAAAAAFN4/c1oV9XJnHkQ/s1600-h/DSC_0411.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S6aYxFes5RI/AAAAAAAAFN4/c1oV9XJnHkQ/s400/DSC_0411.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S6aYUdrHYvI/AAAAAAAAFNw/p9VW_rNfmG0/s1600-h/DSC_0417.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S6aYUdrHYvI/AAAAAAAAFNw/p9VW_rNfmG0/s400/DSC_0417.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S6aXrNXAhdI/AAAAAAAAFNo/Jj-tBxn_YwE/s1600-h/DSC_0426.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S6aXrNXAhdI/AAAAAAAAFNo/Jj-tBxn_YwE/s400/DSC_0426.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6WQwU_72kI/AAAAAAAAFNg/zbZeTwigGtQ/s1600-h/DSC_0392.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6WQwU_72kI/AAAAAAAAFNg/zbZeTwigGtQ/s400/DSC_0392.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6WP2vSm91I/AAAAAAAAFNY/j3dBZS8YRrw/s1600-h/DSC_0387-1.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6WP2vSm91I/AAAAAAAAFNY/j3dBZS8YRrw/s400/DSC_0387-1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6WMGKXWkBI/AAAAAAAAFNI/KWIK4Y6XWDs/s1600-h/DSC_0363.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6WMGKXWkBI/AAAAAAAAFNI/KWIK4Y6XWDs/s400/DSC_0363.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6VyZQTbv_I/AAAAAAAAFM4/Hi6OczTI6tk/s1600-h/DSC_0372.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6VypGZK32I/AAAAAAAAFNA/tMwWLdwotms/s1600-h/DSC_0389.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6VypGZK32I/AAAAAAAAFNA/tMwWLdwotms/s400/DSC_0389.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6VyZQTbv_I/AAAAAAAAFM4/Hi6OczTI6tk/s1600-h/DSC_0372.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="348" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6VyZQTbv_I/AAAAAAAAFM4/Hi6OczTI6tk/s400/DSC_0372.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;More &lt;a href="http://hifiduino.blogspot.com/2010/02/buffalo-ii-specification-and-faq.html"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5741261207806503317?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5741261207806503317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5741261207806503317' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5741261207806503317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5741261207806503317'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/03/blog-post.html' title='Buffalo II DAC'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/S6ahYeeY42I/AAAAAAAAFOg/edfxzaoUb_M/s72-c/P1020565.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-7681834577335423789</id><published>2010-03-15T18:19:00.000-07:00</published><updated>2010-03-25T10:59:44.963-07:00</updated><title type='text'>Comparing Noise Figures in Linear Regulators</title><content type='html'>Just like phase noise in clocks, it is difficult to compare noise values among linear regulators because there is no common ground in specifying noise figures. Some companies report noise density, others RMS V noise, and yet others % of Vout. The frequency range for the reported noise figures also varies from company to company.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://cds.linear.com/docs/Datasheet/1763ff.pdf"&gt;LT1763&lt;/a&gt; familiy is a favorite for audio projects because it has low noise figures. Among linear regulators it is probably universally preferred by audio diy aficionados.&lt;br /&gt;&lt;br /&gt;In order to compare other regulators to this benchmark device, I decided to calculate the Vrms noise in each of the fequency ranges provided by the chart. The Vrms noise is basically the product of the noise density times the frequency delta.&lt;br /&gt;&lt;br /&gt;The results is shown in the graph below. Total Vrms = 23.2 uVrms for the frequency range 10Hz to 100KHz. This approximation is very close to the specified value of 20 uVrms.&lt;br /&gt;&lt;br /&gt;I then looked as the specified noise of several common regulators and matched the values to the corresponding value of the LT1763 device.&lt;br /&gt;&lt;br /&gt;A couple of observations: The &lt;a href="http://www.national.com/ds/LM/LM340.pdf"&gt;LM340&lt;/a&gt; is actually very good, in fact better than the beloved LM317 according to spec. The LM723 seems of lower noise than the LT1763, at least in the reported frequency range. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S57b2Ob2y7I/AAAAAAAAFJQ/y-MbhkBAcbE/s1600-h/regnoisejpg.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" border="0" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S57b2Ob2y7I/AAAAAAAAFJQ/y-MbhkBAcbE/s400/regnoisejpg.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S57fVdbpZII/AAAAAAAAFJY/2ZejOxulp1A/s1600-h/comparo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S57fVdbpZII/AAAAAAAAFJY/2ZejOxulp1A/s320/comparo.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S57b2Ob2y7I/AAAAAAAAFJQ/y-MbhkBAcbE/s1600-h/regnoisejpg.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;We can approximate the total noise Vrms for the 10Hz-100KHz interval by noticing that each frequency range contributes a percentage of the total noise. In the case of the LT1763, we notice that the 10Hz-10KHz range contributes about half of the total 10Hz-100KHz noise. The table below compares all the regulators in the 10Hz-100KHz range.&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S5-2wBOElRI/AAAAAAAAFJ4/gPHq4_A2ieQ/s1600-h/regnoise2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S5-2wBOElRI/AAAAAAAAFJ4/gPHq4_A2ieQ/s320/regnoise2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;Here is a very good paper from TI explaining noise in linear regulators: [&lt;a href="http://focus.ti.com/lit/an/slyt201/slyt201.pdf"&gt;link&lt;/a&gt;]&lt;br /&gt;According to the paper,&lt;br /&gt;&lt;blockquote&gt;"The dominant source of noise in an LDO is usually the&lt;br /&gt;bandgap. In most cases this is solved by adding a large&lt;br /&gt;low-pass filter (LPF) to the bandgap output so that none&lt;br /&gt;of the noise makes it into the gain stage."&lt;/blockquote&gt;Unfortunately, it is not easy to access the bandgap output line in most integrated regulators...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-7681834577335423789?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/7681834577335423789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=7681834577335423789' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7681834577335423789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7681834577335423789'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/03/comparing-noise-figures-in-linear.html' title='Comparing Noise Figures in Linear Regulators'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/S57b2Ob2y7I/AAAAAAAAFJQ/y-MbhkBAcbE/s72-c/regnoisejpg.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5137633427601426913</id><published>2010-03-11T21:29:00.000-08:00</published><updated>2011-09-02T17:44:34.402-07:00</updated><title type='text'>TPA's AC1 FAQ</title><content type='html'>Not an Arduino, but based on a cousin of the ATMega168 with built-in USB. Of course totally incompatible with the Arduino development tools. But if you are familiar with Arduino, you'd easily navigate this device.&lt;br /&gt;&lt;br /&gt;More pictures over at &lt;a href="http://www.twistedpearaudio.com/forum/default.aspx?g=posts&amp;amp;m=5186"&gt;TPA's website&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S5_XPveqy1I/AAAAAAAAFKw/KEO0_079n-Y/s1600-h/DSC_0354.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S5_XPveqy1I/AAAAAAAAFKw/KEO0_079n-Y/s1600-h/DSC_0354.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S5_XPveqy1I/AAAAAAAAFKw/KEO0_079n-Y/s1600-h/DSC_0354.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="336" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S5_XPveqy1I/AAAAAAAAFKw/KEO0_079n-Y/s400/DSC_0354.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S5lA7_pi6EI/AAAAAAAAFHQ/KWA913joaDI/s1600-h/DSC_0356.JPG"&gt;&lt;img alt="" border="0" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S5lA7_pi6EI/AAAAAAAAFHQ/KWA913joaDI/s400/DSC_0356.JPG" /&gt; &lt;/a&gt;&lt;br /&gt;Instructions for loading (burning) firmware into FEMTO:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;1- Download and Install FLIP&lt;br /&gt;2- Copy libusb0.dll from usb directory to bin directory: copy the file C:\Program Files\Atmel\Flip 3.4.1\usb\libusb0.dll to C:\Program Files\Atmel\Flip 3.4.1\bin. Make sure you copy the file because it is needed on both directories&lt;br /&gt;3- Insert FEMTO and do the following sequence: &lt;br /&gt;a- Push HWD button&lt;br /&gt;b- Push RST button&lt;br /&gt;c- Release RST button&lt;br /&gt;d- Release HWD button&lt;br /&gt;4- At this point Windows will recognize the device ( FEMTO) and  will guide you though the driver installation. 5- Select manual  installation and you point the path to: C:\Program Files\Atmel\Flip 3.4.1\usb&lt;br /&gt;6- Start FLIP&lt;br /&gt;7- Start USB communication: Settings-&amp;gt;Communication-&amp;gt;USB&lt;br /&gt;8- Select device: Device-Select-&amp;gt;AT90USB162&lt;br /&gt;9- Select hex file: File-&amp;gt;Load Hex File-&amp;gt;filename.hex&lt;br /&gt;10- Click Run&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5137633427601426913?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5137633427601426913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5137633427601426913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5137633427601426913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5137633427601426913'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/03/tpas-ac1_11.html' title='TPA&apos;s AC1 FAQ'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/S5_XPveqy1I/AAAAAAAAFKw/KEO0_079n-Y/s72-c/DSC_0354.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-6395940949095772838</id><published>2010-02-27T12:53:00.000-08:00</published><updated>2010-10-12T06:52:14.338-07:00</updated><title type='text'>Programming Buffalo DAC: Review of Arduino I2C</title><content type='html'>&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Is is fairly simple to use Arduino to program a DAC such as the ESS Sabre32. After you connect the appropriate signals (wires) from Arduino to the Buffalo board, you follow the tutorial sketches (in Arduino the programs are called sketches) to set up the main code and use the Arduino I2C functions to write values into the registers of the DAC.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;In Arduino, the I2C protocol is supported by the "&lt;a href="http://www.arduino.cc/en/Reference/Wire"&gt;Wire library&lt;/a&gt;" and the functions are the following:&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireBegin"&gt;begin&lt;/a&gt;() - Join the I2C bus as a masterdevice&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireBegin"&gt;begin&lt;/a&gt;(address) - Join the I2C bus as a slave device&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireRequestFrom"&gt;requestFrom&lt;/a&gt;(address,  count) - Tell device that a request will follow&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireBeginTransmission"&gt;beginTransmission&lt;/a&gt;(address) - Tell device as address that data transmission will start &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireEndTransmission"&gt;endTransmission&lt;/a&gt;()- Tell device that transmission is ended&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireSend"&gt;send&lt;/a&gt;() - Send data (one byte at a time)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;byte &lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireAvailable"&gt;available&lt;/a&gt;() - Queries number of bytes available for retrieval&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;byte &lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireReceive"&gt;receive&lt;/a&gt;() - Retrieve (read) bytes from device&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireOnReceive"&gt;onReceive&lt;/a&gt;(handler) - The function to perform when slave receive a transmission&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;a class="wikilink" href="http://arduino.cc/en/Reference/WireOnRequest"&gt;onRequest&lt;/a&gt;(handler) - The function to perform when slave receives a request&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Before you do anything, Arduino joins the I2C bus as a master device with&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;begin()&lt;/span&gt;&lt;/span&gt; &lt;/blockquote&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;The following code will write one value into one register:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;beginTransmission(0x80); // Address of DAC is hex 80&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; send(0x01); // Address of register is hex 1&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; send(0x00); // Value into register is hex 0&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;endTransmission;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;Hex is hexadecimal notation. It is more convenient to write in hex notation rather than binary notation. Most data sheets give you register address value in hex and register value in binary. You can use any notation in your code but you have to indicate which notation.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;You can convert binary to hex with one of many online tools such as &lt;a href="http://easycalculation.com/hex-converter.php"&gt;this&lt;/a&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;The following code sends one value to 4 registers. This example is typical for setting volume. The same value is assigned to all the internal DACs. Say for example the volume control of the DAC is 1/4 db and you want to set a -10 db volume. The value to use is -40 (you don't have to specify which notation because the default is decimal notation), and assume the registers to control the volume are registers 1 through 4&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;beginTransmission(0x80);  // Address of DAC is hex 80&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;  send(0x01); // Address of register 1 is hex 1&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; send(40); // Value into register 40&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: x-small;"&gt;send(0x02); // Address of register 2 is hex 2&lt;/span&gt; &lt;br /&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; send(40); // Value into register 40&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; send(0x03); // Address of register 3 is hex 3&lt;/span&gt; &lt;br /&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; send(40); // Value into register 40&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; send(0x04); // Address of register 4 is hex4&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; send(40); // Value into register 40&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;endTransmission;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif; font-size: small;"&gt;That's it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif; font-size: small;"&gt;Update (October, 12, 2010): I just implemented and tested the basic code to control the Buffalo II DAC's volume. However, I couldn't program multiple registers within a single beginTransmission and endTransmission pair as shown above. I had to program each register with beginTransmission...endTransmission separately. You can see the code &lt;a href="http://hifiduino.wordpress.com/2010/10/12/arduino-for-buffalo-ii/"&gt;here&lt;/a&gt;. &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-6395940949095772838?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/6395940949095772838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=6395940949095772838' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6395940949095772838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6395940949095772838'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/programming-buffalo-dac-review-of.html' title='Programming Buffalo DAC: Review of Arduino I2C'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-6276003169942385789</id><published>2010-02-22T22:18:00.000-08:00</published><updated>2010-02-24T09:39:07.372-08:00</updated><title type='text'>Audiophile HQCD</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Finally got my copy of Bondy Chiu's audiophile recording from Hong Kong. It was sold out over Christmas...&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;a href="http://www.hqcd.jp/eng.html"&gt;HQCD&lt;/a&gt; is a higher quality pressing by using lens quality plastic and silver allow first developed for the now dead HD-DVD.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Bondy Chiu (you can hear her music &lt;a href="http://www.myspace.com/bondychiu"&gt;here&lt;/a&gt;) is a Hong Kong-based artist that with Ken Poon (his blog is &lt;a href="http://www.designwsound.com/dwsblog/"&gt;Design with Sound&lt;/a&gt;), a recording engineer and audiophile has created perhaps the first mass-market Audiophile CD.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S4VkFsdOLSI/AAAAAAAAE9Q/KdI20INe-w8/s1600-h/P1020524.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="376" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S4VkFsdOLSI/AAAAAAAAE9Q/KdI20INe-w8/s400/P1020524.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;The CD sounds very good, and if you got friends in Hong Kong, can be purchased for around HK$ 160.&lt;/div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S4NzLjUzXjI/AAAAAAAAE7U/4eUVtMHJ7OU/s1600-h/P1020522.JPG"&gt;&lt;img alt="" border="0" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S4NzLjUzXjI/AAAAAAAAE7U/4eUVtMHJ7OU/s400/P1020522.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-6276003169942385789?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/6276003169942385789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=6276003169942385789' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6276003169942385789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6276003169942385789'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/audiophile-hqcd.html' title='Audiophile HQCD'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/S4VkFsdOLSI/AAAAAAAAE9Q/KdI20INe-w8/s72-c/P1020524.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-6141785105981156860</id><published>2010-02-17T11:04:00.000-08:00</published><updated>2010-02-19T15:59:46.054-08:00</updated><title type='text'>Programming Buffalo II DAC: I2C Isolation</title><content type='html'>As extreme care has been afforded to reduce noise on Buffalo II, perhaps it would be also prudent to implement the I2C isolation solution to prevent any noise sneaking through an external microprocessor such as Arduino on the I2C lines.&lt;br /&gt;&lt;br /&gt;Note: a reader alerted me that the on-board microprocessor goes to sleep after setting up the registers of the DAC. In such case, there should be no additional noise from the on-board microprocessor. However, when the microprocessor is sleeping, only an interrupt can wake it up. If one uses the Arduino as the external microprocessor, some of the code may not be interrupt based, for example polling IR remote signals. So, if the microprocessor is doing more than just setting up the registers at power-on, in general it is not a good idea to put the microprocessor to sleep. Therefore some isolation in the i2c lines would be a welcomed noise avoidance implementation.&lt;br /&gt;&lt;br /&gt;Analog Devices magnetic coupling devices has a solution for this task: &lt;a href="http://www.analog.com/en/interface/digital-isolators/adum1250/products/product.html"&gt;The ADum1250&lt;/a&gt;. Previous observations &lt;a href="http://hifiduino.blogspot.com/2009/03/opto-isolation-for-i2c.html"&gt;here &lt;/a&gt;indicate that this is the best solution.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: small;"&gt;The ADuM1250/ADuM1251&lt;sup&gt;1&lt;/sup&gt; are hot swappable digital isolators with nonlatching, bidirectional communication channels compatible with I&lt;sup&gt;2&lt;/sup&gt;C® interfaces. This eliminates the need for splitting I&lt;sup&gt;2&lt;/sup&gt;C signals into separate transmit and receive signals for use with standalone optocouplers.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;The ADuM1250 provides two bidirectional channels, supporting a complete isolated I&lt;sup&gt;2&lt;/sup&gt;C interface. The ADuM1251 provides one bidirectional channel and one unidirectional channel for those applications where a bidirectional clock is not required.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;Both the ADuM1250 and ADuM1251 contain hot swap circuitry to prevent glitching data when an unpowered card is inserted onto an active bus&lt;/span&gt;. &lt;/span&gt;&lt;/blockquote&gt;The &lt;a href="http://www.analog.com/static/imported-files/application_notes/AN_913.pdf"&gt;application note&lt;/a&gt; indicates that side 1 (left) should be used for the device (the DAC) and side 2 for the I2C bus (Arduino)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S3w_JNXZ5QI/AAAAAAAAE34/1noQ8akhX6E/s1600-h/adum.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S3w_JNXZ5QI/AAAAAAAAE34/1noQ8akhX6E/s400/adum.jpg" width="365" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The pull up resistors on side 2 (right side) in the diagram are already implemented in Arduino (inside the uP and enabled in software).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SdBJI32hbWI/AAAAAAAACgg/bzEtNt-Ku70/s1600/arduino_diecimila.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="251" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SdBJI32hbWI/AAAAAAAACgg/bzEtNt-Ku70/s400/arduino_diecimila.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The pull-up resistors on side 1 (left side) I believe are already implemented in Buffalo II as R14 and R15? -Need to confirm with the designers.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;div style="margin-left: 1em; margin-right: 1em;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S3w9tdOns0I/AAAAAAAAE3Y/sO11V_Dczug/s1600-h/buffalo2_whole-2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S3w9tdOns0I/AAAAAAAAE3Y/sO11V_Dczug/s320/buffalo2_whole-2.jpg" width="219" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-6141785105981156860?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/6141785105981156860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=6141785105981156860' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6141785105981156860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6141785105981156860'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/programming-buffalo-ii-dac-i2c.html' title='Programming Buffalo II DAC: I2C Isolation'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/S3w_JNXZ5QI/AAAAAAAAE34/1noQ8akhX6E/s72-c/adum.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-764616364216689881</id><published>2010-02-11T23:10:00.000-08:00</published><updated>2010-03-04T23:35:50.239-08:00</updated><title type='text'>Buffalo II DAC Clock Jitter at 0.1 psec RMS?</title><content type='html'>In the previous post we found that the Crystek oscillator used in the Buffalo II DAC is very good, better than the typical oscillator found in many hi end audio equipment, but obviously not as good as the best money can buy. The phase noise graphs look sort close to each other, but how much different are they?&lt;br /&gt;&lt;br /&gt;Audiophiles are accustomed to hear jitter values in terms of pico-seconds (psec) RMS, and many oscillators are spec'ed at 1 psec jitter. We know that phase noise is another way to measure jitter, and that jitter RMS values represent the area under the curve. One must realize that the graph is in logarithm scale resulting in large differences even though the curves are sort of close to each other.&lt;br /&gt;&lt;br /&gt;Analog Devices has an &lt;a href="http://www.analog.com/static/imported-files/tutorials/MT-008.pdf"&gt;excellent tutorial&lt;/a&gt; on understanding jitter values &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S3X-Na2Z6bI/AAAAAAAAEzo/Q-FpDXi6fgk/s1600-h/phse+to+jitter.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="310" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S3X-Na2Z6bI/AAAAAAAAEzo/Q-FpDXi6fgk/s400/phse+to+jitter.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You can use the formulas to calculate jitter RMS from phase noise data, but there are easy to use on-line tools that calculate jitter RMS from data you find in datasheets. One such tool is the &lt;a href="http://www.jittertime.com/resources/pncalc.shtml"&gt;Phase Noise Calculator&lt;/a&gt; from www.jittertime.com (a consultancy on the topic of jitter)&lt;br /&gt;&lt;br /&gt;So lets calculate the jitter RMS value for each of the oscillators we compared in the previous post.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: red;"&gt;Buffalo II oscillator&lt;/div&gt;&lt;br /&gt;We find the data points in the graph and enter them in the tool as shown:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S3T4cqEk-5I/AAAAAAAAExY/uLACYI9Bhso/s1600-h/Picasa+3+2112010+103310+PM.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" border="0" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S3T4cqEk-5I/AAAAAAAAExY/uLACYI9Bhso/s400/Picasa+3+2112010+103310+PM.jpg" /&gt;&lt;/a&gt;The result is 0.446 psec. (if you are wondering why the result is less than the sum of the jitter in each segment, is because they &lt;span class="classnotnav"&gt;add as Root Sum-of-Squares)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This value agrees with the value is the specification ( typically 0.5 psec). We do the same for the other curves and we find the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Crystek 950 (Buffalo II): 0.446 psec&lt;/li&gt;&lt;li&gt;Wenzel oscillator: 0.075 psec&lt;/li&gt;&lt;li&gt;Typical Oscillator (Buffalo I): 29.9 psec&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Those are BIG differences when we convert to jitter RMS values. the Wenzel measures 75 femto seconds!. The Crystek 950 measures the expected half a psec; but the typical oscillator measure 30 psec?. But wait a minute, aren't those oscillators spec'ed at 1 psec?.&lt;br /&gt;&lt;br /&gt;Lets looks at the specification of the oscillator found in Buffalo I: Crystek c33xx. The &lt;a href="http://www.crystekcrystals.com/crystal/spec-sheets/clock/C33xx.pdf"&gt;spec&lt;/a&gt; says: Jitter RMS: 12KHz-80MHz: 0.5 psec. Notice that the jitter is measured after 12 KHz whereas the phase noise plots we see for the better parts starts at 10 Hz. If we instead measure the Jitter RMS for the Crystek 950 shown in the graph with the same scale, of 12 KHz to 80 MHz, we get the value of 0.13 psec.&lt;br /&gt;&lt;br /&gt;I used the numbers found in the &lt;a href="http://www.crystekcrystals.com/crystal/spec-sheets/clock/CCHD-950.pdf"&gt;spec&lt;/a&gt; for an 80MHz oscillator and got 0.115 psec for 12KHz to 80MHz. The best spec in the datasheet is for the 100MHz clock with a jitter value of 0.094 psec RMS (12KHz-80MHz). Maybe the custom clock Crystek is making for TPA has better phase noise values than what is stated in the specifications. (Update: according to Brian of TPA, the phase noise specification for their parts is the same as the standard parts)&lt;br /&gt;&lt;br /&gt;Thus:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Clock for Buffalo I: 0.5 psec RMS (12KHz-80MHz)&lt;/li&gt;&lt;li&gt;Clock for Buffalo II: 0.115 psec RMS (12KHz-80MHz)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What offset frequency interval is used for audio to calculate jitter? I don't think there are standards in audio, but for other applications there are standards. &lt;a href="http://www.audiodesignline.com/222700730;jsessionid=ZYFULY5FAS0CDQE1GHPCKH4ATMY32JVN?printableArticle=true"&gt;This article&lt;/a&gt; cites two standards:&lt;br /&gt;&lt;blockquote&gt;As an example, SONET uses a frequency offset of &lt;span style="color: red;"&gt;12kHz to 20MHz&lt;/span&gt; from the carrier signal to integrate the area under the phase noise plot to measure phase jitter. Fiber Channel uses a frequency offset of &lt;span style="color: red;"&gt;637kHz to 10MHz&lt;/span&gt; from the carrier signal to integrate the area under the phase noise plot to measure phase jitter.&lt;/blockquote&gt;According to&lt;a href="http://www.analog.com/en/rfif-components/rfif-transceivers/adf4360-9/products/FAQ_How_do_you_determine_the_bandwidth_over_which/resources/faq.html"&gt; Analog Devices&lt;/a&gt;,&lt;br /&gt;&lt;blockquote&gt;It is a little tricky to specify the bandwidth over which phase noise  should be integrated in order to calculate the jitter which will  actually be observed when that clock signal is used to clock a  converter. There are many variables which are seldom known with accuracy  – such as the inherent bandwidth of the sample clock circuit on the  converter. Also, it is very difficult to actually measure the broadband  phase noise of a clock signal beyond an offset of a few MHz. ... For a true "broadband" jitter calculation some  assumptions and simplifications must be made. One assumption made by  ADIsimCLK, for example, is that the upper offset integration limit is  one-half the clock frequency. The lower offset integration limit is  assumed to be between 100 Hz and 1 kHz.  &lt;/blockquote&gt;What frequency interval matters then?&lt;br /&gt;&lt;br /&gt;If we take a previous datasheet of the Crystek 950 clock and compare it with the current datasheet, we see that the "close-in" phase noise (closer to the crystal frequency) has increased and that "broad band" phase noise (away from the crystal frequency).&lt;br /&gt;&lt;br /&gt;It seems that the engineers at Crystek focused on improving the broadband phase noise values and were willing to tradeoff the close-in phase noise. This implies that broadband phase numbers (or the "noise floor" of the oscillator) is a more important value than close-in noise (at least for the market that this crystal is intended to be used, -which I am sure it is NOT DIY DAC boards :-))&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S35ID8r-eEI/AAAAAAAAE44/xshef07-9zk/s1600-h/950.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="355" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S35ID8r-eEI/AAAAAAAAE44/xshef07-9zk/s400/950.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Perhaps it depends on the application&lt;br /&gt;&lt;br /&gt;According to &lt;a href="http://www.analog.com/static/imported-files/tutorials/MT-008.pdf"&gt;tutorial&lt;/a&gt; from Analog Devices,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Close-in phase noise limits the frequency resolution&amp;nbsp;&lt;/li&gt;&lt;li&gt;Broadband phase noise reduces SNR&lt;/li&gt;&lt;/ul&gt;According to the discussion on &lt;a href="http://www.diyaudio.com/forums/digital-line-level/117238-ess-sabre-reference-dac-8-channel-30.html#post1447292"&gt;DIYAUDIO&lt;/a&gt; (thanks rossl for pointing this out in the comments) close-in phase noise is what is important for high-end DAC applications.&lt;br /&gt;&lt;br /&gt;YET another data point for frequency interval&lt;br /&gt;&lt;br /&gt;A reader alerted me to an excellent AES paper on jitter for audio components, &lt;a href="http://www.wolfsonmicro.com/uploads/documents/en/Specifying%20Jitter%20Performance.pdf"&gt;available for free&lt;/a&gt; from Wolfson Micro. There, the authors propose a "baseband" value of 100Hz to 40K Hz&lt;br /&gt;&lt;br /&gt;If we use these frequency values we obtain (via the handy &lt;a href="http://www.jittertime.com/resources/pncalc.shtml"&gt;online jitter calculation tool&lt;/a&gt;) the following jitter values:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1.6 psec or 1600 fsec for a c33xx class clock (100Hz-40KHz)&lt;/li&gt;&lt;li&gt;0.046 psec or 46 fsec for a 950 class clock (100Hz-40KHz)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Unfortunately most of the research on the effect&amp;nbsp; of phase noise revolve around digital telecommunication, where the frequency is in the 100s of MHz. There clock jitter determines the SNR and effectively the bandwidth of the devices, and the phase noise value that is important is the broadband phase noise.&lt;br /&gt;&lt;br /&gt;So what is the effect of phase noise in audio?&lt;br /&gt;&lt;br /&gt;According to this &lt;a href="http://www.grimmaudio.com/whitepapers/clock%20jitter%20spec.pdf"&gt;AES paper&lt;/a&gt; by Bruno Putzeys (Hypex, Grimm Audio) it is just noise.&lt;br /&gt;&lt;br /&gt;I also took a look at other implementations of the ESS DAC&amp;nbsp; and what kind of clock they use. It seems that only DIY versions can "afford" the high-end clock... Also note that the ESS evaluation board uses a "standard" crystal, rather than a clock (or so it looks like)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S3X4dynHX0I/AAAAAAAAEzI/cLernGJTh4I/s1600-h/crystek+in+ess.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S3X4dynHX0I/AAAAAAAAEzI/cLernGJTh4I/s400/crystek+in+ess.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Eastern Electric DAC&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S5C0Muey0_I/AAAAAAAAFBQ/3DMqGggJDmA/s1600-h/IMG_8578.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S5C0Muey0_I/AAAAAAAAFBQ/3DMqGggJDmA/s400/IMG_8578.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-764616364216689881?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/764616364216689881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=764616364216689881' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/764616364216689881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/764616364216689881'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/jitter-value-phase-noise-to-psec.html' title='Buffalo II DAC Clock Jitter at 0.1 psec RMS?'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/S3X-Na2Z6bI/AAAAAAAAEzo/Q-FpDXi6fgk/s72-c/phse+to+jitter.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4369038187368838457</id><published>2010-02-11T20:19:00.000-08:00</published><updated>2011-07-28T09:38:16.316-07:00</updated><title type='text'>Clock in Buffalo II DAC</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S3dkTjT9ipI/AAAAAAAAE0I/1ePKZp_APSk/s1600-h/crystek.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S3dkTjT9ipI/AAAAAAAAE0I/1ePKZp_APSk/s320/crystek.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;According the Brian in this &lt;a href="http://www.diyaudio.com/forums/twisted-pear/160782-buffalo-ii-4.html#post2080706"&gt;post&lt;/a&gt;, the clock in Buffalo II is not only the top-of-the line product from Crystek, but a custom made model with even better specifications.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;For those with sharp eyes, the photo of the Buffalo II prototype has a 50 ppm (temperature stability) clock, but the production models will have a 20 ppm part.Temperature stability is related to the quality of the quartz crystal used in the clock. It is therefore safe to assume that this will also improve the jitter figures.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;But how good is Crystek's best oscillator?&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;There is a &lt;a href="http://www.crystekcrystals.com/crystal/appnotes/ImpactUltralow.pdf"&gt;white paper&lt;/a&gt; by Crystek showing "phase noise" curves for the 950 oscillator and compared to a typical oscillator. I copied the charts and overlaid them together. In addition I took a look at the specifications of a ultra low phase noise &lt;a href="http://www.wenzel.com/pdffiles1/Oscillators/ULN_30_to_130.pdf"&gt;Wenzel oscillator&lt;/a&gt; and a &lt;a href="http://www.spectratime.com/product_downloads/lcr_spec.pdf"&gt;Rubidium oscillator&lt;/a&gt; and plotted the data on the same chart. The Rubidium is a "$900 low cost" version. Perhaps they are best at frequency stability over a long period of time and therefor they cost so much. The Wenzel oscillators are the lowest phase noise you can find and are used in High Energy Physics and Radio Astronomy applications. If you work for NASA or CERN, maybe you can borrow one of these clocks and hook it up to your DAC :-).&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;BTW, "phase noise" is just another way to measure jitter. Jitter, typically measured in psec is the area under the phase noise curve. Thus jitter gives you the total deviation from ideal and phase noise gives you the spectrum of that deviation. However, comparing jitter figures is not easy because manufacturers select different frequency range (say 100Hz to 100KHz or 10Hz to 1MHz) and each gives different numbers. Best to compare phase noise numbers. The graph below shows the phase noise curves. One can see that in order to improve on the clock selected for the Buffalo II DAC, one would have to get a Lab grade oscillator&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Update: NEL AE-X3A3 oscillators have better specifications than Crystek 950. The NEL Oven controlled oscillator is even lower noise (not sure how much they cost)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;(Clik for larger image) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S411-LXj8DI/AAAAAAAAE_I/YD_70qh3S28/s1600-h/clockPlots.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="377" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S411-LXj8DI/AAAAAAAAE_I/YD_70qh3S28/s400/clockPlots.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;How is Ultralow Phase Noise Achieved?&lt;br /&gt;&lt;br /&gt;According to the author in the Crystek white paper,&lt;br /&gt;&lt;blockquote&gt;"A commodity oscillator is nothing more than an ASIC and a quartz crystal blank. In most cases, it does not even have an internal bypass capacitor. The crystal blank is an AT-cut strip with Q of about 25 K to 45 K. This low Q limits the close-in phase noise. The ASIC with all its transistors limits the floor noise to about -150 dBc/Hz. On the other hand, the true ultralow phase noise oscillator uses a discrete high-performance oscillator topology with a packaged crystal with a Q greater than 70 K for excellent close-in phase noise. The discrete oscillator topology establishes the SNR, and hence the floor is lower than -160 dBc/Hz. Therefore, superior performance is obtained with very high Q crystals and a good discrete topology."&lt;/blockquote&gt;How is the Phase-Noise graph obtained? The chart is one half of the power-frequency distribution of the variation from ideal. Instruments are available to generate such charts.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S3yT7bDksJI/AAAAAAAAE4Y/4K3okYqbMKs/s1600-h/PhaseNoise.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S3yT7bDksJI/AAAAAAAAE4Y/4K3okYqbMKs/s400/PhaseNoise.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This &lt;a href="http://cp.literature.agilent.com/litweb/pdf/N9068-90011.pdf"&gt;manual&lt;/a&gt; has a good tutorial on phase noise&lt;br /&gt;&lt;br /&gt;Quarts oscillators is an "old" technology. "&lt;a href="http://cp.literature.agilent.com/litweb/pdf/5965-7662E.pdf"&gt;Fundamentals of Quartz Oscillators&lt;/a&gt;", an application note from HP from the late '70s is a good read.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S422GTv494I/AAAAAAAAE_o/rom1W5j5na4/s1600-h/FireShot+Pro+capture+%23182+-+%275965-7662E_pdf+%28application_pdf+Object%29%27+-+cp_literature_agilent_com_litweb_pdf_5965-7662E_pdf.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S422GTv494I/AAAAAAAAE_o/rom1W5j5na4/s320/FireShot+Pro+capture+%23182+-+%275965-7662E_pdf+%28application_pdf+Object%29%27+-+cp_literature_agilent_com_litweb_pdf_5965-7662E_pdf.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4369038187368838457?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4369038187368838457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4369038187368838457' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4369038187368838457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4369038187368838457'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/clock-in-buffalo-ii-dac.html' title='Clock in Buffalo II DAC'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/S3dkTjT9ipI/AAAAAAAAE0I/1ePKZp_APSk/s72-c/crystek.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5359080877833315075</id><published>2010-02-11T00:05:00.000-08:00</published><updated>2010-11-05T17:37:21.488-07:00</updated><title type='text'>The Buffalo II DAC: Best Bang-for-Buck</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;(Update, Nov. 2010: I've developed Arduino code to control the Buffalo DAC. Check my other blog: www.hifiduino.wordpress.com) &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.twistedpearaudio.com/digital/buffalo.aspx"&gt;TwistedPearAudio&lt;/a&gt; Released the Buffalo II DAC&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;This is the 3rd TPA iteration for the top of the line ESS DAC. The first iteration was for the ESS 9008 (24bit) DAC and the second and third are for the ESS 9018 (32bit).&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Although it is priced at $249, the ESS DAC includes a spdif receiver, a high speed ASRC and a 32-bit DAC. In Addition, the Buffalo II includes a top-of-the line, ultra low jitter clock from Crystek and a ultra-low noise shunt regulator for the analog section of the DAC.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;I think Buffalo II is the new bang-for-buck leader. If we compare a comparable OPUS DAC offering we have the following:&lt;/div&gt;&lt;ol style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;Opus DAC (WM8741): $75&lt;/li&gt;&lt;li&gt;Opus Spdif Receiver (WM8804): $75&lt;/li&gt;&lt;li&gt;Metronome (ASRC): $75&lt;/li&gt;&lt;li&gt;Upgrade Clock (you must mod yourself): $30&lt;/li&gt;&lt;li&gt;Upgrade analog regulation (e.g. Placid, and mod yourself): $40&lt;/li&gt;&lt;/ol&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Total: $295&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;To be fair, the OPUS does not require an output stage and associated power supply, and the Buffalo II requires an output stage.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;In-depth comparison between Buffalo I DAC (ESS 9008) and Buffalo II DAC (ESS 9018) also shows that the new DAC is a better deal than the old DAC &lt;span style="font-size: xx-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(Buffalo I photo scraped from "buyer of board #93 without permission)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;BUFFALO I DIGITAL TO ANALOG CONVERTER&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S3MjBm2fy-I/AAAAAAAAEug/JLyiwGoS3ms/s1600-h/005.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S3MjBm2fy-I/AAAAAAAAEug/JLyiwGoS3ms/s400/005.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;BUFFALO II DIGITAL TO ANALOG CONVERTER&lt;/div&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S3I714ScJlI/AAAAAAAAEsI/9OQP-EFszI0/s1600-h/bufII.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S3I714ScJlI/AAAAAAAAEsI/9OQP-EFszI0/s400/bufII.jpg" width="386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;Buffalo I ---------------Buffalo II&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;Panasonic caps: &lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&amp;amp;name=PCE4546CT-ND"&gt;$0.51&lt;/a&gt; ---Oscon caps: &lt;a href="http://www.mouser.com/ProductDetail/Vishay-OS-CON/94SA107X0020FBP/?qs=sGAEpiMZZMtm5nWh%2fhvnH6cYt9dOwxwfWzMV47FUM%252b0%3d"&gt;$3.14&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.mouser.com/ProductDetail/Vishay-OS-CON/94SA107X0020FBP/?qs=sGAEpiMZZMtm5nWh%2fhvnH6cYt9dOwxwfWzMV47FUM%252b0%3d"&gt;&lt;/a&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;Crystek 33xx: &lt;a href="http://www.mouser.com/ProductDetail/Crystek-Crystals/C3391-24576/?qs=sGAEpiMZZMsBj6bBr9Q9aQYNpWdONf7RoDFjt0g1tGU%3d"&gt;$2.31&lt;/a&gt; -----Crystek 950: &lt;a href="http://www.mouser.com/ProductDetail/Crystek-Crystals/CVHD-950-80000/?qs=sGAEpiMZZMukHu%252bjC5l7YXO8aveU7WeumN5FYmvg7Wk%3d"&gt;$27.70&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.mouser.com/ProductDetail/Crystek-Crystals/CVHD-950-80000/?qs=sGAEpiMZZMukHu%252bjC5l7YXO8aveU7WeumN5FYmvg7Wk%3d"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;ESS 9008: &lt;a href="http://ecommerce.ismosys.com/ordering/product_info.php?manufacturers_id=34&amp;amp;products_id=387"&gt;$47.90&lt;/a&gt; --------ESS 9018: &lt;a href="http://ecommerce.ismosys.com/ordering/product_info.php?manufacturers_id=34&amp;amp;products_id=479"&gt;$65.60&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://ecommerce.ismosys.com/ordering/product_info.php?manufacturers_id=34&amp;amp;products_id=479"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;Regulator: &lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&amp;amp;name=497-4240-1-ND"&gt;$.75&lt;/a&gt; ---------LT 1763 Regulator: &lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&amp;amp;name=LT1763CS8-3.3%23PBF-ND"&gt;$4.13&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Total: 53.75 ---------------------------Total: 115.11&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Difference: $61.36&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;I believe the Buffalo I sold for $169. If we add the price differential for the 4-layer board, and the time spent designing and prototyping and testing the new board, we can easily reach the $80 price difference between the old Buffalo and Buffalo II.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Ah! I forgot the ultra-low noise dual analog regulator, you get that for FREE! (Expect to pay $60 to $120 for two shunt low noise regulators from 3rd parties)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Update:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;There are a couple of dozen additional components in the back side of the PCB&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;The clock is a custom made 20 ppm (standard is 25-50 ppm) model for TPA&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;COMPARISON WITH BUFFALO 32S&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;I believe the main difference between Buffalo II and Buffalo 32s (aside from having the I/V stage in a separate board) is the analog supply. It appears (from pictures, I don't have the boards and there are no schematics for Buffalo 32s) the analog supply of Buffalo 32s is similar to the one found in Buffalo I.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Buffalo 32s analog supply: based on two LM4971 single opamps&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S4I7G1VxK-I/AAAAAAAAE6o/9xfpP0lHRW8/s1600-h/sabre-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S4I7G1VxK-I/AAAAAAAAE6o/9xfpP0lHRW8/s400/sabre-1.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Buffalo I analog supply: based on a single LM4972 dual opamp&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S4I9HHZTUFI/AAAAAAAAE6w/L2jx1CamBX0/s1600-h/IMG_6183+%282%29.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S4I9HHZTUFI/AAAAAAAAE6w/L2jx1CamBX0/s400/IMG_6183+%282%29.jpg" width="400" /&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5359080877833315075?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5359080877833315075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5359080877833315075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5359080877833315075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5359080877833315075'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/buffalo-ii-dac-best-bang-for-buck.html' title='The Buffalo II DAC: Best Bang-for-Buck'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/S3MjBm2fy-I/AAAAAAAAEug/JLyiwGoS3ms/s72-c/005.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-6440879041422135739</id><published>2010-02-10T12:03:00.000-08:00</published><updated>2010-04-22T17:10:26.351-07:00</updated><title type='text'>Buffalo II Specification and FAQ</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;This post is to summarize information I find elsewhere&lt;br /&gt;&lt;br /&gt;EXTERNAL POWER SUPPLY REQUIREMENTS&lt;br /&gt;&lt;br /&gt;POWER SUPPLY CURRENT  [&lt;a href="http://www.diyaudio.com/forums/twisted-pear/160782-buffalo-ii-8.html#post2095384"&gt;link&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S4WzdTChcNI/AAAAAAAAE-Q/_oLFRmCKi4w/s1600-h/buffCurrent-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S4WzdTChcNI/AAAAAAAAE-Q/_oLFRmCKi4w/s320/buffCurrent-1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;POWER SUPPLY VOLTAGE [&lt;a href="http://www.diyaudio.com/forums/twisted-pear/143315-twisted-pear-audio-buffalo32s-es9018-dac-81.html#post2075797"&gt;link&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;The Buff II board has a single PS connection. Because it feeds both the on board LT1763 regulators and the AVCC dual shunt regulator, it must comply to the design of the AVCC dual shunt:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Vmin=5V&lt;/li&gt;&lt;li&gt;Vmax=5.5V (The AVCC shunt regulator is optimized to this voltage)&lt;/li&gt;&lt;/ul&gt;AVCC&lt;br /&gt;&lt;br /&gt;According the the &lt;a href="http://www.esstech.com/PDF/sabrewp.pdf"&gt;ESS Sabre DAC white paper&lt;/a&gt;,&amp;nbsp; AVCC is specified as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Minimum: 1.8V &lt;/li&gt;&lt;li&gt;Nominal: 3.3V (DNR= -132db)&lt;/li&gt;&lt;li&gt;Maximum: 4.0V (DNR&amp;gt; -133db) - see footnote 17 of paper&lt;/li&gt;&lt;/ul&gt;INSTALLATION OF AVCC DUAL SHUNT REGULATOR [&lt;a href="http://www.diyaudio.com/forums/twisted-pear/143315-twisted-pear-audio-buffalo32s-es9018-dac-81.html#post2075804"&gt;link&lt;/a&gt;] [&lt;a href="http://www.diyaudio.com/forums/twisted-pear/160782-buffalo-ii-20.html#post2126572"&gt;link&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S5bwNpZYtNI/AAAAAAAAFDo/JOjXxz5FFas/s1600-h/buffdimansion2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="328" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S5bwNpZYtNI/AAAAAAAAFDo/JOjXxz5FFas/s400/buffdimansion2.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;"Also of note, although the AVCC header has four pins, only three are used by our AVCC module. &lt;br /&gt;The AVCC module does not use the DVCC pin. It is there as a convenience to any who might want to use an ESS demo board style AVCC supply (where DVCC is a VREF). Our AVCC module uses its own low noise VREF, not DVCC." &lt;br /&gt;&lt;br /&gt;Note: Buffalo I also derived the AVCC from the DVCC. In the case you wish to replicate such AVCC implementation, you can tap into DVCC as reference and VD will be powering the buffer opamp:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6f0MZuVjBI/AAAAAAAAFP4/B1pFhmM3qpI/s1600-h/SabreBoardAVCC.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S6f0MZuVjBI/AAAAAAAAFP4/B1pFhmM3qpI/s400/SabreBoardAVCC.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Normal Operating Conditions [&lt;a href="http://twistedpearaudio.com/forum/default.aspx?g=posts&amp;amp;m=5235#5235"&gt;link&lt;/a&gt;] &lt;br /&gt;(This is one board, there is slight variations between boards)&lt;br /&gt;&lt;br /&gt;VD=5V. Notice that one LED is brighter than the other. According to TPA this is perfectly normal.&lt;br /&gt;&lt;br /&gt;AVCC1=3.523V, VCC2=3.5626V &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6bvX0nq4eI/AAAAAAAAFOo/Ecn1N1acHjE/s1600-h/P1020567-1.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="177" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6bvX0nq4eI/AAAAAAAAFOo/Ecn1N1acHjE/s400/P1020567-1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;VD=5.5V. Notice that the LEDs' brightness is more uniform.&lt;br /&gt;&lt;br /&gt;AVCC1=3.556V, AVCC2=3.554V&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6bwD0MqpmI/AAAAAAAAFO4/o_4a7FV2IGQ/s1600-h/DSC_0436-1.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6bwD0MqpmI/AAAAAAAAFO4/o_4a7FV2IGQ/s400/DSC_0436-1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The shut regulator board can also be installed on the back side of the Buffalo II board (It will get on the way if you are stacking above IVY III)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6cCBey_ECI/AAAAAAAAFPA/kjbWwsHx6ug/s1600-h/DSC_0440.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="198" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S6cCBey_ECI/AAAAAAAAFPA/kjbWwsHx6ug/s400/DSC_0440.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ON BOARD LINEAR REGULATORS&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S6emgz-a7bI/AAAAAAAAFPw/N_sGUvbEQAg/s1600-h/DSC_0370.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="348" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S6emgz-a7bI/AAAAAAAAFPw/N_sGUvbEQAg/s400/DSC_0370.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;There are 3 linear regulators &lt;a href="http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1010,C1778,C1764,P1778,D3903"&gt;LT 1763&lt;/a&gt;. Two are 3.3 V and one is variable set to 1.2V&lt;/li&gt;&lt;li&gt;Noise level: 20uVrms 10Hz to 100KHz (meaning you can't do better than this even if you feed it a cleaner supply). For more information on regulator noise see this &lt;a href="http://hifiduino.blogspot.com/2010/03/comparing-noise-figures-in-linear.html"&gt;post&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Regulator Vin max=20V (5.5V max is specified because the same input traces feed the the shunt AVCC regulator which is designed for 5.5V max)&lt;/li&gt;&lt;li&gt;&lt;a href="http://hifiduino.blogspot.com/2010/03/comparing-noise-figures-in-linear.html"&gt;Comments by Russ&lt;/a&gt; on the use of LT1763 as regulator for the Crystek clock: "The reason the LT1763 is a good fit for the clock we use is because that clock in essence has a form of local regulation and decoupling internally."&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;OUTPUT IMPEDANCE BUFFALO I, II (from &lt;a href="http://www.diyaudio.com/forums/twisted-pear/160782-buffalo-ii-12.html#post2111740"&gt;diyaudio&lt;/a&gt;)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;195 ohm each output&lt;/li&gt;&lt;/ul&gt;According to the &lt;a href="http://www.esstech.com/PDF/sabrewp.pdf"&gt;ESS Sabre DAC whitepaper&lt;/a&gt; page 4, each of the 8 DACs can be modeled as a voltage source having an output impedance of approx 800 ohm. Since in stereo configuration 4 such dacs are wired in parallel, the effective output impedance is thus 800/4 ~ 200 ohm.&lt;br /&gt;&lt;br /&gt;DUAL MONO INSTALLATION&lt;br /&gt;&lt;br /&gt;Latest &lt;a href="http://www.diyaudio.com/forums/twisted-pear/160782-buffalo-ii-50.html#post2163072"&gt;diagram&lt;/a&gt; posted at diyaudio&lt;br /&gt;&lt;br /&gt;DIMENSIONS&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Buffalo II board: &lt;a href="http://www.twistedpearaudio.com/forum/default.aspx?g=posts&amp;amp;t=968"&gt;2" x 3.3"&lt;/a&gt;. This is the same size as the other modules such as OPUS, COD, Buffalo I, etc.&lt;/li&gt;&lt;li&gt;IVY III: From the &lt;a href="http://www.twistedpearaudio.com/images/linestages/ivy3/ivy_3_layout_whole.jpg"&gt;layout&lt;/a&gt; it appears it is a double size board: 4" x 3.3"&amp;nbsp;&lt;/li&gt;&lt;li&gt;Supplied Standoffs: .5" base standoffs. Inter-board standoffs (not included with the Buffalo II board are .625")&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S5k-pUdYruI/AAAAAAAAFGw/iqI-0kKDfdg/s1600-h/cs8416mux.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S5k-pUdYruI/AAAAAAAAFGw/iqI-0kKDfdg/s320/cs8416mux.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S5alwGaxXCI/AAAAAAAAFDA/YrGq8Iv0u94/s1600-h/buffdimansion-1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="388" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S5alwGaxXCI/AAAAAAAAFDA/YrGq8Iv0u94/s400/buffdimansion-1.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-6440879041422135739?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/6440879041422135739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=6440879041422135739' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6440879041422135739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6440879041422135739'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/buffalo-ii-specification-and-faq.html' title='Buffalo II Specification and FAQ'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/S4WzdTChcNI/AAAAAAAAE-Q/_oLFRmCKi4w/s72-c/buffCurrent-1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4393763808955339394</id><published>2010-02-08T00:13:00.000-08:00</published><updated>2010-02-08T11:53:06.029-08:00</updated><title type='text'>Musiland Driver 1.082: Fast vs Precision</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;A reader sent me some measurements on the I2S lines with the latest driver. The first picture is with Fast Mode and the second picture is with Precision Mode. I think the error of 4 Hz is probably due to probe or calibration as the theoretical deviation in fast mode is 17 Hz (The measurement shows 21 Hz deviation)&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S29yxxLsqPI/AAAAAAAAEqI/44rbiOv55Jc/s1600-h/44kHz_Fast.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="387" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S29yxxLsqPI/AAAAAAAAEqI/44rbiOv55Jc/s400/44kHz_Fast.jpg" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S29y_cC81wI/AAAAAAAAEqY/RMNJ142oDcs/s1600-h/44Khz_Precision.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="367" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S29y_cC81wI/AAAAAAAAEqY/RMNJ142oDcs/s400/44Khz_Precision.jpg" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;In addition, he measured the LRCK signal in an oscilloscope. The waveform looks very clean. Note: device is powered with an external low noise regulator (not USB power)&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;96K Waveform&lt;br /&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S29zyX9BeCI/AAAAAAAAEqg/XgP3xWaD5qU/s1600-h/96kHz_LRCK.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="358" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S29zyX9BeCI/AAAAAAAAEqg/XgP3xWaD5qU/s400/96kHz_LRCK.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;44.1K Waveform&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S29z8SgmvKI/AAAAAAAAEqo/qgsOaFBjm84/s1600-h/44kHz.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="358" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S29z8SgmvKI/AAAAAAAAEqo/qgsOaFBjm84/s400/44kHz.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4393763808955339394?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4393763808955339394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4393763808955339394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4393763808955339394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4393763808955339394'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/musiland-driver-1082-fast-vs-precision.html' title='Musiland Driver 1.082: Fast vs Precision'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/S29yxxLsqPI/AAAAAAAAEqI/44rbiOv55Jc/s72-c/44kHz_Fast.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2179469430591284834</id><published>2010-02-06T01:20:00.000-08:00</published><updated>2010-08-06T12:28:25.605-07:00</updated><title type='text'>Programming the WM8804</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S29WyALJ-1I/AAAAAAAAEpo/OLR_hIMISog/s1600-h/wm8804.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S29WyALJ-1I/AAAAAAAAEpo/OLR_hIMISog/s400/wm8804.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm going to attempt to use the WM8804 SPDIF receiver in software mode. A quick look at the datasheet shows that there are 30 registers to program!. I've done an extensive search in the internet and there are no projects involving using this part in software mode. In fact, it seems it is not very easy to program.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;But first lets explore this device in a bit more detail.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;According to the manufacturer, the WM8804 has the lowest intrinsic jitter of any commercial spdif receiver. In addition, it provides large immunity against incoming jitter.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Lets explore why the WM8804 is immune to incoming jitter.&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Conventional spdif receivers utilize a PLL to lock into the signal. Devices such as the very popular CS8412/14/16 operate this way. A PLL generates an initial clock with a VCO (voltage controlled oscillator) and compares the phase of that clock with an incoming clock. The error in phase results in a voltage that is feed back to the VCO until the output clock "locks" unto the input clock. According to an &lt;a href="http://www.audiocraftersguild.com/AandE/npt.on.jitter2.htm"&gt;AES paper&lt;/a&gt;:&lt;/div&gt;&lt;blockquote style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Popular S/PDIF receiver chips like the Yamaha YM3623B and Crystal CS8412 are NOT crystal controlled but rather recover the necessary clock from internal Phase Locked Loops (PLL) locked onto the incoming data stream. The simple two pin can crystals often seen directly attached to '3623's and '8412's are optional. The 3623 uses the crystal clock to quickly lock onto the S/PDIF signal. The 8412 uses the crystal clock to determine and display the sample rate and jitter level of the S/PDIF signal. Both parts ignore the local crystal clock once locked onto the S/PDIF signal.&lt;/blockquote&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Higher end parts will use a sample rate converter to further clean the jitter. Both TI and Cirrus have spdif receivers with built in ASRCs It is noted that the use of ASRC is controversial in high end audio (there are camps on both sides)&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;According to Wolfson in their &lt;a href="http://www.wolfsonmicro.com/documents/uploads/misc/en/A_high_performance_SPDIF_receiver_Oct_2006.pdf"&gt;white paper&lt;/a&gt;: &lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;blockquote&gt;The goal here is to &lt;b style="color: #cc0000;"&gt;synchronize a clock generated from a PLL and high quality oscillator&lt;/b&gt; to incoming S/PDIF data stream. This is different to usual approach of using a PLL to recover a clock from the S/PDIF data stream, which inherently has to track the jitter to maintain lock.&lt;/blockquote&gt;The white paper gives the technical details, but suffice to say that it is essentially a PLL followed by a re-clocker (not a sample rate converter) with a time based derived from the crystal. I have a post comparing the difference between re-clocking and sample rate conversion &lt;a href="http://hifiduino.blogspot.com/2009/06/asynchronous-re-clocker-vs-asynchronous.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Measurements by Wolfson shows the WM8804 compared with another commercial part&lt;br /&gt;&lt;br /&gt;The following picture shows the jitter performance of the WM8804 with incoming signal having 5UI of jitter injected in the input sdif signal (5UI is 5x163nsec for 48K sample frequency). Result: 51.7 psec (period jitter RMS) which is the same as the spec'ed intrinsic jitter of the device (50 psec)&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S20x5ZFmy4I/AAAAAAAAEoY/pgOTOAc5c-Q/s1600-h/wm8804Jitter.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="296" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S20x5ZFmy4I/AAAAAAAAEoY/pgOTOAc5c-Q/s400/wm8804Jitter.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following picture shows the jitter performance of a competitive device spec'ed with 150 psec of intrinsic jitter. The result is 334psec (period jitter RMS)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S200Nyw2VhI/AAAAAAAAEog/E6-ZvDZSruE/s1600-h/jitterOther.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S200Nyw2VhI/AAAAAAAAEog/E6-ZvDZSruE/s400/jitterOther.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To be fair, 5UI of jitter which translates into 800 nsec which is a HUGE amount of jitter. The lowly Apple Airport Express was &lt;a href="http://www.stereophile.com/digitalprocessors/505apple/#"&gt;measured by Stereophile&lt;/a&gt; to have a "respectably low 258ps of jitter" in the spdif output. Thus in real life, I think the relevant measure is intrinsic jitter in which the Wolfson part excels at 50 psec&lt;br /&gt;&lt;br /&gt;Here is the WM8804 Implementation by &lt;a href="http://www.twistedpearaudio.com/digital/wm8804.aspx"&gt;TwistedPearAudio&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/S23FY28ph3I/AAAAAAAAEpI/0K7oLhb6qwg/s1600-h/DSC_0339+%282%29.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/S23FY28ph3I/AAAAAAAAEpI/0K7oLhb6qwg/s400/DSC_0339+%282%29.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2179469430591284834?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2179469430591284834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2179469430591284834' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2179469430591284834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2179469430591284834'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/programming-wm8804.html' title='Programming the WM8804'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/S29WyALJ-1I/AAAAAAAAEpo/OLR_hIMISog/s72-c/wm8804.JPG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5919642975462144128</id><published>2010-02-03T10:36:00.000-08:00</published><updated>2010-02-03T10:40:56.544-08:00</updated><title type='text'>Musiland 01-US I2S Mod</title><content type='html'>&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;A reader sent me a few pictures of his I2S Mod&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S2nC9ngcz7I/AAAAAAAAEoQ/-ysw6LiXjJ0/s1600-h/DAC_MUSILAND_2.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S2nC9ngcz7I/AAAAAAAAEoQ/-ysw6LiXjJ0/s400/DAC_MUSILAND_2.jpg" width="381" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S2nCG6pWLLI/AAAAAAAAEoI/JySf393GJNw/s1600-h/Musiland_I2S_TAP.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="" border="0" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S2nCG6pWLLI/AAAAAAAAEoI/JySf393GJNw/s400/Musiland_I2S_TAP.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5919642975462144128?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5919642975462144128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5919642975462144128' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5919642975462144128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5919642975462144128'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/02/musiland-01-us-i2s-mod.html' title='Musiland 01-US I2S Mod'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/S2nC9ngcz7I/AAAAAAAAEoQ/-ysw6LiXjJ0/s72-c/DAC_MUSILAND_2.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1949700463112156886</id><published>2010-01-28T10:06:00.000-08:00</published><updated>2011-07-08T12:23:44.714-07:00</updated><title type='text'>Clock generation in the Musiland Devices</title><content type='html'>&lt;div&gt;&lt;span style="font-family: trebuchet ms;"&gt;Over at &lt;a href="http://www.diyhifi.org/forums/viewtopic.php?f=2&amp;amp;t=1889&amp;amp;start=15"&gt;diyhifi.org&lt;/a&gt;, user simmconn figured out how the clocks of the Musiland are synthesized (I've summarized here):&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;The Xilinx FPGA has two DCMs (&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;"Digital Clock Managers")&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;. They take an existing clock and perform integer multiplications and divisions in order to synthesize a new clock frequency. &lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;The frequencies required to handle all the sample rates are&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;:&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;span style="color: red;"&gt;24.576MHz&lt;/span&gt; for 48KHz, 96KHz and 192KHz sample rate and&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;span style="color: red;"&gt;22.5792MHz&lt;/span&gt; for the 44.1KHz, 88.2KHz and 176.4KHz sample rate&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;The ratios for the DCMs to generate the required frequencies are as follows:&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;22.5792 MHz = 48 MHz*(14/25)*(21/25)&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;24.576 MHz = 48 MHz*(8/25)*(8/5)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;Since there are two sets of ratios, the Xilinx chip needs to change them on the fly &lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;when sample rate changes (because the fpga used in the Musiland devices only has two DCMs).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Simmconn determined that (the earlier version of the drivers did not have this reconfiguration on the fly capability and) fixed ratios were used in the DCMs. He figured that in order to generate the two frequencies with static DCM m/n numbers, they had to select 24.576 MHz and a frequency close to 22.5792 MHz:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;22.588235 MHz = 48 MHz*(8/17)&amp;nbsp; -Using the first DCM&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;24.576 MHz = 48 Mhz X2 (using clock multiplier function of fpga) = 96 MHz; 96MHz*(32/25)= 122.88 MHz -Using the second DCM; externally divide by 5 using clock division of fpga.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;if we divide this frequency by 512 (you divide by some multiple of 64 which is sort of the minimum fs)&lt;/span&gt;, we can calculate the resultant sample frequency:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;22.588235/512 = &lt;span style="color: red;"&gt;44,117.6&lt;/span&gt; Hz&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; (Approximation)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;24.576/512 = &lt;span style="color: red;"&gt;48,000&lt;/span&gt; Hz (Exact)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;I previously measured MCK from the I2S lines of the Musiland MINI model:&lt;br /&gt;&lt;br /&gt;For 44.1K Material:&lt;br /&gt;&lt;/span&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S2If0xn65_I/AAAAAAAAElg/AMYRq_bSeE4/s1600-h/P1020211.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" style="font-family: trebuchet ms;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431939092096673778" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S2If0xn65_I/AAAAAAAAElg/AMYRq_bSeE4/s200/P1020211.JPG" style="cursor: pointer; height: 139px; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;For 48K Material&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/S2If6JS6YQI/AAAAAAAAElo/5ecNv5wGviM/s1600-h/P1020208.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" style="font-family: trebuchet ms;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431939184350355714" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/S2If6JS6YQI/AAAAAAAAElo/5ecNv5wGviM/s200/P1020208.JPG" style="cursor: pointer; height: 150px; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;br /&gt;I also determined that fs was 128.&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; If we use these numbers we determine that the sample frequency&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;5,647,218/128= &lt;span style="color: red;"&gt;44,118.9&lt;/span&gt; Hz which confirms the deviation from 44,000 Hz&lt;br /&gt;6,144,177/128= &lt;span style="color: red;"&gt;48,001&lt;/span&gt; Hz which confirms that the sample rate is exact.&lt;br /&gt;&lt;br /&gt;This was the way clocks were generated...&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: Trebuchet MS;"&gt;&lt;b&gt;A NEW DRIVER...&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: trebuchet ms;"&gt;This week &lt;a href="http://www.soomal.com/doc/10100001004.htm"&gt;Musiland released a new driver&lt;/a&gt; that reconfigures the two DCMs when the sample rate changes, and generates two clocks with exact frequency to support the different sample rates&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: trebuchet ms;"&gt;The driver has two Sample Rate Control modes:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;Fast Mode and Precision Mode. Fast Mode is like before: the DCMs are statically configured and the 44.1KHz family clock has a small error.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;Precision Mode reconfigures the DCMs when there is change in sample rate family (e.g. from 44.1 to 48KHz) and the resultant clock is exact.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S2Jffqc_juI/AAAAAAAAEmI/9QKd-GPPz4k/s1600-h/musilandCP.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5432009098138717922" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S2Jffqc_juI/AAAAAAAAEmI/9QKd-GPPz4k/s400/musilandCP.jpg" style="height: 237px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1949700463112156886?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1949700463112156886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1949700463112156886' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1949700463112156886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1949700463112156886'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/01/how-are-clocks-generated-in-musiland.html' title='Clock generation in the Musiland Devices'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/S2If0xn65_I/AAAAAAAAElg/AMYRq_bSeE4/s72-c/P1020211.JPG' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3613881982620371070</id><published>2010-01-16T19:06:00.000-08:00</published><updated>2010-01-18T13:38:09.975-08:00</updated><title type='text'>Enter raffle to support the people of Haiti</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S1OfcSbKBnI/AAAAAAAAEfA/SBsnaFHk8B0/s1600-h/haiti.jpg"&gt;&lt;img style="width: 400px; height: 248px;" id="BLOGGER_PHOTO_ID_5427857284242474610" alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S1OfcSbKBnI/AAAAAAAAEfA/SBsnaFHk8B0/s400/haiti.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:lucida grande;font-size:78%;"  &gt;Photo copyright CNN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:130%;"  &gt;Twisted Pear Audio is sponsoring a &lt;/span&gt;&lt;a href="http://www.twistedpearaudio.com/relief/relief.aspx"&gt;&lt;span style=";font-family:trebuchet ms;font-size:130%;"  &gt;raffle&lt;/span&gt;&lt;/a&gt;&lt;span style=";font-family:trebuchet ms;font-size:130%;"  &gt; to support relief efforts in Haiti. Raffle will be held Wed January 20. Hurry! &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3613881982620371070?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3613881982620371070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3613881982620371070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3613881982620371070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3613881982620371070'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/01/enter-raffle-to-support-people-of-haiti.html' title='Enter raffle to support the people of Haiti'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/S1OfcSbKBnI/AAAAAAAAEfA/SBsnaFHk8B0/s72-c/haiti.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3009469170062584177</id><published>2010-01-01T10:58:00.000-08:00</published><updated>2010-01-01T11:13:06.844-08:00</updated><title type='text'>Happy New Year!!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sz5I0U9Rg-I/AAAAAAAAEdA/umBDIOQlca4/s1600-h/DSC_0324+%283%29.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sz5I0U9Rg-I/AAAAAAAAEdA/umBDIOQlca4/s400/DSC_0324+%283%29.JPG" alt="" id="BLOGGER_PHOTO_ID_5421851065216762850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:trebuchet ms;font-size:78%;"  &gt;Before...&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sz5HdesMJ8I/AAAAAAAAEc4/yw8oPBSwRGg/s1600-h/before.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 261px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sz5HdesMJ8I/AAAAAAAAEc4/yw8oPBSwRGg/s400/before.JPG" alt="" id="BLOGGER_PHOTO_ID_5421849573180843970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;May this new year bring lots of joy to you and your families!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3009469170062584177?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3009469170062584177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3009469170062584177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3009469170062584177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3009469170062584177'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2010/01/latest.html' title='Happy New Year!!!'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/Sz5I0U9Rg-I/AAAAAAAAEdA/umBDIOQlca4/s72-c/DSC_0324+%283%29.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-557280210974368480</id><published>2009-12-30T23:55:00.000-08:00</published><updated>2009-12-31T00:10:59.771-08:00</updated><title type='text'>I2S LRCK Trace</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Decided to measure the LRCK line again to see if the waveform was cleaner.&lt;br /&gt;&lt;br /&gt;The picture speaks for itself. See the trace before &lt;a href="http://hifiduino.blogspot.com/2009/12/here-is-measurement-when-itunes-plays.html"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="CLEAR: both"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SzxZAGU3dYI/AAAAAAAAEbY/r8wHmCyZYVw/s1600-h/P1020416.JPG"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SzxcUbhKjbI/AAAAAAAAEbg/LFCUzqZ8UY4/s1600-h/P1020417.JPG"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 264px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5421309557501234610" border="0" alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SzxcUbhKjbI/AAAAAAAAEbg/LFCUzqZ8UY4/s400/P1020417.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="CLEAR: both"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="CLEAR: both"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-557280210974368480?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/557280210974368480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=557280210974368480' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/557280210974368480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/557280210974368480'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/i2s-lrck-trace.html' title='I2S LRCK Trace'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SzxcUbhKjbI/AAAAAAAAEbg/LFCUzqZ8UY4/s72-c/P1020417.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5571204933338391081</id><published>2009-12-30T22:36:00.000-08:00</published><updated>2010-01-26T10:24:17.422-08:00</updated><title type='text'>Reducing sources for noise</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;&lt;a href="http://www.audioasylum.com/forums/pcaudio/messages/6/66891.html"&gt;Elsewhere &lt;/a&gt;it has been measured that the DC-DC converters are a potential source for noise. Because I am not using the headphone output, I decided to cut the traces to these DC-DC converters. It is only required to cut two traces which you can later jumper if you decide to reverse the changes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SzxGWUOfKDI/AAAAAAAAEbI/aPIqfj2pOGo/s1600-h/P1020415.JPG"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SzxGWUOfKDI/AAAAAAAAEbI/aPIqfj2pOGo/s400/P1020415.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Power to the second DC-DC converter goes through a trace on the underside of the board&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SzxH0f3mnCI/AAAAAAAAEbQ/CkIdntQYLGQ/s1600-h/P1020408.JPG"&gt;&lt;img style="width: 400px; height: 385px;" id="BLOGGER_PHOTO_ID_5421287018680720418" alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SzxH0f3mnCI/AAAAAAAAEbQ/CkIdntQYLGQ/s400/P1020408.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;If you are using a different Musiland model, the traces will be in different places. But the procedure is as follows:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;1- Identify the DC-DC converters. These are the 8-pin chips marked "3063". You can find the datasheet for these DC-DC converters &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.onsemi.com/pub_link/Collateral/NCP3063-D.PDF"&gt;here&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt;.&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; (There are two of them)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;2- Identify the Vcc pin:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/S14m9LoVlzI/AAAAAAAAEhw/SlplJ-pDY7w/s1600-h/dc-dc.jpg"&gt;&lt;img style="cursor: pointer; width: 132px; height: 189px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/S14m9LoVlzI/AAAAAAAAEhw/SlplJ-pDY7w/s400/dc-dc.jpg" alt="" id="BLOGGER_PHOTO_ID_5430821033191249714" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S18xpVKu98I/AAAAAAAAEiQ/LposVJMu8Ew/s1600-h/01-us5.jpg"&gt;&lt;img style="cursor: pointer; width: 156px; height: 114px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S18xpVKu98I/AAAAAAAAEiQ/LposVJMu8Ew/s400/01-us5.jpg" alt="" id="BLOGGER_PHOTO_ID_5431114261758670786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;3- Find the trace that feeds this line and cut. This line also connects a local resistor and capacitors for the DC-DC converter. It may not matter whether you cut before the local cap or after the local cap, but in my mod I cut it before the local cap&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;4- Make sure you don't cut the line in a place that feeds the other linear regulators (there are two other linear regulator that feeds off the same lines - there are several traces but they all connect to the 5V USB power). In the second picture you can see the line (next to the crystal) that feeds both the DC-DC regulator and the linear regulator. It branches off and feeds the DC-DC regulator through a bridge underneath the board.&lt;br /&gt;&lt;br /&gt;5- If you plan well, you can actually use external wiring and a switch to reconnect the traces. This will re-enable the local analog output in case you feel like using the built-in headphone amp.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5571204933338391081?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5571204933338391081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5571204933338391081' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5571204933338391081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5571204933338391081'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/reducing-sources-for-noise.html' title='Reducing sources for noise'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/SzxGWUOfKDI/AAAAAAAAEbI/aPIqfj2pOGo/s72-c/P1020415.JPG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-6788023482688513064</id><published>2009-12-10T09:26:00.000-08:00</published><updated>2010-11-30T22:13:16.281-08:00</updated><title type='text'>MUSILAND SPDIF to OPUS DAC (WM8804/WM8741)</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;Because the MCK for the Musiland devices is 128fs which is "not supported" by the WM8741 DAC (see previous post), I decided to use the SPDIF output of the Musiland to the TwistedPearAudio Wolfson WM8804 spdif receiver board and then to the WM8471 DAC board. With this configuration each component is working at its optimal range. 44.1KHz material goes to the DAC as 44.1KHz material and the DAC can apply high up-sampling allowing it work at its optimal range.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SyEvLWSACmI/AAAAAAAAEWQ/ue6IGPp0Iu0/s1600-h/DSC_0299.JPG"&gt;&lt;img alt="" border="0" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SyEvLWSACmI/AAAAAAAAEWQ/ue6IGPp0Iu0/s400/DSC_0299.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The Musiland 01-MINI has SPDIF out, but it is not connected to an output plug. However, all you have to do is install a resistor and connect the cable to the back side of the board.&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;Install resistor in R22 position as shown in picture&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SyE5REhCYKI/AAAAAAAAEW4/eExiJD14CSs/s1600-h/DSC_0303.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5413671192508915874" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SyE5REhCYKI/AAAAAAAAEW4/eExiJD14CSs/s400/DSC_0303.JPG" style="cursor: pointer; height: 248px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Connect cable to backside of board&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SyE5KEjQ6bI/AAAAAAAAEWw/wqmZrYR4vNU/s1600-h/DSC_0307.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5413671072259172786" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SyE5KEjQ6bI/AAAAAAAAEWw/wqmZrYR4vNU/s400/DSC_0307.JPG" style="cursor: pointer; height: 308px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;NOTE: I use 221 ohm - in theory, this resistor is a voltage divider with the input 75 ohm resistor you find in spdif receivers in order to bring the level down to &lt;a href="http://en.wikipedia.org/wiki/S/PDIF"&gt;.5v-1v&lt;/a&gt; or so for "consumer spdif". I also didn't bother with impedance matching, transformer isolation and other "audiophile" concerns as the spdif wire is just a few inches long. I did use a coax that I scavenged from a cheap RCA interconnect cable&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Some traces of the spdif signal &lt;a href="http://www.head-fi.org/forum/thread/443786/musiland-monitor-02-us/435#post_6387575"&gt;here&lt;/a&gt;. (Monitor US 02, but the chips are the same as the mini)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-6788023482688513064?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/6788023482688513064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=6788023482688513064' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6788023482688513064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6788023482688513064'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/musiland-spdif-to-opus-dac-wm8804wm8741.html' title='MUSILAND SPDIF to OPUS DAC (WM8804/WM8741)'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SyEvLWSACmI/AAAAAAAAEWQ/ue6IGPp0Iu0/s72-c/DSC_0299.JPG' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4774045885809124491</id><published>2009-12-10T00:16:00.000-08:00</published><updated>2009-12-10T00:17:47.902-08:00</updated><title type='text'>Musiland I2S Connection to WM8741 DAC</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;From the MCK compatibility chart we can see that for 44.1 KHz sample rate, 128fs is not supported in the Wolfson WM8741. But I wanted to try it anyway. (Recall that the &lt;a href="http://hifiduino.blogspot.com/2009/12/measuring-master-clock-and-fs.html"&gt;Musiland output MCK is at 128fs&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;It actually works and sounds well. However, when switching through the different internal upsampling options, only medium upsampling and no upsampling work. High upsampling does not work.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;This means that the DAC is not working optimally. Perhaps using spdif rather than I2S is a better option for this DAC (Notice from the table that the BB DACs support 128fs with all sampling frequencies)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SyCuUDgkAlI/AAAAAAAAEVw/4dktXebqv1Y/s1600-h/P1020198.JPG"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SyCuUDgkAlI/AAAAAAAAEVw/4dktXebqv1Y/s400/P1020198.JPG" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4774045885809124491?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4774045885809124491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4774045885809124491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4774045885809124491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4774045885809124491'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/musiland-i2s-connection-to-wm8741-dac.html' title='Musiland I2S Connection to WM8741 DAC'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/SyCuUDgkAlI/AAAAAAAAEVw/4dktXebqv1Y/s72-c/P1020198.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-115872382801967526</id><published>2009-12-07T12:02:00.000-08:00</published><updated>2009-12-07T12:07:10.082-08:00</updated><title type='text'>Master Clock Compatibility</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;I've compiled the supported MCK for different DACs. One can see that measuring the ouput MCK from a source device like the Musiland is important in order to determine its compatibility with a particular DAC.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sx1fvALcj2I/AAAAAAAAESU/BcwYVQV_zv4/s1600-h/SampleRate-2.jpg"&gt;&lt;img style="cursor: pointer; width: 177px; height: 400px;" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sx1fvALcj2I/AAAAAAAAESU/BcwYVQV_zv4/s400/SampleRate-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5412587588275703650" border="0" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sx1fVSQntKI/AAAAAAAAESM/thSHAzYL8ZQ/s1600-h/SampleRate.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div style="clear: both;"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-115872382801967526?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/115872382801967526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=115872382801967526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/115872382801967526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/115872382801967526'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/blog-post.html' title='Master Clock Compatibility'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/Sx1fvALcj2I/AAAAAAAAESU/BcwYVQV_zv4/s72-c/SampleRate-2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-6734274907671664694</id><published>2009-12-05T14:02:00.000-08:00</published><updated>2010-05-12T14:50:00.348-07:00</updated><title type='text'>Measuring BCK (Bit clock)</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SxrYhZPibOI/AAAAAAAAEQ8/U376N-h3unE/s1600-h/P1020212.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411875970462412002" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SxrYhZPibOI/AAAAAAAAEQ8/U376N-h3unE/s400/P1020212.JPG" style="cursor: pointer; height: 241px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;So far we've measured two out of the 4 lines when using I2S. Strictly speaking, I2S only has 3 lines, but the Master Clock line is required by the DAC and some component generates the master clock.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;So we've measured MCK, LRCK and now we measure BCK.  The data line cannot be measured because it varies with the data and it is a bit pattern corresponding to the data. So with these 3 measurements, we can characterized the I2S interface.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;For 44.1KHz material, we measured 2.8236 MHz. What does this mean?  28236/441=64.0. The BCK is running at 64 times the sampling rate or 64fs. This means that the device sends 32-bit words per channel (yes 32 bits of data per channel).&lt;br /&gt;&lt;br /&gt;BCK can be 32fs (16 bit -16-bitx2), 48fs (24-bit per channel) or 64fs (32-bit per channel as it is in our case). DACs data sheet specify the word length it can accept, but since the send and receive bit depth do not have to match, words are either padded or truncated if there is a mismatch.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;From Wikipedia:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;If the Transmitter is sending 32 bits per channel to a device with only 24 bits of internal precision, the Receiver may simply ignore the extra bits of precision by not storing the bits past the 24th bit. Likewise, if the Transmitter is sending 16 bits per channel to a Receiving device with 24 bits of precision, the receiver will simply Zero-fill the missing bits. This feature makes it possible to mix and match components of varying precision without reconfiguration.&lt;/blockquote&gt;This is possible because data is transmitted MSB first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-6734274907671664694?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/6734274907671664694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=6734274907671664694' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6734274907671664694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6734274907671664694'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/measuring-bck-bit-clock.html' title='Measuring BCK (Bit clock)'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SxrYhZPibOI/AAAAAAAAEQ8/U376N-h3unE/s72-c/P1020212.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1624990447678254255</id><published>2009-12-05T11:05:00.000-08:00</published><updated>2009-12-05T12:50:16.184-08:00</updated><title type='text'>Measuring Master Clock and fs</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Here is another way to measure frequency &gt; 100 KHz. The 40-buck scope has a frequency feature that is good up to 5 MHz (It is probably good up to 8 MHz as some users have experienced)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The picture shows the MCK line with 44.1KHz material playing. If we divide this by the sample rate, 5,647,218 Hz / 44&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;,100 Hz = 128.055. Thus the system is running at 128x fs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SxqvACMPUoI/AAAAAAAAEPU/UvUGpf6JfpE/s1600-h/P1020211.JPG"&gt;&lt;img alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SxqvACMPUoI/AAAAAAAAEPU/UvUGpf6JfpE/s400/P1020211.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;What would be the frequency for 48KHz? We know the fs=128x, so the frequency is 48,000x128=6.144 MHz&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SxrHK-Yp7uI/AAAAAAAAEP0/hqRqxhy1t0s/s1600-h/P1020208.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 235px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SxrHK-Yp7uI/AAAAAAAAEP0/hqRqxhy1t0s/s400/P1020208.JPG" alt="" id="BLOGGER_PHOTO_ID_5411856893598101218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Pretty good measurement...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1624990447678254255?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1624990447678254255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1624990447678254255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1624990447678254255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1624990447678254255'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/measuring-master-clock-and-fs.html' title='Measuring Master Clock and fs'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SxqvACMPUoI/AAAAAAAAEPU/UvUGpf6JfpE/s72-c/P1020211.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5647250772333760182</id><published>2009-12-05T00:19:00.000-08:00</published><updated>2009-12-05T00:31:59.931-08:00</updated><title type='text'>Measuring MCK (System or Master Clock)</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;Another signal line that is required when using the I2S connection is the system clock (MCK or SCK). This runs in the many MHz range so you need a "real" scope. Another diyer, jkenny, took these measurements of his Musiland 01-US. The system clock is the clock that is fed to the DAC and all other signals are based of this clock signal&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The picture below is for input signal with 44.1KHz sample rate. If one divides the frequency by the sample rate, 5.71Mhz/44.1Khz=129. System clocks are designed at 128x, 256x, and so on. Thus from this measurement we find that the Musiland device is running its master clock at 128fs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Why is this important? Because DACs are designed to run at a specific range (range of fs) for the master clock. If you operate the DAC outside this range, the DAC performance may suffer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SxoXfAPQD6I/AAAAAAAAEOk/osiDDjSn328/s1600-h/44KHz.JPG"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SxoXfAPQD6I/AAAAAAAAEOk/osiDDjSn328/s400/44KHz.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The following picture is for input sample rate of 96KHz&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SxoaUlQYRCI/AAAAAAAAEO0/cVMkC-w7BTA/s1600-h/96KHz.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 313px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SxoaUlQYRCI/AAAAAAAAEO0/cVMkC-w7BTA/s400/96KHz.JPG" alt="" id="BLOGGER_PHOTO_ID_5411666843139589154" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5647250772333760182?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5647250772333760182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5647250772333760182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5647250772333760182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5647250772333760182'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/measuring-mck-system-or-master-clock.html' title='Measuring MCK (System or Master Clock)'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SxoXfAPQD6I/AAAAAAAAEOk/osiDDjSn328/s72-c/44KHz.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2123407081055802986</id><published>2009-12-04T17:21:00.000-08:00</published><updated>2009-12-05T13:34:23.826-08:00</updated><title type='text'>Musiland I2S</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;One of the reasons I had to measure the I2S frequency was because I connected the MUSILAND 01-MINI to the WM8741 DAC by tapping the I2S lines. Here you can see the MUSILAND device (which implements asynchronous USB transfer and supports up to 192 KHz sample rate content -and good reviews in the audio forums). I took it out of its metal casing, attached it to a plastic board and tapped the I2S lines that connects the fpga to the internal DAC&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sxm1ttet7GI/AAAAAAAAEN8/gXL8SqC0J1c/s1600-h/DSC_0287.JPG"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sxm1ttet7GI/AAAAAAAAEN8/gXL8SqC0J1c/s400/DSC_0287.JPG" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sxm3U_DJ1dI/AAAAAAAAEOE/62chiCAUS_A/s1600-h/DSC_0292.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 200px;" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sxm3U_DJ1dI/AAAAAAAAEOE/62chiCAUS_A/s400/DSC_0292.JPG" alt="" id="BLOGGER_PHOTO_ID_5411557998412289490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I2S lines in the Musiland 01-MINI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SxrNxZrFXEI/AAAAAAAAEQU/wKdktHes7sY/s1600-h/mini.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 293px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SxrNxZrFXEI/AAAAAAAAEQU/wKdktHes7sY/s400/mini.jpg" alt="" id="BLOGGER_PHOTO_ID_5411864150827949122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The I2S lines on the Musiland 01-US&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SxrRqR9pYCI/AAAAAAAAEQc/u5VNX3OJMn0/s1600-h/01-US.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 179px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SxrRqR9pYCI/AAAAAAAAEQc/u5VNX3OJMn0/s400/01-US.jpg" alt="" id="BLOGGER_PHOTO_ID_5411868426545750050" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2123407081055802986?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2123407081055802986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2123407081055802986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2123407081055802986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2123407081055802986'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/interfacing-with-i2s.html' title='Musiland I2S'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/Sxm1ttet7GI/AAAAAAAAEN8/gXL8SqC0J1c/s72-c/DSC_0287.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-8031381916528222198</id><published>2009-12-03T23:58:00.000-08:00</published><updated>2009-12-04T00:33:39.199-08:00</updated><title type='text'>Measuring I2S with Cheap Scope</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;I decided to to some audio measurement with the scope. Measuring I2S was the perfect exercise as the different clocks are sent in separate wire. Because of the limited bandwidth of the scope, choosing the slowest clock was necessary. A quick look at the I2S specification indicated that measuring the LRCK, the clock that tells you left channel data and right channel data was the line to measure.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Because in a single cycle LRCK indicates the transfer of data  for a single stereo sample (left channel and right channel), LRCK always matches the sample rate. See &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://en.wikipedia.org/wiki/I%C2%B2S"&gt;Wikipedea&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; for a better explanation.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Here is the measurement when iTunes plays at 44.1KHz sample rate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SxjCshxz9dI/AAAAAAAAEMs/pYUC_jlhXUI/s1600-h/P1020204-2.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 228px;" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SxjCshxz9dI/AAAAAAAAEMs/pYUC_jlhXUI/s400/P1020204-2.JPG" alt="" id="BLOGGER_PHOTO_ID_5411289022522979794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Here is the measurement when iTunes plays at 88.2KHz sample rate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SxjCbpirHLI/AAAAAAAAEMk/VDJykAJNlJs/s1600-h/P1020206-1.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 229px;" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SxjCbpirHLI/AAAAAAAAEMk/VDJykAJNlJs/s400/P1020206-1.JPG" alt="" id="BLOGGER_PHOTO_ID_5411288732549192882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Here is the measurement when iTunes plays at 96KHz sample rate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both; font-family: trebuchet ms;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SxjBEghFdNI/AAAAAAAAEMU/jbRjFya5ajY/s1600-h/P1020205.JPG"&gt;&lt;img alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SxjBEghFdNI/AAAAAAAAEMU/jbRjFya5ajY/s400/P1020205.JPG" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-8031381916528222198?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/8031381916528222198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=8031381916528222198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8031381916528222198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8031381916528222198'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/here-is-measurement-when-itunes-plays.html' title='Measuring I2S with Cheap Scope'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SxjCshxz9dI/AAAAAAAAEMs/pYUC_jlhXUI/s72-c/P1020204-2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1823064415066988355</id><published>2009-12-03T18:12:00.000-08:00</published><updated>2010-01-02T09:48:50.439-08:00</updated><title type='text'>$49 Oscilloscope</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SxhwFoSOBnI/AAAAAAAAEL0/pBImPgEAOC8/s1600-h/DSC_0298.JPG"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SxhwFoSOBnI/AAAAAAAAEL0/pBImPgEAOC8/s400/DSC_0298.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;A pretty good scope for audio applications. Maximum analog bandwidth is 1 MHz. However, the maximum signal you can comfortably measure is 1/10 of that or 100 KHz (this is a rule of thumb, but I don't know the theory behind it). According to this &lt;a href="http://groups.google.com/group/jye-tech-oscilloscopes/browse_thread/thread/17a7a82558351630#"&gt;thread&lt;/a&gt; and this &lt;a href="http://groups.google.com/group/jye-tech-oscilloscopes/browse_thread/thread/41074e29badf97a5#"&gt;thread&lt;/a&gt;, the practical upper limit is about 100KHz and with some tweaks and a proper probe you can measure up to 150KHz-200KHz.&lt;br /&gt;&lt;br /&gt;There is a &lt;a href="http://groups.google.com/group/jye-tech-oscilloscopes?pli=1"&gt;Google group&lt;/a&gt; with discussions on this scope. Check out the "pages" section for more info on modding/upgrading the scope. The manual can be found &lt;a href="http://www.jyetech.com/Products/LcdScope/Operating%20Instructions.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Tips &amp;amp; Tricks:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;10x diy probe: &lt;a href="http://www.cromwell-intl.com/radio/probes.html"&gt;link&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear: both;"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1823064415066988355?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1823064415066988355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1823064415066988355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1823064415066988355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1823064415066988355'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/12/pretty-good-scope-for-audio.html' title='$49 Oscilloscope'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/SxhwFoSOBnI/AAAAAAAAEL0/pBImPgEAOC8/s72-c/DSC_0298.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-835215545923158524</id><published>2009-11-19T12:36:00.000-08:00</published><updated>2009-11-19T13:12:49.708-08:00</updated><title type='text'>OSR bits in WM8741</title><content type='html'>&lt;a style="font-family: trebuchet ms;" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SwWsbBrzf1I/AAAAAAAAEDU/d9RKg6sTR7g/s1600/osr.jpg"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SwWsbBrzf1I/AAAAAAAAEDU/d9RKg6sTR7g/s400/osr.jpg" border="0" /&gt;&lt;/a&gt;&lt;div  style="clear: both;font-family:trebuchet ms;"&gt;&lt;br /&gt;According to a Wolfson Engineer,&lt;br /&gt;&lt;blockquote style="color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:85%;"&gt;OSR, it's the DAC-to-input-rate-ratio. We want that to be high to have the DAC run fast, but not too fast to introduce timing related mayhem. You can't set this ratio directly but only indirectly through R7.&lt;br /&gt;&lt;br /&gt;When you set &lt;i&gt;low rate&lt;/i&gt; what you tell the DSP is &lt;i&gt;high OSR&lt;/i&gt;. It means we use the maximum amount of upsampling since we know the input rate is low enough such that the resulting DAC frequency lies in the sweet spot of performance: high to run the sigma/delta with loads of headroom, not too high so as to introduce analogue problems.&lt;br /&gt;&lt;br /&gt;For medium and high rates, the actual upsampling &lt;i&gt;ratio&lt;/i&gt; reduces such that with the higher input rates we end up with the same actual DAC &lt;i&gt;frequency&lt;/i&gt;.&lt;/span&gt;  &lt;/blockquote&gt;Thus the OSR bits in the DAC controls the Internal upsampling of the DAC.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Low rate means "apply highest internal upsampling"&lt;/li&gt;&lt;li&gt;Medium rate means "apply medium internal upsampling"&lt;/li&gt;&lt;li&gt;High rate means "do not apply any internal upsampling"&lt;/li&gt;&lt;/ul&gt;You can test this out with the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you input sample frequency to the DAC is 44.1 KHz, you can select any one of the 3 settings. With Low Rate, maximum internal upsampling is applied, with High Rate, no internal upsampling will be applied.&lt;/li&gt;&lt;li&gt;If your input sample frequency to the DAC is 192 KHz, then you can only select High Rate, meaning that no internal upsampling can be applied because the input data is at high rate or has been upsampled outside of the DAC&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-835215545923158524?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/835215545923158524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=835215545923158524' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/835215545923158524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/835215545923158524'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/11/osr-bit-in-wm8741.html' title='OSR bits in WM8741'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/SwWsbBrzf1I/AAAAAAAAEDU/d9RKg6sTR7g/s72-c/osr.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1694217080298876667</id><published>2009-11-18T23:16:00.000-08:00</published><updated>2009-11-18T23:34:35.299-08:00</updated><title type='text'>Testing WM8741 filter setting</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Some people can hear differences between the digital filters in the WM8741 DAC. In my setup, I can't really hear clear differences between the different filter settings, and up to now I had no way to test whether the different filters were being selected by the software in Arduino.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The good people at &lt;/span&gt;&lt;a href="http://www.amb.org/audio/gamma2/"&gt;&lt;span style="font-family:trebuchet ms;"&gt;AMB&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; did an excellent job in characterizing filters 1, 2, and 3 with different upsampling, and found that without upsampling (i.e., with 44.1KHz material), filters 1 and 2 will roll off at 15Khz as compared with filter 3 as shown in this picture:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SwTyr0UYC6I/AAAAAAAAEC0/hQJPmX5h_d8/s1600/wm8741+response.bmp"&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 255px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5405712287343840162" border="0" alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SwTyr0UYC6I/AAAAAAAAEC0/hQJPmX5h_d8/s400/wm8741+response.bmp" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I downloaded a 15 KHz test tone (from mosquito ringtones) and played it in a loop in iTunes. The output was set at 44.1 KHz and I set the OSR bit in the WM8741 to "high" (meaning do not use internal upsampling). Then I selected and compared filters 1, 2, 3. Indeed, you can hear an attenuation with filters 1 and 2 as compared to filter 3. Filter 1 is filter A, 2 is B and 3 is C.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Therefore the software is working. (Keep in mind that if you are an old guy, you will need to ask a kid to help you listen to the 15KHz test tone)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1694217080298876667?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1694217080298876667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1694217080298876667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1694217080298876667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1694217080298876667'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/11/testing-wm8741-filter-setting.html' title='Testing WM8741 filter setting'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SwTyr0UYC6I/AAAAAAAAEC0/hQJPmX5h_d8/s72-c/wm8741+response.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3875494673121216546</id><published>2009-11-03T10:33:00.000-08:00</published><updated>2009-12-15T15:39:49.414-08:00</updated><title type='text'>Logic Level Converter</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SvB3a91LvGI/AAAAAAAAEAc/6W5R6pn-qiQ/s1600-h/levelconverter.jpg"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SvB3a91LvGI/AAAAAAAAEAc/6W5R6pn-qiQ/s400/levelconverter.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.nkcelectronics.com/logic-level-converter.html"&gt;NKC Electronics&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; has released this little board to allow converting voltage levels between Arduino and other devices.&lt;br /&gt;&lt;br /&gt;Recall that Arduino is typically a 5V device and devices that you want to control (such as a DAC) are 3V devices. If you use the Arduino I2C interface (which is 5V logic) to control the 3V I2C interface of a device, you need this converter. More information &lt;a href="http://hifiduino.blogspot.com/2009/04/5v-to-33v.html"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SvB3a91LvGI/AAAAAAAAEAc/6W5R6pn-qiQ/s1600-h/levelconverter.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3875494673121216546?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3875494673121216546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3875494673121216546' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3875494673121216546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3875494673121216546'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/11/blog-post.html' title='Logic Level Converter'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SvB3a91LvGI/AAAAAAAAEAc/6W5R6pn-qiQ/s72-c/levelconverter.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2609218507132638152</id><published>2009-10-15T22:10:00.000-07:00</published><updated>2009-10-15T22:26:17.116-07:00</updated><title type='text'>LCDUINO-1</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/StgAW9Nkv8I/AAAAAAAAD2E/piN6MbWtIvI/s1600-h/lcduino-1.jpg"&gt;&lt;img border="0" alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/StgAW9Nkv8I/AAAAAAAAD2E/piN6MbWtIvI/s320/lcduino-1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;When I started my project, I posted in DIYAudio and got totally ignored. Fortunately other people recognized the potential of using Arduino for audio and have invested in making Arduino an "audio-friendly" device.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.head-fi.org/forums/f6/lcduino-1-i-o-processor-447607/"&gt;LCDUINO&lt;/a&gt; is an arduino-compatible board (I wouldn't call it a clone because it cannot use "arduino shields"). I believe the primary goal was to build a board of the same footprint as a 16x2 LCD so that it fits neatly behind the LCD, facilitating the construction of something like a headphone amplifier.&lt;br /&gt;&lt;br /&gt;The device is the equivalent of an Arduino board (or clone) plus a serial LCD (which is what I used for my project). LCDUINO adds a real time clock, but lacks the USB chip for programming. I think a second goal for the project was to provide a lot of code so that for many purposes, no programming is necessary. If you want to program the board yourself, you will need to purchase a USB to serial converter and connect it to the LCDUINO&lt;br /&gt;&lt;br /&gt;The real jewel in LCDUINO is the code that linuxworks is developing for the board which will be available to the user community.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;You can find more at &lt;a href="http://www.netstuff.org/audio/"&gt;linuxworks web site &lt;/a&gt;and the &lt;a href="http://www.amb.org/audio/lcduino1/"&gt;AMB website&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2609218507132638152?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2609218507132638152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2609218507132638152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2609218507132638152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2609218507132638152'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/10/blog-post.html' title='LCDUINO-1'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/StgAW9Nkv8I/AAAAAAAAD2E/piN6MbWtIvI/s72-c/lcduino-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-829620302271536883</id><published>2009-10-15T20:32:00.000-07:00</published><updated>2009-10-15T20:37:04.733-07:00</updated><title type='text'>Arduino+Buffalo</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;I think this is the first public project of Arduino controlling a Twistedpairaudio Buffalo DAC [&lt;/span&gt;&lt;a href="http://cracktous.blogspot.com/"&gt;&lt;span style="font-family:trebuchet ms;"&gt;link&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Trebuchet MS;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/StfpWjynFLI/AAAAAAAAD18/Qk64LpmihPI/s1600-h/IMG00032-20091012-2304.jpg"&gt;&lt;img border="0" alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/StfpWjynFLI/AAAAAAAAD18/Qk64LpmihPI/s320/IMG00032-20091012-2304.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-829620302271536883?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/829620302271536883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=829620302271536883' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/829620302271536883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/829620302271536883'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/10/arduinobuffalo.html' title='Arduino+Buffalo'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/StfpWjynFLI/AAAAAAAAD18/Qk64LpmihPI/s72-c/IMG00032-20091012-2304.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2168327287022233683</id><published>2009-10-08T11:15:00.000-07:00</published><updated>2010-02-21T19:38:46.965-08:00</updated><title type='text'>Tuning iTunes</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;Haven't posted for a while... Spending time listening to music. I use iTunes running on Windows Vista&lt;br /&gt;&lt;br /&gt;One anoying thing in iTunes is that in album view, it separates songs if they have multiple artists. The way to fix this is the following:&lt;br /&gt;&lt;br /&gt;"You can mark these songs as a compilation in iTunes. Do do this, select all the songs that you want to be included in the compilation and select &lt;b&gt;Get Info&lt;/b&gt; from the file menu and select &lt;b&gt;Yes&lt;/b&gt; in the &lt;b&gt;Compilation&lt;/b&gt; menu as shown below. After clicking &lt;b&gt;OK&lt;/b&gt; iTunes group all the selected songs together." [&lt;/span&gt;&lt;a href="http://support.apple.com/kb/TS1468"&gt;&lt;span style="font-family: trebuchet ms;"&gt;Link to Apple for complete article&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: trebuchet ms;"&gt;]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://km.support.apple.com/library/APPLE/APPLECARE_ALLGEOS/TS1468/TS1468_4.jpg"&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;img alt="" border="0" src="http://km.support.apple.com/library/APPLE/APPLECARE_ALLGEOS/TS1468/TS1468_4.jpg" style="height: 280px; width: 300px;" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;iTunes on PCs is also bit perfect if you match the sampling rate in the Quicktime control panel to the sampling rate of the source material. Ken Poon explains it well in his &lt;a href="http://www.designwsound.com/dwsblog/?p=1718"&gt;blog&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The latest version of iTunes has a different dialog box:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/S4H8OoffRhI/AAAAAAAAE6I/LZftvWO2nLE/s1600-h/itunescompilations.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="307" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/S4H8OoffRhI/AAAAAAAAE6I/LZftvWO2nLE/s400/itunescompilations.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: trebuchet ms;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2168327287022233683?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2168327287022233683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2168327287022233683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2168327287022233683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2168327287022233683'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/10/havent-posted-for-while.html' title='Tuning iTunes'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/S4H8OoffRhI/AAAAAAAAE6I/LZftvWO2nLE/s72-c/itunescompilations.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4030594024787572154</id><published>2009-08-04T13:12:00.000-07:00</published><updated>2009-08-04T13:22:57.875-07:00</updated><title type='text'>4 1/4 Digit DMM</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SniWIV3JbxI/AAAAAAAADSI/y_r2SJL46mM/s1600-h/P1020048.JPG"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SniWIV3JbxI/AAAAAAAADSI/y_r2SJL46mM/s320/P1020048.JPG" border="0" /&gt;&lt;/a&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Purchased this DMM in Shenzhen, China for RMB 200 (about 30 bucks) at the famous &lt;a href="http://www.bunniestudios.com/blog/?p=147"&gt;SEG Electronics Market&lt;/a&gt;. Yeap, everything you've heard about this place is true!.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4030594024787572154?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4030594024787572154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4030594024787572154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4030594024787572154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4030594024787572154'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/08/4-14-digit-dmm.html' title='4 1/4 Digit DMM'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SniWIV3JbxI/AAAAAAAADSI/y_r2SJL46mM/s72-c/P1020048.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4674894293354871331</id><published>2009-06-28T23:04:00.000-07:00</published><updated>2009-06-28T23:05:01.475-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SkhZg5e5B9I/AAAAAAAADPU/w3pbXBoWmyA/s1600-h/mj.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 105px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SkhZg5e5B9I/AAAAAAAADPU/w3pbXBoWmyA/s400/mj.jpg" alt="" id="BLOGGER_PHOTO_ID_5352626578850908114" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4674894293354871331?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4674894293354871331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4674894293354871331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4674894293354871331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4674894293354871331'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/blog-post.html' title=''/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/SkhZg5e5B9I/AAAAAAAADPU/w3pbXBoWmyA/s72-c/mj.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4934310409258300596</id><published>2009-06-26T00:12:00.000-07:00</published><updated>2009-09-08T14:42:30.650-07:00</updated><title type='text'>How Asynchronous Rate Conversion Works</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Continuing with the &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.diyaudio.com/forums/showthread.php?s=&amp;amp;threadid=28814"&gt;discussion thread at DIYaudio&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt;, I will attempt to summarize how ASRC works.&lt;/span&gt; &lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 204, 51);"&gt;Synchronous rate conversion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's say we are dealing with a SYNCHRONOUS rate conversion problem, from 44.1kHz to 48kHz, where both rates are derived from the SAME clock source. Meaning that, when measured with the same stopwatch (clock), the 44.1kHz rate is EXACLTY 44.1kHz, and the 48kHz rate is EXACTLY 48kHz.&lt;/span&gt;  &lt;span style="font-family:trebuchet ms;"&gt;In this environment, one could simply interpolate by 160 to 7.056MHz and decimate by 147 to 48kHz:&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;T&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;he first thing to do (at least conceptually) is to take the 44.1kHz data stream and stuff 160-1=159 zeros, evenly spaced in the time domain, between each sample. Then you apply the "zero-stuffed" sequence to a low-pass filter (cutoff at half the original sample rate or 22.05kHz), which will finalize the interpolation process by "filling in" the zeros with real data points. (hard to envision, but this is what happens with digital filters)&lt;/span&gt;.&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;Now we simply grab every 147th sample, to generate our output sequence at 48kHz. That "grabbing every 147th sample" is precisely DECIMATION. Just digital re-sampling, or down-sampling. We didn't need a special filter for decimation in this case, because the interpolation filter did it's job for us.&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-weight: bold; color: rgb(255, 204, 51);"&gt;Asynchronous rate conversion&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;In ASYNCHRONOUS sample rate conversion. The 44.1kHz clock and the 48kHz are NOT derived from the same time base, meaning they are not exactly the numbers they claim to be, when measured with the same stopwatch.&lt;/span&gt;  &lt;span style="font-family:trebuchet ms;"&gt;So, in this asynchronous world, if have two time lines: one with ticks every 44.1kHz, the other one with ticks every 48kHz. Thus by definition, Asynchronous Rate Conversion is this:&lt;/span&gt;  &lt;blockquote&gt;&lt;span style="font-family:trebuchet ms;"&gt;There is NO interpolation by any FINITE integer you can do on the INPUT sample points ... meaning, no finite number of samples you can evenly space between the original samples ... that will give you perfect alignment with all the OUTPUT sample points.&lt;/span&gt;&lt;/blockquote&gt; &lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&lt;br /&gt;&lt;span style="color: rgb(255, 204, 0);"&gt;Asynchronous Sample Rate Conversion: How does it work&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Here we have a situation where we need to digitally CALCULATE output data samples at new points in time, different than the input data time points. And the time points are NOT synchronized. ... so there is no finite integer interpolation that we can perform on the input data that will align PERFECTLY with the output time points we need.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="color: rgb(153, 255, 255); font-weight: bold;"&gt;But we don’t have to be PERFECT&lt;/span&gt;. Conceptually, we will interpolate the input data by a pretty huge number, in fact, by a pretty huge INTEGER number, so that we effectively "fill in" very many samples in-between the original Fs_in samples. So instead of providing an interpolated input sample that corresponds to that exact point in time, we can provide the closest (in time) interpolated sample that is calculated. How BIG will the error be?&lt;/span&gt;  &lt;span style="font-family:trebuchet ms;"&gt;The question is therefore is ... How far do I have to interpolate, by what integer, so that grabbing the most recent sample will give me acceptably LOW error ?&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 255, 255); font-weight: bold;"&gt;We can never achieve perfection here, but we can get ARBITRARILY CLOSE ... simply because the higher I interpolate, the lower the error&lt;/span&gt;&lt;span style="color: rgb(153, 255, 255);"&gt;.&lt;/span&gt; So the question is, how big should the interpolation number “N” be?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;After a lot of math, it can be shown that input data at the Fs_in rate needs to be interpolated by N~2^20 (1,048,576 -over a million!), so that the error incurred by Asynchronous decimation to Fs_out will be acceptably small. But 2^20 is HUGE resulting in a frequency of 50 GHz and this is for an input sample frequency of 44.1 KHz.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Fortunately, because most of the samples are going to be ignored when decimating to the output sample rate (e.g. 48 KHz), we don’t have to calculate them in the first place. We only need the samples closest to the output sample rate. In order to do this we use FIR filters (Finite Impulse Response). And though clever implementation, and by knowing the output sample rate, the computational demands of implementing the FIR filter are manageable in a typical commercial implementation. (Meaning you don't have to do all the math or have heavy-duty computational engines).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 204, 0);font-family:trebuchet ms;" &gt;My observations:&lt;/span&gt; &lt;span style="font-style: italic;font-family:trebuchet ms;" &gt;Rate conversion from 44.1KHz to 192KHz is the same as 44.1 KHz to 176.4 KHz&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;From the above discussion, it can be seen that because the system is designed to select the interpolated sample that is closest to the output sampling rate, it does not matter whether the output sample rate is an integer multiple of the original sample rate or not.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;This is important because in some audio circles it is believed that for CD material with its native sample frequency of 44.1KHz, it would "sounds better" if sample-rate converted to 88.2 KHz or 176.4KHz (integer multiple) than to 96KHz or 192KHz (not integer multiple). The argument presented here (by the expert at DIYaudio), at least from a theoretical point of view implies that the closest matching sample to clock-ticks in a 192 KHz clock, for example, should be no worse than the closest matching sample to clock-ticks in a 176.4 KHz clock.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4934310409258300596?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4934310409258300596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4934310409258300596' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4934310409258300596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4934310409258300596'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/how-asynchronous-rate-conversion-works.html' title='How Asynchronous Rate Conversion Works'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3950752143374140341</id><published>2009-06-25T21:30:00.000-07:00</published><updated>2009-06-25T21:32:35.965-07:00</updated><title type='text'>Asynchronous Re-clocker vs Asynchronous Rate Converter</title><content type='html'>&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;The same &lt;a href="http://www.diyaudio.com/forums/showthread.php?s=&amp;amp;threadid=28814"&gt;discussion thread&lt;/a&gt; teaches the theory behind sample rate conversion.&lt;br /&gt;&lt;br /&gt;We should first distinguish between two terms that are often used interchangeably in audio circles but are completely different technologies:&lt;br /&gt;&lt;br /&gt;Asynchronous re-clocking&lt;br /&gt;&lt;br /&gt;   &lt;blockquote&gt;Asynchronous re-clocking or re-sampling: this term describes a pretty simple operation where a digital audio signal is simply re-clocked by a clock from a different time base. There is no interpolation or rate conversion performed on the signal.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Asynchronous Sample Rate Conversion:&lt;br /&gt;&lt;br /&gt;   &lt;blockquote&gt;This is categorically different, in the sense that SIGNIFICANT interpolation is performed on the Fs_in (input sample rate) signal to minimize error (both time &amp;amp; freq domain) when the ultimate decimation to Fs_out (output sample rate) occurs. Example chips that can perform this function are the CS8420, AD1896 (and their brethren)...&lt;br /&gt;&lt;br /&gt;   ...and the SRC4192 which is the subject of the next project.&lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3950752143374140341?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3950752143374140341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3950752143374140341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3950752143374140341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3950752143374140341'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/asynchronous-re-clocker-vs-asynchronous.html' title='Asynchronous Re-clocker vs Asynchronous Rate Converter'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-619154121442275044</id><published>2009-06-25T07:40:00.000-07:00</published><updated>2009-06-25T19:31:00.893-07:00</updated><title type='text'>More on Pre/Post ringing</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;There is an excellent  discussion &lt;a href="http://www.diyaudio.com/forums/showthread.php?postid=332675#post332675"&gt;thread&lt;/a&gt; on digital sampling at DIYAudio. In one of the &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.diyaudio.com/forums/showthread.php?postid=335306#post335306"&gt;posts&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt;, the following is explained:&lt;/span&gt;  &lt;blockquote style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt;"&lt;span class="nf"&gt;Pre/post ringing : most obvious in the classic step response of a steep, linear phase (usually FIR) filter. ... Let me just say now, for the record, that the pre/post ringing we often encounter in digital audio is nothing more than an artifact of the Gibbs phenomenon which simply states that abrupt transitions or discontinuities in one domain, cause ringing in the other.&lt;/span&gt;&lt;span class="nf"&gt;&lt;br /&gt;&lt;br /&gt;Band-limited systems unfortunately fit in this category and there is no better example of a SHARPLY band-limited system than digital audio. Don't like the ringing? Sure we can eliminate it but the price you pay will be aliasing, pure &amp;amp; simple, no way around it. And that's a BAD tradeoff."&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="nf"  style="font-family:trebuchet ms;"&gt;&lt;br /&gt;What is described above is the fact that with a linear phase filter, reducing the ringing will require the use of slow roll off filters allowing higher frequency images to reflect back into the audio band (this is called Aliasing).&lt;br /&gt;&lt;br /&gt;More modern DACs such as the one we used in this project are addressing this problem with so called "minimum phase filters" and to completely eliminate any aliasing, the concept of "Apodizing filters" are used together with minimum phase filters.&lt;br /&gt;&lt;br /&gt;We previously explained the digital filters of the WM8741 &lt;a href="http://hifiduino.blogspot.com/2009/05/wm8741-digital-filters.html"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-619154121442275044?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/619154121442275044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=619154121442275044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/619154121442275044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/619154121442275044'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/more-on-prepost-ringing.html' title='More on Pre/Post ringing'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4075203249693366097</id><published>2009-06-24T15:47:00.000-07:00</published><updated>2009-06-25T10:48:13.375-07:00</updated><title type='text'>Which I/O Expander?</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;My next project is to control the &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://focus.ti.com/lit/ds/symlink/src4192.pdf"&gt;Texas Instruments SRC4192&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; chip. This device is an "asynchronous reclocker" and feeds the DAC. Theoretically it reduces jitter because it recreates the clock with a much better on-board oscillator. The device is implemented in a kit board from &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://twistedpearaudio.com/digital/metronome.aspx"&gt;TwistedPearAudio&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The block diagram is as follows:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SkKus2zy99I/AAAAAAAADM0/9bB7xhQv2Cg/s1600-h/scr4192.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 262px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SkKus2zy99I/AAAAAAAADM0/9bB7xhQv2Cg/s400/scr4192.jpg" alt="" id="BLOGGER_PHOTO_ID_5351031392919812050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;In order to interface to the control logic lines, I would need an I/O expander that would communicate with Arduino. Basically you want to swith these lines high or low to select the different configurations and features of the device.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Since there are up to 15 control lines and it needs to support the I2C protocol (to communicate with Arduino) and must by in DIP package (for easy soldering). I would need a 16-port I/O expander in DIP package. Looking over at Digikey, there is just one device in stock that meets the criteria: &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&amp;amp;name=568-2027-5-ND"&gt;the PCA9555 by NXP&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; Semiconductors.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;It cost  $2.13  Application note &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an469.pdf"&gt;AN469&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; explains how these devices work in great detail.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4075203249693366097?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4075203249693366097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4075203249693366097' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4075203249693366097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4075203249693366097'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/which-io-expander.html' title='Which I/O Expander?'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SkKus2zy99I/AAAAAAAADM0/9bB7xhQv2Cg/s72-c/scr4192.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3564808874024291616</id><published>2009-06-24T12:21:00.001-07:00</published><updated>2009-06-24T12:38:38.183-07:00</updated><title type='text'>More on Volume</title><content type='html'>In the latest code, I've fixed the volume values I used to program the WM8741. &lt;a href="http://hifiduino.blogspot.com/2009/05/bug-in-volume-value.html"&gt;Previously&lt;/a&gt; I mistakenly used 0.25 dB as the smallest interval whereas it is .125 dB the smallest interval, so my volume readings were twice the actual value.&lt;br /&gt;&lt;br /&gt;Also I did not see the need to use an interval of less than 1 dB because it is already not very discernible a difference of 1 dB.&lt;br /&gt;&lt;br /&gt;Now, the  typical listening level is above -50 dB, and mostly in the -30 dB to -15 dB. Therefore above the -48 dB at which point you will start experiencing (theoretically) some loss in information due to the nature of &lt;a href="http://hifiduino.blogspot.com/2009/05/digital-volume-control.html"&gt;digital volume control&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I also got a response from Wolfson about how the volume control is implemented: Basically input less than 24 bit is padded to 24 bit, input that is 25 to 32 bit is reduced to to 24 bit with &lt;a href="http://en.wikipedia.org/wiki/Dither"&gt;dither&lt;/a&gt; and the volume control is applied at the next stage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3564808874024291616?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3564808874024291616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3564808874024291616' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3564808874024291616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3564808874024291616'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/more-on-volume.html' title='More on Volume'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4097662387920358131</id><published>2009-06-22T00:26:00.000-07:00</published><updated>2009-06-24T12:20:38.273-07:00</updated><title type='text'>LCD Settings in Arduino EEPROM</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;I've added adjusting the LCD Brightness and Contrast with the remote. I've assigned one button in the remote to select between "no adjustment", "brightness adjustment" and "contrast adjustment". This button is a toggle between these three modes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sj8yzwjmaZI/AAAAAAAADLs/0uLJ57vomyA/s1600-h/Display-5.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 127px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sj8yzwjmaZI/AAAAAAAADLs/0uLJ57vomyA/s400/Display-5.JPG" alt="" id="BLOGGER_PHOTO_ID_5350050747128375698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;When entering the brightness mode, the current value is read from the Arduino EEPROM. Two other buttons in the remote are used to increase the value and decrease the value, and adjust the LCD accordingly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sj8zXLeRn-I/AAAAAAAADL0/jdK8POc0Cms/s1600-h/Display-6.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 129px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sj8zXLeRn-I/AAAAAAAADL0/jdK8POc0Cms/s400/Display-6.JPG" alt="" id="BLOGGER_PHOTO_ID_5350051355649220578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;When entering the contrast mode, the current value for contrast is read from the Arduino EEPROM. Two other buttons in the remote are used to increase the value and decrease the value, and adjust the LCD accordingly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sj8z8sCm_tI/AAAAAAAADL8/vQwC8MtCyZI/s1600-h/Display-1.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 132px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sj8z8sCm_tI/AAAAAAAADL8/vQwC8MtCyZI/s400/Display-1.JPG" alt="" id="BLOGGER_PHOTO_ID_5350052000046710482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;When you exit the adjustment mode, the current settings for brightness and contrast are saved in the Arduino EEPROM. &lt;/span&gt;I've used addresses 0 and 1 in the EEPROM space to save the &lt;span style="font-family:trebuchet ms;"&gt;two values. The &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.arduino.cc/playground/Code/EEPROM-Flash"&gt;EEPROM of the Arduino&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; ATmega 168 has 512 bytes of space and the ATmega328 has 1 K bytes of space.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The code for selecting the mode, read and write to EEPROM is as follows. Pressing a specified key in the remote will invoke the following code:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;case&lt;/span&gt;&lt;span style="font-size:100%;"&gt; KEYDISPLAY:&lt;br /&gt;   BC++;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;if&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (BC%3==0){&lt;br /&gt;     lcd.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;setCursor&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(0,4);&lt;br /&gt;     lcd.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;print&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);font-size:100%;" &gt;"       "&lt;/span&gt;&lt;span style="font-size:100%;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;EEPROM&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;write&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(BRIADDR,brightness); &lt;/span&gt;&lt;span style="color: rgb(119, 119, 85);font-size:100%;" &gt;// Save value&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;EEPROM&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;write&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(CONADDR,contrast);  &lt;/span&gt;&lt;span style="color: rgb(119, 119, 85);font-size:100%;" &gt;// Save Value&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;   }&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;if&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (BC%3==1){&lt;br /&gt;     lcd.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;setCursor&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(0,4);&lt;br /&gt;     lcd.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;print&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);font-size:100%;" &gt;"BRI "&lt;/span&gt;&lt;span style="font-size:100%;"&gt;);&lt;br /&gt;     brightness=&lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;EEPROM&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;read&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(BRIADDR); &lt;/span&gt;&lt;span style="color: rgb(119, 119, 85);font-size:100%;" &gt;// Read value&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;     lcd.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;print&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(brightness);&lt;br /&gt;   }&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;if&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (BC%3==2 ){&lt;br /&gt;     lcd.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;setCursor&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(0,4);&lt;br /&gt;     lcd.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;print&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);font-size:100%;" &gt;"CON    "&lt;/span&gt;&lt;span style="font-size:100%;"&gt;);&lt;br /&gt;     contrast=&lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;EEPROM&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;read&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(CONADDR);  &lt;/span&gt;&lt;span style="color: rgb(119, 119, 85);font-size:100%;" &gt;// Read value&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;     lcd.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;setCursor&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(8,0);&lt;br /&gt;     lcd.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;print&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(contrast);&lt;br /&gt;   }&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;delay&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(100);&lt;br /&gt;   break;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;To adjust the brightness and contrast, we send a value to a specific address in the LCD I2C interface/controller (This is a I2C LCD from web4robot). We use the Arduino wire library. The I2C address for the LCD is 0x4C, 0xFE is a prefix indicating that it is a command and not text to be displayed. 0x03 is the command for brightness and ox04 is the command for contrast. After sending the prefix and the command, the value is sent. Brightness value is 0-255 and contrast value is 0-100. The code is as follows:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(119, 119, 85);font-size:100%;" &gt;// Routines for LCD Adjustment&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(119, 119, 85);font-size:100%;" &gt;// For LCD backlight adjustment&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;void&lt;/span&gt;&lt;span style="font-size:100%;"&gt; BackLight(uint8_t bright)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;beginTransmission&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(0x4C);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;send&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(0xFE);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;send&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(0x03);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;send&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(bright);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;endTransmission&lt;/span&gt;&lt;span style="font-size:100%;"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;delay&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(25);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(119, 119, 85);font-size:100%;" &gt;// For LCD contrast adjustment&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(204, 102, 0);font-size:100%;" &gt;void&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Contrast(uint8_t cont)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;beginTransmission&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(0x4C);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;send&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(0xFE);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;send&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(0x04);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;send&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(cont);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;Wire&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;endTransmission&lt;/span&gt;&lt;span style="font-size:100%;"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 102, 0);font-size:100%;" &gt;delay&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(25);&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4097662387920358131?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4097662387920358131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4097662387920358131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4097662387920358131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4097662387920358131'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/lcd-settings-in-arduino-eeprom.html' title='LCD Settings in Arduino EEPROM'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/Sj8yzwjmaZI/AAAAAAAADLs/0uLJ57vomyA/s72-c/Display-5.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4273672281287615544</id><published>2009-06-21T23:09:00.000-07:00</published><updated>2009-06-21T23:11:41.836-07:00</updated><title type='text'>Latest Code v 0.7</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;Everything I've written is in this new code base. And everything is less than 9K. Link in the sidebar&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4273672281287615544?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4273672281287615544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4273672281287615544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4273672281287615544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4273672281287615544'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/latest-code-v-07.html' title='Latest Code v 0.7'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-346184481341737718</id><published>2009-06-20T21:05:00.000-07:00</published><updated>2009-06-20T21:28:53.574-07:00</updated><title type='text'>New Fonts</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Inspired by a new 4-line large font template at the Arduino forums (you can find the link in the sidebar), I decided to tweak my own 3-line Arduino large font.&lt;br /&gt;&lt;br /&gt;Basically you create a number of shapes as custom characters and used them to form the large font. However, you are limited by the number of custom fonts you can specify in an LCD (typically 8). The 4-line large font in the Arduino forums is actually the same size as my 3-line large font. But by having 4 lines you have more flexibility in positioning the custom characters "to preety-up" the fonts but you give up some speed in displaying the large numbers (25% speed penalty: 3 lines vs 4 lines). &lt;/span&gt;  &lt;span style="font-family:trebuchet ms;"&gt;Here are the results&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sj2zxpjcOUI/AAAAAAAADLM/T_JVnNS-Fy4/s1600-h/Display-1.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 132px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sj2zxpjcOUI/AAAAAAAADLM/T_JVnNS-Fy4/s400/Display-1.JPG" alt="" id="BLOGGER_PHOTO_ID_5349629597935483202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The left most number displays the selected digital filter in the DAC. Above, I've added an abbreviation to the name of the filter. In this case, LnS is "Linear Phase, Smooth Roll Off".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sj20ULEM9aI/AAAAAAAADLU/cTElMbuZN20/s1600-h/Display-2.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 132px;" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sj20ULEM9aI/AAAAAAAADLU/cTElMbuZN20/s400/Display-2.JPG" alt="" id="BLOGGER_PHOTO_ID_5349630191046817186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;"LnA" means "Linear Phase, Apodizing". Also displayed is RATE,  the input sample rate to the DAC. There is also filter #2: MnS: "Minimum Phase Smooth Roll-off"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/Sj203AiVgZI/AAAAAAAADLc/YcSTPBIlRak/s1600-h/Display-3.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 128px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/Sj203AiVgZI/AAAAAAAADLc/YcSTPBIlRak/s400/Display-3.JPG" alt="" id="BLOGGER_PHOTO_ID_5349630789515837842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;"BrK" means "Brickwall" filter. Also displayed is INPT, the input format to the DAC. The WM8141 can receive both PCM (from CD players) and DSD (from SACD players). In the future i will be experimenting with extracting the DSD signal from inside a player and feeding this signal straight to the DAC.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/Sj203VNU-BI/AAAAAAAADLk/e7STyyPUHiM/s1600-h/Display-4.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 130px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/Sj203VNU-BI/AAAAAAAADLk/e7STyyPUHiM/s400/Display-4.JPG" alt="" id="BLOGGER_PHOTO_ID_5349630795064866834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;"MnA" is "Minimum Phase, Apodizing" filter. Here RATE has been changed to 48K. Because the incoming signal is processed through a asynchronous reclocker chip to 192KHz, there is a sample rate mismatch and the DAC does not output any sound (In theory, this setting selects the appropriate filters to match the sample rate). In the future I will be using Arduino to control the asynchronous reclocker chip in order to change its output sample rate.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-346184481341737718?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/346184481341737718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=346184481341737718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/346184481341737718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/346184481341737718'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/new-fonts.html' title='New Fonts'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/Sj2zxpjcOUI/AAAAAAAADLM/T_JVnNS-Fy4/s72-c/Display-1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-7897950116874185533</id><published>2009-06-13T11:13:00.000-07:00</published><updated>2009-06-13T15:55:59.268-07:00</updated><title type='text'>I2C Address and R/W bit</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;I was reviewing my code and could not remember why the register addresses I defined in the code was different from the register addresses defined in the data sheet of the WM8741. After an hour reviewing the data sheet and the I2C protocol, I finaly realized that I2C address are 7 bit and the 8th bit is the Read/Write bit. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Since all the registers of the WM8741 are all write registers (R/W bit=0), they all end with zero. So the address value that you send in the I2C protocol is the 7 bit address plus the R/W bit, so the 8-bit values ends with zero.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Example:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;7-bit Address plus R/W bit&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;00h=0000000 plus R/W bit = 00000000 = 00h or 0x00&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;01h=0000001&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt; plus R/W bit = 00000010&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; = 02h or 0x02&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt;02h=0000010&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;span style="font-family: trebuchet ms;"&gt; plus R/W bit = 00000100 = 04h or 0x04&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-7897950116874185533?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/7897950116874185533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=7897950116874185533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7897950116874185533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7897950116874185533'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/i2c-address-and-rw-bit.html' title='I2C Address and R/W bit'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3814302398831637096</id><published>2009-06-11T14:49:00.000-07:00</published><updated>2009-06-11T15:09:12.557-07:00</updated><title type='text'>Why Pull-Up Resistor?</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;An often suggestion in Arduino debugging is "whether or not a pull-up resistor has been installed"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Why do we need a pull-up resistor? This &lt;a href="http://hifiduino.blogspot.com/2009/04/atmega-io-pull-up-resistor.html"&gt;article&lt;/a&gt; explains it well (and &lt;a href="http://www.madsciencenotebook.com/node/4"&gt;this one&lt;/a&gt; too), but in summary,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:trebuchet ms;"&gt;For an (digital) input pin, A pull-up resistor will set a default value when there is no signal at the input. In other words, when there is no input you don't want some random value but a definite value.&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:trebuchet ms;"&gt;Also,&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;If when there is input you measure 0 (or low), and when there is no input you want it to measure 1 (or high), then you must use a pull-up resistor.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:trebuchet ms;"&gt;If when there is input and you measure 1 (or high), and when there is no input you want it to measure 0 (or low), then you must use a pull-down resistor.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;But since &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://hifiduino.blogspot.com/2009/04/atmega-io-pull-up-resistor.html"&gt;Arduino has built-in pull-up resistors&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; that can be enabled in software, you should think about a configuration that only requires pull-up resistor or you must implement the pull-down externally&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;. However, if your external signal already has two definite states (high and low), then you don't need to enable the pull-up resistors inside the Atmel chip&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3814302398831637096?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3814302398831637096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3814302398831637096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3814302398831637096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3814302398831637096'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/why-pull-up-resistor.html' title='Why Pull-Up Resistor?'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5952432533338553633</id><published>2009-06-01T22:09:00.000-07:00</published><updated>2010-11-01T22:42:01.620-07:00</updated><title type='text'>Arduino Code for Rotary Encoder</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;(Update: I've improved the code. Take a look &lt;a href="http://hifiduino.wordpress.com/2010/10/29/arduino-one-line-debounce-code/"&gt;here&lt;/a&gt;. You have the choice to do h/w deboucing or s/w debouncing or both. The s/w debouncing code is just one line of code)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Reliable use of mechanical encoders requires two components: a &lt;/span&gt;&lt;a href="http://hifiduino.blogspot.com/2009/05/blog-post_06.html" style="font-family: trebuchet ms;"&gt;hardware tweak&lt;/a&gt;&lt;span style="font-family: trebuchet ms;"&gt; and (of course) code.&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; Although there are many sample code for rotary encoder, I feel the following is the simplest code for rotary encoders. This version is interrupt-based.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The interrupt routine simply detects direction of motion:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="color: #cc33cc; font-family: trebuchet ms;"&gt;void decoder()&lt;br /&gt;{&lt;br /&gt;if (digitalRead(4) == digitalRead(2))&lt;br /&gt;{&lt;br /&gt;volUp = 1;  //if encoder channels are the same, direction is CW&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;volDown = 1;  //if they are not the same, direction is CCW&lt;br /&gt;}&lt;br /&gt;}&lt;/blockquote&gt;&lt;span style="font-family: trebuchet ms;"&gt;Here we connect terminal A of the rotary encoder to Arduino's digital pin 4 and terminal B to digitalpin 2. The third terminal of the encoder is connected to GND. In this configuration the rotary encoder pulses will be pulling the pins to GND. In this example, we are controlling volume so one direction is volume up and the other direction is volume down.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;We attach the interrupt with:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-family: trebuchet ms;"&gt;&lt;/blockquote&gt;&lt;blockquote style="color: #cc33cc; font-family: trebuchet ms;"&gt;attachInterrupt(0, decoder, CHANGE);&lt;/blockquote&gt;&lt;span style="font-family: trebuchet ms;"&gt;and we detects CHANGE of the pulse. We need to detect rising edge and falling edge of the pulse in order to utilize the full resolution of the rotary encoder.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;During set up, we want to enable the pull-up resistors for pin 2 and pin 4 with:&lt;/span&gt;&lt;br /&gt;&lt;blockquote face="trebuchet ms"&gt;&lt;span style="color: #cc33cc;"&gt;pinMode(VOLUPPIN, INPUT);       // Pin 2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc33cc;"&gt;digitalWrite(VOLUPPIN, HIGH);    // Enable pull-up resistor&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc33cc;"&gt;pinMode(VOLDOWNPIN, INPUT);     // Pin 4&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc33cc;"&gt;digitalWrite(VOLDOWNPIN, HIGH);  // Enable pull-up resistor&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family: trebuchet ms;"&gt;Note: it doesn't matter which channel is connected to which pin to start with. You can always switch the connections if you expect the opposite result.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Then in a loop we detect when the flags are set and do accordingly:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="color: #cc33cc; font-family: trebuchet ms;"&gt;while(volUp==1)  // CW motion in the rotary encoder&lt;br /&gt;{&lt;br /&gt;volUp=0;  // Reset the flag&lt;br /&gt;// Do something&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;while(volDown==1)  // CCW motion in rotary encoder&lt;br /&gt;{&lt;br /&gt;volDown=0;  // clear the flag&lt;br /&gt;// Do something else&lt;br /&gt;}&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5952432533338553633?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5952432533338553633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5952432533338553633' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5952432533338553633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5952432533338553633'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/06/arduino-code-for-rotary-encoder.html' title='Arduino Code for Rotary Encoder'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4357814781277207804</id><published>2009-05-31T22:08:00.000-07:00</published><updated>2009-05-31T22:13:39.001-07:00</updated><title type='text'>Code Explained</title><content type='html'>Arranged a bit the way I present/share the code. Check out the sidebar links.&lt;br /&gt;&lt;br /&gt;Now that I've learned a bit more, I'm going to attempt to explain the code I write, and then present the complete code. Hopefully this will be most useful for beginners.&lt;br /&gt;&lt;br /&gt;The code presented in the sidebar is/will be the best and simplest examples I could find, customized to the current application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4357814781277207804?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4357814781277207804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4357814781277207804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4357814781277207804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4357814781277207804'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/code-explained.html' title='Code Explained'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1899430325303360168</id><published>2009-05-31T15:51:00.000-07:00</published><updated>2009-06-04T15:05:57.733-07:00</updated><title type='text'>Arduino Controller &amp; DAC</title><content type='html'>&lt;a style="font-family: trebuchet ms;" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiMJ_HQU6EI/AAAAAAAADGE/4mmpTeDUcPA/s1600-h/DSC_0244.JPG"&gt;&lt;img style="width: 401px; height: 216px;" alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiMJ_HQU6EI/AAAAAAAADGE/4mmpTeDUcPA/s400/DSC_0244.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The DAC is a kit from &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://twistedpearaudio.com/digital/opus.aspx"&gt;TwistedPear Audio&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt;, based on the WM8741.&lt;br /&gt;2-wire I2C connection (plus GND)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: trebuchet ms;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SiMKxm4bJRI/AAAAAAAADGM/Sw9KrzWl4TY/s1600-h/WithOpusBack.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 199px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SiMKxm4bJRI/AAAAAAAADGM/Sw9KrzWl4TY/s400/WithOpusBack.JPG" alt="" id="BLOGGER_PHOTO_ID_5342125430358615314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Inside the OPUS DAC: Leftmost is the toroid transformer inside a tin can. Middle is a dual DC power supply, rightmost are 3 boards stacked: top is the SPDIF receiver, middle is the asynchronous re-sampler and re-clocker board and bottom is the DAC board based on the Wolfson 8741.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SiMVLD1iIGI/AAAAAAAADGs/DKzv0bFUCAc/s1600-h/Opus.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 191px;" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SiMVLD1iIGI/AAAAAAAADGs/DKzv0bFUCAc/s400/Opus.JPG" alt="" id="BLOGGER_PHOTO_ID_5342136862744125538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Detail of the 2-wire I2C connection to the DAC board.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiMWrOc8bqI/AAAAAAAADG0/lc4Qp2m9WJg/s1600-h/I2C.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 194px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiMWrOc8bqI/AAAAAAAADG0/lc4Qp2m9WJg/s400/I2C.JPG" alt="" id="BLOGGER_PHOTO_ID_5342138514861223586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Detailed connection diagram&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiMb12UdoRI/AAAAAAAADHU/Bk8puNT0uIQ/s1600-h/OPUSswSettingsImg.jpg"&gt;&lt;img style="cursor: pointer; width: 358px; height: 400px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiMb12UdoRI/AAAAAAAADHU/Bk8puNT0uIQ/s400/OPUSswSettingsImg.jpg" alt="" id="BLOGGER_PHOTO_ID_5342144194919899410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Arduino I2C connections are analog pin 4 and 5&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SdBJI32hbWI/AAAAAAAACgg/bzEtNt-Ku70/s400/arduino_diecimila.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 251px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SdBJI32hbWI/AAAAAAAACgg/bzEtNt-Ku70/s400/arduino_diecimila.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1899430325303360168?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1899430325303360168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1899430325303360168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1899430325303360168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1899430325303360168'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/arduino-controller-dac.html' title='Arduino Controller &amp; DAC'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SiMJ_HQU6EI/AAAAAAAADGE/4mmpTeDUcPA/s72-c/DSC_0244.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1091261315890500534</id><published>2009-05-30T21:28:00.000-07:00</published><updated>2009-06-08T13:32:33.469-07:00</updated><title type='text'>Reusing Hard Disk Parts for the Case</title><content type='html'>&lt;a style="font-family: trebuchet ms;" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SiIHU4iduFI/AAAAAAAADEs/LvjERO7Xfu0/s1600-h/DSC_0233.JPG"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SiIHU4iduFI/AAAAAAAADEs/LvjERO7Xfu0/s400/DSC_0233.JPG" border="0" /&gt;&lt;/a&gt;&lt;div style="clear: both; font-family: trebuchet ms;"&gt;&lt;br /&gt;Always wanted to reuse old hard disks as the cases are made of high quality aluminum. Here are parts from different hard disks. These parts will form the top and bottom of the Arduino controller case. Once you get a hold of the right screwdrivers, it is a breeze to dismantle a hard drive (It is actually faster and more fun than reformatting a hard drive if you want to securely dispose of it)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SiIIqOi7NMI/AAAAAAAADE0/0GDt8k3Yaqw/s1600-h/front.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 286px;" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SiIIqOi7NMI/AAAAAAAADE0/0GDt8k3Yaqw/s400/front.JPG" alt="" id="BLOGGER_PHOTO_ID_5341841629566940354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first step is to cut the front piece. After measuring the text area of the LCD, I cut the opening with a hand saw (and a lot of sanding to get is straight). Then in order to align and mount the LCD I glued two strips of wood with the LCD in place. (Although the picture below shows the sides already glued, you do this step without the sides in place)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SiIJ051haPI/AAAAAAAADE8/l1gcz3h5SiQ/s1600-h/MountedLCD.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 291px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SiIJ051haPI/AAAAAAAADE8/l1gcz3h5SiQ/s400/MountedLCD.JPG" alt="" id="BLOGGER_PHOTO_ID_5341842912497985778" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next I cut the sides and glue them to the front piece. In order to facilitate positioning and gluing, I first mounted the top and bottom aluminum pieces to the sides and then with the box already formed, I glued it to the front piece. I also put some weight on top of the box to allow better gluing. Used regular wood glue.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SiILH8wUayI/AAAAAAAADFE/pPmQdjA34nE/s1600-h/Gluing.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 260px;" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SiILH8wUayI/AAAAAAAADFE/pPmQdjA34nE/s400/Gluing.JPG" alt="" id="BLOGGER_PHOTO_ID_5341844339210611490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The front and  sides glued together.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiIL1G35AsI/AAAAAAAADFM/WBMnjXUCXgU/s1600-h/frontAndsides.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 232px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiIL1G35AsI/AAAAAAAADFM/WBMnjXUCXgU/s400/frontAndsides.JPG" alt="" id="BLOGGER_PHOTO_ID_5341845115020837570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next, I mounted the "shield" to the case. In this configuration, the shield is fixed and the Arduino (Freeduino) is removable. All the connections are to the shield, including DC power. I can easily remove the Arduino board for programming and leave the controller attached to the stereo system. The small green board at the forefront is the 3.3V I2C level shifter. The DAC connects to the Arduino controller through these 5 pins. Center pin is GND as GND has to be shared between controller and device.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SiIQlpF0MkI/AAAAAAAADFU/ixao-hY3GEA/s1600-h/Shield.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 261px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SiIQlpF0MkI/AAAAAAAADFU/ixao-hY3GEA/s400/Shield.JPG" alt="" id="BLOGGER_PHOTO_ID_5341850346886279746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Below, you can see the Freeduino board mounted on top of the "shield". As the Freeduini is a kit, I soldered the headers on the bottom of the board.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SiIRjzWxFAI/AAAAAAAADFc/RjV6psyNBnY/s1600-h/FreeDuinoMounted.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 222px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SiIRjzWxFAI/AAAAAAAADFc/RjV6psyNBnY/s400/FreeDuinoMounted.JPG" alt="" id="BLOGGER_PHOTO_ID_5341851414793622530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here you can see detailed connections to the different parts.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiIUxABlVVI/AAAAAAAADFk/ahBSr_tl2Ng/s1600-h/Connections.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 340px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SiIUxABlVVI/AAAAAAAADFk/ahBSr_tl2Ng/s400/Connections.JPG" alt="" id="BLOGGER_PHOTO_ID_5341854940067616082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/ShRSBLn_BEI/AAAAAAAADA4/4R76UMMsN4Y/s1600/WithRemote.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 277px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/ShRSBLn_BEI/AAAAAAAADA4/4R76UMMsN4Y/s1600/WithRemote.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1091261315890500534?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1091261315890500534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1091261315890500534' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1091261315890500534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1091261315890500534'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/reusing-hd-parts-for-case.html' title='Reusing Hard Disk Parts for the Case'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SiIHU4iduFI/AAAAAAAADEs/LvjERO7Xfu0/s72-c/DSC_0233.JPG' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2616046403518161801</id><published>2009-05-24T19:18:00.000-07:00</published><updated>2009-06-01T12:48:29.173-07:00</updated><title type='text'>Posted Code for Large Numbers</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Follow the link the &lt;a href="http://hifiduino.blogspot.com/2009/05/improved-display.html"&gt;post below&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I used a little &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.ladyada.net/library/arduino/copyforhtml.html"&gt;utility from LadyAda&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; to format the code. (Unfortunately, the formatter doesn't work with the template colors I selected in this blog, so the code is posted in a wordpress blog.)&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2616046403518161801?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2616046403518161801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2616046403518161801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2616046403518161801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2616046403518161801'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/posted-code-for-large-numbers.html' title='Posted Code for Large Numbers'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4420303461001508551</id><published>2009-05-23T19:24:00.000-07:00</published><updated>2009-06-19T15:08:07.429-07:00</updated><title type='text'>Arduino LCD Custom Fonts, Large Numbers</title><content type='html'>&lt;object type="application/x-shockwave-flash" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="400" height="300"&gt; &lt;param name="flashvars" value="intl_lang=en-us&amp;amp;photo_secret=de5e0f703f&amp;amp;photo_id=3557808941"&gt; &lt;param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"&gt; &lt;param name="bgcolor" value="#000000"&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;amp;photo_secret=de5e0f703f&amp;amp;photo_id=3557808941" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Couldn't see well the standard size text of the display from the listening position (partly due to old age  and old glasses :-)). So I did some research in the Arduino forums and found some code for using custom characters to display large numbers. Also used the example sketch that came with the LCD libraries.&lt;br /&gt;&lt;br /&gt;The numbers I created are 9X the standard text size (3X3). Each number is composed of 9 custom characters.&lt;br /&gt;&lt;br /&gt;The numbers can display very fast if you change the built-in delays in the library to zero with lcd.setDelay(0,0). The movie shows the speed with this setting.&lt;br /&gt;&lt;br /&gt;The programming is very simple. First the custom characters are defined. In the LCD I am using you can define only up to 8 custom characters. For example, the following code defines one custom character where all the pixels are turned on:&lt;br /&gt;&lt;blockquote&gt; &lt;span style="color: rgb(204, 51, 204);"&gt;uint8_t cc1[8] = {     // Custom Character 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;    B8(11111),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;    B8(11111),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;    B8(11111),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;    B8(11111),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;    B8(11111),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;    B8(11111),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;    B8(11111),&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;    B8(11111)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;  };&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;NOTE: B8 is a macro defined in "macro.h" - Binary constant generator macro by &lt;a href="http://www.velocityreviews.com/forums/t317511-binary-constant-macros.html"&gt;Tom Torfs&lt;/a&gt; and included in the sample code that comes with the LCD library -there may be an easier/different way to define the characters, but I did not try...&lt;br /&gt;&lt;br /&gt;Then you load the custom characters into the LCD's memory. The library for the web4robot LCD has a function to load the custom characters. For example, the following call loads custom character 1 into location 1:&lt;br /&gt;&lt;blockquote style="color: rgb(204, 51, 204);"&gt;lcd.load_custom_character(1,cc1);&lt;/blockquote&gt;In order to print custom character 1, the function lcd.write(1) is used. In order to facilitate the printing of the composite larger characters, a "bit map" is created with arrays as follows:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: rgb(204, 51, 204);font-family:trebuchet ms;" &gt;//___________0_____1_____2&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);font-family:trebuchet ms;" &gt;char bn1[]={1,2,1, 3,1,4, 2,2,1,...}&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);font-family:trebuchet ms;" &gt;char bn2[]={1,4,1, 4,1,4, 7,6,5,...}&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 51, 204);font-family:trebuchet ms;" &gt;char bn3[]={1,3,1, 3,1,3, 1,3,3,...}&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;In other words, the number 1 is created by writing custom charters 3,1 and 4 in row 1, custom characters 4,1 and4 in row 2 and custom characters 3,1 and 3 in row 3. The following function does precisely that.&lt;br /&gt;&lt;blockquote style="color: rgb(204, 51, 204);"&gt;void printOneNumber(uint8_t digit)&lt;br /&gt;{&lt;br /&gt; // Print position is hardcoded&lt;br /&gt;&lt;br /&gt; // Line 1 of the one digit number&lt;br /&gt; lcd.setCursor(1,0);&lt;br /&gt; lcd.write(bn1[digit*3]);&lt;br /&gt; lcd.write(bn1[digit*3+1]);&lt;br /&gt; lcd.write(bn1[digit*3+2]);&lt;br /&gt;&lt;br /&gt; // Line 2 of the one-digit number&lt;br /&gt; lcd.setCursor(2,0);&lt;br /&gt; lcd.write(bn2[digit*3]);&lt;br /&gt; lcd.write(bn2[digit*3+1]);&lt;br /&gt; lcd.write(bn2[digit*3+2]);&lt;br /&gt;&lt;br /&gt; // Line 3 of the one-digit number&lt;br /&gt; lcd.setCursor(3,0);&lt;br /&gt; lcd.write(bn3[digit*3]);&lt;br /&gt; lcd.write(bn3[digit*3+1]);&lt;br /&gt; lcd.write(bn3[digit*3+2]);&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;The complete code can be found &lt;a href="http://downloadcode.wordpress.com/2009/05/25/code-for-large-numbers/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4420303461001508551?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4420303461001508551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4420303461001508551' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4420303461001508551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4420303461001508551'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/improved-display.html' title='Arduino LCD Custom Fonts, Large Numbers'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2797370646414040954</id><published>2009-05-21T17:23:00.000-07:00</published><updated>2009-05-21T17:28:28.058-07:00</updated><title type='text'>Bug in Volume Value</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;I miss read the specification and thought volume control resolution was 1/4 dB. The specification says 1/8 dB. Thus rather than having a volume control range of zero to -99 dB, in reality it was only zero to -49.5 dB.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;This is actually "good news" as my normal listening level was in the -50 dB range which in fact was -25 dB. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;As discussed in a previous post, from a theoretical point of view, there is no loss of data for the upper 48 dB volume level. I was wondering why for a passive volume control, -50 dB sounded so "loud"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2797370646414040954?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2797370646414040954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2797370646414040954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2797370646414040954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2797370646414040954'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/bug-in-volume-value.html' title='Bug in Volume Value'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1505323802808588924</id><published>2009-05-20T08:55:00.000-07:00</published><updated>2009-05-20T11:55:10.020-07:00</updated><title type='text'>Installed IR Remote Sensor</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/ShRSBLn_BEI/AAAAAAAADA4/4R76UMMsN4Y/s1600-h/WithRemote.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 277px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/ShRSBLn_BEI/AAAAAAAADA4/4R76UMMsN4Y/s400/WithRemote.JPG" alt="" id="BLOGGER_PHOTO_ID_5337981638594724930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/ShQosT9qxFI/AAAAAAAADAI/EauWorVj5a8/s1600-h/IRSensor.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 279px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/ShQosT9qxFI/AAAAAAAADAI/EauWorVj5a8/s400/IRSensor.JPG" alt="" id="BLOGGER_PHOTO_ID_5337936200079164498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Used a small piece of fiber optic to transmit the IR signal to the inside of the case where the IR sensor is installed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/ShQpnS9P-XI/AAAAAAAADAQ/C0DmDBh9nBw/s1600-h/hifiduinoBack.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 260px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/ShQpnS9P-XI/AAAAAAAADAQ/C0DmDBh9nBw/s400/hifiduinoBack.JPG" alt="" id="BLOGGER_PHOTO_ID_5337937213421255026" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/ShQqRU-OYLI/AAAAAAAADAY/rPM9Qm-I3Hc/s1600-h/IRInside.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 265px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/ShQqRU-OYLI/AAAAAAAADAY/rPM9Qm-I3Hc/s400/IRInside.JPG" alt="" id="BLOGGER_PHOTO_ID_5337937935516721330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1505323802808588924?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1505323802808588924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1505323802808588924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1505323802808588924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1505323802808588924'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/installed-ir-remote-sensor_20.html' title='Installed IR Remote Sensor'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShRSBLn_BEI/AAAAAAAADA4/4R76UMMsN4Y/s72-c/WithRemote.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-8023878015993171160</id><published>2009-05-16T13:46:00.001-07:00</published><updated>2010-05-05T12:35:30.061-07:00</updated><title type='text'>Simplest Arduino Sony Remote Code</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sg82RJBhjwI/AAAAAAAAC_A/CDoVR5FJP-s/s1600-h/DSC_0189.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" style="font-family: trebuchet ms;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5336543751565315842" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sg82RJBhjwI/AAAAAAAAC_A/CDoVR5FJP-s/s400/DSC_0189.JPG" style="cursor: pointer; height: 247px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Following the example indicated in the previous post, I've modified the remote control code to a simpler version. I've deleted all the error checking because the code only acts upon a valid code (uses a switch statement) thus if a code is invalid, nothing will be done and therefore the error checking is not necessary. Just like before, it is interrupt driven.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The Sony TV remote protocol is the simplest to program because we only need to detect the start pulse and then determine if the length of the next 12 pulses (13 pulses total).&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-family: trebuchet ms;"&gt;&lt;li&gt;The pulses are only measured while low&lt;/li&gt;&lt;li&gt;The first pulse, the start pulse, lasts about 2.4 ms (2400 microseconds)&lt;/li&gt;&lt;li&gt;The following pulses are 1.2 ms (1200 microseconds) for a 1, 0.6 ms (600 microseconds) for a 0&lt;/li&gt;&lt;li&gt;Each data pulse is about 0.3 ms (300 microseconds) apart&lt;/li&gt;&lt;li&gt;Every set of 13 pulses is about 20-30 ms apart from each other, repeating when a button is held down&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: trebuchet ms;"&gt;The code below will watch for a 13 pulse set and returns the set's integer equivalent,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The interrupt service routine is very simple. The remote signal is connected to pin 3 (which in Arduino is interrupt 1). When there is a pulse, an interrupt is generated and the service routine sets a flag:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="color: #cc33cc; font-family: trebuchet ms;"&gt;void remoting()  // The ISR&lt;br /&gt;{&lt;br /&gt;remoteOn=1;&lt;br /&gt;}&lt;/blockquote&gt;&lt;span style="font-family: trebuchet ms;"&gt;And in the setup portion of the Arduino code, the interrupt routine is attached:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="color: #cc33cc; font-family: trebuchet ms;"&gt;attachInterrupt (1, remoting, FALLING);&lt;/blockquote&gt;&lt;span style="font-family: trebuchet ms;"&gt;We detect the FALLING edge of the pulse because the pulses pull down. Once the flat is set (indicating that there is remote control signals, we proceed to detect and decode the pulses with the following code:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-family: trebuchet ms;"&gt;&lt;pre&gt;&lt;span style="color: #996600;"&gt;int&lt;/span&gt; getIRKey() {&lt;br /&gt;  &lt;span style="color: #996600;"&gt;int&lt;/span&gt; duration=1;&lt;br /&gt;  &lt;span style="color: #996600;"&gt;int&lt;/span&gt; result=0;&lt;br /&gt;  &lt;span style="color: #cc6600;"&gt;while&lt;/span&gt;((duration=&lt;span style="color: #996600;"&gt;pulseIn&lt;/span&gt;(IRPIN, &lt;span style="color: #cc0000;"&gt;LOW&lt;/span&gt;, 50000)) &amp;lt; 2200 &amp;amp;&amp;amp; duration!=0)&lt;br /&gt;  {&lt;br /&gt;    &lt;span style="color: #777755;"&gt;//do nothing waiting for start pulse&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: #996600;"&gt;int&lt;/span&gt; mask = 1;        &lt;span style="color: #777755;"&gt;// set mask to bit 0&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #cc6600;"&gt;for&lt;/span&gt; (&lt;span style="color: #996600;"&gt;int&lt;/span&gt; idx = 0; idx &amp;lt; 12; idx++)     &lt;span style="color: #777755;"&gt;// get all 12 bits&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;    duration = &lt;span style="color: #996600;"&gt;pulseIn&lt;/span&gt;(IRPIN, &lt;span style="color: #cc0000;"&gt;LOW&lt;/span&gt;, 2000);   &lt;span style="color: #777755;"&gt;// measure the bit pulse&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (duration &amp;gt; ONEPULSE)      &lt;span style="color: #777755;"&gt;// 1 bit?&lt;/span&gt;&lt;br /&gt; result |= mask;       &lt;span style="color: #777755;"&gt;// yes, update ir code&lt;/span&gt;&lt;br /&gt;    mask &amp;lt;&amp;lt;= 1;        &lt;span style="color: #777755;"&gt;// shift mask to next bit&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; result;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-family: trebuchet ms;"&gt;The while loop waits for the start pulse, however when there is no start pulse and we are still inside this loop, we need a way to exit this loop. We use the duration!=0 condition.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;In the main remote loop we detect the pulses and perform the functions specified by the codes as follows:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="color: #cc33cc; font-family: trebuchet ms;"&gt;while (remoteOn==1)&lt;br /&gt;{&lt;br /&gt;int key = getIRKey();            //Fetch the key&lt;br /&gt;&lt;br /&gt;// Interpret the keys and do something: increase volume, etc&lt;br /&gt;// I use a switch statement&lt;br /&gt;&lt;br /&gt;delay (30);&lt;br /&gt;remoteOn=0;  //reset flag&lt;br /&gt;}&lt;/blockquote&gt;&lt;span style="font-family: trebuchet ms;"&gt;I found that I needed some delay to get rid of "spurious interrupts" (interrupts that resulted in invalid code). You may or may not need this delay. Invalid code are innocuous because they are ignored in the switch statement.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Note: some parts of the code is missing. Please see the full code from the link above. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-8023878015993171160?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/8023878015993171160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=8023878015993171160' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8023878015993171160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8023878015993171160'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/modified-remote-code.html' title='Simplest Arduino Sony Remote Code'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/Sg82RJBhjwI/AAAAAAAAC_A/CDoVR5FJP-s/s72-c/DSC_0189.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-6579115964546310817</id><published>2009-05-15T11:14:00.001-07:00</published><updated>2009-05-20T11:30:56.520-07:00</updated><title type='text'>Simpler Arduino Sony Remote Code</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Found and even simpler code for Sony Remote: &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1196401210/3#3"&gt;link&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The only modification required is for the do while loop that waits for the start pulse to break out when pulseIn() times out.&lt;/span&gt;&lt;code style="font-family: trebuchet ms;"&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-6579115964546310817?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/6579115964546310817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=6579115964546310817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6579115964546310817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6579115964546310817'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/simpler-sony-remote-code.html' title='Simpler Arduino Sony Remote Code'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5971284337699051610</id><published>2009-05-13T08:00:00.000-07:00</published><updated>2009-05-13T18:39:12.686-07:00</updated><title type='text'>Digital Volume Control</title><content type='html'>&lt;span style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt;One of the features enabled by Arduino is Digital Volume Control. The DAC can control volume through its software interface.&lt;br /&gt;&lt;br /&gt;In audio, the function of a preamplifier is really just to attenuate its volume (in the post vinyl era) but modern DACs are beginning to do that in the digital domain without sacrificing any sonic detail throughout most of the volume scale. Wadia has a &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.wadia.com/technology/technicalpapers/Digital_Volume_Control_2.pdf"&gt;good paper&lt;/a&gt;&lt;span style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt; explaining how this works. To summarize, every 6 dB of attenuation is equivalent of reducing resolution by 1 bit. With 24-bit DACs and 16-bit content (CD content is 16-bit), 8-bits of resolution can be "thrown away" before affecting the data. Therefore with the Wolfson DAC, 48 dB of attenuation is achievable without whatsover impacting the data.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt;I have implemented the volume control from 0 to 99 dB attenuation. This means that down to -48 dB, the original data is completely retained, and in theory you will start loosing some resolution below this volume level. In practice, CDs have resolution only up to 14-15 bits and therefore there is virtually no loss of fidelity down to -54dB to -60dB of volume attenuation.&lt;/span&gt;  &lt;span style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt;&lt;br /&gt;&lt;br /&gt;PS Audio explains the advantages of controlling the volume in the digital domain in this &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.psaudio.com/ps/forum/viewthread/202/#1099"&gt;post&lt;/a&gt;&lt;span style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt;. According to Paul McGowan, &lt;/span&gt; &lt;blockquote style="font-family: trebuchet ms;"&gt;"The rub (with the digital volume control) comes in when we listen to high resolution 24 bit audio,  In this case, we are indeed losing some of the bits when we use the control.  However, I still prefer using this straight into the power amp vs. a preamp.  This is because those last few bits are so far down into the noise area of the system I don’t know if anyone can hear them.  Indeed, theoretically this is hampering the dynamic range and losing some of the advantage of the higher bit rates, but from a practical standpoint it doesn’t seem to matter - or if it does, I can’t hear it.  Maybe others can."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5971284337699051610?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5971284337699051610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5971284337699051610' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5971284337699051610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5971284337699051610'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/digital-volume-control.html' title='Digital Volume Control'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4401359528290209358</id><published>2009-05-11T19:01:00.000-07:00</published><updated>2009-05-14T09:45:39.776-07:00</updated><title type='text'>Apodizing vs Non-Apodizing</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/Sgh1-_Kfj3I/AAAAAAAAC8Q/essSOlbQMtQ/s1600-h/filter2-4.jpg"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/Sgh1-_Kfj3I/AAAAAAAAC8Q/essSOlbQMtQ/s400/filter2-4.jpg" border="0" /&gt;&lt;/a&gt;&lt;div style="clear: both;"&gt;I've interposed the filter response diagrams of the WM8741 DAC found in the data sheet. Indeed, the Apodizing filter has a sharper roll-off than the "soft-knee" filter. Both filters are minimum phase, (thus eliminating the pre-ringing), but the Apodizing removes aliasing distortion and the soft-knee reduces post ringing. Conceptually, Ayre is a proponent of the minimum phase soft-knee filter whereas Meridian is a proponent of the minimum phase apodizing filter. Which one is "better". I think Wolfson was wise to include different filters as there is no consensus about which filter is "better.&lt;br /&gt;&lt;br /&gt;Here is a comment  from the &lt;a href="http://www.meridianunplugged.com/ubbthreads/ubbthreads.php?ubb=showflat&amp;amp;Number=91419#Post91419"&gt;Meridian Forums&lt;/a&gt; by user scottb:&lt;br /&gt;&lt;span id="body7"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span id="body7"&gt;The discussion of eliminating artifacts from the original A/D conversion is not a function of apodising filters per se, but rather a function of the specific filter parameters chosen. Peter Craven, when he originally proposed minimum phase filters, also proposed that the filter should roll off very steeply after 20 khz, more steeply even than the usual filters applied at the A/D and D/A conversion. That way, any ringing from the A/D conversion process would be filtered out, albeit at the expense of considerable post-ringing and phase shift from the apodising filter itself - which shows up in JA's measurements. [Note: This is from &lt;a href="http://www.stereophile.com/cdplayers/meridian_8082808i2_signature_reference_cd_playerpreamplifier/index.html"&gt;Stereophile&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;By contrast, the Ayre white paper I've mentioned frequently before claims that their implementation sounds better with quite gentle filter slopes, which will obviously allow more ringing from A/D conversion to get through, as well as more aliasing distortion, but will create much less post-ringing from the minimum phase filter. &lt;span style="color: rgb(255, 0, 0);"&gt;That's a pretty interesting disagreement between the ears of two of the best digital audio designers in the business&lt;/span&gt;, and JA's evaluation of the new Ayre MP filter will bear watching.&lt;br /&gt;&lt;br /&gt;BTW, you must upsample to do apodising, or any digital anti-aliasing filtering, because the filter knee is so close to the Nyquist frequency. Whether you speak of the filtering being applied after upsampling, or as part of the upsampling process, is really a matter of semantics. From the perspective of upsampling the original digital signal, you must upsample in order to filter, and you must filter if you upsample.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4401359528290209358?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4401359528290209358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4401359528290209358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4401359528290209358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4401359528290209358'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/apodizing-vs-non-apodizing.html' title='Apodizing vs Non-Apodizing'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/Sgh1-_Kfj3I/AAAAAAAAC8Q/essSOlbQMtQ/s72-c/filter2-4.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2706932418502556702</id><published>2009-05-09T19:05:00.000-07:00</published><updated>2009-05-11T10:15:17.368-07:00</updated><title type='text'>WM8741 Digital Filters</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;One of the reasons I embarked to use Arduino to control the WM8741 DAC was because certain digital filters are only available thought the s/w interface. I've done some additional reading about these filters.&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;  &lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;The DAC has the following 5 selectable filters. The names of these filters are mentioned in a &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.wolfsonmicro.com/uploads/documents/en/Ultra_High_Performance_DAC_whitepaper.pdf"&gt;white paper&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt; and in the data sheet of the new &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.wolfsonmicro.com/uploads/documents/en/WM8742_Rev4.0.pdf"&gt;WM8742&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt;. (The 8742, however seems to be a cost-efficient version of the older WM8741 which is spec'ed as having better signal to noise ratio). These filters are:&lt;/span&gt;&lt;ol style="font-family: trebuchet ms;"&gt;&lt;li&gt;Linear phase ‘soft knee filter’&lt;/li&gt;&lt;li&gt;Minimum phase ‘soft knee filter’&lt;/li&gt;&lt;li&gt;Linear phase brickwall filter&lt;/li&gt;&lt;li&gt;Minimum phase apodising filter&lt;/li&gt;&lt;li&gt;Linear phase apodising filter&lt;/li&gt;&lt;/ol&gt;&lt;p style="font-family: trebuchet ms;"&gt;Filter #3, the linear phase brickwall filter is the traditional/historical filter for digital audio. It is a steep filter right after 20 KHz and has been shown to produce a lot of pre and post ringing from an inpulse response. Wolfson indicates that this filter is to be used with other filters (from other components such as DSP chips) in the digital audio path.  Filter #1 is the "slow roll off" filter that more modern DACs and CD players have used to remove some of the "digital hash" that have been observed in the past. The slow roll off filter reduces both the pre and post ringing of an impulse response. These two filters brickwall or fast roll-off and soft knee or slow roll-off have been the mainstay of digital audio reproduction for all these years.&lt;/p&gt;&lt;p style="font-family: trebuchet ms;"&gt;Filter #2 is a new kind of digital filter. Whereas in the past audio engineers have insisted in phase linearity (meaning all frequencies have equal phase or delay), More recent research have shown that a "minimum phase" filter sacrifices some of the phase linearity (adds some phase distortion) for better time response. Specifically, minimum phase filters minimizes the pre-ringing of an impulse response. Audio researchers have argued that pre-ringing is an un-natural effect and therefore the ear is more sensitive to this kind of distortion. They have also argued that phase distortion is not very audible. This filter also incorporates soft-knee or slow roll-off and this reduces post ringing as well. The properties of this filter are similar to the "&lt;a href="http://www.ayre.com/PDF/Ayre_MP_White_Paper.pdf"&gt;MP filter&lt;/a&gt;" found in Ayres latest CD player.&lt;/p&gt;&lt;p style="font-family: trebuchet ms;"&gt;Here is a diagram depicting the impulse response in a linear phase filter and a minimum phase filter.&lt;/p&gt;&lt;p style="font-family: trebuchet ms;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SgYt1s_zdxI/AAAAAAAAC7I/FxuXGqcgUNo/s1600-h/filters1.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 313px;" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SgYt1s_zdxI/AAAAAAAAC7I/FxuXGqcgUNo/s400/filters1.jpg" alt="" id="BLOGGER_PHOTO_ID_5334001209302021906" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="font-family: trebuchet ms;"&gt;According to the &lt;a href="http://www.ayre.com/PDF/Ayre_MP_White_Paper.pdf"&gt;Ayre white paper&lt;/a&gt;, adding the properties of slow roll-off filter to the minimum phase filter will decrease the post ringing, resulting in something like this:&lt;/p&gt;&lt;p style="font-family: trebuchet ms;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SgYxxsD-pmI/AAAAAAAAC7Q/8Ld5OHpQWkA/s1600-h/filters2.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 317px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SgYxxsD-pmI/AAAAAAAAC7Q/8Ld5OHpQWkA/s400/filters2.jpg" alt="" id="BLOGGER_PHOTO_ID_5334005538378131042" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="font-family: trebuchet ms;"&gt;Note that the axis are different, but in relation ot the first diagram, the second diagram shows no pre-ringing and much reduced post-ringing.&lt;/p&gt;&lt;p style="font-family: trebuchet ms;"&gt;Conceptually, the Wolfson Minimum Phase soft-knee filter is the equivalent of Ayre's MP listen filter. Obviously the implementation is different and the relative quality of these filters have not been evaluated.&lt;/p&gt; &lt;p style="font-family: trebuchet ms;"&gt; &lt;/p&gt;&lt;span style="font-family:trebuchet ms;"&gt;Filter 4 and 5 are only available through&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt; the s/w interface. "Apodising" ("Apodizing" in American English) filters have been equated to minimum phase filters and minimum phase filters with slow roll-off in the literature. But as the name of the filters in the Wofson DAC suggests, "apodizing" is an additional filter technique to that provided by minimum phase soft-knee.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The use of slow roll-off filters allows some of the higher frequency (beyond the Nyquist frequency) energy to be reflected back into the audio band. This is known as "aliasing" an is a source of distortion. An apodizing filter according to the Wolfson white paper, is one where the filter fully attenuates by Fs/2 (the Nyquist frequency) and thus they start attenuating earlier than Fs/2 often sacrificing flat requency response to 20KHz.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SgY_5CvMnSI/AAAAAAAAC7Y/2Bc6Y7CQg7c/s1600-h/filters3.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 269px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SgY_5CvMnSI/AAAAAAAAC7Y/2Bc6Y7CQg7c/s400/filters3.jpg" alt="" id="BLOGGER_PHOTO_ID_5334021057886854434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Filter #4 appears to combine the best qualities of these filters. "Minimum phase apodizing" signifies that pre-ringing is eliminiated, post-ringing reduced and aliasing distortion eliminated. As the Wolfson white paper indicates, no one filter is the perfect filter but a designer hopes to makes the best trade offs by using multiple filters.&lt;br /&gt;&lt;br /&gt;Conceptually Filter #4, minimum phase apodizing filter, is what Meridian is using in their &lt;a href="http://stereophile.com/cdplayers/meridian_8082808i2_signature_reference_cd_playerpreamplifier/"&gt;latest CD player&lt;/a&gt;. &lt;/span&gt;Obviously the implementation is different and the relative quality of these filters have not been evaluated.&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2706932418502556702?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2706932418502556702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2706932418502556702' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2706932418502556702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2706932418502556702'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/wm8741-digital-filters.html' title='WM8741 Digital Filters'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SgYt1s_zdxI/AAAAAAAAC7I/FxuXGqcgUNo/s72-c/filters1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3210003337435976064</id><published>2009-05-09T15:21:00.000-07:00</published><updated>2009-05-11T10:12:43.249-07:00</updated><title type='text'>Get started with just a few bucks</title><content type='html'>&lt;span style=";font-family:trebuchet ms;font-size:100%;"  &gt;Great Deal on Arduino compatible Seeeduino. &lt;a href="http://www.nkcelectronics.com/seeeduino-fully-assembled--arduino-compatible.html"&gt;$16 from NKC electronics&lt;/a&gt;. Although using the "old" Atmel 168, there is plenty of room for all the code to control the OPUS DAC and more.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SgYB-c3uJsI/AAAAAAAAC6Q/IhrtA1lMePM/s1600-h/3464203683_620d6f4264_b.jpg"&gt;&lt;img alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SgYB-c3uJsI/AAAAAAAAC6Q/IhrtA1lMePM/s400/3464203683_620d6f4264_b.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I wish I was associated with NKC :-)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3210003337435976064?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3210003337435976064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3210003337435976064' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3210003337435976064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3210003337435976064'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/get-started-with-just-few-bucks.html' title='Get started with just a few bucks'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SgYB-c3uJsI/AAAAAAAAC6Q/IhrtA1lMePM/s72-c/3464203683_620d6f4264_b.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2331242239719404817</id><published>2009-05-09T13:26:00.000-07:00</published><updated>2009-05-09T13:44:03.058-07:00</updated><title type='text'>Almost There...</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SgXnF9ujoRI/AAAAAAAAC5w/Cwqjc5mKZ9I/s1600-h/DSC_0183.JPG"&gt;&lt;img border="0" alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SgXnF9ujoRI/AAAAAAAAC5w/Cwqjc5mKZ9I/s400/DSC_0183.JPG" /&gt;&lt;/a&gt; &lt;div style="CLEAR: both"&gt;&lt;/div&gt;&lt;div style="CLEAR: both"&gt;&lt;span style="font-family:trebuchet ms;"&gt;With a little polish and oil, the richess of the wood delights the eye. Cast-aluminum parts of old HDDs add to the solidness of the case. Crowned with a polished solid aluminum knob, it begs to be caressed... :-)&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2331242239719404817?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2331242239719404817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2331242239719404817' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2331242239719404817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2331242239719404817'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/blog-post_09.html' title='Almost There...'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SgXnF9ujoRI/AAAAAAAAC5w/Cwqjc5mKZ9I/s72-c/DSC_0183.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-8375746941705197584</id><published>2009-05-09T09:55:00.000-07:00</published><updated>2009-05-10T22:14:10.837-07:00</updated><title type='text'>Coming Along</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SgW1bclha-I/AAAAAAAAC5o/-Z3A_MxSAMM/s1600-h/DSC_0179.JPG"&gt;&lt;img alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SgW1bclha-I/AAAAAAAAC5o/-Z3A_MxSAMM/s400/DSC_0179.JPG" border="0" /&gt;&lt;/a&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt;Bought a piece of African &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.rockler.com/product.cfm?page=18558"&gt;Padauk&lt;/a&gt;&lt;span style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt; hardwood from Rockler...&lt;/span&gt;&lt;span style="font-family: trebuchet ms;"&gt; Enclosing Arduino in exotic hardwood improves the sound :-). Edit: it is actually "&lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.rockler.com/product.cfm?page=18561&amp;amp;filter=bubing"&gt;Bubinga&lt;/a&gt;&lt;span style="font-family: trebuchet ms;"&gt;" or African Rosewood&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-8375746941705197584?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/8375746941705197584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=8375746941705197584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8375746941705197584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8375746941705197584'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/coming-along.html' title='Coming Along'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SgW1bclha-I/AAAAAAAAC5o/-Z3A_MxSAMM/s72-c/DSC_0179.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-6711662819341937188</id><published>2009-05-06T08:15:00.000-07:00</published><updated>2009-05-07T22:56:24.533-07:00</updated><title type='text'>Improving Responsiveness of Rotary Encoder</title><content type='html'>&lt;div style="clear: both;"&gt;The rotary encoder was behaving a little flaky. After doing some research I found that this is a common complaint. All mechanical encoders do have noise in their transitions. Since I was using an interrupt routine to detect motion and direction, I was experiencing multiple interrupts within one transition. After some experimentation, I figured I was sometimes getting 3 interrupts within one transition, so that the volume was increased, decreased and increased resulting in no change.&lt;br /&gt;&lt;br /&gt;One solution was to write "debouncing" software to ignore spurious transitions. However the software solutions and code examples I found were a little too complicated to my liking and understanding. Adding simple delays in the software in the hope of ignoring the spurious transitions did not solve the problem, and in fact adding too much delay in the hope of masking the spurious interrupts caused the rotary encoder to be somewhat  irresponsive.&lt;br /&gt;&lt;br /&gt;After some research in the web, I decided then to add capacitors between the A, B terminals and Gnd. At first adding .1 uF did not seem to solve the problem, but it appeared that there was some small improvements. But adding an additional .01 uF solved the problem. I can't explain why adding a smaller value capacitor would solve the problem, since it is expected that larger values are better at smoothing the transitions. But it worked.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SgGpgyNNVnI/AAAAAAAAC4Y/edOuyB-mHyE/s1600-h/DSC_0172.JPG"&gt;&lt;img alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SgGpgyNNVnI/AAAAAAAAC4Y/edOuyB-mHyE/s400/DSC_0172.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;The 103 capacitors are .01 uF. The blue capacitors are 104 (.1 uF)&lt;/span&gt;. They are installed between terminals A-GND and B-GND.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-6711662819341937188?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/6711662819341937188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=6711662819341937188' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6711662819341937188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6711662819341937188'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/blog-post_06.html' title='Improving Responsiveness of Rotary Encoder'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SgGpgyNNVnI/AAAAAAAAC4Y/edOuyB-mHyE/s72-c/DSC_0172.JPG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5770137831475845080</id><published>2009-05-02T12:28:00.000-07:00</published><updated>2009-05-02T16:43:15.990-07:00</updated><title type='text'>Two Modules Together</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sfye--dCkXI/AAAAAAAAC2U/n7hhEeegE0Y/s1600-h/DSC_0157.JPG"&gt;&lt;img border="0" alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sfye--dCkXI/AAAAAAAAC2U/n7hhEeegE0Y/s400/DSC_0157.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I salvaged (from ethernet routers) some surface mount LEDs for the Tx/Rx. Yellow and Green. The Freeduino board does not have the automatic power selector, I replaced the jumpers with a switch. In order to reuse the traces in the red board, I've had to reroute certain signals and cut a couple of traces.&lt;/span&gt;&lt;span style="TEXT-DECORATION: underline"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5770137831475845080?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5770137831475845080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5770137831475845080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5770137831475845080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5770137831475845080'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/two-modules-together.html' title='Two Modules Together'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/Sfye--dCkXI/AAAAAAAAC2U/n7hhEeegE0Y/s72-c/DSC_0157.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2667717798043815195</id><published>2009-05-02T12:03:00.000-07:00</published><updated>2009-05-02T12:04:33.476-07:00</updated><title type='text'>Completed and Tested</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SfyY9vDjdrI/AAAAAAAAC2M/Ar5i0Qa9iAM/s1600-h/DSC_0163.JPG"&gt;&lt;img alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SfyY9vDjdrI/AAAAAAAAC2M/Ar5i0Qa9iAM/s400/DSC_0163.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The "shield" handles the external 8V power and routes it to the Vin pin to feed the Freeduino. The small green PC board is the 3.3V level shifter for I2C. The pins in the back are 3 sets of power pins (5V). The diode/resistor is for the 8V line. The blue capacitor is for the 3.3V supply for the 3.3V levels in the level shifter. The small blue cap is for noise bypass for the 8V line.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2667717798043815195?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2667717798043815195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2667717798043815195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2667717798043815195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2667717798043815195'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/05/completed-and-tested.html' title='Completed and Tested'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SfyY9vDjdrI/AAAAAAAAC2M/Ar5i0Qa9iAM/s72-c/DSC_0163.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4679574900848969619</id><published>2009-04-29T08:27:00.000-07:00</published><updated>2009-04-29T08:30:57.728-07:00</updated><title type='text'>Building a Freeduino</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sfhx1Haj30I/AAAAAAAAC1k/qFr4jw4bfsE/s1600-h/DSC_0149.JPG"&gt;&lt;img alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sfhx1Haj30I/AAAAAAAAC1k/qFr4jw4bfsE/s400/DSC_0149.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I'm builing a Freeduino but making some modifications. The red shield will be permanently placed in a box and will have all the connections to the LCD, the DAC, the rotary encoder, etc. It will also get the DC power and male headers facing up.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I'm building the Freeduino with the female headers facing down so that I can plug it into the shield and take it off to program. I've changed the capacitors for "audiophile" components just for fun :-), and added a switch to select the power (USB or External). The red shield is an old Arduino design and it lacks the 3.3V pin (which is needed for the 3.3 I2C). I would recommend a Freeduino bare-board instead. But it was an easy fix. (just drilling a couple of holes)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;Here is a picture of the two modules stacked.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SfhyKje7lII/AAAAAAAAC1s/dSeMP7CTzAg/s1600-h/DSC_0152.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 296px;" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SfhyKje7lII/AAAAAAAAC1s/dSeMP7CTzAg/s400/DSC_0152.JPG" alt="" id="BLOGGER_PHOTO_ID_5330135684642215042" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4679574900848969619?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4679574900848969619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4679574900848969619' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4679574900848969619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4679574900848969619'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/building-freeduino_29.html' title='Building a Freeduino'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/Sfhx1Haj30I/AAAAAAAAC1k/qFr4jw4bfsE/s72-c/DSC_0149.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4327219907940232701</id><published>2009-04-27T14:40:00.000-07:00</published><updated>2009-04-27T14:42:30.508-07:00</updated><title type='text'>Wolfson Parts are NOT 5V Tolerant</title><content type='html'>Got a response from Woflson and they said that the &lt;span style="font-weight: bold;"&gt;DAC is NOT 5V tolerant&lt;/span&gt;. Thus you must implement the level shifter solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4327219907940232701?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4327219907940232701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4327219907940232701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4327219907940232701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4327219907940232701'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/wolfson-parts-are-not-5v-tolerant.html' title='Wolfson Parts are NOT 5V Tolerant'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4712692119991960517</id><published>2009-04-25T22:51:00.000-07:00</published><updated>2009-04-25T22:54:50.696-07:00</updated><title type='text'>Remote is pretty Cool</title><content type='html'>Having been without a remote for quite a while (DIY audio equipment), it is pretty nice to have remote...  I've integrated the remote code and have enabled remote volume and remote filter selection. The remote change is pretty fast, so there is no need for a 10x volume change speed as it is plenty fast already. The filter selection is by pressing a number. I've also posted the code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4712692119991960517?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4712692119991960517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4712692119991960517' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4712692119991960517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4712692119991960517'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/remote-is-pretty-cool.html' title='Remote is pretty Cool'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-106294348521677401</id><published>2009-04-25T00:16:00.000-07:00</published><updated>2009-04-25T00:23:29.999-07:00</updated><title type='text'>Implemented 5V to 3.3V I2C level Shifting</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;Implemented the circuit with the two MOSFETs (page 10 of this &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an97055.pdf"&gt;application note&lt;/a&gt;&lt;span style="font-family:trebuchet ms;"&gt;). The opto isolator has to be ordered from Digikey and that will take a while. I couldn't find MOSfets at the local electronic shop so I cut a piece out of a junk board, removed all the components around the transistors and rewired it (so ignore the white drawing in the board). The MOSfets threshold voltage are nominal 2V which is on the high side of the specified components, but it works. The 5V side measures at 5V and the 3.3V side measures 3.3V.&lt;br /&gt;&lt;br /&gt;The 5V i2c connects to the LCD and the 3.3v connects to the DAC. Now I have piece of mind. &lt;/span&gt;The pull-up resistors for the 5V side are back to 5V.&lt;span style="font-family:trebuchet ms;"&gt; Thanks to PJotr who alerted me.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SfK4z3FU-wI/AAAAAAAACx0/YvPwsUHaEBY/s1600-h/DSC_0146.JPG"&gt;&lt;img alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SfK4z3FU-wI/AAAAAAAACx0/YvPwsUHaEBY/s400/DSC_0146.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-106294348521677401?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/106294348521677401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=106294348521677401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/106294348521677401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/106294348521677401'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/implemented-5v-to-33v-i2c.html' title='Implemented 5V to 3.3V I2C level Shifting'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SfK4z3FU-wI/AAAAAAAACx0/YvPwsUHaEBY/s72-c/DSC_0146.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-287724715388389170</id><published>2009-04-24T10:41:00.000-07:00</published><updated>2009-04-24T10:43:10.266-07:00</updated><title type='text'>Best Solution for Level Shifting</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;It seems that the best solution to level shift the i2c lines, especially for high-end audio, is the &lt;a href="http://hifiduino.blogspot.com/2009/03/opto-isolation-for-i2c.html"&gt;optoisolator I was reading about&lt;/a&gt;. Not only enables the 5v-3.3v level shifting, but provides noise isolation preventing any potential high frequency noise from entering the DAC through the wires. This is what the data sheet shows&lt;/span&gt;. Vdd1 would be 5V and Vdd2 3.3V.&lt;br /&gt;&lt;br /&gt; &lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SfH5yc-1pDI/AAAAAAAACws/kLWo3e_jZf4/s1600-h/optoisolator.jpg"&gt;&lt;img alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SfH5yc-1pDI/AAAAAAAACws/kLWo3e_jZf4/s400/optoisolator.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-287724715388389170?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/287724715388389170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=287724715388389170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/287724715388389170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/287724715388389170'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/best-solution-for-level-shifting.html' title='Best Solution for Level Shifting'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SfH5yc-1pDI/AAAAAAAACws/kLWo3e_jZf4/s72-c/optoisolator.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3681699207529618107</id><published>2009-04-24T00:02:00.000-07:00</published><updated>2009-04-24T15:38:48.286-07:00</updated><title type='text'>5V to 3.3V</title><content type='html'>I've made the change from 5V to 3.3V as shown in the picture. A reader alerted me to this oversight. However, it is not that simple. Discussion &lt;a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1240552337"&gt;here&lt;/a&gt;. The internal pull-up resistors are enabled by default. Thus when i measure the I2C pins, they still measure 4.5v. A simple solution is to add a resistor (1K) between the 5V and the 3.3V lines&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SfFkEDsFXCI/AAAAAAAACwM/u81kwaBg82A/s1600-h/DSC_0143.JPG"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SfFkEDsFXCI/AAAAAAAACwM/u81kwaBg82A/s400/DSC_0143.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The correct way to support both 3.3v devices and 5v devices is specified in this &lt;a href="http://www.nxp.com/products/interface_control/i2c/facts/#levelshifting"&gt;document&lt;/a&gt; as follows:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.nxp.com/products/interface_control/i2c/facts/images/mgk879.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 157px;" src="http://www.nxp.com/products/interface_control/i2c/facts/images/mgk879.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;"The simple addition of two low-cost transistors, placed between the different voltage level sections of the I²C-bus, separates and transfers the logic voltage levels of the bus lines on either side of the level-shifter."  More info in this &lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an97055.pdf"&gt;application note&lt;/a&gt;, and &lt;a href="http://delphys.net/d.holmes/hardware/levelshift.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Yet another solution is to use bus buffer as specified in the &lt;a href="http://www.fiveco.com/datafiles/support/tcp/AN/AN003.pdf"&gt;application note&lt;/a&gt;:&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SfI_I9Q9eqI/AAAAAAAACxU/dHeKP1CNgXI/s1600-h/i2cBuffer.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 184px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SfI_I9Q9eqI/AAAAAAAACxU/dHeKP1CNgXI/s400/i2cBuffer.jpg" alt="" id="BLOGGER_PHOTO_ID_5328390732249922210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3681699207529618107?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3681699207529618107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3681699207529618107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3681699207529618107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3681699207529618107'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/5v-to-33v.html' title='5V to 3.3V'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SfFkEDsFXCI/AAAAAAAACwM/u81kwaBg82A/s72-c/DSC_0143.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3638665107274201144</id><published>2009-04-23T22:30:00.000-07:00</published><updated>2009-04-27T14:39:34.926-07:00</updated><title type='text'>WARNING! WARNING!</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;I've been using 5V I2C into OPUS which is a 3.3V device. So far it has worked, but I am going to find out from Wolfson if the device is 5V tolerant.  However, I think it is safer to use the pull-up resistors referenced to 3.3V instead of the 5V. The 3.3V reference in Arduino can supply 50 mA. I'm going to check if this is sufficient. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;Update: I've attempted to make the change to 3.3V (by changing the position of the pull-up resistors) and although everything works as before it is not yet the right solution because Arduino enables the pull up resistors internally. See post on &lt;a href="http://hifiduino.blogspot.com/2009/04/implemented-5v-to-33v-i2c.html"&gt;final solution&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3638665107274201144?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3638665107274201144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3638665107274201144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3638665107274201144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3638665107274201144'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/warning-warning.html' title='WARNING! WARNING!'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4169163502886937985</id><published>2009-04-22T23:32:00.000-07:00</published><updated>2009-04-25T20:50:27.504-07:00</updated><title type='text'>Modified IR receiver</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SfALiyRRbZI/AAAAAAAACvs/misKgOII2pE/s1600-h/DSC_0142.JPG"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SfALiyRRbZI/AAAAAAAACvs/misKgOII2pE/s400/DSC_0142.JPG" border="0" /&gt;&lt;/a&gt;&lt;div style="clear: both;"&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;I removed the resistor from the output pin of the IR receiver to the Arduino input pin. After reading some data sheets, what is recommended is a pull-up resistor to VDD. Since Arduino pins have built-in pull-up resistors, I enabled it in software.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4169163502886937985?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4169163502886937985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4169163502886937985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4169163502886937985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4169163502886937985'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/modified-ir-receiver.html' title='Modified IR receiver'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/SfALiyRRbZI/AAAAAAAACvs/misKgOII2pE/s72-c/DSC_0142.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-7226187430555950914</id><published>2009-04-22T23:03:00.000-07:00</published><updated>2009-04-22T23:35:22.627-07:00</updated><title type='text'>Got the IR software to work, finally</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;The IR remote code I got from the Arduino forums worked great as a standalone application, but not too well with other applications sharing the main loop. After some modifications, I finally got it to work. I posted it in its original thread (see the post below). Now I am ready to integrate it with the rest of my code. Plan to implement the following remote functions:&lt;/span&gt;&lt;br /&gt;&lt;ol style="font-family: trebuchet ms;"&gt;&lt;li&gt;1X volume control&lt;/li&gt;&lt;li&gt;10X volume control (the remote has lots of keys)&lt;/li&gt;&lt;li&gt;"dim"/"undim" (mute)&lt;/li&gt;&lt;li&gt;Direct filter selection (select 1, 2, 3, 4, 5)&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-7226187430555950914?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/7226187430555950914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=7226187430555950914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7226187430555950914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7226187430555950914'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/got-ir-software-to-work-finally.html' title='Got the IR software to work, finally'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-8361112038542506240</id><published>2009-04-19T22:33:00.000-07:00</published><updated>2010-03-02T13:32:51.483-08:00</updated><title type='text'>Adding Remote Control</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;Here is the standard 3-pin IR Receiver. right pin to 5V through a 150 ohm resistor, middle pin to GND, Capacitor between 5V and GND. And left pin to Arduino digital input through 150 ohm resistor. The first resistor and capacitor are for noise suppression. The resistor for left pin I'm not sure what it is for, but the code I used, specified it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Update: the 150 ohm resistor on the left pin to Arduino digital input is not needed because it is a pull-up resistor and you can enable the built-in pull up resistor in Arduino. More &lt;a href="http://hifiduino.blogspot.com/2009/04/modified-ir-receiver.html"&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;The IR receiver module I used is the &lt;a href="http://www.mouser.com/ProductDetail/Vishay-Semiconductors/TSOP34838/?qs=sGAEpiMZZMvAL21a%2fDhxMhls0hOpvmKUxNBvshin09E%3d"&gt;Vishay TSOP348&lt;/a&gt;. $ 1.14 from Mouser. These modules from Seeedstudio will also work: &lt;/span&gt;&lt;a href="http://www.seeedstudio.com/depot/infrared-remote-control-receiver-module-wo-steel-shield-p-104.html?cPath=32_28"&gt;IRL106A2B&lt;/a&gt; , and probably any IR receiver will work.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;As it turned out, the protocol for the Sony remote is the simplest and there is code available in the Arduino forums. I used the code in &lt;/span&gt;&lt;a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1176098434/3#3" style="font-family: trebuchet ms;"&gt;this post&lt;/a&gt;&lt;span style="font-family: trebuchet ms;"&gt; as-is and it worked right away. I will incorporate this code into my code. There is no need for a "remote pre-processor" as I thought I needed in &lt;/span&gt;&lt;a href="http://hifiduino.blogspot.com/2009/03/simplifying-ir-remote-processing.html" style="font-family: trebuchet ms;"&gt;this post&lt;/a&gt;&lt;span style="font-family: trebuchet ms;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SewJQW4A4PI/AAAAAAAACu0/qPBhHOU795E/s1600-h/DSC_0137.JPG"&gt;&lt;img alt="" border="0" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SewJQW4A4PI/AAAAAAAACu0/qPBhHOU795E/s400/DSC_0137.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-8361112038542506240?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/8361112038542506240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=8361112038542506240' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8361112038542506240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8361112038542506240'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/adding-remote-control.html' title='Adding Remote Control'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SewJQW4A4PI/AAAAAAAACu0/qPBhHOU795E/s72-c/DSC_0137.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1423058679077096728</id><published>2009-04-18T19:07:00.000-07:00</published><updated>2009-04-18T19:10:00.031-07:00</updated><title type='text'>Adjusting LCD for optimum contrast</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;Wrote some code to use the &lt;/span&gt;&lt;a style="font-family: trebuchet ms;" href="http://hifiduino.blogspot.com/2009/04/volume-control-enabled.html"&gt;4-button switch&lt;/a&gt;&lt;span style="font-family: trebuchet ms;"&gt; I made to go through the full range of brightness and contrast for the LCD. I found that optimum setting is Brightness: 200-250 and Contrast=45. Code in the sidebar&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1423058679077096728?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1423058679077096728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1423058679077096728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1423058679077096728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1423058679077096728'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/adjusting-lcd-for-optimum-contrast.html' title='Adjusting LCD for optimum contrast'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1528758123323463953</id><published>2009-04-17T22:44:00.000-07:00</published><updated>2010-03-02T13:42:53.260-08:00</updated><title type='text'>Rotary Encoder with Knob</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;For audio, it is more natural to use a knob. Replaced the mouse click wheel for a potentiometer type rotary encoder and added a nice metal knob. The rotary encoder I used is the cheapy $.99 one from &lt;/span&gt;&lt;a href="http://www.goldmine-elec-products.com/prodinfo.asp?number=G16267"&gt;&lt;span style="font-family: trebuchet ms;"&gt;Electronic Goldmine&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: trebuchet ms;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.goldmine-elec-products.com/images/G16267B.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.goldmine-elec-products.com/images/G16267B.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;It even has a momentary switch when you push it (to which I will wire the volume "dim" function). This particular encoder does 30 clicks per revolution (in my application that's 30 dB). Same wiring as the click wheel (center tab to Gnd, A tab to Arduino digital pin 2 -interrupt 0- and B to pin 4 (can be any other pin). Code is v 0.4&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/Selo1LOeEUI/AAAAAAAACuI/mU_2ooeDjeg/s1600-h/DSC_0119.JPG"&gt;&lt;img alt="" border="0" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/Selo1LOeEUI/AAAAAAAACuI/mU_2ooeDjeg/s400/DSC_0119.JPG" /&gt;&lt;/a&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1528758123323463953?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1528758123323463953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1528758123323463953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1528758123323463953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1528758123323463953'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/rotary-encoder-with-knob.html' title='Rotary Encoder with Knob'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/Selo1LOeEUI/AAAAAAAACuI/mU_2ooeDjeg/s72-c/DSC_0119.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1473905145538817125</id><published>2009-04-15T23:16:00.000-07:00</published><updated>2009-04-15T23:17:08.086-07:00</updated><title type='text'>Mouse Click Wheel Implemented</title><content type='html'>&lt;div style="clear: both;"&gt;&lt;span style="font-family: trebuchet ms;"&gt;Rotary encoder controls volume. Can change volume with with any speed and precision. With the button switch, the control is more limited. Earlier I though it would be good to utilize a hardware decoder, but the is very simple: An interrupt routine detects the motion and updates a variable. Inside a loop, the volume is adjusted every time the variable is set. At first I put the code to change the volume inside the interrupt service routine, but inside the routine interrupts are disabled and therefore I2C does not work. So the code to update the DAC registers has to be outside of the interrupt routine.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SebNNy3RJCI/AAAAAAAACsg/FuVYOCznvwM/s1600-h/DSC_0116.JPG"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SebNNy3RJCI/AAAAAAAACsg/FuVYOCznvwM/s400/DSC_0116.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1473905145538817125?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1473905145538817125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1473905145538817125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1473905145538817125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1473905145538817125'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/mouse-click-wheel-implemented.html' title='Mouse Click Wheel Implemented'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SebNNy3RJCI/AAAAAAAACsg/FuVYOCznvwM/s72-c/DSC_0116.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2351536560130904258</id><published>2009-04-15T13:26:00.000-07:00</published><updated>2009-04-15T13:27:38.763-07:00</updated><title type='text'>Experimenting with rotary encoders</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SeZC7fEr9II/AAAAAAAACr0/mtbhJUSeGsE/s1600-h/P1000450.JPG"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SeZC7fEr9II/AAAAAAAACr0/mtbhJUSeGsE/s400/P1000450.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;"&gt;Here is a click wheel from an old MS mouse. It is a mechanical quadrature encoder and therefore requires no power. Now that I've done more reading up on Arduino, you can make this work with one single interrupt. I tried it and it works well counting "up" clicks and "down" clicks. I'm going to use it to control volume.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2351536560130904258?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2351536560130904258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2351536560130904258' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2351536560130904258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2351536560130904258'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/experimenting-with-rotary-encoders.html' title='Experimenting with rotary encoders'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SeZC7fEr9II/AAAAAAAACr0/mtbhJUSeGsE/s72-c/P1000450.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2756736257092580828</id><published>2009-04-12T00:14:00.000-07:00</published><updated>2009-04-12T21:19:18.594-07:00</updated><title type='text'>Latest Display</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SeGU1LExenI/AAAAAAAACrs/KLbsniwlOOI/s1600-h/DSC_0113.JPG"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SeGU1LExenI/AAAAAAAACrs/KLbsniwlOOI/s400/DSC_0113.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="clear: both;"&gt;In real life, the text is whiter/brighter. &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="clear: both;"&gt;S Rate: not yet functional, but the register in the spdif input chip can be read&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="clear: both;"&gt;Source: the DAC can switch between PCM and DSD&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="clear: both;"&gt;"DIM" is functional.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Code is v 0.3&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2756736257092580828?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2756736257092580828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2756736257092580828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2756736257092580828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2756736257092580828'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/latest-display.html' title='Latest Display'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SeGU1LExenI/AAAAAAAACrs/KLbsniwlOOI/s72-c/DSC_0113.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3798282626629882584</id><published>2009-04-11T19:43:00.000-07:00</published><updated>2009-04-11T23:16:51.630-07:00</updated><title type='text'>Volume Tweaking...&amp; "DIM"</title><content type='html'>At first, I programmed the minimum volume to be -63 dB. Mainly because I wanted to use a byte instead of an int and thus save precious memory space in the Atmel 168 (The DAC adjusts volume in 0.25 db increments, so 63x4=252 is the largest number a byte can hold). It turns out -63 dB is plenty loud with the DAC connected directly to the amplifier. So in this iteration:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Increased control range from -99 dB to 0 dB&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Added a "DIM" control. This is like mute but it goes to -80 dB instead of total mute, and when you "undim", it goes back the the original volume. You can "undim with the same dim button and also with the volume control buttons&lt;/li&gt;&lt;li&gt;The 4 buttons are now functional: right for "DIM", left for Filter, top for up volume and bottom for down volume. Sort of intuitive&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3798282626629882584?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3798282626629882584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3798282626629882584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3798282626629882584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3798282626629882584'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/volume-tweaking-dim.html' title='Volume Tweaking...&amp; &quot;DIM&quot;'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-7286701299173555843</id><published>2009-04-07T22:45:00.000-07:00</published><updated>2009-04-07T22:56:04.540-07:00</updated><title type='text'>DAC Volume Control is Working</title><content type='html'>Got the volume control working. I'm currently using two button switches to adjust the volume in the DAC. I've programmed it to go from -63 dB to 0 dB in 1 dB increment. You can find the code in the sidebar. The little module I made has 4 buttons. Two of them have not been enabled.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sdw8GOhseoI/AAAAAAAACp0/SMEenvEoa9A/s1600-h/P1000436.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 284px;" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sdw8GOhseoI/AAAAAAAACp0/SMEenvEoa9A/s400/P1000436.JPG" alt="" id="BLOGGER_PHOTO_ID_5322194937321388674" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-7286701299173555843?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/7286701299173555843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=7286701299173555843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7286701299173555843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7286701299173555843'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/volume-control-enabled.html' title='DAC Volume Control is Working'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/Sdw8GOhseoI/AAAAAAAACp0/SMEenvEoa9A/s72-c/P1000436.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-6430490968387383793</id><published>2009-04-06T12:04:00.000-07:00</published><updated>2009-04-07T12:51:37.900-07:00</updated><title type='text'>ATMega I/O pull up resistor</title><content type='html'>&lt;div style="clear: both; font-family: trebuchet ms;"&gt;Here is a diagram from the spec describing the circuit configuration for each I/O pin.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SdpSK5N7SUI/AAAAAAAACpM/R_1fx3uCrvE/s1600-h/atmegaioport.jpg"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SdpSK5N7SUI/AAAAAAAACpM/R_1fx3uCrvE/s400/atmegaioport.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;According to the spec, all ports have individually selectable pull-up resistors with a supply-voltage invariant resistance of 20K-50K ohm. In addition, all ports have protection diodes to both VCC and GND.&lt;br /&gt;&lt;br /&gt;The pull up resistor can be enabled by software with the following code:&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;pinMode(pin, INPUT);     // set pin to input&lt;br /&gt;digitalWrite(pin, HIGH); // turn on pullup resistors&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;This means when the pin is configured as input:&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;ul style="font-family: trebuchet ms;"&gt;&lt;li&gt;No need for external pull up/down resistors&lt;/li&gt;&lt;li&gt;Value of pin when nothing is connected is "pulled-up": HIGH (1)&lt;/li&gt;&lt;/ul&gt;Note: (From the Arduino reference documentation)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;"Consequently a pin that is configured to have pullup resistors turned on when the pin is an INPUT, will have the pin configured as HIGH if the pin is then swtiched to an OUTPUT with pinMode(). This works in the other direction as well, and an output pin that is left in a HIGH state will have the pullup resistors set if switched to an input with pinMode()"&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;"The analog pins also have pullup resistors, which work identically to pullup resistors on the digital pins. They are enabled by issuing a command such a:" &lt;/span&gt;&lt;/p&gt; &lt;pre&gt;&lt;span style="font-size:85%;"&gt;digitalWrite(14, HIGH);  // set pullup on analog pin 0&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-6430490968387383793?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/6430490968387383793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=6430490968387383793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6430490968387383793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/6430490968387383793'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/atmega-io-pull-up-resistor.html' title='ATMega I/O pull up resistor'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/SdpSK5N7SUI/AAAAAAAACpM/R_1fx3uCrvE/s72-c/atmegaioport.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-8616856643083777456</id><published>2009-04-05T23:18:00.000-07:00</published><updated>2009-04-06T01:04:12.225-07:00</updated><title type='text'>CODE v 0.1</title><content type='html'>&lt;span style="font-size:100%;"&gt;You can find the code for the project here: &lt;a href="http://downloadcode.files.wordpress.com/2009/04/hifiduinov011.doc"&gt;link&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-8616856643083777456?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/8616856643083777456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=8616856643083777456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8616856643083777456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8616856643083777456'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/include-include-define-reg9-0x12.html' title='CODE v 0.1'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4804750916319188551</id><published>2009-04-05T19:24:00.000-07:00</published><updated>2009-04-24T15:44:11.578-07:00</updated><title type='text'>Hook up Details</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sdln8FY-UCI/AAAAAAAACoU/W8_Bu_4r5zA/s1600-h/P1000425.JPG"&gt;&lt;img alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/Sdln8FY-UCI/AAAAAAAACoU/W8_Bu_4r5zA/s400/P1000425.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="clear: both;"&gt;&lt;ul style="font-family: trebuchet ms;font-family:trebuchet ms;" &gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;The PS of the DAC (7.5V -mistakenly labeled 6.5V) provides the power to the Microcontroler. The Local regulator of Arduino provides 5V to the microcontroller and the LCD&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Two I2C (2-cable) connections: one to the LCD and one to the DAC.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;NOTE:&lt;/span&gt; I've made changes to the pull-up resistors for the I2C lines because the OPUS is a 3.3V device. See this &lt;a href="http://hifiduino.blogspot.com/2009/04/5v-to-33v.html"&gt;post&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;One button switch that when pressed provides 5V to pin 2 of Arduino. Pressing this switch changes the Digital filter.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4804750916319188551?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4804750916319188551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4804750916319188551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4804750916319188551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4804750916319188551'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/hook-up-details.html' title='Hook up Details'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/Sdln8FY-UCI/AAAAAAAACoU/W8_Bu_4r5zA/s72-c/P1000425.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4841930961546473877</id><published>2009-04-05T00:51:00.000-07:00</published><updated>2011-03-03T16:47:01.489-08:00</updated><title type='text'>Success!</title><content type='html'>&lt;div style="clear: both;"&gt;Was able to control the DAC with ARDUINO. Here are the switch settings for S/W control (and the switch settings for H/W control on the right).&lt;br /&gt;&lt;br /&gt;Spent hours debugging the code and programming most of the registers. It turned out that I was trying to be too smart and added the write bit to the DAC 7-bit DAC address. Only after re-reading the Arduino Wire Library did I realize that wire.begingTransmission() only needs the 7-bit address.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sdhi9ptm5OI/AAAAAAAACn0/GBKQGJWiit4/s1600-h/untitled.jpg"&gt;&lt;img alt="" border="0" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sdhi9ptm5OI/AAAAAAAACn0/GBKQGJWiit4/s400/untitled.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;Note: the I2S switch sets the address of the DAC (for I2C communication purposes). The WM8741 can have one of two addresses:&lt;br /&gt;&lt;br /&gt;0011010 (or 0x1A) I2S switch=0&lt;br /&gt;0011011 (or 0x1B) I2S switch=1&lt;br /&gt;&lt;br /&gt;In my case I set the switch=1 because that is the address I use in my code (0x1B)&lt;br /&gt;&lt;br /&gt;Here is some info from the WM8741 datasheet (page 5):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I2S: in 2-wire s/w mode (using I2C protocol), this sets the address of the device. I would assume setting it low gives one address and setting it high gives the other address&lt;/li&gt;&lt;li&gt;DIFFHW: 0= normal; 1= MONO. IMPORTANT: for s/w operation this has to be set to zero. If set to one it assumes h/w mode&lt;/li&gt;&lt;li&gt;With DIFFHW=0, then MODE=Z for 2-wire control (I2C protocol); MODE=1 is for 3-wire protocol. When in s/w mode, register 8 is used to set the chip in stereo or mono mode&lt;/li&gt;&lt;li&gt;OSR is unused&lt;/li&gt;&lt;li&gt;IWO is an output, so set to Z&lt;/li&gt;&lt;li&gt;DSD and DEEMPH must be set to Z because these become the control wires to the controller in s/w mode&lt;/li&gt;&lt;li&gt;MUTE: 0= Mute active; 1= Normal operation &lt;/li&gt;&lt;li&gt;FSEL: Unused.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So in summary:&lt;br /&gt;&lt;br /&gt;I2S: try 0 or 1 to determine the address of the chip&lt;br /&gt;DSD: Z&lt;br /&gt;DEEPH: Z&lt;br /&gt;MODE: Z (for I2C mode)&lt;br /&gt;IWO: Z&lt;br /&gt;DIFFHW: 0 (for s/w mode)&lt;br /&gt;FSEL: Z&lt;br /&gt;MUTE: try 1 for "Normal operation"&lt;br /&gt;OSR: Z&lt;br /&gt;&lt;br /&gt;So the only switches to adjust/try in S/W mode are I2S and MUTE&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4841930961546473877?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4841930961546473877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4841930961546473877' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4841930961546473877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4841930961546473877'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/success.html' title='Success!'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/Sdhi9ptm5OI/AAAAAAAACn0/GBKQGJWiit4/s72-c/untitled.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1788280822688104397</id><published>2009-04-02T22:53:00.000-07:00</published><updated>2009-04-24T15:42:10.511-07:00</updated><title type='text'>Modding the Shield</title><content type='html'>&lt;div style="clear: both;"&gt;&lt;span style="font-family:trebuchet ms;"&gt;Added an extra pair of pins for I2C and a reset switch. The reset switch in the Arduino is under the shield and inaccesible if you install a shield. Reset is used to restart the program. I used a PCB drill bit and a handheld Dremel to make the extra holes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;NOTE&lt;/span&gt;&lt;span style="font-family:trebuchet ms;"&gt;: I've had to make some changes to the pull-up resistors for the I2C lines from the 5V connection to the 3.3V connection because the OPUS is a 3.3V device&lt;/span&gt;. See this &lt;a href="http://hifiduino.blogspot.com/2009/04/5v-to-33v.html"&gt;post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SdWkTn0AGEI/AAAAAAAACm8/rTRYWCnGJN8/s1600-h/P1000407.JPG"&gt;&lt;img alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SdWkTn0AGEI/AAAAAAAACm8/rTRYWCnGJN8/s400/P1000407.JPG" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1788280822688104397?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1788280822688104397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1788280822688104397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1788280822688104397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1788280822688104397'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/04/modding-shield.html' title='Modding the Shield'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SdWkTn0AGEI/AAAAAAAACm8/rTRYWCnGJN8/s72-c/P1000407.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-8334412228785866315</id><published>2009-03-31T11:07:00.000-07:00</published><updated>2009-03-31T12:39:33.194-07:00</updated><title type='text'>HIFIDUINO and OPUS DAC</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SdJbyWveYOI/AAAAAAAAClI/dEL6XF-4XsQ/s1600-h/hifiduinoAndOpus.JPG"&gt;&lt;img alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SdJbyWveYOI/AAAAAAAAClI/dEL6XF-4XsQ/s400/hifiduinoAndOpus.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Here is Arduino/LCD with my DAC. It is the OPUS DAC from Twistedpear Audio.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-8334412228785866315?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/8334412228785866315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=8334412228785866315' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8334412228785866315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/8334412228785866315'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/hifiduino-and-opus-dac.html' title='HIFIDUINO and OPUS DAC'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SdJbyWveYOI/AAAAAAAAClI/dEL6XF-4XsQ/s72-c/hifiduinoAndOpus.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1724872803007110882</id><published>2009-03-31T11:06:00.000-07:00</published><updated>2009-04-23T23:48:07.891-07:00</updated><title type='text'>Got my ARDUINO</title><content type='html'>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Just received my Arduino from NKCelectronics.&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:verdana;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Connected the I2C LCD, downloaded the 0015 IDE for WinXP, downloaded the LCD libary and tested the "Hello World" example. Incredibly easy!&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;The Arduino is under the green "shield" which I used to install the pull-up resistors (5 Kohm) for the I2C lines (pin 4, 5) and to facilitate connections. &lt;span style="font-weight: bold;"&gt;IMPORTANT&lt;/span&gt;: The picture shows the pull up resistors connected to 5V. I later realized that the OPUS is a 3.3V device. So I now have it connected to the 3.3V pin&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;The LCD brightness and contrast is adjusted in software. I set it for Brightness=200 and Contrast=50. In real life, it looks much better than the picture.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SdJeXQiOnXI/AAAAAAAACl8/fquV146FI1A/s1600-h/HifiDuinoWLCD.JPG"&gt;&lt;img alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SdJeXQiOnXI/AAAAAAAACl8/fquV146FI1A/s400/HifiDuinoWLCD.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1724872803007110882?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1724872803007110882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1724872803007110882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1724872803007110882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1724872803007110882'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/got-my-arduino_6154.html' title='Got my ARDUINO'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SdJeXQiOnXI/AAAAAAAACl8/fquV146FI1A/s72-c/HifiDuinoWLCD.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5312563434798058079</id><published>2009-03-30T13:00:00.000-07:00</published><updated>2009-03-31T11:22:20.042-07:00</updated><title type='text'>Opto Isolation for I2C</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;In audio, one of the main concerns is to eliminate any source of noise. The I2C line may be a source of noise as it is connected to a micro controller, LCD and other devices such as an RF remote.&lt;br /&gt;&lt;br /&gt;Optocouplers are a standard way to isolate circuits. With I2C, the use of optocoplers is a bit more challenging because the signals are bi-directional. One way to do it is to use an I2C bi-directional buffer and a couple of opto-isolators as shown in this image:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.nxp.com/products/blockdiagrams/001aai064.gif"&gt;&lt;img style="cursor: pointer; width: 372px; height: 210px;" src="http://www.nxp.com/products/blockdiagrams/001aai064.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Recently, Analog Devices released a fully integrated solution, the ADUM1250/2250. An 8-pin/16-pin chip solution with transformer-based isolation:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.analog.com/library/analogDialogue/archives/40-12/AD40-12_09.jpg"&gt;&lt;img style="cursor: pointer; width: 354px; height: 315px;" src="http://www.analog.com/library/analogDialogue/archives/40-12/AD40-12_09.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;The technology is called "&lt;a href="http://www.analog.com/en/interface/digital-isolators/products/faqs/CU_FAQs_Digital_Isolators/resources/fca.html#SECTIONtechnology"&gt;iCoupler Technology&lt;/a&gt;" and claims to be superior to pure optical or pure transformer isolation. The following diagram gives an idea on the technology:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.analog.com/library/analogDialogue/archives/40-12/AD40-12_01.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 263px;" src="http://www.analog.com/library/analogDialogue/archives/40-12/AD40-12_01.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5312563434798058079?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5312563434798058079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5312563434798058079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5312563434798058079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5312563434798058079'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/opto-isolation-for-i2c.html' title='Opto Isolation for I2C'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-3846678454198006604</id><published>2009-03-29T21:22:00.000-07:00</published><updated>2009-03-29T21:23:58.459-07:00</updated><title type='text'>I2C in Arduino</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/SdBJI32hbWI/AAAAAAAACgg/bzEtNt-Ku70/s1600-h/arduino_diecimila.jpg"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/SdBJI32hbWI/AAAAAAAACgg/bzEtNt-Ku70/s400/arduino_diecimila.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-3846678454198006604?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/3846678454198006604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=3846678454198006604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3846678454198006604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/3846678454198006604'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/i2c-in-arduino.html' title='I2C in Arduino'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/SdBJI32hbWI/AAAAAAAACgg/bzEtNt-Ku70/s72-c/arduino_diecimila.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-789672627982891546</id><published>2009-03-29T18:59:00.000-07:00</published><updated>2009-04-04T09:44:56.349-07:00</updated><title type='text'>Configuring DAC for I2C Operation</title><content type='html'>&lt;div style="clear: both;"&gt;Diagram shows how to set the switches to software operation (in this case I2C). Also where to connect the two I2C wires: SCLK, SDIN. SADDR sets the address for the chip which can be set with the switch as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I2S=0, address is oo11010&lt;/li&gt;&lt;li&gt;I2S=1, address is 0011011 Use this address since it is already configured this way for hardware mode&lt;/li&gt;&lt;/ul&gt;Notice that the address is only 7 bits. In I2C, the address byte is 7 bits followed by the read(=1)/write(=0) bit. In our case, we want to write, so we use 00110110&lt;br /&gt;&lt;br /&gt;Next notice that to switch from H/W mode to S/W mode (I2C mode) you only need to move the mode switch from "0" to "z" and we are done&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/SdAng7vmRUI/AAAAAAAACgY/xk86S0LsEP4/s1600-h/P1000386.JPG"&gt;&lt;img alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/SdAng7vmRUI/AAAAAAAACgY/xk86S0LsEP4/s400/P1000386.JPG" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-789672627982891546?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/789672627982891546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=789672627982891546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/789672627982891546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/789672627982891546'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/configuring-dac-for-i2c-operation.html' title='Configuring DAC for I2C Operation'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/SdAng7vmRUI/AAAAAAAACgY/xk86S0LsEP4/s72-c/P1000386.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1180508676300039712</id><published>2009-03-29T17:26:00.000-07:00</published><updated>2009-03-31T11:23:03.215-07:00</updated><title type='text'>The DAC</title><content type='html'>&lt;div style="margin: 0px auto 10px; text-align: left; font-family: verdana;"&gt;&lt;span style="font-size:85%;"&gt;This is the DAC I intend to control with Arduino. It is &lt;a href="http://www.twistedpearaudio.com/digital/Opus.aspx"&gt;TwistedPearAudio&lt;/a&gt;'s implementation of the Wolfson State-of-the-Art &lt;a href="http://www.wolfsonmicro.com/products/WM8741/"&gt;WM8741&lt;/a&gt; DAC&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px auto 10px; text-align: center;" align="left"&gt; &lt;/div&gt;&lt;div style="margin: 0px auto 10px; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3VX0Od0oVtA/SdARp9azGRI/AAAAAAAACgQ/fhlHB9zaAis/s1600-h/P1000386.JPG"&gt;&lt;img alt="" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/SdARp9azGRI/AAAAAAAACgQ/fhlHB9zaAis/s400/P1000386.JPG" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1180508676300039712?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1180508676300039712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1180508676300039712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1180508676300039712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1180508676300039712'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/dac.html' title='The DAC'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/SdARp9azGRI/AAAAAAAACgQ/fhlHB9zaAis/s72-c/P1000386.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-1994404633285210206</id><published>2009-03-27T20:26:00.000-07:00</published><updated>2009-03-31T11:24:04.564-07:00</updated><title type='text'>Detail of Serial/I2C Interface Board</title><content type='html'>&lt;div style="margin: 0px auto 10px; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sc2Y_6BMnYI/AAAAAAAACfA/3oD3ARsjwnY/s1600-h/P1000371.JPG"&gt;&lt;img alt="" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/Sc2Y_6BMnYI/AAAAAAAACfA/3oD3ARsjwnY/s400/P1000371.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;ul&gt;&lt;li  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;Remove the Jumper for I2C&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Also use 4.7K resistors as pull up resistors to 5V for the I2C lines (connect a 4.7K resistor between analog 4 and 5V and analog 5 and 5V). Here is why: &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://errantengineer.blogspot.com/2007/07/pullup-resistors-how-and-why.html"&gt;http://errantengineer.blogspot.com/2007/07/pullup-resistors-how-and-why.html&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center; clear: both;"&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-1994404633285210206?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/1994404633285210206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=1994404633285210206' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1994404633285210206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/1994404633285210206'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/detail-of-seriali2c-interface-board.html' title='Detail of Serial/I2C Interface Board'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/Sc2Y_6BMnYI/AAAAAAAACfA/3oD3ARsjwnY/s72-c/P1000371.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-7814797839532284823</id><published>2009-03-27T20:18:00.000-07:00</published><updated>2009-03-31T11:24:28.019-07:00</updated><title type='text'>Got the 4x20 LCE</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;This is backside of the LCD. Note the Serial/I2C interface board&lt;/span&gt;&lt;/span&gt; &lt;div style="clear: both;"&gt; &lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;a href="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sc2XAUuDO1I/AAAAAAAACe4/6RrCVxl2Uj8/s1600-h/P1000372.JPG"&gt;&lt;img alt="" src="http://4.bp.blogspot.com/_3VX0Od0oVtA/Sc2XAUuDO1I/AAAAAAAACe4/6RrCVxl2Uj8/s400/P1000372.JPG" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-7814797839532284823?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/7814797839532284823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=7814797839532284823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7814797839532284823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7814797839532284823'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/got-4x20-lce.html' title='Got the 4x20 LCE'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3VX0Od0oVtA/Sc2XAUuDO1I/AAAAAAAACe4/6RrCVxl2Uj8/s72-c/P1000372.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-7681185993559692506</id><published>2009-03-27T12:32:00.000-07:00</published><updated>2009-03-31T12:34:24.982-07:00</updated><title type='text'>Bought the DUEMILANOVE</title><content type='html'>&lt;span style="font-family: verdana;font-size:85%;" &gt;It was on sale at NKCElectronics. The Arduino Mega was also released and it has 6 external interrupt pins, but it cost almost 3X what I paid. I guess I'll live with 2 interrupt lines for now.&lt;/span&gt;&lt;div style="clear: both;"&gt;&lt;a href="http://2.bp.blogspot.com/_3VX0Od0oVtA/SdJvvHIZTUI/AAAAAAAACmc/oIfBpcY7Tik/s1600-h/MyArduino.JPG"&gt;&lt;img alt="" src="http://2.bp.blogspot.com/_3VX0Od0oVtA/SdJvvHIZTUI/AAAAAAAACmc/oIfBpcY7Tik/s400/MyArduino.JPG" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-7681185993559692506?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/7681185993559692506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=7681185993559692506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7681185993559692506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/7681185993559692506'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/bought-duemilanove.html' title='Bought the DUEMILANOVE'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3VX0Od0oVtA/SdJvvHIZTUI/AAAAAAAACmc/oIfBpcY7Tik/s72-c/MyArduino.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-5993893484309017193</id><published>2009-03-26T23:11:00.000-07:00</published><updated>2011-05-14T10:17:30.687-07:00</updated><title type='text'>How to Read Rotary Encoders (II)</title><content type='html'>&lt;span style="font-size: 85%;"&gt;&lt;span style="font-family: verdana;"&gt;Since the Arduino only has two interrupt lines, we want to save one interrupt line for other applications and use one line to read the Rotary Encoder.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;There are two ways of doing so:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana; font-size: 85%; font-weight: bold;"&gt;The Easy Way&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Connect the rotary encoder to the I/O expander, read the value of the A and B pins off the I/O expander and do the "XOR shortcut" with the previous state. See this &lt;/span&gt;&lt;a href="http://www.parallax.com/dl/docs/cols/nv/vol1/col/nv8.pdf" style="font-family: verdana;"&gt;article&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana; font-size: 85%; font-weight: bold;"&gt;The Even Easier Way&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Purchase the &lt;/span&gt;&lt;a href="http://www.lsicsi.com/pdfs/Data_Sheets/LS7183_LS7184.pdf" style="font-family: verdana;"&gt;LS7184&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; integrated circuit (About $3.00 from www.geminielec.com) and connect the rotary encoder to it. The chip will output the clicks and the direction. This will make programming even easier.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_3VX0Od0oVtA/ScxxyeTHNMI/AAAAAAAACdY/j0ufre_N8rI/s1600-h/ls7184.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5317750371958338754" src="http://3.bp.blogspot.com/_3VX0Od0oVtA/ScxxyeTHNMI/AAAAAAAACdY/j0ufre_N8rI/s400/ls7184.jpg" style="cursor: pointer; height: 215px; width: 247px;" /&gt;&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Update (May, 2011): These posts were done when I was learning how to use Arduino. Latest implementation can be found here:&lt;a href="http://hifiduino.wordpress.com/2010/10/20/hw-sw-no-debounce/"&gt; link1&lt;/a&gt;, &lt;a href="http://hifiduino.wordpress.com/2010/10/21/arduino-code-for-buffalo-ii-dac-rotary-encoder-connections/"&gt;link2&lt;/a&gt;, &lt;a href="http://hifiduino.wordpress.com/2010/10/29/arduino-rotary-encoder-one-line-debounce-code/"&gt;link3&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-5993893484309017193?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/5993893484309017193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=5993893484309017193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5993893484309017193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/5993893484309017193'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/how-to-read-rotary-encoders-ii.html' title='How to Read Rotary Encoders (II)'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/ScxxyeTHNMI/AAAAAAAACdY/j0ufre_N8rI/s72-c/ls7184.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-2199195254806015979</id><published>2009-03-26T19:02:00.000-07:00</published><updated>2009-03-26T23:08:03.530-07:00</updated><title type='text'>I/O Expander (Interrupt Saver)</title><content type='html'>If you run out of I/O in your Arduino, you can use this chip. It is accesses through I2C, and it costs less than two bucks.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/Scw0LWCd-EI/AAAAAAAACcw/Nsi6koxyiP0/s1600-h/PCF8574_PHIL-1.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 161px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/Scw0LWCd-EI/AAAAAAAACcw/Nsi6koxyiP0/s400/PCF8574_PHIL-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5317682629516851266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It provides and additional 8 I/O pins.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3VX0Od0oVtA/Scw0TZ81TkI/AAAAAAAACc4/5AIWue-2iqY/s1600-h/ioExpanderDiagram-1.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 200px;" src="http://1.bp.blogspot.com/_3VX0Od0oVtA/Scw0TZ81TkI/AAAAAAAACc4/5AIWue-2iqY/s400/ioExpanderDiagram-1.JPG" alt="" id="BLOGGER_PHOTO_ID_5317682768005910082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;But what is interesting is that you can use it to control one or more rotary encoders and only utilize one interrupt line in the Arduino (remember that the current Arduino only has 2 external -easy to use- interrupt lines). I learned a lot from this &lt;a href="http://www.circuitcellar.com/library/print/0303/millier152/index.htm"&gt;article&lt;/a&gt;. However, there is an easier way to detect the rotation direction of the encoder, and that is the "XOR" shortcut as described in this &lt;a href="http://www.parallax.com/dl/docs/cols/nv/vol1/col/nv8.pdf"&gt;article&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-2199195254806015979?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/2199195254806015979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=2199195254806015979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2199195254806015979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/2199195254806015979'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/io-expander.html' title='I/O Expander (Interrupt Saver)'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3VX0Od0oVtA/Scw0LWCd-EI/AAAAAAAACcw/Nsi6koxyiP0/s72-c/PCF8574_PHIL-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5963718918139647263.post-4583965695257902298</id><published>2009-03-25T17:48:00.000-07:00</published><updated>2009-03-25T17:52:37.800-07:00</updated><title type='text'>A Keypad for Input</title><content type='html'>I think I am going to use a keyboard to get started. It will be useful for:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Selecting the different filters in the DAC&lt;/li&gt;&lt;li&gt;Adjusting the digital volume in the DAC&lt;/li&gt;&lt;li&gt;Selecting between PCM and DSD in the DAC&lt;/li&gt;&lt;li&gt;Mute/unmute&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A rotary encoder is a cool feature because it allows the use of a knob and a knob is a big part of audio :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I found this keyboard in ebay, which is perfect for my serial LCD which also has input for a 4x4 matrix keypad&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/_3VX0Od0oVtA/ScrRsAFee2I/AAAAAAAACb4/21TTM6_d4Ok/s400/keyboard.jpg" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5963718918139647263-4583965695257902298?l=hifiduino.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hifiduino.blogspot.com/feeds/4583965695257902298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5963718918139647263&amp;postID=4583965695257902298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4583965695257902298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5963718918139647263/posts/default/4583965695257902298'/><link rel='alternate' type='text/html' href='http://hifiduino.blogspot.com/2009/03/keypad-for-input.html' title='A Keypad for Input'/><author><name>The Lazy Engineer</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_3VX0Od0oVtA/ShnpWbQhL2I/AAAAAAAADCU/GlLW5oBeuk0/S220/cantinflas.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3VX0Od0oVtA/ScrRsAFee2I/AAAAAAAACb4/21TTM6_d4Ok/s72-c/keyboard.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
