commit a82baa2ff4bc305d6698beb5dc77ff2c9c0a09b4 Author: Your Name Date: Sun Oct 28 19:12:13 2018 -0400 first. diff --git a/Capacitor ESR Tester.html b/Capacitor ESR Tester.html new file mode 100644 index 0000000..1b4de76 --- /dev/null +++ b/Capacitor ESR Tester.html @@ -0,0 +1,361 @@ + + + + + + + + + +Capacitor ESR Tester + + + + + + + + + + + + + + + + + + + + + + + + + + +

Logo +Capacitor ESR Tester +

+ + +

+

protoype esr meter

+ + + +

Project Description

+This project was conceived as a way to enhance the collection of test equipment on my test bench. +I buy a lot of older HP test gear off ebay as well as older radios. Most of this gear is 25-60 years old +and needless to say, the condition of the electrolytic capacitors is somewhat suspect. I needed a way to +quickly weed out bad caps with an in circuit tester.
+ +At the present time, there are no plans to market circuit boards, kits, parts or complete units +for sale. + + +

What is ESR?

+"ESR" stands for equivalent series resistance. ESR is one of the +characteristics that defines the performance +of an electrolytic capacitor. Low ESR is highly desirable in a capacitor + as any ripple current through the +capacitor causes the capacitor to heat up due to the resistive loses. +This heating accelerates +the demise of the capacitor by drying out the electrolyte at an ever +increasing rate. +Over the lifetime of a capacitor, it is not uncommon for the ESR to +increase by a factor of 10 to 30 times +or even go open circuit. Typical lifetime ratings for electrolytics are +2000-15000 hours and are very dependant on ambient operating +temperature. As the ESR increases, the filtering operation of the +capacitor becomes impaired +and eventually the circuit fails to operate correctly. + +

Why are ESR Meters so Useful?

+A typical capacitor checker measures the capacity (usually in micro +farads) of the test capacitor. +Some advanced units also test for leakage current. Most of these testers + require that the capacitor be +removed from the circuit. Unless the capacitor has totally failed, they +will not detect a high ESR value. +In a typical circuit, there may be 10's or 100's of capacitors. Having +to remove each one for testing is very +tedious and there is a great risk of damaging circuit boards. This +tester uses a low voltage ( 250mv ) +high frequency (150khz) A/C current to read the ESR of a capacitor in +the circuit. The in circuit testing +is possible because of the low voltage used for obtaining the +measurement. The voltage is low enough that +solid state devices in the surrounding circuitry are not activated and +do not affect the low resistance reading we are attempting to obtain. A +lot of capacitor checkers will be damaged if you happen to test a +charged capacitor. +This circuit is A/C coupled and will withstand up to 400vdc of charge on + a capacitor (but watch your fingers!). +The ESR checker will not detect shorted capacitors as they will read +with a very low ESR value. If you are trouble shooting a circuit, you +will have to use several instruments including your nose, voltmeter and +oscilloscope to locate all the possible failure modes. My experience has + found that the ESR meter catches about 95% of capacitor problems and +potential problems. + +

Features

+
    +
  • Tests electrolytic capacitors > 1uf in circuit.
  • +
  • Caps may be tested in circuit or by bridging them across the terminal posts or using test leads.
  • +
  • Polarity insensitive testing.
  • +
  • Tolerates charged capacitors up to 400vdc.
  • +
  • Low battery draw (approx 25ma) resulting in about 20 hours of battery time when using 4 cheap AA nicads.
  • +
  • Easy to read analog meter.
  • +
  • Measures ESR range from 0-75ohms with an expanded scale A/C ohmmeter.
  • +
+ + +

+ +

Circuit Description

+See the schematic for component designations. +The circuit starts with a 150khz oscillator using one gate of a 74hc14. +The rest of the gates are used as +buffers to increase the current drive to the low pass filter. The single + pole low pass filter is necessary because the square wave signal +contains a lot of energy in high frequency odd order harmonics. The +output of the filter is applied across a 10 ohm load resistor that +provides the low impedance drive signal to the test capacitor. Diodes D5 + and D6 protect the circuit from discharge spikes if you happen to test a + charged capacitor. R18 is used to discharge C5 so that you don't blow +up anything if you alternately test charged high and low voltage caps. +C5 isolates the test circuit from DC voltages up to 400 volts. +
+
Be careful if you are testing high voltage capacitors... the safest +way to work is to make sure the test capacitors are discharged before + testing them. Be aware that high voltage capacitors can hold a lethal +charge for several days depending on the circuit design. I learned this +first hand in high school electronics class. Students (not to be named!) + used to charge the caps and put them back on the shelf for the next +unsuspecting victim to pick up. +
+
The rest of the circuit is a very straight forward transistor +amplifier with a gain of about 10.5. This amplifies the +A/C signal passed through the test capacitor up to several volts in +amplitude. The signal is then coupled to a full +wave bridge rectifier that has the meter as its load. The threshold +voltage of the bridge rectifier is used to an advantage and provides the + expanded scale function of the ohm meter. The amplified voltage from +the test capacitor must be great enough to overcome 2 diode drops before + the meter will start to respond. This sets the high resistance +threshold for the meter at somewhere between 75-100 ohms. The meter is +zeroed by shorting the test leads together and adjusting the pot in the +meter circuit for a full scale ( 0 ohms )reading on the meter. Proper +operation of the circuit can be verified by checking several values of +resistors with the meter. Shorted leads should indicate full scale, a 1 +ohm resistor should read about 90% of full scale, a 10 ohm resistor +should read about 40% of full scale and a 47 ohm resistor should barely +move the needle to about 10% of FSD. The absolute readings will vary +with temperature and battery voltage, but the idea is that most ESR +values should be much less than 10 ohms which means good caps test at +very close to full scale and bad caps test at little or no deflection. +
+The board below shows my second prototype. The top 2 wires run to the +front panel banana test jacks, the middle 2 wires are the incoming +switched 5 volts from the 4 AA nicads, and the bottom 2 wires run to the + series combination of the zero adjust pot and the meter on the front +panel. + +

+ +

Project Files

+Schematic Drawing - esrschematic.png(94.7K)
+Parts Layout - esrbuildit.png(13.4K)
+PCB bottom view - esrpcb.png(4.8K)
+PCB Xray View - esrxray.png(4.8K)
+Eagle PCB files - esrmeter-9mar05.tgz(173.2K)
+LTSpice/SWCadiii - Linear Technology Spice model esr.asc(5.8k)
+ +

System Requirements

+This circuit was first prototyped using a homebuilt prototyping panel. +As you can see by the picture above, +it was ugly but it worked. My final version was hand built on a "pad per + hole" prototyping board with 0.1" spacing. +I used the PCB layout as a guide for placing and wiring the components +(printed and glued to proto board). I did the PCB design as part of the +project +so that I could optimize the board size and parts placement. The pcb is +roughly 2x3" and is single sided with no +special or critical parts required. + +

Updates:

+September 2009
+The zero of the meter tends to drift with changes in the battery +voltage. Several builders have emailed me with modifications to +use a low dropout regulator to keep the voltage more constant. Since my +unit runs on 4 nicad cells, there is not enough headroom for a 5volt low + dropout +regulator. The charged voltage of my nicad pack is 5.6volts, but most of + the packs useful life is down around 4.8volts. I added a +15 ohm 1/2w resistor in series from the battery pack and a 4.7volt 1 +watt zener to ground. This modification really helps keep the readings +more stable as the +battery discharges. With the lower supply voltage, I had an issue with +driving the meter to full scale. I ended up reducing R17 from 10k down +to 4k7. +The latest success story using the ESR meter was finding an open +330uF/25v cap on the output of a wall wart supply used with a wireless +router. Replacing +the $0.25 part saved me buying a $100.00 router. + +

+ +home.jpg + Back to Lawrence's Software Stuff Page +
+ + + +
+ + \ No newline at end of file diff --git a/Capacitor ESR Tester_files/analytics.js b/Capacitor ESR Tester_files/analytics.js new file mode 100644 index 0000000..72a92a6 --- /dev/null +++ b/Capacitor ESR Tester_files/analytics.js @@ -0,0 +1,270 @@ +/* eslint-disable no-var, semi, prefer-arrow-callback, prefer-template */ + +/** + * Collection of methods for sending analytics events to Archive.org's analytics server. + * + * These events are used for internal stats and sent (in anonymized form) to Google Analytics. + * + * @see analytics.md + * + * @type {Object} + */ +window.archive_analytics = (function defineArchiveAnalytics() { + var DEFAULT_SERVICE = 'ao_2'; + + var startTime = new Date(); + + /** + * @return {Boolean} + */ + function isPerformanceTimingApiSupported() { + return 'performance' in window && 'timing' in window.performance; + } + + /** + * Determines how many milliseconds elapsed between the browser starting to parse the DOM and + * the current time. + * + * Uses the Performance API or a fallback value if it's not available. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API + * + * @return {Number} + */ + function getLoadTime() { + var start; + + if (isPerformanceTimingApiSupported()) + start = window.performance.timing.domLoading; + else + start = startTime.getTime(); + + return new Date().getTime() - start; + } + + /** + * Determines how many milliseconds elapsed between the user navigating to the page and + * the current time. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API + * + * @return {Number|null} null if the browser doesn't support the Performance API + */ + function getNavToDoneTime() { + if (!isPerformanceTimingApiSupported()) + return null; + + return new Date().getTime() - window.performance.timing.navigationStart; + } + + /** + * Performs an arithmetic calculation on a string with a number and unit, while maintaining + * the unit. + * + * @param {String} original value to modify, with a unit + * @param {Function} doOperation accepts one Number parameter, returns a Number + * @returns {String} + */ + function computeWithUnit(original, doOperation) { + var number = parseFloat(original, 10); + var unit = original.replace(/(\d*\.\d+)|\d+/, ''); + + return doOperation(number) + unit; + } + + /** + * Computes the default font size of the browser. + * + * @returns {String|null} computed font-size with units (typically pixels), null if it cannot be computed + */ + function getDefaultFontSize() { + var fontSizeStr; + + if (!('getComputedStyle' in window)) + return null; + + fontSizeStr = window.getComputedStyle(document.documentElement).fontSize; + + // Don't modify the value if tracking book reader. + if (document.documentElement.classList.contains('BookReaderRoot')) + return fontSizeStr; + + return computeWithUnit(fontSizeStr, function reverseBootstrapFontSize(number) { + // Undo the 62.5% size applied in the Bootstrap CSS. + return number * 1.6; + }); + } + + return { + /** + * @type {String|null} + */ + service: null, + + /** + * Key-value pairs to send in pageviews (you can read this after a pageview to see what was + * sent). + * + * @type {Object} + */ + values: {}, + + /** + * @param {Object} values + * @param {Function} [onload_callback] (deprecated) callback to invoke once ping to analytics server is done + * @param {Boolean} [augment_for_ao_site] (deprecated) if true, add some archive.org site-specific values + */ + send_ping: function send_ping(values, onload_callback, augment_for_ao_site) { + var img_src = "//analytics.archive.org/0.gif"; + + if (!values) + values = {}; + + function format_ping(values) { + var ret = []; + var count = 2; + var version = 2; + + for (var data in values) { + ret.push(encodeURIComponent(data) + "=" + encodeURIComponent(values[data])); + count = count + 1; + } + + ret.push('version=' + version); + ret.push('count=' + count); + return ret.join("&"); + } + + // Automatically set service. + if (!values.service && this.service) + values.service = this.service; + + if (augment_for_ao_site && !values.service) + values.service = DEFAULT_SERVICE; + + var string = format_ping(values); + + var loadtime_img = new Image(100,25); + if (onload_callback && typeof(onload_callback)=='function') + loadtime_img.onload = onload_callback; + loadtime_img.src = img_src + "?" + string; + }, + + send_scroll_fetch_event: function send_scroll_fetch_event(page) { + var values = { + kind: 'event', + ec: 'page_action', + ea: 'scroll_fetch', + el: location.pathname, + ev: page, // int + cache_bust: Math.random() + }; + + var loadTime = getLoadTime(); + var navToDoneTime = getNavToDoneTime(); + + if (loadTime) + values.loadtime = loadTime; + if (navToDoneTime) + values.nav_to_done_ms = navToDoneTime; + + this.send_ping(values); + }, + + send_scroll_fetch_base_event: function send_scroll_fetch_base_event() { + var values = { + kind: 'event', + ec: 'page_action', + ea: 'scroll_fetch_base', + el: location.pathname, + cache_bust: Math.random(), + }; + + var loadTime = getLoadTime(); + var navToDoneTime = getNavToDoneTime(); + + if (loadTime) + values.loadtime = loadTime; + if (navToDoneTime) + values.nav_to_done_ms = navToDoneTime; + + this.send_ping(values); + }, + + /** + * @param {Object} options + * @param {String} [options.mediaType] + */ + send_pageview: function send_pageview(options) { + var settings = options || {}; + + var defaultFontSize; + var loadTime = getLoadTime(); + var mediaType = settings.mediaType; + var navToDoneTime = getNavToDoneTime(); + + /** + * @return {String} + */ + function get_locale() { + if (navigator) { + if (navigator.language) + return navigator.language; + + else if (navigator.browserLanguage) + return navigator.browserLanguage; + + else if (navigator.systemLanguage) + return navigator.systemLanguage; + + else if (navigator.userLanguage) + return navigator.userLanguage; + } + return ''; + } + + defaultFontSize = getDefaultFontSize(); + + // Set field values + this.values.kind = 'pageview'; + this.values.timediff = (new Date().getTimezoneOffset()/60)*(-1); // *timezone* diff from UTC + this.values.locale = get_locale(); + this.values.referrer = (document.referrer == '' ? '-' : document.referrer); + + if (loadTime) + this.values.loadtime = loadTime; + + if (navToDoneTime) + this.values.nav_to_done_ms = navToDoneTime; + + if (defaultFontSize) + this.values.ga_cd1 = defaultFontSize; + + if ('devicePixelRatio' in window) + this.values.ga_cd2 = window.devicePixelRatio; + + if (mediaType) + this.values.ga_cd3 = mediaType; + + this.send_ping(this.values); + }, + + /** + * @param {Object} options see this.send_pageview options + */ + send_pageview_on_load: function send_pageview_on_load(options) { + var self = this; + + window.addEventListener('load', function send_pageview_with_options() { + self.send_pageview(options); + }); + }, + + /** + * @returns {Object[]} + */ + get_data_packets: function get_data_packets() { + return [this.values]; + }, + }; +}()); diff --git a/Capacitor ESR Tester_files/auto-complete.js b/Capacitor ESR Tester_files/auto-complete.js new file mode 100644 index 0000000..587c77a --- /dev/null +++ b/Capacitor ESR Tester_files/auto-complete.js @@ -0,0 +1,215 @@ +var wbAutoComplete = (function(){ + // "use strict"; + function wbAutoComplete(options){ + if (!document.querySelector) return; + + // helpers + function hasClass(el, className){ return el.classList ? el.classList.contains(className) : new RegExp('\\b'+ className+'\\b').test(el.className); } + + function addEvent(el, type, handler){ + if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler); + } + function removeEvent(el, type, handler){ + // if (el.removeEventListener) not working in IE11 + if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler); + } + function live(elClass, event, cb, context){ + addEvent(context || document, event, function(e){ + var found, el = e.target || e.srcElement; + while (el && !(found = hasClass(el, elClass))) el = el.parentElement; + if (found) cb.call(el, e); + }); + } + + var o = { + selector: 0, + source: 0, + minChars: 3, + delay: 150, + offsetLeft: 0, + offsetTop: 1, + cache: 1, + menuClass: '', + renderItem: function (item, search){ + // escape special characters + search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi"); + return '
' + item.replace(re, "$1") + '
'; + }, + onSelect: function(e, term, item){} + }; + for (var k in options) { if (options.hasOwnProperty(k)) o[k] = options[k]; } + + // init + var elems = typeof o.selector == 'object' ? [o.selector] : document.querySelectorAll(o.selector); + for (var i=0; i 0) + that.sc.scrollTop = selTop + that.sc.suggestionHeight + scrTop - that.sc.maxHeight; + else if (selTop < 0) + that.sc.scrollTop = selTop + scrTop; + } + } + } + addEvent(window, 'resize', that.updateSC); + document.body.appendChild(that.sc); + + live('wb-autocomplete-suggestion', 'mouseleave', function(e){ + var sel = that.sc.querySelector('.autocomplete-suggestion.selected'); + if (sel) setTimeout(function(){ sel.className = sel.className.replace('selected', ''); }, 20); + }, that.sc); + + live('wb-autocomplete-suggestion', 'mouseover', function(e){ + var sel = that.sc.querySelector('.wb-autocomplete-suggestion.selected'); + if (sel) sel.className = sel.className.replace('selected', ''); + this.className += ' selected'; + }, that.sc); + + live('wb-autocomplete-suggestion', 'mousedown', function(e){ + if (hasClass(this, 'wb-autocomplete-suggestion')) { // else outside click + var v = this.getAttribute('data-val'); + that.value = v; + o.onSelect(e, v, this); + that.sc.style.display = 'none'; + } + }, that.sc); + + that.blurHandler = function(){ + try { var over_sb = document.querySelector('.wb-autocomplete-suggestions:hover'); } catch(e){ var over_sb = 0; } + if (!over_sb) { + that.last_val = that.value; + that.sc.style.display = 'none'; + setTimeout(function(){ that.sc.style.display = 'none'; }, 350); // hide suggestions on fast input + } else if (that !== document.activeElement) setTimeout(function(){ that.focus(); }, 20); + }; + addEvent(that, 'blur', that.blurHandler); + + var suggest = function(data){ + var val = that.value; + that.cache[val] = data; + if (data.length && val.length >= o.minChars) { + var s = ''; + for (var i=0;i 40) && key != 13 && key != 27) { + var val = that.value; + if (val.length >= o.minChars) { + if (val != that.last_val) { + that.last_val = val; + clearTimeout(that.timer); + if (o.cache) { + if (val in that.cache) { suggest(that.cache[val]); return; } + // no requests if previous suggestions were empty + for (var i=1; i#wm-save-snapshot-open { + margin-right: 7px; + top: -6px; +} + +#wm-btns>#wm-sign-in { + box-sizing: content-box; + display: none; + margin-right: 7px; + top: -8px; + + /* + round border around sign in button + */ + border: 2px #000 solid; + border-radius: 14px; + padding-right: 2px; + padding-bottom: 2px; + width: 11px; + height: 11px; +} + +#wm-btns>#wm-sign-in>.iconochive-person { + font-size: 12.5px; +} + +#wm-save-snapshot-open > .iconochive-web { + color:#000; + font-size:160%; +} + +#wm-btns>#wm-save-snapshot-in-progress { + display: none; + font-size:160%; + opacity: 0.5; + position: relative; + margin-right: 7px; + top: -5px; +} + +#wm-btns>#wm-save-snapshot-success { + display: none; + color: green; + position: relative; + top: -7px; +} + +#wm-btns>#wm-save-snapshot-fail { + display: none; + color: red; + position: relative; + top: -7px; +} diff --git a/Capacitor ESR Tester_files/esrproto01.jpg b/Capacitor ESR Tester_files/esrproto01.jpg new file mode 100644 index 0000000..02363e0 Binary files /dev/null and b/Capacitor ESR Tester_files/esrproto01.jpg differ diff --git a/Capacitor ESR Tester_files/esrproto02.jpg b/Capacitor ESR Tester_files/esrproto02.jpg new file mode 100644 index 0000000..29054fb Binary files /dev/null and b/Capacitor ESR Tester_files/esrproto02.jpg differ diff --git a/Capacitor ESR Tester_files/esrproto03.jpg b/Capacitor ESR Tester_files/esrproto03.jpg new file mode 100644 index 0000000..99171fc Binary files /dev/null and b/Capacitor ESR Tester_files/esrproto03.jpg differ diff --git a/Capacitor ESR Tester_files/graph-calc.js b/Capacitor ESR Tester_files/graph-calc.js new file mode 100644 index 0000000..64fcb01 --- /dev/null +++ b/Capacitor ESR Tester_files/graph-calc.js @@ -0,0 +1,132 @@ +function getEventX(event) { + var posx = 0; + if (event.pageX || event.pageY) { + posx = event.pageX; + } + else if (event.clientX || event.clientY) { + posx = event.clientX + document.body.scrollLeft + + document.documentElement.scrollLeft; + } + return posx; +} +function getElementX(obj) { + var x = 0; + if (obj.offsetParent) { + do { + x += obj.offsetLeft; + } while (obj = obj.offsetParent); + } + return x; +} +function zeroPad(v, len) { + v = v.toString(); + return v.length >= len ? v : "00000000".substring(0, len - v.length) + v; +} + +/** + * Check if the difference between the max and the min non zero capture numbers + * is larger than 3 orders of magnitude. If yes, we need to scale. +**/ +function capturegraph_scale_is_required(captures) { + var max = 0; + var min = 1000; + for (var i = 0; i < captures.length; i++) { + var year = captures[i]; + max = Math.max(max, Math.max.apply(null, year[1])); + min = Math.min(min, Math.min.apply(null, + year[1].filter(Boolean))); + } + return (Math.log1p(max) - Math.log1p(min) > 3); +} + +/** + * Scale captugraph counts and max maxcount using log1p if necessary. + */ +function capturegraph_scale(captures) { + var maxcount = 0; + for (var i = 0; i < captures.length; i++) { + maxcount = Math.max(maxcount, Math.max.apply(null, captures[i][1])); + } + if (capturegraph_scale_is_required(captures)) { + var scaled = []; + for (var i = 0; i < captures.length; i++) { + var year = captures[i]; + // XXX map may not be available on all platforms + scaled.push([year[0], year[1].map(Math.log1p)]); + } + captures = scaled; + maxcount = Math.log1p(maxcount); + } + return [captures, maxcount]; +} + +/** + * Draw years, highlight current year, draw capture frequency per month + */ +function sparkline(captures, width, height, canvas_id, start_year, + cur_year, cur_month) { + var c = document.getElementById(canvas_id); + if (!c || !c.getContext) return; + var ctx = c.getContext("2d"); + if (!ctx) return; + ctx.fillStyle = "#FFF"; + var end_year = new Date().getUTCFullYear(); + var year_width = width / (end_year - start_year + 1); + + var scaled = capturegraph_scale(captures.years); + var years = scaled[0]; + var maxcount = scaled[1]; + + var yscale = height / maxcount; + + function year_left(year) { + return Math.ceil((year - start_year) * year_width) + 0.5; + } + + if (cur_year >= start_year) { + var x = year_left(cur_year); + ctx.fillStyle = "#FFFFA5"; + ctx.fillRect(x, 0, year_width, height); + } + for (var year = start_year; year <= end_year; year++) { + var x = year_left(year); + ctx.beginPath(); + ctx.moveTo(x, 0); + ctx.lineTo(x, height); + ctx.lineWidth = 1; + ctx.strokeStyle = "#CCC"; + ctx.stroke(); + } + cur_month = parseInt(cur_month) - 1; + var month_width = (year_width - 1) / 12; + for (var i = 0; i < years.length; i++) { + var year = years[i][0]; + var months = years[i][1]; + var left = year_left(year) + 1.0; + for (var month = 0; month < 12; month++) { + var count = months[month]; + if (count > 0) { + var h = Math.ceil(count * yscale); + if (year == cur_year && month == cur_month) { + ctx.fillStyle = "#EC008C"; + } else { + ctx.fillStyle = "#000"; + } + // must note that when I use width=Math.round(month_width+1), + // the replay toolbar looks more accurate whereas the + // bubble calendar looks somehow different. + ctx.fillRect(Math.round(left), Math.ceil(height - h), + Math.ceil(month_width), Math.round(h)); + } + left += month_width; + } + } +} + +function clear_canvas(canvas_id) { + var c = document.getElementById(canvas_id); + if (!c || !c.getContext) return; + var ctx = c.getContext("2d"); + if (!ctx) return; + ctx.clearRect(0, 0, c.width, c.height); +} diff --git a/Capacitor ESR Tester_files/home.jpg b/Capacitor ESR Tester_files/home.jpg new file mode 100644 index 0000000..7525702 Binary files /dev/null and b/Capacitor ESR Tester_files/home.jpg differ diff --git a/Capacitor ESR Tester_files/iconochive.css b/Capacitor ESR Tester_files/iconochive.css new file mode 100644 index 0000000..7a95ea7 --- /dev/null +++ b/Capacitor ESR Tester_files/iconochive.css @@ -0,0 +1,116 @@ +@font-face{font-family:'Iconochive-Regular';src:url('https://archive.org/includes/fonts/Iconochive-Regular.eot?-ccsheb');src:url('https://archive.org/includes/fonts/Iconochive-Regular.eot?#iefix-ccsheb') format('embedded-opentype'),url('https://archive.org/includes/fonts/Iconochive-Regular.woff?-ccsheb') format('woff'),url('https://archive.org/includes/fonts/Iconochive-Regular.ttf?-ccsheb') format('truetype'),url('https://archive.org/includes/fonts/Iconochive-Regular.svg?-ccsheb#Iconochive-Regular') format('svg');font-weight:normal;font-style:normal} +[class^="iconochive-"],[class*=" iconochive-"]{font-family:'Iconochive-Regular'!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} +.iconochive-Uplevel:before{content:"\21b5"} +.iconochive-exit:before{content:"\1f6a3"} +.iconochive-beta:before{content:"\3b2"} +.iconochive-logo:before{content:"\1f3db"} +.iconochive-audio:before{content:"\1f568"} +.iconochive-movies:before{content:"\1f39e"} +.iconochive-software:before{content:"\1f4be"} +.iconochive-texts:before{content:"\1f56e"} +.iconochive-etree:before{content:"\1f3a4"} +.iconochive-image:before{content:"\1f5bc"} +.iconochive-web:before{content:"\1f5d4"} +.iconochive-collection:before{content:"\2211"} +.iconochive-folder:before{content:"\1f4c2"} +.iconochive-data:before{content:"\1f5c3"} +.iconochive-tv:before{content:"\1f4fa"} +.iconochive-article:before{content:"\1f5cf"} +.iconochive-question:before{content:"\2370"} +.iconochive-question-dark:before{content:"\3f"} +.iconochive-info:before{content:"\69"} +.iconochive-info-small:before{content:"\24d8"} +.iconochive-comment:before{content:"\1f5e9"} +.iconochive-comments:before{content:"\1f5ea"} +.iconochive-person:before{content:"\1f464"} +.iconochive-people:before{content:"\1f465"} +.iconochive-eye:before{content:"\1f441"} +.iconochive-rss:before{content:"\221e"} +.iconochive-time:before{content:"\1f551"} +.iconochive-quote:before{content:"\275d"} +.iconochive-disc:before{content:"\1f4bf"} +.iconochive-tv-commercial:before{content:"\1f4b0"} +.iconochive-search:before{content:"\1f50d"} +.iconochive-search-star:before{content:"\273d"} +.iconochive-tiles:before{content:"\229e"} +.iconochive-list:before{content:"\21f6"} +.iconochive-list-bulleted:before{content:"\2317"} +.iconochive-latest:before{content:"\2208"} +.iconochive-left:before{content:"\2c2"} +.iconochive-right:before{content:"\2c3"} +.iconochive-left-solid:before{content:"\25c2"} +.iconochive-right-solid:before{content:"\25b8"} +.iconochive-up-solid:before{content:"\25b4"} +.iconochive-down-solid:before{content:"\25be"} +.iconochive-dot:before{content:"\23e4"} +.iconochive-dots:before{content:"\25a6"} +.iconochive-columns:before{content:"\25af"} +.iconochive-sort:before{content:"\21d5"} +.iconochive-atoz:before{content:"\1f524"} +.iconochive-ztoa:before{content:"\1f525"} +.iconochive-upload:before{content:"\1f4e4"} +.iconochive-download:before{content:"\1f4e5"} +.iconochive-favorite:before{content:"\2605"} +.iconochive-heart:before{content:"\2665"} +.iconochive-play:before{content:"\25b6"} +.iconochive-play-framed:before{content:"\1f3ac"} +.iconochive-fullscreen:before{content:"\26f6"} +.iconochive-mute:before{content:"\1f507"} +.iconochive-unmute:before{content:"\1f50a"} +.iconochive-share:before{content:"\1f381"} +.iconochive-edit:before{content:"\270e"} +.iconochive-reedit:before{content:"\2710"} +.iconochive-gear:before{content:"\2699"} +.iconochive-remove-circle:before{content:"\274e"} +.iconochive-plus-circle:before{content:"\1f5d6"} +.iconochive-minus-circle:before{content:"\1f5d5"} +.iconochive-x:before{content:"\1f5d9"} +.iconochive-fork:before{content:"\22d4"} +.iconochive-trash:before{content:"\1f5d1"} +.iconochive-warning:before{content:"\26a0"} +.iconochive-flash:before{content:"\1f5f2"} +.iconochive-world:before{content:"\1f5fa"} +.iconochive-lock:before{content:"\1f512"} +.iconochive-unlock:before{content:"\1f513"} +.iconochive-twitter:before{content:"\1f426"} +.iconochive-facebook:before{content:"\66"} +.iconochive-googleplus:before{content:"\67"} +.iconochive-reddit:before{content:"\1f47d"} +.iconochive-tumblr:before{content:"\54"} +.iconochive-pinterest:before{content:"\1d4df"} +.iconochive-popcorn:before{content:"\1f4a5"} +.iconochive-email:before{content:"\1f4e7"} +.iconochive-embed:before{content:"\1f517"} +.iconochive-gamepad:before{content:"\1f579"} +.iconochive-Zoom_In:before{content:"\2b"} +.iconochive-Zoom_Out:before{content:"\2d"} +.iconochive-RSS:before{content:"\1f4e8"} +.iconochive-Light_Bulb:before{content:"\1f4a1"} +.iconochive-Add:before{content:"\2295"} +.iconochive-Tab_Activity:before{content:"\2318"} +.iconochive-Forward:before{content:"\23e9"} +.iconochive-Backward:before{content:"\23ea"} +.iconochive-No_Audio:before{content:"\1f508"} +.iconochive-Pause:before{content:"\23f8"} +.iconochive-No_Favorite:before{content:"\2606"} +.iconochive-Unike:before{content:"\2661"} +.iconochive-Song:before{content:"\266b"} +.iconochive-No_Flag:before{content:"\2690"} +.iconochive-Flag:before{content:"\2691"} +.iconochive-Done:before{content:"\2713"} +.iconochive-Check:before{content:"\2714"} +.iconochive-Refresh:before{content:"\27f3"} +.iconochive-Headphones:before{content:"\1f3a7"} +.iconochive-Chart:before{content:"\1f4c8"} +.iconochive-Bookmark:before{content:"\1f4d1"} +.iconochive-Documents:before{content:"\1f4da"} +.iconochive-Newspaper:before{content:"\1f4f0"} +.iconochive-Podcast:before{content:"\1f4f6"} +.iconochive-Radio:before{content:"\1f4fb"} +.iconochive-Cassette:before{content:"\1f4fc"} +.iconochive-Shuffle:before{content:"\1f500"} +.iconochive-Loop:before{content:"\1f501"} +.iconochive-Low_Audio:before{content:"\1f509"} +.iconochive-First:before{content:"\1f396"} +.iconochive-Invisible:before{content:"\1f576"} +.iconochive-Computer:before{content:"\1f5b3"} diff --git a/Capacitor ESR Tester_files/loading.gif b/Capacitor ESR Tester_files/loading.gif new file mode 100644 index 0000000..deac700 Binary files /dev/null and b/Capacitor ESR Tester_files/loading.gif differ diff --git a/Capacitor ESR Tester_files/lpglogo.jpg b/Capacitor ESR Tester_files/lpglogo.jpg new file mode 100644 index 0000000..c543b58 Binary files /dev/null and b/Capacitor ESR Tester_files/lpglogo.jpg differ diff --git a/Capacitor ESR Tester_files/spectbar.gif b/Capacitor ESR Tester_files/spectbar.gif new file mode 100644 index 0000000..90bc0a5 Binary files /dev/null and b/Capacitor ESR Tester_files/spectbar.gif differ diff --git a/Capacitor ESR Tester_files/stucco.gif b/Capacitor ESR Tester_files/stucco.gif new file mode 100644 index 0000000..54ef7b7 Binary files /dev/null and b/Capacitor ESR Tester_files/stucco.gif differ diff --git a/Capacitor ESR Tester_files/timestamp.js b/Capacitor ESR Tester_files/timestamp.js new file mode 100644 index 0000000..35eeba5 --- /dev/null +++ b/Capacitor ESR Tester_files/timestamp.js @@ -0,0 +1,54 @@ +/** timestamp namespaced methods **/ +var __wbTs = (function() { + function _split_timestamp(timestamp) { + if(typeof timestamp == "number") { + timestamp = timestamp.toString(); + } + return [ + timestamp.slice(-14, -10), + timestamp.slice(-10, -8), + timestamp.slice(-8, -6), + timestamp.slice(-6, -4), + timestamp.slice(-4, -2), + timestamp.slice(-2) + ]; + } + var MONTHS_LONG = [ + "January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December" + ]; + var MONTHS_SHORT = [ + "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", + "Oct", "Nov", "Dec" + ]; + var FIELDS = { + 'Y': function(d) { return d.getUTCFullYear() }, + 'm': function(d) { return d.getUTCMonth() + 1 }, + 'b': function(d) { return MONTHS_SHORT[d.getUTCMonth()] }, + 'B': function(d) { return MONTHS_LONG[d.getUTCMonth()] }, + 'd': function(d) { return d.getUTCDate() }, + 'H': function(d) { return ('0'+d.getUTCHours()).slice(-2) }, + 'M': function(d) { return ('0'+d.getUTCMinutes()).slice(-2) }, + 'S': function(d) { return ('0'+d.getUTCSeconds()).slice(-2) }, + '%': function() { return '%' } + }; + function timestamp2datetime(timestamp) { + var ts_array = _split_timestamp(timestamp); + return new Date(Date.UTC( + ts_array[0], ts_array[1]-1, ts_array[2], + ts_array[3], ts_array[4], ts_array[5] + )); + } + return { + timestamp2datetime: timestamp2datetime, + getMonthName: function(mon) { + return MONTHS_LONG[mon]; + }, + format: function(timestamp, fmt) { + return fmt.replace(/%./g, function(ph) { + var field = FIELDS[ph[1]]; + return field ? field(timestamp2datetime(timestamp)) : ph; + }); + } + } +})(); diff --git a/Capacitor ESR Tester_files/toolbar.js b/Capacitor ESR Tester_files/toolbar.js new file mode 100644 index 0000000..0965dea --- /dev/null +++ b/Capacitor ESR Tester_files/toolbar.js @@ -0,0 +1,625 @@ +if(typeof __wm==="undefined") __wm={}; +(function(){ + var _JSON = typeof __wbhack != 'undefined' ? __wbhack.JSON : JSON; + var prettyMonths = [ + "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; + var $D=document,$=function(n){return document.getElementById(n)}; + + function formatNumber(n) { + return (''+n).replace(/\B(?=(\d{3})+$)/g, ','); + } + var ajax=__wm.ajax=function ajax(method, url, callback, headers, data) { + var xmlhttp; + if (window.XMLHttpRequest) { + xmlhttp = new XMLHttpRequest(); + } else { + xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); + } + xmlhttp.onreadystatechange = function() { + if (this.readyState == 4) { + callback(xmlhttp); + } + }; + xmlhttp.open(method, url, true); + if (headers) { + for (var header in headers) { + if (headers.hasOwnProperty(header)) { + xmlhttp.setRequestHeader(header, headers[header]); + } + } + } + // pass cookies for user authorization + xmlhttp.withCredentials = true; + xmlhttp.send(data); + } + + __wm.h=function hideToolbar(ev) { + $("wm-ipp").style.display="none"; + ev.stopPropagation(); + } + + var $expand, $capinfo; + + __wm.bt=function bootstrap(imgWidth,imgHeight,yearImgWidth,monthImgWidth, + coll,wbCurrentUrl,captureDate,firstYear) { + var wbPrefix='/'+(coll||'web')+'/'; + captureDate = captureDate.split('-'); + var displayDay = captureDate[2]; + var displayMonth = captureDate[1]; + var displayYear = captureDate[0]; + var trackerVal,curYear = -1,curMonth = -1; + var yearTracker,monthTracker; + + var $spk=$('wm-ipp-sparkline') + $expand=$('wm-expand'); + $capinfo=$('wm-capinfo'); + + function showTrackers(event) { + var val = event.type=="mouseenter"?1:0; + if (val===trackerVal) return; + var $ipp=$("wm-ipp"); + var $y=$("displayYearEl"),$m=$("displayMonthEl"),$d=$("displayDayEl"); + if (val) { + $ipp.className="hi"; + } else { + $ipp.className=""; + $y.innerHTML=displayYear;$m.innerHTML=prettyMonths[displayMonth-1];$d.innerHTML=displayDay; + } + yearTracker.style.display=val?"inline":"none"; + monthTracker.style.display=val?"inline":"none"; + trackerVal = val; + } + function getElementX2(el) { + var de = $D.documentElement; + var box = (typeof el.getBoundingClientRect!=='undefied')? + el.getBoundingClientRect():{top:0,left:0}; + return box.left + (window.pageXOffset||de.scrollLeft)-(de.clientLeft||0); + } + function navCaptures(captures) { + var $e = $("wm-nav-captures"); + var count = 0; + var years = captures.years; + var first_ts = captures.first_ts, last_ts = captures.last_ts; + for (var j = 0; j < years.length; j++) { + var months = years[j][1]; + for (var i = 0; i < months.length; i++) { + count += months[i]; + } + } + var html = '' + + formatNumber(count) + ' ' + + (count > 1 ? "captures" : "capture") + ''; + var timespan = __wbTs.format(first_ts, '%d %b %Y'); + if (last_ts != first_ts) { + timespan += ' - ' + __wbTs.format(last_ts, '%d %b %Y'); + } + html += '
' + + timespan + '
'; + $e.innerHTML = html; + } + function trackMouseMove(event) { + //var element = event.target; + var element = $spk; + var eventX = getEventX(event); + var elementX = getElementX2(element); + var xOff = Math.min(Math.max(0, eventX - elementX),imgWidth); + var monthOff = xOff % yearImgWidth; + + var year = Math.floor(xOff / yearImgWidth); + var monthOfYear = Math.min(11,Math.floor(monthOff / monthImgWidth)); + // 1 extra border pixel at the left edge of the year: + var month = (year * 12) + monthOfYear; + var day = monthOff % 2==1?15:1; + var dateString = zeroPad(year + firstYear) + zeroPad(monthOfYear+1,2) + + zeroPad(day,2) + "000000"; + + $("displayYearEl").innerHTML=year+firstYear; + $("displayMonthEl").innerHTML=prettyMonths[monthOfYear]; + // looks too jarring when it changes.. + //$("displayDayEl").innerHTML=zeroPad(day,2); + var url = wbPrefix + dateString + '/' + wbCurrentUrl; + $("wm-graph-anchor").href=url; + + if(curYear != year) { + var yrOff = year * yearImgWidth; + yearTracker.style.left = yrOff + "px"; + curYear = year; + } + if(curMonth != month) { + var mtOff = year + (month * monthImgWidth) + 1; + monthTracker.style.left = mtOff + "px"; + curMonth = month; + } + } + function disclaimElement(element) { + if (window.top == window.self) { + element.style.display = "block"; + $D.body.insertBefore(element, $D.body.firstChild); + } + } + yearTracker=$D.createElement('div'); + yearTracker.className='yt'; + with(yearTracker.style){ + display='none';width=yearImgWidth+"px";height=imgHeight+"px"; + } + monthTracker=$D.createElement('div'); + monthTracker.className='mt'; + with(monthTracker.style){ + display='none';width=monthImgWidth+"px";height=imgHeight+"px"; + } + $spk.appendChild(yearTracker); + $spk.appendChild(monthTracker); + + var $cv=$('wm-sparkline-canvas'); + $spk.onmouseenter=showTrackers; + $spk.onmouseleave=showTrackers; + $spk.onmousemove=trackMouseMove; + + var $ipp=$("wm-ipp"); + $ipp&&disclaimElement($ipp); + + var testCanvas = document.createElement('canvas'); + if(!!(testCanvas.getContext && testCanvas.getContext('2d'))) { + var sparkline_url = "/__wb/sparkline?output=json&url=" + + encodeURIComponent(wbCurrentUrl) + + (coll && "&collection=" + coll || ''); + ajax("GET", sparkline_url, function(response) { + if(response.status == 200) { + var capnav=_JSON.parse(response.responseText); + var yearsobj = capnav.years; + var ykeys = Object.getOwnPropertyNames(yearsobj); + var years = (capnav.years = []); + for (var i = 0; i < ykeys.length; i++) { + var y = ykeys[i]; + if (yearsobj[y]) { + years.push([y, yearsobj[y]]); + } + } + navCaptures(capnav); + sparkline(capnav,imgWidth,imgHeight,'wm-sparkline-canvas', + firstYear, displayYear, displayMonth); + } + }); + } else { + var sparklineImg = new Image(); + sparklineImg.src = "/__wb/sparkline?url=" + + encodeURIComponent(wbCurrentUrl) + + "&width=" + imgWidth + "&height=" + imgHeight + + "&selected_year=" + displayYear + "&selected_month=" + displayMonth + + (coll && "&collection=" + coll || ''); + sparklineImg.alt= "sparkline"; + sparklineImg.width=imgWidth; + sparklineImg.height=imgHeight; + sparklineImg.id="sparklineImgId"; + sparklineImg.border="0"; + $cv.parentNode.replaceChild(sparklineImg, $cv); + } + + function process_autocomplete(data) { + var out = [] + var len = data.length; + for(var i=0; i0) { + var output = process_autocomplete(data.hosts); + suggest(output); + } else if (typeof data.isUrl!=='undefined' && data.isUrl===true && typeof data.excluded==='undefined') { + suggest([query]); + } else { + ajax("GET", '/__wb/search/anchor?q='+encodeURIComponent(query), + function(data) { + var data = _JSON.parse(data.response); + if (typeof data!=='undefined' && data.length>0) { + var output = process_autocomplete(data.slice(0,5)); + suggest(output); + } + }); + } + }); + }, + onSelect: function(e, term, item) { + $("wmtb").submit(); + } + }); + $("wmtb").onsubmit = function(e) { + var query = $("wmtbURL").value; + // if textbox value is not a URL, redirect to search + if (!(query.indexOf('http://') === 0 || query.indexOf('https://') === 0 || + query.match(/[\w\.]{2,256}\.[a-z]{2,4}/gi))) { + document.location.href="/web/*/" + $("wmtbURL").value; + e.preventDefault(); + return false; + } + }; + }; + function show_timestamps() { + // Populate capinfo with capture resources if empty. If not empty, it has + // already run before so avoid redoing AJAX. + var $capresources=$('wm-capresources'); + $capresources.innerHTML = ''; + //disable caching to be able to reload list when browsing frames. + //if($capresources.innerHTML.length !== 0) { + // return; + //} + var $wmloading=$("wm-capresources-loading"); + $wmloading.style.display='block'; + + // calculate datetime difference with capture datetime and return relative + // value such as "-5 hours, 10 minutes". + var capture_ts = document.getElementById('wmtb').elements.date.value; + var capture_msec = __wbTs.timestamp2datetime(capture_ts).getTime(); + function datetime_diff(dt_str) { + var dt_msec = Date.parse(dt_str); + var diff = dt_msec - capture_msec; + var prefix = ""; + if(diff < 0) { + prefix += "-"; + diff = Math.abs(diff); + } else { + prefix += "+"; + } + var highlight = false; + if(diff < 1000) { + // equal to the page datetime + return {delta: diff, text:"", highlight: highlight}; + } + var total_diff = diff; + var years_d = Math.floor(diff/1000/60/60/24/30/12); + diff -= years_d*1000*60*60*24*30*12; + var months_d = Math.floor(diff/1000/60/60/24/30); + diff -= months_d*1000*60*60*24*30; + var days_d = Math.floor(diff/1000/60/60/24); + diff -= days_d*1000*60*60*24; + var hours_d = Math.floor(diff/1000/60/60); + diff -= hours_d*1000*60*60; + var minutes_d = Math.floor(diff/1000/60); + diff -= minutes_d*1000*60; + var seconds_d = Math.floor(diff/1000); + + var parts = []; + if(years_d > 1) { + parts.push(years_d + " years"); + highlight = true; + } else if(years_d == 1) { + parts.push(years_d + " year"); + highlight = true; + } + if(months_d > 1) { + parts.push(months_d + " months"); + highlight = true; + } else if(months_d == 1) { + parts.push(months_d + " month"); + highlight = true; + } + if(days_d > 1) { + parts.push(days_d + " days"); + } else if(days_d == 1) { + parts.push(days_d + " day"); + } + if(hours_d > 1) { + parts.push(hours_d + " hours"); + } else if(hours_d == 1) { + parts.push(hours_d + " hour"); + } + if(minutes_d > 1) { + parts.push(minutes_d + " minutes"); + } else if (minutes_d == 1) { + parts.push(minutes_d + " minute"); + } + if(seconds_d > 1) { + parts.push(seconds_d + " seconds"); + } else if(seconds_d == 1) { + parts.push(seconds_d + " second"); + } + if(parts.length > 2) { + parts = parts.slice(0, 2); + } + return {delta: total_diff, text: prefix + parts.join(" "), + highlight: highlight}; + } + // Utility method to find elements in dom (currently only img) using URL. + // Also look into embedded frames recursively + // Captured resources urls may have timestamps different from DOM URL + // so it is not possible to search with original path + // /web/20120407141544/http://example.com + // we must search for URLS ENDING WITH http://example.com + function find_elements_by_url(current_window, url) { + var orig_url = url.split("/").splice(6).join("/"); + var els=current_window.document.querySelectorAll( + "img[src$='" + orig_url + "'], iframe[src$='" + orig_url + "'], frame[src$='" + orig_url + "']" + ); + var els_array=Array.prototype.slice.call(els); + for(var i=0; i 0) { + for(var i=0; i 0) { + for(var i=0; i 0) { + deduped.map(get_resource_info); + } else { + $capresources.innerHTML = "There are no sub-resources in the page."; + $wmloading.style.display='none'; + } + } + __wm.ex=function expand(ev) { + ev.stopPropagation(); + var c=$expand.className; + if (c.match(/wm-closed/)) { // closed + $expand.className=c.replace(/wm-closed/,'wm-open'); + $capinfo.style.display='block'; + show_timestamps(); + } else { + $expand.className=c.replace(/wm-open/,'wm-closed'); + $capinfo.style.display='none'; + } + }; + + function isArray(obj) { + return (typeof obj !== 'undefined' && obj && obj.constructor === Array); + } + + function setDisplayStyle(id, display) { + var el = $(id); + if (el) { + el.style.display = display; + } + } + + function show(ids) { + if (!isArray(ids)) { + ids = [ids]; + } + for (var i = 0; i < ids.length; i++) { + setDisplayStyle(ids[i], 'inline-block'); + } + } + + function hide(ids) { + if (!isArray(ids)) { + ids = [ids]; + } + for (var i = 0; i < ids.length; i++) { + setDisplayStyle(ids[i], 'none'); + } + } + + function userIsLoggedIn() { + show('wm-save-snapshot-open'); + hide('wm-sign-in'); + } + + function userIsNotLoggedIn() { + hide([ + 'wm-save-snapshot-open', + 'wm-save-snapshot-in-progress', + ]); + show('wm-sign-in'); + } + + function startSnapShotSaving() { + hide([ + 'wm-save-snapshot-fail', + 'wm-save-snapshot-open', + 'wm-save-snapshot-success', + ]); + show([ + 'wm-save-snapshot-in-progress', + ]); + } + + function successSnapshotSaving() { + hide([ + 'wm-save-snapshot-fail', + 'wm-save-snapshot-in-progress', + ]); + show([ + 'wm-save-snapshot-open', + 'wm-save-snapshot-success', + ]); + } + + function failSnapshotSaving(err) { + hide([ + 'wm-save-snapshot-in-progress', + 'wm-save-snapshot-success', + ]); + show([ + 'wm-save-snapshot-fail', + 'wm-save-snapshot-open', + ]); + } + + /** + * check whether cookie has field + * + * @param name + * @return boolean + */ + function hasCookie(name) { + return document.cookie.search(name) >= 0; + } + + __wm.saveSnapshot = function (url, timestamp, tags) { + startSnapShotSaving(); + ajax('POST', '/__wb/web-archive/', function (res) { + if (res.status === 401) { + // it seems that user is not logged in + userIsNotLoggedIn(); + } else if (res.status >= 400) { + failSnapshotSaving(res.responseText); + console.log('You have got an error.'); + console.log('If you think something wrong here please send it to support.'); + console.log('Response: "' + res.responseText + '"'); + console.log('status: "' + res.status + '"'); + } else { + successSnapshotSaving(res); + } + }, { + 'Content-Type': 'application/json' + }, _JSON.stringify({ + url: url, + snapshot: timestamp, + tags: tags || [], + })); + + return false; + }; + + document.addEventListener('DOMContentLoaded', function () { + if (hasCookie('logged-in-user') && hasCookie('logged-in-sig')) { + userIsLoggedIn(); + } else { + userIsNotLoggedIn(); + } + }); +})(); diff --git a/Capacitor ESR Tester_files/wayback-toolbar-logo.png b/Capacitor ESR Tester_files/wayback-toolbar-logo.png new file mode 100644 index 0000000..e5e880d Binary files /dev/null and b/Capacitor ESR Tester_files/wayback-toolbar-logo.png differ diff --git a/Capacitor ESR Tester_files/wbhack.js b/Capacitor ESR Tester_files/wbhack.js new file mode 100644 index 0000000..3e95e64 --- /dev/null +++ b/Capacitor ESR Tester_files/wbhack.js @@ -0,0 +1,41 @@ +// Wayback Machine hacks +var __wbhack = new function(){ + var prefix; + var orig_document = { + createElementNS: document.createElementNS + }; + this.init = function(_prefix) { + this.checkCookiesNumber(); + prefix = _prefix; + document.createElementNS = function(ns,name) { + if (ns.indexOf(prefix)==0) { + ns = ns.substring(prefix.length).replace(/\/?[0-9]+\//, ''); + } + return orig_document.createElementNS.call(this, ns, name); + }; + }; + this.createCookie = function(name,value,days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } + else var expires = ""; + document.cookie = name+"="+value+expires+"; path=/"; + }; + this.eraseCookie = function(name) { + this.createCookie(name, "", -1); + }; + this.checkCookiesNumber = function() { + var cookies = document.cookie.split(";"); + if(cookies.length > 40) { + for(var i=0; iEAGLE Design Rules\n

\nThe default Design Rules have been set to cover\na wide range of applications. Your particular design\nmay have different requirements, so please make the\nnecessary adjustments and save your customized\ndesign rules under a new name. +mdWireWire = 12mil +mdWirePad = 12mil +mdWireVia = 12mil +mdPadPad = 12mil +mdPadVia = 12mil +mdViaVia = 12mil +mdSmdPad = 12mil +mdSmdVia = 12mil +mdSmdSmd = 12mil +mdViaViaSameLayer = 8mil +mnLayersViaInSmd = 2 +mdCopperDimension = 40mil +mdDrill = 12mil +mdSmdStop = 0mil +msWidth = 10mil +msDrill = 24mil +rvPadTop = 0.250000 +rvPadInner = 0.250000 +rvPadBottom = 0.250000 +rvViaOuter = 0.250000 +rvViaInner = 0.250000 +rlMinPadTop = 10mil +rlMaxPadTop = 20mil +rlMinPadInner = 10mil +rlMaxPadInner = 20mil +rlMinPadBottom = 10mil +rlMaxPadBottom = 20mil +rlMinViaOuter = 8mil +rlMaxViaOuter = 20mil +rlMinViaInner = 8mil +rlMaxViaInner = 20mil +psTop = -1 +psBottom = -1 +psFirst = -1 +mvStopFrame = 0.100000 +mvCreamFrame = 0.000000 +mlMinStopFrame = 0mil +mlMaxStopFrame = 20mil +mlMinCreamFrame = 0mil +mlMaxCreamFrame = 0mil +mlViaStopLimit = 0mil +srRoundness = 0.000000 +srMinRoundness = 0mil +srMaxRoundness = 0mil +slThermalGap = 0.500000 +slMinThermalGap = 20mil +slMaxThermalGap = 100mil +slAnnulusIsolate = 20mil +slThermalIsolate = 10mil +slAnnulusRestring = 0 +slThermalRestring = 1 +slThermalsForVias = 0 +checkGrid = 0 +checkAngle = 0 +checkFont = 1 +checkRestrict = 1 +useDiameter = 13 +maxErrors = 50 +viaSetup = FFFF F0 diff --git a/ESR-meter/eagle.epf b/ESR-meter/eagle.epf new file mode 100644 index 0000000..f81aae2 --- /dev/null +++ b/ESR-meter/eagle.epf @@ -0,0 +1,225 @@ +[Eagle] +Version="04 13 10" +Platform="Linux" +Serial="62191E841E-LSR-WLM-1EL" +Globals="Globals" +Desktop="Desktop" + +[Globals] +AutoSaveProject=1 +UsedLibrary="/opt/eagle/lbr/19inch.lbr" +UsedLibrary="/opt/eagle/lbr/40xx.lbr" +UsedLibrary="/opt/eagle/lbr/41xx.lbr" +UsedLibrary="/opt/eagle/lbr/45xx.lbr" +UsedLibrary="/opt/eagle/lbr/74ac-logic.lbr" +UsedLibrary="/opt/eagle/lbr/74ttl-din.lbr" +UsedLibrary="/opt/eagle/lbr/74xx-eu.lbr" +UsedLibrary="/opt/eagle/lbr/74xx-us.lbr" +UsedLibrary="/opt/eagle/lbr/751xx.lbr" +UsedLibrary="/opt/eagle/lbr/altera.lbr" +UsedLibrary="/opt/eagle/lbr/am29-memory.lbr" +UsedLibrary="/opt/eagle/lbr/amd-mach.lbr" +UsedLibrary="/opt/eagle/lbr/analog-devices.lbr" +UsedLibrary="/opt/eagle/lbr/atmel.lbr" +UsedLibrary="/opt/eagle/lbr/battery.lbr" +UsedLibrary="/opt/eagle/lbr/burr-brown.lbr" +UsedLibrary="/opt/eagle/lbr/busbar.lbr" +UsedLibrary="/opt/eagle/lbr/buzzer.lbr" +UsedLibrary="/opt/eagle/lbr/capacitor-wima.lbr" +UsedLibrary="/opt/eagle/lbr/chipcard-siemens.lbr" +UsedLibrary="/opt/eagle/lbr/con-3m.lbr" +UsedLibrary="/opt/eagle/lbr/con-amp-champ.lbr" +UsedLibrary="/opt/eagle/lbr/con-amp-mt.lbr" +UsedLibrary="/opt/eagle/lbr/con-amp-quick.lbr" +UsedLibrary="/opt/eagle/lbr/con-amp.lbr" +UsedLibrary="/opt/eagle/lbr/con-amphenol.lbr" +UsedLibrary="/opt/eagle/lbr/con-berg.lbr" +UsedLibrary="/opt/eagle/lbr/con-chipcard-iso7816.lbr" +UsedLibrary="/opt/eagle/lbr/con-coax.lbr" +UsedLibrary="/opt/eagle/lbr/con-conrad.lbr" +UsedLibrary="/opt/eagle/lbr/con-deutsch.lbr" +UsedLibrary="/opt/eagle/lbr/con-dil.lbr" +UsedLibrary="/opt/eagle/lbr/con-erni.lbr" +UsedLibrary="/opt/eagle/lbr/con-friwo.lbr" +UsedLibrary="/opt/eagle/lbr/con-harting-h.lbr" +UsedLibrary="/opt/eagle/lbr/con-harting-ml.lbr" +UsedLibrary="/opt/eagle/lbr/con-harting-v.lbr" +UsedLibrary="/opt/eagle/lbr/con-harting.lbr" +UsedLibrary="/opt/eagle/lbr/con-hirschmann.lbr" +UsedLibrary="/opt/eagle/lbr/con-jst.lbr" +UsedLibrary="/opt/eagle/lbr/con-lsta.lbr" +UsedLibrary="/opt/eagle/lbr/con-lstb.lbr" +UsedLibrary="/opt/eagle/lbr/con-lumberg.lbr" +UsedLibrary="/opt/eagle/lbr/con-molex.lbr" +UsedLibrary="/opt/eagle/lbr/con-panduit.lbr" +UsedLibrary="/opt/eagle/lbr/con-pc.lbr" +UsedLibrary="/opt/eagle/lbr/con-pc104.lbr" +UsedLibrary="/opt/eagle/lbr/con-phoenix-254.lbr" +UsedLibrary="/opt/eagle/lbr/con-phoenix-500.lbr" +UsedLibrary="/opt/eagle/lbr/con-phoenix-508.lbr" +UsedLibrary="/opt/eagle/lbr/con-ptr500.lbr" +UsedLibrary="/opt/eagle/lbr/con-rib.lbr" +UsedLibrary="/opt/eagle/lbr/con-subd.lbr" +UsedLibrary="/opt/eagle/lbr/con-thomas-betts.lbr" +UsedLibrary="/opt/eagle/lbr/con-vg.lbr" +UsedLibrary="/opt/eagle/lbr/con-wago-500.lbr" +UsedLibrary="/opt/eagle/lbr/con-wago-508.lbr" +UsedLibrary="/opt/eagle/lbr/con-wago.lbr" +UsedLibrary="/opt/eagle/lbr/con-weidmueller-sl35.lbr" +UsedLibrary="/opt/eagle/lbr/con-yamaichi.lbr" +UsedLibrary="/opt/eagle/lbr/crystal.lbr" +UsedLibrary="/opt/eagle/lbr/dc-dc-converter.lbr" +UsedLibrary="/opt/eagle/lbr/diode.lbr" +UsedLibrary="/opt/eagle/lbr/display-hp.lbr" +UsedLibrary="/opt/eagle/lbr/display-lcd.lbr" +UsedLibrary="/opt/eagle/lbr/ecl.lbr" +UsedLibrary="/opt/eagle/lbr/exar.lbr" +UsedLibrary="/opt/eagle/lbr/fiber-optic-hp.lbr" +UsedLibrary="/opt/eagle/lbr/fiber-optic-siemens.lbr" +UsedLibrary="/opt/eagle/lbr/fifo.lbr" +UsedLibrary="/opt/eagle/lbr/frames.lbr" +UsedLibrary="/opt/eagle/lbr/fuse.lbr" +UsedLibrary="/opt/eagle/lbr/heatsink.lbr" +UsedLibrary="/opt/eagle/lbr/holes.lbr" +UsedLibrary="/opt/eagle/lbr/ic-package.lbr" +UsedLibrary="/opt/eagle/lbr/inductor-coilcraft.lbr" +UsedLibrary="/opt/eagle/lbr/inductor-neosid.lbr" +UsedLibrary="/opt/eagle/lbr/inductors.lbr" +UsedLibrary="/opt/eagle/lbr/isd.lbr" +UsedLibrary="/opt/eagle/lbr/jumper.lbr" +UsedLibrary="/opt/eagle/lbr/lattice.lbr" +UsedLibrary="/opt/eagle/lbr/led.lbr" +UsedLibrary="/opt/eagle/lbr/linear-technology.lbr" +UsedLibrary="/opt/eagle/lbr/linear.lbr" +UsedLibrary="/opt/eagle/lbr/marks.lbr" +UsedLibrary="/opt/eagle/lbr/maxim.lbr" +UsedLibrary="/opt/eagle/lbr/memory-hitachi.lbr" +UsedLibrary="/opt/eagle/lbr/memory-idt.lbr" +UsedLibrary="/opt/eagle/lbr/memory-motorola-dram.lbr" +UsedLibrary="/opt/eagle/lbr/memory-nec.lbr" +UsedLibrary="/opt/eagle/lbr/memory-samsung.lbr" +UsedLibrary="/opt/eagle/lbr/memory-sram.lbr" +UsedLibrary="/opt/eagle/lbr/memory.lbr" +UsedLibrary="/opt/eagle/lbr/micro-fujitsu.lbr" +UsedLibrary="/opt/eagle/lbr/micro-harris.lbr" +UsedLibrary="/opt/eagle/lbr/micro-intel.lbr" +UsedLibrary="/opt/eagle/lbr/micro-mc68000.lbr" +UsedLibrary="/opt/eagle/lbr/micro-motorola.lbr" +UsedLibrary="/opt/eagle/lbr/micro-philips.lbr" +UsedLibrary="/opt/eagle/lbr/micro-siemens.lbr" +UsedLibrary="/opt/eagle/lbr/microchip.lbr" +UsedLibrary="/opt/eagle/lbr/micronas.lbr" +UsedLibrary="/opt/eagle/lbr/murata-filter.lbr" +UsedLibrary="/opt/eagle/lbr/nec-lqfp100-pack.lbr" +UsedLibrary="/opt/eagle/lbr/opto-honeywell-3000.lbr" +UsedLibrary="/opt/eagle/lbr/opto-honeywell-4000.lbr" +UsedLibrary="/opt/eagle/lbr/opto-honeywell.lbr" +UsedLibrary="/opt/eagle/lbr/opto-micro-linear.lbr" +UsedLibrary="/opt/eagle/lbr/opto-trans-siemens.lbr" +UsedLibrary="/opt/eagle/lbr/opto-transmittter-hp.lbr" +UsedLibrary="/opt/eagle/lbr/optocoupler.lbr" +UsedLibrary="/opt/eagle/lbr/pal.lbr" +UsedLibrary="/opt/eagle/lbr/piher.lbr" +UsedLibrary="/opt/eagle/lbr/pinhead.lbr" +UsedLibrary="/opt/eagle/lbr/plcc-socket.lbr" +UsedLibrary="/opt/eagle/lbr/pld-intel.lbr" +UsedLibrary="/opt/eagle/lbr/pot-vitrohm.lbr" +UsedLibrary="/opt/eagle/lbr/pot-xicor.lbr" +UsedLibrary="/opt/eagle/lbr/pot.lbr" +UsedLibrary="/opt/eagle/lbr/ptc-ntc.lbr" +UsedLibrary="/opt/eagle/lbr/rcl.lbr" +UsedLibrary="/opt/eagle/lbr/rectifier.lbr" +UsedLibrary="/opt/eagle/lbr/relay.lbr" +UsedLibrary="/opt/eagle/lbr/resistor-bourns.lbr" +UsedLibrary="/opt/eagle/lbr/resistor-dil.lbr" +UsedLibrary="/opt/eagle/lbr/resistor-net.lbr" +UsedLibrary="/opt/eagle/lbr/resistor-power.lbr" +UsedLibrary="/opt/eagle/lbr/resistor-ruf.lbr" +UsedLibrary="/opt/eagle/lbr/resistor-shunt.lbr" +UsedLibrary="/opt/eagle/lbr/resistor-sil.lbr" +UsedLibrary="/opt/eagle/lbr/rf-micro-devices.lbr" +UsedLibrary="/opt/eagle/lbr/semicon-smd-ipc.lbr" +UsedLibrary="/opt/eagle/lbr/sensor-heraeus.lbr" +UsedLibrary="/opt/eagle/lbr/smd-ipc.lbr" +UsedLibrary="/opt/eagle/lbr/smd-special.lbr" +UsedLibrary="/opt/eagle/lbr/solpad.lbr" +UsedLibrary="/opt/eagle/lbr/special.lbr" +UsedLibrary="/opt/eagle/lbr/st-microelectronics.lbr" +UsedLibrary="/opt/eagle/lbr/supply1.lbr" +UsedLibrary="/opt/eagle/lbr/supply2.lbr" +UsedLibrary="/opt/eagle/lbr/switch-dil.lbr" +UsedLibrary="/opt/eagle/lbr/switch-misc.lbr" +UsedLibrary="/opt/eagle/lbr/switch-omron.lbr" +UsedLibrary="/opt/eagle/lbr/switch.lbr" +UsedLibrary="/opt/eagle/lbr/telcom.lbr" +UsedLibrary="/opt/eagle/lbr/telefunken.lbr" +UsedLibrary="/opt/eagle/lbr/testpad.lbr" +UsedLibrary="/opt/eagle/lbr/texas.lbr" +UsedLibrary="/opt/eagle/lbr/trafo-siemens.lbr" +UsedLibrary="/opt/eagle/lbr/trafo.lbr" +UsedLibrary="/opt/eagle/lbr/transistor-fet.lbr" +UsedLibrary="/opt/eagle/lbr/transistor-npn.lbr" +UsedLibrary="/opt/eagle/lbr/transistor-pnp.lbr" +UsedLibrary="/opt/eagle/lbr/transistor-power.lbr" +UsedLibrary="/opt/eagle/lbr/transistor-small-signal.lbr" +UsedLibrary="/opt/eagle/lbr/triac.lbr" +UsedLibrary="/opt/eagle/lbr/uln-udn.lbr" +UsedLibrary="/opt/eagle/lbr/v-reg-micrel.lbr" +UsedLibrary="/opt/eagle/lbr/v-reg.lbr" +UsedLibrary="/opt/eagle/lbr/varistor.lbr" +UsedLibrary="/opt/eagle/lbr/wafer-scale-psd.lbr" +UsedLibrary="/opt/eagle/lbr/wirepad.lbr" +UsedLibrary="/opt/eagle/lbr/zetex.lbr" +UsedLibrary="/opt/eagle/lbr/zilog.lbr" +UsedLibrary="/home/lg/eagle/gl-002.lbr" + +[Win_1] +Type="Schematic Editor" +Loc="320 307 919 706" +State=0 +Number=1 +File="esr-meter.sch" +View="-45752 -52183 2213558 2541525" +WireWidths=" 0 3048 6096 8128 10160 12700 14224 16764 17780 19304 21844 25400 38100 64516 4064 1524" +PadDiameters=" 2540 3048 4064 6096 8128 10160 12700 14224 16764 17780 19304 21844 25400 38100 64516 0" +PadDrills=" 5000 6000 7000 9000 10000 11000 12000 13000 14000 15000 16000 20000 22000 28000 32000 8000" +ViaDiameters=" 2540 3048 4064 6096 8128 10160 12700 14224 16764 17780 19304 21844 25400 38100 64516 0" +ViaDrills=" 5000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 20000 22000 28000 32000 6000" +HoleDrills=" 5000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 20000 22000 28000 32000 6000" +TextSizes=" 2540 3048 4064 6096 8128 10160 12700 14224 16764 19304 21844 25400 38100 50800 64516 17780" +PolygonSpacings=" 2540 3048 4064 6096 8128 10160 14224 16764 17780 19304 21844 25400 38100 50800 64516 12700" +PolygonIsolates=" 2540 3048 4064 6096 8128 10160 12700 14224 16764 17780 19304 21844 25400 38100 64516 0" +MiterRadiuss=" 2540 3175 6350 12700 25400 10000 20000 25000 50000 75000 100000 0" +SmdSizes=" 3048 1524 4064 2032 6096 3048 8128 4064 10160 5080 12700 6604 14224 7112 16764 8128 17780 9144 19304 9652 21844 10668 25400 12700 38100 19304 50800 25400 64516 32512 12700 6350" +WireBend=0 +WireBendSet=31 +WireCap=1 +MiterStyle=0 +PadShape=0 +ViaShape=0 +PolygonPour=0 +PolygonRank=7 +PolygonThermals=1 +PolygonOrphans=0 +TextRatio=8 +PinDirection=3 +PinFunction=0 +PinLength=2 +PinVisible=3 +SwapLevel=0 +ArcDirection=0 +AddLevel=2 +PadsSameType=0 +Layer=91 +Sheet=1 + +[Win_2] +Type="Control Panel" +Loc="21 369 955 853" +State=2 +Number=0 + +[Desktop] +Screen="1280 1024" +Window="Win_1" +Window="Win_2" diff --git a/ESR-meter/esr-meter.brd b/ESR-meter/esr-meter.brd new file mode 100644 index 0000000..fe42a55 Binary files /dev/null and b/ESR-meter/esr-meter.brd differ diff --git a/ESR-meter/esr-meter.erc b/ESR-meter/esr-meter.erc new file mode 100644 index 0000000..9ab1553 --- /dev/null +++ b/ESR-meter/esr-meter.erc @@ -0,0 +1,10 @@ +EAGLE Version 4.13r1 Copyright (c) 1988-2004 CadSoft + +Electrical Rule Check for /home/lg/eagle/ESR-meter/esr-meter.sch at 3/07/2005 21:58:17 + +WARNING: Sheet 1/1: POWER Pin IC1P VCC connected to +5V + +Board and schematic are consistent + + 0 errors + 1 warnings diff --git a/ESR-meter/esr-meter.pro b/ESR-meter/esr-meter.pro new file mode 100644 index 0000000..487f5b6 --- /dev/null +++ b/ESR-meter/esr-meter.pro @@ -0,0 +1,25 @@ +EAGLE AutoRouter Statistics: + +Job : /home/lg/eagle/ESR-meter/esr-meter.brd + +Start at : 21:58:14 ( 3/07/2005) +End at : 21:58:14 ( 3/07/2005) +Elapsed time : 00:00:00 + +Signals : 19 RoutingGrid: 50 mil Layers: 1 +Connections : 58 predefined: 58 ( 0 Vias ) + +Router memory : 7128 + +Passname : Route Optimize1 Optimize2 Optimize3 Optimize4 + +Time per pass : 00:00:00 00:00:00 00:00:00 00:00:00 00:00:00 +Number of Ripups : 0 0 0 0 0 +max. Level : 0 0 0 0 0 +max. Total : 0 0 0 0 0 + +Routed : 0 0 0 0 0 +Vias : 0 0 0 0 0 +Resolution : 100.0 % 100.0 % 100.0 % 100.0 % 100.0 % + +Final : 100.0% finished diff --git a/ESR-meter/esr-meter.sch b/ESR-meter/esr-meter.sch new file mode 100644 index 0000000..fc3a430 Binary files /dev/null and b/ESR-meter/esr-meter.sch differ diff --git a/ESR-meter/esrbuildit.png b/ESR-meter/esrbuildit.png new file mode 100644 index 0000000..21da1c6 Binary files /dev/null and b/ESR-meter/esrbuildit.png differ diff --git a/ESR-meter/esrpcb.png b/ESR-meter/esrpcb.png new file mode 100644 index 0000000..71446fa Binary files /dev/null and b/ESR-meter/esrpcb.png differ diff --git a/ESR-meter/esrschematic.png b/ESR-meter/esrschematic.png new file mode 100644 index 0000000..3e74b3c Binary files /dev/null and b/ESR-meter/esrschematic.png differ diff --git a/ESR-meter/esrxray.png b/ESR-meter/esrxray.png new file mode 100644 index 0000000..946bd9c Binary files /dev/null and b/ESR-meter/esrxray.png differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/esrbuildit.png b/esrbuildit.png new file mode 100644 index 0000000..21da1c6 Binary files /dev/null and b/esrbuildit.png differ diff --git a/esrmeter-9mar05.tar b/esrmeter-9mar05.tar new file mode 100644 index 0000000..3f19124 Binary files /dev/null and b/esrmeter-9mar05.tar differ diff --git a/esrschematic.png b/esrschematic.png new file mode 100644 index 0000000..3e74b3c Binary files /dev/null and b/esrschematic.png differ