-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathen.search-data.min.34f2202cb6e4d44f0b5992a36fe2efba8794813a3977ae4a9b5ef06fc41d997f.js
1 lines (1 loc) · 73.1 KB
/
en.search-data.min.34f2202cb6e4d44f0b5992a36fe2efba8794813a3977ae4a9b5ef06fc41d997f.js
1
'use strict';(function(){const indexCfg={cache:true};indexCfg.doc={id:'id',field:['title','content'],store:['title','href','section'],};const index=FlexSearch.create('balance',indexCfg);window.bookSearchIndex=index;index.add({'id':0,'href':'/docs/rpi/description/','title':"Description",'section':"Raspberry Pi Project \"Leto\"",'content':"Repositories\r#\r\rmain publishing repo\r\r\r\rRPI Team working fork\r\r\r\rFirmware repo\r\r\r\rSuper Power: Leto a Raspberry Pi UPS Solution\r#\r\rDescription reference in gdrive\r\r\r\rProject Goals\r#\r\r\rDevelop a community-based, and hence user sourced, multifunction UPS solution for use with the Raspberry Pi main SBC platform (currently RPi3 and 4 models). The board is designed to provide remote power or UPS solutions. Provisions are included for both USB and auxiliary input power. Power is fed to the RPi GPIO header.\nFeature Descriptions\r#\r\rThe board can operate islanded by using a connected battery pack or the board can be used as a UPS solution leaving the board connected to a power source. Leto supports charge while operating, providing uninterrupted RPi operation.\nThe onboard controller includes communication features and expandability for future development. Included are a RTC and I2C communications to the host RPi platform. The inclusion of the RTC permits the Leto board to provide scheduled RPi operation. Physical connection to the RPi GPIO header accommodates a safe-shutdown hardware signal feature for use in either scheduled operation or low-power UPS safe-shutdown.\nThe included I2C communication permits higher level functionality and data exchange between the Leto uC and the RPi. This permits functionality such as charge state, voltage levels, and access to Leto hardware level registers. The uC permits additional communication provisions for secondary I2C and CANBUS for future feature integration.\nThe Leto board is designed to be firmware configurable from the RPi using the project development framework and debugging solution. This provides first-time users an out-of-the-box boot and flash configuration without the use of additional or separate hardware.\nBecause this is a community project, the board includes additional hardware features for expandability, testing, and alternate uC configurations. The team worked to balance features to include provisions for cost, platform flexibility, education, and to address a solution not available on the market.\nDesign\r#\r\rThe board is separated into seven functional areas. There is an accompanying project schematic for each area:\n Input Source Charger Battery Boost Converter Output Protection MCU Output Connections Input Source\r#\r\rThe input source permits for connection to either a USB type-C connector or screw terminals. The team selected USB-C for its higher power capacity specification over the previous version of USB and that current versions of RPi 4 are configured with type-C. This permits the end user to use their existing power supply to power the Leto project.\nRecognizing that many other options for power are available, the team provided screw terminals to permit the connection of alternate sources. One considered use case is a remotely managed and voltage regulated solar array.\n\rThe Leto board is designed to charge and run on a 5V power source, but the onboard charging uC can accommodate input voltages on the screw terminals between 4.5 V and 14V. The data pins on the USB connector are connected to the charging uC to permit full use of its hardware features. The charging uC supports OTG USB functionality.\nInput conditioning includes reverse polarity protection via MOFSET Q3.\n\rOvervoltage protection via the circuit using Q2 and Q7.\n\rCharger\r#\r\rThe Leto project selected the TI BQ25895RTW battery charging uC for its feature set and ability to provide 3.0A to the connected load. While the RPi in base configuration does not regularly exceed 1.0A of current draw, the team wanted to ensure that the Leto project matched the 3.0A power source regularly provided with the RPi 4. This additional current overhead permits the use of attached peripherals such as an SSD, field sensors, overclocking, and active cooling.\nThe current overhead also permits the battery charge uC to operate well below its thermal limits during regular use.\nThe charger uC uses internal voltage conversion circuitry to control battery charge curves and its externally connected boost converter circuit to regulate the output voltage.\n\rAdditional selection criteria for the charge controller uC included a boost frequency that would not cause problems with the RPi and onboard ADC for battery state communication to the main uC and RPi.\nThe battery charge uC communicates with the Leto host uC over I2C.\nThere is a provision for use of a remote battery thermistor for advanced battery charge management.\nAn onboard LED indicates the presence of voltage on the output of the charging uC.\n\rCurrent limiting functionality is available on the charger but is not implemented in this version. IMEAS is provided for future feature addition or for the end user to add features.\n\rBattery\r#\r\rThe project is designed for use with a 2800 mAh Li-Ion 18650 3S battery configuration. Nominal battery voltage design is 3.7V. The charging uC does not include functionality for cell balancing. This was not implemented due to the nature and variation of potential user connected sources.\nThe Leto project is not designed for use with multicell packs arranged in a series configuration with voltages over 3.7V.\nRecognizing the possibility of user error, the battery circuit implemented polarity protection through Q1 and Q6.\n\rThe board includes multiple test points for the end user to explore and measure board functions. TP1 and TP2 are provided to manually test the voltage across the battery connectors.\nThe optional battery thermistor can be connected at J4. The thermistor must be a negative temperature coefficient style. The recommended unit by TI is a 103AT-2.\n\rBoost Converter\r#\r\rThe boost converter steps the charger output voltage to the target Leto supply voltage. The TI TPS61088 package provides for a peak 10A capacity and internal thermal shutdown protection.\nWhen operated in the target output range of 5V and between 0.5A and 3A, this boost converter achieves 95% efficiency. The configurable switching frequency permitted the team to design a boost converter that would not cause RPi interference.\n\r\rOn board power for the Leto 3.3V control components is provided by U5:\n\rOutput Protection\r#\r\rThe leto project provides output protection using a current regulating circuit connected downstream of the boost converter. The NCP380 regulates output current in a short condition using internal MOFSET switching.\n\rThe OP_Enable signal permits the Leto uC to switch off power the connected RPi and the FLAG signal indicates a circuit protection state.\nThe team would like to see additional output signal quantification in future revisions to calculate total power consumption and provide estimated UPS or battery run times. This feature is not yet implemented due to const and limits on revision one complexity.\nOutput Connections\r#\r\rThe Leto RPi power management project is designed to be an under-slung solution. The end user is required to assemble provided pogo pins to make connections to the underside of the RPi GPIO header. The end user can alternately select to mount a standard GPIO shield connector.\nAn under-slung arrangement using the standard shield footprint was selected to permit the use of active RPi cooling or not interfere with other shields.\n\rNote: in the render above all of the GPIO are populated. The end user only needs to solder the required GPIO pins identified in the schematic below:\n\rThe Leto board pin connection functionality is as follows:\n\rPrevious Overview\r#\r\rBlock Diagram\r#\r\rreference design in gdrive\r\r\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-e11c136b1839544f' ,params);\rwindow[\"svg_e11c136b1839544f\"] = svg_pz\rlet button = document.getElementById(\"btn-e11c136b1839544f\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-e11c136b1839544f\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_e11c136b1839544f\"].resize()\rwindow[\"svg_e11c136b1839544f\"].fit()\rwindow[\"svg_e11c136b1839544f\"].center()\r}\rdocument.getElementById('svg-e11c136b1839544f').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rThe Super Power RPi edition is a battery backup unit for the Raspberry Pi single board computer. It is meant to work with the Raspberry Pi 3 and 4.\nDesign\r#\r\rThe design is based on the bq25895 charger IC and the TPS61088 boost converter IC. It also integrates an STM32F412 microcontroller to provide timing and control independent of the Raspberry Pi.\nThe bq25895 provides some specific benefits for this project. It has a low series resistance in it\u0026rsquo;s FET, so the resistance between the battery and the boost converter is quite low. It also automatically negotiates higher power USB charging. Finally, it has significant internal monitoring, which eliminates the need for external components such as an ADC.\nThe STM32F412 was selected as it has quite a few internal peripherals to choose from. It also has a built in RTC, which allows for maintaining time even between power cycles.\nIn addition to the STM32, the footprint for an ATTiny85 was provided, but not populated, such that if anyone wants to use that series of MCU, they are able.\nPhysical Form Factor\r#\r\rThe Super Power RPi takes the shape of a Pi HAT PCB. It is designed to be used as either a traditional HAT, or in an underslung configuration.\nThe traditional HAT makes electrical connections using the 40-pin header and it is secured using the mounting holes at the 4 corners.\nThe underslung configuration also uses the mounting holes, but makes the electrical connections using pogo-pins. The pogo-pins connect to the 5V, GND, and I2C pins. The standoffs to be used are ____mm tall.\nUse Cases\r#\r\rGenerally speaking, any situation that needs a Raspberry Pi to operate on batteries can be a potential use-case for this design.\nMore specifically, the following use cases were considered:\n Uninterruptable Power Supply (UPS). In cases where there is a potential power interruption, the Superpower provides backup power so the Raspberry Pi does not have an unexpected restart. Portable Pi. In cases where it is desirable to have a portable Pi or a Pi that will operate for extended periods of time using something other than \u0026ldquo;commercial power mains\u0026rdquo;, such as amateur radio Field Day competitions. This can be used to provide a computer that meets this criteria. Potential future versions\r#\r\r Build a specific version that includes a solar MPPT IC. github readme\n"});index.add({'id':1,'href':'/docs/project/guidelines/','title':"Guidelines",'section':"PROJECT",'content':"Guidelines\r#\r\rGood schematics show you the circuit. Bad schematics make you decipher them. Here you can find a bunch of guidelines we set up to get consistent schematics along the project.\nSchematics\r#\r\rClean Text placement\r#\r\r After placing a symbol make sure the designator is close to the symbol and does not overlap other text or tracks Make some space and move parts if they are too close Do not place text verticaly \r\r\rLayout flow\r#\r\r Logical flow from left to right Power connectioncs should go up to positive voltages and down to negative voltages Rotate common symbols the same way to find similarities faster in a schematics \r\r\rSchematic Symbols\r#\r\r Show pins of an IC in a position relevant to their function, not how they happen to stick out of the chip. Positive pins top the top Negative pins to the bottom Inputs to the left Outputs to the right \r\r\rDirect connections, within reason\r#\r\r reduce wire crossing and alike as much as possible for clarity draw dots on junctions if your tool does not do it for you (if not you should use a better one) \r\r\rNETs and Labels\r#\r\r Give your NETs nicely readable names But keep them reasonably short Always try to use your tool to select a NET instead of writing it by hand to avoind spelling mistakes Use upper case for NET Labels See this ANSI/IEEE standard for recommended pin name abbreviations. "});index.add({'id':2,'href':'/docs/uc/original/schematics/','title':"Schematics (ESP32 shield)",'section':"Apollo Board",'content':"\rschematics 21/12/2020 commit e659155\r\r\r\rTop View\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-3ea1810aac0ba180' ,params);\rwindow[\"svg_3ea1810aac0ba180\"] = svg_pz\rlet button = document.getElementById(\"btn-3ea1810aac0ba180\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-3ea1810aac0ba180\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_3ea1810aac0ba180\"].resize()\rwindow[\"svg_3ea1810aac0ba180\"].fit()\rwindow[\"svg_3ea1810aac0ba180\"].center()\r}\rdocument.getElementById('svg-3ea1810aac0ba180').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rCharging Module\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-fac08b683ee4a8c1' ,params);\rwindow[\"svg_fac08b683ee4a8c1\"] = svg_pz\rlet button = document.getElementById(\"btn-fac08b683ee4a8c1\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-fac08b683ee4a8c1\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_fac08b683ee4a8c1\"].resize()\rwindow[\"svg_fac08b683ee4a8c1\"].fit()\rwindow[\"svg_fac08b683ee4a8c1\"].center()\r}\rdocument.getElementById('svg-fac08b683ee4a8c1').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rCharger IO\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-dbc5b17a8f93209d' ,params);\rwindow[\"svg_dbc5b17a8f93209d\"] = svg_pz\rlet button = document.getElementById(\"btn-dbc5b17a8f93209d\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-dbc5b17a8f93209d\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_dbc5b17a8f93209d\"].resize()\rwindow[\"svg_dbc5b17a8f93209d\"].fit()\rwindow[\"svg_dbc5b17a8f93209d\"].center()\r}\rdocument.getElementById('svg-dbc5b17a8f93209d').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rRTC cut-off\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-09bbab9711edea5a' ,params);\rwindow[\"svg_09bbab9711edea5a\"] = svg_pz\rlet button = document.getElementById(\"btn-09bbab9711edea5a\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-09bbab9711edea5a\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_09bbab9711edea5a\"].resize()\rwindow[\"svg_09bbab9711edea5a\"].fit()\rwindow[\"svg_09bbab9711edea5a\"].center()\r}\rdocument.getElementById('svg-09bbab9711edea5a').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rRegulator\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-f6fbd79517a46b03' ,params);\rwindow[\"svg_f6fbd79517a46b03\"] = svg_pz\rlet button = document.getElementById(\"btn-f6fbd79517a46b03\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-f6fbd79517a46b03\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_f6fbd79517a46b03\"].resize()\rwindow[\"svg_f6fbd79517a46b03\"].fit()\rwindow[\"svg_f6fbd79517a46b03\"].center()\r}\rdocument.getElementById('svg-f6fbd79517a46b03').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rBattery and Protection\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-75c953df418af0b4' ,params);\rwindow[\"svg_75c953df418af0b4\"] = svg_pz\rlet button = document.getElementById(\"btn-75c953df418af0b4\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-75c953df418af0b4\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_75c953df418af0b4\"].resize()\rwindow[\"svg_75c953df418af0b4\"].fit()\rwindow[\"svg_75c953df418af0b4\"].center()\r}\rdocument.getElementById('svg-75c953df418af0b4').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rMCU\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-62c789190d016b1c' ,params);\rwindow[\"svg_62c789190d016b1c\"] = svg_pz\rlet button = document.getElementById(\"btn-62c789190d016b1c\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-62c789190d016b1c\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_62c789190d016b1c\"].resize()\rwindow[\"svg_62c789190d016b1c\"].fit()\rwindow[\"svg_62c789190d016b1c\"].center()\r}\rdocument.getElementById('svg-62c789190d016b1c').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\r"});index.add({'id':3,'href':'/docs/uc/lowcost/schematics/','title':"Schematics with ESP32",'section':"Artemis Board",'content':"\rschematics 24/01/2021 commit d7be486\r\r\r\rTop View\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-5fb1a529eee21e79' ,params);\rwindow[\"svg_5fb1a529eee21e79\"] = svg_pz\rlet button = document.getElementById(\"btn-5fb1a529eee21e79\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-5fb1a529eee21e79\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_5fb1a529eee21e79\"].resize()\rwindow[\"svg_5fb1a529eee21e79\"].fit()\rwindow[\"svg_5fb1a529eee21e79\"].center()\r}\rdocument.getElementById('svg-5fb1a529eee21e79').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rCharging Module\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-23b9d72655748788' ,params);\rwindow[\"svg_23b9d72655748788\"] = svg_pz\rlet button = document.getElementById(\"btn-23b9d72655748788\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-23b9d72655748788\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_23b9d72655748788\"].resize()\rwindow[\"svg_23b9d72655748788\"].fit()\rwindow[\"svg_23b9d72655748788\"].center()\r}\rdocument.getElementById('svg-23b9d72655748788').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rCharger IO\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-ec13d23c37968805' ,params);\rwindow[\"svg_ec13d23c37968805\"] = svg_pz\rlet button = document.getElementById(\"btn-ec13d23c37968805\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-ec13d23c37968805\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_ec13d23c37968805\"].resize()\rwindow[\"svg_ec13d23c37968805\"].fit()\rwindow[\"svg_ec13d23c37968805\"].center()\r}\rdocument.getElementById('svg-ec13d23c37968805').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rRTC cut-off\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-c4a0d51ad56b57d4' ,params);\rwindow[\"svg_c4a0d51ad56b57d4\"] = svg_pz\rlet button = document.getElementById(\"btn-c4a0d51ad56b57d4\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-c4a0d51ad56b57d4\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_c4a0d51ad56b57d4\"].resize()\rwindow[\"svg_c4a0d51ad56b57d4\"].fit()\rwindow[\"svg_c4a0d51ad56b57d4\"].center()\r}\rdocument.getElementById('svg-c4a0d51ad56b57d4').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rRegulator\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-21cbface68dfdda3' ,params);\rwindow[\"svg_21cbface68dfdda3\"] = svg_pz\rlet button = document.getElementById(\"btn-21cbface68dfdda3\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-21cbface68dfdda3\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_21cbface68dfdda3\"].resize()\rwindow[\"svg_21cbface68dfdda3\"].fit()\rwindow[\"svg_21cbface68dfdda3\"].center()\r}\rdocument.getElementById('svg-21cbface68dfdda3').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rBattery and Protection\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-877bedbe7d6d09e1' ,params);\rwindow[\"svg_877bedbe7d6d09e1\"] = svg_pz\rlet button = document.getElementById(\"btn-877bedbe7d6d09e1\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-877bedbe7d6d09e1\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_877bedbe7d6d09e1\"].resize()\rwindow[\"svg_877bedbe7d6d09e1\"].fit()\rwindow[\"svg_877bedbe7d6d09e1\"].center()\r}\rdocument.getElementById('svg-877bedbe7d6d09e1').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rMCU\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-84df20630d86236a' ,params);\rwindow[\"svg_84df20630d86236a\"] = svg_pz\rlet button = document.getElementById(\"btn-84df20630d86236a\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-84df20630d86236a\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_84df20630d86236a\"].resize()\rwindow[\"svg_84df20630d86236a\"].fit()\rwindow[\"svg_84df20630d86236a\"].center()\r}\rdocument.getElementById('svg-84df20630d86236a').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\r"});index.add({'id':4,'href':'/docs/uc/original/board/','title':"Board (ESP32 shield)",'section':"Apollo Board",'content':"\rschematics 31/01/2021 commit 4732a2\r\r\r\rview pdf\r\r\r\rTop View\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-f01b921080e9c78e' ,params);\rwindow[\"svg_f01b921080e9c78e\"] = svg_pz\rlet button = document.getElementById(\"btn-f01b921080e9c78e\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-f01b921080e9c78e\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_f01b921080e9c78e\"].resize()\rwindow[\"svg_f01b921080e9c78e\"].fit()\rwindow[\"svg_f01b921080e9c78e\"].center()\r}\rdocument.getElementById('svg-f01b921080e9c78e').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rBottom View\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-db0fb85eea579183' ,params);\rwindow[\"svg_db0fb85eea579183\"] = svg_pz\rlet button = document.getElementById(\"btn-db0fb85eea579183\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-db0fb85eea579183\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_db0fb85eea579183\"].resize()\rwindow[\"svg_db0fb85eea579183\"].fit()\rwindow[\"svg_db0fb85eea579183\"].center()\r}\rdocument.getElementById('svg-db0fb85eea579183').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\r"});index.add({'id':5,'href':'/docs/uc/lowcost/board/','title':"Board (ESP32 single)",'section':"Artemis Board",'content':"\rgithub action 01/02/2021\r\r\r\rschematics 01/02/2021 commit 1a7d5bbb\r\r\r\rview pdf\r\r\r\rTop View\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-ed062a7d4deea496' ,params);\rwindow[\"svg_ed062a7d4deea496\"] = svg_pz\rlet button = document.getElementById(\"btn-ed062a7d4deea496\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-ed062a7d4deea496\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_ed062a7d4deea496\"].resize()\rwindow[\"svg_ed062a7d4deea496\"].fit()\rwindow[\"svg_ed062a7d4deea496\"].center()\r}\rdocument.getElementById('svg-ed062a7d4deea496').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rBottom View\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-0ef90d25752943dd' ,params);\rwindow[\"svg_0ef90d25752943dd\"] = svg_pz\rlet button = document.getElementById(\"btn-0ef90d25752943dd\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-0ef90d25752943dd\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_0ef90d25752943dd\"].resize()\rwindow[\"svg_0ef90d25752943dd\"].fit()\rwindow[\"svg_0ef90d25752943dd\"].center()\r}\rdocument.getElementById('svg-0ef90d25752943dd').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\r"});index.add({'id':6,'href':'/docs/uc/lowcost/ibom/','title':"Interactive BOM",'section':"Artemis Board",'content':"Interactive Bill of Materials\r#\r\rschematics 24/01/2021 commit d7be486\r\r\r\rFull screen\rOpen in a new page\r\r\r\r\rvar button = document.getElementById(\"btn-75fa39f46dd66ce2\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"ifm-75fa39f46dd66ce2\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r\r"});index.add({'id':7,'href':'/docs/project/license/','title':"License",'section':"PROJECT",'content':"CERN Open Hardware Licence Version 2 - Weakly Reciprocal\nPreamble\nCERN has developed this licence to promote collaboration among hardware designers and to provide a legal tool which supports the freedom to use, study, modify, share and distribute hardware designs and products based on those designs. Version 2 of the CERN Open Hardware Licence comes in three variants: CERN-OHL-P (permissive); and two reciprocal licences: this licence, CERN-OHL-W (weakly reciprocal) and CERN-OHL-S (strongly reciprocal).\nThe CERN-OHL-W is copyright CERN 2020. Anyone is welcome to use it, in unmodified form only.\nUse of this Licence does not imply any endorsement by CERN of any Licensor or their designs nor does it imply any involvement by CERN in their development.\n1 Definitions\r#\r\r1.1 \u0026lsquo;Licence\u0026rsquo; means this CERN-OHL-W.\n1.2 \u0026lsquo;Compatible Licence\u0026rsquo; means\n a) any earlier version of the CERN Open Hardware licence, or\rb) any version of the CERN-OHL-S or the CERN-OHL-W, or\rc) any licence which permits You to treat the Source to which\rit applies as licensed under CERN-OHL-S or CERN-OHL-W\rprovided that on Conveyance of any such Source, or any\rassociated Product You treat the Source in question as being\rlicensed under CERN-OHL-S or CERN-OHL-W as appropriate.\r 1.3 \u0026lsquo;Source\u0026rsquo; means information such as design materials or digital code which can be applied to Make or test a Product or to prepare a Product for use, Conveyance or sale, regardless of its medium or how it is expressed. It may include Notices.\n1.4 \u0026lsquo;Covered Source\u0026rsquo; means Source that is explicitly made available under this Licence.\n1.5 \u0026lsquo;Product\u0026rsquo; means any device, component, work or physical object, whether in finished or intermediate form, arising from the use, application or processing of Covered Source.\n1.6 \u0026lsquo;Make\u0026rsquo; means to create or configure something, whether by manufacture, assembly, compiling, loading or applying Covered Source or another Product or otherwise.\n1.7 \u0026lsquo;Available Component\u0026rsquo; means any part, sub-assembly, library or code which:\n a) is licensed to You as Complete Source under a Compatible\rLicence; or\rb) is available, at the time a Product or the Source containing\rit is first Conveyed, to You and any other prospective\rlicensees\ri) with sufficient rights and information (including any\rconfiguration and programming files and information\rabout its characteristics and interfaces) to enable it\reither to be Made itself, or to be sourced and used to\rMake the Product; or\rii) as part of the normal distribution of a tool used to\rdesign or Make the Product.\r 1.8 \u0026lsquo;External Material\u0026rsquo; means anything (including Source) which:\n a) is only combined with Covered Source in such a way that it\rinterfaces with the Covered Source using a documented\rinterface which is described in the Covered Source; and\rb) is not a derivative of or contains Covered Source, or, if it\ris, it is solely to the extent necessary to facilitate such\rinterfacing.\r 1.9 \u0026lsquo;Complete Source\u0026rsquo; means the set of all Source necessary to Make a Product, in the preferred form for making modifications, including necessary installation and interfacing information both for the Product, and for any included Available Components. If the format is proprietary, it must also be made available in a format (if the proprietary tool can create it) which is viewable with a tool available to potential licensees and licensed under a licence approved by the Free Software Foundation or the Open Source Initiative. Complete Source need not include the Source of any Available Component, provided that You include in the Complete Source sufficient information to enable a recipient to Make or source and use the Available Component to Make the Product.\n1.10 \u0026lsquo;Source Location\u0026rsquo; means a location where a Licensor has placed Covered Source, and which that Licensor reasonably believes will remain easily accessible for at least three years for anyone to obtain a digital copy.\n1.11 \u0026lsquo;Notice\u0026rsquo; means copyright, acknowledgement and trademark notices, Source Location references, modification notices (subsection 3.3(b)) and all notices that refer to this Licence and to the disclaimer of warranties that are included in the Covered Source.\n1.12 \u0026lsquo;Licensee\u0026rsquo; or \u0026lsquo;You\u0026rsquo; means any person exercising rights under this Licence.\n1.13 \u0026lsquo;Licensor\u0026rsquo; means a natural or legal person who creates or modifies Covered Source. A person may be a Licensee and a Licensor at the same time.\n1.14 \u0026lsquo;Convey\u0026rsquo; means to communicate to the public or distribute.\n2 Applicability\r#\r\r2.1 This Licence governs the use, copying, modification, Conveying of Covered Source and Products, and the Making of Products. By exercising any right granted under this Licence, You irrevocably accept these terms and conditions.\n2.2 This Licence is granted by the Licensor directly to You, and shall apply worldwide and without limitation in time.\n2.3 You shall not attempt to restrict by contract or otherwise the rights granted under this Licence to other Licensees.\n2.4 This Licence is not intended to restrict fair use, fair dealing, or any other similar right.\n3 Copying, Modifying and Conveying Covered Source\r#\r\r3.1 You may copy and Convey verbatim copies of Covered Source, in any medium, provided You retain all Notices.\n3.2 You may modify Covered Source, other than Notices, provided that You irrevocably undertake to make that modified Covered Source available from a Source Location should You Convey a Product in circumstances where the recipient does not otherwise receive a copy of the modified Covered Source. In each case subsection 3.3 shall apply.\n You may only delete Notices if they are no longer applicable to\rthe corresponding Covered Source as modified by You and You may\radd additional Notices applicable to Your modifications.\r 3.3 You may Convey modified Covered Source (with the effect that You shall also become a Licensor) provided that You:\n a) retain Notices as required in subsection 3.2;\rb) add a Notice to the modified Covered Source stating that You\rhave modified it, with the date and brief description of how\rYou have modified it;\rc) add a Source Location Notice for the modified Covered Source\rif You Convey in circumstances where the recipient does not\rotherwise receive a copy of the modified Covered Source; and\rd) license the modified Covered Source under the terms and\rconditions of this Licence (or, as set out in subsection\r8.3, a later version, if permitted by the licence of the\roriginal Covered Source). Such modified Covered Source must\rbe licensed as a whole, but excluding Available Components\rcontained in it or External Material to which it is\rinterfaced, which remain licensed under their own applicable\rlicences.\r 4 Making and Conveying Products\r#\r\r4.1 You may Make Products, and/or Convey them, provided that You either provide each recipient with a copy of the Complete Source or ensure that each recipient is notified of the Source Location of the Complete Source. That Complete Source includes Covered Source and You must accordingly satisfy Your obligations set out in subsection 3.3. If specified in a Notice, the Product must visibly and securely display the Source Location on it or its packaging or documentation in the manner specified in that Notice.\n4.2 Where You Convey a Product which incorporates External Material, the Complete Source for that Product which You are required to provide under subsection 4.1 need not include any Source for the External Material.\n4.3 You may license Products under terms of Your choice, provided that such terms do not restrict or attempt to restrict any recipients' rights under this Licence to the Covered Source.\n5 Research and Development\r#\r\rYou may Convey Covered Source, modified Covered Source or Products to a legal entity carrying out development, testing or quality assurance work on Your behalf provided that the work is performed on terms which prevent the entity from both using the Source or Products for its own internal purposes and Conveying the Source or Products or any modifications to them to any person other than You. Any modifications made by the entity shall be deemed to be made by You pursuant to subsection 3.2.\n6 DISCLAIMER AND LIABILITY\r#\r\r6.1 DISCLAIMER OF WARRANTY \u0026ndash; The Covered Source and any Products are provided \u0026lsquo;as is\u0026rsquo; and any express or implied warranties, including, but not limited to, implied warranties of merchantability, of satisfactory quality, non-infringement of third party rights, and fitness for a particular purpose or use are disclaimed in respect of any Source or Product to the maximum extent permitted by law. The Licensor makes no representation that any Source or Product does not or will not infringe any patent, copyright, trade secret or other proprietary right. The entire risk as to the use, quality, and performance of any Source or Product shall be with You and not the Licensor. This disclaimer of warranty is an essential part of this Licence and a condition for the grant of any rights granted under this Licence.\n6.2 EXCLUSION AND LIMITATION OF LIABILITY \u0026ndash; The Licensor shall, to the maximum extent permitted by law, have no liability for direct, indirect, special, incidental, consequential, exemplary, punitive or other damages of any character including, without limitation, procurement of substitute goods or services, loss of use, data or profits, or business interruption, however caused and on any theory of contract, warranty, tort (including negligence), product liability or otherwise, arising in any way in relation to the Covered Source, modified Covered Source and/or the Making or Conveyance of a Product, even if advised of the possibility of such damages, and You shall hold the Licensor(s) free and harmless from any liability, costs, damages, fees and expenses, including claims by third parties, in relation to such use.\n7 Patents\r#\r\r7.1 Subject to the terms and conditions of this Licence, each Licensor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in subsections 7.2 and 8.4) patent license to Make, have Made, use, offer to sell, sell, import, and otherwise transfer the Covered Source and Products, where such licence applies only to those patent claims licensable by such Licensor that are necessarily infringed by exercising rights under the Covered Source as Conveyed by that Licensor.\n7.2 If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Covered Source or a Product constitutes direct or contributory patent infringement, or You seek any declaration that a patent licensed to You under this Licence is invalid or unenforceable then any rights granted to You under this Licence shall terminate as of the date such process is initiated.\n8 General\r#\r\r8.1 If any provisions of this Licence are or subsequently become invalid or unenforceable for any reason, the remaining provisions shall remain effective.\n8.2 You shall not use any of the name (including acronyms and abbreviations), image, or logo by which the Licensor or CERN is known, except where needed to comply with section 3, or where the use is otherwise allowed by law. Any such permitted use shall be factual and shall not be made so as to suggest any kind of endorsement or implication of involvement by the Licensor or its personnel.\n8.3 CERN may publish updated versions and variants of this Licence which it considers to be in the spirit of this version, but may differ in detail to address new problems or concerns. New versions will be published with a unique version number and a variant identifier specifying the variant. If the Licensor has specified that a given variant applies to the Covered Source without specifying a version, You may treat that Covered Source as being released under any version of the CERN-OHL with that variant. If no variant is specified, the Covered Source shall be treated as being released under CERN-OHL-S. The Licensor may also specify that the Covered Source is subject to a specific version of the CERN-OHL or any later version in which case You may apply this or any later version of CERN-OHL with the same variant identifier published by CERN.\n You may treat Covered Source licensed under CERN-OHL-W as\rlicensed under CERN-OHL-S if and only if all Available\rComponents referenced in the Covered Source comply with the\rcorresponding definition of Available Component for CERN-OHL-S.\r 8.4 This Licence shall terminate with immediate effect if You fail to comply with any of its terms and conditions.\n8.5 However, if You cease all breaches of this Licence, then Your Licence from any Licensor is reinstated unless such Licensor has terminated this Licence by giving You, while You remain in breach, a notice specifying the breach and requiring You to cure it within 30 days, and You have failed to come into compliance in all material respects by the end of the 30 day period. Should You repeat the breach after receipt of a cure notice and subsequent reinstatement, this Licence will terminate immediately and permanently. Section 6 shall continue to apply after any termination.\n8.6 This Licence shall not be enforceable except by a Licensor acting as such, and third party beneficiary rights are specifically excluded.\n"});index.add({'id':8,'href':'/docs/rpi/requirements/','title':"Requirements",'section':"Raspberry Pi Project \"Leto\"",'content':"Requirements\r#\r\rFull screen\rOpen in a new page\r\r\r\r\rvar button = document.getElementById(\"btn-636e81262af8d0df\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"ifm-636e81262af8d0df\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r\r"});index.add({'id':9,'href':'/docs/uc/features/','title':"Features",'section':"Microcontroller Solar Power",'content':"Features\r#\r\r Features Apollo Artemis 5V outputs switchable / buck-boost switchable / boost 5V Output current 1.5A 0.5 A 3.3V outputs switchable / buck-boost switchable / linear 3.3V Output current 1A 0.5 A Protected Battery output yes no (connector missing tbd) RTC yes yes RTC Bypass yes yes NTC (temperature) yes yes External wakeup yes yes Button wakeup yes yes Charger switching buck linear Charging current 500mA 500mA Power path yes no Telemetry yes no Chemistry Li-Ion/LiPo (Available chip for LiFePo4) Li-Ion/LiPo sleep current (tbc) ?? uA 9 uA USB USB-C micro USB USB-ESD protection yes no Efficiency (to be measured) High Low Max input Volt 16 V 8 V Number of cells up to 3 1 RGBW LED yes no "});index.add({'id':10,'href':'/docs/uc/original/ibom/','title':"Interactive BOM",'section':"Apollo Board",'content':"Interactive Bill of Materials\r#\r\r\rschematics 21/12/2020 commit e659155\r\r\r\rFull screen\rOpen in a new page\r\r\r\r\rvar button = document.getElementById(\"btn-802930e70fa595e0\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"ifm-802930e70fa595e0\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r\r"});index.add({'id':11,'href':'/docs/rpi/schematics/','title':"Schematics",'section':"Raspberry Pi Project \"Leto\"",'content':"\rschematics commit link\r\r\r\rTop View\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-ab7eb4abeb0393b5' ,params);\rwindow[\"svg_ab7eb4abeb0393b5\"] = svg_pz\rlet button = document.getElementById(\"btn-ab7eb4abeb0393b5\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-ab7eb4abeb0393b5\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_ab7eb4abeb0393b5\"].resize()\rwindow[\"svg_ab7eb4abeb0393b5\"].fit()\rwindow[\"svg_ab7eb4abeb0393b5\"].center()\r}\rdocument.getElementById('svg-ab7eb4abeb0393b5').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rMCU\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-e4bec72a850fa84f' ,params);\rwindow[\"svg_e4bec72a850fa84f\"] = svg_pz\rlet button = document.getElementById(\"btn-e4bec72a850fa84f\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-e4bec72a850fa84f\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_e4bec72a850fa84f\"].resize()\rwindow[\"svg_e4bec72a850fa84f\"].fit()\rwindow[\"svg_e4bec72a850fa84f\"].center()\r}\rdocument.getElementById('svg-e4bec72a850fa84f').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rInput Source\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-63818215cf2ce3ad' ,params);\rwindow[\"svg_63818215cf2ce3ad\"] = svg_pz\rlet button = document.getElementById(\"btn-63818215cf2ce3ad\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-63818215cf2ce3ad\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_63818215cf2ce3ad\"].resize()\rwindow[\"svg_63818215cf2ce3ad\"].fit()\rwindow[\"svg_63818215cf2ce3ad\"].center()\r}\rdocument.getElementById('svg-63818215cf2ce3ad').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rCharger\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-da1a14e5f209e953' ,params);\rwindow[\"svg_da1a14e5f209e953\"] = svg_pz\rlet button = document.getElementById(\"btn-da1a14e5f209e953\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-da1a14e5f209e953\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_da1a14e5f209e953\"].resize()\rwindow[\"svg_da1a14e5f209e953\"].fit()\rwindow[\"svg_da1a14e5f209e953\"].center()\r}\rdocument.getElementById('svg-da1a14e5f209e953').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rBoost converter\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-7c6d8e0767a5978e' ,params);\rwindow[\"svg_7c6d8e0767a5978e\"] = svg_pz\rlet button = document.getElementById(\"btn-7c6d8e0767a5978e\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-7c6d8e0767a5978e\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_7c6d8e0767a5978e\"].resize()\rwindow[\"svg_7c6d8e0767a5978e\"].fit()\rwindow[\"svg_7c6d8e0767a5978e\"].center()\r}\rdocument.getElementById('svg-7c6d8e0767a5978e').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rOutput protection\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-a2a160683c6a1099' ,params);\rwindow[\"svg_a2a160683c6a1099\"] = svg_pz\rlet button = document.getElementById(\"btn-a2a160683c6a1099\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-a2a160683c6a1099\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_a2a160683c6a1099\"].resize()\rwindow[\"svg_a2a160683c6a1099\"].fit()\rwindow[\"svg_a2a160683c6a1099\"].center()\r}\rdocument.getElementById('svg-a2a160683c6a1099').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rConnection\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-8a63653903bf43b4' ,params);\rwindow[\"svg_8a63653903bf43b4\"] = svg_pz\rlet button = document.getElementById(\"btn-8a63653903bf43b4\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-8a63653903bf43b4\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_8a63653903bf43b4\"].resize()\rwindow[\"svg_8a63653903bf43b4\"].fit()\rwindow[\"svg_8a63653903bf43b4\"].center()\r}\rdocument.getElementById('svg-8a63653903bf43b4').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rBattery\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-01f1b12e1303a255' ,params);\rwindow[\"svg_01f1b12e1303a255\"] = svg_pz\rlet button = document.getElementById(\"btn-01f1b12e1303a255\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-01f1b12e1303a255\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_01f1b12e1303a255\"].resize()\rwindow[\"svg_01f1b12e1303a255\"].fit()\rwindow[\"svg_01f1b12e1303a255\"].center()\r}\rdocument.getElementById('svg-01f1b12e1303a255').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\r"});index.add({'id':12,'href':'/docs/project/howto/','title':"This Website How to",'section':"PROJECT",'content':"This documentation is created with hugo a static website generator\ninstall hugo\r#\r\rInstalling hugo is quite simple, as it\u0026rsquo;s a standalone binary that can be downloaded and added to the system path\nhugo getting-started : installing\r\r\r\rclone this repo\r#\r\rNote the recusive clone to add the git submodules as well\n\u0026gt;git clone --recursive https://github.com/SuperPower/hugo_website.git\r\u0026gt;cd hugo_website\r test locally\r#\r\rno generation is required to test locally, hugo takes care of generating and serving\n\u0026gt;hugo server\r deploy\r#\r\rgenerate the website in the public folder\n\u0026gt;hugo\r make sure you commit and push the public submodule before the top repo\ndoc support\r#\r\r for questions or issues related to how to use or contribute to the documentation website repo / issues\r\r\r\rdoc maintainer\r#\r\r for any other questions github.com/wassfila\r\r\r\r"});index.add({'id':13,'href':'/docs/rpi/board/','title':"Board",'section':"Raspberry Pi Project \"Leto\"",'content':"\rgithub action 11/01/2021\r\r\r\rschematics 11/01/2021 commit d3b12cf7\r\r\r\rview pdf\r\r\r\rTop View\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-8b74164f79ac2d97' ,params);\rwindow[\"svg_8b74164f79ac2d97\"] = svg_pz\rlet button = document.getElementById(\"btn-8b74164f79ac2d97\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-8b74164f79ac2d97\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_8b74164f79ac2d97\"].resize()\rwindow[\"svg_8b74164f79ac2d97\"].fit()\rwindow[\"svg_8b74164f79ac2d97\"].center()\r}\rdocument.getElementById('svg-8b74164f79ac2d97').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\rBottom View\r#\r\rFull Screen\r\r\r\rfunction setup_svg_panzoom(){\rlet params = {\rpanEnabled: true,\rzoomEnabled: true,\rdblClickZoomEnabled: true,\rcontrolIconsEnabled: false,\rmouseWheelZoomEnabled: true,\rpreventMouseEventsDefault: true,\rzoomScaleSensitivity: 0.6,\rminZoom: 0.5,\rmaxZoom: 4,\rfit: true\r, contain: true\r, center: true\r, refreshRate: 'auto'\r};\rlet svg_pz = svgPanZoom('#svg-1082a74b6211bee5' ,params);\rwindow[\"svg_1082a74b6211bee5\"] = svg_pz\rlet button = document.getElementById(\"btn-1082a74b6211bee5\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"svg-1082a74b6211bee5\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r}\rfunction reset_position(){\rwindow[\"svg_1082a74b6211bee5\"].resize()\rwindow[\"svg_1082a74b6211bee5\"].fit()\rwindow[\"svg_1082a74b6211bee5\"].center()\r}\rdocument.getElementById('svg-1082a74b6211bee5').addEventListener('load', setup_svg_panzoom)\rwindow.addEventListener('resize', reset_position)\r\r"});index.add({'id':14,'href':'/docs/uc/requirements/','title':"Requirements",'section':"Microcontroller Solar Power",'content':"Requirements\r#\r\rFull screen\rOpen in a new page\r\r\r\r\rvar button = document.getElementById(\"btn-c1faa48d69c2c798\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"ifm-c1faa48d69c2c798\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r\r"});index.add({'id':15,'href':'/docs/rpi/developers/','title':"Developers Section",'section':"Raspberry Pi Project \"Leto\"",'content':"\rFirmware repo - Developers\r\r\r\rDevelopers section\r#\r\rIn this section you\u0026rsquo;ll find all the documentation of the project and also how you can customize the behavior of the board by implementing your custom functionality\nSpecifications\r#\r\rHardware\r#\r\r#TODO describe the main chips of the board\nSoftware\r#\r\rFor the development of the code FreeRTOS was used because it offers the ability to divide the code in modules (tasks) and with this when new functionality is added you only need to consider (for the most part) the requirements and timing of the new functionality and FreeRTOS will handle the timing and resources of the other tasks so everything runs as expected.\nTasks\r#\r\r#TODO list tasks\nDebugging\r#\r\rWhen developing new software we need to validate the correct behavior of the code and you can do that with an LED connected to your project or lots of prints in the code but this is slow and tedious and it only gets worse when the bug that you are trying to catch occurs randomly, so the solution to this is a debugging session and every programming language supports this, in the case of a microcontroller it requires hardware inside the chip, so you already paid for the functionality, why not using it?.\nFor the microcontroller used in the SuperPower board the debugger is a program called GDB this is the industry standard, name a microcontroller and the manufacturer offers a debugger and it\u0026rsquo;s going to be GDB! , and it\u0026rsquo;s a program that runs on a terminal but, all manufacturers provide some level of integration with their IDE\u0026rsquo;s so you can use it with a GUI inside your IDE.\nWith debugging you can pause the execution of the program at any moment to test the flow and state of the code by examining the call stack and the values of the variables used in the code, furthermore you can set breakpoints that stop your code when a certain condition is meet like an error reading a message or an unexpected value of a variable, this is a very brief explanation of all the capabilities that debugging brings, if you want to learn more about the capabilities of GDB watch this video:\n #TODO describe the mimitations of the breakpoints and watchpoints\nThe SuperPower board supports three main methods for debugging all of them use GDB and those can be categorized in two groups:\n Traditional debugging the debugging probe is connected to the machine in which the code is compiled and developed. Remote debugging creates a GDB server instance in the Raspberry Pi and you can attach to it with the machine in which the code is compiled and developed. only one debugging method can be used at a time, failing to do so will create unexpected results and the possibility of causing physical damage to the board!.\n Traditional debugging\r#\r\rThis is the most traditional and most reliable way of debugging a microcontroller, for this you can use your favorite programmer (ST-LINK, JLINK etc) and connect it to the SWD connector without any further configuration required other than the auto generated config in the project for debugging. Still we\u0026rsquo;ll show you how it\u0026rsquo;s supposed to look for the ST-LINK programer in case you have problems.\n#TODO check that this is true for platform.io\r#TODO label on the PCB\r#TODO where to buy the connector\r#TODO add picture of the PCB pads\r Remote debugging\r#\r\rThis method allows you to remotely start a debugging session without having the Super Power board physically connected to a computer, this requires a GDB server running on the Raspberry Pi in this case openocd will fulfill that role, this requires the Raspberry Pi being connected to the same network as your machine in which the code is compiled and developed.\n#TODO create image explaining the concept\nOut of the box the Super Power board supports two methods for the openocd server:\n ST-lINK: this requires the programmer to be connected to the usb port of the Raspberry Pi. Stand alone: the Raspberry Pi will create the SWD bus with the GPIO pins and it will simulate a programmer. This requires some steps before you can begin the debugging session:\n if remote debugging is used no programmer must be connected to the SWD connector.\n No matter which method is chosen openocd needs to be installed in order to get the remote debugging working.\n sudo apt-get install openocd\n Once openocd is installed in the Raspberry Pi the SuperPower.cfg file (inside the daemon folder of the repo) needs to be transferred to the Raspberry Pi, there\u0026rsquo;s no need to clone the entire project because this is the only file that we need.\nTo select either the ST-LINK or the stand alone mode the SuperPower.cfg file needs to be configured by the user, don\u0026rsquo;t worry you only need to change some flags.\nST-LINK\r#\r\rThis option allows you to debug the code with the ST-LINK connected to the Pi,\n Note: this will only work when the ST-LINK is connected to the Raspberry Pi.\n #TODO add image describing the setup To enable this mode set the _PROBE variable to STLINK and start the openocd server.\nsudo openocd -f SupwerPower.cfg\r Stand alone\r#\r\rThis allows the user to run a debugging session without the need of an ST-LINK, this is an amazing feature because it allows you to flash and debug your code even if you don\u0026rsquo;t have a programmer at hand, the only drawback that this brings, is the required use of 3 pins (2 if you don\u0026rsquo;t need the NRST pin) of the Raspberry Pi, the pins required for this mode to work are:\n GPIO4 \u0026lt;-\u0026gt; nReset GPIO17 (Pin 11) \u0026lt;-\u0026gt; SWDIO GPIO27 (Pin 13) \u0026lt;-\u0026gt;SWCLK\n By default when you get the board those pins are disconnected and they need to be connected, to archive this the solder bridges must be shorted with a soldering iron #TODO list PCB labels #TODO add image To enable this mode set the _PROBE variable to RPI, also by default this will use the NRST pin, but if you don\u0026rsquo;t need that pin connected you can disable it setting the _USE_RST_PIN variable to NO this will configure openocd to use the software reset so you\u0026rsquo;ll have the same functionality, once the configuration is done start the openocd server.\nsudo openocd -f SupwerPower.cfg\r Thread aware debugging\r#\r\rThis brings even more functionality to the debugging session because not only provides the same functionality as before it also adds thread awareness to the GDB session with this GDB can list the stack, status and run time statistics of the FreeRTOS tasks with this you can see why a task is alway in the blocked state or check if your task is using all the available time and causing the other tasks to starve and never running.\n thread aware debugging is only possible when openocd runs the GDB server and when compiling in DEBUG mode.\n The SuperPower board offers four levels of thread awareness and they are listed from the less expensive to the most expensive:\n Call task: this reports the call stack, the status and the name of each task. Average run time: enables the runtime analysis of each task. Minimum free stack: gets the minimum amount of RAM available for each task(you can assign different amounts of RAM to each task). Everything: this enables all the previous levels (call stack, average run time and minimum free stack). Note: minimum free stack and average run time require require the Call stack functionality enabled\n The Average run time functionality requires the use of a hardware timer, by default the code is configured to use the TIMER 10\n You can enable only the ones that you need or all of them, we only allow you to enable this when the debug build is created, the functionality can be enabled in release builds but it\u0026rsquo;s not a good practice to run release builds with debugging enabled, and because of that it\u0026rsquo;s not documented how to do it.\nTo enable Thread aware debugging the _FREERTOS_DBG variable must be set to YES in the SuperPower.cfg file, this will allow GDB to get the context required for thread aware debugging.\nBy default the enabled level is Everything, but you can change this by defining the compiler flags\nSUPERPOWER_CALL_STACK SUPER_POWER_AVERAGE_RUN_TIME SUPERPOWER_MIN_FREE_STACK SUPERPOWER_EVERYTHING\n"});index.add({'id':16,'href':'/docs/uc/workflow/','title':"Workflow",'section':"Microcontroller Solar Power",'content':"Branching and Pull-Requests\r#\r\r The master is the single point of truth and the latest version of the board. Only Merge-Requests are allowed to push changes onto the master. each merge-request needs 2 reviewers to be accepted. feature branches should start with the term feature/ and the name of the feature which will be implemented try to commit often and atomar and give each commit a nice description of what had been done use words like added, fixed, changed etc. at the beginning of your commits Examples:\nAdded Pull up resistor for xyz regulator\r\rChanged value of Pull-Up for regulator from 10k to 100k\r\rFixed missing ESP32 Module\r\r a git gui tool with timeline view is strongly recommended each contributor shall pro actively detect conflicts he creates or created by other branches and get in touch to define a conflict resolution strategy key files such as readme and information such as BOM and requirements should be checked by all contributors before merge Project phases\r#\r\r Requirements Components selection Schematics design routing testing and validation Guidelines for project progress\r#\r\r Each step of the project progress shall be validated in a group meeting After validation, each change in the step (requirements, component) shall be agreed with the Team and not with two reviewers only and PR Each feature (mcu / cut_off / charging / low power \u0026hellip;) shall have a maturity level 1 ) clear concept 2 ) design ready 3 ) functional 4 ) stable and bug free The maturity level is decided by the Team during a meeting "});index.add({'id':17,'href':'/docs/uc/diagrams/','title':"Diagrams",'section':"Microcontroller Solar Power",'content':"Block diagram\r#\r\rUse case\r#\r\r"});index.add({'id':18,'href':'/docs/rpi/ibom/','title':"Interactive BOM",'section':"Raspberry Pi Project \"Leto\"",'content':"Interactive Bill of Materials\r#\r\rschematics commit link\r\r\r\rFull screen\rOpen in a new page\r\r\r\r\rvar button = document.getElementById(\"btn-fcff0563fc99c7ad\");\rbutton.onclick = ()={\rvar elem = document.getElementById(\"ifm-fcff0563fc99c7ad\");\rif (elem.requestFullscreen) {\relem.requestFullscreen();\r} else if (elem.webkitRequestFullscreen) { elem.webkitRequestFullscreen();\r} else if (elem.msRequestFullscreen) { elem.msRequestFullscreen();\r}\r};\r\r"});})();