diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..c07424ebe --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.mp4 +wip +venv +_autosave* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..4cf45aa23 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,51 @@ +[submodule "libraries/FastLED"] + path = libraries/FastLED + url = https://github.com/FastLED/FastLED.git +[submodule "libraries/X113647Stepper"] + path = libraries/X113647Stepper + url = https://github.com/tardate/X113647Stepper.git +[submodule "libraries/TextFinder"] + path = libraries/TextFinder + url = https://github.com/tardate/TextFinder.git +[submodule "libraries/FlexiTimer2"] + path = libraries/FlexiTimer2 + url = https://github.com/wimleers/flexitimer2.git +[submodule "libraries/RF24"] + path = libraries/RF24 + url = https://github.com/maniacbug/RF24 +[submodule "libraries/RadioHead"] + path = libraries/RadioHead + url = https://github.com/tardate/RadioHead +[submodule "libraries/Adafruit_SSD1306"] + path = libraries/Adafruit_SSD1306 + url = https://github.com/adafruit/Adafruit_SSD1306 +[submodule "libraries/Adafruit-GFX-Library"] + path = libraries/Adafruit-GFX-Library + url = https://github.com/adafruit/Adafruit-GFX-Library +[submodule "libraries/LedControl"] + path = libraries/LedControl + url = https://github.com/wayoda/LedControl +[submodule "libraries/Rotary"] + path = libraries/Rotary + url = https://github.com/brianlow/Rotary +[submodule "libraries/u8glib"] + path = libraries/u8glib + url = https://github.com/olikraus/U8glib_Arduino +[submodule "libraries/DS3232RTC"] + path = libraries/DS3232RTC + url = https://github.com/JChristensen/DS3232RTC +[submodule "libraries/OneWire"] + path = libraries/OneWire + url = https://github.com/PaulStoffregen/OneWire +[submodule "libraries/Cordwood"] + path = libraries/Cordwood + url = https://github.com/aaronjasso/Cordwood +[submodule "libraries/LRAS1130"] + path = libraries/LRAS1130 + url = https://github.com/LuckyResistor/LRAS1130 +[submodule "libraries/EnableInterrupt"] + path = libraries/EnableInterrupt + url = https://github.com/GreyGnome/EnableInterrupt +[submodule "libraries/Radio"] + path = libraries/Radio + url = https://github.com/mathertel/Radio.git diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/.ruby-gemset b/.ruby-gemset new file mode 100644 index 000000000..e1df796ab --- /dev/null +++ b/.ruby-gemset @@ -0,0 +1 @@ +littlearduinoprojects \ No newline at end of file diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 000000000..6b4d15773 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +2.2.3 \ No newline at end of file diff --git a/BoldportClub/Emergency/.catalog_metadata b/BoldportClub/Emergency/.catalog_metadata new file mode 100644 index 000000000..1920bf9c1 --- /dev/null +++ b/BoldportClub/Emergency/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#257", + "name": "BoldportClub/Emergency", + "description": "pimp the Boldport Club Emergency kit (Project #2) .. now a LED blinky with 3 passives and a transistor (Esaki Effect)", + "categories": "Boldport, PCB Design, Oscillators", + "relative_path": "BoldportClub/Emergency" +} \ No newline at end of file diff --git a/BoldportClub/Emergency/Emergency.fzz b/BoldportClub/Emergency/Emergency.fzz new file mode 100644 index 000000000..8350e8899 Binary files /dev/null and b/BoldportClub/Emergency/Emergency.fzz differ diff --git a/BoldportClub/Emergency/README.md b/BoldportClub/Emergency/README.md new file mode 100644 index 000000000..40b6f1b1e --- /dev/null +++ b/BoldportClub/Emergency/README.md @@ -0,0 +1,95 @@ +# #257 Emergency + +Pimp the Boldport Club Emergency kit (Project #2) .. now a LED blinky with 3 passives and a transistor (Esaki Effect) + +Here's a quick video to show it working.. + +[![Build](./assets/Emergency_build.jpg?raw=true)](http://www.youtube.com/watch?v=PPUZth8RfCE) + + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +I joined the Boldport Club rather late, but manage to snaffle up the Emergency kit PCB in sale of ["Just Less the Perfect"](http://www.boldport.club/shop/product/437169103) boards. + +The tiny 'engineer superhero' emergency kit, second edition was Boldport Club Project #2. + +As originally intended, it is a kit with a few components and a nice travel case that will possibly save your engineering superhero status at some point! + +With all the components soldered into the (of course beautiful) PCB, it works as a battery/continuity tester (the LED lights up if you apply voltage) + +![Emergency_board_front](./assets/Emergency_board_front.jpg?raw=true) + +![Emergency_board_rear](./assets/Emergency_board_rear.jpg?raw=true) + + +### Circuit Modifications + +Since I'm working from scratch (PCB only - not the full kit), there's an obvious challenge to do something a bit different. + +@mehradzie asked on [Boldport Slack](https://boldportclub.slack.com) if it is possible to make it blink. Challenge accepted! + +I was actually thinking along similar lines, at first using a blinking "joule thief" circuit. But I just couldn't figure +how to get it to work within the constraints of the PCB. + +So then I turned to an interesting idea: Negative Differential Resistance (NDR) effect or Esaki Effect. Basically causing an +Emitter-Collector avalanche, a behaviour noted by Leo Esaki and exploited by many since to create interesting effects with +BJTs. + +After a bit of experimentation, I was able to get something to work with only a few liberties taken with the original PCB: + +* I had to accommodate larger capacitor. Anything over ~100µF is workable, but best effects achieved with 330µF electrolytic. I selected the smallest package I could find, but it is still a bit of a squeeze to fit it in where the capacitor should be. +* an NPN BJT replaces the n-channel MOSFET. I'm using an S9013. Note: yes, this is in "backwards" (emitter to +ve, collector to -ve) +* moved one resistor to make wiring easier +* cut and rewired a few traces + +Transistor selection is crucial, as the blinking effect is really exploiting a "defect" in the transistor. +Of all the small-signal NPN BJTs I had on hand, only two worked at all, or at reasonable voltages (S9013, S9018). +I went with the S9013 because I could excite the effect conveniently around 9V. + +The revised circuit essentially works like this: + +* battery charges the capacitor +* over a certain voltage, the emitter-collector junction experiences an avalanche and inrush of current from the capacitor +* the LED turns on +* as the capacitor discharges, the avalanche breaks down and the transistor junction closes +* repeat... + +Here is a scope capture from a breadboard build/test: + +* CH1 (yellow; AC-coupled): capacitor voltage +* CH2 (blue; AC-coupled): collector (LED anode) voltage + +![scope](./assets/scope.gif?raw=true) + + +## Construction + +![Breadboard](./assets/Emergency_bb.jpg?raw=true) + +![Schematic](./assets/Emergency_schematic.jpg?raw=true) + +Testing on a breadboard: + +![Emergency_breadboard](./assets/Emergency_breadboard.jpg?raw=true) + +Final layout and component selection. Build complete: + +![Emergency_layout](./assets/Emergency_layout.jpg?raw=true) + +Power on, and it's blinking! Why? Because! + +![Build](./assets/Emergency_build.jpg?raw=true) + +## Credits and References +* [Emergency](http://www.boldport.com/blog/2014/02/the-tiny-engineer-superhero-emergency.html) - on the Boldport blog +* [Emergency](http://www.boldport.club/shop/product/235066412) - in the Boldport shop +* [Emergency](https://github.com/boldport/emergency) - OSH files on GitHub +* [Emergency](https://bitbucket.org/boldport/pcbmode/wiki/The%20tiny%20engineer%20superhero%20emergency%20kit%20assembly%20guide) - assembly guide +* [Emergency](http://community.boldport.club/projects/p02-emergency/) - club community site, packed with resources for the project +* [A Negative Differential Resistance Oscillator with a Negistor](http://jlnlabs.online.fr/cnr/negosc.htm) +* [Simplest LED Flasher Circuit](http://www.cappels.org/dproj/simplest_LED_flasher/Simplest_LED_Flasher_Circuit.html) +* [World's Simplest Single Transistor Oscillator - BJT with Negative Resistance](https://www.youtube.com/watch?v=rpGOKGrcpAk&t=335s) +* [Leo Esaki](https://en.wikipedia.org/wiki/Leo_Esaki) - wikipedia +* [..as mentioned on my blog](http://blog.tardate.com/2017/02/leap257-blinking-emergency.html) diff --git a/BoldportClub/Emergency/assets/Emergency_bb.jpg b/BoldportClub/Emergency/assets/Emergency_bb.jpg new file mode 100644 index 000000000..cedbc8929 Binary files /dev/null and b/BoldportClub/Emergency/assets/Emergency_bb.jpg differ diff --git a/BoldportClub/Emergency/assets/Emergency_board_front.jpg b/BoldportClub/Emergency/assets/Emergency_board_front.jpg new file mode 100755 index 000000000..5cd42c3c0 Binary files /dev/null and b/BoldportClub/Emergency/assets/Emergency_board_front.jpg differ diff --git a/BoldportClub/Emergency/assets/Emergency_board_rear.jpg b/BoldportClub/Emergency/assets/Emergency_board_rear.jpg new file mode 100755 index 000000000..148556477 Binary files /dev/null and b/BoldportClub/Emergency/assets/Emergency_board_rear.jpg differ diff --git a/BoldportClub/Emergency/assets/Emergency_breadboard.jpg b/BoldportClub/Emergency/assets/Emergency_breadboard.jpg new file mode 100755 index 000000000..1c5592600 Binary files /dev/null and b/BoldportClub/Emergency/assets/Emergency_breadboard.jpg differ diff --git a/BoldportClub/Emergency/assets/Emergency_build.jpg b/BoldportClub/Emergency/assets/Emergency_build.jpg new file mode 100755 index 000000000..f09c6c364 Binary files /dev/null and b/BoldportClub/Emergency/assets/Emergency_build.jpg differ diff --git a/BoldportClub/Emergency/assets/Emergency_layout.jpg b/BoldportClub/Emergency/assets/Emergency_layout.jpg new file mode 100755 index 000000000..3aa95d19c Binary files /dev/null and b/BoldportClub/Emergency/assets/Emergency_layout.jpg differ diff --git a/BoldportClub/Emergency/assets/Emergency_schematic.jpg b/BoldportClub/Emergency/assets/Emergency_schematic.jpg new file mode 100644 index 000000000..8ce677c18 Binary files /dev/null and b/BoldportClub/Emergency/assets/Emergency_schematic.jpg differ diff --git a/BoldportClub/Emergency/assets/scope.gif b/BoldportClub/Emergency/assets/scope.gif new file mode 100755 index 000000000..fc55155a2 Binary files /dev/null and b/BoldportClub/Emergency/assets/scope.gif differ diff --git a/BoldportClub/Juice/.catalog_metadata b/BoldportClub/Juice/.catalog_metadata new file mode 100644 index 000000000..d47dbbad6 --- /dev/null +++ b/BoldportClub/Juice/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#311", + "name": "BoldportClub/Juice", + "description": "building the Boldport Juice battery replacement kit (Project #12)", + "categories": "Boldport, PCB Design, Power", + "relative_path": "BoldportClub/Juice" +} \ No newline at end of file diff --git a/BoldportClub/Juice/Juice.fzz b/BoldportClub/Juice/Juice.fzz new file mode 100644 index 000000000..48ffcefae Binary files /dev/null and b/BoldportClub/Juice/Juice.fzz differ diff --git a/BoldportClub/Juice/README.md b/BoldportClub/Juice/README.md new file mode 100644 index 000000000..d287d8549 --- /dev/null +++ b/BoldportClub/Juice/README.md @@ -0,0 +1,77 @@ +# #311 Juice + +Building the Boldport Juice battery replacement kit (Project #12). + +![Build](./assets/Juice_build.jpg?raw=true) + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +Juice is a battery replacement kit that uses a pretty nifty set of AA, AAA, A23 and CR2032 inserts +to inject the required regulated power where a battery or two would normally be required. + +Power can be supplied via the micro USB connector, or any other power supply that can be clipped or screwed on to the body of the Juice. + +All the structural parts punch out from the classy PCB like a model plane kit;-) The box folds up and doubles as a "Juice box". + +![Juice_pcb_front](./assets/Juice_pcb_front.jpg?raw=true) + +![Juice_pcb_rear](./assets/Juice_pcb_rear.jpg?raw=true) + +![Juice_box](./assets/Juice_box.jpg?raw=true) + +![Juice_box_closed](./assets/Juice_box_closed.jpg?raw=true) + + +### Regulating the Supply + +The core of the kit is the ST LDF regulator, which has a very low-dropout voltage (500 mV max. at 1 A load). + +Resistor networks and the "chooser" plug allow switching between 1.5, 3V, 4.5V or an adjustable output. + +### Parts + +| Ref | Description | Qty | +|------|-----------------------------------------------------------|------| +| IC1 | Adjustable LDO regulator, ST LDFPT-TR | 1x | +| VR1 | 20KΩ trimmer, Bourns TC33X-2-203E | 1x | +| R1,3 | 1KΩ resistor, Multicomp MF25 1K | 2x | +| R2 | 3.3KΩ resistor, Multicomp MF25 3K3 | 1x | +| R4 | 5.6KΩ resistor, Multicomp MF25 5K6 | 1x | +| R5,6 | 1.2KΩ resistor, Multicomp MF25 1K2 | 2x | +| C1,2 | 2.2µF ceramic capacitor, Multicomp MCMLR50V225MY5V | 2x | +| C3 | 10µF electrolytic capacitor, Multicomp MCMR35V106M4X7 | 1x | +| LED1 | Orange LED, Kingbright L-9294SECK | 1x | +| | Micro USB connector, Multicomp MC001009 | 1x | +| | 6 contacts long pin header, Samtec TSW-106-22-T-S | 1x | +| | 3 contacts 2.54 mm SMD header, Samtec TSM-103-01-T-SH | 1x | + +![Juice_parts](./assets/Juice_parts.jpg?raw=true) + +## Construction + +![Schematic](./assets/Juice_schematic.jpg?raw=true) + +![Build](./assets/Juice_build.jpg?raw=true) + +![Juice_build_front](./assets/Juice_build_front.jpg?raw=true) +![Juice_build_rear](./assets/Juice_build_rear.jpg?raw=true) + +The SS Juice with CR2032 adapter: + +![Juice_complete_cr2032](./assets/Juice_complete_cr2032.jpg?raw=true) + +The SS Juice with A-series battery adapters. + +![Juice_complete_a_series](./assets/Juice_complete_a_series.jpg?raw=true) + +Note the jumper to allow multiple batteries to be replaced in series. +Here's the Juice replacing a 2xAA battery holder: + +![Juice_2xAA_replacement](./assets/Juice_2xAA_replacement.jpg?raw=true) + +## Credits and References +* [ST LDF info/datasheet](http://www.st.com/content/st_com/en/products/power-management/linear-voltage-regulators/low-dropout-ldo-linear-regulators/ldf.html) +* [Boldport Juice](https://www.boldport.com/products/juice) - official product page +* [..as mentioned on my blog](http://blog.tardate.com/2017/05/leap311-the-boldport-club-juice.html) diff --git a/BoldportClub/Juice/assets/Juice_2xAA_replacement.jpg b/BoldportClub/Juice/assets/Juice_2xAA_replacement.jpg new file mode 100755 index 000000000..b3782ce38 Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_2xAA_replacement.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_box.jpg b/BoldportClub/Juice/assets/Juice_box.jpg new file mode 100755 index 000000000..b67dac89a Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_box.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_box_closed.jpg b/BoldportClub/Juice/assets/Juice_box_closed.jpg new file mode 100755 index 000000000..77e38aa3e Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_box_closed.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_build.jpg b/BoldportClub/Juice/assets/Juice_build.jpg new file mode 100755 index 000000000..8876e4335 Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_build.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_build_front.jpg b/BoldportClub/Juice/assets/Juice_build_front.jpg new file mode 100755 index 000000000..4b64e3c04 Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_build_front.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_build_rear.jpg b/BoldportClub/Juice/assets/Juice_build_rear.jpg new file mode 100755 index 000000000..59746f2dd Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_build_rear.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_complete_a_series.jpg b/BoldportClub/Juice/assets/Juice_complete_a_series.jpg new file mode 100755 index 000000000..8876e4335 Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_complete_a_series.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_complete_cr2032.jpg b/BoldportClub/Juice/assets/Juice_complete_cr2032.jpg new file mode 100755 index 000000000..8f2d3261e Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_complete_cr2032.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_parts.jpg b/BoldportClub/Juice/assets/Juice_parts.jpg new file mode 100755 index 000000000..1d043de01 Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_parts.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_pcb_front.jpg b/BoldportClub/Juice/assets/Juice_pcb_front.jpg new file mode 100755 index 000000000..632237f5f Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_pcb_front.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_pcb_rear.jpg b/BoldportClub/Juice/assets/Juice_pcb_rear.jpg new file mode 100755 index 000000000..94234739b Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_pcb_rear.jpg differ diff --git a/BoldportClub/Juice/assets/Juice_schematic.jpg b/BoldportClub/Juice/assets/Juice_schematic.jpg new file mode 100644 index 000000000..c5f0dc58c Binary files /dev/null and b/BoldportClub/Juice/assets/Juice_schematic.jpg differ diff --git a/BoldportClub/Pease/.catalog_metadata b/BoldportClub/Pease/.catalog_metadata new file mode 100644 index 000000000..bbdf0517f --- /dev/null +++ b/BoldportClub/Pease/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#256", + "name": "BoldportClub/Pease", + "description": "a Bob Pease tribute, LM331 voltage-to-frequency kit from The Boldport Club (Project #1)", + "categories": "Boldport, PCB Design, LM331", + "relative_path": "BoldportClub/Pease" +} \ No newline at end of file diff --git a/BoldportClub/Pease/Pease.fzz b/BoldportClub/Pease/Pease.fzz new file mode 100644 index 000000000..a390707b7 Binary files /dev/null and b/BoldportClub/Pease/Pease.fzz differ diff --git a/BoldportClub/Pease/README.md b/BoldportClub/Pease/README.md new file mode 100644 index 000000000..18776c5f4 --- /dev/null +++ b/BoldportClub/Pease/README.md @@ -0,0 +1,142 @@ +# #256 Pease + +A Bob Pease tribute, LM331 voltage-to-frequency kit from The Boldport Club (Project #1). + +Here's a quick demo video to show it works.. + +[![Build](./assets/Pease_build.jpg?raw=true)](http://www.youtube.com/watch?v=-JQLJ-RI_1A) + + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +The Pease is a tribute to the legendary analogue designer Bob Pease. + +> 'My favorite programming language is... solder' –Bob Pease + +It is another beautiful PCB from the Bolport Club, and is a great +excuse to find out more about the featured chip - the LM331 voltage to frequency converter. + +I joined the Boldport Club rather late, and missed out on the original Pease kit (now out of stock). +But I did manage to snaffle the PCB in sale of ["Just Less the Perfect"](http://www.boldport.club/shop/product/437169103) boards. +Sweet! + +![Pease_board_front](./assets/Pease_board_front.jpg?raw=true) + +### About the LM331 + +Although the LM331 is used here in its basic voltage-to-frequency converter mode, +it is actually quite a bit more versatile, with applications in: + +* Voltage to Frequency Conversions +* Frequency to Voltage Conversions +* Remote-Sensor Monitoring +* Tachometers + +See the [LM331 Datasheet](http://www.ti.com/lit/ds/symlink/lm331.pdf) for more. + +### Kit Modifications + + +Since I was kit-less, I decided to experiment a bit. Firstly, I'm using a 20kΩ LDR for input rather than +a phototransistor. Secondly, after testing the original circuit on a breadboard, I decided to slow down the frequency. + +* the original runs at hundreds of kHz, so acts like a PWM LED dimmer +* I pulled the operating frequency down to 4-10 Hz, so it visibly blinks + +The end result is a light/voltage controlled "blinky". Depending on the potentiometer trim, it will: + +* stay "off" in bright light +* start to blink at ~10Hz with a very low duty cycle (~1%) as light levels drop +* blink hard at <7Hz with high duty cycle (50% and over) in dark conditions + +The specific component changes (with reference to the schematic below): + +| Ref | Original | Replacement | Rationale | +|-----|----------|-------------|----------------------------------------------------------------------| +| R6 | 330Ω | 220Ω | a brighter LED | +| R1 | 6.81kΩ | 1MΩ | massively reduce base frequency | +| C1 | 330pF | 100nF | massively reduce base frequency | +| C2 | 1nF | 1µF | achieve greater duty cycles at the reduced frequency | +| S1 | Vishay BPW96C Phototransistor | 20kΩ LDR | ..because I didn't have a phototransistor on-hand | + +The particular LDR used has a range of about 200Ω (bright light) to 20kΩ (dark). + +The component selection means the board works happily from 5-9V. +I repurposed an old mouse USB lead as a 5V USB power supply connector for the board. + + +### The Build + +No unboxing this time - a pity, as the original kit packaging looks really neat. + + +Testing the circuit on a breadboard to experiment with component values.. + +![build_breadboard](./assets/build_breadboard.jpg?raw=true) + +Final component selection.. + +![build_components](./assets/build_components.jpg?raw=true) + +Build complete, front: + +![build_complete_front](./assets/build_complete_front.jpg?raw=true) + +Finished, around the back... + +* hmm, still trying to get perfectly round globules of solder. +* Hot glue to the rescue for securing the USB power connector. Is that allowed on a Bolport Club kit???! + +![build_complete_back](./assets/build_complete_back.jpg?raw=true) + +### Performance + +Obviously, ambient light conditions and the trim of the pot alter the circuit performance, but here are some scope traces +for roughly "light" and "dark" situations. + +#### Bright Light - Original R/C components + +High frequency 175kHz; duty cycle ~40% + +![scope_original_light](./assets/scope_original_light.gif?raw=true) + +#### In Darkness - Original R/C components + +Frequency reduced to ~ 30kHz, and duty cycle over 80%.. + +![scope_original_dark](./assets/scope_original_dark.gif?raw=true) + + + +#### Bright Light - Replacement R/C components + +Low frequency 9 Hz, and low duty cycle <5% + +![scope_revised_light](./assets/scope_revised_light.gif?raw=true) + +#### In Darkness - Replacement R/C components + +Frequency reduced to ~4 Hz, and duty cycle over 50%.. + +![scope_revised_dark](./assets/scope_revised_dark.gif?raw=true) + + +## Construction + +![Breadboard](./assets/Pease_bb.jpg?raw=true) + +![Schematic](./assets/Pease_schematic.jpg?raw=true) + +![Build](./assets/Pease_build.jpg?raw=true) + +## Credits and References +* [Pease](http://www.boldport.club/shop/product/206712811) - in the Boldport shop +* [Pease](http://www.boldport.com/products/pease-second-edition/) - project page +* [Pease](https://github.com/boldport/pease-2ed) - OSH files on GitHub +* [Pease](http://community.boldport.club/projects/p01-pease/) - club community site, packed with resources for the project +* [LM331 Datasheet](http://www.ti.com/lit/ds/symlink/lm331.pdf) +* ["Just Less the Perfect"](http://www.boldport.club/shop/product/437169103) - where you can still obtain the Pease board +* [Bob Pease](https://en.wikipedia.org/wiki/Bob_Pease) - wikipedia +* [..as mentioned on my blog](http://lblog.tardate.com/2017/02/leap256-the-boldportclub-pease.html) diff --git a/BoldportClub/Pease/assets/Pease_bb.jpg b/BoldportClub/Pease/assets/Pease_bb.jpg new file mode 100644 index 000000000..0f9f5eaae Binary files /dev/null and b/BoldportClub/Pease/assets/Pease_bb.jpg differ diff --git a/BoldportClub/Pease/assets/Pease_board_front.jpg b/BoldportClub/Pease/assets/Pease_board_front.jpg new file mode 100755 index 000000000..d2c3f9974 Binary files /dev/null and b/BoldportClub/Pease/assets/Pease_board_front.jpg differ diff --git a/BoldportClub/Pease/assets/Pease_build.jpg b/BoldportClub/Pease/assets/Pease_build.jpg new file mode 100755 index 000000000..33152a376 Binary files /dev/null and b/BoldportClub/Pease/assets/Pease_build.jpg differ diff --git a/BoldportClub/Pease/assets/Pease_schematic.jpg b/BoldportClub/Pease/assets/Pease_schematic.jpg new file mode 100644 index 000000000..6d92c1898 Binary files /dev/null and b/BoldportClub/Pease/assets/Pease_schematic.jpg differ diff --git a/BoldportClub/Pease/assets/build_breadboard.jpg b/BoldportClub/Pease/assets/build_breadboard.jpg new file mode 100755 index 000000000..7a749f906 Binary files /dev/null and b/BoldportClub/Pease/assets/build_breadboard.jpg differ diff --git a/BoldportClub/Pease/assets/build_complete_back.jpg b/BoldportClub/Pease/assets/build_complete_back.jpg new file mode 100755 index 000000000..ff8a1d432 Binary files /dev/null and b/BoldportClub/Pease/assets/build_complete_back.jpg differ diff --git a/BoldportClub/Pease/assets/build_complete_front.jpg b/BoldportClub/Pease/assets/build_complete_front.jpg new file mode 100755 index 000000000..0f4be732b Binary files /dev/null and b/BoldportClub/Pease/assets/build_complete_front.jpg differ diff --git a/BoldportClub/Pease/assets/build_components.jpg b/BoldportClub/Pease/assets/build_components.jpg new file mode 100755 index 000000000..9c81da156 Binary files /dev/null and b/BoldportClub/Pease/assets/build_components.jpg differ diff --git a/BoldportClub/Pease/assets/scope_original_dark.gif b/BoldportClub/Pease/assets/scope_original_dark.gif new file mode 100755 index 000000000..854defced Binary files /dev/null and b/BoldportClub/Pease/assets/scope_original_dark.gif differ diff --git a/BoldportClub/Pease/assets/scope_original_light.gif b/BoldportClub/Pease/assets/scope_original_light.gif new file mode 100755 index 000000000..d6790fe0d Binary files /dev/null and b/BoldportClub/Pease/assets/scope_original_light.gif differ diff --git a/BoldportClub/Pease/assets/scope_revised_dark.gif b/BoldportClub/Pease/assets/scope_revised_dark.gif new file mode 100755 index 000000000..99fac42eb Binary files /dev/null and b/BoldportClub/Pease/assets/scope_revised_dark.gif differ diff --git a/BoldportClub/Pease/assets/scope_revised_light.gif b/BoldportClub/Pease/assets/scope_revised_light.gif new file mode 100755 index 000000000..b34d49b71 Binary files /dev/null and b/BoldportClub/Pease/assets/scope_revised_light.gif differ diff --git a/BoldportClub/PissOff/.catalog_metadata b/BoldportClub/PissOff/.catalog_metadata new file mode 100644 index 000000000..230d48036 --- /dev/null +++ b/BoldportClub/PissOff/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#290", + "name": "BoldportClub/PissOff", + "description": "an angry barking blue-in-the-face mad proximity sensor - Boldport Club Project #9, November 2016", + "categories": "Boldport, PCB Design, NXP", + "relative_path": "BoldportClub/PissOff" +} \ No newline at end of file diff --git a/BoldportClub/PissOff/PissOff.fzz b/BoldportClub/PissOff/PissOff.fzz new file mode 100644 index 000000000..4273b2572 Binary files /dev/null and b/BoldportClub/PissOff/PissOff.fzz differ diff --git a/BoldportClub/PissOff/README.md b/BoldportClub/PissOff/README.md new file mode 100644 index 000000000..9cf3415d1 --- /dev/null +++ b/BoldportClub/PissOff/README.md @@ -0,0 +1,284 @@ +# #290 PissOff + +An angry barking blue-in-the-face mad proximity sensor - Boldport Club Project #9, November 2016. + +Here's a quick video of it in action: + +[![Build](http://img.youtube.com/vi/Mg5YBKnUVIM/0.jpg)](http://www.youtube.com/watch?v=Mg5YBKnUVIM) + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +PissOff is the Boldport Club Project #9 (November 2016). +It is a collaboration with [LuckyResistor](https://luckyresistor.me/). + +The core subsystems of the project: + +* 3.3V linear regulator provides power for all components +* SD card adapter for audio file retrieval +* an infrared (IR) transmitter and receiver +* audio mixer and low-pass filter +* audio amplifier and speaker +* ARM Cortex-M0+ microprocessor to tie it all together + +![PissOff_arrival](./assets/PissOff_arrival.jpg?raw=true) + +### Parts + +| Ref | Item | Qty | +|-----|---------------------------------------------------------------------|------| +| IC2 | Kinetis E series, ARM Cortex-M0+ SOIC20 32 bit MCU, NXP MKE04Z8VWJ4 | x1 | +| IC1 | Audio power amplifier SOIC8 IC, TI TPA301DR | x1 | +| J9 | microSD SMD card socket, MOLEX 1051620101 | x1 | +| VR1 | 50KΩ SMD trimmer, Bourns TC33X-2-503E | x1 | +| | 29mm round speaker, Pro-signal ABS-205-RC | x1 | +| | 3xAAA battery holder with switch, TruPower SBH431-1AS | x1 | +| IC3 | 3.3V LDO voltage regulator, Diodes AP2210K-3.3TRG1 | x1 | +| D1 | 5mm IR phototransistor (black lens), Multicomp OFT-5301 | x1 | +| D2 | 5mm IR diode (blue lens), Kingbright L-7113F3BT | x1 | +| IC4 | n-channel SOT23 SMD MOSFET transistor, ON Semiconductor 2N7002ET1G | x1 | +| C4,6 | 0.1µF 0805 SMD ceramic capacitor, Multicomp MC0805B104K500CT | x2 | +| C1,2,3,5,7 | 1µF 0805 SMD ceramic capacitor, Multicomp MC0805F105Z160CT | x5 | +| R2,3,8,10,12,13,14,15,16,18,19 | 8.2KΩ 0805 SMD resistor, Multicomp MCWR08X8201FTL | x11 | +| R4,6,7,22,23 | 1KΩ 0805 SMD resistor, Multicomp MCWR08X1001FTL | x5 | +| R9,11,spare | 220Ω 0805 SMD resistor, Multicomp MCWR08X2200FTL | x3 | +| R1,5,20,21,24,25,26 | 47KΩ 0805 SMD resistor, Multicomp MCWR08X4702FTL | x7 | +| R17 | 33Ω through-hole resistor, Multicomp MF25 33R | x1 | +| D3 | Yellow 0805 SMD LED, Kingbright KPT-2012YC | x1 | +| | 20AWG wire, Belden 566-8020 | 14cm | + +![PissOff_parts](./assets/PissOff_parts.jpg?raw=true) + + +## Using Solder Paste and Stencils + +While you can hand-solder the project, it also presents a nice opportunity to experiment with reflow techniques. + +I found this great tutorial from sparkfun, everything I need to know to do a decent job of my first reflow with stencil: + +[![Stenciling Tutorial](http://img.youtube.com/vi/WDIqtGMROjM/0.jpg)](http://www.youtube.com/watch?v=WDIqtGMROjM) + +## Reflow Assembly + +I decided to try my hand at some reflow. I'm using the stencil from OSH Stencils, some 63/37 solder paste and a hand-held hot air gun. + +Stencil and board taped down with kapton in an ad-hoc PCB frame: + +![assembly_setup](./assets/assembly_setup.jpg?raw=true) + +Solder paste applied, all components mounted: + +![assembly_placement](./assets/assembly_placement.jpg?raw=true) + +After reflow with hand-held hot-air gun: + +![assembly_reflow](./assets/assembly_reflow.jpg?raw=true) + +At this stage I did a full continuity check on all soldered components to make sure the reflow had produced reliable connections. +I only found two problems: + +* one of the capacitors got dislodged at some point and wasn't properly connected on one terminal +* pin 11 of the microprocessor wasn't making a good connection + +No problem - couple of dabs of solder paste and reflow - now all good! + +Overall, the reflow assembly process worked brilliantly: + +* much faster than I could have done it by hand soldering with an iron +* I doubt I could have soldered the SD card socket by hand without a great deal of pain +* the final result looks great - almost like it came out of a factory + +Next to final assembly: + +* through-hole components with an iron +* hot-glue for the speaker and battery pack attachment + +And here it is, ready to test: + +![PissOff_build](./assets/PissOff_build.jpg?raw=true) + + +## Code + +The microcontroller comes preloaded with the correct code, and works out of the box. +To investigate the sources, or compile a derivitive work, see the [source code on GitHub](https://github.com/LuckyResistor/PissOff). + +First I'll get this started with the preloaded code... + +## Preparing the SD Card + +@fuchs has provided a [PissOff default disk image](https://luckyresistor.files.wordpress.com/2016/11/piss-off-disk.zip) +with a barking dog sound. +The RaspberryPi guide to +[installing disk images](https://www.raspberrypi.org/documentation/installation/installing-images/) +is a good resource for instructions no how to prepare the SD card. +I'm using a Mac, so [these are the appropriate instructions](https://www.raspberrypi.org/documentation/installation/installing-images/mac.md). + + +Using Disk Utility to verify and identify the SD card: + +![sd_verify](./assets/sd_verify.png?raw=true) + +### First Attempt + +I first tried with a very old 128MB microSD card, formatted as "MS-DOS (FAT)" in the MacOSX Disk Utility tool. + +Copying the disk image to the device: + +``` +$ diskutil list +... +/dev/disk3 + #: TYPE NAME SIZE IDENTIFIER + 0: FDisk_partition_scheme *127.1 MB disk3 + 1: DOS_FAT_32 UNTITLED 127.1 MB disk3s1 + +$ diskutil unmountDisk /dev/disk3 +Unmount of all volumes on disk3 was successful + +$ sudo dd bs=1m if=disk.img of=/dev/rdisk3 +0+1 records in +0+1 records out +342016 bytes transferred in 0.026458 secs (12926740 bytes/sec) + +$ diskutil eject /dev/disk3 +Disk /dev/disk3 ejected +``` + +So far so good, but no sound when I try it in the PissOff. + +Note: read on for two solutions and the underlying problem finally identified and resolved. + + +### Serial Debugging + +Time to connect up a serial debugger! +Serial connections are on J4. The PCB conveniently has offset holes, so a pin header can be simply inserted with press-fit. +I'm using a USB Serial adapter with a 3.3v logic level mode. Only 3 wire connections are required: + +| USD Serial Adapter | J4 | +|--------------------|-----| +| RXD | tx | +| TXD | rx | +| GND | gnd | + +Here is the adapter connected: + +![PissOff_serial_debug](./assets/PissOff_serial_debug.jpg?raw=true) + +The problem is immediately apparent. The disk is mounted but the processor can't read any blocks. +The [troubleshooting guide](https://luckyresistor.me/projects/boldport-pissoff/troubleshooting/) is a good reference for the debug interface. + +![sd_fail](./assets/sd_fail.png?raw=true) + + +### Second Attempt + +From reports I've seen in the [Boldport Slack](https://boldportclub.slack.com/), +not all SD cards work with the PissOff. The main factor seems to be older/smaller capacity cards that +probably don't support [SDHC](https://en.wikipedia.org/wiki/Secure_Digital#SDIO.2C_SDHC.2C_and_SDXC) correctly. + +So I tried again with a newer 64Gb SD card, formatted as "MS-DOS (FAT)" in the MacOSX Disk Utility tool: + +``` +$ diskutil list +... +/dev/disk3 + #: TYPE NAME SIZE IDENTIFIER + 0: GUID_partition_scheme *67.1 GB disk3 + 1: EFI EFI 209.7 MB disk3s1 + 2: Microsoft Basic Data TEST 66.9 GB disk3s2 + +$ diskutil unmountDisk /dev/disk3 +Unmount of all volumes on disk3 was successful + +$ sudo dd bs=1m if=disk.img of=/dev/rdisk3 +0+1 records in +0+1 records out +342016 bytes transferred in 0.026458 secs (12926740 bytes/sec) + +$ diskutil eject /dev/disk3 +Disk /dev/disk3 ejected +``` + +And it works! Here's the serial debug output for an alarm sequence: + +![sd_success](./assets/sd_success.png?raw=true) + + +### Trying again with an old SDIO Card + + +Here's why the BoldportClub slack channel rules: the SD card support issue was finally resolved by @pastva: + +``` +I found why pissoff can't play files from small cards (2GB). +Serial debug revealed that READ_MULTIPLE_BLOCK (CMD18) returns error code. +I found that SDHC cards are addressed in terms of 512 byte blocks, non SDHC card expects byte address. +To fix it SDcard::startMultiRead method has to multiply startBlock by 512 for non SDHC cards (or << 9). +``` + + +Then @fuchs created a non-SDHC card image: [piss-off-disk-no-hc](./assets/piss-off-disk-no-hc.zip) + +I tried this image with the 128Mb SDIO card (that failed in my first attempt), and it works just fine! + +Copying the image to the SD card: + +``` +$ diskutil list +... +/dev/disk2 + #: TYPE NAME SIZE IDENTIFIER + 0: FDisk_partition_scheme *127.1 MB disk2 + 1: DOS_FAT_32 UNTITLED 127.1 MB disk2s1 +$ diskutil unmountDisk /dev/disk2 +Unmount of all volumes on disk2 was successful + +$ sudo dd bs=1m if=disk_non_hc.img of=/dev/rdisk2 +0+1 records in +0+1 records out +342016 bytes transferred in 0.274037 secs (1248064 bytes/sec) + +$ diskutil eject /dev/disk2 +Disk /dev/disk2 ejected +``` + +Successful initialisation and alarm with the new image on a very old 128Mb SD card: + +![sd_success_no_hc](./assets/sd_success_no_hc.png?raw=true) + +So it turns out my older (failing) SD cards only supported [SDIO, not SDHC](https://en.wikipedia.org/wiki/Secure_Digital#SDIO.2C_SDHC.2C_and_SDXC). + + +## Schematics + +The schematic is nicely documented on the card includedin the kit. Note two errata: + +* the IR LED is labelled D2 on the schematic but D5 on the PCB silkscreen +* IC2 pin labelling is a little off in the schematic: missing PTB4; PTB5,6,7 offset by one and an erroneous "Enable" label inserted + +[![Schematic-p1](https://static1.squarespace.com/static/539604e8e4b0d1f9ffe9ff0b/t/582744dd03596e58b6813648/1478968553339/?format=2500w)](https://github.com/boldport/pissoff/blob/master/docs/schematics.pdf) +[![Schematic-p2](https://static1.squarespace.com/static/539604e8e4b0d1f9ffe9ff0b/t/5827256ce3df28280c902e0c/1478960507819/?format=2500w)](https://github.com/boldport/pissoff/blob/master/docs/schematics.pdf) + +As part of verifying the circuit, I redrew the schematic in Fritzing: + +![Schematic](./assets/PissOff_schematic.jpg?raw=true) + + +## Credits and References +* [PissOff](http://www.boldport.club/shop/product/527975670) - in the Boldport shop +* [PissOff](http://boldport.com/pissoff) - project page +* [PissOff](https://github.com/boldport/pissoff) - OSH files on GitHub +* [PissOff](http://community.boldport.club/projects/p09-pissoff/) - club community site, packed with resources for the project +* [PissOff source code](https://github.com/LuckyResistor/PissOff) +* [PissOff default disk image](https://luckyresistor.files.wordpress.com/2016/11/piss-off-disk.zip) +* [installing disk images](https://www.raspberrypi.org/documentation/installation/installing-images/) +* [MicroSD](https://en.wikipedia.org/wiki/Secure_Digital#Transfer_modes) - wikipedia +* [SDIO, SDHC, and SDXC](https://en.wikipedia.org/wiki/Secure_Digital#SDIO.2C_SDHC.2C_and_SDXC) - wikipedia +* [MKE04Z8VWJ4 datasheet](https://parts.io/detail/222470347/MKE04Z8VWJ4) +* [TPA301DR datasheet](https://parts.io/detail/972012/TPA301DR) +* [AP2210K-3.3TRG1 datasheet](https://parts.io/detail/156066978/AP2210K-3.3TRG1) +* [2N7002ET1G datasheet](https://parts.io/detail/2137048/2N7002ET1G) +* [..as mentioned on my blog](http://blog.tardate.com/2017/05/leap290-the-boldport-club-pissoff.html) diff --git a/BoldportClub/PissOff/assets/PissOff_arrival.jpg b/BoldportClub/PissOff/assets/PissOff_arrival.jpg new file mode 100755 index 000000000..bf250b919 Binary files /dev/null and b/BoldportClub/PissOff/assets/PissOff_arrival.jpg differ diff --git a/BoldportClub/PissOff/assets/PissOff_build.jpg b/BoldportClub/PissOff/assets/PissOff_build.jpg new file mode 100755 index 000000000..9282f4da4 Binary files /dev/null and b/BoldportClub/PissOff/assets/PissOff_build.jpg differ diff --git a/BoldportClub/PissOff/assets/PissOff_parts.jpg b/BoldportClub/PissOff/assets/PissOff_parts.jpg new file mode 100755 index 000000000..f8a028c0e Binary files /dev/null and b/BoldportClub/PissOff/assets/PissOff_parts.jpg differ diff --git a/BoldportClub/PissOff/assets/PissOff_schematic.jpg b/BoldportClub/PissOff/assets/PissOff_schematic.jpg new file mode 100644 index 000000000..723e41a8d Binary files /dev/null and b/BoldportClub/PissOff/assets/PissOff_schematic.jpg differ diff --git a/BoldportClub/PissOff/assets/PissOff_serial_debug.jpg b/BoldportClub/PissOff/assets/PissOff_serial_debug.jpg new file mode 100755 index 000000000..faddec72c Binary files /dev/null and b/BoldportClub/PissOff/assets/PissOff_serial_debug.jpg differ diff --git a/BoldportClub/PissOff/assets/assembly_placement.jpg b/BoldportClub/PissOff/assets/assembly_placement.jpg new file mode 100755 index 000000000..94d729aee Binary files /dev/null and b/BoldportClub/PissOff/assets/assembly_placement.jpg differ diff --git a/BoldportClub/PissOff/assets/assembly_reflow.jpg b/BoldportClub/PissOff/assets/assembly_reflow.jpg new file mode 100755 index 000000000..685b57003 Binary files /dev/null and b/BoldportClub/PissOff/assets/assembly_reflow.jpg differ diff --git a/BoldportClub/PissOff/assets/assembly_setup.jpg b/BoldportClub/PissOff/assets/assembly_setup.jpg new file mode 100755 index 000000000..1c662a6a7 Binary files /dev/null and b/BoldportClub/PissOff/assets/assembly_setup.jpg differ diff --git a/BoldportClub/PissOff/assets/piss-off-disk-no-hc.zip b/BoldportClub/PissOff/assets/piss-off-disk-no-hc.zip new file mode 100644 index 000000000..89a9c7bf0 Binary files /dev/null and b/BoldportClub/PissOff/assets/piss-off-disk-no-hc.zip differ diff --git a/BoldportClub/PissOff/assets/sd_fail.png b/BoldportClub/PissOff/assets/sd_fail.png new file mode 100644 index 000000000..674628ac5 Binary files /dev/null and b/BoldportClub/PissOff/assets/sd_fail.png differ diff --git a/BoldportClub/PissOff/assets/sd_success.png b/BoldportClub/PissOff/assets/sd_success.png new file mode 100644 index 000000000..4bc61c7ff Binary files /dev/null and b/BoldportClub/PissOff/assets/sd_success.png differ diff --git a/BoldportClub/PissOff/assets/sd_success_no_hc.png b/BoldportClub/PissOff/assets/sd_success_no_hc.png new file mode 100644 index 000000000..1296862b0 Binary files /dev/null and b/BoldportClub/PissOff/assets/sd_success_no_hc.png differ diff --git a/BoldportClub/PissOff/assets/sd_verify.png b/BoldportClub/PissOff/assets/sd_verify.png new file mode 100644 index 000000000..b7dd1a841 Binary files /dev/null and b/BoldportClub/PissOff/assets/sd_verify.png differ diff --git a/BoldportClub/QSOPBreakout/.catalog_metadata b/BoldportClub/QSOPBreakout/.catalog_metadata new file mode 100644 index 000000000..aecd56ccd --- /dev/null +++ b/BoldportClub/QSOPBreakout/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#316", + "name": "BoldportClub/QSOPBreakout", + "description": "all about soldering and the Boldport Club QSOP breakout board", + "categories": "Boldport, Soldering", + "relative_path": "BoldportClub/QSOPBreakout" +} \ No newline at end of file diff --git a/BoldportClub/QSOPBreakout/README.md b/BoldportClub/QSOPBreakout/README.md new file mode 100644 index 000000000..62cafa130 --- /dev/null +++ b/BoldportClub/QSOPBreakout/README.md @@ -0,0 +1,175 @@ +# #316 QSOPBreakout + +All about soldering and the Boldport Club QSOP breakout board. + +![Build](./assets/QSOPBreakout_build.jpg?raw=true) + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +The QSOPBreakout was a special (read: beautiful!) board produced for the [BoldportClub](../) to help members practice +QSOP-24 soldering techniques for the [Touchy](../Touchy) project. + +QSOP: Quarter-size small-outline package, with pin spacing of 0.635mm. + +This is not a project in its own right, but I thought might be worthwhile using this as an excuse to consolidate +everything I've learned so far regarding soldering techniques. + +And secondly, perhaps there is something useful I can do with the QSOPBreakout board after all .. +other than use it as a breakout board of course. And it turns out there is .. see the [SolarPendulum](./SolarPendulum)! + +## All about Soldering + +It is worth acknowledging that there are two potentially conflicting perspectives on soldering: + +* it's a purely functional manufacturing process +* it is an essential craft in the creative process + +Most of the time, a good solder joint is all about mechanical and electrical conformity with the specification. +Repeatability, quality control and inspectability are paramount. + +But for hobbyists, artists and small-batch manufacturing, other considerations such as aesthetics may be more important. + +And if you've been around the Boldport Club, then perfect shiny solder domes may be the most important thing of all;-) + +Some other projects that touch on soldering techniques: + +* [LEAP#258 Electronics101/ClapSwitchKit2](../../Electronics101/ClapSwitchKit2) - kit build which I used to experiment with "perfect solder dome" technique +* [LEAP#171 Electronics101/SMDPracticeBoards](../../Electronics101/SMDPracticeBoards) - documenting a few other SMD practice boards that I've used + +## Soldering Tutorials + +There's some great tutorials on YouTube and around the net. Here are a few I've seen: + +* [Making beautiful solder points](https://www.youtube.com/watch?v=KXBbiXaq1ec) - boldport +* [EEVblog #186 - Soldering Tutorial Part 3 - Surface Mount](https://www.youtube.com/watch?v=b9FC9fAlfQE) +* [EEVblog #997 - How To Solder Surface Mount Components](https://www.youtube.com/watch?v=hoLf8gvvXXU) +* [The Ben Heck Show - Surface Mount Soldering Tips and Tricks](https://www.youtube.com/watch?v=f0KZbhvKqS0) +* [HowTo SMD Soldering](https://www.youtube.com/watch?v=z7Tu8NXu5UA) +* [HowTo: Drag Soldering Demo](https://www.youtube.com/watch?v=wUyetZ5RtPs) +* [sparkfun surface mount soldering tutorials](https://www.sparkfun.com/tutorials/category/2) + +## Functional Soldering + +What's the secret to good soldering? +It seems it is really just practice, and recognising that **everything** can make a difference: + +* thermal mass of the iron +* thermal mass of the board/component/traces being soldered +* iron temperature control +* tinned, suitable iron tip +* flux +* solder quality +* solder composition +* soldering technique +* cleanliness/preparation of the board +* substrate composition + +As long as you have an iron with good temperature control (or at least known temperature), then the factors I've found most significant are: + +* the solder you use +* keeping the iron tip clean/tinned/usable + +Regarding the solder: + +* lead-free solder is well-known to produce "dull" but sound joints +* the addition of silver (say 2%) helps both leaded and unleaded solder produce shiny joints +* 63Sn/37Pb is eutectic and has almost immediate phase change from liquid to solid. This is great for manufacturing but appears to lead to dull joints as they crystalize. +* the quality of the solder and the flux can vary widely depending on the source + +Bottom line: if you are not easily getting great solder joints, it is wise to first try another solder stock before blaming your iron our your technique. + + +## Soldering for a Higher Purpose + +### Perfect Solder Domes + +At first, I had real trouble making smooth symmetrical domes. I'd always end up with "meringue tips" when I drew the iron away. +The technique that seems to work best for me is: + +* make sure the iron isn't overloaded with solder +* withdraw the iron by first pulling down and around the nearside of the solder joint, nudge in a little then withdraw smoothly + +This sounds more like icing a cake! + +### Making Shiny Domes + +So now I'm getting decent domes (most of the time) that are electrically and mechanically sound. But they are rarely shiny. + +"Shiny" is not usaully a QA issue for solder points (advice abounds on how it is not important). +This is not to be confused with dry joints, that will be both dull and flakey/crystaline. + +Google delivers many opinions, for example: + +* [Why aren't my solder connnections shiny and perfect?](http://www.strat-talk.com/threads/why-arent-my-solder-connnections-shiny-and-perfect.143458/) +* [lead free soldering - Why are some joints shiny?](http://www.eevblog.com/forum/projects/lead-free-soldering-why-are-some-joints-shiny/) + +The main advice for why solder points are not shiny seems to boil down to one or more of the following: + +* unleaded solder "rarely produces shiny solder joints" +* no Silver (Ag) in the solder - especially lead free +* iron is too hot +* iron is too cold (but may be confused with dry joint issues) +* cooling too fast/airconditioning/cold-board +* contamination +* not enough flux +* disturbed before cooled + +In other words, lots of theories! + +So I ran some tests: + +* I'm using [WL-0510 B-1 0.5mm 63Sn/37Pb](http://www.dx.com/p/wlxy-wl-0510-b-1-0-5mm-tin-solid-solder-wire-reel-spool-silver-262916#.WAjGsZN97XE) +* I tested with a range of iron temperatures from 250˚C to 325˚C +* with A/C (24˚C) and without (probably heading to 27˚C) +* with and without additional flux + +... and I get pretty much the same result all the time: a nice shiny ball when I remove the iron, then as it cools, it gets to a point when +the ball instantly frosts over and I end up with a "dull" solder point. + +It seems pretty clear that it is oxidizing at the phase-change from liquid to solid. Not sure what to try next to control this... + +... except elbow grease;-) Turns out that with a bit of polish (using solder-station copper wool), I get some of the shine back. + +So after a bit more research, I am suspecting the dullness created during the phase change from liquid to solid +is due to the eutectic property of 63Sn/37Pb. As you can see in the phase diagram below, 63/37 is the alloy +with almost perfect eutectic properties (meaning it goes straight from liquid to solid without passing an intermediate plastic phase). + +[![phasediagram](http://www.inlandcraft.com/uguides/ug_images/tip-care/phasediagram.jpg)](http://www.inlandcraft.com/uguides/tipfailure.htm) + +### REALLY Shiny Domes + +Since everything I tried so far hadn't made much difference (temperature, technique, aircon), +the only thing left to try is different solder. + +So I got hold of some [Pro'sKit 9S002 Solder](https://www.aliexpress.com/item/Pro-sKit-9S002-Solder-Wire-W-2-AG-17G/32428346399.html) (62% Sn, 37% Pb, 2% Ag) ... and the difference is amazing: + +* it creates "domes" with hardly any effort +* and they are all nice and shiny + +Here's a side-by-side comparison using the same iron and tip, and both at 275˚C. + +* on the left: 62Sn/37Pb/2Ag. Soldering is a breeze, and the results are perfectly formed and shiny +* on the right: 63Sn/37Pb. Making domes is "hard work" and they rarely turn out shiny + +![solder_comparison2](../../Electronics101/ClapSwitchKit2/assets/solder_comparison2.jpg?raw=true) + +I'll need to do some more tests to determine if the problems I was originally seeing are typical of +a 63Sn/37Pb formulation, or if perhaps I just have some very poorly manufactured 63Sn/37Pb. + + +## Construction + +![Build](./assets/QSOPBreakout_front.jpg?raw=true) + +![Build](./assets/QSOPBreakout_rear.jpg?raw=true) + +## Credits and References +* [QSOP and 0805 breakout and soldering practice board](http://www.boldport.club/shop/product/437246682) - in the Boldport Shop +* [Surface-mount technology](https://en.wikipedia.org/wiki/Surface-mount_technology) - wikipedia +* [List of integrated circuit package dimensions](https://en.wikipedia.org/wiki/List_of_integrated_circuit_package_dimensions) - wikipedia +* [MELFs](http://en.wikipedia.org/wiki/MELF_electronic_components). +* [LEAP#258 Electronics101/ClapSwitchKit2](../../Electronics101/ClapSwitchKit2) - kit build which I used to experiment with "perfect solder dome" technique +* [LEAP#171 Electronics101/SMDPracticeBoards](../../Electronics101/SMDPracticeBoards) - a few more SMD practice boards +* [..as mentioned on my blog](http://blog.tardate.com/2017/06/leap316-the-boldport-qsop-breakout.html) diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/.catalog_metadata b/BoldportClub/QSOPBreakout/SolarPendulum/.catalog_metadata new file mode 100644 index 000000000..232a3dad0 --- /dev/null +++ b/BoldportClub/QSOPBreakout/SolarPendulum/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#296", + "name": "SolarPendulum", + "description": "build a solar-powered pendulum similar to the popular \"solar wobble/flip-flop toys\" on the Boldport QSOP breakout board", + "categories": "Boldport, Solar", + "relative_path": "BoldportClub/QSOPBreakout/SolarPendulum" +} \ No newline at end of file diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/README.md b/BoldportClub/QSOPBreakout/SolarPendulum/README.md new file mode 100644 index 000000000..6c8605abc --- /dev/null +++ b/BoldportClub/QSOPBreakout/SolarPendulum/README.md @@ -0,0 +1,118 @@ +# #296 QSOPBreakout/SolarPendulum + +Build a solar-powered pendulum similar to the popular "solar wobble/flip-flop toys" on the Boldport QSOP breakout board. + +Here's a quick video showing it in action on a quite overcast afternoon.. + +[![Build](./assets/SolarPendulum_build.jpg?raw=true)](http://www.youtube.com/watch?v=buP3zrMjN94) + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +I have a spare BoldPort QSOP Breakout board and for a while I've been trying to find some interesting use for it. I think I've found one ... +a solar pendulum! + +I discovered some new and creative solar wobble/flip-flap toys while travelling recently, which started me wondering how they work. +What is quite impressive is how well they work with only modest internal lighting and very small photovoltaic cells. + +The trick appears to be in the switching of capacitor-backed pulses through a coil. There are some good teardowns available, +such as the one by +[Ludic Science](https://www.youtube.com/watch?v=M6L-d_dYWIc) and the excellent +[analysis by dmercer](https://ez.analog.com/community/university-program/blog/2015/04/27/solar-powered-motion-toy-tear-down), +but they all fall short because the interesting electronics in these toys are invariably potted. +I'm not sure if this is as much license-avoidance as it might be IP protection, as there are patents out there for such toys such as +[US3783550](https://www.google.com/patents/US3783550?dq=3783550&hl=en&sa=X&ei=X67xUqHPMoOZkQWA5IDYDw&ved=0CDMQ6AEwAA&pageId=105188957426397764872) and [101352268A](https://worldwide.espacenet.com/publicationDetails/biblio?CC=CN&NR=101352268A&KC=A&FT=D&ND=&date=20090128&DB=EPODOC&locale=en_EP). + + +After some more research, I found two practical circuits: the first being a +[Solar Powered Pendulum article](http://nutsvolts.texterity.com/nutsvolts/201208/?folio=32&pg=32#pg32) in Nuts & Volts, +and the second covered in the thoroughly useful [laboratory notebook](http://www.elektronik-labor.de/Labortagebuch/Tagebuch0716.html#pendel2) +edited by Burkhard Kainka. + +I tried both circuits, and found that the Nuts & Volts approach appeared to work best for photovoltaics with lower driving power. + + +## Breadboard Prototype + +I tested a few circuits on a breadboard, finally picking the approach from Nuts & Volts: + +![SolarPendulum_bb_build](./assets/SolarPendulum_bb_build.jpg?raw=true) + +## Solar Panel Selection + +I wanted to go with the smallest solar panel I have available - a 25mm x 30mm unit with an open circuit voltage of around 1V. +It works just well enough in decent light. + +I also tested a larger panel with open circuit voltage of around 3.5-4V; it works very well (sometimes too well), but is larger than I wanted to use. + +For this reason I also selected the very-low-forward-voltage 1N5819 as the diode. General purpose NPN and PNP transistors provide the switching (2N3904/2N3906). + +## Sizing the Pendulum + +The weight and arc of the pendulum are obviously important design factors as they influence the resonant frequency. +With such small electromagenetic pulses, we don't want the pendulum "fighting" the motive power. + +Now I must admit I skipped the calculations for now. What I do know is that the pendulum is not ideal in my current build. +The weight is a little too much for the arc. It would probably work better with a longer arc (slowing it down). + +I have neodymium magents on the end of the pendulum, oriented to be repelled when the coil is pulsed. + +It also works when the magnets are oriented to be attracted when the coil is pulsed, but this tends not to work so well, as the timing of +ending the pulse becomes much more critical lest it act to dampen the pendulum oscillation. + +## Sizing the Coil + +I fudged this also. The coil I'm using is perhaps 100+ turns of enamelled winding wire with 1cm outer diameter. +It is air-core. Works just well enough! + +## Circuit + +![Breadboard](./assets/SolarPendulum_bb.jpg?raw=true) + +![Schematic](./assets/SolarPendulum_schematic.jpg?raw=true) + + +## QSOP Breakout Build + +So the QSOP/0805 breakout ... is intended as a breakout board! But it has enough interesting features to make it +serviceable as the protoboard for this circuit. + +Here is the QSOP Board during assembly, with all components fitted. I used SMD 0805 resistors but all other components +where through-hole. + +![construction_1](./assets/construction_1.jpg?raw=true) + +Rear of the board is where the coil is to ba attached. Only five bodge wires required, and they provided some fine pitch soldering practice! + +![construction_2](./assets/construction_2.jpg?raw=true) + +With coil attached.. + +![construction_3](./assets/construction_3.jpg?raw=true) + +Here's the circuit layout I used on the QSOP/0805 circuit board. + +![construction_4_layout](./assets/construction_4_layout.jpg?raw=true) + +Final construction .. the base is a repurposed box from the Boldport Club [Tap project](../../tap). + +![Build](./assets/SolarPendulum_build.jpg?raw=true) + +## Credits and References +* [QSOP and 0805 breakout and soldering practice board](http://www.boldport.club/shop/product/437246682) - in the Boldport Shop +* [1N5819 Datasheet](http://www.futurlec.com/Diodes/1N5819.shtml) +* [2N3904 datasheet](http://www.futurlec.com/Transistors/2N3904.shtml) +* [2N3906 datasheet](http://www.futurlec.com/Transistors/2N3906.shtml) +* [Solar Pendulum](https://www.youtube.com/watch?v=M6L-d_dYWIc) - teardown and analysis by Ludic Science +* [Magnet powered pendulum](https://www.youtube.com/watch?v=yrKtY7nWc-o) - teardown and analysis by RHEAD100 +* [Solar Powered Pendulum](http://nutsvolts.texterity.com/nutsvolts/201208/?folio=32&pg=32#pg32) - nuts and volts +* [Solar powered motion toy tear-down](https://ez.analog.com/community/university-program/blog/2015/04/27/solar-powered-motion-toy-tear-down) +* [Flip Flap](https://en.wikipedia.org/wiki/Flip_Flap) - wikipedia article on the flapping toy +* [Solar-Winker seziert](http://www.elektronik-labor.de/Labortagebuch/Tagebuch0716.html#pendel2) +* [Drinking bird](https://en.wikipedia.org/wiki/Drinking_bird) - wikipedia +* [Magic pendulum](http://www.elektronik.nmp24.de/?Bauanleitungen:Magisches_Pendel) +* [Watches with mechanical oscillator](http://www.hwynen.de/tba840.html) +* [Novelty electric motor](https://www.google.com/patents/US3783550?dq=3783550&hl=en&sa=X&ei=X67xUqHPMoOZkQWA5IDYDw&ved=0CDMQ6AEwAA&pageId=105188957426397764872) - US patent with unfortunately little detail on the electronics +* [Solar plant ornaments with swinging flowers, fruits, branches and leaves CN101352268](https://worldwide.espacenet.com/publicationDetails/biblio?CC=CN&NR=101352268A&KC=A&FT=D&ND=&date=20090128&DB=EPODOC&locale=en_EP) - patent for SHENZHEN LONGGANG PINGHU TENGY that describes the common wobble toys of today +* [..as mentioned on my blog](http://blog.tardate.com/2017/05/leap296-solar-pendulum-on-a-boldport-qsop-breakout.html) diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/SolarPendulum.fzz b/BoldportClub/QSOPBreakout/SolarPendulum/SolarPendulum.fzz new file mode 100644 index 000000000..a479eed00 Binary files /dev/null and b/BoldportClub/QSOPBreakout/SolarPendulum/SolarPendulum.fzz differ diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_bb.jpg b/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_bb.jpg new file mode 100644 index 000000000..1fc1b2e84 Binary files /dev/null and b/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_bb.jpg differ diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_bb_build.jpg b/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_bb_build.jpg new file mode 100755 index 000000000..67021a6e0 Binary files /dev/null and b/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_bb_build.jpg differ diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_build.jpg b/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_build.jpg new file mode 100755 index 000000000..be99152d0 Binary files /dev/null and b/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_build.jpg differ diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_schematic.jpg b/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_schematic.jpg new file mode 100644 index 000000000..319df4c85 Binary files /dev/null and b/BoldportClub/QSOPBreakout/SolarPendulum/assets/SolarPendulum_schematic.jpg differ diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_1.jpg b/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_1.jpg new file mode 100755 index 000000000..728a88153 Binary files /dev/null and b/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_1.jpg differ diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_2.jpg b/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_2.jpg new file mode 100755 index 000000000..6b85fc859 Binary files /dev/null and b/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_2.jpg differ diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_3.jpg b/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_3.jpg new file mode 100755 index 000000000..8f7593c68 Binary files /dev/null and b/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_3.jpg differ diff --git a/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_4_layout.jpg b/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_4_layout.jpg new file mode 100755 index 000000000..505b6502f Binary files /dev/null and b/BoldportClub/QSOPBreakout/SolarPendulum/assets/construction_4_layout.jpg differ diff --git a/BoldportClub/QSOPBreakout/assets/QSOPBreakout_build.jpg b/BoldportClub/QSOPBreakout/assets/QSOPBreakout_build.jpg new file mode 100755 index 000000000..5d08683cd Binary files /dev/null and b/BoldportClub/QSOPBreakout/assets/QSOPBreakout_build.jpg differ diff --git a/BoldportClub/QSOPBreakout/assets/QSOPBreakout_front.jpg b/BoldportClub/QSOPBreakout/assets/QSOPBreakout_front.jpg new file mode 100755 index 000000000..5d08683cd Binary files /dev/null and b/BoldportClub/QSOPBreakout/assets/QSOPBreakout_front.jpg differ diff --git a/BoldportClub/QSOPBreakout/assets/QSOPBreakout_rear.jpg b/BoldportClub/QSOPBreakout/assets/QSOPBreakout_rear.jpg new file mode 100755 index 000000000..b5d2f0964 Binary files /dev/null and b/BoldportClub/QSOPBreakout/assets/QSOPBreakout_rear.jpg differ diff --git a/BoldportClub/README.md b/BoldportClub/README.md new file mode 100644 index 000000000..ba0897f1c --- /dev/null +++ b/BoldportClub/README.md @@ -0,0 +1,23 @@ +# Boldport Club + +![Year One Projects](./assets/BoldportClub_build.jpg?raw=true) + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +Making space here for what I hope will be a steady stream of beautiful kits from The Boldport Club. + +It's a club you can join by subscription and receive an electronics project every month. + +But unlike the electronics clubs I remember from years ago - which tended to produce simplicstic kits +for projects that while functional, few would ever really need, and they definitely weren't designed for aesthetics - +the focus here is on kits that are engaging, challenging, entertaining, and collectable. + +## Credits and References +* [Boldport Club](http://www.boldport.club/) - main site +* [Boldport Club Community Site](http://community.boldport.club/) - packed with resources and details of builds by members +* [Saar Drimer on The AmpHour podcast](http://www.theamphour.com/286-an-interview-with-saar-drimer/) +* [Saar Drimer on the embedded.fm podcast](http://embedded.fm/episodes/171) + +![BoldportClub_stickers](./assets/BoldportClub_stickers.jpg?raw=true) diff --git a/BoldportClub/TheCuttle/.catalog_metadata b/BoldportClub/TheCuttle/.catalog_metadata new file mode 100644 index 000000000..5fe5997e7 --- /dev/null +++ b/BoldportClub/TheCuttle/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#266", + "name": "BoldportClub/TheCuttle", + "description": "the most beautiful Arduino-compatible board you will ever see. Another soldering kit from The Boldport Club (Project #6)", + "categories": "Boldport, PCB Design, ATmega, ATmel, Arduino", + "relative_path": "BoldportClub/TheCuttle" +} \ No newline at end of file diff --git a/BoldportClub/TheCuttle/README.md b/BoldportClub/TheCuttle/README.md new file mode 100644 index 000000000..633582322 --- /dev/null +++ b/BoldportClub/TheCuttle/README.md @@ -0,0 +1,78 @@ +# #266 TheCuttle + +A bare-bones Arduino-compatible kit from The Boldport Club (Project #6). + +![Build](./assets/TheCuttle_build.jpg?raw=true) + + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +The Cuttle is a bare-bones Arduino-compatible soldering kit. It was first designed as commissioned work for [Embecosm](http://www.embecosm.com/), who made it open source hardware. + +What's different about this board? It is by far the most beautiful Arduino-like board I own! + +Note: I've also created a Fritzing part for the Cuttle module, see [FritzingParts/TheCuttle](../../FritzingParts/TheCuttle/). + +### Parts & Unboxing + +![kit_packaging](./assets/kit_packaging.jpg?raw=true) + +![kit_unboxing](./assets/kit_unboxing.jpg?raw=true) + +| Ref | Item | Qty | +|----------|-----------------------------------------------------------|-----| +| S1 | Tactile switch, TE Connectivity, FSM4JRT | 1 | +| U1 | ATMega328-PU microcontroller, Atmel, ATMEGA328-PU | 1 | +| C1,2,3,4 | 0.1µF ceramic capacitor, Multicomp, MC0805Y104M500A2.54MM | 4 | +| C5,6 | 22pF ceramic capacitor, Multicomp, MC0805N220J500A2.54MM | 2 | +| C7 | 10µF electrolytic capacitor, Multicomp, MCMR35V106M4X7 | 1 | +| R1 | 10KΩ resistor, Multicomp, MCF 0.25W 10K | 1 | +| D1 | Small signal diode, Multicomp, 1N4148 | 1 | +| Q1 | 16MHz crystal, TXC, 9B-16.000MAAJ-B | 1 | +| - | DIP socket, TruConnect, DS1009-28 AT1NS | 1 | +| - | 18 contacts header, Multicomp, MC34737 | 2 | +| - | 6 contacts right-angle header, Multicomp, MC34751 | 1 | + + +## Programming the Cuttle + +I'm using a cheap [CH340G-based USB to UART adapter](https://www.aliexpress.com/item/CH340-module-USB-to-TTL-CH340G-upgrade-download-a-small-wire-brush-plate-STC-microcontroller-board/32354359382.html). +With the +[correct drivers installed](../../notebook/arduino.md#arduinos-using-the-ch340g-serial-chip), +it shows up in the Arduino IDE and programming works like any other Arduino board. + +![TheCuttle_programming](./assets/TheCuttle_programming.jpg?raw=true) + +See the [ATmega168/328-Arduino Pin Mapping](https://www.arduino.cc/en/Hacking/PinMapping168) for details on mapping the ATmega328 pins to Arduino port names. + +## Construction + +![Breadboard](./assets/TheCuttle_bb.jpg?raw=true) + +![Schematic](./assets/TheCuttle_schematic.jpg?raw=true) + +Finished assembly: + +![kit_upper](./assets/kit_upper.jpg?raw=true) + +Underside; I haven't cleaned it after soldering: + +![kit_lower](./assets/kit_lower.jpg?raw=true) + +Nice "Boldport" solder domes! A few flux splatters I haven't cleaned up. +I also made a bit of a mistake with the pins - I pushed them flush from the top but forgot to ensure they were fully aligned. + +![kit_lower_points](./assets/kit_lower_points.jpg?raw=true) + +## Credits and References +* [TheCuttle](http://www.boldport.club/shop/product/390973459) - in the Boldport shop +* [TheCuttle](http://www.boldport.com/tc/) - project page +* [TheCuttle](https://github.com/boldport/thecuttle) - OSH files on GitHub +* [TheCuttle](http://community.boldport.club/projects/p06-thecuttle/) - club community site, packed with resources for the project +* [ATMEGA328P datasheet](http://parts.io/detail/1829384/ATMEGA328P-AU) - parts.io +* [USB to TTL converter UART module CH340G CH340 3.3V 5V switch](https://www.aliexpress.com/item/CH340-module-USB-to-TTL-CH340G-upgrade-download-a-small-wire-brush-plate-STC-microcontroller-board/32354359382.html) - the USB programming adapter I'm using +* [ATmega168/328-Arduino Pin Mapping](https://www.arduino.cc/en/Hacking/PinMapping168) +* [FritzingParts/TheCuttle](../../FritzingParts/TheCuttle/) - a Fritzing part for the Cuttle module +* [..as mentioned on my blog](http://blog.tardate.com/2017/04/leap266-the-boldportclub-cuttle.html) diff --git a/BoldportClub/TheCuttle/ScopeTag/.catalog_metadata b/BoldportClub/TheCuttle/ScopeTag/.catalog_metadata new file mode 100644 index 000000000..b40c8927a --- /dev/null +++ b/BoldportClub/TheCuttle/ScopeTag/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#267", + "name": "TheCuttle/ScopeTag", + "description": "Get the Boldport Cuttle to write its name on a Digital Oscilloscope with an MCP42010 digital potentiometer", + "categories": "Boldport, ATmega, ATmel, Arduino, Digital Pot, MCP42010, Oscilloscope", + "relative_path": "BoldportClub/TheCuttle/ScopeTag" +} \ No newline at end of file diff --git a/BoldportClub/TheCuttle/ScopeTag/README.md b/BoldportClub/TheCuttle/ScopeTag/README.md new file mode 100644 index 000000000..167717505 --- /dev/null +++ b/BoldportClub/TheCuttle/ScopeTag/README.md @@ -0,0 +1,55 @@ +# #267 TheCuttle/ScopeTag + +Get the Boldport Cuttle to write its name on a Digital Oscilloscope with an MCP42010 digital potentiometer. + +![ScopeTag_test_run](./assets/ScopeTag_test_run.jpg?raw=true) + + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +I just built [The Cuttle](../) so time for a quick test. + +I thought I'd borrow an idea from the [XYplotter](../../playground/XYplotter) project and get The Cuttle +to write its name on an oscilloscope. + + +The Python script [make_data.py](./tree/make_data.py) is used to interpolate plotting points +over the fundamental text structure. It generates the [data.h](./data.h) used by the +[ScopeTag.ino](./ScopeTag.ino) sketch: + +``` +python make_data.py > data.h +``` + +When running on The Cuttle, it produces the image below. +I'm using a Hantek MSO5074FG oscilloscope, and the image was captured with the following settings: + +* XY plot mode +* 0.2s persistence +* display as vectors +* average over 4 samples +* CH1/X offset by -4V +* CH2/Y offset by 40mV +* 570mV per grid + +![scope_text](./assets/scope_text.gif?raw=true) + +The time-domain plot for the generated output is like this: + +![scope_text_xt](./assets/scope_text_xt.gif?raw=true) + +## Construction + +![Breadboard](./assets/ScopeTag_bb.jpg?raw=true) + +![Schematic](./assets/ScopeTag_schematic.jpg?raw=true) + +![ScopeTag_breadboard](./assets/ScopeTag_breadboard.jpg?raw=true) + +## Credits and References +* [LEAP#265 XYplotter](../../playground/XYplotter) - the scope XY plotting project +* [LEAP#266 The Cuttle](../) - building the cuttle +* [MCP42010 datasheet](http://parts.io/detail/1372149/MCP42010-I%2FSL) - parts.io +* [..as mentioned on my blog](http://blog.tardate.com/2017/04/leap267-cuttle-scope-graffiti.html) diff --git a/BoldportClub/TheCuttle/ScopeTag/ScopeTag.fzz b/BoldportClub/TheCuttle/ScopeTag/ScopeTag.fzz new file mode 100644 index 000000000..2696244fd Binary files /dev/null and b/BoldportClub/TheCuttle/ScopeTag/ScopeTag.fzz differ diff --git a/BoldportClub/TheCuttle/ScopeTag/ScopeTag.ino b/BoldportClub/TheCuttle/ScopeTag/ScopeTag.ino new file mode 100644 index 000000000..63f0043f7 --- /dev/null +++ b/BoldportClub/TheCuttle/ScopeTag/ScopeTag.ino @@ -0,0 +1,60 @@ +/* + + TheCuttle/ScopeTag + Get the Boldport Cuttle to write it's name on a Digital Oscilloscope + + For info and circuit diagrams see https://github.com/tardate/LittleArduinoProjects/tree/master/BoldportClub/TheCuttle/ScopeTag + + */ + +#include + +SPISettings digipotSettings(16000000, MSBFIRST, SPI_MODE0); + +// Standard hardware SPI pins are used used for clock and data, but slave select can be any free pin. +// Note that setPot uses direct port manipulation that assumes digital pin 9 is used (PB1) +const int DIGIPOT_SS_PIN = 9; + +#define CMD_WRITE (0b00010000) +#define CMD_P0 (0b01) +#define CMD_P1 (0b10) +#define CMD_X (CMD_WRITE | CMD_P0) +#define CMD_Y (CMD_WRITE | CMD_P1) + +#include "data.h" + +void setup() { + SPI.begin(); + pinMode(DIGIPOT_SS_PIN, OUTPUT); + SPI.beginTransaction(digipotSettings); +} + +void loop() { + int last_p = NUM_POINTS - 1; + for(int p = 0; p < NUM_POINTS; p++) { + setPot(VERTICES[p][0], VERTICES[p][1]); + last_p = p; + } +} + +// Command: set the x and y pot levels +// This uses direct port manipulation instad of digitalWrite +// in order to achieve a sufficiently high refresh rate. +// Unfortunately it appears the MCP42010 cannot handle two commands in a +// single SPI transaction, hence X and Y settings need to be sent separately. +void setPot(byte x, byte y) { + //digitalWrite(DIGIPOT_SS_PIN, LOW); + PORTB &= ~(_BV(1)); + + SPI.transfer16(CMD_Y << 8 | y); + + //digitalWrite(DIGIPOT_SS_PIN, HIGH); + //digitalWrite(DIGIPOT_SS_PIN, LOW); + PORTB |= _BV(1); + PORTB &= ~(_BV(1)); + + SPI.transfer16(CMD_X << 8 | x); + + //digitalWrite(DIGIPOT_SS_PIN, HIGH); + PORTB |= _BV(1); +} diff --git a/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_bb.jpg b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_bb.jpg new file mode 100644 index 000000000..8b62c9271 Binary files /dev/null and b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_bb.jpg differ diff --git a/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_breadboard.jpg b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_breadboard.jpg new file mode 100755 index 000000000..00f727cce Binary files /dev/null and b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_breadboard.jpg differ diff --git a/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_build.jpg b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_build.jpg new file mode 100644 index 000000000..c32d07ae3 Binary files /dev/null and b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_build.jpg differ diff --git a/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_schematic.jpg b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_schematic.jpg new file mode 100644 index 000000000..6cb7e8d21 Binary files /dev/null and b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_schematic.jpg differ diff --git a/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_test_run.jpg b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_test_run.jpg new file mode 100755 index 000000000..ec1738e6c Binary files /dev/null and b/BoldportClub/TheCuttle/ScopeTag/assets/ScopeTag_test_run.jpg differ diff --git a/BoldportClub/TheCuttle/ScopeTag/assets/scope_text.gif b/BoldportClub/TheCuttle/ScopeTag/assets/scope_text.gif new file mode 100755 index 000000000..e24d9d6f5 Binary files /dev/null and b/BoldportClub/TheCuttle/ScopeTag/assets/scope_text.gif differ diff --git a/BoldportClub/TheCuttle/ScopeTag/assets/scope_text_xt.gif b/BoldportClub/TheCuttle/ScopeTag/assets/scope_text_xt.gif new file mode 100755 index 000000000..fffa1d650 Binary files /dev/null and b/BoldportClub/TheCuttle/ScopeTag/assets/scope_text_xt.gif differ diff --git a/BoldportClub/TheCuttle/ScopeTag/data.h b/BoldportClub/TheCuttle/ScopeTag/data.h new file mode 100644 index 000000000..caa76aea8 --- /dev/null +++ b/BoldportClub/TheCuttle/ScopeTag/data.h @@ -0,0 +1,242 @@ +// auto-generated by make_data.py + +#ifndef Points_h +#define Points_h + +// x,y coordinates for plotting +const static byte VERTICES[][2] = { + {15, 1}, + {15, 4}, + {15, 7}, + {15, 10}, + {15, 13}, + {15, 16}, + {15, 19}, + {15, 22}, + {15, 25}, + {15, 28}, + {15, 31}, + {15, 34}, + {15, 37}, + {15, 40}, + {15, 43}, + {15, 46}, + {15, 49}, + {4, 51}, + {7, 51}, + {10, 51}, + {13, 51}, + {16, 51}, + {19, 51}, + {22, 51}, + {25, 51}, + {28, 51}, + {35, 54}, + {35, 51}, + {35, 48}, + {35, 45}, + {35, 42}, + {35, 39}, + {35, 36}, + {35, 33}, + {35, 30}, + {35, 27}, + {35, 24}, + {35, 21}, + {35, 18}, + {35, 15}, + {35, 12}, + {35, 9}, + {35, 6}, + {35, 3}, + {35, 23}, + {38, 28}, + {40, 32}, + {43, 32}, + {46, 32}, + {49, 33}, + {49, 30}, + {49, 27}, + {49, 24}, + {49, 21}, + {49, 18}, + {49, 15}, + {49, 12}, + {49, 9}, + {49, 6}, + {49, 3}, + {60, 12}, + {63, 14}, + {66, 16}, + {69, 19}, + {72, 21}, + {75, 24}, + {77, 26}, + {77, 29}, + {77, 32}, + {77, 33}, + {74, 34}, + {71, 35}, + {68, 36}, + {67, 37}, + {64, 33}, + {61, 30}, + {59, 28}, + {59, 25}, + {59, 22}, + {59, 19}, + {59, 16}, + {59, 14}, + {62, 6}, + {63, 4}, + {66, 2}, + {69, 1}, + {72, 2}, + {75, 3}, + {78, 7}, + {122, 11}, + {119, 7}, + {116, 4}, + {115, 3}, + {112, 3}, + {109, 3}, + {106, 3}, + {103, 7}, + {100, 11}, + {99, 13}, + {99, 16}, + {99, 19}, + {99, 22}, + {99, 25}, + {99, 28}, + {99, 31}, + {99, 33}, + {102, 38}, + {105, 44}, + {106, 46}, + {109, 48}, + {112, 50}, + {114, 52}, + {117, 50}, + {120, 49}, + {131, 33}, + {131, 30}, + {131, 27}, + {131, 24}, + {131, 21}, + {131, 18}, + {131, 15}, + {131, 12}, + {131, 9}, + {131, 6}, + {131, 4}, + {134, 2}, + {136, 1}, + {139, 3}, + {142, 5}, + {145, 1}, + {142, 5}, + {142, 8}, + {142, 11}, + {142, 14}, + {142, 17}, + {142, 20}, + {142, 23}, + {142, 26}, + {142, 29}, + {142, 32}, + {142, 35}, + {151, 35}, + {154, 35}, + {157, 35}, + {160, 35}, + {163, 35}, + {166, 35}, + {159, 48}, + {159, 45}, + {159, 42}, + {159, 39}, + {159, 36}, + {159, 33}, + {159, 30}, + {159, 27}, + {159, 24}, + {159, 21}, + {159, 18}, + {159, 15}, + {159, 12}, + {159, 9}, + {159, 6}, + {159, 3}, + {182, 48}, + {182, 45}, + {182, 42}, + {182, 39}, + {182, 36}, + {182, 33}, + {182, 30}, + {182, 27}, + {182, 24}, + {182, 21}, + {182, 18}, + {182, 15}, + {182, 12}, + {182, 9}, + {182, 6}, + {182, 3}, + {174, 35}, + {177, 35}, + {180, 35}, + {183, 35}, + {186, 35}, + {199, 57}, + {199, 54}, + {199, 51}, + {199, 48}, + {199, 45}, + {199, 42}, + {199, 39}, + {199, 36}, + {199, 33}, + {199, 30}, + {199, 27}, + {199, 24}, + {199, 21}, + {199, 18}, + {199, 15}, + {199, 12}, + {199, 9}, + {199, 6}, + {199, 3}, + {209, 12}, + {212, 14}, + {215, 16}, + {218, 19}, + {221, 21}, + {224, 24}, + {226, 26}, + {226, 29}, + {226, 32}, + {226, 33}, + {223, 34}, + {220, 35}, + {217, 36}, + {216, 37}, + {213, 32}, + {210, 28}, + {210, 25}, + {210, 22}, + {210, 19}, + {210, 16}, + {210, 14}, + {212, 4}, + {215, 2}, + {218, 1}, + {221, 2}, + {224, 3}, + {227, 7} +}; + +int NUM_POINTS = sizeof(VERTICES) / 2; + +#endif diff --git a/BoldportClub/TheCuttle/ScopeTag/make_data.py b/BoldportClub/TheCuttle/ScopeTag/make_data.py new file mode 100755 index 000000000..b594b7999 --- /dev/null +++ b/BoldportClub/TheCuttle/ScopeTag/make_data.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python + +# These are the key vertices of "The Cuttle" +VERTICES = [ + # T + [ + (15, 1), + (15, 51) + ], + [ + ( 4, 51), + (30, 51) + ], + # h + [ + (35, 54), + (35, 2) + ], + [ + (35, 23), + (40, 32), + (49, 33), + (49, 2) + ], + # e + [ + (60, 12), + (77, 26), + (77, 33), + (67, 37), + (59, 28), + (59, 14), + (63, 4), + (69, 1), + (75, 3), + (79, 9) + ], + # C + [ + (122, 11), + (115, 3), + (106, 3), + ( 99, 13), + ( 99, 33), + (106, 46), + (114, 52), + (121, 49) + ], + # u + [ + (131, 33), + (131, 4), + (136, 1), + (142, 5), + (145, 1), + (142, 5), + (142, 36) + ], + # t + [ + (151, 35), + (167, 35) + ], + [ + (159, 48), + (159, 1) + ], + # t + [ + (182, 48), + (182, 1) + ], + [ + (174, 35), + (189, 35) + ], + # l + [ + (199, 57), + (199, 1) + ], + # e + [ + (209 , 12), + (226 , 26), + (226 , 33), + (216 , 37), + (210 , 28), + (210 , 14), + (212 , 4), + (218 , 1), + (224 , 3), + (228 , 9) + ] +] + +LINE_STEP = 3 +ANGLE_STEP = 3 + +points = [] + + +def insert_point(x, y): + points.append((x, y)) + + +def interpolate(x1, y1, x2, y2): + + + if x1 == x2: + for y in range(y1, y2, LINE_STEP if y2 > y1 else -LINE_STEP): + insert_point(x1, y) + elif y1 == y2: + for x in range(x1, x2, LINE_STEP if x2 > x1 else -LINE_STEP): + insert_point(x, y1) + else: + for x in range(x1, x2, ANGLE_STEP if x2 > x1 else -ANGLE_STEP): + y = int(y1 + (y2 - y1)/(float(x2) - x1) * (x - x1)) + insert_point(x, y) + + +def outputPreamble(): + print ( + '// auto-generated by make_data.py\n\n' + '#ifndef Points_h\n' + '#define Points_h\n\n' + '// x,y coordinates for plotting\n' + 'const static byte VERTICES[][2] = {' + ) + + +def outputPoints(): + data = ' {}'.format( + ',\n '.join([ + '{{{}, {}}}'.format(point[0], point[1]) + for point in points + ]) + ) + print data + + +def outputEpilogue(): + print ( + '};\n\n' + 'int NUM_POINTS = sizeof(VERTICES) / 2;\n\n' + '#endif' + ) + + +def build(): + for segment in VERTICES: + for p in range(len(segment) - 1): + interpolate( + segment[p][0], + segment[p][1], + segment[p + 1][0], + segment[p + 1][1] + ) + outputPreamble() + outputPoints() + outputEpilogue() + + +if __name__ == '__main__': + build() diff --git a/BoldportClub/TheCuttle/TheCuttle.fzz b/BoldportClub/TheCuttle/TheCuttle.fzz new file mode 100644 index 000000000..c43aae0a4 Binary files /dev/null and b/BoldportClub/TheCuttle/TheCuttle.fzz differ diff --git a/BoldportClub/TheCuttle/assets/TheCuttle_bb.jpg b/BoldportClub/TheCuttle/assets/TheCuttle_bb.jpg new file mode 100644 index 000000000..643ea40bd Binary files /dev/null and b/BoldportClub/TheCuttle/assets/TheCuttle_bb.jpg differ diff --git a/BoldportClub/TheCuttle/assets/TheCuttle_build.jpg b/BoldportClub/TheCuttle/assets/TheCuttle_build.jpg new file mode 100755 index 000000000..eb6c401fb Binary files /dev/null and b/BoldportClub/TheCuttle/assets/TheCuttle_build.jpg differ diff --git a/BoldportClub/TheCuttle/assets/TheCuttle_programming.jpg b/BoldportClub/TheCuttle/assets/TheCuttle_programming.jpg new file mode 100755 index 000000000..62a65a837 Binary files /dev/null and b/BoldportClub/TheCuttle/assets/TheCuttle_programming.jpg differ diff --git a/BoldportClub/TheCuttle/assets/TheCuttle_schematic.jpg b/BoldportClub/TheCuttle/assets/TheCuttle_schematic.jpg new file mode 100644 index 000000000..119b3fa7e Binary files /dev/null and b/BoldportClub/TheCuttle/assets/TheCuttle_schematic.jpg differ diff --git a/BoldportClub/TheCuttle/assets/kit_lower.jpg b/BoldportClub/TheCuttle/assets/kit_lower.jpg new file mode 100755 index 000000000..0e03e4053 Binary files /dev/null and b/BoldportClub/TheCuttle/assets/kit_lower.jpg differ diff --git a/BoldportClub/TheCuttle/assets/kit_lower_points.jpg b/BoldportClub/TheCuttle/assets/kit_lower_points.jpg new file mode 100755 index 000000000..ee4d93e7d Binary files /dev/null and b/BoldportClub/TheCuttle/assets/kit_lower_points.jpg differ diff --git a/BoldportClub/TheCuttle/assets/kit_packaging.jpg b/BoldportClub/TheCuttle/assets/kit_packaging.jpg new file mode 100755 index 000000000..214ed8e77 Binary files /dev/null and b/BoldportClub/TheCuttle/assets/kit_packaging.jpg differ diff --git a/BoldportClub/TheCuttle/assets/kit_unboxing.jpg b/BoldportClub/TheCuttle/assets/kit_unboxing.jpg new file mode 100755 index 000000000..64afa5860 Binary files /dev/null and b/BoldportClub/TheCuttle/assets/kit_unboxing.jpg differ diff --git a/BoldportClub/TheCuttle/assets/kit_upper.jpg b/BoldportClub/TheCuttle/assets/kit_upper.jpg new file mode 100755 index 000000000..280652caf Binary files /dev/null and b/BoldportClub/TheCuttle/assets/kit_upper.jpg differ diff --git a/BoldportClub/TheGent/.catalog_metadata b/BoldportClub/TheGent/.catalog_metadata new file mode 100644 index 000000000..8b5c9caf8 --- /dev/null +++ b/BoldportClub/TheGent/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#284", + "name": "BoldportClub/TheGent", + "description": "The Gent is Boldport Club Project #10 - a simple circuit on a beautiful board", + "categories": "Boldport, PCB Design", + "relative_path": "BoldportClub/TheGent" +} \ No newline at end of file diff --git a/BoldportClub/TheGent/README.md b/BoldportClub/TheGent/README.md new file mode 100644 index 000000000..b73b10c7e --- /dev/null +++ b/BoldportClub/TheGent/README.md @@ -0,0 +1,67 @@ +# #284 TheGent + +The Gent is Boldport Club Project #10 - a simple circuit on a beautiful board + +![Build](./assets/TheGent_build.jpg?raw=true) + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + + +### Unboxing and Parts + + +| Ref | Item | Count | +|--------|-----------------------------------------------------|-------| +| S1 | DPDT slide switch, C&K JS202011SCQN | x1 | +| D1 | 5mm phototransistor, Kingbright PT333-3C | x1 | +| L1,3,5 | Green 5mm LED, Kingbright L-9294CGCK | x3 | +| L2,4 | Orange 5mm LED, Kingbright L-9294SECK | x2 | +| | CR2032 battery clip, Multicomp BC-2001 | x1 | +| Q1 | N-channel MOSFET, Fairchild 2N7000 | x1 | +| R1-8 | 390Ω through-hole resistor, Multicomp MCF 0.25W 10K | x8 | +| R9 | 820Ω through-hole resistor, Multicomp MF25 820R | x1 | +| R10 | 10KΩ through-hole resistor, Multicomp MF25 390R | x1 | + +![kit_unboxing](./assets/kit_unboxing.jpg?raw=true) + +The five clear LEDs are actually two colours: a perfect time to whip out the +[LIGEMDIO](../ligemdio) project for some LED testing: + +![kit_testing_leds_with_ligemdio](./assets/kit_testing_leds_with_ligemdio.jpg?raw=true) + + +### Phototransistor Connections + +Note that the [PT333-3C Phototransistor](https://www.rapidonline.com/pdf/156408-da-02-en.pdf) +uses a familiar 5mm LED packaging, but the collector/emitter pins are the reverse of what you might +intuit. The short leg and flat edge are actually the collector and is connected to the positive supply side. + +![PT333-3C](./assets/PT333-3C.png?raw=true) + + +### Completed Build + + +![kit_complete](./assets/kit_complete.jpg?raw=true) + + +![Build](./assets/TheGent_build.jpg?raw=true) + + +### Schematic + +![Breadboard](./assets/TheGent_bb.jpg?raw=true) + +![Schematic](./assets/TheGent_schematic.jpg?raw=true) + + +## Credits and References +* [TheGent](http://www.boldport.club/shop/product/584348507) - in the Boldport shop +* [TheGent](https://www.boldport.com/gent) - Boldport project page +* [TheGent](https://github.com/boldport/thegent) - OSH files on GitHub +* [TheGent](http://community.boldport.club/projects/p10-thegent/) - club community site, packed with resources for the project +* [Eurocircuits](http://www.eurocircuits.com/) - manufactured the board +* [PT333-3C datasheet](https://www.rapidonline.com/pdf/156408-da-02-en.pdf) +* [..as mentioned on my blog](http://blog.tardate.com/2017/05/leap284-the-boldport-gent.html) diff --git a/BoldportClub/TheGent/TheGent.fzz b/BoldportClub/TheGent/TheGent.fzz new file mode 100644 index 000000000..00fb27071 Binary files /dev/null and b/BoldportClub/TheGent/TheGent.fzz differ diff --git a/BoldportClub/TheGent/assets/PT333-3C.png b/BoldportClub/TheGent/assets/PT333-3C.png new file mode 100644 index 000000000..a86bc1eb1 Binary files /dev/null and b/BoldportClub/TheGent/assets/PT333-3C.png differ diff --git a/BoldportClub/TheGent/assets/TheGent_bb.jpg b/BoldportClub/TheGent/assets/TheGent_bb.jpg new file mode 100644 index 000000000..406a9efa3 Binary files /dev/null and b/BoldportClub/TheGent/assets/TheGent_bb.jpg differ diff --git a/BoldportClub/TheGent/assets/TheGent_build.jpg b/BoldportClub/TheGent/assets/TheGent_build.jpg new file mode 100755 index 000000000..af543fb9d Binary files /dev/null and b/BoldportClub/TheGent/assets/TheGent_build.jpg differ diff --git a/BoldportClub/TheGent/assets/TheGent_schematic.jpg b/BoldportClub/TheGent/assets/TheGent_schematic.jpg new file mode 100644 index 000000000..97c7143ea Binary files /dev/null and b/BoldportClub/TheGent/assets/TheGent_schematic.jpg differ diff --git a/BoldportClub/TheGent/assets/kit_complete.jpg b/BoldportClub/TheGent/assets/kit_complete.jpg new file mode 100755 index 000000000..697c16a04 Binary files /dev/null and b/BoldportClub/TheGent/assets/kit_complete.jpg differ diff --git a/BoldportClub/TheGent/assets/kit_complete_left_zoom.jpg b/BoldportClub/TheGent/assets/kit_complete_left_zoom.jpg new file mode 100755 index 000000000..7029e6408 Binary files /dev/null and b/BoldportClub/TheGent/assets/kit_complete_left_zoom.jpg differ diff --git a/BoldportClub/TheGent/assets/kit_testing_leds_with_ligemdio.jpg b/BoldportClub/TheGent/assets/kit_testing_leds_with_ligemdio.jpg new file mode 100755 index 000000000..f83cb4deb Binary files /dev/null and b/BoldportClub/TheGent/assets/kit_testing_leds_with_ligemdio.jpg differ diff --git a/BoldportClub/TheGent/assets/kit_unboxing.jpg b/BoldportClub/TheGent/assets/kit_unboxing.jpg new file mode 100755 index 000000000..918be4ef8 Binary files /dev/null and b/BoldportClub/TheGent/assets/kit_unboxing.jpg differ diff --git a/BoldportClub/TheLady/.catalog_metadata b/BoldportClub/TheLady/.catalog_metadata new file mode 100644 index 000000000..f8ea63e03 --- /dev/null +++ b/BoldportClub/TheLady/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#251", + "name": "BoldportClub/TheLady", + "description": "a ladybird soldering and display kit from The Boldport Club (Project #4)", + "categories": "Boldport, PCB Design", + "relative_path": "BoldportClub/TheLady" +} \ No newline at end of file diff --git a/BoldportClub/TheLady/README.md b/BoldportClub/TheLady/README.md new file mode 100644 index 000000000..5864d46dc --- /dev/null +++ b/BoldportClub/TheLady/README.md @@ -0,0 +1,71 @@ +# #251 TheLady + +A ladybird soldering and display kit from The Boldport Club (Project #4). + +![Build](./assets/TheLady_build.jpg?raw=true) + + +[:arrow_forward: return to the LEAP Catalog](http://leap.tardate.com) + +## Notes + +A fine specimen of Coccinellidae Boldportus, a new type of ladybird discovered in Bermondsey, London. + +"The Lady" is Project #4 from The Boldport Club. It is a really simple circuit, and functionally nothing ground-breaking .. +but that really isn't the point. It is just a stunning bit of PCB design. Yes, this is more art than electronics! + +### Parts + +* Switch, Bourns, C&K, [JS202011SCQN](http://uk.farnell.com/2320019) +* 10mm red LED, Kingbright, [L-813SRC-B](http://uk.farnell.com/1142466) or VCC, [VAOL-10GAT4](http://uk.farnell.com/1712772) +* 5mm red LED, Kingbright, [L-1503EC](http://uk.farnell.com/2335729) +* SMD battery holder, Multicomp, [BC-2001](http://uk.farnell.com/) +* 12 68Ω resistors, Multicomp, [MCF 0.25W 68R](http://uk.farnell.com/9339647) + +### Unboxing and Build + +What a great box and packing... + +![kit01_box](./assets/kit01_box.jpg?raw=true) + +![kit02_unbox](./assets/kit02_unbox.jpg?raw=true) + +![kit03_parts](./assets/kit03_parts.jpg?raw=true) + +This is truely a beautiful PCB .. front and back: + +![kit04_pcb_lower](./assets/kit04_pcb_lower.jpg?raw=true) + +![kit05_pcb_upper](./assets/kit05_pcb_upper.jpg?raw=true) + +All assembled.. + +![kit06_assembled](./assets/kit06_assembled.jpg?raw=true) + +![kit07_deadbug](./assets/kit07_deadbug.jpg?raw=true) + +![kit08_onglass](./assets/kit08_onglass.jpg?raw=true) + +![kit09_onbox](./assets/kit09_onbox.jpg?raw=true) + +![kit10_inthewild](./assets/kit10_inthewild.jpg?raw=true) + +![kit11_inthewild](./assets/kit11_inthewild.jpg?raw=true) + +![kit12_inthewild](./assets/kit12_inthewild.jpg?raw=true) + + +## Construction + +![Breadboard](./assets/TheLady_bb.jpg?raw=true) + +![Schematic](./assets/TheLady_schematic.jpg?raw=true) + +![Build](./assets/TheLady_build.jpg?raw=true) + +## Credits and References +* [TheLady](http://www.boldport.club/shop/product/322512682) - in the Boldport shop +* [TheLady](http://www.boldport.com/products/the-lady/) - project page +* [TheLady](https://github.com/boldport/thelady) - OSH files on GitHub +* [TheLady](http://community.boldport.club/projects/p04-thelady/) - club community site, packed with resources for the project +* [..as mentioned on my blog](http://blog.tardate.com/2017/02/leap251-the-lady.html) diff --git a/BoldportClub/TheLady/TheLady.fzz b/BoldportClub/TheLady/TheLady.fzz new file mode 100644 index 000000000..e94b04dff Binary files /dev/null and b/BoldportClub/TheLady/TheLady.fzz differ diff --git a/BoldportClub/TheLady/assets/TheLady_bb.jpg b/BoldportClub/TheLady/assets/TheLady_bb.jpg new file mode 100644 index 000000000..ddb08706c Binary files /dev/null and b/BoldportClub/TheLady/assets/TheLady_bb.jpg differ diff --git a/BoldportClub/TheLady/assets/TheLady_build.jpg b/BoldportClub/TheLady/assets/TheLady_build.jpg new file mode 100755 index 000000000..5072e504f Binary files /dev/null and b/BoldportClub/TheLady/assets/TheLady_build.jpg differ diff --git a/BoldportClub/TheLady/assets/TheLady_build1.jpg b/BoldportClub/TheLady/assets/TheLady_build1.jpg new file mode 100755 index 000000000..8eb1fe2e4 Binary files /dev/null and b/BoldportClub/TheLady/assets/TheLady_build1.jpg differ diff --git a/BoldportClub/TheLady/assets/TheLady_schematic.jpg b/BoldportClub/TheLady/assets/TheLady_schematic.jpg new file mode 100644 index 000000000..a22b397b5 Binary files /dev/null and b/BoldportClub/TheLady/assets/TheLady_schematic.jpg differ diff --git a/BoldportClub/TheLady/assets/kit01_box.jpg b/BoldportClub/TheLady/assets/kit01_box.jpg new file mode 100755 index 000000000..bf41bc043 Binary files /dev/null and b/BoldportClub/TheLady/assets/kit01_box.jpg differ diff --git a/BoldportClub/TheLady/assets/kit02_unbox.jpg b/BoldportClub/TheLady/assets/kit02_unbox.jpg new file mode 100755 index 000000000..d34dbc983 Binary files /dev/null and b/BoldportClub/TheLady/assets/kit02_unbox.jpg differ diff --git a/BoldportClub/TheLady/assets/kit03_parts.jpg b/BoldportClub/TheLady/assets/kit03_parts.jpg new file mode 100755 index 000000000..9ccd5b3d9 Binary files /dev/null and b/BoldportClub/TheLady/assets/kit03_parts.jpg differ diff --git a/BoldportClub/TheLady/assets/kit04_pcb_lower.jpg b/BoldportClub/TheLady/assets/kit04_pcb_lower.jpg new file mode 100755 index 000000000..8275dad71 Binary files /dev/null and b/BoldportClub/TheLady/assets/kit04_pcb_lower.jpg differ diff --git a/BoldportClub/TheLady/assets/kit05_pcb_upper.jpg b/BoldportClub/TheLady/assets/kit05_pcb_upper.jpg new file mode 100755 index 000000000..d21c59d1b Binary files /dev/null and b/BoldportClub/TheLady/assets/kit05_pcb_upper.jpg differ diff --git a/BoldportClub/TheLady/assets/kit06_assembled.jpg b/BoldportClub/TheLady/assets/kit06_assembled.jpg new file mode 100755 index 000000000..1d51a9068 Binary files /dev/null and b/BoldportClub/TheLady/assets/kit06_assembled.jpg differ diff --git a/BoldportClub/TheLady/assets/kit07_deadbug.jpg b/BoldportClub/TheLady/assets/kit07_deadbug.jpg new file mode 100755 index 000000000..ce9346574 Binary files /dev/null and b/BoldportClub/TheLady/assets/kit07_deadbug.jpg differ diff --git a/BoldportClub/TheLady/assets/kit07_deadbug1.jpg b/BoldportClub/TheLady/assets/kit07_deadbug1.jpg new file mode 100755 index 000000000..fa482767a Binary files /dev/null and b/BoldportClub/TheLady/assets/kit07_deadbug1.jpg differ diff --git a/BoldportClub/TheLady/assets/kit08_onglass.jpg b/BoldportClub/TheLady/assets/kit08_onglass.jpg new file mode 100755 index 000000000..e5d1edd1d Binary files /dev/null and b/BoldportClub/TheLady/assets/kit08_onglass.jpg differ diff --git a/BoldportClub/TheLady/assets/kit09_onbox.jpg b/BoldportClub/TheLady/assets/kit09_onbox.jpg new file mode 100755 index 000000000..a6b4e2901 Binary files /dev/null and b/BoldportClub/TheLady/assets/kit09_onbox.jpg differ diff --git a/BoldportClub/TheLady/assets/kit10_inthewild.jpg b/BoldportClub/TheLady/assets/kit10_inthewild.jpg new file mode 100755 index 000000000..a19e80c71 Binary files /dev/null and b/BoldportClub/TheLady/assets/kit10_inthewild.jpg differ diff --git a/BoldportClub/TheLady/assets/kit11_inthewild.jpg b/BoldportClub/TheLady/assets/kit11_inthewild.jpg new file mode 100755 index 000000000..8269a20eb Binary files /dev/null and b/BoldportClub/TheLady/assets/kit11_inthewild.jpg differ diff --git a/BoldportClub/TheLady/assets/kit12_inthewild.jpg b/BoldportClub/TheLady/assets/kit12_inthewild.jpg new file mode 100755 index 000000000..84c0ca7d7 Binary files /dev/null and b/BoldportClub/TheLady/assets/kit12_inthewild.jpg differ diff --git a/BoldportClub/TheMatrix/.catalog_metadata b/BoldportClub/TheMatrix/.catalog_metadata new file mode 100644 index 000000000..26f1657a6 --- /dev/null +++ b/BoldportClub/TheMatrix/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#299", + "name": "BoldportClub/TheMatrix", + "description": "building The Matrix (Boldport Club project #11) is an I\u00b2C-controlled 24x5 LED matrix display, powered by an AMS AS1130 LED driver", + "categories": "Boldport, PCB Design, LED, AS1130", + "relative_path": "BoldportClub/TheMatrix" +} \ No newline at end of file diff --git a/BoldportClub/TheMatrix/Firecracker/.catalog_metadata b/BoldportClub/TheMatrix/Firecracker/.catalog_metadata new file mode 100644 index 000000000..b68e5887f --- /dev/null +++ b/BoldportClub/TheMatrix/Firecracker/.catalog_metadata @@ -0,0 +1,7 @@ +{ + "id": "#312", + "name": "TheMatrix/Firecracker", + "description": "a firecracker simulacrum running on the BoldportClub Matrix", + "categories": "Boldport, LED, AS1130, Sensors", + "relative_path": "BoldportClub/TheMatrix/Firecracker" +} \ No newline at end of file diff --git a/BoldportClub/TheMatrix/Firecracker/Doxyfile b/BoldportClub/TheMatrix/Firecracker/Doxyfile new file mode 100644 index 000000000..25a7a70bc --- /dev/null +++ b/BoldportClub/TheMatrix/Firecracker/Doxyfile @@ -0,0 +1,2484 @@ +# Doxyfile 1.8.14 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "TheMatrix/Firecracker" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via Javascript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have Javascript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /