https://wiki.hacksburg.org/api.php?action=feedcontributions&user=Chet+Manly&feedformat=atomHacksburg Wiki - User contributions [en]2024-03-28T10:01:28ZUser contributionsMediaWiki 1.32.0https://wiki.hacksburg.org/index.php?title=Events/2022/Bike_August&diff=1758Events/2022/Bike August2022-06-26T00:18:39Z<p>Chet Manly: </p>
<hr />
<div>Have a bike that needs work? Hacksburg will host a work session to provide help with basic bicycle repair and maintenance. Hacksburg will supply space, tools, cleaners and lubricants; attendees will provide bicycles.<br />
<br />
Ages 14+, $5 for non-members. Please RSVP by emailing [mailto:rsvp@hacksburg.org rsvp@hacksburg.org] or going on Meetup.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2022/Bike_August&diff=1757Events/2022/Bike August2022-06-26T00:16:51Z<p>Chet Manly: </p>
<hr />
<div>Have a bike that needs work? Hacksburg will host a work session providing help with basic bicycle repair and maintenance. Hacksburg will supply space, tools, cleaners and lubricants; attendees will provide bicycles.<br />
<br />
Ages 14+, $5 for non-members. Please RSVP by emailing [mailto:rsvp@hacksburg.org rsvp@hacksburg.org] or going on Meetup.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2022/Bike_August&diff=1756Events/2022/Bike August2022-06-26T00:12:56Z<p>Chet Manly: </p>
<hr />
<div>Have a bike that needs work? Hacksburg will host an open session where members will help with basic bicycle repair and maintenance. Hacksburg will provide space, tools, cleaners, lubricants, and help; attendees will provide bicycles.<br />
<br />
Ages 14+; $5 for non-members. Please RSVP by emailing [mailto:rsvp@hacksburg.org rsvp@hacksburg.org] or going on Meetup.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2022/Bike_August&diff=1755Events/2022/Bike August2022-06-26T00:12:30Z<p>Chet Manly: </p>
<hr />
<div>Have a bike that needs work? Hacksburg will host an open session where members will help with basic bicycle repair and maintenance. Hacksburg will provide space, tools, cleaners, lubricants, and help; attendees will provide bicycles.<br />
<br />
Ages 14+; $5 for non-members. Please RSVP by emailing [mailto:rsvp@hacksburg.org] or going on Meetup.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2022/Bike_August&diff=1754Events/2022/Bike August2022-06-25T23:45:32Z<p>Chet Manly: </p>
<hr />
<div>Have a bike that needs work? Hacksburg will host an open session where members will help with basic bicycle repair and maintenance. Hacksburg will provide space, tools, cleaners, lubricants, and help; attendees will provide bicycles. Ages 14+; free for non-members.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/HP3456A&diff=1730Tools/Electronics/HP3456A2022-05-18T13:47:47Z<p>Chet Manly: </p>
<hr />
<div>[[File:HP3456A.jpg|thumb|400px|HP 3456A Digital Multimeter]]<br />
<br />
The HP 3456A is a rack-mountable digital multimeter (DMM). Our HP 3456A is owned by a Hacksburg member but has no restrictions on use.<br />
This a 6.5 digit meter; which means that there are six working digits of resolution (although the last one may jump around a bit). This is much more accurate than a typical handheld meter. Note that our HP 3456A has not been calibrated in a long time and may not be correct.<br />
<br />
== Usage ==<br />
This article has some basic usage instructions. The manual for this machine is [[Media:9018-05354.pdf|available here]].<br />
<br />
The power button on our meter is kinda sticky. You may have to pull the power button out a little bit when you turn it off.<br />
<br />
=== Taking a Measurement ===<br />
The front panel has symbols for DC Volts, AC Volts, 2-Wire Ohms, and 4-Wire Ohms, along with some more advanced combined functions which are specific to this multimeter.<br />
This multimeter does not do current measurements.<br />
The right side of the unit has banana plugs for connecting the device under test (DUT). If you're not used to so many terminals, this is because this instrument can do 4-wire resistance, which a normal handheld meter cannot do. The two connectors in the middle column are used if you're used to a normal handheld multimeter.<br />
<br />
Make sure that the button the right side of the unit is set to front terminals. There is nothing connected to the rear terminals.<br />
<br />
=== Changing Settings ===<br />
In order to change a setting, type the number you want the setting to be on the keypad. Then, press the "STORE" button, then press the keypad button with the white text that corresponds to the setting you want to change. Here are some common settings:<br />
<br />
* '''N CYC INT''': Number of powerline integration cycles. This unit supports up to 100 powerline integration cycles. The higher the number, the more accurate the measurement but the longer the measurement time. The default is 10. The unit only supports values of 1, 10, or 100, unless there's something I can't figure out.<br />
* '''N DIG DISP''': Number of visible digits. This DMM supports 2, 3, 4, 5, or 6 visible digits. You can change this setting to account for the uncertainty of the measurement you are performing. The default is 5.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=File:9018-05354.pdf&diff=1729File:9018-05354.pdf2022-05-18T13:40:47Z<p>Chet Manly: HP3456A Digital Voltmeter Operating and Service Manual
Manual part number 03456-90006
Revision March 1, 1982</p>
<hr />
<div>== Summary ==<br />
HP3456A Digital Voltmeter Operating and Service Manual<br />
<br />
Manual part number 03456-90006<br />
<br />
Revision March 1, 1982</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/HP3456A&diff=1728Tools/Electronics/HP3456A2022-05-18T13:32:13Z<p>Chet Manly: </p>
<hr />
<div>[[File:HP3456A.jpg|thumb|400px|HP 3456A Digital Multimeter]]<br />
<br />
The HP 3456A is a rack-mountable digital multimeter (DMM). Our HP 3456A is owned by a Hacksburg member but has no restrictions on use.<br />
This a 6.5 digit meter; which means that there are six working digits of resolution (although the last one may jump around a bit). This is much more accurate than a typical handheld meter. Note that our HP 3456A has not been calibrated in a long time and may not be correct.<br />
<br />
== Usage ==<br />
This article has some basic usage instructions. The manual for this machine is readily available online.<br />
<br />
The power button on our meter is kinda sticky. You may have to pull the power button out a little bit when you turn it off.<br />
<br />
=== Taking a Measurement ===<br />
The front panel has symbols for DC Volts, AC Volts, 2-Wire Ohms, and 4-Wire Ohms, along with some more advanced combined functions which are specific to this multimeter.<br />
This multimeter does not do current measurements.<br />
The right side of the unit has banana plugs for connecting the device under test (DUT). If you're not used to so many terminals, this is because this instrument can do 4-wire resistance, which a normal handheld meter cannot do. The two connectors in the middle column are used if you're used to a normal handheld multimeter.<br />
<br />
Make sure that the button the right side of the unit is set to front terminals. There is nothing connected to the rear terminals.<br />
<br />
=== Changing Settings ===<br />
In order to change a setting, type the number you want the setting to be on the keypad. Then, press the "STORE" button, then press the keypad button with the white text that corresponds to the setting you want to change. Here are some common settings:<br />
<br />
* '''N CYC INT''': Number of powerline integration cycles. This unit supports up to 100 powerline integration cycles. The higher the number, the more accurate the measurement but the longer the measurement time. The default is 10. The unit only supports values of 1, 10, or 100, unless there's something I can't figure out.<br />
* '''N DIG DISP''': Number of visible digits. This DMM supports 2, 3, 4, 5, or 6 visible digits. You can change this setting to account for the uncertainty of the measurement you are performing. The default is 5.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1727Tools/Electronics/GPR-6030D2022-05-18T13:26:04Z<p>Chet Manly: </p>
<hr />
<div>[[File:bench_supply.jpg|thumb|650px|GW Instek GPR-6030D Linear DC Power Supply]]<br />
<br />
The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set ''upper limits'' for both output voltage and output current. The supply initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation. If the current needed to do this exceeds the current limit, then the supply operates in "constant current" (CC) mode instead. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. Make sure this conductor is large enough to safely carry the current you're dialing in. If necessary, raise the voltage limit until the supply is in CC mode, with the '''C.C.''' LED lit. Then, adjust the current knobs until the readout above them indicates the desired current.<br />
<br />
Note: There are three terminals on this supply, '''+''', '''-''' and '''GND'''. '''+''' and '''-''' are the positive and negative terminals between which supply current flows, and are the two terminals you normally use. '''GND''' is a direct connection to the ground prong on the wall outlet; you use this if the circuit you are powering requires a safety ground, or if you need '''-''' to be held at local ground voltage.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1726Tools/Electronics/GPR-6030D2022-05-18T13:21:17Z<p>Chet Manly: </p>
<hr />
<div>[[File:bench_supply.jpg|right|700px|GW Instek GPR-6030D Linear DC Power Supply]]<br />
<br />
The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set ''upper limits'' for both output voltage and output current. The supply initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation. If the current needed to do this exceeds the current limit, then the supply operates in "constant current" (CC) mode instead. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. Make sure this conductor is large enough to safely carry the current you're dialing in. If necessary, raise the voltage limit until the supply is in CC mode, with the '''C.C.''' LED lit. Then, adjust the current knobs until the readout above them indicates the desired current.<br />
<br />
Note: There are three terminals on this supply, '''+''', '''-''' and '''GND'''. '''+''' and '''-''' are the positive and negative terminals between which supply current flows, and are the two terminals you normally use. '''GND''' is a direct connection to the ground prong on the wall outlet; you use this if the circuit you are powering requires a safety ground, or if you need '''-''' to be held at local ground voltage.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1725Tools/Electronics/GPR-6030D2022-05-18T13:20:36Z<p>Chet Manly: </p>
<hr />
<div>[[File:bench_supply.jpg|right|600px|GW Instek GPR-6030D Linear DC Power Supply]]<br />
<br />
The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set ''upper limits'' for both output voltage and output current. The supply initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation. If the current needed to do this exceeds the current limit, then the supply operates in "constant current" (CC) mode instead. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. Make sure this conductor is large enough to safely carry the current you're dialing in. If necessary, raise the voltage limit until the supply is in CC mode, with the '''C.C.''' LED lit. Then, adjust the current knobs until the readout above them indicates the desired current.<br />
<br />
Note: There are three terminals on this supply, '''+''', '''-''' and '''GND'''. '''+''' and '''-''' are the positive and negative terminals between which supply current flows, and are the two terminals you normally use. '''GND''' is a direct connection to the ground prong on the wall outlet; you use this if the circuit you are powering requires a safety ground, or if you need '''-''' to be held at local ground voltage.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1724Tools/Electronics/GPR-6030D2022-05-18T13:14:13Z<p>Chet Manly: </p>
<hr />
<div>[[File:bench_supply.jpg|right|600px|GW Instek GPR-6030D Linear DC Power Supply]]<br />
<br />
The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set ''upper limits'' for both output voltage and output current. The supply initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation. If the current needed to do this exceeds the current limit, then the supply operates in "constant current" (CC) mode instead. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. Make sure this conductor is large enough to safely carry the current you're dialing in. If necessary, raise the voltage limit until the supply is in CC mode, with the '''C.C.''' LED lit. Then, adjust the current knobs until the readout above them indicates the desired current.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1723Tools/Electronics/GPR-6030D2022-05-18T13:05:16Z<p>Chet Manly: /* Usage */</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set ''upper limits'' for both output voltage and output current. The supply initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation. If the current needed to do this exceeds the current limit, then the supply operates in "constant current" (CC) mode instead. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. Make sure this conductor is large enough to safely carry the current you're dialing in. If necessary, raise the voltage limit until the supply is in CC mode, with the '''C.C.''' LED lit. Then, adjust the current knobs until the readout above them indicates the desired current.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1722Tools/Electronics/GPR-6030D2022-05-18T13:01:31Z<p>Chet Manly: /* Theory of Operation */</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set ''upper limits'' for both output voltage and output current. The supply initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation. If the current needed to do this exceeds the current limit, then the supply operates in "constant current" (CC) mode instead. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. The supply should be in CC mode, with '''C.C.''' lit. Adjust the<br />
current knobs until the readout above them indicates the desired current. Make sure the conductor you use to short the terminals together is large enough to safely carry the current you're dialing in.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1721Tools/Electronics/GPR-6030D2022-05-18T12:58:14Z<p>Chet Manly: /* Theory of Operation */</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set ''upper limits'' for both output voltage and output current. The supply initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation, and the '''C.V.''' LED is lit when operating in this mode. If the current needed to maintain this voltage exceeds the current limit, then the supply operates in "constant current" (CC) mode instead, and the '''C.C.''' LED is lit instead of '''C.V.'''. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be used as either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. The supply should be in CC mode, with '''C.C.''' lit. Adjust the<br />
current knobs until the readout above them indicates the desired current. Make sure the conductor you use to short the terminals together is large enough to safely carry the current you're dialing in.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1720Tools/Electronics/GPR-6030D2022-05-18T12:57:25Z<p>Chet Manly: /* Theory of Operation */</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set ''upper limits'' for both output voltage and output current. The supply then tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation, and the '''C.V.''' LED is lit when operating in this mode. If the current needed to maintain this voltage exceeds the current limit, then the supply operates in "constant current" (CC) mode instead, and the '''C.C.''' LED is lit instead of '''C.V.'''. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be used as either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. The supply should be in CC mode, with '''C.C.''' lit. Adjust the<br />
current knobs until the readout above them indicates the desired current. Make sure the conductor you use to short the terminals together is large enough to safely carry the current you're dialing in.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1719Tools/Electronics/GPR-6030D2022-05-18T12:56:46Z<p>Chet Manly: /* Theory of Operation */</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set ''upper limits'' for both output voltage and output current. The supply then initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation, and the '''C.V.''' LED is lit when operating in this mode. If the current needed to maintain this voltage exceeds the current limit, then the supply operates in "constant current" (CC) mode instead, and the '''C.C.''' LED is lit instead of '''C.V.'''. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be used as either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. The supply should be in CC mode, with '''C.C.''' lit. Adjust the<br />
current knobs until the readout above them indicates the desired current. Make sure the conductor you use to short the terminals together is large enough to safely carry the current you're dialing in.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1718Tools/Electronics/GPR-6030D2022-05-18T12:56:13Z<p>Chet Manly: /* Theory of Operation */</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set --upper limits-- for both output voltage and output current. The supply then initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation, and the '''C.V.''' LED is lit when operating in this mode. If the current needed to maintain this voltage exceeds the current limit, then the supply operates in "constant current" (CC) mode instead, and the '''C.C.''' LED is lit instead of '''C.V.'''. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be used as either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. The supply should be in CC mode, with '''C.C.''' lit. Adjust the<br />
current knobs until the readout above them indicates the desired current. Make sure the conductor you use to short the terminals together is large enough to safely carry the current you're dialing in.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1717Tools/Electronics/GPR-6030D2022-05-18T12:55:36Z<p>Chet Manly: /* Theory of Operation */</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To operate this supply, you set upper limits for both output voltage and output current. The supply then initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation, and the '''C.V.''' LED is lit when operating in this mode. If the current needed to maintain this voltage exceeds the current limit, then the supply operates in "constant current" (CC) mode instead, and the '''C.C.''' LED is lit instead of '''C.V.'''. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be used as either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. The supply should be in CC mode, with '''C.C.''' lit. Adjust the<br />
current knobs until the readout above them indicates the desired current. Make sure the conductor you use to short the terminals together is large enough to safely carry the current you're dialing in.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1716Tools/Electronics/GPR-6030D2022-05-18T12:54:44Z<p>Chet Manly: /* Usage */</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Theory of Operation ==<br />
<br />
To use this supply, you set upper limits for both output voltage and output current. The supply then initially tries to keep its output at the voltage limit, by allowing current to vary. This is called "constant voltage" (CV) operation, and the '''C.V.''' LED is lit when operating in this mode. If the current needed to maintain this voltage exceeds the current limit, then the supply operates in "constant current" (CC) mode instead, and the '''C.C.''' LED is lit instead of '''C.V.'''. In CC mode, current is held constant by allowing voltage to vary. This supply can therefore be used as either a constant voltage source ''or'' a constant current source! To provide constant voltage, set the current limit higher than the current your load will draw at the intended voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive that much current through the load.<br />
<br />
== Usage ==<br />
<br />
To set the voltage limit, first make sure the current limit is set high enough that you're in CV mode ('''C.V.''' LED is lit), and then adjust the voltage knobs until the readout above them indicates the desired voltage. Even if nothing is connected to the supply, you'll still need to turn current knobs at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or (ideally) a banana plug patch cord. The supply should be in CC mode, with '''C.C.''' lit. Adjust the<br />
current knobs until the readout above them indicates the desired current. Make sure the conductor you use to short the terminals together is large enough to safely carry the current you're dialing in.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1715Tools/Electronics/GPR-6030D2022-05-18T12:45:02Z<p>Chet Manly: /* Usage */</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Usage ==<br />
<br />
To use this supply, you set upper limits for both output voltage and output current. The supply then initially tries to keep its output at the voltage limit, by allowing current to vary.<br />
This is called "constant voltage" (CV) operation: the '''C.V.''' LED is lit when operating in this mode. If the current needed to stay at the voltage limit is greater than the current limit,<br />
then the supply operates in "constant current" (CC) mode instead, and the '''C.C.''' LED is lit instead of '''C.V.'''. In CC mode, the supply holds current constant at the current limit<br />
and allows voltage to vary. Thus, it's possible to supply a constant voltage ''or'' a constant current with this supply. To provide constant voltage, set the current limit higher<br />
than the amount of current your load will draw at the intended supply voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive the desired current<br />
through the load.<br />
<br />
To set the voltage limit, make sure the current limit is set high enough that you're in CV mode ('''C.V.''' lit), and adjust the voltage knobs until the readout above them indicates the desired voltage.<br />
Even if nothing is connected to the supply, you'll still need to set the current limit at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or a banana plug patch cord. The supply should be in CC mode, with '''C.C.''' lit. Adjust the<br />
current knobs until the readout above them indicates the desired current. (Make sure the conductor you use to short the terminals together is large enough to safely carry the current you're dialing in.)</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/Archive&diff=1714Events/Archive2022-05-18T12:40:25Z<p>Chet Manly: /* 2022 */</p>
<hr />
<div>== Events Archive ==<br />
<br />
=== 2022 ===<br />
* January 9: [[Events/2022/Woodworking_101_January|Woodworking 101]], Ages 16+, $30 material fee<br />
* January 16: [[Events/2022/Vacuum_Former_Work_Day|Vacuum Former Work Day]], No RSVP or class fee<br />
* January 23: [[Events/2022/Smart_Home_Alone|Smart Home Alone!]]<br />
* January 25 7:00 PM: Annual Meeting, '''Members Only'''<br />
* January 29: [[Events/2022/Vacuum_Former_Work_Day|Vacuum Former Work Day]], No RSVP or class fee<br />
* January 30: [[Events/2022/Foam_Armor_Basics|Foam Armor Basics]], Ages 14+<br />
* February 6: [[Events/2022/Laser_February|Valentine's Day Laser Class]], Ages 14+, $10 optional material fee<br />
* February 13: [[Events/2022/Costume_Distressing_and_Aging|Costume Distressing and Aging]], Ages 14+<br />
* February 20: [[Events/2022/Resin_Printer_February|Resin Printer Basics]], Ages 16+<br />
* February 26 (was 27, updated): [[Events/2022/Test_and_Measurement|Electronics Bench Basics]], Ages 14+<br />
* March 5: Raspberry Pi Jam with Roanoke Robotics (https://www.meetup.com/Roanoke-Robotics/events/282186823)<br />
* March 6: [[Events/2022/Starting_Plants_and_Gardening|Starting Plants and Gardening]], Ages 14+<br />
* March 13: Vacuum Former Work Day, no RSVP or class fee<br />
* March 20: [[Events/2022/Small_Engine_Maintenance|Small Engine Maintenance]], Ages 16+<br />
* March 27: [[Events/2022/Woodworking_March|Woodworking 101]], Ages 16+<br />
* April 2: Maker Faire Prep Day, no RSVP or class fee, intended for Maker Faire booth attendees<br />
* April 3: Lynchburg Maker Faire (https://lynchburg.makerfaire.com/)! Hacksburg will have a booth but it's a super fun event and attendance is encouraged.<br />
* April 8-9: Shadowfest on the Virginia Tech Campus<br />
* April 9: Arduino Jam with Roanoke Robotics (https://www.meetup.com/Roanoke-Robotics/events/282186858)<br />
* April 10: [[Events/2022/Metal_Casting_April|Metal Casting]], Ages 16+<br />
* April 17: [[Events/2022/Printer_Work_Day_April|3D Printer Work Day]], Ages 14+, no RSVP or class fee, bring your printers to work on<br />
* April 30: Blacksburg YMCA Healthy Kids Day (https://vtymca.org/healthy-kids-day/)<br />
* May 1: [[Events/2022/Silicone_Mold_Making|Silicone Mold Making]], Ages 14+<br />
* May 8: [[Events/2022/Sharpening_April|Slow-Speed Precision Knife Sharpening]], Ages 18+<br />
* May 15: [[Events/2022/Bicycle_Repair|Bicycle Repair Day]]<br />
<br />
=== 2021 ===<br />
* June 27: [[Events/2021/3D_Printer|3D Printer Build/Workshop Day]] (no RSVP)<br />
* July 11: [[Events/2021/Silicone|Silicone Mold Making]] (rescheduled)<br />
* July 25: [[Events/2021/Electronics|Electronics 101 ]]<br />
* July 31/August 1: Members prep for Steppin Out<br />
* August 6-7: Steppin Out! http://www.blacksburgsteppinout.com/<br />
* August 8: Hacksburg In-Person Open House<br />
* October 10: [[Events/2021/Cider|Seventh Annual Hacksburg Cider Pressing!]], All ages, bring your own apples<br />
* October 15, 6:00PM to 10:00PM: Habicraft, held by Hacksburg and the Christiansburg Habitat for Humanity ReStore: https://allevents.in/blacksburg/habicraft-building-competition/200021587373509<br />
* October 17: [[Events/2021/Cider|Seventh Annual Hacksburg Cider Pressing!]], All ages, bring your own apples<br />
* October 24: [[Events/2021/Fermenting|Fermenting Basics]], Ages 21+<br />
* October 26 (Tuesday Meeting): Pumpkin carving, may or may not involve lasers<br />
* October 31: [[Events/2021/Pumpkin_Chunkin|First Annual Pumpkin Chunkin!]]<br />
* November 6: Lightsaber making with the lightsaber club at Virginia Tech<br />
* November 7: [[Events/2021/Woodworking_November|Woodworking 101]], Ages 16+, $30 for members and $35 for non-members (wood is expensive now!)<br />
* November 14: [[Events/2021/Laser_November|Laser 101]], Ages 16+, $10 for members and $15 for non-members for supplies.<br />
* November 21: [[Events/2021/RGB_Arduino|RGB Lights with Smart Controllers]], Ages 12+, optional $15 class fee for controller and lights.<br />
* December 5: [[Events/2021/Ornaments|Third Annual Holiday Ornament Making]], All ages<br />
* December 12: [[Events/2021/Casting_December|Casting 101]], Ages 16+<br />
<br />
=== 2020 ===<br />
* January 12, 1 to 4 PM: Machining 101<br />
* January 19, 1 to 4 PM: [[Winemaking|Winemaking 101]]<br />
* March 8, 1 to 4 PM: St. Patrick's Day themed [[events/2019/Laser_Cutter_Class|Laser Cutter 101]]<br />
* March 15, 1 to 4 PM: [[Events/2020/Cheesemaking_101|Cheesemaking 101]]<br />
* July 12, 1 to 4 PM: [[Events/2020/Python_101|Python 101]]<br />
* July 19, 1 to 4 PM: [[Events/2020/Laser_101|Laser 101]]<br />
* July 26, 1 to 4 PM: [[Events/2020/Sous_Vide_101|Sous Vide Cooking 101]]<br />
* August 23, 1 to 4 PM: [[Events/2020/Canning_101|Canning 101]]<br />
* August 30, 1 to 4 PM: [[Events/2020/Fermentation_101|Non-Alcoholic Fermentation]]<br />
* September 13, 1 to 4 PM: [[Events/2020/Laser_101_September|Laser 101]]<br />
* September 20, 1 to 4 PM: [[Events/2020/CAD_3D_September|CAD and 3D Printing]]<br />
* September 27, 1 to 4 PM: [[Events/2020/Casting|Metal Casting]]<br />
* October 4, 1 to 4 PM: [[Events/2020/Halloween 101|Halloween 101]]<br />
* '''October 10-11, 1 to 4PM: [[Events/2020/Cider|Cidermaking]]'''<br />
* October 17, 1 to 4 PM: [[Events/2020/Cosplay_Laser|Making Costumes with Lasers]]<br />
* October 18, 1 to 4 PM: [[Events/2020/Costume_Detail|Detailed Costumes]]<br />
* October 25, 1 to 4 PM: [[Events/2020/Hard_Cider|Hard Cider Making]]<br />
* November 1, 1 to 4 PM: [[Events/2020/Sous_Vide_Food|Sous Vide Food]]<br />
<br />
=== 2019 ===<br />
* Sunday January 13, 2-4 pm: [[events:2019:laser_mugs|Laser Etched Mugs]] - Rescheduled to March 2 due to weather<br />
* Tuesday January 15, 7-7:30 pm: Annual Meeting (Full members only, regular meeting to follow)<br />
* Sunday February 3, 1-5 pm: [[events:2019:foam_armor_class|Foam Armor Class]]<br />
* Sunday February 10, 1-5 pm: [[events:2019:laser_valentines|Laser Cutter Valentines]]<br />
* TBD, email rsvp@hacksburg.org to be notified: [[events/2019/Laser_Cutter_Class|Laser Basics]]<br />
* September 22, 1 to 4 PM: [[events/2019/Woodworking 101|Woodworking 101]]<br />
* September 29, 1 to 4 PM: [[events/2019/3D Printing and CAD|Intro to 3D Printing and CAD]]<br />
* October 2, 11:30 AM to 1 PM: [https://www.facebook.com/events/495099304558298/ VT CRC Chili Cook-off] [[events/2019/Chili Cookoff|Hacksburg Plans]]<br />
* October 5, 8 AM to 2 PM: [[events/2019/5th Annual Cider Pressing|Apple Tasting and Cider Demo at Blacksburg Farmers Market]]<br />
* October 6, 1 to 4 PM: [[events/2019/5th Annual Cider Pressing|5th Annual Cider Pressing]]<br />
* October 13, 1 to 4 PM: [[events/2019/Costume Hats and Masks|Costume Hats and Masks]]<br />
* October 20, 1 to 4 PM: [[events/2019/Costume Prop Weathering|Costume Prop Weathering]]<br />
* October 29, After meeting: [[events/2019/Pumpkin Carving|Pumpkin Carving]]<br />
* September 8, 1 to 4 PM: Hacksburg Grand Re-Opening (No RSVP required)<br />
* December 8, 1 to 4 PM: [[events/2019/Holiday Ornaments|Holiday Ornaments]]<br />
* December 15, 1 to 4 PM: [[events/2019/Laser_Cutter_Class|Laser Cutter 101]] and [[events/2019/Holiday Ornaments|Holiday Ornaments]]<br />
<br />
=== 2018 ===<br />
* February 24 2-4 pm: [[event:2018:Pepekura|Pepekura (3D Paper Modeling) Class]]<br />
* Sat May 19, 1-5 PM: [[events:2018:Laser Cutter Class]]<br />
* Sat June 16: Visit our booth at [http://downtownblacksburg.com/summer-solstice-blacksburg.aspx Summer Solstice Fest]<br />
* Sun June 17, TBD: [[events:2018:Hacksburg Open House]]<br />
* Sat June 23, 1:00-5:00 pm: [[events:2018:Woodworking 101]]<br />
* Sat June 30, 1:00-5:00 pm: [[events:2018:Foam Armor Class]]<br />
* Sat July 14, 1:00-5:00 pm: [[events:2018:Laser Cutter Class]]<br />
* Sunday August 5, 1-5 PM: Hacksburg Disassembly Day<br />
* Tuesday August 7, 7:30-8:30 PM: Buisness Meeting and [[events:2018:FallPlanning|Fall 2018 Event Planning]]<br />
* Sunday August 12, 1-5 PM: [[events:2018:welding_101|Welding 101]]<br />
* Sunday September 9, Noon-4 PM: [[events:2018:cosplay_guests|Intro to Cosplay with Special Guest Presenters]]<br />
* Sunday September 16, 1-5 PM: [[events:2018:laser_cutter_class|Laser Cutter Class]]<br />
* Sunday September 23, 1-5 PM: [[events:2018:woodworking_101_boxes|Woodworking 101 - Boxes and Joinery]]<br />
* Saturday September 29, 1-5 PM: [[events:2018:cider_making|4th Annual Hacksburg Cider Pressing - Option 1]]<br />
* Sunday September 30, 1-5 pm: [[events:2018:cosplay_armor|Intro to Cosplay - Armormaking]]<br />
* Sunday October 7, 1-5 PM: [[events:2018:cider_making|4th Annual Hacksburg Cider Pressing - Option 2]]<br />
* Sunday October 21, 1-5 PM: [[events:2018:cosplay_tophat|Cosplay Steampunk Tophat]]<br />
* Tuesday October 30, 8-9 PM: Pumpkin Carving/Halloween Activities (after regular meeting)<br />
* Saturday November 17, 1-5 PM: [[events:2018:milling_101|Milling 101]]<br />
* Sunday December 2, 1-5 PM: [[events:2018:diy_ornaments|Make Personalized Ornaments]]<br />
<br />
<br />
=== 2017 ===<br />
* January 17th 8:00pm - Tool Tuesday - Introduction to the Oscilloscope - Come on out to Hacksburg's monthly Tool Tuesday and learn what an Oscilloscope is, what uses it has, and the basics of operating it. This event is open to everyone (students, residents, anyone!) and free.<br />
* January 28th 9:30 AM - 5:00 PM -- [[events:drone|Drone building]]<br />
* Feburary 21st at 8:00pm - Introduction to Soldering - Come on out to Hacksburg's monthly Tool Tuesday and learn what soldering is, what uses it has, and the basics of doing it from Brent, a board member. This event is open to everyone (students, residents, anyone!) and free.<br />
* March 4 - Introduction to Sewing - 1pm-4pm<br />
** Come learn basic hand sewing, how to use a sewing machine, and how to follow a basic pattern. <br />
** We will be making drawstring bags.<br />
** Reading a simple pattern<br />
** straight stitching by hand<br />
** using a sewing machine (bobbins, threading, adjusting)<br />
** Price: $10 public / $5 for members<br />
** see 2016 class for notes [[:Sewing 101]]<br />
* March 7 - Magic Wand Contest Awards Party 8pm for the [[events:2017:magic_wand_contest?s[]=wizard]]<br />
* March 11 - Open house 1-4pm Stop in to get a tour of our space, some tea or coco, and be able to ask any questions about our organization. This is free and open to everyone!<br />
* March 7-28 -- [[adafruit_group_buy|Adafruit Group Buy]]<br />
* March 19 - Inventory Day - 1-5pm<br />
** Members, we need to inventory everything in the space for taxes, please come out and help us knock it out.<br />
* March 21 - 8pm - [[events:2017:hacksburg_tool_tuesday_-_introduction_to_3d_printing|Tool Tuesday - Introduction to 3D Printing]]<br />
* April - [[events:2017:steam_punk_contest|Steampunk Contest]] all month!<br />
* May 2 - 8 PM -- [[events:2017:steam_punk_contest|Steampunk Contest]] Awards Party<br />
* June 17 - [[events:Summer Solstice Fest 2017]]<br />
* June 24 - [[events:Woodworking 101 - 2017]]<br />
* October 8, 1pm to 5pm - [[events:2017:Cider Making Event 2017]]<br />
* October 10, 7:30 pm - Pumpkin Carving after General Meeting<br />
* October 14, 9am to 3pm - [https://www.facebook.com/events/1733510660283858/ Repair Cafe at the NRV ReStore]<br />
* November 12, 2pm - [[events:2017:Foam Armor Class]]<br />
<br />
=== 2016 ===<br />
* Saturday March 12, 2016 [[:Hackwood Derby]] 1pm<br />
* Sunday, March 20, 2016 - 10am - 2pm Homebrewing Demo - Stop by and ask questions as Nicole Schwartz brews some tea beer<br />
* Sunday, March 20, 2016 - 2 pm [[:3D printing class 2016]] (part of the [[:cosplay class series]]) by Andrew Mike<br />
* Saturday, April 9, 2016 - Time noon-2pm [[:Prosthetics]] (part of the [[:cosplay class series]]) by Chris DeHart <br />
* Tuesday, April 19, 2016 - 6-9pm [[:Introduction to Arduino]] with LCBB (part of the [[:cosplay class series]])<br />
* Saturday April 23, 2016 1pm [[:Basic woodworking safety]] by Kurt Rooks<br />
* Sunday, April 24, 2016 - 2pm-4pm [[:Sewing 101]] - making a drawstring bag (part of the [[:cosplay class series]])<br />
* Saturday, May 21, 2016 - 2pm-4pm - [[:Internet Safety]]<br />
* Thursday, June 2, 2016 - 6pm -- [[:Make your own Enigma machine]]<br />
* Saturday, June 18, 2016 -- [[:2016 Summer Solstice Fest]]<br />
* Sunday, September 11, 2016 - 1pm-9pm -- [[events:2016:press_your_own_cider]] and a hard cider brewing demo. (Bring your own apples)<br />
* Saturday, September 17, 2016 - 10am-4pm -- [[Unconference II]] followed by a [https://www.facebook.com/events/1717980871789482/ sorting party] at 6pm<br />
** Thank you to our financial sponsor [http://foxguardsolutions.com/careers/|FoxGuard Solutions] - they are enabling us to cover costs for all of our UnConference Supplies! <br />
** Thank you to our lunch sponsor [http://www.blacksburgbagels.com/ Blacksburg Bagels] <br />
** Thank you to our tea sponsor [http://thedevoteausa.com/ The Devotea USA] <br />
* December 11 1:00pm - 4:00pm -- Hacksburg Open House -- Stop in to get a tour of our space, some tea or coco, and be able to ask any questions about our organization. This is open to everyone!<br />
* December 13 8:00pm -- Tool Tuesday - Metal Lathe Introduction - presentation on using the metal lathe in the shop. This is open to everyone!<br />
* December 20 8:00pm -- Tool Tuesday - Laser Engraving 101 - presentation on using the laser engraver in the shop. This is open to everyone!<br />
<br />
=== 2015 ===<br />
* [[events:2015:Summer_Solstice_Fest|Summer Solstice]] June 20, 2015<br />
* [[events:2015:How_to_Homebrew|How to homebrew]] July 18, 2015 followed by [[events:2015:beverage_cooling_competition|Beverage Cooling Competition]]<br />
* [[events:2015:kids_circuits|Kids Circuts]] Aug 1, 2015<br />
* [[events:2015:12_hour_hackathon|12 Hour Hackathon]] Sept 5, 2015<br />
* [[events:2015:high_altitude_balloon_talk|High Altitude Balloon Talk]] Tue Sept 15, 2015 at 8pm<br />
* [[events:2015:va_science_festival|Virginia Science Festival]] Sat Sept 26, 2015<br />
* [[events:2015:tea_101_class|Tea 101 Class]] Oct 3, 2015<br />
* [[events:2015:3d_printing_class|3D Printing Class]] Oct 18, 2015<br />
* [[events:2015:pumpkin_carving|Pumpkin Carving]] Oct 25, 2015<br />
* Annual Meeting Saturday November 7th, 2015<br />
* Barnes & Noble Mini Maker Faire - [http://stores.barnesandnoble.com/event/9780061730846-0 Meet the Makers]<br />
** Friday Nov 6, 2015 at 5pm (Nicole)<br />
** Saturday Nov 7, 2015 at 1pm (Kurt)<br />
** Sunday Nov 8, 2015 at 1pm (Andrew/Jenn)</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Main_Page&diff=1713Main Page2022-05-18T12:39:57Z<p>Chet Manly: /* Upcoming Events */</p>
<hr />
<div>[[File:ElectronicsBench.jpg|500px|thumb|Hacksburg Electronics Bench in the Creativity and Innovation Studio]]<br />
<br />
{| class="wikitable"<br />
|-<br />
! Due to '''new''' health agency recommendations related to COVID-19, in-person events at Hacksburg have resumed! All events will be in-person + online ("hybrid") from now on.<br />
|}<br />
<br />
Hacksburg is a community workshop located in Blacksburg, VA at [https://goo.gl/maps/rCYYGkS5AdnwPMWG9 1872 Pratt Drive], in the Virginia Tech Corporate Research Center.<br />
<br />
Want to join Hacksburg? Start by reading [http://hacksburg.org/join.html this page]!<br />
<br />
= Donations =<br />
We're a registered 501c3 non-profit and love donations! Read more [[donate|here]].<br />
<br />
= Events =<br />
===== Recurring Events =====<br />
Weekly meeting every Tuesday 7:30 PM. Feel free to come by for a tour! This meeting is open-to-the-public and followed by an open-to-the-public work session starting at the end of the meeting to whenever the last member leaves. Also feel free to attend to learn more about Hacksburg and take a [http://hacksburg.org/360tour.html virtual tour]! The meeting link is [https://meet.hacksburg.org/OpenGroupMeeting https://meet.hacksburg.org/OpenGroupMeeting] for attending virtually.<br />
<br />
===== Upcoming Events =====<br />
'''Make sure to RSVP for events before attending at rsvp@hacksburg.org.''' All classes 1:00PM-4:00PM unless otherwise noted.<br />
<br />
* May 22: Vacuum Former Work Day, no RSVP required<br />
* June 5: [[Events/2022/Sewing_101|Sewing 101]], Ages 14+<br />
* June 12: Shop Spring Clean-up, no RSVP required<br />
* June 18: [https://downtownblacksburg.com/summer-solstice-blacksburg.aspx Hacksburg at Summer Solstice Fest]<br />
* June 19: Hacksburg Open House, no RSVP required<br />
* June 26: [[Events/2022/Laser_June|Laser 101]], Ages 14+, $10 optional material fee<br />
<br />
Classes are $5 for non-members and free for members unless otherwise noted.<br />
<br />
Check out and RSVP to these events on MeetUp (https://www.meetup.com/HacksburgVA/) as well!<br />
<br />
===== Regional Events =====<br />
<br />
* August 5-6: [http://www.blacksburgsteppinout.com/ Blacksburg Steppin' Out]<br />
<br />
===== Other Events =====<br />
* [[events/Future|Future Events]]<br />
* [[events/Archive|Events Archive]]<br />
* [[events/Ideas|Events Ideas]]<br />
<br />
= Tools =<br />
* [[tools/Electronics|Electronics Bench]]<br />
* [[tools/Woodworking|Wood Shop]]<br />
* [[tools/Metalworking|Metal Shop]]<br />
* [[tools/3D_Printing|3D Printing]]<br />
* [[tools/Laser_Cutter|Laser Cutter]]<br />
* [[tools/Sewing|Sewing corner]]<br />
* [[tools/Computers|Computers, Displays, and internet connectivity]]<br />
* [[Inventory]]<br />
* [[Tool Wishlist]] -- **Please use this set of pages to offer donations or to request tools.**<br />
* [[cloud|Hacksburg Cloud]]<br />
<br />
= Projects =<br />
* [[projects/DIY_CNC_Mill|DIY CNC Mill]]<br />
* [[projects/New_3D_Printer|New 3D printer]]<br />
* [[projects/Vacuum_Former|Vacuum former]]<br />
<br />
===== Archived Projects =====<br />
* [[projects/LCBB_Ideas|Ideas for Let's Code Blacksburg Classes]]<br />
* [[projects/Creativity_Ideas|Ideas for Radford Creativity Class]]<br />
* [[projects/The_Search_for_a_3D_Printer|The Search for (and finding of) a 3D Printer]]<br />
* [[projects/Summer_2015_Booth|2015 Summer Booth Project]]<br />
<br />
= Administration =<br />
===== Policies =====<br />
* [[policy/Admissions|Admissions]]<br />
* [[policy/Community Agreement|Community Agreement]]<br />
* [[policy/Space Rules|Space Rules]]<br />
* [[policy/safety|Safety Policies]]<br />
* [[policy/Events|Event Policies]]<br />
* [[policy/Bylaws|Bylaws]]<br />
** [[policy/Proposed Bylaws Changes 2015-12-01|2015 Proposed Bylaws Changes]]<br />
** [[policy/Bylaws_v1|Bylaws (v1)]]<br />
<br />
===== Forms =====<br />
* [[forms/Membership_Application|Membership Application]]<br />
* [[forms/Equipment_Donation|Equipment Donation Form]]<br />
* [[forms/Equipment_Loan|Equipment Loan Form]]<br />
* [[forms/Event_Request|Event Request Form]]<br />
* [[forms/PDFs|Paper PDF Forms]]<br />
<br />
===== Administrivia =====<br />
* [[Meeting Agendas and Minutes]]<br />
* [[Infrastructure Documentation]]<br />
* [[Responsibilities]]<br />
* [[Adafruit Group Buy]] **(CLOSED)**<br />
* [[Advertising]]<br />
<br />
= History =<br />
* [[Founding - 2014]]<br />
* [[Move to 1872 Garvin - 2019]]</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/Archive&diff=1712Events/Archive2022-05-18T12:35:18Z<p>Chet Manly: /* 2022 */</p>
<hr />
<div>== Events Archive ==<br />
<br />
=== 2022 ===<br />
* January 9: [[Events/2022/Woodworking_101_January|Woodworking 101]], Ages 16+, $30 material fee<br />
* January 16: [[Events/2022/Vacuum_Former_Work_Day|Vacuum Former Work Day]], No RSVP or class fee<br />
* January 23: [[Events/2022/Smart_Home_Alone|Smart Home Alone!]]<br />
* January 25 7:00 PM: Annual Meeting, '''Members Only'''<br />
* January 29: [[Events/2022/Vacuum_Former_Work_Day|Vacuum Former Work Day]], No RSVP or class fee<br />
* January 30: [[Events/2022/Foam_Armor_Basics|Foam Armor Basics]], Ages 14+<br />
* February 6: [[Events/2022/Laser_February|Valentine's Day Laser Class]], Ages 14+, $10 optional material fee<br />
* February 13: [[Events/2022/Costume_Distressing_and_Aging|Costume Distressing and Aging]], Ages 14+<br />
* February 20: [[Events/2022/Resin_Printer_February|Resin Printer Basics]], Ages 16+<br />
* February 26 (was 27, updated): [[Events/2022/Test_and_Measurement|Electronics Bench Basics]], Ages 14+<br />
* March 5: Raspberry Pi Jam with Roanoke Robotics (https://www.meetup.com/Roanoke-Robotics/events/282186823)<br />
* March 6: [[Events/2022/Starting_Plants_and_Gardening|Starting Plants and Gardening]], Ages 14+<br />
* March 13: Vacuum Former Work Day, no RSVP or class fee<br />
* March 20: [[Events/2022/Small_Engine_Maintenance|Small Engine Maintenance]], Ages 16+<br />
* March 27: [[Events/2022/Woodworking_March|Woodworking 101]], Ages 16+<br />
* April 2: Maker Faire Prep Day, no RSVP or class fee, intended for Maker Faire booth attendees<br />
* April 3: Lynchburg Maker Faire (https://lynchburg.makerfaire.com/)! Hacksburg will have a booth but it's a super fun event and attendance is encouraged.<br />
* April 8-9: Shadowfest on the Virginia Tech Campus<br />
* April 9: Arduino Jam with Roanoke Robotics (https://www.meetup.com/Roanoke-Robotics/events/282186858)<br />
* April 10: [[Events/2022/Metal_Casting_April|Metal Casting]], Ages 16+<br />
* April 17: [[Events/2022/Printer_Work_Day_April|3D Printer Work Day]], Ages 14+, no RSVP or class fee, bring your printers to work on<br />
* April 30: Blacksburg YMCA Healthy Kids Day (https://vtymca.org/healthy-kids-day/)<br />
* May 1: [[Events/2022/Silicone_Mold_Making|Silicone Mold Making]], Ages 14+<br />
* May 8: [[Events/2022/Sharpening_April|Slow-Speed Precision Knife Sharpening]], Ages 18+<br />
<br />
=== 2021 ===<br />
* June 27: [[Events/2021/3D_Printer|3D Printer Build/Workshop Day]] (no RSVP)<br />
* July 11: [[Events/2021/Silicone|Silicone Mold Making]] (rescheduled)<br />
* July 25: [[Events/2021/Electronics|Electronics 101 ]]<br />
* July 31/August 1: Members prep for Steppin Out<br />
* August 6-7: Steppin Out! http://www.blacksburgsteppinout.com/<br />
* August 8: Hacksburg In-Person Open House<br />
* October 10: [[Events/2021/Cider|Seventh Annual Hacksburg Cider Pressing!]], All ages, bring your own apples<br />
* October 15, 6:00PM to 10:00PM: Habicraft, held by Hacksburg and the Christiansburg Habitat for Humanity ReStore: https://allevents.in/blacksburg/habicraft-building-competition/200021587373509<br />
* October 17: [[Events/2021/Cider|Seventh Annual Hacksburg Cider Pressing!]], All ages, bring your own apples<br />
* October 24: [[Events/2021/Fermenting|Fermenting Basics]], Ages 21+<br />
* October 26 (Tuesday Meeting): Pumpkin carving, may or may not involve lasers<br />
* October 31: [[Events/2021/Pumpkin_Chunkin|First Annual Pumpkin Chunkin!]]<br />
* November 6: Lightsaber making with the lightsaber club at Virginia Tech<br />
* November 7: [[Events/2021/Woodworking_November|Woodworking 101]], Ages 16+, $30 for members and $35 for non-members (wood is expensive now!)<br />
* November 14: [[Events/2021/Laser_November|Laser 101]], Ages 16+, $10 for members and $15 for non-members for supplies.<br />
* November 21: [[Events/2021/RGB_Arduino|RGB Lights with Smart Controllers]], Ages 12+, optional $15 class fee for controller and lights.<br />
* December 5: [[Events/2021/Ornaments|Third Annual Holiday Ornament Making]], All ages<br />
* December 12: [[Events/2021/Casting_December|Casting 101]], Ages 16+<br />
<br />
=== 2020 ===<br />
* January 12, 1 to 4 PM: Machining 101<br />
* January 19, 1 to 4 PM: [[Winemaking|Winemaking 101]]<br />
* March 8, 1 to 4 PM: St. Patrick's Day themed [[events/2019/Laser_Cutter_Class|Laser Cutter 101]]<br />
* March 15, 1 to 4 PM: [[Events/2020/Cheesemaking_101|Cheesemaking 101]]<br />
* July 12, 1 to 4 PM: [[Events/2020/Python_101|Python 101]]<br />
* July 19, 1 to 4 PM: [[Events/2020/Laser_101|Laser 101]]<br />
* July 26, 1 to 4 PM: [[Events/2020/Sous_Vide_101|Sous Vide Cooking 101]]<br />
* August 23, 1 to 4 PM: [[Events/2020/Canning_101|Canning 101]]<br />
* August 30, 1 to 4 PM: [[Events/2020/Fermentation_101|Non-Alcoholic Fermentation]]<br />
* September 13, 1 to 4 PM: [[Events/2020/Laser_101_September|Laser 101]]<br />
* September 20, 1 to 4 PM: [[Events/2020/CAD_3D_September|CAD and 3D Printing]]<br />
* September 27, 1 to 4 PM: [[Events/2020/Casting|Metal Casting]]<br />
* October 4, 1 to 4 PM: [[Events/2020/Halloween 101|Halloween 101]]<br />
* '''October 10-11, 1 to 4PM: [[Events/2020/Cider|Cidermaking]]'''<br />
* October 17, 1 to 4 PM: [[Events/2020/Cosplay_Laser|Making Costumes with Lasers]]<br />
* October 18, 1 to 4 PM: [[Events/2020/Costume_Detail|Detailed Costumes]]<br />
* October 25, 1 to 4 PM: [[Events/2020/Hard_Cider|Hard Cider Making]]<br />
* November 1, 1 to 4 PM: [[Events/2020/Sous_Vide_Food|Sous Vide Food]]<br />
<br />
=== 2019 ===<br />
* Sunday January 13, 2-4 pm: [[events:2019:laser_mugs|Laser Etched Mugs]] - Rescheduled to March 2 due to weather<br />
* Tuesday January 15, 7-7:30 pm: Annual Meeting (Full members only, regular meeting to follow)<br />
* Sunday February 3, 1-5 pm: [[events:2019:foam_armor_class|Foam Armor Class]]<br />
* Sunday February 10, 1-5 pm: [[events:2019:laser_valentines|Laser Cutter Valentines]]<br />
* TBD, email rsvp@hacksburg.org to be notified: [[events/2019/Laser_Cutter_Class|Laser Basics]]<br />
* September 22, 1 to 4 PM: [[events/2019/Woodworking 101|Woodworking 101]]<br />
* September 29, 1 to 4 PM: [[events/2019/3D Printing and CAD|Intro to 3D Printing and CAD]]<br />
* October 2, 11:30 AM to 1 PM: [https://www.facebook.com/events/495099304558298/ VT CRC Chili Cook-off] [[events/2019/Chili Cookoff|Hacksburg Plans]]<br />
* October 5, 8 AM to 2 PM: [[events/2019/5th Annual Cider Pressing|Apple Tasting and Cider Demo at Blacksburg Farmers Market]]<br />
* October 6, 1 to 4 PM: [[events/2019/5th Annual Cider Pressing|5th Annual Cider Pressing]]<br />
* October 13, 1 to 4 PM: [[events/2019/Costume Hats and Masks|Costume Hats and Masks]]<br />
* October 20, 1 to 4 PM: [[events/2019/Costume Prop Weathering|Costume Prop Weathering]]<br />
* October 29, After meeting: [[events/2019/Pumpkin Carving|Pumpkin Carving]]<br />
* September 8, 1 to 4 PM: Hacksburg Grand Re-Opening (No RSVP required)<br />
* December 8, 1 to 4 PM: [[events/2019/Holiday Ornaments|Holiday Ornaments]]<br />
* December 15, 1 to 4 PM: [[events/2019/Laser_Cutter_Class|Laser Cutter 101]] and [[events/2019/Holiday Ornaments|Holiday Ornaments]]<br />
<br />
=== 2018 ===<br />
* February 24 2-4 pm: [[event:2018:Pepekura|Pepekura (3D Paper Modeling) Class]]<br />
* Sat May 19, 1-5 PM: [[events:2018:Laser Cutter Class]]<br />
* Sat June 16: Visit our booth at [http://downtownblacksburg.com/summer-solstice-blacksburg.aspx Summer Solstice Fest]<br />
* Sun June 17, TBD: [[events:2018:Hacksburg Open House]]<br />
* Sat June 23, 1:00-5:00 pm: [[events:2018:Woodworking 101]]<br />
* Sat June 30, 1:00-5:00 pm: [[events:2018:Foam Armor Class]]<br />
* Sat July 14, 1:00-5:00 pm: [[events:2018:Laser Cutter Class]]<br />
* Sunday August 5, 1-5 PM: Hacksburg Disassembly Day<br />
* Tuesday August 7, 7:30-8:30 PM: Buisness Meeting and [[events:2018:FallPlanning|Fall 2018 Event Planning]]<br />
* Sunday August 12, 1-5 PM: [[events:2018:welding_101|Welding 101]]<br />
* Sunday September 9, Noon-4 PM: [[events:2018:cosplay_guests|Intro to Cosplay with Special Guest Presenters]]<br />
* Sunday September 16, 1-5 PM: [[events:2018:laser_cutter_class|Laser Cutter Class]]<br />
* Sunday September 23, 1-5 PM: [[events:2018:woodworking_101_boxes|Woodworking 101 - Boxes and Joinery]]<br />
* Saturday September 29, 1-5 PM: [[events:2018:cider_making|4th Annual Hacksburg Cider Pressing - Option 1]]<br />
* Sunday September 30, 1-5 pm: [[events:2018:cosplay_armor|Intro to Cosplay - Armormaking]]<br />
* Sunday October 7, 1-5 PM: [[events:2018:cider_making|4th Annual Hacksburg Cider Pressing - Option 2]]<br />
* Sunday October 21, 1-5 PM: [[events:2018:cosplay_tophat|Cosplay Steampunk Tophat]]<br />
* Tuesday October 30, 8-9 PM: Pumpkin Carving/Halloween Activities (after regular meeting)<br />
* Saturday November 17, 1-5 PM: [[events:2018:milling_101|Milling 101]]<br />
* Sunday December 2, 1-5 PM: [[events:2018:diy_ornaments|Make Personalized Ornaments]]<br />
<br />
<br />
=== 2017 ===<br />
* January 17th 8:00pm - Tool Tuesday - Introduction to the Oscilloscope - Come on out to Hacksburg's monthly Tool Tuesday and learn what an Oscilloscope is, what uses it has, and the basics of operating it. This event is open to everyone (students, residents, anyone!) and free.<br />
* January 28th 9:30 AM - 5:00 PM -- [[events:drone|Drone building]]<br />
* Feburary 21st at 8:00pm - Introduction to Soldering - Come on out to Hacksburg's monthly Tool Tuesday and learn what soldering is, what uses it has, and the basics of doing it from Brent, a board member. This event is open to everyone (students, residents, anyone!) and free.<br />
* March 4 - Introduction to Sewing - 1pm-4pm<br />
** Come learn basic hand sewing, how to use a sewing machine, and how to follow a basic pattern. <br />
** We will be making drawstring bags.<br />
** Reading a simple pattern<br />
** straight stitching by hand<br />
** using a sewing machine (bobbins, threading, adjusting)<br />
** Price: $10 public / $5 for members<br />
** see 2016 class for notes [[:Sewing 101]]<br />
* March 7 - Magic Wand Contest Awards Party 8pm for the [[events:2017:magic_wand_contest?s[]=wizard]]<br />
* March 11 - Open house 1-4pm Stop in to get a tour of our space, some tea or coco, and be able to ask any questions about our organization. This is free and open to everyone!<br />
* March 7-28 -- [[adafruit_group_buy|Adafruit Group Buy]]<br />
* March 19 - Inventory Day - 1-5pm<br />
** Members, we need to inventory everything in the space for taxes, please come out and help us knock it out.<br />
* March 21 - 8pm - [[events:2017:hacksburg_tool_tuesday_-_introduction_to_3d_printing|Tool Tuesday - Introduction to 3D Printing]]<br />
* April - [[events:2017:steam_punk_contest|Steampunk Contest]] all month!<br />
* May 2 - 8 PM -- [[events:2017:steam_punk_contest|Steampunk Contest]] Awards Party<br />
* June 17 - [[events:Summer Solstice Fest 2017]]<br />
* June 24 - [[events:Woodworking 101 - 2017]]<br />
* October 8, 1pm to 5pm - [[events:2017:Cider Making Event 2017]]<br />
* October 10, 7:30 pm - Pumpkin Carving after General Meeting<br />
* October 14, 9am to 3pm - [https://www.facebook.com/events/1733510660283858/ Repair Cafe at the NRV ReStore]<br />
* November 12, 2pm - [[events:2017:Foam Armor Class]]<br />
<br />
=== 2016 ===<br />
* Saturday March 12, 2016 [[:Hackwood Derby]] 1pm<br />
* Sunday, March 20, 2016 - 10am - 2pm Homebrewing Demo - Stop by and ask questions as Nicole Schwartz brews some tea beer<br />
* Sunday, March 20, 2016 - 2 pm [[:3D printing class 2016]] (part of the [[:cosplay class series]]) by Andrew Mike<br />
* Saturday, April 9, 2016 - Time noon-2pm [[:Prosthetics]] (part of the [[:cosplay class series]]) by Chris DeHart <br />
* Tuesday, April 19, 2016 - 6-9pm [[:Introduction to Arduino]] with LCBB (part of the [[:cosplay class series]])<br />
* Saturday April 23, 2016 1pm [[:Basic woodworking safety]] by Kurt Rooks<br />
* Sunday, April 24, 2016 - 2pm-4pm [[:Sewing 101]] - making a drawstring bag (part of the [[:cosplay class series]])<br />
* Saturday, May 21, 2016 - 2pm-4pm - [[:Internet Safety]]<br />
* Thursday, June 2, 2016 - 6pm -- [[:Make your own Enigma machine]]<br />
* Saturday, June 18, 2016 -- [[:2016 Summer Solstice Fest]]<br />
* Sunday, September 11, 2016 - 1pm-9pm -- [[events:2016:press_your_own_cider]] and a hard cider brewing demo. (Bring your own apples)<br />
* Saturday, September 17, 2016 - 10am-4pm -- [[Unconference II]] followed by a [https://www.facebook.com/events/1717980871789482/ sorting party] at 6pm<br />
** Thank you to our financial sponsor [http://foxguardsolutions.com/careers/|FoxGuard Solutions] - they are enabling us to cover costs for all of our UnConference Supplies! <br />
** Thank you to our lunch sponsor [http://www.blacksburgbagels.com/ Blacksburg Bagels] <br />
** Thank you to our tea sponsor [http://thedevoteausa.com/ The Devotea USA] <br />
* December 11 1:00pm - 4:00pm -- Hacksburg Open House -- Stop in to get a tour of our space, some tea or coco, and be able to ask any questions about our organization. This is open to everyone!<br />
* December 13 8:00pm -- Tool Tuesday - Metal Lathe Introduction - presentation on using the metal lathe in the shop. This is open to everyone!<br />
* December 20 8:00pm -- Tool Tuesday - Laser Engraving 101 - presentation on using the laser engraver in the shop. This is open to everyone!<br />
<br />
=== 2015 ===<br />
* [[events:2015:Summer_Solstice_Fest|Summer Solstice]] June 20, 2015<br />
* [[events:2015:How_to_Homebrew|How to homebrew]] July 18, 2015 followed by [[events:2015:beverage_cooling_competition|Beverage Cooling Competition]]<br />
* [[events:2015:kids_circuits|Kids Circuts]] Aug 1, 2015<br />
* [[events:2015:12_hour_hackathon|12 Hour Hackathon]] Sept 5, 2015<br />
* [[events:2015:high_altitude_balloon_talk|High Altitude Balloon Talk]] Tue Sept 15, 2015 at 8pm<br />
* [[events:2015:va_science_festival|Virginia Science Festival]] Sat Sept 26, 2015<br />
* [[events:2015:tea_101_class|Tea 101 Class]] Oct 3, 2015<br />
* [[events:2015:3d_printing_class|3D Printing Class]] Oct 18, 2015<br />
* [[events:2015:pumpkin_carving|Pumpkin Carving]] Oct 25, 2015<br />
* Annual Meeting Saturday November 7th, 2015<br />
* Barnes & Noble Mini Maker Faire - [http://stores.barnesandnoble.com/event/9780061730846-0 Meet the Makers]<br />
** Friday Nov 6, 2015 at 5pm (Nicole)<br />
** Saturday Nov 7, 2015 at 1pm (Kurt)<br />
** Sunday Nov 8, 2015 at 1pm (Andrew/Jenn)</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Main_Page&diff=1711Main Page2022-05-18T12:31:34Z<p>Chet Manly: /* Regional Events */</p>
<hr />
<div>[[File:ElectronicsBench.jpg|500px|thumb|Hacksburg Electronics Bench in the Creativity and Innovation Studio]]<br />
<br />
{| class="wikitable"<br />
|-<br />
! Due to '''new''' health agency recommendations related to COVID-19, in-person events at Hacksburg have resumed! All events will be in-person + online ("hybrid") from now on.<br />
|}<br />
<br />
Hacksburg is a community workshop located in Blacksburg, VA at [https://goo.gl/maps/rCYYGkS5AdnwPMWG9 1872 Pratt Drive], in the Virginia Tech Corporate Research Center.<br />
<br />
Want to join Hacksburg? Start by reading [http://hacksburg.org/join.html this page]!<br />
<br />
= Donations =<br />
We're a registered 501c3 non-profit and love donations! Read more [[donate|here]].<br />
<br />
= Events =<br />
===== Recurring Events =====<br />
Weekly meeting every Tuesday 7:30 PM. Feel free to come by for a tour! This meeting is open-to-the-public and followed by an open-to-the-public work session starting at the end of the meeting to whenever the last member leaves. Also feel free to attend to learn more about Hacksburg and take a [http://hacksburg.org/360tour.html virtual tour]! The meeting link is [https://meet.hacksburg.org/OpenGroupMeeting https://meet.hacksburg.org/OpenGroupMeeting] for attending virtually.<br />
<br />
===== Upcoming Events =====<br />
'''Make sure to RSVP for events before attending at rsvp@hacksburg.org.''' All classes 1:00PM-4:00PM unless otherwise noted.<br />
<br />
* May 15: [[Events/2022/Bicycle_Repair|Bicycle Repair Day]]<br />
* May 22: Vacuum Former Work Day, no RSVP required<br />
* June 5: [[Events/2022/Sewing_101|Sewing 101]], Ages 14+<br />
* June 12: Shop Spring Clean-up, no RSVP required<br />
* June 18: [https://downtownblacksburg.com/summer-solstice-blacksburg.aspx Hacksburg at Summer Solstice Fest]<br />
* June 19: Hacksburg Open House, no RSVP required<br />
* June 26: [[Events/2022/Laser_June|Laser 101]], Ages 14+, $10 optional material fee<br />
<br />
Classes are $5 for non-members and free for members unless otherwise noted.<br />
<br />
Check out and RSVP to these events on MeetUp (https://www.meetup.com/HacksburgVA/) as well!<br />
<br />
===== Regional Events =====<br />
<br />
* August 5-6: [http://www.blacksburgsteppinout.com/ Blacksburg Steppin' Out]<br />
<br />
===== Other Events =====<br />
* [[events/Future|Future Events]]<br />
* [[events/Archive|Events Archive]]<br />
* [[events/Ideas|Events Ideas]]<br />
<br />
= Tools =<br />
* [[tools/Electronics|Electronics Bench]]<br />
* [[tools/Woodworking|Wood Shop]]<br />
* [[tools/Metalworking|Metal Shop]]<br />
* [[tools/3D_Printing|3D Printing]]<br />
* [[tools/Laser_Cutter|Laser Cutter]]<br />
* [[tools/Sewing|Sewing corner]]<br />
* [[tools/Computers|Computers, Displays, and internet connectivity]]<br />
* [[Inventory]]<br />
* [[Tool Wishlist]] -- **Please use this set of pages to offer donations or to request tools.**<br />
* [[cloud|Hacksburg Cloud]]<br />
<br />
= Projects =<br />
* [[projects/DIY_CNC_Mill|DIY CNC Mill]]<br />
* [[projects/New_3D_Printer|New 3D printer]]<br />
* [[projects/Vacuum_Former|Vacuum former]]<br />
<br />
===== Archived Projects =====<br />
* [[projects/LCBB_Ideas|Ideas for Let's Code Blacksburg Classes]]<br />
* [[projects/Creativity_Ideas|Ideas for Radford Creativity Class]]<br />
* [[projects/The_Search_for_a_3D_Printer|The Search for (and finding of) a 3D Printer]]<br />
* [[projects/Summer_2015_Booth|2015 Summer Booth Project]]<br />
<br />
= Administration =<br />
===== Policies =====<br />
* [[policy/Admissions|Admissions]]<br />
* [[policy/Community Agreement|Community Agreement]]<br />
* [[policy/Space Rules|Space Rules]]<br />
* [[policy/safety|Safety Policies]]<br />
* [[policy/Events|Event Policies]]<br />
* [[policy/Bylaws|Bylaws]]<br />
** [[policy/Proposed Bylaws Changes 2015-12-01|2015 Proposed Bylaws Changes]]<br />
** [[policy/Bylaws_v1|Bylaws (v1)]]<br />
<br />
===== Forms =====<br />
* [[forms/Membership_Application|Membership Application]]<br />
* [[forms/Equipment_Donation|Equipment Donation Form]]<br />
* [[forms/Equipment_Loan|Equipment Loan Form]]<br />
* [[forms/Event_Request|Event Request Form]]<br />
* [[forms/PDFs|Paper PDF Forms]]<br />
<br />
===== Administrivia =====<br />
* [[Meeting Agendas and Minutes]]<br />
* [[Infrastructure Documentation]]<br />
* [[Responsibilities]]<br />
* [[Adafruit Group Buy]] **(CLOSED)**<br />
* [[Advertising]]<br />
<br />
= History =<br />
* [[Founding - 2014]]<br />
* [[Move to 1872 Garvin - 2019]]</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tool_Wishlist&diff=1710Tool Wishlist2022-05-18T12:26:15Z<p>Chet Manly: /* Completed */</p>
<hr />
<div>If you want Hacksburg to acquire something listed here, '''add your name to the list next to that thing (in parentheses) to vote for it'''. If you want the Hacksburg to acquire something not listed, add it as a link to a nonexistant page (look at the other listed items as a guide). That page is where we'll discuss possible sources for that tool.<br />
<br />
While preference will be given to things wanted by current members, '''anyone may contribute to this page!''' We want the input of the larger community as well, so feel free to add your name.<br />
<br />
Similarly, if you have any information about where we might get one of these things, add that information to the page in question.<br />
<br />
== Tools ==<br />
* Small ($0-$100)<br />
** One or two nice dust pans<br />
** Heavy duty die grinder<br />
** Bar clamps<br />
** USB Microscope<br />
** Multimeter<br />
*** BK Precision 2712?<br />
*** BK Precision 2709B?<br />
** AXA #1XL OVERSIZE (5/8") QUICK CHANGE TURNING FACING LATHE TOOL POST HOLDER https://smile.amazon.com/gp/product/B01MTV2IZK/<br />
** Insert holder and inserts<br />
** Mill hold down kit<br />
** Heat Shrink<br />
** Better "paint booth", can be DIY<br />
** Better stand for metal bandsaw<br />
* Medium ($100-$500)<br />
** Shop air compressor<br />
** (TIG) welder<br />
** Shop Vac(s)<br />
*** Brush and floor attachments<br />
*** With cyclone attachment?<br />
** 1080p Projector<br />
** Dust collector accessories to hook up additional tools<br />
** Lathe DRO<br />
** 3D printer tool change system<br />
*** Wham Bam mutant<br />
*** Biqu Hermit Crab<br />
*** Xchange<br />
** Vinyl Cutter<br />
** Metal brake (combo Press/Shear/Brake)<br />
** Sewing machine<br />
** 4k and/or larger format resin printer<br />
** Lathe VFD<br />
** Filament extruder/print recycler<br />
** Shop surveillance system<br />
** Plasma Cutter<br />
* Large ($500+)<br />
** CNC Gantry Mill<br />
*** https://docs.google.com/spreadsheets/d/1LLPJ_kJcSeNO-eo7BjwZFO160flCq8zhnzOoqsl8Tx8/<br />
** Belt/disc sander<br />
** Replacement laser tube<br />
** Hobbyist Injection molding machine<br />
** Freestanding bandsaw<br />
** Higher reliability 3D printer (Prusa Mini/Mk3)<br />
<br />
== Completed ==<br />
* Metal Lathe<br />
* CNC mill (bed for the kit so we don't have to swap with laser engraver)<br />
** [[tools:metalworking:cnc_mill|Modifying Mill/Drill]]<br />
* <del>3D printer (larger print bed)</del><br />
** Purchased [[Tools/3D_Printing/Creality_CR-10_S4|Creality CR-10 S4]]<br />
* <del>Vacuum former</del><br />
* Driver bit set (plus security bits)<br />
* Tap and die set<br />
<br />
[[Tool Wishlist Archive]] things we likely still want, but less urgently</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tool_Wishlist&diff=1709Tool Wishlist2022-05-18T12:19:46Z<p>Chet Manly: /* Tools */</p>
<hr />
<div>If you want Hacksburg to acquire something listed here, '''add your name to the list next to that thing (in parentheses) to vote for it'''. If you want the Hacksburg to acquire something not listed, add it as a link to a nonexistant page (look at the other listed items as a guide). That page is where we'll discuss possible sources for that tool.<br />
<br />
While preference will be given to things wanted by current members, '''anyone may contribute to this page!''' We want the input of the larger community as well, so feel free to add your name.<br />
<br />
Similarly, if you have any information about where we might get one of these things, add that information to the page in question.<br />
<br />
== Tools ==<br />
* Small ($0-$100)<br />
** One or two nice dust pans<br />
** Heavy duty die grinder<br />
** Bar clamps<br />
** USB Microscope<br />
** Multimeter<br />
*** BK Precision 2712?<br />
*** BK Precision 2709B?<br />
** AXA #1XL OVERSIZE (5/8") QUICK CHANGE TURNING FACING LATHE TOOL POST HOLDER https://smile.amazon.com/gp/product/B01MTV2IZK/<br />
** Insert holder and inserts<br />
** Mill hold down kit<br />
** Heat Shrink<br />
** Better "paint booth", can be DIY<br />
** Better stand for metal bandsaw<br />
* Medium ($100-$500)<br />
** Shop air compressor<br />
** (TIG) welder<br />
** Shop Vac(s)<br />
*** Brush and floor attachments<br />
*** With cyclone attachment?<br />
** 1080p Projector<br />
** Dust collector accessories to hook up additional tools<br />
** Lathe DRO<br />
** 3D printer tool change system<br />
*** Wham Bam mutant<br />
*** Biqu Hermit Crab<br />
*** Xchange<br />
** Vinyl Cutter<br />
** Metal brake (combo Press/Shear/Brake)<br />
** Sewing machine<br />
** 4k and/or larger format resin printer<br />
** Lathe VFD<br />
** Filament extruder/print recycler<br />
** Shop surveillance system<br />
** Plasma Cutter<br />
* Large ($500+)<br />
** CNC Gantry Mill<br />
*** https://docs.google.com/spreadsheets/d/1LLPJ_kJcSeNO-eo7BjwZFO160flCq8zhnzOoqsl8Tx8/<br />
** Belt/disc sander<br />
** Replacement laser tube<br />
** Hobbyist Injection molding machine<br />
** Freestanding bandsaw<br />
** Higher reliability 3D printer (Prusa Mini/Mk3)<br />
<br />
== Completed ==<br />
* Metal Lathe<br />
* CNC mill (bed for the kit so we don't have to swap with laser engraver)<br />
** [[tools:metalworking:cnc_mill|Modifying Mill/Drill]]<br />
* <del>3D printer (larger print bed)</del><br />
** Purchased [[Tools/3D_Printing/Creality_CR-10_S4|Creality CR-10 S4]]<br />
* <del>Vacuum former</del><br />
** Built [[Projects/Vacuum_Former|Vacuum former]]<br />
* Driver bit set (plus security bits)<br />
* Tap and die set<br />
<br />
[[Tool Wishlist Archive]] things we likely still want, but less urgently</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tool_Wishlist&diff=1708Tool Wishlist2022-05-18T12:15:04Z<p>Chet Manly: /* Tools */</p>
<hr />
<div>If you want Hacksburg to acquire something listed here, '''add your name to the list next to that thing (in parentheses) to vote for it'''. If you want the Hacksburg to acquire something not listed, add it as a link to a nonexistant page (look at the other listed items as a guide). That page is where we'll discuss possible sources for that tool.<br />
<br />
While preference will be given to things wanted by current members, '''anyone may contribute to this page!''' We want the input of the larger community as well, so feel free to add your name.<br />
<br />
Similarly, if you have any information about where we might get one of these things, add that information to the page in question.<br />
<br />
== Tools ==<br />
* Small ($0-$100)<br />
** One or two nice dust pans<br />
** Heavy duty die grinder<br />
** Flush cutters<br />
** Bar clamps<br />
** USB Microscope<br />
** Multimeter<br />
** AXA #1XL OVERSIZE (5/8") QUICK CHANGE TURNING FACING LATHE TOOL POST HOLDER https://smile.amazon.com/gp/product/B01MTV2IZK/<br />
** Insert holder and inserts<br />
** Mill hold down kit<br />
** Heat Shrink<br />
** Better "paint booth", can be DIY<br />
** Better stand for metal bandsaw<br />
* Medium ($100-$500)<br />
** Shop air compressor<br />
** (TIG) welder<br />
** Shop Vac(s)<br />
*** Brush and floor attachments<br />
*** With cyclone attachment?<br />
** 1080p Projector<br />
** Dust collector accessories to hook up additional tools<br />
** Lathe DRO<br />
** 3D printer tool change system<br />
*** Wham Bam mutant<br />
*** Biqu Hermit Crab<br />
*** Xchange<br />
** Vinyl Cutter<br />
** Metal brake (combo Press/Shear/Brake)<br />
** Sewing machine<br />
** 4k and/or larger format resin printer<br />
** Lathe VFD<br />
** Filament extruder/print recycler<br />
** Shop surveillance system<br />
** Plasma Cutter<br />
* Large ($500+)<br />
** CNC Gantry Mill<br />
*** https://docs.google.com/spreadsheets/d/1LLPJ_kJcSeNO-eo7BjwZFO160flCq8zhnzOoqsl8Tx8/<br />
** Belt/disc sander<br />
** Replacement laser tube<br />
** Hobbyist Injection molding machine<br />
** Freestanding bandsaw<br />
** Higher reliability 3D printer (Prusa Mini/Mk3)<br />
<br />
== Completed ==<br />
* Metal Lathe<br />
* CNC mill (bed for the kit so we don't have to swap with laser engraver)<br />
** [[tools:metalworking:cnc_mill|Modifying Mill/Drill]]<br />
* <del>3D printer (larger print bed)</del><br />
** Purchased [[Tools/3D_Printing/Creality_CR-10_S4|Creality CR-10 S4]]<br />
* <del>Vacuum former</del><br />
** Built [[Projects/Vacuum_Former|Vacuum former]]<br />
* Driver bit set (plus security bits)<br />
* Tap and die set<br />
<br />
[[Tool Wishlist Archive]] things we likely still want, but less urgently</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tool_Wishlist&diff=1707Tool Wishlist2022-05-18T12:13:16Z<p>Chet Manly: /* Tools */</p>
<hr />
<div>If you want Hacksburg to acquire something listed here, '''add your name to the list next to that thing (in parentheses) to vote for it'''. If you want the Hacksburg to acquire something not listed, add it as a link to a nonexistant page (look at the other listed items as a guide). That page is where we'll discuss possible sources for that tool.<br />
<br />
While preference will be given to things wanted by current members, '''anyone may contribute to this page!''' We want the input of the larger community as well, so feel free to add your name.<br />
<br />
Similarly, if you have any information about where we might get one of these things, add that information to the page in question.<br />
<br />
== Tools ==<br />
* Small ($0-$100)<br />
** A couple nice dust pans!<br />
** Heavy duty die grinder<br />
** Flush cutters<br />
** Bar clamps<br />
** USB Microscope<br />
** Multimeter<br />
** AXA #1XL OVERSIZE (5/8") QUICK CHANGE TURNING FACING LATHE TOOL POST HOLDER https://smile.amazon.com/gp/product/B01MTV2IZK/<br />
** Insert holder and inserts<br />
** Mill hold down kit<br />
** Heat Shrink<br />
** Better "paint booth", can be DIY<br />
** Better stand for metal bandsaw<br />
* Medium ($100-$500)<br />
** Shop air compressor<br />
** (TIG) welder<br />
** Shop Vac(s)<br />
*** With cyclone attachment?<br />
** 1080p Projector<br />
** Dust collector accessories to hook up additional tools<br />
** Lathe DRO<br />
** 3D printer tool change system<br />
*** Wham Bam mutant<br />
*** Biqu Hermit Crab<br />
*** Xchange<br />
** Vinyl Cutter<br />
** Metal brake (combo Press/Shear/Brake)<br />
** Sewing machine<br />
** 4k and/or larger format resin printer<br />
** Lathe VFD<br />
** Filament extruder/print recycler<br />
** Shop surveillance system<br />
** Plasma Cutter<br />
* Large ($500+)<br />
** CNC Gantry Mill<br />
*** https://docs.google.com/spreadsheets/d/1LLPJ_kJcSeNO-eo7BjwZFO160flCq8zhnzOoqsl8Tx8/<br />
** Belt/disc sander<br />
** Replacement laser tube<br />
** Hobbyist Injection molding machine<br />
** Freestanding bandsaw<br />
** Higher reliability 3D printer (Prusa Mini/Mk3)<br />
<br />
== Completed ==<br />
* Metal Lathe<br />
* CNC mill (bed for the kit so we don't have to swap with laser engraver)<br />
** [[tools:metalworking:cnc_mill|Modifying Mill/Drill]]<br />
* <del>3D printer (larger print bed)</del><br />
** Purchased [[Tools/3D_Printing/Creality_CR-10_S4|Creality CR-10 S4]]<br />
* <del>Vacuum former</del><br />
** Built [[Projects/Vacuum_Former|Vacuum former]]<br />
* Driver bit set (plus security bits)<br />
* Tap and die set<br />
<br />
[[Tool Wishlist Archive]] things we likely still want, but less urgently</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics/GPR-6030D&diff=1603Tools/Electronics/GPR-6030D2021-05-26T16:35:52Z<p>Chet Manly: Operating instructions for the GPR-6030D bench supply.</p>
<hr />
<div>The GPR-6030D is a regulated DC power supply. Hacksburg's GPR-6030D is owned by a member but has no restrictions on use.<br />
The supply can provide up to 180 W of output power, and has built-in overload and reverse-polarity protection. Output can be set<br />
anywhere between 0-60 V and 0-3 A using the knobs for voltage and current on the front panel.<br />
<br />
== Usage ==<br />
<br />
To use this supply, you set upper limits for both output voltage and output current. The supply then initially tries to keep its output at the voltage limit, by allowing current to vary.<br />
This is called "constant voltage" (CV) operation: the '''C.V.''' LED is lit when operating in this mode. If the current needed to stay at the voltage limit is greater than the current limit,<br />
then the supply operates in "constant current" (CC) mode instead, and the '''C.C.''' LED is lit instead of '''C.V.'''. In CC mode, the supply holds current constant at the current limit<br />
and allows voltage to vary. Thus, it's possible to use this supply to provide a constant voltage ''or'' a constant current to a load. To provide constant voltage, set the current limit higher<br />
than the amount of current your load will draw at the intended supply voltage. To provide constant current, set the voltage limit higher than the voltage needed to drive the desired current<br />
through the load.<br />
<br />
To set the voltage limit, make sure the current limit is set high enough that you're in CV mode ('''C.V.''' lit), and adjust the voltage knobs until the readout above them indicates the desired voltage.<br />
Even if nothing is connected to the supply, you'll still need to set the current limit at least a hair above zero to put it CV mode.<br />
<br />
To set the current limit, temporarily short the '''-''' and '''+''' terminals together with a piece of wire or a banana plug patch cord. The supply should be in CC mode, with '''C.C.''' lit. Adjust the<br />
current knobs until the readout above them indicates the desired current. (Make sure the conductor you use to short the terminals together is large enough to safely carry the current you're dialing in.)</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics&diff=1602Tools/Electronics2021-05-26T15:22:08Z<p>Chet Manly: /* Desktop Equipment */</p>
<hr />
<div>== Desktop Equipment ==<br />
<gallery><br />
oscilloscope.jpg|Owon PDS5022T Portable Digital Storage Oscilloscope<br />
bench_supply.jpg|[[Tools/Electronics/GPR-6030D|GW Instek GPR-6030D Linear DC Power Supply]]<br />
solderingiron.jpg|Soldering Irons<br />
Comingsoon.png|DIY solder reflow oven<br />
Comingsoon.png|Hot air rework station<br />
HP3456A.jpg|[[Tools/Electronics/HP3456A|HP 3456A Digital Multimeter]]<br />
</gallery><br />
<br />
== Rack Mount Equipment ==<br />
<gallery><br />
Comingsoon.png|Custom Stepper Motor Drivers<br />
Comingsoon.png|Multimeter<br />
Comingsoon.png|Power Supply<br />
</gallery></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Tools/Electronics&diff=1601Tools/Electronics2021-05-26T15:20:51Z<p>Chet Manly: Added bench supply to gallery</p>
<hr />
<div>== Desktop Equipment ==<br />
<gallery><br />
oscilloscope.jpg|Owon PDS5022T Portable Digital Storage Oscilloscope<br />
bench_supply.jpg|GW Instek GPR-6030D Linear DC Power Supply<br />
solderingiron.jpg|Soldering Irons<br />
Comingsoon.png|DIY solder reflow oven<br />
Comingsoon.png|Hot air rework station<br />
HP3456A.jpg|[[Tools/Electronics/HP3456A|HP 3456A Digital Multimeter]]<br />
</gallery><br />
<br />
== Rack Mount Equipment ==<br />
<gallery><br />
Comingsoon.png|Custom Stepper Motor Drivers<br />
Comingsoon.png|Multimeter<br />
Comingsoon.png|Power Supply<br />
</gallery></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=File:Bench_supply.jpg&diff=1600File:Bench supply.jpg2021-05-26T15:17:21Z<p>Chet Manly: GW Instek GPR-6030D bench supply.</p>
<hr />
<div>== Summary ==<br />
GW Instek GPR-6030D bench supply.</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1543Events/2020/AVR2021-01-24T18:09:03Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER0_COMPA_vect) {<br />
// Debounce the button. See comments in 'AccelCalib.ino'.<br />
static volatile uint16_t btnHistory = 0xFFFF;<br />
btnHistory = (btnHistory << 1) | bitRead(PIND, PIND2);<br />
if (btnHistory =/= 0x7FFF) btnReleased = true; //MediaWiki won't let me post the equality operator<br />
}<br />
<br />
ISR(TIMER1_COMPA_vect) {<br />
// Begin a conversion on the first channel in the sequence and record the time.<br />
readComplete = false;<br />
index = 0;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC); // ADSC =/= "Analog-Digital converter Start //MediaWiki won't let me post the equality operatorConversion"<br />
sampleTime = micros();<br />
}<br />
<br />
ISR(ADC_vect) {<br />
// Store the conversion result.<br />
rawADC[index] = ADC;<br />
<br />
// Check if all channels have been read. If not, start the next one.<br />
if (index =/= maxIndex) readComplete = true; //MediaWiki won't let me post the equality operator<br />
else {<br />
index++;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC);<br />
}<br />
}<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1542Events/2020/AVR2021-01-24T18:06:54Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER1_COMPA_vect) {<br />
// Begin a conversion on the first channel in the sequence and record the time.<br />
readComplete = false;<br />
index = 0;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC); // ADSC == "Analog-Digital converter Start Conversion"<br />
sampleTime = micros();<br />
}<br />
<br />
ISR(ADC_vect) {<br />
// Store the conversion result.<br />
rawADC[index] = ADC;<br />
<br />
// Check if all channels have been read. If not, start the next one.<br />
if (index == maxIndex) readComplete = true;<br />
else {<br />
index++;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC);<br />
}<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER0_COMPA_vect) {<br />
// Debounce the button. See comments in 'AccelCalib.ino'.<br />
static volatile uint16_t btnHistory = 0xFFFF;<br />
btnHistory = (btnHistory << 1) | bitRead(PIND, PIND2);<br />
if (btnHistory =<br />
}<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1541Events/2020/AVR2021-01-24T18:06:18Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER1_COMPA_vect) {<br />
// Begin a conversion on the first channel in the sequence and record the time.<br />
readComplete = false;<br />
index = 0;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC); // ADSC == "Analog-Digital converter Start Conversion"<br />
sampleTime = micros();<br />
}<br />
<br />
ISR(ADC_vect) {<br />
// Store the conversion result.<br />
rawADC[index] = ADC;<br />
<br />
// Check if all channels have been read. If not, start the next one.<br />
if (index == maxIndex) readComplete = true;<br />
else {<br />
index++;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC);<br />
}<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER0_COMPA_vect) {<br />
// Debounce the button. See comments in 'AccelCalib.ino'.<br />
static volatile uint16_t btnHistory = 0xFFFF;<br />
btnHistory = (btnHistory << 1) | bitRead(PIND, PIND2);<br />
if (btnHistory<br />
}<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1540Events/2020/AVR2021-01-24T18:05:54Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER1_COMPA_vect) {<br />
// Begin a conversion on the first channel in the sequence and record the time.<br />
readComplete = false;<br />
index = 0;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC); // ADSC == "Analog-Digital converter Start Conversion"<br />
sampleTime = micros();<br />
}<br />
<br />
ISR(ADC_vect) {<br />
// Store the conversion result.<br />
rawADC[index] = ADC;<br />
<br />
// Check if all channels have been read. If not, start the next one.<br />
if (index == maxIndex) readComplete = true;<br />
else {<br />
index++;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC);<br />
}<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER0_COMPA_vect) {<br />
// Debounce the button. See comments in 'AccelCalib.ino'.<br />
static volatile uint16_t btnHistory = 0xFFFF;<br />
btnHistory = (btnHistory << 1) | bitRead(PIND, PIND2);<br />
if <br />
}<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1539Events/2020/AVR2021-01-24T18:05:21Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER1_COMPA_vect) {<br />
// Begin a conversion on the first channel in the sequence and record the time.<br />
readComplete = false;<br />
index = 0;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC); // ADSC == "Analog-Digital converter Start Conversion"<br />
sampleTime = micros();<br />
}<br />
<br />
ISR(ADC_vect) {<br />
// Store the conversion result.<br />
rawADC[index] = ADC;<br />
<br />
// Check if all channels have been read. If not, start the next one.<br />
if (index == maxIndex) readComplete = true;<br />
else {<br />
index++;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC);<br />
}<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER0_COMPA_vect) {<br />
// Debounce the button. See comments in 'AccelCalib.ino'.<br />
static volatile uint16_t btnHistory = 0xFFFF;<br />
btnHistory = (btnHistory << 1) | bitRead(PIND, PIND2);<br />
}<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1538Events/2020/AVR2021-01-24T18:04:11Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER1_COMPA_vect) {<br />
// Begin a conversion on the first channel in the sequence and record the time.<br />
readComplete = false;<br />
index = 0;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC); // ADSC == "Analog-Digital converter Start Conversion"<br />
sampleTime = micros();<br />
}<br />
<br />
ISR(ADC_vect) {<br />
// Store the conversion result.<br />
rawADC[index] = ADC;<br />
<br />
// Check if all channels have been read. If not, start the next one.<br />
if (index == maxIndex) readComplete = true;<br />
else {<br />
index++;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC);<br />
}<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER0_COMPA_vect) {<br />
// Debounce the button. See comments in 'AccelCalib.ino'.<br />
static volatile uint16_t btnHistory = 0xFFFF;<br />
btnHistory = (btnHistory << 1) | bitRead(PIND, PIND2);<br />
//anything?<br />
//anything?<br />
//anything?<br />
//anything?<br />
//anything?<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1537Events/2020/AVR2021-01-24T18:03:13Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER1_COMPA_vect) {<br />
// Begin a conversion on the first channel in the sequence and record the time.<br />
readComplete = false;<br />
index = 0;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC); // ADSC == "Analog-Digital converter Start Conversion"<br />
sampleTime = micros();<br />
}<br />
<br />
ISR(ADC_vect) {<br />
// Store the conversion result.<br />
rawADC[index] = ADC;<br />
<br />
// Check if all channels have been read. If not, start the next one.<br />
if (index == maxIndex) readComplete = true;<br />
else {<br />
index++;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC);<br />
}<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER0_COMPA_vect) {<br />
// Debounce the button. See comments in 'AccelCalib.ino'.<br />
static volatile uint16_t btnHistory = 0xFFFF;<br />
btnHistory = (btnHistory << 1) | bitRead(PIND, PIND2);<br />
//anything?<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1536Events/2020/AVR2021-01-24T18:00:39Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER1_COMPA_vect) {<br />
// Begin a conversion on the first channel in the sequence and record the time.<br />
readComplete = false;<br />
index = 0;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC); // ADSC == "Analog-Digital converter Start Conversion"<br />
sampleTime = micros();<br />
}<br />
<br />
ISR(ADC_vect) {<br />
// Store the conversion result.<br />
rawADC[index] = ADC;<br />
<br />
// Check if all channels have been read. If not, start the next one.<br />
if (index == maxIndex) readComplete = true;<br />
else {<br />
index++;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC);<br />
}<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER0_COMPA_vect) {<br />
// Debounce the button. See comments in 'AccelCalib.ino'.<br />
static volatile uint16_t btnHistory = 0xFFFF;<br />
btnHistory = (btnHistory << 1) | bitRead(PIND, PIND2);<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1535Events/2020/AVR2021-01-24T18:00:06Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER1_COMPA_vect) {<br />
// Begin a conversion on the first channel in the sequence and record the time.<br />
readComplete = false;<br />
index = 0;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC); // ADSC == "Analog-Digital converter Start Conversion"<br />
sampleTime = micros();<br />
}<br />
<br />
ISR(ADC_vect) {<br />
// Store the conversion result.<br />
rawADC[index] = ADC;<br />
<br />
// Check if all channels have been read. If not, start the next one.<br />
if (index == maxIndex) readComplete = true;<br />
else {<br />
index++;<br />
ADMUX = channelSequence[index];<br />
bitSet(ADCSRA, ADSC);<br />
}<br />
}<br />
<br />
// --- Interrupt service routines<br />
<br />
ISR(TIMER0_COMPA_vect) {<br />
// Debounce the button. See comments in 'AccelCalib.ino'.<br />
static volatile uint16_t btnHistory = 0xFFFF;<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1534Events/2020/AVR2021-01-24T17:58:41Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
<br />
// --- Subsidiary functions<br />
<br />
String getHeader() {<br />
// TODO - re-implement using C-style strings<br />
String header = "microseconds";<br />
String colName;<br />
for (byte i = 0; i <= maxIndex; i++) {<br />
switch (channelSequence[i]) {<br />
case A_0 | ADCref: colName = ",CH_0"; break;<br />
case A_1 | ADCref: colName = ",CH_1"; break;<br />
case A_2 | ADCref: colName = ",CH_2"; break;<br />
case A_3 | ADCref: colName = ",CH_3"; break;<br />
case A_4 | ADCref: colName = ",CH_4"; break;<br />
case A_5 | ADCref: colName = ",CH_5"; break;<br />
default: colName = ",unknown"; break;<br />
}<br />
header += colName;<br />
}<br />
return header;<br />
}<br />
<br />
void doLowLevelConfig() {<br />
noInterrupts();<br />
<br />
// Combine the ADC reference bits with the channel selection bits. Each value<br />
// in channelSequence should be the complete value of ADMUX for recording the<br />
// desired channel. Tables 23-3 and 23-4.<br />
// TODO - make this separate from the user-specified channel selection array?<br />
for (byte i = 0; i <= maxIndex; i++){<br />
channelSequence[i] = channelSequence[i] | ADCref;<br />
}<br />
<br />
// Configure the Timer 0 Compare Match A interrupt.<br />
OCR0A = 64; // Keep away from the overflow (0) so micros() can update.<br />
bitSet(TIMSK0, OCIE0A); // Enable the interrupt.<br />
<br />
// Configure Timer 1 Compare Match A interrupt to trigger @ freq Hz<br />
TCCR1A = TCCR1B = TCNT1 = 0; // Clear Timer 1 settings.<br />
TCCR1B = bit(WGM12) | bit(CS12); // Count @ 62500 Hz: CTC mode, prescaler = 256. Tables 15-5 and 15-5.<br />
OCR1A = CTCmatch; // Count up to CTCmatch. Section 15.11.6.<br />
bitSet(TIMSK1, OCIE1A); // Enable Output Compare Match A interrupt. Section 15.11.8.<br />
<br />
// Enable the ADC-conversion-complete interrupt, configure ADC for<br />
// single-conversion mode, and disable the ADC. Section 23.9.2.<br />
ADCSRA |= bit(ADIE) | bit(ADIF); // sets these bits<br />
ADCSRA &= ~(bit(ADATE) | bit(ADEN)); // clears these bits<br />
ADMUX = channelSequence[0];<br />
<br />
interrupts();<br />
}<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1533Events/2020/AVR2021-01-24T17:58:05Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
void setup() {<br />
doLowLevelConfig();<br />
<br />
pinMode(2, INPUT_PULLUP); // Changing this pin requires changes in doLowLevelConfig()<br />
pinMode(LED_BUILTIN, OUTPUT);<br />
digitalWrite(LED_BUILTIN, LOW);<br />
<br />
// Initialize communication with PC.<br />
Serial.begin(115200); <br />
Serial.println(getHeader());<br />
}<br />
<br />
void loop() {<br />
if (readComplete) {<br />
readComplete = false;<br />
<br />
// TODO - format output using C-style strings instead<br />
sample = sampleTime;<br />
for (uint8_t i = 0; i <= maxIndex; i++) {<br />
sample += "," + String(rawADC[i]);<br />
}<br />
<br />
Serial.println(sample); // Blocking? Technically, but this is usually fast.<br />
}<br />
<br />
// Handle button presses (or releases in our case).<br />
if (btnReleased) {<br />
btnReleased = false;<br />
<br />
if (recording) {<br />
// If we're recording, stop.<br />
bitClear(ADCSRA, ADEN);<br />
recording = false;<br />
}<br />
else {<br />
// If we're not recording, start.<br />
recording = true;<br />
bitSet(ADCSRA, ADEN);<br />
}<br />
}<br />
}<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1532Events/2020/AVR2021-01-24T17:57:35Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
/*<br />
This code takes ADC readings at a constant rate and prints them to the serial<br />
port. Output is formatted to be CSV-compatible - simply copy the contents of<br />
the serial monitor to a text file. The channels to be digitized are specified<br />
by the array 'channelSequence' - use the channel names defined directly above<br />
it in the code. Sample rate is controlled by setting 'freq' - this expects an<br />
integer value in Hz. The ADC voltage reference is controlled by 'ADCref'. Use<br />
one of the three values defined immediately above it.<br />
<br />
Written exclusively for the Arduino Uno - makes direct use of the ATMEGA328's<br />
low-level registers, so not guaranteed to work on other microcontrollers.<br />
<br />
-nj 2020-10-12<br />
*/<br />
<br />
// --- User-set variables for sample rate, ADC range and channels sampled<br />
<br />
// Redefine this to change the frequency of ADC readings.<br />
// One channel is stable at up to ~833.33 Hz<br />
const uint16_t freq = 150; // Hz<br />
<br />
// ADMUX values to select ADC voltage reference. Table 23-3.<br />
#define EXT 0b00000000 // External voltage reference<br />
#define VCC 0b01000000 // 5 V<br />
#define I11 0b11000000 // 1.1 V<br />
<br />
// Redefine this to change what voltage the ADC uses as Vmax.<br />
const uint8_t ADCref = I11;<br />
<br />
// ADMUX values to select different channels. Table 23-4.<br />
#define A_0 0b00000000<br />
#define A_1 0b00000001<br />
#define A_2 0b00000010<br />
#define A_3 0b00000011<br />
#define A_4 0b00000100<br />
#define A_5 0b00000101<br />
<br />
// Redefine this to change which channels get digitized and in what order.<br />
volatile uint8_t channelSequence[] = { A_0, A_1, A_2 };<br />
<br />
// --- Variables used for sampling the ADC<br />
const volatile uint8_t maxIndex = sizeof(channelSequence) - 1; // sizeof(array) / sizeof(array[0]) for non-byte types<br />
volatile uint16_t rawADC[sizeof(channelSequence)];<br />
volatile uint8_t index;<br />
volatile unsigned long sampleTime;<br />
volatile bool readComplete = false;<br />
String sample = "";<br />
<br />
const uint16_t CTCmatch = 62500 / freq - 1; // Note deliberate use of integer division<br />
<br />
// --- Variables used to control recording<br />
volatile bool btnReleased = false;<br />
bool recording = false;<br />
<br />
// --- setup() and loop()<br />
<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2020/AVR&diff=1531Events/2020/AVR2021-01-24T17:57:01Z<p>Chet Manly: /* Code Samples */</p>
<hr />
<div>Have you ever wondered what a little Arduino is really capable of? Ever wanted to ''really'' understand a chip? Learn lots of nitty-gritty details about the Microchip AVR architecture, the processor architecture that powers the Arduino and many other products.<br />
<br />
== Code Samples ==<br />
<pre><br />
#define __AVR_ATmega328P__<br />
<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/stdlib.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/io.h"<br />
#include "https://raw.githubusercontent.com/vancegroup-mirrors/avr-libc/master/avr-libc/include/avr/interrupt.h"<br />
<br />
#define DIRECTION_PORT DDRB<br />
<br />
int main()<br />
{<br />
const int DIRECTION_MASK = 0b00001110;<br />
uint8_t direction = 0b00001010;<br />
// https://github.com/gnea/grbl/blob/master/grbl/stepper.c#L324<br />
DIRECTION_PORT = (DIRECTION_PORT & ~DIRECTION_MASK) | (direction & DIRECTION_MASK);<br />
cli();<br />
sei();<br />
return 0;<br />
}<br />
</pre><br />
<br />
<pre><br />
<br />
</pre></div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2019/Chili_Cookoff&diff=1277Events/2019/Chili Cookoff2019-09-14T23:05:53Z<p>Chet Manly: </p>
<hr />
<div>Hacksburg will be competing in the 2019 VT CRC Chili Cookoff. This page documents the details and our plans for the competition.<br />
<br />
== Basic Info ==<br />
<br />
* Date: Wednesday, October 2, 2019<br />
* Location: The Plaza between 1900 Pratt and 1861 Pratt Drive<br />
* [https://www.eventbank.com/resources/protected/organization/967/event/15838/7a180bfb-62e4-458a-a389-fd18738f84b9.pdf Rules]<br />
<br />
== Chili Recipes ==<br />
<br />
The rules specify a red "homestyle chili" including meat and beans. The rules suggest one 16 oz serving for judges and 200 3 oz. servings for the public.<br />
<br />
* [https://www.seriouseats.com/2010/01/how-to-make-the-best-chili-ever-recipe-super-bowl.html Serious Eats-Best Chili Ever]<br />
* [https://www.thewholesomedish.com/the-best-classic-chili/ Wholesome Dish-Best Classic Chili]<br />
* [https://sugarspunrun.com/best-chili-recipe/ Sugar Spun Run - Best Chili Recipe (with bacon)]<br />
* Medieval Chili - not an actual thing, fits with theme below<br />
* Real Deer Meat Chili (Lytton C., <u>New River: bonnets, apple butter and moonshine</u>. 2010, pp. 74-76):<br />
<gallery><br />
RealDeerChili01.jpg|<br />
RealDeerChili02.jpg|<br />
RealDeerChili03.jpg|<br />
</gallery><br />
<br />
=== General Suggestions ===<br />
<br />
* Start with dried kidney beans. Soak overnight with baking soda to degas, then partially cook.<br />
* [https://en.wikipedia.org/wiki/Sweating_(cooking) Sweat] the onions and peppers, set aside.<br />
* Brown meat under broiler on a baking tray.<br />
** Use stew meat instead of ground, for the texture<br />
** Save all fat and drippings<br />
* Combine meat, peppers and onions, beans, and some tomatoes; season, and bake at least until beans are done<br />
** Ideally, use a heavy dutch oven or similar. You want the high thermal inertia.<br />
** This may also be doable in a slow-cooker, but moisture should be watched carefully.<br />
** Secret sauce for good chili: unsweetened chocolate and black coffee.<br />
* Bean-containing chilis are best after they've been allowed to cool and then reheated.<br />
<br />
=== Ingredients quantities ===<br />
<br />
* A cow's-worth of stew meat<br />
* Absurd amounts of canned tomatoes (petite diced or crushed)<br />
* Ridiculous numbers of onions<br />
* Crazy quantities of poblano peppers<br />
* Far too many red kidney beans<br />
* Some coffee<br />
* A bit of bitter chocolate<br />
<br />
For serving:<br />
* Sour cream<br />
* Green onions<br />
* Shredded cheese?<br />
* Cornbread?<br />
<br />
== Booth Decoration ==<br />
It appears that booths were decorated and competitors wore costumes in previous years. We were thinking of a medieval theme for our booth given what we have on hand.<br />
<br />
* Cauldron of chili (using smelting furnace and cast iron pot)<br />
** Need a pot, something like [https://www.amazon.com/dp/B07JNM9CZ3/ this] or a [https://upload.wikimedia.org/wikipedia/commons/8/8d/Dutch_Oven_-McClures_Magazine.jpg dutch oven with legs]<br />
** Do any of the members have something they can contribute<br />
* Costumes<br />
** Dragon Knight (Cameron-confirmerd)<br />
** Wizard (John-confirmed)<br />
** Wands from wand competition<br />
<br />
Other Hacksburg themed decorations could include<br />
* Scrolling LED sign (James)<br />
* Turned wood bowl (Nick)<br />
* Wood carved serving implements</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2019/Chili_Cookoff&diff=1276Events/2019/Chili Cookoff2019-09-14T22:56:51Z<p>Chet Manly: </p>
<hr />
<div>Hacksburg will be competing in the 2019 VT CRC Chili Cookoff. This page documents the details and our plans for the competition.<br />
<br />
== Basic Info ==<br />
<br />
* Date: Wednesday, October 2, 2019<br />
* Location: The Plaza between 1900 Pratt and 1861 Pratt Drive<br />
* [https://www.eventbank.com/resources/protected/organization/967/event/15838/7a180bfb-62e4-458a-a389-fd18738f84b9.pdf Rules]<br />
<br />
== Chili Recipes ==<br />
<br />
The rules specify a red "homestyle chili" including meat and beans. The rules suggest one 16 oz serving for judges and 200 3 oz. servings for the public.<br />
<br />
* [https://www.seriouseats.com/2010/01/how-to-make-the-best-chili-ever-recipe-super-bowl.html Serious Eats-Best Chili Ever]<br />
* [https://www.thewholesomedish.com/the-best-classic-chili/ Wholesome Dish-Best Classic Chili]<br />
* [https://sugarspunrun.com/best-chili-recipe/ Sugar Spun Run - Best Chili Recipe (with bacon)]<br />
* Medieval Chili - not an actual thing, fits with theme below<br />
* Real Deer Meat Chili:<br />
<gallery><br />
RealDeerChili01.jpg|<br />
RealDeerChili02.jpg|<br />
RealDeerChili03.jpg|<br />
</gallery><br />
<br />
=== General Suggestions ===<br />
<br />
* Start with dried kidney beans. Soak overnight with baking soda to degas, then partially cook.<br />
* [https://en.wikipedia.org/wiki/Sweating_(cooking) Sweat] the onions and peppers, set aside.<br />
* Brown meat under broiler on a baking tray.<br />
** Use stew meat instead of ground, for the texture<br />
** Save all fat and drippings<br />
* Combine meat, peppers and onions, beans, and some tomatoes; season, and bake at least until beans are done<br />
** Ideally, use a heavy dutch oven or similar. You want the high thermal inertia.<br />
** This may also be doable in a slow-cooker, but moisture should be watched carefully.<br />
** Secret sauce for good chili: unsweetened chocolate and black coffee.<br />
* Bean-containing chilis are best after they've been allowed to cool and then reheated.<br />
<br />
=== Ingredients quantities ===<br />
<br />
* A cow's-worth of stew meat<br />
* Absurd amounts of canned tomatoes (petite diced or crushed)<br />
* Ridiculous numbers of onions<br />
* Crazy quantities of poblano peppers<br />
* Far too many red kidney beans<br />
* Some coffee<br />
* A bit of bitter chocolate<br />
<br />
For serving:<br />
* Sour cream<br />
* Green onions<br />
* Shredded cheese?<br />
* Cornbread?<br />
<br />
== Booth Decoration ==<br />
It appears that booths were decorated and competitors wore costumes in previous years. We were thinking of a medieval theme for our booth given what we have on hand.<br />
<br />
* Cauldron of chili (using smelting furnace and cast iron pot)<br />
** Need a pot, something like [https://www.amazon.com/dp/B07JNM9CZ3/ this] or a [https://upload.wikimedia.org/wikipedia/commons/8/8d/Dutch_Oven_-McClures_Magazine.jpg dutch oven with legs]<br />
** Do any of the members have something they can contribute<br />
* Costumes<br />
** Dragon Knight (Cameron-confirmerd)<br />
** Wizard (John-confirmed)<br />
** Wands from wand competition<br />
<br />
Other Hacksburg themed decorations could include<br />
* Scrolling LED sign (James)<br />
* Turned wood bowl (Nick)<br />
* Wood carved serving implements</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2019/Chili_Cookoff&diff=1275Events/2019/Chili Cookoff2019-09-14T22:55:02Z<p>Chet Manly: </p>
<hr />
<div>Hacksburg will be competing in the 2019 VT CRC Chili Cookoff. This page documents the details and our plans for the competition.<br />
<br />
== Basic Info ==<br />
<br />
* Date: Wednesday, October 2, 2019<br />
* Location: The Plaza between 1900 Pratt and 1861 Pratt Drive<br />
* [https://www.eventbank.com/resources/protected/organization/967/event/15838/7a180bfb-62e4-458a-a389-fd18738f84b9.pdf Rules]<br />
<br />
== Chili Recipes ==<br />
<br />
The rules specify a red "homestyle chili" including meat and beans. The rules suggest one 16 oz serving for judges and 200 3 oz. servings for the public.<br />
<br />
* [https://www.seriouseats.com/2010/01/how-to-make-the-best-chili-ever-recipe-super-bowl.html Serious Eats-Best Chili Ever]<br />
* [https://www.thewholesomedish.com/the-best-classic-chili/ Wholesome Dish-Best Classic Chili]<br />
* [https://sugarspunrun.com/best-chili-recipe/ Sugar Spun Run - Best Chili Recipe (with bacon)]<br />
* Medieval Chili - not an actual thing, fits with theme below<br />
* Real Deer Meat Chili:<br />
<gallery><br />
RealDeerChili01.jpg|<br />
RealDeerChili02.jpg|<br />
RealDeerChili03.jpg|<br />
</gallery><br />
<br />
=== General Suggestions ===<br />
<br />
* Start with dried kidney beans. Soak overnight with baking soda to degas, then partially cook.<br />
* [https://en.wikipedia.org/wiki/Sweating_(cooking) Sweat] the onions and peppers, set aside.<br />
* Brown meat under broiler on a baking tray.<br />
** Use stew meat instead of ground, for the texture<br />
** Save all fat and drippings<br />
* Combine meat, peppers and onions, beans, and some tomatoes; season, and bake at least until beans are done<br />
** Ideally, use a heavy dutch oven or similar. You want the high thermal inertia.<br />
** This may also be doable in a slow-cooker, but moisture should be watched carefully.<br />
** Secret sauce for good chili: unsweetened chocolate and black coffee.<br />
* Bean-containing chilis are best after they've been allowed to cool and then reheated.<br />
<br />
=== Ingredients quantities ===<br />
<br />
* A cow's-worth of stew meat<br />
* Absurd amounts of canned tomatoes (petite diced or crushed)<br />
* Ridiculous numbers of onions<br />
* Crazy quantities of poblano peppers<br />
* Far too many red kidney beans<br />
* Some coffee<br />
* A bit of bitter chocolate<br />
* Cornbread<br />
<br />
For serving:<br />
* Sour cream<br />
* Green onions<br />
* Shredded cheese?<br />
<br />
== Booth Decoration ==<br />
It appears that booths were decorated and competitors wore costumes in previous years. We were thinking of a medieval theme for our booth given what we have on hand.<br />
<br />
* Cauldron of chili (using smelting furnace and cast iron pot)<br />
** Need a pot, something like [https://www.amazon.com/dp/B07JNM9CZ3/ this] or a [https://upload.wikimedia.org/wikipedia/commons/8/8d/Dutch_Oven_-McClures_Magazine.jpg dutch oven with legs]<br />
** Do any of the members have something they can contribute<br />
* Costumes<br />
** Dragon Knight (Cameron-confirmerd)<br />
** Wizard (John-confirmed)<br />
** Wands from wand competition<br />
<br />
Other Hacksburg themed decorations could include<br />
* Scrolling LED sign (James)<br />
* Turned wood bowl (Nick)<br />
* Wood carved serving implements</div>Chet Manlyhttps://wiki.hacksburg.org/index.php?title=Events/2019/Chili_Cookoff&diff=1274Events/2019/Chili Cookoff2019-09-14T20:46:22Z<p>Chet Manly: </p>
<hr />
<div>Hacksburg will be competing in the 2019 VT CRC Chili Cookoff. This page documents the details and our plans for the competition.<br />
<br />
== Basic Info ==<br />
<br />
* Date: Wednesday, October 2, 2019<br />
* Location: The Plaza between 1900 Pratt and 1861 Pratt Drive<br />
* [https://www.eventbank.com/resources/protected/organization/967/event/15838/7a180bfb-62e4-458a-a389-fd18738f84b9.pdf Rules]<br />
<br />
== Chili Recipes ==<br />
<br />
The rules specify a red "homestyle chili" including meat and beans. The rules suggest one 16 oz serving for judges and 200 3 oz. servings for the public.<br />
<br />
* [https://www.seriouseats.com/2010/01/how-to-make-the-best-chili-ever-recipe-super-bowl.html Serious Eats-Best Chili Ever]<br />
* [https://www.thewholesomedish.com/the-best-classic-chili/ Wholesome Dish-Best Classic Chili]<br />
* [https://sugarspunrun.com/best-chili-recipe/ Sugar Spun Run - Best Chili Recipe (with bacon)]<br />
* Medieval Chili - not an actual thing, fits with theme below<br />
* Real Deer Meat Chili:<br />
<gallery><br />
RealDeerChili01.jpg|<br />
RealDeerChili02.jpg|<br />
RealDeerChili03.jpg|<br />
</gallery><br />
<br />
=== General Suggestions ===<br />
<br />
* Start with dried beans - soak with baking soda to degas<br />
* Sweat the onions and peppers (french style)<br />
* Add bitter chocolate and coffee to meat<br />
* Use stew meat instead of ground<br />
** Brown under broiler<br />
** Save the fat<br />
<br />
=== Ingredients quantities ===<br />
<br />
* A cow's-worth of stew meat<br />
* Absurd amounts of canned tomatoes (petite diced or crushed)<br />
* Ridiculous numbers of onions<br />
* Crazy quantities of poblano peppers<br />
* Far too many red kidney beans<br />
* Some coffee<br />
* A bit of bitter chocolate<br />
<br />
For serving:<br />
* Sour cream<br />
* Green onions<br />
* Shredded cheese?<br />
<br />
== Booth Decoration ==<br />
It appears that booths were decorated and competitors wore costumes in previous years. We were thinking of a medieval theme for our booth given what we have on hand.<br />
<br />
* Cauldron of chili (using smelting furnace and cast iron pot)<br />
** Need a pot, something like [https://www.amazon.com/dp/B07JNM9CZ3/ this] or a [https://upload.wikimedia.org/wikipedia/commons/8/8d/Dutch_Oven_-McClures_Magazine.jpg dutch oven with legs]<br />
** Do any of the members have something they can contribute<br />
* Costumes<br />
** Dragon Knight (Cameron-confirmerd)<br />
** Wizard (John-confirmed)<br />
** Wands from wand competition<br />
<br />
Other Hacksburg themed decorations could include<br />
* Scrolling LED sign (James)<br />
* Turned wood bowl (Nick)<br />
* Wood carved serving implements</div>Chet Manly