Restructered pre-import

This commit is contained in:
Liz Cray
2024-07-07 13:53:31 -04:00
parent 47996087db
commit cc9e65b5c6
302 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
This is the documentation vertex for a 3D printer build run started in
July 2013.
Vital links and major log entries can be made here (by anyone, as
always). Detailed logs should be made either in a user's own log (which
should be linked from here). It'd be a good idea to consolidate what was
learned and place it on this page in the end.
## Goal
Get a few people together that want their own 3DP and build 'em.
The primary point is to get working, somewhat reliable machines running
in order to focus on using the printers. This may be a bit different
than many hackerspace builds that might focus on improving the 3DP
designs.
## Plan
1. What model(s) to build?
2. Find mentors. People that can help when we get stuck or review what
we've done and suggest corrections.
3. Create BOM, aka parts list
1. Catalog what parts we already have at HacDC.
2. Find supplier(s) or kits for all other parts.
4. Set some form of gathering schedule or build timeline. (a little
structure is good)
### Which model?
#### Deltas
- Rostock / Max
Kossel seems to be an improvement
- Kossel (original)
obsolete
- Kossel Mini
current Kossel
Looking at linear bearings / towers.. may need to pull something from
the OpenBeam version
Note: 'Mini' is a misnomer, scale it as you like.
- OpenBeam Kossel Pro
in Kickstart phase
David's top pick but Terrance (openbeam guy) understandably hasn't
released a bom yet
#### Cartesian
- i3
current Mendel design
- Mendel Max
larger, beam-styled Mendel
#### Biomechanical
- Simpson
Uses only rotary bearings, like biological entities such as you
Some design concerns; wear at base rotation points, accuracy on reel
drives
### Mentors / Guides
Unbeknowst to them, considering asking Julia and/or mirage.
## Links
- <https://groups.google.com/forum/#!forum/deltabot>
- <http://reprap.org/wiki/Kossel>
## People
David McInnis aka [User:gatohaus](User:gatohaus "wikilink")
-- general geek, minor user-level 3DP skill
-- want my very own 3DP at home
-- goal: reliable printing
## Log
2013.07.07 - Started page for 3DP build run.
[Category:3D Printing](Category:3D_Printing "wikilink")
[Category:Previous Projects](Category:Previous_Projects "wikilink")

View File

@@ -0,0 +1,37 @@
This is the documentation vertex for 3D Repair started Feb 26th 2022
Vital links and major log entries can be made here (by anyone, as
always).
## Goal
Repair Ultimaker, TAZ Mini, Monoprice Ultimate 2 and
The primary point is to get working, somewhat reliable machines running
in order to focus on using the printers. This may be a bit different
than many hackerspace builds that might focus on improving the 3DP
designs.
## People
Tayeb Zaidi aka [User:tark](User:tark "wikilink")
Matt Stafford
Kevin Cole
## Log
2022.02.26: Matt, Tayeb, and Kevin at the space initiating
upgrades/repairs
To Purchase for Ultimaker -- Extruder and Bowden tube to replace current
assembly To Purchase for Monoprice -- N/A
General 3D Printer Supplies: Filament, and airtight filament containers
General Supplies: Binder clips, razor blades, drivers for screwdrivers
(3-4 regular, 3-4 miniature), flat side wire cutters, lubricant
[Category:3D Printing](Category:3D_Printing "wikilink")
[Category:Previous Projects](Category:Previous_Projects "wikilink")

View File

@@ -0,0 +1,21 @@
# 3D Printer Thurdays
Every Thursday from 6pm - 10pm a group of 3D printer enthusiasts meet to
work on the 3D printers and print stuff. Drop by and check it out.
## Our current efforts include:
- Upgrading the Prusa Mendel to a Mendel 3
- Extruder Improvements for the Rostock Max V2
- Triage/Improvements for the 2 Mendel variants Julia has recently
brought to live here
- Build the recently donated LulzBot ... when it gets here
## Drop by And...
- Pick our brains about 3D printing tips and construction know how
- Help us build printers
- Donate your printer (3D or Otherwise=useful parts)
- 3D print something
[Category:Events](Category:Events "wikilink")

View File

@@ -0,0 +1,27 @@
- [PLA Filament, 1.75mm](http://seemecnc.com/collections/filament/pla)
- [PLA Filament, 1.75mm. Low cost, available at Microcenter, reasonably
well established track record at
HacDC.](http://www.microcenter.com/product/434401/175mm_White_PLA_3D_Printer_Filament_-_1kg_Spool_(22_lbs))
- [PLA Filament, 3mm, used with old Prusa Mendel 3D
Printer](https://ultimachine.com/content/pla-3mm-white-1kg-spool)
- [PLA Polishing
Solvent](http://www.amazon.com/s/?field-keywords=tetrahydrofuran)
<!-- -->
- [Prusa Mendel HotEnd - Choose 0.35mm
nozzle.](http://www.makergear.com/products/operators-pack)
- [Generic stepper motor
drivers.](http://www.ebay.com/itm/Black-Edition-Pololu-Stepper-Driver-for-RepRap-3D-printers-RAMPS-Sanguinololu-/321166002455?pt=LH_DefaultDomain_0&hash=item4ac6fc4917)
<!-- -->
- [PEI print
surface](http://www.amazonsupply.com/polyetherimide-off-white-standard-tolerance-pei0113/dp/B00CPRDDLY/ref=sr_1_2?sr=1-2&qid=1392920847&filterBy.feature_twelve_browse-bin=6523581011)
described at [SeeMeCNC
forums](http://forum.seemecnc.com/viewtopic.php?f=36&t=4336).
[Category:PA_SUPPLIES](Category:PA_SUPPLIES "wikilink")
[Category:PrusaMendel](Category:PrusaMendel "wikilink")
[Category:RostockMax](Category:RostockMax "wikilink")
[Category:3D_Printing](Category:3D_Printing "wikilink")

View File

@@ -0,0 +1,152 @@
ins3DMinipronsolequick.txt - May 23, 2019 version The Mini is for
printing with rubbery filament. This covers common situations; if
something else is encountered consult the full instructions
(ins3DMinipronsole.txt) Q.1 In MATE Terminal: cura (program to convert
surface representation(.stl) to 3D printer instructions(.gcode)) Q.2
When Cura control display appears click on Machine (at top) Q.3 Click on
LulzBot Mini Q.4 At Fill - Fill density (%): enter desired value (i.e.,
20 for prototypes) Q.5 At Speed and temperature - Printing temperature
(C): 220 Q.6 At Speed and temperature - Bed temperature (C): 70 Q.7 At
Support - Support type: select None, Touching buildplate, or Everywhere
(depends on object to be printed;if in doubt select Everywhere) Q.8 At
Support - Platform adhesion type: select None, Brim, or Raft (depends on
object; if in doubt select Brim) Q.9 Click on LOAD MODEL (top center of
Cura window) Q.10 Click on filetoprint.stl (scroll down if needed; i.e.,
testcube.stl) Q.11 Click on Open (lower right) Q.12 Put glue (purple
glue stick (PVA)) on Mini bed Q.13 Check that there is sufficient
correct (rubbery) filament on reel (the following steps may take a long
time) Q.14 When SAVE GCODE lights up (just to right of LOAD MODEL) click
on it; if a removable drive message does not appear skip Q.15-Q.17 Q.15
Click on Custom file destination Q.16 Click on OK Q.17 Click on hacdc
Q.18 When Save toolpath window appears click on Save (bottom right) Q.19
When Cura states (at bottom) Saved as /home/hacd... (with a large X to
the right) click on tiny x at far right top of Cura (to close Cura) Q.20
scp filetoprint.gcode hacdc@pronterhost.hacdc.org:/home/hacdc (i.e.,
testcube.gcode; send to 3D printer computer) Q.21 At Password: enter
standard password Q.22 If Mini power is off turn it on (rocker switch on
left; red light in switch should come on) Q.23 At 3D printer computer
(keyboard usually on Taz):Ctrl Alt F3 (always hold Ctrl & Alt down when
pressing the other key (F3 (at top) not F & 3)) Q.24 If the monitor
(above Taz on left) shows a final line starting with a printer in use
see full instructions Q.25 If the monitor shows a final line that starts
with offline, MINI, ROSTOCK, or TAZ skip Q.26-Q.28; \[nnnnn@pronterhost
~\]\$ where nnnn is anything skip Q.26-Q.27; anything else other than
pronterhost login: see full instructions Q.26 pronterhost login: hacdc
Q.27 At Password: enter standard password Q.28 pronsole Q.29 connect
/dev/MINI Q.30 load /home/hacdc/filetoprint.gcode (i.e.,
/home/hacdc/testcube.gcode) Q.31 Wait until the monitor states the file
is loaded (may take a while) Q.32 If the final line does not show MINI
in green see full instructions Q.33 print Q.34 Wait for Mini to start
and check that it is printing OK Q.35 Wait - printing large objects can
take an extremely long time ins3DMinipronsolequick.txt - May 23, 2019
version ins3DMinipronsole.txt - May 23, 2019 version The Mini is for
printing with rubbery filament. This is the full detailed instructions
for using the Mini with pronsole (the old way). Many of the steps (i.e.,
M.1-M.4) can usually be skipped; see ins3DMinipronsolequick.txt for
minimal instructions. M.1 Make sure long power strip above microwave
oven is on (orange light on in switch at right end) M.2 Make sure Mini
is plugged in to long power strip M.3 Make sure 3D printer computer
(Dell computer left of Rostock) is plugged in to horizontal power strip
just to left of Taz M.4 Make sure the 3D printer computer monitor (above
& to left of Taz) is plugged into power strip left of Taz M.5 If the
power strip left of Taz is off (no orange light) turn it on ((switch at
wall end; orange light in switch should come on) M.6 If the 3D printer
computer is off (no green light in power button in center of front above
silver Dell logo) press the power button (light should come on) M.7
Check that there is sufficient correct (rubbery) filament on the reel
M.8 If the filament diameter is not written on the reel measure the
diameter (calipers are in the Measurement bin) in several places and
write the average diameter on the reel M.9 At the tabletop computer in
MATE Terminal: cura (program to convert surface representation(.stl) to
3D printer instructions(.gcode)) M.10 If Basic appears at the top left
when the Cura control display appears click on it & skip M.11-M.13 M.11
Click on Expert M.12 Click on Switch to full settings... M.13 At Profile
copy click No M.14 If Quality is not immediately below Basic click on
Basic M.15 Click on Machine (at top) M.16 Click on LulzBot Mini M.17 At
Fill - Fill density (%): enter desired value (i.e., 20 for prototypes)
M.18 At Speed and temperature - Printing temperature (C): 220 M.19 At
Speed and temperature - Bed temperature (C): 70 M.20 At Support -
Support type: select None, Touching buildplate, or Everywhere (depends
on object to be printed;if in doubt select Everywhere) M.21 At Support -
Platform adhesion type: select None, Brim, or Raft (depends on object;
if in doubt select Brim) M.22 At Filament - Diameter (mm): enter
diameter written on reel M.23 Click on LOAD MODEL (top left of image)
M.24 If you don't see the file to print (i.e., testcube.stl) click on
hacdc & scroll down if needed M.25 Click on filetoprint.stl (i.e.,
testcube.stl) M.26 Click on Open (lower right) M.27 Put glue (purple
glue stick (PVA)) on Mini bed (some of the following steps may take a
long time); if you do not want to change a dimension of the object or
make its mirror image skip M.28-M.35 M.28 When the object appears on
right click on it; if you do not want to make a mirror image skip
M.29-M.30 M.29 Click on MIRROR (right icon of 3 at bottom left of image)
M.30 Click on the new icon above MIRROR with the correct reflection
plane (MIRROR Z, MIRROR Y, MIRROR X); if you do not want to change a
dimension skip M.31-M.35 M.31 Click on SCALE (center icon of 3 at bottom
left of image) M.32 At X: enter number to scale x direction by (i.e., .5
to shrink to half width); to scale all directions (x, y, & z) by the
same amount skip M.33-M.35 (Cura will do it automaticly) M.33 Click on
lock to right of Uniform Scale M.34 At Y: enter number to scale y
(depth) by M.35 At Z: enter number to scale z (height) by M.36 When SAVE
GCODE lights up (just to right of LOAD MODEL) click on it; if a
removable drive message does not appear skip M.37-M.39 M.37 Click on
Custom file destination M.38 Click on OK M.39 Click on hacdc M.40 When
Save toolpath window appears enter file name (i.e., testcubeM.gcode)
after Name: (at top) M.41 Click on Save (bottom right) M.42 When Cura
states (at bottom) Saved as /home/hacd... (with a large X to the right)
click on tiny x at far right top of Cura (to close Cura) M.43 scp
filetoprint.gcode hacdc@pronterhost.hacdc.org:/home/hacdc (i.e.,
testcubeM.gcode; send to 3D printer computer; note that it may be
necessary to wait later (at M.68) for this to finish) M.44 At Password:
enter standard password M.45 If Mini power is off (no red light in
rocker switch on left) turn it on (light should come on) M.46 At 3D
printer computer (keyboard usually on Taz):Ctrl Alt F3 (always hold Ctrl
& Alt down when pressing the other key (F3 (at top) not F & 3)) M.47 If
the monitor (above Taz on left) does not show a final line starting with
a printer in use skip M.48-M.52 M.48 Ctrl Alt F2 M.49 If the final line
does not start with a printer in use skip M.50-M.52 M.50 Ctrl Alt F6
M.51 If the final line does not start with a printer in use skip M.52
M.52 Ctrl Alt F5 M.53 If the monitor is blank or only shows a flashing
dash wait a minute M.54 Press Backspace & hold it down if anything is
disappearing from the window M.55 If the monitor shows a final line that
is just a flashing dash press Enter M.56 If the monitor shows a final
line that starts offline, MINI, ROSTOCK, or TAZ skip M.57-M.66;
\[nnnnn@pronterhost ~\]\$ where nnnn is anything skip M.57-M.65;
pronterhost login: skip M.57-M.63 M.57 If either Rostock or Taz printer
is in use \*\*\*STOP\*\*\* & either wait for the printers to finish or
get expert help M.58 Ctrl Alt F1 M.59 Click on 3 dots & \> symbol in
lower left corner of monitor M.60 Move cursor over Leave at lower right
corner of new window M.61 Click on Reboot M.62 Click on OK M.63 When
monitor comes back on (it takes a while):Ctrl Alt F3 M.64 pronterhost
login: hacdc M.65 At Password: enter standard password M.66 pronsole
M.67 connect /dev/MINI M.68 load /home/hacdc/filetoprint.gcode (i.e.,
/home/hacdc/testcubeM.gcode; it may be necessary to wait for the file to
finish transferring from the other computer (step M.43)) M.69 Wait until
the monitor states the file is loaded (may take a while) M.70 If the
final line begins with MINI in green skip M.71-M.81 M.71 disconnect M.72
connect /dev/MINI M.73 Wait a minute M.74 Enter M.75 If the final line
has MINI in green skip M.76-M.81 M.76 Turn off Mini power (rocker switch
on left) M.77 Wait a minute M.78 Turn on Mini power M.79 Wait a couple
minutes M.80 Repeat steps M.72-M.75 M.81 STOP & get expert help M.82
print M.83 Wait for Mini to start and check that it is printing OK M.84
Wait - printing large objects can take an extremely long time
ins3DMinipronsole.txt - May 23, 2019 version ins3DMinimaint.txt - Jan.
2, 2020 Disassembling & unclogging the printhead - Note: All bolts are
hex bolts unless otherwise stated\*\*\*Incomplete preliminary
version\*\*\* U.1 Unplug the Mini U.2 Discnnect the USB cable U.3 Lift
the Mini down onto a table U.4 Remove the 2 bolts from the top of the
printhead mount (above horizontal rod) U.5 Remove the cover U.6
Disconnect the newly exposed connector U.7 While holding the printhead,
remove the 3 big bolts & washers from the back of the mount (printhead
will come off) U.8 Remove 2 or 3 bolts holding motor (motor will come
off) U.9 Remove big nut holding big black gear U.10 Remove washer U.11
Remove bearing U.12 Remove gear (with washers, bearing, & black washer
on it) if possible U.13 Remove bolt holding tiny fan (fan will come off)
U.14 Remove 2 bolts at bottom holding fan together (fan will come off)
U.15 Remove 2 bolts holding base of fan (base will come off) U.16 Remove
2 bolts with washers that hold printhead together (printhead & nuts will
come apart) U.17 Remove any stuck filament from the gear area by pulling
on the filament & turning the gear (if stuck in place) back & forth
Temporary - reverse steps to reassemble; the fan end of the bottom part
goes to the right, the gap in the metal piece goes in the back, the
wires to the hot end go in back to the right, & the "tail" (motor
holder) on the top piece goes to the right

View File

@@ -0,0 +1,426 @@
ins3DRostockpronsolequick.txt - May 24, 2019 version This covers common
situations. If something else is encountered consult the full
instructions (ins3DRostockpronsole.txt) \*\*\*NOTE\*\*\* The Rostock is
currently miscalibrated & prints too small in the x & y directions.
These instructions change the scale to compensate. For better results,
multiply all x & y values by 1.065 when designing the object & skip
lines Q.15-Q.19. Q.1 In MATE Terminal: cura (program to convert surface
representation(.stl) to 3D printer instructions(.gcode)) Q.2 When Cura
control display appears click on Machine (at top) Q.3 Click on DeltaBot
Style (yes, Deltabot not Rostock) Q.4 At Fill - Fill density (%): enter
desired value (i.e., 20 for prototypes) Q.5 At Speed and temperature -
Printing temperature (C): 215 (for PLA) Q.6 At Speed and temperature -
Bed temperature (C): 0 (bed heater not working) Q.7 At Support - Support
type: select None, Touching buildplate, or Everywhere (depends on object
to be printed; if in doubt select Everywhere) Q.8 At Support - Platform
adhesion type: select None, Brim, or Raft (depends on object; if in
doubt select Brim) Q.9 Click on LOAD MODEL (top left of image) Q.10
Click on filetoprint.stl (scroll down if needed; i.e., testcube.stl)
Q.11 Click on Open (lower right) Q.12 Put blue masking tape on Rostock
bed Q.13 Put glue (purple glue stick (PVA)) on tape Q.14 Check that
there is sufficient correct filament on reel (the following steps may
take a long time) Q.15 When the object appears on right click on it Q.16
Click on SCALE (center icon of 3 at bottom left of image) Q.17 Click on
lock to right of Uniform Scale Q.18 X: 1.065 Q.19 Y: 1.065 Q.20 When
SAVE GCODE lights up (just to right of LOAD MODEL) click on it; if a
romovable drive message does not appear skip Q.21-Q.23 Q.21 Click on
Custom file destination Q.22 Click on OK Q.23 Click on hacdc Q.24 When
Save toolpath window appears click on Save (bottom right) Q.25 When Cura
states (at bottom) Saved as /home/hacd... (with a large X to the right)
click on tiny x at far right top of Cura (to close Cura) Q.26 scp
filetoprint.gcode hacdc@pronterhost.hacdc.org:/home/hacdc (i.e.,
testcube.gcode; send to 3D printer) Q.27 At Password: enter standard
password Q.28 If Rostock power is off turn it on (rocker switch above &
to left of F4 (may be hidden under removable bed); display should come
on) Q.29 At 3D printer computer (keyboard usually on Taz): Ctrl Alt F4
(always hold Ctrl & Alt down when pressing the other key (F4 (at top)
not F & 4)) Q.30 If the monitor (above Taz to left) shows a final line
starting with a printer in use see full instructions Q.31 If the monitor
shows a final line that starts with offline, MINI, ROSTOCK, or TAZ skip
Q.32-Q.34; \[nnnnn@pronterhost ~\]\$ where nnnnn is anything skip
Q.32-Q.33; anything else other than pronterhost login: see full
instructions Q.32 pronterhost login: hacdc Q.33 At Password: enter
standard password Q.34 pronsole Q.35 connect /dev/ROSTOCK Q.36 load
/home/hacdc/filetoprint.gcode (i.e., /home/hacdc/testcube.gcode) Q.37
Wait until the monitor states the file is loaded (may take a while) Q.38
If the final line does not show ROSTOCK in green see full instructions
Q.39 print Q.40 Wait for Rostock to start and check to see that it is
printing OK Q.41 Wait - printing large objects can take an extremely
long time ins3DRostockpronsolequick.txt - May 24, 2019 version
ins3DRostockpronsole.txt - May 24, 2019 version This is the full
detailed instructions for using the Rostock with pronsole (the old way).
Many of the steps (i.e., R.1-R.7) can usually be skipped; see
ins3DRostockpronsolequick.txt for minimal instructions. \*\*\*NOTE\*\*\*
The Rostock is currently miscalibrated & prints too small in the x & y
directions. These instructions change the scale to compensate. For
better results, multiply all x & y values by 1.065 when designing the
object & use 1 instead of 1.065 at R.37-R.38 or just skip R.32-R.39. R.1
Make sure long power strip above microwave oven is on (orange light on
in switch at right end) R.2 Make sure power strip above sink is plugged
into long power strip R.3 Make sure Rostock fan power supply is plugged
into power strip over sink R.4 Make sure Rostock is plugged into
horizontal power strip just to left of Taz R.5 Make sure 3D printer
computer (Dell computer left of Rostock) is plugged into power strip
left of Taz R.6 Make sure 3D printer computer monitor (above & to left
of Taz) is plugged in to power strip left of Taz R.7 Maker sure power
strip over sink is on R.8 If the horizontal power strip left of the Taz
is off (no orange light) turn it on (switch at wall end; orange light in
switch should come on) R.9 If the 3D printer computer is off (no green
light in power button in center of front above silver Dell logo) press
the power button (light should come on) R.10 Check that there is
sufficient correct filament on the reel R.11 If the filament diameter is
not written on the reel measure the filament diameter (calipers are in
the Measurement bin) in several places and write the average diameter on
the reel R.12 At the tabletop computer in MATE Terminal: cura (program
to convert surface representation(.stl) to 3D printer
instructions(.gcode)) R.13 If Basic is at the top left when the Cura
control display appears skip R.14-R.16 R.14 Click on Expert R.15 Click
on Switch to full settings... R.16 At Profile copy click No R.17 If
Quality is not immediately below Basic click on Basic R.18 Click on
Machine (at top) R.19 Click on Deltabot Style (yes, Deltabot not
Rostock) R.20 At Fill - Fill density (%): enter desired value (i.e., 20
for prototypes) R.21 At Speed and temperature - Printing temperature
(C): 215 (for PLA) R.22 At Speed and temperature - Bed temperature (C):
0 (bed heater not working) R.23 At Support - Support type: select None,
Touching buildplate, or Everywhere (depends on object to be printed; if
in doubt select Everywhere) R.24 At Support - Platform adhesion type:
select None, Brim, or Raft (depends on object; if in doubt select Brim)
R.25 At Filament - Diameter (mm): enter diameter written on reel R.26
Click on LOAD MODEL (top left of image) R.27 If you don't see the file
to print (i.e., testcube.stl) click on hacdc & scroll down if needed
R.28 Click on filetoprint.stl (i.e., testcube.stl) R.29 Click on Open
(lower right) R.30 Put blue masking tape on Rostock bed R.31 Put glue
(purple glue stick (PVA)) on tape (the following steps may take a long
time) R.32 When the object appears on right click on it; if you do not
want to make a mirror image skip R.33-R.34 R.33 Click on MIRROR (right
icon of 3 at bottom left of image) R.34 Click on the new icon above
MIRROR with the correct reflection plane (MIRROR Z, MIRROR Y, or MIRROR
Z) R.35 Click on SCALE (center icon of 3 at bottom left of image) R.36
Click on lock to right of Uniform Scale R.37 At X: enter 1.065 or, to
change the x dimension of the object, 1.065 multiplied by the number to
scale x direction by (i.e, .532 (1.065 x .5) to shrink to half width)
R.38 At Y: enter 1.065 or, to change the y dimension (depth) of the
object, 1.065 multiplied by the number to scale y direction by R.39 To
change the z dimension enter the number to scale the z direction by
(i.e., 2 to double the height) at Z: R.40 When SAVE GCODE lights up
(just to right of LOAD MODEL) click on it; if a removable drive message
does not appear skip R.41-R.43 R.41 Click on Custom file destination
R.42 Click on OK R.43 Click on hacdc R.44 When Save toolpath window
appears enter file name (i.e., testcubeR.gcode) after Name: (at top)
R.45 Click on Save (bottom right) R.46 When Cura states (at bottom)
Saved as /home/hacd... (with a large X to the right) click on tiny x at
far right top of Cura (to close Cura) R.47 scp filetoprint.gcode
hacdc@pronterhost.hacdc.org:/home/hacdc (i.e., testcubeR.gcode; send to
3D printer computer; note that it may be necessary to wait later (at
R.73) for this to finish) R.48 At Password: enter standard password R.49
If Rostock power is off turn it on (rocker switch above & to left of F4
(may be hidden under removable bed); display should come on) R.50 At 3D
printer computer (keyboard usually on Taz):Ctrl Alt F4 (always hold Ctrl
& Alt down when pressing the other key (F4 (at top) not F & 4)) R.51 If
the 3D printer computer monitor (above Taz on left) does not show a
final line starting with a printer in use skip R.52-R.56 R.52 Ctrl Alt
F2 R.53 If the final line does not start with a printer in use skip
R.54-R.56 R.54 Ctrl Alt F6 R.55 If the final line does not start with a
printer in use skip R.56 R.56 Ctrl Alt F5 R.57 If the monitor is blank
or only shows a flashing dash wait a minute R.58 Press backspace & hold
it down if anything is disappearing from the monitor R.59 If the monitor
shows a final line that is just a flashing dash press Enter R.60 If the
monitor shows a final line that starts offline, MINI, ROSTOCK, or TAZ
skip R.61-R.71; \[nnnnn@pronterhost ~\]\$ where nnnnn is anything skip
R.61-R.70; pronterhost login: skip R.61-R.68 R.61 If either Mini or Taz
printer is in use \*\*\*STOP\*\*\* & either wait for the printers to
finish or get expert help R.62 Ctrl Alt F1 R.63 Click on 3 dots & \>
symbol at lower left corner of monitor R.64 Move cursor to Leave at
lower right corner of new window R.65 Click on Reboot in center of
window R.66 Click on OK R.67 Wait for monitor to come back on (it takes
a while) R.68 Ctrl Alt F4 R.69 pronterhost login: hacdc R.70 At
Password: enter standard password R.71 pronsole R.72 connect
/dev/ROSTOCK R.73 load /home/hacdc/filetoprint.gcode (i.e.,
/home/hacdc/testcubeR.gcode; it may be necessary to wait for the file to
finish transferring from the other computer (step R.47)) R.74 If any of
the horizontal rods joining the printhead platform to the 3 support arms
or joining the arms to the movable mounts on the side bars of the frame
have shifted off to the side push them back in so they are centered R.75
Wait until the monitor states the file is loaded (may take a while) R.76
If the final line begins with ROSTOCK in green skip R.77-R.87 R.77
disconnect R.78 connect /dev/ROSTOCK R.79 Wait a minute R.80 Enter R.81
If the final line has ROSTOCK in green skip R.82-R.87 R.82 Turn off
Rostock power (rocker switch on top of & to left of display) R.83 Wait a
minute R.84 Turn on Rostock power R.85 Wait until the regular Rostock
display appears R.86 Repeat steps R.78-R.81 R.87 STOP & get expert help
R.88 print R.89 Wait for Rostock to start and check to see that it is
printing OK R.90 Wait - printing large objects can take an extremely
long time ins3DRostockpronsole.txt - May 24, 2019 version
ins3DRostockstart.txt - June 13, 2019 version If you can't fix a problem
& expert help is not available: !.1 If the Rostock power has already
been turned off STOP here !.2 pause !.3 Press knob on Rostock (to right
of display on base) !.4 Select Adjust Temps by turning knob !.5 Press
knob !.6 Select NOZ Temp: by turning knob !.7 Press knob !.8 Set
temperature to 0 by turning knob !.9 Press knob If printing does not
begin: P.1 If the nozzle temperature stays (it may overshoot for a short
time) above the correct value by more than a few degrees skip P.2-P.19;
if the temperature is below the correct value but rising STOP & wait
(the Rostock is still preparing to print) P.2 Select NOZ Temp: by
following steps !.3-!.7 P.3 Set temperature to 0 by turning knob P.4
Press knob P.5 Press knob again P.6 Set temperature to correct value by
turning knob P.7 Press knob; if the printhead temperature rises skip
P.8-P.17 P.8 Turn the Rostock power off (rocker switch to left & on top
of display) P.9 Wait a minute P.10 Turn Rostock power on P.11 Wait until
the regular display appears on the Rostock P.12 If not using pronsole
start over; if using pronsole: connect /dev/ROSTOCK P.13 If the final
line of the screen starts with ROSTOCK in green skip P.14-P.17 P.14 Wait
briefly & press Enter P.15 If the final line of the screen shows ROSTOCK
in green skip P.16-P.17 P.16 Repeat P.14-P.15 P.17 If ROSTOCK is still
red STOP & get expert help P.18 print; if the printhead heats up STOP
here P.19 STOP & get expert help P.20 Turn the Rostock power off P.21
Get expert help If the display shows NOZ: def or BED: def or you get the
error message: Error:Printer set into dry run mode until restart! D.1
Turn Rostock power off (rocker switch to left & on top of display; may
be covered by square bed) D.2 Make sure bed temperature was set to 0
when stl file was converted to gcode (i.e., when using Cura) D.3 Wait a
minute D.4 Turn Rostock power back on D.5 Wait until regular Rostock
display appears D.6 Start over If you get the error message: Error:One
heater seems decoupled from thermistor H.1 Press knob on Rostock H.2
Select Adjust Temps by turning knob H.3 Press knob H.4 Select BED Temp:
by turning knob H.5 Press knob H.6 Set temperature to 0 C by turning
knob (clockwise for lower) H.7 Press knob H.8 Select NOZ Temp: by
turning knob H.9 Press knob H.10 Set nozzle temperature to correct value
by turning knob H.11 Press knob ins3DRostockend.txt - June 13, 2019
version To remove printed objects from the bed: Z.1 Spread water around
the base of the object so a shallow layer touches it all around Z.2 Wait
until the object has cooled fully and water has soaked in; add more
water as needed to maintain a shallow layer all around Z.3 If the object
is sturdy you can try to remove it by slowly but firmly trying to tilt
it in different directions; if it comes off skip Z.4-Z.8 Z.4 Remove tape
around base of object Z.5 Slice under the object from various directions
with a razor blade (careful!) Z.6 Pry up the object from different
directions with a putty knife or similar item; if the object comes off
skip Z.7-Z.8 Z.7 Wait some more; add more water as needed to maintain a
shallow layer all around Z.8 Repeat steps Z.5-Z.8 Z.9 Dry off the bed
ins3DRostockprob.txt - June 13, 2019 version To pause printing if using
pronsole: P.1 pause (it may take a while to stop) P.2 If you might want
to resume the print avoid moving the printhead unless necessary and only
use the move commands to move it (i.e., move z 10) being careful not to
hit the partial print with the printhead unit & noting how much it is
moved in each direction P.3 To resume printing: If the printhead has not
been moved skip P.4 P.4 Use move commands to move the printhead back to
where it paused (i.e., move z -10) being careful not to hit the partial
print with the printhead unit P.5 resume If you can't fix a problem &
expert help is not available: !.1 If the Rostock power has already been
turned off STOP here !.2 pause !.3 Press knob on Rostock (to right of
display on base) !.4 Select Adjust Temps by turning knob !.5 Press knob
!.6 Select NOZ Temp: by turning knob !.7 Press knob !.8 Set temperature
to 0 by turning knob !.9 Press knob !.10 Get expert help when it becomes
available; it may be possible to resume printing If the nozzle
temperature stays (it may overshoot for a short time) above the correct
value by more than a few degrees: T.1 Turn Rostock power off (rocker
switch to left & on top of display) T.2 Get expert help If the display
shows NOZ: def or BED: def: D.1 Turn Rostock power off (rocker switch
left and on top of display; may be partially covered by square bed) D.2
Turn Rostock power back on (you may need to use a pencil etc. to flip
the switch) D.3 Make sure the bed temperature was set to 0 when the stl
file was converted to gcode (i.e., when using Cura) D.4 Start over If
the display shows gibberish: G.1 If the printer is printing normally
wait until the print finishes G.2 Turn Rostock power off (rocker switch
left and on top of display; may be partially covered by square bed) G.3
Turn Rostock power back on (you may need to use a pencil etc. to flip
the switch) G.4 Start over If the feed gear won't turn: F.1 If the main
display is shown skip F.2-F.4 F.2 Select Previous Screen by turning knob
F.3 Press knob F.4 Repeat steps F.1-F.4 F.5 Press knob (should then show
Printer Settings selected) F.6 Press knob again F.7 Select Disable
Steppers by turning knob F.8 Press knob ins3DRostockmaint.txt - June 13,
2019 version To change Rostock filament: F.1 Make sure new reel has
correct filament F.2 Press knob to right of display on Rostock base F.3
Select Adjust Temp: by turning knob F.4 Press knob F.5 Select NOZ Temp:
by turning knob F.6 Press knob (\> at left of display should change to
\*) F.7 Set temperature to 180 C by turning knob F.8 Press knob F.9 Trim
end of new filament if it is blunt or distorted; try to make it slightly
pointed F.10 Loosen 2 adjacent screws next to large purple gear on feed
mechanism attached to top of Rostock noting how much they were turned
F.11 Measure the diameter of the new filament (calipers are in the
Measurement bin) in several places and write the average diameter on the
reel; note that if the diameter is different gcode should be recompiled
(i.e., with Cura) using the new diameter F.12 Wait until nozzle
temperature reaches about 180 C F.13 Pull filament up until it comes out
of feed mechanism F.14 Select NOZ Temp: by repeating steps F.2-F.6 F.15
Set temperature to 215 C by turning knob F.16 Press knob F.17 Pull old
filament up from above Rostock (i.e., by turning filament reel) out of
hole in top of Rostock above feed mechanism F.18 Unscrew nut on outside
of reel from threaded rod holding reel F.19 Remove washer from threaded
rod F.20 Remove pink reel holder from threaded rod F.21 Remove reel from
threaded rod F.22 Put new reel on threaded rod so filament hangs down
from front of reel as seen from front of Rostock F.23 Put pink reel
holder on threaded rod so new reel is held snugly and is centered on
holders F.24 Put washer back on threaded rod F.25 Screw nut back on
threaded rod until reel holder is held firmly (but reel can still turn
freely) F.26 Insert filament thru hole in top of Rostock above feed
mechanism making sure it is not twisted or tangled F.27 Push end of
filament into hole above purple gear on feed mechanism while turning
purple gear clockwise; if filament enters feed tube (visible in short
exposed section of feed tube just below purple gear) skip F.28-F.30 F.28
Unscrew feed tube below purple gear F.29 Feed filament from below purple
gear into feed tube F.30 Screw filament feed tube back onto feed
mechanism below purple gear F.31 Wait until NOZ Temp reaches around 215
C F.32 Turn purple gear clockwise until filament starts coming out of
extruder head (it will take a while for it to reach the head) F.33
Tighten 2 screws next to purple gear the same amount they were loosened
F.34 If you are going to print now stop here F.35 Select NOZ Temp: by
repeating steps F.2-F.6 F.36 Set temperature to 0 by turning knob F.37
Press knob To set printhead height: Z.1 Press knob to right of display
on base Z.2 Select Advanced Settings by turning knob Z.3 Press knob Z.4
Select Calibration Menu by turning knob Z.5 Press knob Z.6 Select Z
Position by turning knob Z.7 Press knob Z.8 Set printhead to correct
height (barely above bed; it should slightly drag on a sheet of paper)
by turning knob Z.9 Press knob Z.10 Select Set Z Origin by turning knob
Z.11 Press knob Z.12 Select Previous Screen by turning knob Z.13 Press
knob Z.14 Repeat Z.12-Z.13 until you reach the desired display To level
the bed: L.1 Unclip & remove glass bed plate L.2 Clean off any debris on
the Rostock base or the bottom of the plate L.3 Replace & reclip plate
L.4 Make sure the printhead is at the proper height in the center of the
bed (see To set printhead height immediately above) L.5 If bed still
needs leveling turn the vertical screw sticking out of the inside top of
the movable joint where an arm meets a main vertical bar of the frame
less than a full turn clockwise to raise the printhead on that side,
counterclockwise to lower it L.6 Repeat until that side is level L.7
Repeat for other two sides as needed NOTE: Since the Rostock is
currently printing smaller than it should the feed rate has been set
lower than normal to compensate To calibrate the filament feed rate: R.1
Ctrl Alt F4 (always hold the Ctrl & Alt keys down while pressing the
other key (F4 (top row) not F & 4)) R.2 If the screen does not show a
final line starting with a printer that is in use skip R.3-R.7 R.3 Alt
F2 R.4 If the final line does not start with a printer in use skip
R.5-R.7 R.5 Alt F6 R.6 If the final line does not start with a printer
in use skip R.7 R.7 Alt F1 R.8 If the final line starts with offline,
MINI, ROSTOCK, or TAZ skip R.9-R.11; if it is nnnn@pronterhost:~\$ where
nnnn is anything skip R.9-R.10; if it is not pronterhost login: see
ins3Dcompprob.txt R.9 pronterhost login: hacdc R.10 At Password: enter
standard password R.11 pronsole R.12 connect /dev/ROSTOCK R.13 If the
final line shows ROSTOCK in green skip R.14-R.19 R.14 Wait a minute R.15
Enter R.16 If screen shows ROSTOCK in green skip R.17-R.19 R.17
disconnect R.18 Repeat R.12-R.16 R.19 See ins3Dcompprob.txt R.20 Select
NOZ Temp: by following steps F.2-F.6 R.21 Set temperature to 215 C by
turning knob R.22 Press knob R.23 If the nozzle is close to the bed or a
print: move z 20 R.24 Wait until NOZ Temp: is about 215 C R.25 Mark the
filament at a known distance from where it enters the feed mechanism
(i.e., 120 mm) R.26 extrude \# where \# is somewhat less than the
distance to the mark (i.e., 100 R.27 Wait until the Rostock finishes
extruding R.28 If the mark has entered the feed mechanism repeat
R.25-R.28 with a longer distance to the mark R.29 Measure the distance
from the mark to where the filament enters the feed mechanism (i.e.,
21.6 mm) R.30 Repeat steps R.25-R.29 with the same distance to the mark
& extrude length R.31 If the result is not the same STOP & get expert
help (if help is not available set printhead temperature to 0 or turn
Rostock power off) R.32 Subtract the length remaining (i.e., 21.6 mm)
from the original length to the mark (i.e., 120) to determine how much
filament was actually extruded (i.e., 98.4 mm) R.33 Press knob on
Rostock (to right of display on base) R.34 Select Advanced Settings by
turning knob R.35 Press knob R.36 Select Extruder by turning knob R.37
Press knob R.38 Select Steps/MM: by turning knob R.39 Multiply number
shown (i.e., 798.4) by length that should have been extruded (i.e.,798.4
x 100 = 79840) R.40 Divide by amount that was actually extruded (i.e.,
98.4) to get the correct feed rate (i.e., 79840 / 98.4 = 811.4) R.41
Press knob (\> at left of display should change to \*) R.42 Set
Steps/MM: to correct value by turning knob R.43 Press knob R.44 Repeat
steps R.25-R.29 with a longer length (i.e., mark at 205 mm & extrude
200) R.45 Subtract the length remaining from the original length to
determine the actual length extruded R.46 If display does not still show
Steps/MM: repeat steps R.33-R.38 R.47 If the actual length is correct
skip R.48; if it is way off STOP & get expert help (if help is not
available set printhead temperature to 0 or turn Rostock power off) R.48
Repeat steps R.39-R.43 R.49 Select Previous Screen by turning knob R.50
Press knob R.51 Select Store to EEPROM by turning knob R.52 Press knob
R.53 If you are going to print now stop here R.54 Select Previous Screen
by turning knob R.55 Press knob R.56 Select Adjust Temps by turning knob
R.57 Press knob R.58 Select NOZ Temp: by turning knob R.59 Press knob
R.60 Set temperature to 0 by turning knob R.61 Press knob To tighten a
belt: B.1 Turn off printer B.2 For easier access, move the arm-rod joint
down so the arm tilts up towards the center B.3 Unscrew the 2 hex head
bolts with washer & white spacer at the inside center of the arm-rod
joints B.4 Pull out the narrow vertical piece in the inside center of
the arm-rod joint B.5 While holding the joint, pull up on the LOWER belt
end sticking out from where the removed piece was B.6 While maintaining
tension on the belt, swing the belt end down B.7 While continuing to
maintain tension, replace the narrow vertical piece so the teeth press
against the belt at top & bottom B.8 Replace one of the hex bolts with
the washer & white spacer (the spacer must fit in the hole in the
vertical piece) B.9 Thighten the bolt until it holds the vertical piece
securely B.10 Replace the other bolt, washer, & spacer B.11 Firmly
tighten both bolts B.12 Push the joint back up so the arm tilts down
towards the center To unclog the Rostock printhead: C.1 Unscrew the
coupling (gold color with 6 sides & blue piece at top where filament
enters; CAUTION - may be hot) at the top of the printhead C.2 Press knob
C.3 Select Adjust Temps by turning knob C.4 Press knob C.5 Select NOZ
Temp: by turning knob C.6 Press knob C.7 Set to 215 C by turning knob
C.8 Press knob C.9 Select Previous Screen by turning knob C.10 Press
knob C.11 Select Previous Screen by turning knob C.12 Press knob C.13
Wait until NOZ: reaches around 215 C.14 If there is filament going into
the printhead pull it out (up); if there is a short piece of tubing on
the end of the filament skip steps C.15-C.19 C.15 If the top of the
vertical piece of tubing in the top center of the printhead where the
filament enters is not clogged skip C.16-17 C.16 Using a 1/16" bit in a
hand drill, drill a short distance into the clog being careful to keep
the drill bit centered C.17 Lift out the drill bit; if the piece of
tubing comes out with it skip C.18-C.19 C.18 Screw a fairly long screw
slightly bigger than the filament into the end of the tubing where the
filament enters until the screw catches in the tubing C.19 Pull out the
piece of tubing C.20 If there is a piece of filament sticking out of the
tubing try to pull it out (may take considerable effort) C.21 If there
is still a clog in the tubing push the feed tube snake (should be behind
& to right of Rostock on top of electrical box on wall) or other rigid
straight item into an open end of the tube to try to force the clog out
(may also take considerable effort); if it comes out skip C.22-23 C.22
Using a 1/16" bit in a hand drill, carefully drill out the clog (from
both ends if necessary) C.23 Using a 5/64" bit in a hand drill or your
fingers, drill out the remainder of the clog C.24 Push the tubing back
into the top center of the printhead with the burnt end up (use a pencil
eraser etc. to push it all the way in) C.25 If the filament goes all the
way thru the feed tube & moves freely when the purple feed gear on the
extruder (hanging from the top of the Rostock) is turned skip C.26-C.33;
if the coupling at the end of the feed tube is not clogged skip C.26
C.26 Using a 5/64" bit in a hand drill, carefully drill out the clog
(Caution: the coupling may still be hot) C.27 Unscrew the coupling at
the other end of the feed tube where it connects to the extruder C.28
Try to pull the filament out of the tube; if it won't come out STOP and
get expert help; the tube may need to be replaced C.29 Check if the tube
is clear (i.e., by pushing the feed tube snake thru it); if it isn't &
the clog can't be pushed out STOP and get expert help; the tube may need
to be replaced C.30 If the end of the filament is swollen, damaged, or
blunt trim off any swollen or damaged part and try to make the end
slightly pointed C.31 Insert the end of the filament into the feed tube
C.32 Screw the connector back into the extruder C.33 Feed filament by
turning the purple gear on the extruder clockwise (as viewed from the
front) until it emerges from the other end of the feed tube (requires a
lot of turning; if there is a problem the instructions for changing the
filament may be helpful) C.34 If the end of the filament is swollen,
damaged, or blunt trim off any swollen or damaged part and try to make
the end slightly pointed C.35 Retract excess filament by turning the
purple extruder gear counterclockwise until only a tiny amount sticks
out C.36 Screw the coupling (Caution - it may still be hot) back into
the top of the printhead C.37 Repeat steps C.2-C.6 if needed to select
NOZ temp: C.38 Set temperature to 225 by turning knob C.39 Repeat steps
C.8-C.12 C.40 Wait until NOZ temp: reaches around 225 C.41 Slowly turn
purple gear clockwise (or use the extrude command) until filament starts
to emerge (if the gear becomes hard to turn but no filament comes out it
may have reclogged; start over (it has taken a couple tries before final
success)) C.42 Repeat steps C.2-C.6 C.43 Set NOZ temp: to 215 by turning
knob C.44 Press knob C.45 Put feed tube snake away if you used it C.46
If you are going to print now stop here C.47 Set NOZ temp: to 0 by
turning knob C.48 press knob ins3DRostockmaint - June 13, 2019 version
insCuraaddRostock.txt - How to add the Rostock to Cura (Warning:
instructions are for one specific version of Cura; others may differ but
the basic idea should be the same) - Jan. 4, 2018 version To add the
Rostock to Cura (numbers are for standard filament): R.1 Click on
Machine (top left) R.2 Click on Add new machine... R.3 At Select your
machine (pictures) click on Other Printers R.4 Click on Next R.5 At
Select your machine (list) click on Other R.6 Click on Next R.7 At Other
machine information click on DeltaBot R.8 Click on Next R.9 At Cura
Ready! click on Finish R.10 Click on Machine R.11 Click on Machine
settings... R.12 At Machine settings: Maximum width (mm): 320 R.13
Maximum depth (mm): 320 R.14 Maximum height (mm): 320 R.15 Click on OK
R.16 At Speed and temperature: Printing temperature (C): 215 R.17 Bed
temperature (C): 0 R.18 At Filament: Diameter (mm): 1.75 To fix Cura so
it will compile for the Rostock (Warning: this is for a specific version
of Cura): sudo emacs -nw /usr/share/cura/Cura/util/sliceEngine.py scroll
down to line 359: pos += (objMin + objMax) / 2.0 \* 1000 edit it to: pos
= numpy.add(pos, (objMin + objMax) / 2.0 \* 1000) and save (Ctrl x Ctrl
s)

View File

@@ -0,0 +1,4 @@
Specifications - Oct. 4, 2019 y-axis: The drive belt has a tooth every 3
mm. There are 16 teeth on the motor drive gear so 1 rotation=48 mm. 200
steps of the stepper motor is 1 rotation so: 1 step = .24 mm 1 mm =
4.1666... steps

View File

@@ -0,0 +1,65 @@
ins3DUltiSD.txt - June 13, 2022 version To print from an SD memory card:
U.1 Sometimes glue (glue stick (PVA)) should be put on the bed; it is
currently unclear when glue should be used U.2 Make sure there is
sufficient correct filament on the spool U.3 Turn on UltiMaker (power
switch is in back on left) U.4 Insert SD card (SD card must be left in
until print is finished) U.5 Select PRINT by turning dial U.6 Press dial
U.7 Select desired file by turning dial U.8 Press dial U.9 Wait for
printer to start and make sure it is printing properly
ins3DUltimaint.txt - Oct. 1, 2019 Leveling: L.1 Turn on power switch in
back if it is off L.2 Select MAINTENANCE by turning dial L.3 Press dial
L.4 Select BUILD-PLATE by turning dial L.5 Press dial L.6 Select
CONTINUE by turning dial L.7 Press dial L.8 Turn knob under front right
corner of bed below printhead until there is about a 1 mm gap between
the tip of the printhead and the bed L.9 Press dial L.10 Turn knob under
back center of bed below printhead until there is about a 1 mm gap
between printhead tip & bed L.11 Press dial L.12 Turn knob under front
left of bed below printhead until there is about a 1 mm gap between
printhead tip & bed L.13 Press dial L.14 Slide a sheet of paper between
printhead and bed (front right) then adjust knob until paper binds very
slightly L.15 Press dial L.16 Slide the paper between printhead & bed
(center back) and adjust knob until paper binds very slightly L.17 Press
dial L.18 Slide the paper between printhead & bed (front left) and
adjust knob until paper binds very slightly L.19 Press dial L.20 Slide
the paper between printhead & bed (front right) again and adjust knob if
needed so paper binds very slightly. L.21 Press dial (Instructions for
changing the filament have been deleted since they are outdated because
the extruder has been replaced) Calibrating the filament feed rate R.1
Connect the USB port on a tabletop computer to the port on the Ultimaker
with the appropriate cable R.2 Login: hacdc R.3 At Password: enter
standard password R.4 If the MATE Terminal icon is on the screen double
click on it and skip R.5-R.7 R.5 Click on Applications (top left) R.6
Select System Tools R.7 Click on MATE Terminal R.8 pronterface R.9 Click
on downward arrowhead under & just to right of help (at top) R.10 Click
on 250000 (connection speed) R.11 Click on Connect R.12 Heat: 185 R.13
If the nozzle is close to the bed or a print: move z 20 R.14 Wait for
the nozzle to heat to around 185 C R.15 Mark the filament at a known
distance from where it enters the feed mechanism (i.e., 120 mm) R.16
Extrude - At Length: enter a distance somewhat smaller than the mark
(i.e., 100 mm) R.17 Click on Extrude R.18 Wait until the Ultimaker
finishes extruding R.19 If the mark has entered the feed mechanism
repeat steps R.15-R.19 with a longer distance to the mark R.20 Measure
the distance from the mark to where the filament enters the feed
mechanism (i.e., 22.4 mm) R.21 Repeat R.15-R.20 using the same distance
to the mark & Length:; if the result is the same skip R.22-R.24 R.22
Follow the instructions at If the filament is not feeding properly: in
ins3DUltiprob.txt R.23 Repeat R.15-R.20 R.24 Repeat R.15-R.20 again with
the same distance to the mark & Length:; if the result is not the same
STOP and get expert help R.25 Subtract the distance to the mark from the
oringinal distance to determine how much filament was actually extruded
(i.e., 120-22,4 = 97.6 mm) R.26 At bottom right left of Send: M503 R.27
Click Send R.29 Find the line that starts echo: M92 & note the number
after E at the end of this line (i.e., 2158.32) R.29 Multiply this
number by the value of Length: (i.e., 2158.32 x 100 = 215832) R.30
Divide the result by the actual length of filament used (i.e., 215832 /
97.6 = 2211.39); this is the new value for E R.31 M92 E# where \# is the
new value (i.e., M92 E2211.39) R.32 Click Send R.33 M503 R.34 Click Send
R.35 Verify that E has the new value (i.e., E2211.39) R.36 Repeat
R.15-R.20 with a longer length (i.e., mark at 205 & extrude 200) R.37
Subtract the distance to the mark from the original distance to the mark
to determine how much filament was extruded R.38 If the actual length is
correct skip R.39; if it is way off STOP & get expert help (if help is
not available set Heat: to off or turn off Ultimaker) R.39 Repeat
R.26-R.35 R.40 M500 R.41 Click Send; the screen should state that the
new value was stored in EEPROM R.42 Heat: Click on Off
ins3DUltimaint.txt - May 8, 2018

View File

@@ -0,0 +1,86 @@
ins3Dcomp.txt - July 25, 2019 version To shut down the computer &
optionally restart it from the main screen (WARNING: will stop printing
in progress): L.1 Ctrl Alt F1 (Always hold the Ctrl & Alt keys down when
pressing the other key (F1 in top row not F & 1)) L.2 Click on the icon
at the bottom left of the monitor that looks like part of a clock face
L.3 Move the cursor over Leave at the bottom right of the window that
appears L.4 To shut down & restart the computer click on Restart L.5 To
shut down the computer click on Shut Down L.6 Optional: click on OK to
speed things up To shut down the computer & optionally restart it from a
terminal (WARNING: Will stop printing in progress): S.1 If there is no
terminal window on the monitor: Ctrl Alt F2 (Always hold the Ctrl & Alt
keys down when pressing the other key (F2 in top row not F & 2)) S.2 If
the last line on the terminal window is not pronterhost login: skip
S.3-S.4 S.3 pronterhost login: hacdc S.4 At password: enter standard
password S.5 If the last line is offline\> or starts with the name of a
printer: exit S.6 To shut down & restart the computer: sudo shutdown -r
now S.7 To shut down the computer: sudo shutdown -h now S.8 At \[sudo\]
password for hacdc: enter standard password ins3Dcompprob.txt - July 22,
2019 version If all else (i.e., see If a terminal does not respond at
all below) fails and 3D printer computer does not respond at all: !.1:
If horizontal power strip left of Taz is off (no orange light in switch
at wall end of sockets) turn it on (light should come on) !.2 Make sure
3D printer computer is plugged in to power strip !.3 Make sure 3D
printer computer monitor is plugged in to power strip !.4 If monitor is
off (no orange light in power (rightmost) button at bottom) push button
(light should come on) !.5 If a printer is printing normally wait until
it finishes or get expert help !.6 If there is no green light on in
power button in center of front of 3D printer computer skip steps
!.7-!.9 !.7 Push power button !.8 Wait until green light in button goes
off & stays off !.9 Turn off all printers !.10 Turn on any printers that
are to be used !.11 Push power button on 3D printer computer !.12 If
green light doesn't come on STOP & get expert help !.13 If screen does
not eventually (it takes quite a while for it to start up) come on STOP
& get expert help If a terminal does not respond at all (i.e., terminal
5): T.1 Ctrl Alt F2 (always hold the Ctrl & Alt keys down when pressing
the other key (F2 in top row not F & 2)) T.2 If this terminal is not
responding skip T.3 T.3 If the bottom line does not start with a printer
in use skip T.4-T.16 T.4 Ctrl Alt F6 T.5 If this terminal is not
responding skip T.6 T.6 If the bottom line does not start with a printer
in use skip T.7-T.16 T.7 Ctrl Alt F3 T.8 If this terminal is not
responding skip T.9 T.9 If the bottom line does not start with a printer
in use skip T.10-T.16 T.10 Ctrl Alt F4 T.11 If this terminal is not
responding skip T.12 T.12 If the bottom line does not start with a
printer in use skip T.13-T.16 T.13 Ctrl Alt F5 T.14 If this terminal is
not responding skip T.15 T.15 If the bottom line does not start with a
printer in use skip T.16 T.16 In the unlikely event you get here all the
terminals are either in use or broken; you can either get expert help,
stop one of the printers, or wait for one of them to finish and use the
terminal that was controlling that printer T.17 If the bottom line is
not pronterhost login: skip T.18-T.19 T.18 pronterhost login: hacdc T.19
At Password: enter standard password T.20 If the bottom line starts
offline\> or the name of a printer that is not in use: exit T.21 ps
auxwww \| grep tty# where \# is the number of the nonworking terminal
(i.e., ps auxwww \| grep tty5) T.22 The display should show a list with
a name (user; i.e., root or demo), an integer (process ID), 2 decimal
numbers (% used of CPU & memory), 2 integers, tty#, some characters
(status), a time (start), a time (CPU used), and a name (command),
including one entry ending with /bin/login -- and another ending with
-bash; DISREGARD any entry where tty# is not the number of the
nonworking terminal; if there are no other entries skip T.23-T.28 T.23
sudo kill -9 \# where \# is the process ID (1st integer, 2nd column) of
an entry with the correct tty# other than the ones ending /bin/login --
or -bash \*\*\*WARNING\*\*\* - make sure the number is correct! T.24 At
\[sudo\] password for hacdc: enter standard password T.25 Ctrl Alt F#
where \# is the number for the terminal that was not responding T.26 If
the terminal now responds STOP HERE - DONE T.27 Ctrl Alt F\$ where \$ is
the number for the terminal you were using T.28 Repeat steps T.21-T.27
until only the 2 entries with login & bash remain T.29 sudo kill -9 \#
where \# is the process ID (right after demo) in the line ending -bash
\*\*\*WARNING\*\*\* - make sure the number is correct! T.30 At \[sudo\]
password for hacdc: enter standard password T.31 Ctrl Alt F# where \# is
the number for the terminal that was not responding T.32 If the terminal
now responds STOP HERE - DONE T.33 Ctrl Alt F\$ where \$ is the number
for the terminal you were using T.34 sudo kill -9 \# where \# is the
process ID (right after root) in the line ending with /bin/login --
\*\*\*WARNING\*\*\* - make sure the number is correct! T.35 At \[sudo\]
password for hacdc: enter standard password If this doesn't fix the
problem get expert help If the computer states \[ERROR\] Can't read from
printer (disconnected?) (SerialException): device reports readiness to
read but returned no data (device disconnected or multiple access on
port?) more than 1 terminal may be connected to the printer. R.1 If you
are using terminal 2 skip R.2-R.3 R.2 Ctrl Alt F2 (always hold the Ctrl
& Alt keys down when pressing the other key (F2 in top row not F & 2))
R.3 If the bottom of the display shows the printer you are using:
disconnect R.4 Repeat R.1-R.3 for terminal 3 & Ctrl Alt F3, terminal 4 &
Ctrl Alt F4, terminal 5 & Ctrl Alt F5, & terminal 6 & Ctrl Alt F6

View File

@@ -0,0 +1,31 @@
**Session I: I have a printer, now what?**
Brief overview of process:
`   What is 3d printing`
`   Slicers and gcode`
`   .stl files and cads`
`   .stl files and downloads (design sources like Thingiverse)`
`   Scanners`
Working with designs:
`   What kind of files can I edit and how do I find them?`
`   Creative Commons license`
`   Customizations`
`   Creating your own basic designs`
Cad tools:
`   Gui-based - TinkerCad`
`   Parametric -  OpenScad, Implicit`
`   Hybrids`
How do I convert the file so I can print it on a different printer? What
materials can I print in? Create simple designs Small project, like a
keychain charm or something else tiny but customizable
**Before class:** Create an account on TinkerCAD Create an account on
Thingiverse
**Bring your own laptop!**

View File

@@ -0,0 +1,138 @@
### Executive Summary
From the 3d printing server (reachable from the network via
pronterhost.local and pronterhost.hacdc.org) 3d printers can be
referenced by /dev/TAZ, /dev/MINI, and /dev/ROSTOCK. (added by Tom
9/9/2019)
### The problem
When powering cycling computers and various USB devices attached to said
computer, one does not necessarily get the same `/dev/ttyACM...`
associated with the same physical device every time. This makes it a
royal pain in the ass to use `pronsole` or other applications that need
to be explicitly told what to connect to, because each time you want to
connect to a specific printer you have to do somersaults to determine
the ACM number du jour for the printer (or other device) you want.
### The solution
So, on the artist currently known as `pronterhost.local`, as of
2019.01.21... Julia had previously created
`/etc/udev/rules.d/80-printer-names.rules`, the contents of which were:
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
SUBSYSTEM=="tty", KERNEL=="ttyACM?", ATTRS{serial}=="7403431393835160C070", SYMLINK+="MINI"
# old
#SUBSYSTEM=="tty", KERNEL=="ttyACM?", ATTRS{serial}=="6403636363835110D101", SYMLINK+="TAZ"
SUBSYSTEM=="tty", KERNEL=="ttyACM?", ATTRS{serial}=="640363534303516070A1", SYMLINK+="TAZ"
SUBSYSTEM=="tty", KERNEL=="ttyACM?", ATTRS{serial}=="64032373833351906091", SYMLINK+="ROSTOCK"
Following directions at [How to write udev Rules for USB
Devices](https://weininger.net/how-to-write-udev-rules-for-usb-devices.html),
`$ `<span style="font-weight:bold; background:#ffffd0;">`lsusb`</span>
`Bus 005 Device 006: ID 0bda:0158 Realtek Semiconductor Corp. USB 2.0 multicard reader`
`Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub`
`Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub`
`Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub`
`Bus 002 Device 003: ID 413c:2003 Dell Computer Corp. Keyboard`
`Bus 002 Device 002: ID 27b1:0001`
`Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub`
`Bus 001 Device 003: ID 27b1:0001`
`Bus 001 Device 002: ID 27b1:0001`
`Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub`
I'm going to take a guess at the new TAZ being one of the three lines
above which contain no human-readable vendor information (while the
other two lines will correspond to the known 3D printers in the space --
the ROSTOCK and MINI):
- Bus 002 Device 002: ID 27b1:0001
- Bus 001 Device 003: ID 27b1:0001
- Bus 001 Device 002: ID 27b1:0001
Testing two of them (Bus 001 Devices 003 and 002) yielded:
`$ `<span style="font-weight:bold; background:#ffffd0;">`udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/001/003) | \`
`   egrep "(7403431393835160C070|6403636363835110D101|640363534303516070A1|64032373833351906091)"`</span>
`   ATTR{ID_SERIAL}=="UltiMachine__ultimachine.com__RAMBo_64032373833351906091"`
`   ATTR{ID_SERIAL_SHORT}=="64032373833351906091"`
`$ `<span style="font-weight:bold; background:#ffffd0;">`udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/001/002) | \`
`   egrep "(7403431393835160C070|6403636363835110D101|640363534303516070A1|64032373833351906091)"`</span>
`   ATTR{ID_SERIAL}=="UltiMachine__ultimachine.com__RAMBo_7403431393835160C070"`
`   ATTR{ID_SERIAL_SHORT}=="7403431393835160C070"`
Note that the first `udevadm ...` yields a serial number that matches
Julia's serial number for the ROSTOCK and the second `udevadm ...`
matches that of the MINI.
Testing Bus 002 Device 002 did not match any of the existing numbers but
did provide a serial number with RAMBo in the name. Looking a the entire
output of the command,
`$ `<span style="font-weight:bold; background:#ffffd0;">`udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/002/002)`</span>
`Udevadm info starts with the device specified by the devpath and then`
`walks up the chain of parent devices. It prints for every device`
`found, all possible attributes in the udev rules key format.`
`A rule to match, can be composed by the attributes of the device`
`and the attributes from one single parent device.`
`  looking at device '//devices/pci0000:00/0000:00:1d.1/usb2/2-1':`
`    KERNEL=="2-1"`
`    SUBSYSTEM=="usb"`
`    DRIVER=="usb"`
`    ATTR{SUBSYSTEM}=="usb"`
`    ATTR{DRIVER}=="usb"`
`    ATTR{DEVTYPE}=="usb_device"`
`    ATTR{PRODUCT}=="27b1/1/1"`
`    ATTR{TYPE}=="2/0/0"`
`    ATTR{BUSNUM}=="002"`
`    ATTR{DEVNUM}=="002"`
`    ATTR{MAJOR}=="189"`
`    ATTR{MINOR}=="129"`
`    ATTR{USEC_INITIALIZED}=="3639901"`
`    ATTR{ID_VENDOR}=="UltiMachine__ultimachine.com_"`
`    ATTR{ID_VENDOR_ENC}=="UltiMachine\x20\x28ultimachine.com\x29"`
`    ATTR{ID_VENDOR_ID}=="27b1"`
`    ATTR{ID_MODEL}=="RAMBo"`
`    ATTR{ID_MODEL_ENC}=="RAMBo"`
`    ATTR{ID_MODEL_ID}=="0001"`
`    ATTR{ID_REVISION}=="0001"`
`    ATTR{ID_SERIAL}=="UltiMachine__ultimachine.com__RAMBo_6403335373035101E171"`
`    ATTR{ID_SERIAL_SHORT}=="6403335373035101E171"`
`    ATTR{ID_BUS}=="usb"`
`    ATTR{ID_USB_INTERFACES}==":020201:0a0000:"`
And so, the second `TAZ` line in
`/etc/udev/rules.d/80-printer-names.rules` gets commented out and
SUBSYSTEM=="tty", KERNEL=="ttyACM?", ATTRS{serial}=="6403335373035101E171", SYMLINK+="TAZ" # Current
gets appended to the file (and the lines, rearranged). The end result:
`# You can modify it, as long as you keep each rule on a single`
`# line, and change only the value of the NAME= key.`
`#`
`# Last modified by Ubuntourist <ubuntourist@hacdc.org> 2019.01.21 (kjc) `
`#`
`# 2019.01.21 KJC - Updated the serial number of the TAZ to our current beastie`
`#`
`#SUBSYSTEM=="tty", KERNEL=="ttyACM?", ATTRS{serial}=="6403636363835110D101", SYMLINK+="TAZ"      # Oldest`
<span style="color:#7f0000; background:#d0d0d0;">`#SUBSYSTEM=="tty", KERNEL=="ttyACM?", ATTRS{serial}=="640363534303516070A1", SYMLINK+="TAZ"      # Older (Julia's)`</span>
<span style="color:#007f00; background:#ffffd0; font-weight:bold;">`SUBSYSTEM=="tty",  KERNEL=="ttyACM?", ATTRS{serial}=="6403335373035101E171", SYMLINK+="TAZ"      # Current`</span>
`SUBSYSTEM=="tty",  KERNEL=="ttyACM?", ATTRS{serial}=="64032373833351906091", SYMLINK+="ROSTOCK"`
`SUBSYSTEM=="tty",  KERNEL=="ttyACM?", ATTRS{serial}=="7403431393835160C070", SYMLINK+="MINI"`
Reboot (because I'm too lazy to figure out which service(s) I need to
restart) and done! I hope.
[Category: 3D Printers](Category:_3D_Printers "wikilink")

View File

@@ -0,0 +1,49 @@
2018.01.25
Hack-a-day offered a project
\[<https://hackaday.com/2017/12/26/fast-3d-printing-with-raspberry-pi-but-not-how-you-think/>,
Fast 3D Printing with Raspberry Pi ??? But Not How You Think\]. However,
it describes how to do stuff via OctoPi (child of OctoPrint), which we
don't want to use. This led to the question ["Any way to divorce Klipper
from Octo\*?"](https://github.com/KevinOConnor/klipper/issues/138) and
also ["Klipper as
daemon"](https://www.freelists.org/post/klipper/Klipper-as-daemon,1)
## [Installation](https://github.com/KevinOConnor/klipper/blob/master/docs/Installation.md)
Most of our machines use the [Atmega
AVR](https://en.wikipedia.org/wiki/Atmel_AVR)
[2560](http://www.microchip.com/wwwproducts/en/atmega2560) Rambo board.
But we'll start with the Aden rebuild which uses the [Atmega
AVR](https://en.wikipedia.org/wiki/Atmel_AVR)
[644p](http://www.microchip.com/wwwproducts/en/atmega644p). Both are 16
MHz. So, select the proper microprocessor and speed in the
**menuconfig** step below.
`   $ make menuconfig`
`   $ make`
`     Build Kconfig config file`
`     Creating symbolic link out/board`
`     Compiling out/src/sched.o`
`     Compiling out/src/command.o`
`     Compiling out/src/basecmd.o`
`     Compiling out/src/debugcmds.o`
`     Compiling out/src/gpiocmds.o`
`     Compiling out/src/stepper.o`
`     Compiling out/src/endstop.o`
`     Compiling out/src/adccmds.o`
`     Compiling out/src/spicmds.o`
`     Compiling out/src/pwmcmds.o`
`     Compiling out/src/avr/main.o`
`     Compiling out/src/avr/timer.o`
`     Compiling out/src/avr/gpio.o`
`     Compiling out/src/avr/watchdog.o`
`     Compiling out/src/avr/serial.o`
`     Building out/compile_time_request.o`
`   Version: v0.5.0-108-g1b3ef8a-20180125_195156-hostname`
`     Linking out/klipper.elf`
`     Creating hex file out/klipper.elf.hex`
It has been suggested that socat may help debug stuff...
`   $ sudo apt install socat`

View File

@@ -0,0 +1,21 @@
See [:Category:AmateurRadios](:Category:AmateurRadios "wikilink") .
HacDC's Radio Station
[HamDesk](HamDesk "wikilink")
Icom FT-718
[Manual](http://www.icomamerica.com/en/downloads/Default.aspx?Category=20)
Automatic antenna tuner
[SGC-237](http://www.sgcworld.com/237ProductPage.html)
20m rooftop vertical
[antenna](http://www.hacdc.org/2012/08/new-amateur-radio-antenna/)
[Ham Radio Deluxe](http://www.ham-radio-deluxe.com/)
[WSPR Net - Weak Signal Propagation Reporter
Network](http://wsprnet.org)
[Sound_Card_Interface](Sound_Card_Interface "wikilink")

View File

@@ -0,0 +1,15 @@
## Links
### Tried
### Untried
- [2m dipole](http://www.hamuniverse.com/2mtrcheap.html) simple - Must
be high above ground, no gain.
<!-- -->
- [2m 1/4-wave monopole](http://www.hamuniverse.com/2metergp.html)
simple - Note: It is ok to use 3 radials instead of 4, and they don't
really need to slope downwards unless truly perfect SWR at 50Ohms is
required. Sloping downwards will also reduce antenna gain.

View File

@@ -0,0 +1,154 @@
## Overview
The UV-3R family of radios are dirt cheap 2W handheld transceivers with
reasonably good stock features especially given the price. They can be
very easily modified to take advantage of the on board MCU and crappy
programming of that MCU. The UV-3Rs are software controlled radios (not
SDRs) the DSP isn't controllable beyond squelch thresholds (afaik) which
means only when and where to transmit and receive not any changes to
modulation or demodulation.
## Links
### General Info
- [uv3r.com](http://uv3r.com/)
- [bricklore UV-3R tagged](http://www.brickolore.com/search/label/UV-3R)
- [bricklore UV-3R Mark II
tagged](http://www.brickolore.com/search/label/UV-3R%20Mark%20II)
- [Lior's
Work](http://www.liorelazary.com/index.php?option=com_content&view=article&id=51:hacking-the-uv3r&catid=14:baofeng-uv5r&Itemid=17)
### Modifications
#### Software
- [CHIRP](http://chirp.danplanet.com/projects/chirp/wiki/Home) - a free,
open-source tool for programming your amateur radio. (appears to
support the UV-3R)
- [firmware modification
tool](http://www.radioaficion.com/HamNews/articles/9289-baofeng-uv-3r-220-mhz-soft-mod.html)
- [manufacturer's software
tool](http://www.brickolore.com/2011/12/baofeng-uv-3r-software-version-110-uv.html)
- ["Out of
range"](http://hamradio.selfip.com/i6ibe/baofeng/frequenze.htm)
#### Firmware
- [FOSS
Firmware](http://www.liorelazary.com/index.php?option=com_content&view=article&id=51:hacking-the-uv3r&catid=14:baofeng-uv5r&Itemid=17)
- pads can be fragile or lift off easily.
[User:haxwithaxe](User:haxwithaxe "wikilink") recommends using a
nonsolder based means of connection.
- code: [on github](https://github.com/lelazary/UV3RMod)
- feature set beyond stock firmware as of 2013/04/08 noonish [ripped
from WISHLIST on
github](https://github.com/lelazary/UV3RMod/blob/master/WISHLIST)
- Quick interface to program rx freq, tx freq, power and PL code
very quickly for repeaters. No offset, you just start with the rx
freq and shift it by whichever amount you want. This will allow
allow you to turn off the tx, or operate satellites. At any point
during this mode, you can hold the mem channel and it will ask you
which number you want to save this to.
- Memory mode will allow you to go through your saved memory. At any
point you can press menu and change more details about the
channel. The details will include power with granular level, DTMF
TX/RX, and other functions TBD. This mode will show the channel
name and the freq underneath it.
- Satellite Mode: Auto tuning of the frequency with response to the
Doppler shift.
- (not yet) Digital mode. Hopefully I could add some text base
digital data for rx and tx. You might need to tx the text using
morse code since there is no alpha numeric keypad on the radio.
The digital mode will also include a store and repeat message
forwarding.
- (mostly implemented) Computer mode: All the functions of the radio
including the RDA1846 registers, TX, and RX will be controlled
through the serial port on the radio.
- Fox/Hunt mode. Can be used to transmit a signal intermittently
(like call sign morse code). Or send the RSSI signal into the
audio, and with a directional antenna you can go hunting.
- (not yet) Advance mode: Any RDA 1846 register can be set manually
and saved for during startup.
- (not yet) If the digital mode works, then RF programming of the
radio. This will allow anyone to send you repeater information
from their memory locations. I will work by selecting a memory
channel to rx, and pressing a button. Then on another radio you
can send the programming info.
- (not yet) APRS mode: Boots straight to 144.39 mhz (or whatever you
set it to), doesn't accept inputs, stays on the set frequency.
#### Hardware
- [computer interface for
satelite](http://hamradio.selfip.com/i6ibe/baofeng/baofeng.htm)
- [DIY programming
cable](http://uv3r.com/images/uv-3r_programming_ha4bf.jpg)
- [APRS
rig](https://sivantoledotech.wordpress.com/2011/12/23/building-an-aprs-tracker/)
(without foss firmware)
- fixes:
- [spurious
harmonics](http://www.brickolore.com/2011/11/baofeng-uv-3r-second-harmonic-issue.html)
- [very low, low
power](http://groups.yahoo.com/group/UV-3R/message/4036)
#### Recommended Modifications
- fix harmonics (needs links)
- fixes as needed: speaker volume, [mic
volume](HAM_HT_Baofeng_UV-3R_Mic-Volume "wikilink"), super-low
low-power (needs links)
## Notes
- **DON'T BUY THE PROGRAMMING CABLE** you can use a 3.5mm stereo plug
and a usb to serial device. (pinouts available
[here](http://uv3r.com/))
- If you buy one the only working setup for using the manufacturer's
programming software found by
[User:haxwithaxe](User:haxwithaxe "wikilink") has been Windows7 with
**Vista** drivers for the Prolific serial adapter.
- others have had success with WINE and in XP but since many of the
cables have counterfeit controllers they have varying levels of
functionality with different drivers.
- [User:haxwithaxe](User:haxwithaxe "wikilink") used a VirtualBox VM
with usb pass through.
### Recommended Accessories
- A wide based flush fit BNC (or similarly durable connector) adapter
(sometimes called an antenna saver) given the short mating cycle "SMA
connectors are rated for up to 500 mating cycles" [citation via
Wikipedia](https://en.wikipedia.org/wiki/SMA_connector)
- example: [SMA Male to BNC Female
Connector](http://thumbs4.ebaystatic.com/m/mUgb7YRjFqInb9GoQZVkQMw/140.jpg)
- Also you can replace the adapter much more easily than the SMA
connection in the radio.
- You can even apply some threadlock (the light duty stuff) to the
threaded part and still keep the groundplane continuity because of
the wide base on the adapter touching the rim of the SMA socket.
- Get a dedicated antenna for the VHF and UHF (or whichever you will use
the most). The dedicated antennas will do wonders for performance as
the stock antenna is really pretty horrible and multiband antennas in
general can only be so good on any given band they are tuned for
before the others suffer, so they end up being okay at best on all of
them. If you followed the above then get a BNC terminated antenna and
don't worry about adapters for the antennas.
## Hardware Versions
There are a large number of internally identical radios with very
nonstandardized names in the UV-3R and UV-5R family.
- UV-3R is the first iteration of the UV-3R series it is it's own beast
for the most part
- Mostly-clones UV-100 and UV-200
- UV-3R MKII is the next oldest and has several variants
- UV-X4 - Just a rename for marketing?
- UV-3R+ (aka UV-3R Plus or UV-3R + Plus)
- different battery and charging method - has an actual charging
cradle but battery type is not common
- different audio jacks (separate speaker and mic/ptt)
- female instead of male SMA (not RP-SMA)
- [UV-5R](HAM_HT_Baofeng_UV-5R "wikilink")

View File

@@ -0,0 +1,26 @@
## Types
There are several things that can cause built in mic sensitivity to be
inadequate.
- some batches have mic gain that is too high caused by poorly adjusted
trim pots
- some have it too low due to the same reason
- some have something wrong in the MCU that keeps the gain too low
- some have misaligned case isolation bushing that cover the pin prick
mic hole in the case
## Bushing/Case Fix
1. invoke your inner caveman
2. remove the front panel of the case
3. widen the mic hole in the front panel to ~2mm or 3mm (a pocket knife
does fine)
4. reassemble and test. if it works well stop here else keep going
5. remove the front case panel and remove the rubber boot over the
electrilet mic.
6. use a knife or a hole punch to widen the hole without removing the
entire flat face (which is there to help reduce vibrations in the
case from getting to the mic).
7. reassemble and test if it didn't work it is probably something else
or a combination of this and something else.

View File

@@ -0,0 +1,73 @@
## Overview
The UV-5R family of radios are cheap 4W micro handheld transceivers with
reasonably good stock features especially given the price. They can be
modified to bypass the on board MCU, which is a write once chip that
cannot be modified. The UV-5Rs are software controlled radios (not SDRs)
they have hardware filters that prevent the same kinds of band expansion
as the UV-3Rs.
## Links
### General Info
- [bricklore UV-5R tagged](http://www.brickolore.com/search/label/UV-5R)
- [Baofeng UV-5R Info](http://UV5R.net)
- [Baofeng UV-5R Programming
Guide](http://uv5r.net/baofeng-uv-5r-programming/)
- [menu
cheatsheet](http://kc9hi.dyndns.org/uv5r/programming/UV-5R%20Menus.html)
- [info and software for programming (careful the software is
unveted)](http://kc9hi.dyndns.org/uv5r/programming/)
### Modifications
#### Software
- [CHIRP](http://chirp.danplanet.com/projects/chirp/wiki/Home) - a free,
open-source tool for programming your amateur radio. (appears to
support the UV-5R)
#### Firmware
#### Hardware
#### Recommended Modifications
## Notes
### Performance
#### MCM2013
- Receive sensitivity is pretty severely lacking. UV5R had issues at
WaterPoint 4 on nets C/H/G. No received signal at all. All other HTs
at the same location had perfectly fine Rx.
### Recommended Accessories
- A wide based flush fit BNC (or similarly durable connector) adapter
(sometimes called an antenna saver) given the short mating cycle "SMA
connectors are rated for up to 500 mating cycles" [citation via
Wikipedia](https://en.wikipedia.org/wiki/SMA_connector)
- example: [SMA Male to BNC Female
Connector](http://thumbs4.ebaystatic.com/m/mUgb7YRjFqInb9GoQZVkQMw/140.jpg)
- Also you can replace the adapter much more easily than the SMA
connection in the radio.
- You can even apply some threadlock (the light duty stuff) to the
threaded part and still keep the groundplane continuity because of
the wide base on the adapter touching the rim of the SMA socket.
- Get a dedicated antenna for VHF and UHF (or whichever you will use the
most). The dedicated antennas will do wonders for performance as the
stock antenna is really pretty horrible and multiband antennas in
general can only be so good on any given band they are tuned for
before the others suffer, so they end up being okay at best on all of
them. If you followed the above then get a BNC terminated antenna and
don't worry about adapters for the antennas.
## Hardware Versions
There are a large number of internally identical radios with very
nonstandardized names in the UV-3R and UV-5R family.
- [UV-3R](HAM_HT_Baofeng_UV-3R "wikilink")

View File

@@ -0,0 +1,24 @@
**General Radio Topics**
[ARRL](http://www.arrl.org) [AMSAT](http://www.amsat.org)
**Local Clubs**
[Montgomery County ARC](http://www.marcclub.org/)
[AMRAD](http://amrad.org/) [Vienna Wireless
Society](http://www.viennawireless.org/home.php)
**Local Retail Stores**
[The RF Connection](https://www.therfc.com/)
**Mesh Networking**
[HacDC Byzantium Project](http://project-byzantium.org/) [Local
Broadband Mesh Activity](http://www.remoteamateur.com/)
**RTL-SDR (DVB-T USB dongle based SDR)**
[RTL-SDR resource](http://sdr.osmocom.org/trac/wiki/rtl-sdr) [RTL-SDR
resource](http://rtlsdr.org/) [Why buy a ham it
up?](http://www.rtl-sdr.com/rtl-sdr-direct-sampling-mode/)

View File

@@ -0,0 +1,20 @@
**Technical Projects/Wishlist** 40 meter antenna on roof
USRP/GNU radio installation
Station Remote Control
WhereAVR receiver [Spaceblimp
Avionics](http://wiki.hacdc.org/index.php/HacDC_Spaceblimp_2)
VHF/UHF rig
Repeater
Antenna rotator
**Club Projects**
FCC Technician Class License Preparation Course
Local direct mail outreach

View File

@@ -0,0 +1,107 @@
## HacDC entry-level (Technician) Amateur License test preparation class
### Dates and Times
The class will be held at the Space on two consecutive Saturdays:
February 11 and 18 from 1 to 4 PM. The following Saturday: February 25
at 9 AM (sharp) will be be the exam at the Winterfest at the Northern
Virginia Community College Annandale Campus.
### Resources
- The target exam is at the Vienna Wireless Society's "Winterfest":
<http://www.viennawireless.org/winterfest.php>
<!-- -->
- The FCC (Federal Communications Commission) definition of the Amateur
Radio Service: ***"The amateur and amateur-satellite services are for
qualified persons of any age who are interested in radio technique
solely with a personal aim and without pecuniary interest. These
services present an opportunity for self-training, intercommunication,
and technical investigations."***
<!-- -->
- The ARRL Technician License manual and study guide:
<http://www.arrl.org/ham-radio-license-manual> . *'*Please look over
this resource carefully before class. *'*
<!-- -->
- A free license manual for the Technician class:
<http://www.kb6nu.com/wp-content/uploads/2010/06/2010_Tech_Study_Guide.pdf>
*'*Please look over this resource carefully before class. *'*
<!-- -->
- Some links to free online practice exams:
<http://www.eham.net/exams/>, <http://www.qrz.com/ht/>,
<http://aa9pw.com/radio/>
<!-- -->
- FCC Amateur Radio Page:
<http://wireless.fcc.gov/services/index.htm?job=service_home&id=amateur>
<!-- -->
- FCC Part 97: Regulations pertaining to the Amateur Radio Service:
<http://www.access.gpo.gov/nara/cfr/waisidx_10/47cfr97_10.html>
<!-- -->
- The entire Technician class license pool, of which 35 questions will
be randomly selected for your exam:
<http://www.ncvec.org/page.php?id=349>
<!-- -->
- We will be viewing the HamCRAM presentation and answering questions.
You can preview the presentation here: <http://w9pe.us/> . *Your
comments on improving or replacing this presentation are greatly
appreciated.*
<!-- -->
- Recommended reading is John Delvoldere (ON4UN)'s operating ethics
materials at his web site: <http://www.ham-operating-ethics.org/> .
Not only will it give you good recommendations for being a good
citizen on the air, it will also give you an excellent overview of the
various facets of modern Ham radio. There is an excellent manual in
PDF format you may wish to have available when you start using your
new license.
- ON4UN is in Belgium, check out the station web page:
<http://www.dxwatch.com/qrz/lookup.php?c=ON4UN>
<!-- -->
- Founded in 1914, The American Radio Relay League (AARL) is the
national association for Amateur Radio in the USA. Today, with more
than 156,000 members, ARRL is the largest organization of radio
amateurs in the United States. Check out their web site:
<http://www.arrl.org>.
<!-- -->
- A short video: Richard Feynman describes "waves", including radio,
light, heat, etc. in a very sensorial (as in Montesssori education)
way: <http://www.youtube.com/watch?v=AU8PId_6xec>
### About the class
Add another tool to your Maker toolkit: an Amateur Radio License.
Amateur Radio Operators (Hams) have a long history of "Homebrewing":
building their own equipment and experimenting in the hopes of making it
work better, and the community has grown a tremendous breadth. There is
tremendous overlap between the Ham and the Maker communities.
HacDC has it's own club license: W3HAC, which we originally obtained to
use ham radio for position tracking during our balloon flights using
APRS (Automatic Packet Reporting System) on VHF and UHF frequencies;
designing and building our own lightweight transmitter for the balloon
payload. We have many Hams here, some with quite advanced licenses, and
a bi-monthly meeting to discuss technical aspects of radio-based
communication and build stuff.
[Category: Classes](Category:_Classes "wikilink")

View File

@@ -0,0 +1,10 @@
## HacDC Byzantium Team Contact Info
- IRC
- [IRC on freenode](irc://irc.freenode.net/#byzantium)
- [IRC Web
Chat](http://webchat.freenode.net/?channels=byzantium&uio=d4)
- [Bug Reports](https://github.com/byzantium/byzantium/issues)
- [Email the mailing list](mailto:byzantium@hacdc.org)
- [Subscribe to the Byzantium mailing
list](https://groups.google.com/a/hacdc.org/group/Byzantium/topics)

View File

@@ -0,0 +1,37 @@
- Download a copy of [Porteus Linux](http://porteus.org).
- Install it to a USB key or virtual machine, depending on your
preference. Use the official Porteus instructions to do so.
- Set up an account at [Github](https://github.com) and start watching
[Project Byzantium](https://github.com/Byzantium/Byzantium).
- This will let you not only watch the project's activity from your
Github dashboard, but if you join the project you'll be able to
check code in.
- You'll also be able to open new tickets in the bug tracker, and
comment on existing ones.
- Check out a copy of the source code: **git clone
<git://github.com/Byzantium/Byzantium.git>**
- Now you'll have all of the code we've written.
- To update your local checkout, change to the Byzantium directory and
run the command **git pull**.
- If you just want to try the latest build of Byzantium, download [the
Byzantium
module](http://svn.virtadpt.net/byzantium/000-byzantium.xzm) and
copy it into the directory */porteus/modules/* on your USB key or in
your virtual machine after you've booted it. The module will be
automatically activated the next time it's booted.
- Note that 000-byzantium.xzm isn't updated as often as the source
code repository is, so it may not be up to date.
- Join the [mailing
list](http://groups.google.com/a/hacdc.org/group/Byzantium/?hl=en).
Note that you'll need a Gmail account of some kind.
- Once you're on the list, post an introduction! Tell us how you found
out about Byzantium and a little about what you would like to work
on.
- Pick something to work on!
- Pick a ticket in the [bug
tracker](http://svn.virtadpt.net/byzantium/000-byzantium.xzm) and
fix it. Tell us about it on the mailing list if you don't already
have commit access and post a patch (**git diff**) if not.
- Experiment with Byzantium. If you manage to break it somehow, open a
ticket in the bug tracker and tell us about it. Even better, post a
fix for it.

View File

@@ -0,0 +1,46 @@
If you contribute to the Byzantium project in anyway (including
intellectually) please add a brief (if it's more than 280 characters
consider linking to a separate page) entry to this page or have someone
with edit access to this page in the following format. If there is an
objection to an entry it can always be removed so don't be afraid to
write something. If you don't want to be identified you can use the name
"Anonamoose" or anything else you want (but Anonymoose is the best
choice :P). Try to keep it in roughly chronological order if you can but
close is good enough ([haxwithaxe](User:haxwithaxe "wikilink") will
probably rewrite the page after running it through sort occasionally).
- YYYY/mm/dd - Name - description and links etc
## Log
### 2011
- 2011/09/30 - group - byzantium planning meeting: discussed use cases,
routing between meshes with nonmesh clients, prepared to finalize the
development (pre-pre-alpha) build of the live distro
- 2011/10/01 - haxwithaxe - made this page for people to record their
contributions
- 2011/10/01 - group - byzantium sprint day: TBD
- 2011/7/9 - drwho - Set up <http://svn.virtadpt.net/byzantium> for
Porteus modules
- Started coding web control panel for Byzantium
- Converted Slackware v13.37 packages into Porteus modules
- Converted Slackware packages from slackbuilds.org into Porteus
modules.
- Packaged web apps into Porteus modules.
- Tested package compilation using the scripts Ben and Chris wrote.
Noted the ones that worked, opened tickets in the [bug
tracker](https://github.com/Byzantium/Byzantium/issues) for the ones
that didn't, tried to include enough information to help figure out
what's going wrong in the package builder.
- 2022/11/13 - drwho - Figured out how to put together a fakeroot
directory structure that could then be used to build
000-byzantium.xzm. This is the core module of Byzantium Linux.
- Put together the 000-byzantium.xzm module for demonstration as an
alpha release.
- Debugged rc.setup_mysql initscript so that it sets up the necessary
application MySQL databases on an instance of Byzantium and locks it
down. It's also extensible enough to build new functionality on
later.
### 2012

View File

@@ -0,0 +1,50 @@
## Summary
The problem: <http://en.wikipedia.org/wiki/Zooko's_triangle>
## Suggested Reading
[CJDNS](https://github.com/cjdelisle/cjdns) - CJDNS == CJD's Network
Suite. it does not contain a ddns system yet. it currently uses plain
old DNS within the darknet. <s>True DNS (i.e., port 53/UDP) with a DHT.
I've played around with it a little and it seems to do what it says on
the tin.</s>
[Distributed Hash Table
(DHT)](http://en.wikipedia.org/wiki/Distributed_hash_table) - Wikipeda
page on DHTs. Has a decent overview of how they work.
[Bamboo DHT](http://www.bamboo-dht.org/) - A DHT implementation in Java.
[UpRight](http://code.google.com/p/upright/) - A library for building
fault-tolerant distributed systems. Incorporates innovations from modern
solutions to Byzantine fault tolerance.
[Gossip
Protocols](https://secure.wikimedia.org/wikipedia/en/wiki/Gossip_protocol):
Nodes in a network pseudorandomly select peers to exchange information
with. Could be useful for distributing the contents of a DHT-based DNS
implementation within a mesh network.
[Kademlia](https://secure.wikimedia.org/wikipedia/en/wiki/Kademlia) has
an interesting way of handling the entry distribution problem. When
inserting an entry, it iterates through the table to find suitable nodes
in the network to hold that entry and propagates it to them as well as
saving a copy locally.
[CoDoNS
paper](http://conferences.sigcomm.org/sigcomm/2004/papers/p292-ramasubramanian1111.pdf) -
A very good paper from 2004 on a distributed DNS alternative. It still
relies on centralized domain name registration. [CoDoNS main
page](http://www.cs.cornell.edu/people/egs/beehive/codons.php) - It
appears that CoDoNS is operational and running on PlanetLab.
Unfortunately, I don't see any code. I see no reason why we can't simply
hijack their design.
[Tutorial on DNS and
DNSSEC](http://www.surfnet.nl/Documents/DNSSSEC-web.pdf)
[Intentional Naming System](http://nms.lcs.mit.edu/projects/ins/) - "INS
is a new naming system intended for naming and discovering a variety of
resources in future networks of devices and services. It has the
following interesting characteristics about the way it names resources
and the way names are resolved."

View File

@@ -0,0 +1,49 @@
The InterMesh is the network of meshes that is separate from the
internet either functionally (bandwidth/latency limitations) or fully
(completely disconnected).
## Services Needed
All these services need to be distributed throughout the InterMesh.
I think we should err on the side of "Secure by default". To make it
easy to grow the mesh we can't really set up encryption at OSI layers 1
and 2 (getting people to configure that in a hurry isn't going to work,
though we might have some luck if we did with [QR
codes](http://skattertech.com/2011/01/quick-tip-use-a-qr-code-to-share-wifi-passwords-with-android/)).
I think any services offered on the mesh should offer SSL/TLS by default
(we'll have to go with self-signed certs).
- captive portal
- to let people know about the services we are providing
- Webmail
- Something that works like
[privacybox.de](https://privacybox.de/index.en.html) would be ideal
in that it's got a short learning curve and a UI that's easy to use
from a smartphone or PDA.
- Twitter equivalent
- [status.net](http://status.net/)
- Common chat networks
- AIM compatible eqiv.
- Gtalk compatible equiv.
- Facebook chat compatible equiv.
- In short, IM-over-HTTPS.
- IRC
- [Mibbit](http://www.mibbit.com/) or something that works like it.
- [CryptoCat](https://crypto.cat/) I think we should get in touch
with the person running this project.
- Collaborative notes
- Mediawiki
- Etherpad
- File uploads
- Image dump ala [Plixi](http://plixi.com/).
- Streaming audio (low priority)
- Yes, I'd plug my police scanner into my computer and stream what I
pick up.
- Voice over IP
- Asterisk
- Configure a conference bridge that people with softphones can talk
on.
- We'll have to test what kind of latency we get with such a setup.
- Voicemail
- Microblog-to-speech using Festival?

View File

@@ -0,0 +1,304 @@
## Description
We are building a portable live Linux distribution based on [Porteus
Linux](http://porteus.org/). Porteus itself is a fork of Slax that has
been brought up to date with Slackware 13.37 and uses a 2.6.38.8 kernel.
Porteus can use binary packages from Slackware 13.37 after conversion to
Porteus' native format.
## Code Repositories
[Github page](https://github.com/Byzantium/Byzantium)
[Subversion repo for Porteus
packages](http://svn.virtadpt.net/byzantium/)
## Goals
- Make it possible for people in emergency situations to communicate and
collaborate.
- Make it possible for people in areas where the communications
infrastructure is compromised to communicate and collaborate.
- Provide services to support communication and collaboration.
- Will be secure out of the box.
- Best practices for isolating running services will be followed.
- Best practices for configuration web applications will be followed.
- Least privilege will be followed wherever possible.
- Will be extensively documented.
- A Creative Commons-licensed book will be made available with the
Byzantium distribution as well as separately
- Will explain the finer points of setting up a mesh, as well as
accompanying projects (such as dialup gateways and long-haul
transports).
- Will be translated into as many languages as possible.
- Widely compatible.
- Users need to be able to boot their desktop/laptop/netbook from
Byzantium media and set up a node.
- As little fiddling with network drivers as possible.
- Rapidly deployable.
- Users need to be able to configure their Byzantium node rapidly and
with little assistance.
- Emergency situations.
- Control panel aims to be as self-documenting as possible.
- Aims to protect confidentiality of traffic.
- Opportunistic IPsec?
- All services default to SSLv3/TLSv1.
- Aims to protect integrity of traffic.
- SSLv3/TLSv1.
- Meshes should grow without the direction of a central authority.
- Anyone can set up a mesh node.
- Anyone can set up services on the mesh.
- Services packaged by default can be managed (activated and
deactivated) from the control panel
- Services packaged by default will come preconfigured with secure
defaults and a mobile-friendly theme where appropriate.
- This is a calculated risk. The threat models of Tor and I2P take
this into account as well.
- Byzantium nodes need to be rapidly clonable.
- One copy of the live distribution needs to become many on demand.
- Nodes need to be clonable without taking the node down.
- Persistent storage has to be an option.
- Built into [Porteus](http://porteus.org).
- save.dat file
- removable media
- media Porteus is installed to
- Dependencies will be automatically managed by the control panel.
## Features
- Can support multiple mesh routing protocols.
- Modular configuration back end.
- Multiple pre-packaged, pre-configured web applications for
communication and collaboration.
- All services can be independently activated and deactivated.
- Aims for security by default.
- Services are not active unless explicitly triggered.
- Services are configured using best practices for security.
- Services support strong cryptography by default.
- Supports gatewaying from the mesh to the Net over a live connection.
- Supports persistent (encrypted) storage on demand (not default).
- Note: When creating a save.dat file under Porteus, if the drive it's
on is formatted FAT-32 or less, the file MUST be \<1024MB, else, the
/linuxrc script that forms the core of the distro will pretend that
it can't locate the file, regardless of where you put it. This drove
me bonkers for two months!
- If possible we should try to make save.dat a second partition on
the thumbdrive (ala casper-rw for ubuntu liveUSBs) there are some
big benefits to this:
- it makes it harder for windows users to see that there is a
second partition in case big brother decides to inspect the
contents of all thumbdrives.
- it means we won't have to worry about file size limits.
### ToDo
- ~~[Node Control Panel](Byzantium_Live_Distro_CP "wikilink")~~ - DONE!
- ~~[Captive Portal](Byzantium_Live_Distro_Captive_Portal "wikilink")~~
-DONE!
- [Provided Services
Announcement](Byzantium_Live_Distro_Service_Announce "wikilink")
- [Wiki](Byzantium_Live_Distro_Wiki "wikilink") - suspended notion
- ~~[Microblog](Byzantium_Live_Distro_Microblog "wikilink")~~ - DONE!
- [File dump/Twitpic
work-alike](Byzantium_Live_Distro_FileDump "wikilink")
- [Voice chat/telephony server](Byzantium_Live_Distro_Tel "wikilink")
- ~~[Clientless web chat](Byzantium_Live_Distro_Chat "wikilink")~~ -
DONE!
- ~~[Blog](Byzantium_Live_Distro_Microblog "wikilink")~~ - see Microblog
- ~~[EtherPad-like thing](Byzantium_Live_Distro_EPad "wikilink")~~ -
DONE!
- [Streaming media
server](Byzantium_Live_Distro_StreamingMediaSrv "wikilink")
- [HTTP caching proxy](Byzantium_Live_Distro_WebProxy "wikilink")
- [Tor](https://www.torproject.org/)
- [IPset](IPset "wikilink")
Pick a web server to host applications:
- Converted the Apache, apr\*, and PHP packages of Slackware v13.37 into
Porteus modules. They Just Worked(tm).
~~We need to figure out how to properly install the control panel app on
a new system. The process should be as pythonic as possible.~~
We need to figure out how to bundle the already configured and populated
MySQL databases for the web apps!
- Packaging them into a module and activating it didn't work.
- ~~Write a script that detects the presence or absence of
/var/lib/db/\*/ and restores them from .sql dumps at boot-time.~~
[The Doctor's to-do list](The_Doctor's_to-do_list "wikilink")
## Packages built for Byzantium
- babeld - For great mesh routing.
- batman-adv - Kernel module which implements mesh routing at OSI
layer 2. We may not use it but it's there if we need it.
- batctl - Utility for configurating and manipulating batman-adv.
- Dependency of batman-adv.
- olsrd - from olsr.org
- ahcpd - For configuring mesh nodes that don't want to use the random
RFC-1918 IP address generator.
- CherryPy - Python module that implements a fast multi-threaded HTTP
(web application) server.
- Without this, there is no control panel.
- pySetupTools - Required for installing some Python modules.
- Mako - Python HTML templating system.
- Dependency of the control panel.
- MarkupSafe - Python library that implements a Unicode string that is
aware of HTML escaping rules and does automatic string escaping.
- Dependency of Mako.
- Git - Converted Slackware v13.37 package.
- Necessary for checking code out and into Github.
- Curl - Converted Slackware v13.37 package.
- Dependency of git.
- Note: To make git work without "error setting certificate verify
locations" errors, you need to run the following command as the root
user: git config --system http.sslcainfo
/usr/share/curl/ca-bundle.crt
- rrdtool - Used by traffic_stats.sh to monitor network traffic and
build graphs.
- sqlitebrowser - Used to develop SQLite database schemas and debug
database access code. Will not be in OS release.
- ~~nginx - Lightweight, fast HTTP(S) server. Much more lightweight than
Apache, at any rate. Custom build for Byzantium.~~
- Enough!
- gd - Dependency of PHP.
- Used for server side image manipulation.
- libmcrypt - Dependency of PHP.
- icu4c - International Components for Unicode. i18n dependency of PHP.
- openldap-client - Dependency of PHP to make it compile. Not pleased by
having to package it, but it won't build without it.
- Can we get away with not having it because I didn't have to compile
it for Apache? Let's try it!
- php - Converted Slackware v13.37 package.
- httpd - Apache v2.2.17. Converted Slackware v13.37 package.
- ..and then stuff started working!
- apr-util - Converted Slackware v13.37 package.
- Utility used for compiling Apache modules.
- apr - Converted Slackware v13.37 package.
- Package used for compiling Apache modules.
- t1lib - Converted Slackware v13.37 package. Used for font
manipulation.
- pcre - Converted Slackware v13.37 package.
- Perl Compatible Regular Expression library.
- Unicode aware for i18n support. status.net requires this for basic
functionality, whcih means that we get i18n for free.
- ~~Firefox v6.0.2~~
- Do not use! i_can_haz_firefox.sh builds a package with bad symlinks.
Haven't bothered to fix it so far.
- node - An event-driven I/O server-side JavaScript environment based on
V8. (from website and wikipedia).
- Required by Etherpad-lite.
- dnsmasq - All-in-one DHCP and caching DNS server.
- Much easier to work with in circumstances like this than ISC BIND or
even djbdns.
- ipcalc - Command-line IP networking calculator. Will be needed by the
control panel shortly.
- Removed the CGI-BIN script from the package when it was built.
- ngircd - Lightweight IRC server.
- Back-end for web chat application.
- Somehow we need to figure out a way to make them automagically hook
together into an IRC network. But that can wait.
- zope.interface - Required by Twisted.
- Twisted - Required by qwebirc.
- Satisfies the clientless web chat requirement.
## Links
Place links relevant to any part of the process of making the live
distro here.
[Porteus Official Website](http://porteus.org/)
[Processes for building Porteus
packages.](Processes_for_building_Porteus_packages. "wikilink")
[Process for manually installing
Byzantium.](Process_for_manually_installing_Byzantium. "wikilink")
[Byzantium 101](Byzantium_101 "wikilink") - How to get yourself set up.
[Hardware compatibility list](Hardware_compatibility_list "wikilink")
[User Feedback on Byzantium
0.1a](User_Feedback_on_Byzantium_0.1a "wikilink")
[Handy generic git notes](Git_Notes "wikilink")
## Timeline
- .....uhh....
- 20 October 2011 - Live demo, presentation, and networking at
[ContactCon](http://contactcon.com/).
- 12 May 2012 @ 1400 EST5EDT: Project Byzantium presentation at
[CarolinaCon](http://carolinacon.org/).
- 13-15 July 2012 @ TBA: Project Byzantium presentation at [HOPE Number
Nine](http://www.hopenumbernine.net/).
## Stuff
~~Need to edit /etc/hosts, add 'byzantium' to 127.0.0.1 so that the web
server will start up.~~
[Mobile devices and IPv6.](Mobile_devices_and_IPv6. "wikilink")
~~[DNSmasq](http://thekelleys.org.uk/dnsmasq/doc.html)~~
- ~~One nice thing about DNSmasq is the -H option, for additional
/etc/hosts-like files. We could use those to cache the IP addresses of
other Byzantium nodes, and then query them for the services they
run.~~
- Hostnames are IPv6 addresses of nodes.
- ifconfig wlan0 \| grep inet6 \| awk '{print \$3}' \| sed 's/:/-/g'
\| sed 's/\\64\$//' \| sed 's/\$/.byzantium.mesh/' ==
fe80--21c-bfff-fe35-84c2.byzantium.mesh
- ~~Put IP addresses and hostnames in /etc/hosts.mesh.~~
- This could also be used for status.net federation and IRC network
construction.
- ~~Move the **server=/byzantium.mesh/...** line into the generated
DNSmasq include file?~~
- ~~Make the '...' the mesh interface's IP address?~~
<!-- -->
- ~~Consulted with an expert about IP addressing. At first scratch, it
might be a good idea to stick wtih pseudo-randomly chosen 10/8's.
Configure the mesh interface for the .1 and give the clients .2-.254.
I'll re-work the control panel to do that.~~
Need to account for [APIPA](http://www.webopedia.com/TERM/A/APIPA.html)
addressing in the initial set of routes.
- ~~Added for the purpose of making networkconfiguration.py [detect
whether or not the proposed IP address for the mesh interface is in
use](http://www.cyberciti.biz/faq/linux-duplicate-address-detection-with-arping/).~~
- Byzantium does this now. It works like a champ.
List of public DNSes that we may wish to fall back upon in the event a
node is made into a gateway:
- [Google Public DNS](https://code.google.com/speed/public-dns/)
- [Public DNS servers](http://www.tech-faq.com/public-dns-servers.html)
- [OpenDNS](https://www.opendns.com/)
[Packaging NPM.](Packaging_NPM. "wikilink")
[Finding neighboring mesh
nodes](Finding_neighboring_mesh_nodes "wikilink")
[Fully distributed services](Fully_distributed_services "wikilink")
## Stuff to consider for later
- Consider adding [Iodine](http://code.kryo.se/iodine/) to Byzantium to
help tunnel gatewayed traffic onto the Net.
- Gateway nodes in hostile areas could use Iodine to tunnel traffic
out.
- Gateway nodes in non-hostile areas could accept Iodine connections
to help less fortunate nodes evade censorship.
- Consider adding (http\|proxy)tunnel with simplified usage of some kind
to allow encapsulating arbitrary data streams in http streams.
- Firewall evasion aids that will work well even in established internet
censorship systems?

View File

@@ -0,0 +1,17 @@
## Description
[Browse source
code](https://github.com/Sitwon/Byzantium/tree/master/control_panel).
## Features
## ToDo
- Modify startup code to:
- Read configuration databases
- Test each existing entry against the current hardware configuration
- If they match, start it up using the stored settings
- If they don't, delete that stored setting
- Start up system services that are configured and active.
- Modify the /index.html template to not show a sitrep but the current
configuration from the databases

View File

@@ -0,0 +1,17 @@
## Description
Catch the first DNS request from a node or client and redirect them to a
page which will inform them of Byzantium's capabilities or lack thereof.
## Suggestions
- dnsmasq+custom scripts
- Have DNSmasq running, config file generated by control panel.
- Basic DNS hijacking possible (right now, intercepts www.google.com
and encrypted.google.com)
- When the captive portal is working we won't need to do this.
- [WiFiDoc](http://dev.wifidog.org/)
- [NoCatSplash](http://nocat.net/)
- [Captive::Portal](http://search.cpan.org/~gaissmai/Captive-Portal/)
- [Captive::Portal notes](Captive::Portal_notes "wikilink")
- [Dependencies](Dependencies "wikilink")

View File

@@ -0,0 +1,14 @@
## Options
[crypto.cat](https://crypto.cat) - requires a preshared key for
encrypted sessions but is otherwise robust out of the box [akiscode
p2pchat](http://akiscode.com/projects/p2pchat/) - needs work but could
be made into a webchat and is written in python.
## Ideal Chat Client
- has the ability to do asymetric encryption
- has the ability to work without a server (maybe unrealistic but it
would be nice)
- if servers are required they can federate with other servers
- is easy to for end users to use

View File

@@ -0,0 +1,3 @@
## Suggestions
- etherpad-lite

View File

@@ -0,0 +1,42 @@
Photoblog/Image Dump Essentially, a [Twitpic](http://twitpic.com)
work-alike for the Byzantium mesh.
- [Pixelpost](http://www.pixelpost.org/)
- Blog optimized for photoblogging.
- Requires MySQL.
- Requires PHP.
- Needs to be configured so that anyone can log in and post images
(guest/guest?)
- EXIF information needs to stay turned off.
- Look into writing a utility which strips EXIF information fromm all
images uploaded.
- Make the "Remove EXIF" function permanant?
<!-- -->
- [Plogger](http://www.plogger.org/)
- Dedicated online photo gallery.
- Requires MySQL.
- Requires PHP.
- Requires GD.
- Defaults to the first album, first collection if there is nothing
else.
- Need a mobile theme. Develop one?
- Has i18n support already.
- Can take descriptions.
- Needs to be configured so that anyone can log in and post images
(guest/guest?)
File dump
- [Simple File Exchange](https://github.com/TlhanGhun/SiFiEx)
- Requires PHP.
<!-- -->
- [Forban](http://www.foo.be/forban/)
- Python app.
- Simple peer-to-peer file sharing application.
- Implements HTTP.
- Opportunistic file sharing.
- Written in Python.

View File

@@ -0,0 +1,16 @@
Working on status.net for now. [status.net](http://status.net) isn't
quite what we need and it is much to complex (says haxwithaxe)
recommend we write our own dead simple one with the following features:
- completely anonymous posting (security via the lack thereof :P)
- distributed couchdb-like database backend
- the future ability to sign messages with pgp keys
For the time being, let's set it up. We can code something else later,
but I need *something* to demo (and turn testers loose on). I'll see if
status.net can use SQLite as its back end. Supposedly [the Google Summer
of
Code](http://status.net/wiki/Google_Summer_of_Code_2011#RDBMS_backend)
was supposed to do this in 2011, but I don't know if it actually
happened.

View File

@@ -0,0 +1,84 @@
## Prerelease Process
**DRAFT** On this page we have a list of things that need to happen
between the **final** build and the publishing of software or
repackaging thereof by the Byzantium Project. Unless otherwise stated
all items are required to be satisfied for an individual build before
being placed in another part of the project or before publishing the
project.
### Build Environment
- manifest check - make sure what you think is there is actually there.
manifest files (with name <scope>.manifest) are recommended, and will
be checked by the build environment once that is automated.
- Add a stanza to the Makefile (if we go that way, that is) - **make
manifest** or **make test** or something like that.
- ?other sanity checks?
### Runtime Environment
- for each package/major feature set a checklist must be made that will
reasonably ensure the software is behaving as expected.
- A list of packages that comprise 000-byzantium.xzm should be
maintained someplace. Right now we're just eyeballing it.
- A list of files associated with each package should be maintained
someplace.
- This is why I build Slackware packages (where feasible) or do a
**DEST=/tmp/SBo make install** where there aren't any followed by a
**dir2xzm /tmp/package.xzm /tmp/SBo** - to keep all of the files for
a particular package grouped together.
- A bunch of .xzm packages are easier to keep track of than compiling
stuff in sequence. Then, when it comes time to build everything the
build system can check them out of SVN and use **xzm2dir** to unpack
all of them in sequence into a fakeroot. So, I propose a two step QA
sequence:
- Make sure that some_package-rev.isi.on.xzm was compiled and
checked into SVN.
- Make sure that some_package-rev.isi.on.xzm was checked out of SVN
on the build machine and **xzm2dir**ed into /tmp/fakeroot.
- the checklist can (and is recommended to) just say to run a script
that will do the required tests and return a pass/fail status.
- if a script is used for runtime QA it should be named "runtimeQA.sh"
and have 777 (a+rwx) permissions in the root directory of it's scope
(eg for a package
"byzantium-repo/packages/thispackagedir/runtimeQA.sh"). Also it
should use paths with the expectation that the script will be run
from an arbitrary directory.
### Human Environment
- 2 day cool down period between building and publishing
- No .iso image goes out without being PGP signed against key
0xD6975C17.
- While we're at it, can we get some more signatures on that key?
- Fingerprint 93F3 8B13 B52C D8F0 FA8D 03B3 37AA 847C D697 5C17
- I've uploaded it to a bunch of keyservers around the Net.
- The person who builds the .iso image is not the one who checks the
contents of the .iso image. After you've been staring at the same
thing for long enough, it all starts looking alike.
- Does the bootloader have the right porteus.cfg?
- Does the bootloader have byzantium.jpg handy?
- Does porteus/modules/000-byzantium.xzm exist?
- Do these files exist in the root directory of the .iso image?
- README.txt
- README.NOW
- FAQ.txt
- packages.txt
- CHANGELOG
- Do all of the Porteus modules exist in porteus/base?
- 000-kernel.xzm
- 001-core.xzm
- 002-xorg.xzm
- 003-lxde.xzm
- 004-kde.xzm
- 005-kdeapps.xzm
- 006-koffice.xzm
- Do we really need to include this?
- 007-devel.xzm
- 008-firefox.xzm
- No .iso goes out without being tested, i.e., at least booted in a VM
and put through its paces.
- We need a process for loading the mirrors from a single distribution
point.
- Torrents are seeded prior to announcement.

View File

@@ -0,0 +1,29 @@
## Description
Share services running on a network with clients and other supernodes.
Each mesh node maintains a list of all of the services and web apps it's
running. That list is used to populate the service directory page of
each node. The trick lies in telling the other mesh nodes what you
happen to be running and what IP address it is. This is where being able
to announce what services you run to other mesh nodes will come into
play. We are using dns-sd via mdns/avahi/bonjour to announce services.
The "__byz__._tcp" service type is being used to distribute
services started by byzantium.
This is simplified somewhat by the fact that the mesh nodes' network IP
addresses are all 192.168/16.
## Suggestions
### Contents
- see dns-sd spec
### Method
- dns-sd via mdns/bonjour/avahi
### Format
- see dns-sd spec

View File

@@ -0,0 +1,3 @@
## Suggestions
- [icecast](http://icecast.org)

View File

@@ -0,0 +1,4 @@
## Sugestions
- Mumble/Murmur
- Asterix

View File

@@ -0,0 +1,8 @@
## Suggestions
- Squidproxy
- (i'm just pulling names out of my ass on this one - haxwithaxe)
- Squid's got potential. We might also want to consider something like
polipo because it'll do the same thing, plus filtering out junk to a
certain extent, plus it's a lot more lightweight than Squid is.
--The Doctor

View File

@@ -0,0 +1,6 @@
There was a discussion on the mailing list over whether or not it would
be worth putting a wiki on a Byzantium node. Seeing as how our use cases
involve mobile devices, it might not be worth including them because
they're not easy to edit from smartphones or MP3 players. It's easy to
browse a wiki with a good mobile skin, but not so easy to edit text.
Thus, I think we're tabling the notion until later.

View File

@@ -0,0 +1,43 @@
Goal - Reliably bridge two different and separate wireless networks
without using existing internet infrastructure.
Design goals 1) There should be a webserver on each network providing a
service of some kind (microblogs, web chat, file dump). 2) Nodes in
either network should be able to reach both webservers. 3) Nodes on one
network should be able to talk to nodes on the other network and vice
versa. 4) Networks should have at least 3-5 nodes each.
Tentative schedule is as follows:
Friday - 8:00pm Pizza and planning (any particular request should email
me off list). (COMPLETE!) Saturday - 9:00am Start showing up (IN
PROGRESS!) Saturday - 10:00am Divide into groups and start the sprint.
Sunday - 10:00am Start showing up. Sunday - 11:00am Finish the sprint!
Sunday - Evening Debriefing (I'll be taking extensive notes to update
the wiki).
Notes:
- [BATMAN](BATMAN "wikilink")
- [BATMAN-Advanced Setup](BATMAN-Advanced_Setup "wikilink")
- [Babel](Babel "wikilink")
- [Babel Setup](Babel_Setup "wikilink")
Plans! We're gonna have two teams each will implement a mesh network
using some existing mesh protocol. One team will be working with
BATMAN-Advanced and the other with BABEL. Each network will use at least
one openwrt device the rest will be laptops and netbooks.
from Wikipedia:
[Byzantine](http://en.wikipedia.org/wiki/Byzantine_fault_tolerance#Origin)
[From p2pfoundation.net](http://p2pfoundation.net/Mesh_Networks)
Interesting threads: [A few comments on the BATMAN routing
protocol](http://lists.alioth.debian.org/pipermail/babel-users/2008-August/000151.html)
[A few more comments on the BATMAN routing
protocol](http://lists.alioth.debian.org/pipermail/babel-users/2008-August/000156.html)
[Tweaking BATMAN-adv](http://www.open-mesh.org/wiki/batman-adv/Tweaking)
### Distributed DNS
see [this](Byzantium_Distributed_DNS "wikilink")

View File

@@ -0,0 +1,158 @@
Summary: Build at least one long-haul link to bridge two meshes.
Planning meeting: Thu Mar 3 2011 after the bike maintenance class (done)
Planning meeting \#2: Wed Mar 16 2011 after the elements of computing
class (doneish)
**Sprint Date: Fri-Sun March 25-27**
[Inventory](Byzantium_Sprint_2_Inventory "wikilink")
### Schedule
FRI: 8:00pm Pizza, sprint 1 recap, and prep (mostly ripping thing apart
and some assembly) SAT:
- Noon Brunch and final assembly followed by bench tests and midrange
tests depending on speed of success
- Dinner Time: Dinner outside the space. This must occur outside the
space.
- 9:00pmish? Discussion and general planning for Sunday optionally
followed by more testing/making
SUN:
- Noon Brunch prep for long distance tests followed by long distance
tests
- Dinner Time: Dinner outside the space. This must occur outside the
space.
- 9:00pmish? Discussion and planning for the next sprint
### Stuff to bring (proposed)
- FMRS/GMRS radios that you wouldn't mind hacking.
- Childrens' walkie-talkies. [User:Drwho](User:Drwho "wikilink") knows
where to buy cheap pairs of them locally.
- Webcams *that are known to work with Linux*. That's closer to black
magick than computer science, so do your homework first (or on your
smartphone while at the store). The feature to look for is called
[UVC](http://en.wikipedia.org/wiki/USB_video_device_class) though
webcam boxes still might not mention it.
- Laser pointers (the more exotic the colors the better). Buy them when
you find them. When you go looking for them you can never find them.
- Really bright LEDs
- Photocells, photoresistors, photodetectors.
- Microcontrollers. They may come in handy for modulating/demodulating
signals.
- Hackable wireless access points. Here are some
[examples](http://www.newegg.com/Product/ProductList.aspx?Submit=ENE&DEPA=0&Order=BESTMATCH&Description=dd+wrt)
that might work.
- old headphones/headsets/stereo audio cables and phone cords for
cutting up and making into modem to radio connectors
### Radio
- radio shack/hardware store high bandwidth unlicensed spectrum
- Hacked FRS/GMRS radios
- [Text messages over
walkie-talkies.](http://takethingsapart.blogspot.com/2010/07/note-before-constructing-device-such-as.html)
- [Forum post with some
ideas.](http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1270645507)
- Pros:
- cheap
- longish range (35mi allegedly)
- Cons:
- Need an automated PTT switch or two radios per node
- Develop improvised antennae to improve signal quality, distance
covered.
- anything + aluminium foil = bouncy bouncy for radio waves
The FCC has designated a number of channels in the 27 MHz band that can
be used for signaling and radio control. They are unnumbered and
in-between CB channels 1-13
([source](http://forum.servomagazine.com/viewtopic.php?f=1&t=2736))
### Optical
- Modified Ronja-like
- with lasers
- with balloon targets
- with lasers and balloon targets
- with lasers and self-adhesive mirrored decals.
- All Electronics Magazine had a couple of articles on building
lasercomm devices on the cheap. Somebody remind the Doctor to go
through his magazine collection.
- [How to make a simple laser
communicator.](http://www.make-digital.com/make/vol16/?pg=69#pg69) (I
do have this issue. Have bought parts to build a pair of transceivers.
--The Doctor)
- [Handbook of Optical Through-the-Air
Communications](http://www.imagineeringezine.com/files/air-bk2.html)
is a good read on the basics of an LED-based hardware setup, though
he's aiming at voice comms. (Elliot)
### Inspiration
- [Ronja](Ronja "wikilink")
### Homework
- read up on [Ronja](http://ronja.twibright.com/)
- read up on FMRS/GMRS
- read up on and talk to the HacDC Spaceblimp team about soundcard
modems: like [this](http://www.baycom.org/~tom/ham/soundmodem/) (also
available via apt [like so](Notes_on_Soundmodem "wikilink"))
- [Howto](http://www.linux-ax25.org/wiki/Soundmodem)(go here last it's
a bit short on soundmodem specific info)
- [Notes on Soundmodem](Notes_on_Soundmodem "wikilink")
- [Soundmodem in the
field.](http://www.qbjnet.com/packet.html#soundmodem)
- Read up on [AX.25](AX.25 "wikilink").
### Goals (proposed)
- Optimize for hackability. Could your average geek build a few of these
using junk around zir house and deploy them in an emergency situation?
- not a chance
- Determine the optimum speed in bits per second for a mesh-to-mesh
link.
- very crazy slow (we didn't bother measuring it was so slow)
- Measure the bandwidth of a point-to-point long haul connection at a
particular distance.
- again to slow to bother
- Determine the maximum practical distance for a long haul connection
between two meshes in an urban environment.
- didn't get that far
- Mathematically describe the way to maximize throughput with a minimum
number of nodes.
- didn't get that far
- Run an ssh session over whatever link is established.
- done
- Interact with a web page over whatever link is established.
- connection was too unstable to get this far
- Develop methods to minimize latency.
- tweak the source and transmitter volume A LOT until the it's perfect
- Determine the efficiency of the mesh routing protocol we settle on.
- didn't get this far
- How many active nodes per mesh can be reasonably supported before
connectivity breaks down?
- to be determined
### Apps running on Windbringer (laptop/node) to prove functionality
- [status.net v0.9.6](http://status.net/open-source)
- [Mediawiki](http://www.mediawiki.org/wiki/MediaWiki)
### Lessons Learned
- "how hard can it be" ... oops :(
- very. soundmodem is finicky and creates unstable connections 20%
packet loss at best 80-90% avg.
- Don't forget network latency of 35,500ms over a distance of eight
feet.
- "What could possibly go wrong?" ... oops :(
- everything
- [There are no experimental failures. There is only more
data.](http://drwho.virtadpt.net/archive/2011/04/14/project-byzantium-development-sprint-2)
Let's see how much of [Project FabFi](http://fabfi.fablab.af/) we can
make use of!

View File

@@ -0,0 +1,98 @@
Add the crap you have to this list even if someone else says they have
the same stuff.
Also, keep in mind that having spares around would be handy in case we
fry some stuff.
## haxwithaxe (chris)
- openwrt compatable routers....10
- FRS/GMRS handsets....2
- laser pointers....1
- webcams(in laptops)....2
- usb webcams....1(non hackable :( )
- microcontrollers....5
- teensy 2.0
- teensy++ 2.0
- mbed
- 2 jeenode v4
- photoresistor....(will buy \$20 worth before planing meeting \#2 ...
radioshack is cheaper than digikey ... who'da thunk)
- Things are weird like that these days.
- 7805....(will buy \$20 worth before planning meeting \#2 ... again ...
wtf radioshack is cheaper)
- Cheaper but more scarce. Buy them online, you'll have a better
chance of getting them, plus it saves on gas.
## The Doctor
- Wireless routers: 2
- FRS/GMRS handsets: three pairs
- Uniden GMR1235-2: one pair
- No headphone or mic jacks.
- Will have to drill into case and patch directly onto PCB.
- Will have to build a push-to-talk circuit, though we might be able
to get away with using two per node (one sending, one receiving,
on different channels).
- Audiovox GMRS602: three (one is still MIA, I think ITechGeek has it)
- [Manual](http://audiovox2.info/docs/common/GMRS602CH/GMRS602CH_OM.pdf)
- Has vox support.
- Has a combination headphone/mic jack.
- No hardware modifications will be required.
- Simplex operation.
- Supports CTCSS subcodes to multiplex channels.
- Plug pinout (held with the tip downward)
- Center: base of plug : common
- Left: middle of plug : phono
- Right: tip of plug : mic
- Walkie-talkies: 2, could get another pair, they're cheap
- Each uses a 9V battery
- Laser pointers: 4
- See Make Magazine \#16, Spy lasercomm device.
- Simple design.
- Exposed power leads by chopping up casings last night.
- Two work well, one is kind of dodgy, one appears to be DOA.
- Taped buttons down.
- Taped stacks of coin cells together.
- Spring is negative, inside of shell is positive.
- Assorted LEDs: 20
- Webcams (USB): 1
- Microcontrollers: 1 Arduino Diecimiela
- Photocells: need to order
- Photoresistors: Seven, need to order more
- Modems: 2
- TinyTrak 4 (used with Project Spaceblimp)
- Radio Shack HTX-200 HT
- Uniden BC92XLT scanner
- Encapsulated solar cells, 66mm x 95mm x 6mm
- Pre-wired, with exposed holes for probes as well.
- 0.5V @ 800mA: 1
- Didn't generate an appreciable amount of current last night.
- Physically larger than the other one.
- Might be unsuitable for use as a detector.
- 1.0V @ 200mA: 1
- Generates a decent amount of current.
- Reacted to room lighting and flashlight in the 'space last night.
- Might make a good optical sensor.
- High intensity white light LED flashlights (miniature): 2
- I've had this model open and played around with them a bit, they're
just high-intensity white light LEDs that run on 3VDC. We'll have
more trouble opening the casings than putting them to use.
- 1/8" monoaural phono plugs: 4
- Useful for plugging into laptops.
- 1/8" stereo phono plugs: 4
- Useful for plugging into radios.
- 14" jumper leads, with alligator clips on both ends: 10
- Audio output transformers, 1K ohms in, 8K ohms out (RS 273-1380): 4
- Assorted resistors, carbon film type, 1/4 watt, 5% tolerance: 500
- Note: this was the only way I could find the resistors needed to
build the lasercomm device. Fraggin' Radio Shack...
- Ultra-high brightness red LEDs, 10mm diameter: 4
- 7805 voltage regulator, 5 VDC, 1A: 3
- Assorted cadmium sulfide photocells (RS 276-1657): 5
- assorted rubber bands to hold transmit buttons down
- assorted six inch lengths of heatshrink tubing to protect wiring
splices, bundle coin cells into ad-hoc power packs
- batteries for hand-helds
- 741 op amp, mini DIP formfactor, 8 pins: 4
- could use these to build amplifiers

View File

@@ -0,0 +1,43 @@
**Sprint Dates: Fri 29 April 2011 - Sun 1 May 2011**
## Goals
- Revisit sprint 1
- Gather metrics to determine efficiency of protocols.
- Sizes of routing protocols' packets.
- Number of packets per second/minute/hour transmitted by each
protocol.
- Average amount of traffic during normal operation.
- Determine how many nodes can participate in a mesh before
responsiveness or bandwidth begin to degrade.
## Stuff To Bring
- anything that can run babel
- laptops/netbooks
- desktops with wireless cards
- openwrt compatible routers (if you're feeling lucky/adventurous)
## Homework
- install babeld on every machine you plan to bring to the sprint
- \[optional\] install a kernel with support for batman-adv on the same
machines (it's built into the kernel after version 2.6.38+ ) or build
the modules separate from the kernel
- readup on route and ip/ifconfig commands in linux
- readup on ipv6
## Experiments
- network density
- hypothesis: if the nodes are positioned very densely, then the
network quality will degrade.
- test: position nodes at increasing densities starting with evenly
distributed nodes at their maximum effective range, and run tests to
measure network quality at each level of density.
## Suggestions
- Babeld install guide
- LiveCD guide
- Twitter hashtag \#hacbyz ??

View File

@@ -0,0 +1,33 @@
possible projects:
- Revisit sprint 2 with different methods.
- Cantenna?
- Dialup?
- Pretty easy to test at HacDC by cross-connecting two modems and
dialing between them.
- CAT-5e or CAT-6 throws (thanks to John Gillmore)?
- Bluetooth?
- web replacement (for inside the mesh)
- Can already set up web servers on the mesh and deploy web apps.
- distributed status.net (is it already? - Yes through OStatus
<http://ostatus.org/> )
- Have a copy of status.net running on a mesh node right now.
- [Tahrir](https://github.com/sanity/tahrir/wiki)
- [rstat.us](http://rstat.us/)
- webmail
- May we should look into something that works like
[privacybox.de](https://privacybox.de/).
- chat proxies/interceptors?
- aim
- facebook
- gtalk (not really any work needed here)
- Could probably do it with an XMPP server and a web front-end.
- Asterisk server with web front and a couple of confs configured?
<!-- -->
- New project - something different.
- [OLSR](http://www.olsr.org/)?
E-mail your vote to byzantium \[at\] hacdc \[dot\] org with the subject
"Sprint 4 Topic".

View File

@@ -0,0 +1,7 @@
A recent and decent looking tutorial posted here for you and whoever
fills out this page!
- [tutorial on
avrfreaks](http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=89843)
[Category:AVR Tutorial](Category:AVR_Tutorial "wikilink")

View File

@@ -0,0 +1,116 @@
Part of the [AVR Tutorial](AVR_Tutorial "wikilink")
## Goals
In this lesson, you'll program the micro-controller version of "hello
world", letting you fire up your programmer, compiler, chip, LED, and
test them all out. You'll learn how to setup and use pins for output,
and along the way get some exposure to AVR-specific coding practice.
## The Circuit
Possibly the simplest circuit you can imagine: plug an LED into pins PB4
and ground. PB4 is going to go the positive leg of the LED to source
current across the LED and light it up.
If you want, you can include a current-limiting resistor inline with the
LED (around 100 ohms is good). I've done it both ways -- the AVR will
drive the LED at ~50mA, which will burn out the LED over the long run,
but for this demo, it'll be fine.
## The Code
<nowiki>
/* Blinker Demo */
#include <avr/io.h> /* Defines pins, ports, etc */
#define F_CPU 1000000UL /* Sets up the chip speed for delay.h -- 1MHz for Tiny13*/
#include <util/delay.h> /* Functions to waste time */
#define LED PB4 /* Defines pin PB4 for the LED. I
often incorporate a bunch of the circuit
info in the defines, which makes
porting the code to another chip
easier and reminds you of how to
hook it up. */
int main(void){
DDRB = _BV(LED); /* Data Direction Register B:
writing a one to the bit
enables output. More on the
_BV() macro in the next
lesson.*/
while(1){ /* the main loop, from which we never return */
PORTB = _BV(LED); /* Turn on the LED bit/pin in PORTB */
_delay_ms(400); /* wait */
PORTB &= ~_BV(LED); /* Turn off the LED bit/pin in PORTB */
_delay_ms(400); /* wait */
}
return(0); /* never reached */
}
</nowiki>
## Discussion
Even though this is a very short program, it provides a sketch of what
most AVR code looks like.
At the top is a bunch of includes, defines, and etc.
**io.h** defines all of the port and pin macros and is linked to the
individual chip's io header during compilation, which allows the same
code to work for different AVR chips. You pretty much always want to
include io.h.
The delay functions in **delay.h** are fairly generic, but depend on
knowing the chip's CPU clock speed to get the timing right. Also note
that the maximum delay you can request also depends on the chip's clock
speed. Read up in delay.h for details if you're interested. Practically
speaking, if you're asking it to delay for 600ms and it's only delaying
for 200ms, try calling the _delay_ms() function three times, each for
200ms.
After the defines and includes we get down to the **main()** function.
Most AVR main()'s have at least an initialization section and an
infinitely-repeating loop where the bulk of the chip's work gets done.
In this example, the **initialization section** just sets up the LED pin
for output by writing a 1 to the relevant bit in the Data Direction
Register for port B. When the chip is reset or powered on, all of the
input/output ports are initialized as inputs (DDRB = 0). We write a one
to the DDR do set it as output. More on the bitwise math in the next
lesson.
The **main loop** of the function then blinks the LED by alternately
driving the output pin high (the supply voltage, VCC) or low (GND, 0v),
and it does this forever, or until the chip is reset or powered off.
(The return(0) line is just there to stop the compiler from warning
about main() functions that don't return -- a requirement of GCC that
isn't really relevant to the AVR, but it doesn't hurt the code either.)
For a lot more examples of what you can do just by toggling one pin, see
the code over at [AVR Noise Toys](AVR_Noise_Toys "wikilink").
## Trouble?
Programmer woes:
Is the LED in the correct polarity? (Positive to pin PB4, negative to
GND).
Is avrdude complaining? Try unplugging and re-plugging your programmer
if it's a USB one. Sometimes it can get out of sync.
If avrdude's not working, you may also be having permissions problems.
Solutions include running giveio.bat for Windows or calling avrdude (or
the make command) with *sudo* for Linux if you didn't set up user
permissions for USB.
[Category:AVR Tutorial](Category:AVR_Tutorial "wikilink")

View File

@@ -0,0 +1,123 @@
The first step is to get set up with all the necessary hardware and
software to start making your controllers do your bidding.
## Programmer
A programmer needn't be super-fancy. In fact, you can get by with five
wires soldered to a parallel port plug if you'd like. [This
Instructable](http://www.instructables.com/id/Ghetto-Programming%3a-Getting-started-with-AVR-micro/)
steps through making a parallel port programmer. I'll probably make up a
cable or two and bring it in to the space if you'd just like to try it
out. Note that if you've got a breadboard, you can skip the step of
making a programming cradle and just plug the wires into the correct
pins on the AVR.
If you're getting a little more serious, spend \$22 and get a [USB-based
programmer from ladyada](http://www.ladyada.net/make/usbtinyisp/) or
make your own [usbtiny SPI
programmer](http://www.xs4all.nl/~dicks/avr/usbtiny/) for maybe
\$10-15ish. If you're making your own, you'll need to flash an AVR with
the supplied firmware, but you can do that with a parallel port
programmer or just ask one of us to hook you up.
This part may seem daunting -- it's not. Dive in or get someone to help
you. The Ladyada kit is a good first/second soldering project.
Indeed, if any of that seems too complicated, just connect some wires
from a parallel port to the right pins on the AVR (perhaps directly onto
your breadboard?) and you're started. There's an adapter for doing just
that floating around the lab somewhere. For more on that style of
programmer, see [AVR Tutorial: Bootstrapping the
AVR](AVR_Tutorial:_Bootstrapping_the_AVR "wikilink")
## Software
The standard toolchain consists of a GCC-based C cross-compiler, the
AVR-libc libraries, and the software to run your programmer: *avrdude.*
Feel free to write the C or assembler code using whatever editor you
like best.
**Windows:** The whole toolchain is put together nicely with
[WinAVR](http://sourceforge.net/projects/winavr). Download and install.
If you're using a parallel port programmer, you'll need to also run the
included *giveio.bat* file to get yourself permissions.
**Linux:** I'm most familiar with Ubuntu these days. As of 2008/04,
"sudo apt-get install avrdude avr-libc binutils-avr gcc-avr" will set
you up. Or fetch tarballs and compile it yourself. (I'll incluce
versions here in a few.)
**MAC:**
Wanted to note something quick about my MAC experience so far (Q): I
haven't really read the link to ada's site about programming AVR for MAC
but 'AVRMacPack' is really cool! In OSX it's a simple .pkg file to
install and drop into /Applications - then as long as you've installed
XCode (that comes with macbook in the 2nd CD 'Developer Tools' section)
they have this great little script in there called 'avr-project'. When
you run this little badass piece of code it creates a DIR for your
project called /FIRMWARE and three things:
`An .xcodeproj file - this is a template (with skeleton code) for writing your program in Xcode`
`Makefile template which ROCKS - all you have to do after is change the DEVICE you're`
`  using along with PROGRAMMER and FUSES. (Will LINK my file here for reference `
` email Q if i forget)`
`main.c file that is just a stupid simple C template to get you started`
In addition to the compiler and programming software, it's nice to have
an [AVR Makefile](AVR_Makefile "wikilink") that automates the
cross-compilation build process. Comment in/out the first few defines to
match your environment.
## Chips
So you're set to program, but you need a couple chips. [This page at
AVRFreaks](http://www.avrfreaks.net/index.php?module=Freaks%20Devices&func=viewDev)
has some of the specs and all the datasheets in one place, but it's a
bit overwhelming.
A shortlist of the coolest chips includes:
**Tiny13** -- Smallest and cheapest. 8 pins, 5 of them useful. 1k
program memory. Goes everywhere. Cheaper and more versatile than a 555
IC. Some hardware SPI/I2C support, but it's a pain to write for.
**Tiny45** -- Another 8-pin, but with a high-speed (64MHz!) PWM clock
and 4k of program memory. ~\$0.75 from Digikey. Can be made to run at
16MHz+ using its internal oscillator, making firmware USB a reality.
Some hardware SPI/I2C support like the Tiny13.
**Tiny2313** -- 20 pins. It's the cheapest/smallest unit with \> 5
usable pins. Hardware USART makes serial communication (e.g. with your
computer) reasonably simple, which can be sweet for debugging or
datalogging.
**Mega 48** -- 28 pins. All of the bells and whistles, with 4k program
memory. 6 ADC channels, buncha timers, SPI/I2C/USART communications.
They'll do what you want.
**Mega 88, 168** and beyond. A lot of power for under \$10. Overkill for
most of my (Elliot's) small projects, but when you need the memory, you
need the memory.
Maybe we could do a few group purchases to get up to Digikey's
price-break minimums. Interested? E-mail Elliot.
And while you're at the AVRFreaks page, download both the long and short
datasheets for whichever chips you end up buying. The short one has a
nice pinout diagram on page two, while the long one explains everything
you'll ever need to know.
## Misc. Extras
You're at least going to need some LED's to go blink. Pushbuttons are
nice for playing around with inputs. Photocells give your creations
sight. Motors and motor drivers give you legs. I'm sure there's more
than enough scrounge around the space to get everyone started.
[This
Instructable](http://www.instructables.com/id/Ghetto-Development-Environment)
details my current setup, and is a good start.
[Category: AVR Tutorial](Category:_AVR_Tutorial "wikilink")

View File

@@ -0,0 +1,392 @@
<nowiki>
# WinAVR Sample makefile written by Eric B. Weddington, J??rg Wunsch, et al.
# Modified (bringing often-changed options to the top) by Elliot Williams
# make all = Make software and program
# make clean = Clean out built project files.
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
# Microcontroller Type
MCU = attiny13
# MCU = attiny2313
# MCU = atmega8
# MCU = attiny45
# Target file name (without extension).
TARGET = LED_Demo
# Programming hardware: type avrdude -c ?
# to get a full listing.
# AVRDUDE_PROGRAMMER = dapa
AVRDUDE_PROGRAMMER = usbtiny
# AVRDUDE_PROGRAMMER = dt006
AVRDUDE_PORT = /dev/usb # not really needed for usb
#AVRDUDE_PORT = /dev/parport0 # linux
# AVRDUDE_PORT = lpt1 # windows
############# Don't need to change below here for most purposes (Elliot)
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c
# If there is more than one source file, append them above, or modify and
# uncomment the following:
#SRC += foo.c bar.c
# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
# Additional libraries
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
# -lm = math library
LDFLAGS += -lm
# Programming support using avrdude. Settings and variables.
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_FLAGS += -V
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
#Run while cable attached or don't
AVRDUDE_FLAGS += -E reset #keep chip disabled while cable attached
#AVRDUDE_FLAGS += -E noreset
#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x04:m #run with 8 Mhz clock
#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x21:m #run with 1 Mhz clock #default clock mode
#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x01:m #run with 1 Mhz clock no start up time
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
# Programming support using avrdude.
AVRDUDE = avrdude
REMOVE = rm -f
COPY = cp
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
# Default target: make program!
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
# $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
finished:
@echo $(MSG_ERRORS_NONE)
end:
@echo $(MSG_END)
@echo
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
# Display compiler version information.
gccversion :
@$(CC) --version
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
# Target: clean project.
clean: begin clean_list finished end
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
$(REMOVE) *~
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
</nowiki>
[Category: AVR Tutorial](Category:_AVR_Tutorial "wikilink")

View File

@@ -0,0 +1,14 @@
We've had two rounds of the AVR Microcontroller class at HacDC so far.
- If you're looking to learn, see the 2011 class. [AVR Microcontroller
Class 2011](AVR_Microcontroller_Class_2011 "wikilink") (happened in
Feb/March 2011)
<!-- -->
- If you're looking for specific old materials, we're keeping that
online too! [AVR Microcontroller Class
2009](AVR_Microcontroller_Class_2009 "wikilink") (the first run of the
class)
[Category:AVR_Class](Category:AVR_Class "wikilink")

View File

@@ -0,0 +1,180 @@
Syllabus, course material, homeworks, photos, etc from a previous
Introduction to Microcontrollers with AVR chips class can be found here.
For the current class, head on over to [AVR Microcontroller Class
2011](AVR_Microcontroller_Class_2011 "wikilink")
Also see (and contribute to) [Useful AVR
Links](Useful_AVR_Links "wikilink")
## Class 0: Introduction and Setup
What the AVRs are, what all the pins do, what they can do for you. Then
the toolchain: soldering together the programmer kits, getting the
software up and running.
Labs: building the kit and running a test LED flasher. (Almost all lab
today, little talk.)
**Resources**:
- Slides from class: [Media:class0.pdf](Media:class0.pdf "wikilink")
- ATmega48P Datasheets (get both): [ATmega48P Summary
Datasheet](http://www.atmel.com/dyn/resources/prod_documents/8025S.pdf)
and [The Long ATmega48P
Datasheet](http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf)
- Download the software part of the toolchain: For Mac folks: [AVR Mac
Pack](http://www.obdev.at/products/avrmacpack/index.html). For Windows
folks: [WinAVR](http://winavr.sourceforge.net/) and the Atmel IDE [AVR
Studio](http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725).
For Ubuntu linux folks: "sudo apt-get install build-essential avr-libc
binutils-avr gcc-avr avrdude"
- Programmer and mega48 pinouts:
![Image:FFVH7HBF5UO1JMR.MEDIUM.jpg](FFVH7HBF5UO1JMR.MEDIUM.jpg "Image:FFVH7HBF5UO1JMR.MEDIUM.jpg")
<img src="Screenshot-ATmega48-88-168.png"
title="Screenshot-ATmega48-88-168.png" width="320"
alt="Screenshot-ATmega48-88-168.png" />
## Class 1: Programmer Hookup and Hello World LED Blinking
Lecture on how the programmer works -- simple serial interface basics.
Some basics on avrdude / GCC tools. Hook up the programming interface
wire-by-wire to the Mega48 chip and flash it with a simple program. Then
hook up an LED to the output port and watch it blink!
**Resources**
- [helloWorld.zip](http://elliotwilliams.org/avrclass/helloWorld.zip)
<!-- -->
- Class notes: [Media:class1.pdf](Media:class1.pdf "wikilink")
<!-- -->
- Wiring Diagram:
<img src="wiring.png" title="wiring.png" width="520" alt="wiring.png" />
**Homeworks**
- Your kit has 10 resistors and 10 LEDs. If you want, you can solder
them together to make \[AVR: LED Blinkenlights\].
<!-- -->
- If you didn't already, make labels for the signal wires. Think of an
easy way to remember which go where (into the 6-pin or 10-pin header).
And/or make permanent programmer "pigtails" by soldering the signal
wires to a 2x3 header in the correct orientation (headers available in
the HacDC hackersmart for pennies).
<!-- -->
- Play around with the delays in the LED_Demo.c code. Make the blinking
faster or slower. Experiment with on time and off time.
## Class 2: Outputs: Bit Math, Cylon Eyes, and PWM Fading
How to make chips speak to the outside world, pin-by-pin. Enough C
bitwise-math operations to make it work. Pulse-width modulation.
Labs: Visualizing bytes, Cylon eyes, and dimming LED's. Extra credit:
cross-fading cylon eyes!
**Resources**
- [registers.zip](http://elliotwilliams.org/avrclass/registers.zip)
- [cylonEyes.zip](http://elliotwilliams.org/avrclass/cylonEyes.zip)
- [introPWM.zip](http://elliotwilliams.org/avrclass/introPWM.zip)
- Class notes: [Media:class2.pdf](Media:class2.pdf "wikilink")
**Homework**
- So you can make various lights blink and/or dim. Now what?
Cross-fading cylon eyes? Patterns? Something groovy?
<!-- -->
- Note that you've got an 8-bit display if you're willing to read out
numbers in binary. Useful for debugging later on, for sure. What else?
Binary clock? Simple upcounter? Display "random" numbers?
<!-- -->
- If you could swing it around, you'd be on your way to a [POV
toy](http://www.ladyada.net/make/minipov3/index.html).
## Class 3: Inputs: Buttons
Gather data from the world. The lecture ended up being just on digital
input.
Labs: One note organ [Media: class3.pdf](Media:_class3.pdf "wikilink")
## Class 4: Inputs: Debouncing and Analog-to-Digital conversion (ADC)
This class, we'll get to debouncing our button input, and reading in
continuous voltages
For more info on ADC stuff, see [this
note](http://www.avrfreaks.net/index.php?module=Freaks%20Files&func=viewFile&id=383&showinfo=1)
Labs: pushbutton organ, light-dependent theremin.
[Media: class4.pdf](Media:_class4.pdf "wikilink")
[Media:
debouncedMusicbox.zip](Media:_debouncedMusicbox.zip "wikilink")
[Media:
lightDependentTheremin.zip](Media:_lightDependentTheremin.zip "wikilink")
## Class 5: Serial I/O and Interrupts I
Laptop, meet AVR. AVR, laptop. Serial communication (plus serial-to-USB
cable) lets you connect your micro to about anything, including your
computer. Interrupts let the hardware (pins, serial port, timers, etc)
call run functions for you, with the main body of your code picking up
where you left off. Combine the two, and you can get pushbutton control
of an AVR from your laptop keyboard.
[Media: helloSerial.zip](Media:_helloSerial.zip "wikilink")
[Media: helloInterrupts.zip](Media:_helloInterrupts.zip "wikilink")
[Media: class5.pdf](Media:_class5.pdf "wikilink")
And as a bonus, if you run Python,
[serialScope.py](http://www.jerkpile.com/serialScope.py) provides a
helpful debugging tool and an example of how simple USB/Serial code can
be on the laptop side. Coupled with on-chip ADC, it's a (low speed,
sideways) serial oscilloscope. Otherwise, a handy debugging aide.
**Homework:** Take the scale.h from last class, and using input from
your laptop, make a full keyboard out of the AVR plus speaker. Or write
a ROT-13 device that takes your input and returns the encoded version.
## Class 6: Timers/Counters and Interrupts II
Timers/counters let you do precision things with time. Fix up that nasty
audio tone from the LDR theremin. Precise timing allows you to use LED's
as light sensors. It's also good for making quality analog output and
for directing servo motors. Interrupts + timers = deluxe PWM. Or give
your AVR a solid internal timebase. (You know you want to.) In this
class, we'll scratch the surface of what you can do with timers.
[Media: timerPWM.zip](Media:_timerPWM.zip "wikilink")
[Media:
timerPWM_ctc_hardware_toggle.c](Media:_timerPWM_ctc_hardware_toggle.c "wikilink")
## Extra Credit: I2C
Talked a bit about the I2C serial protocol -- a light-weight serial
multi-master bus using two wires (plus ground) and capable of addressing
127 different devices. Great for connecting to all sorts of peripherals.
Demoed an \$20 I2C 3-axis accelerometer using bare-minimum I2C code,
with none of the error-checking that the pro's would do. But it works a
charm. That's why it's called hacking, baby!
[Media: i2c_class.pdf](Media:_i2c_class.pdf "wikilink")
[Media: i2c_accelerometer.zip](Media:_i2c_accelerometer.zip "wikilink")
[Category:AVR_Class](Category:AVR_Class "wikilink")

View File

@@ -0,0 +1,171 @@
Syllabus, course material, homeworks, photos, etc from an Introduction
to Microcontrollers with AVR chips class can be found here.
Also see (and contribute to) [Useful AVR
Links](Useful_AVR_Links "wikilink") For info about the kit:
[Avr2011_kit](Avr2011_kit "wikilink") and [Avr2011 Programming The
Kit](Avr2011_Programming_The_Kit "wikilink") Or check out the old
version of the course [AVR Microcontroller Class
2009](AVR_Microcontroller_Class_2009 "wikilink")
## Class 0: Introduction and Setup
Hello World!
**Covers**: What the AVRs are, what all the pins do, what they can do
for you. A brief tour of the toolchain, and getting your firmware up and
running on the chip. Reading the datasheets. How to make chips speak
digital to the outside world, pin-by-pin. Just enough C programming
fundamentals to make it work.
**Slides:**
[Media:avr2011_class0.pdf](Media:avr2011_class0.pdf "wikilink")
**Lab**: Building the kit and running a test LED flasher.
For assembly instructions and more details on the class kit, see
[Avr2011_kit](Avr2011_kit "wikilink"). How to program the class kit, see
[Avr2011 Programming The Kit](Avr2011_Programming_The_Kit "wikilink").
**Demo Code**: [Media: LED_Demo.tgz](Media:_LED_Demo.tgz "wikilink")
**Homework**: More soldering, and Cylon Eyes. Optional extra credit:
Simple POV toy (hint, make the timing around 2ms between updates and
swing your arms). Super bonus points: Make a neat POV toy.
**OPC (Other People's Code)**:
[Media: Pov demo.tar.gz](Media:_Pov_demo.tar.gz "wikilink") An example
POV toy. This contains 4 different patterns; two diamonds, a trapezoid
and a **smiley face**. Also contains examples of using a character array
to drive the POV toy, as well as use of constants to determine how the
program runs. - Will
**Resources**:
- ATmega48P Datasheets (get both): [ATmega48P Summary
Datasheet](http://www.atmel.com/dyn/resources/prod_documents/8025S.pdf)
and [The Long ATmega48P
Datasheet](http://www.atmel.com/dyn/resources/prod_documents/doc8025.pdf)
- Bootloader appnote
[1](http://www.atmel.com/dyn/resources/prod_documents/doc1644.pdf)
- [Installing AVR Toolchain](Installing_AVR_Toolchain "wikilink")
<figure>
<img src="Screenshot-ATmega48-88-168.png"
title="Screenshot-ATmega48-88-168.png" width="500" />
<figcaption>Screenshot-ATmega48-88-168.png</figcaption>
</figure>
## Class 1: Digital and Serial I/O
Interfacing with the real world is the soul of microcontrolling.
**Covers**: Gathering simple data from the world, and learn how to spit
it back out. A serial link with your computer enables all sorts of
tricks, and enables the microcontroller version of printf debugging.
Some boolean logic comes in handy here. Along the way, we'll learn a
bunch about debouncing switches.
**Slides**:
[Media:avr2011_class1.pdf](Media:avr2011_class1.pdf "wikilink")
**Labs**: More Cylon Eyes, All sorts of button-pressing demos,
ASCII-to-binary keymapper, General-purpose serial LED display
**Demo Code**: [Media:
avr2011_class1_demoCode.tgz](Media:_avr2011_class1_demoCode.tgz "wikilink")
**HW**: Ghetto logic probe and analyzer: read input on PORTC, display
values on the LEDs, write out the value of PINC over serial,
interpret/log/whatever using your laptop
**OPC (Other People's Code)**: [microTweeter](microTweeter "wikilink") a
silly little program to interface twitter with a microcontroller. It is
designed to post quotes from a file when a button is pressed on a
microcontroller. This was done as learning experience with python,
serial communications and social media integration. -Will G.
**Resources**:
- More than you ever wanted to know about debouncing: [A Guide to
Debouncing](http://www.ganssle.com/debouncing.htm)
## Class 2: ADC and PWM: "Analog" I/O
**Covers**: Learn about ways to fake analog data into and out of your
microcontroller. We'll learn how to switch logic states fast to emulate
an analog output, and how to use the built-in analog-to-digital
converters to measure the complex real-world.
**Slides**:
[Media:avr2011_class2.pdf](Media:avr2011_class2.pdf "wikilink")
**Demo Code**: [Media:
avr2011_class2_demoCode.tgz](Media:_avr2011_class2_demoCode.tgz "wikilink")
**Labs**: Dimming LEDs, light-level meter, ghetto oscilloscope
**Homework**: Auto-dimming LED or basic light-level data logger
**Resources**: You'll need to solder up the light sensors: [follow these
directions](http://wiki.hacdc.org/index.php/Avr2011_kit#Adding_the_Light_Sensor_for_Class_2_.28ADC.29)
## Class 3: Interrupts
**Covers**: Interrupts call subroutines when certain conditions are
true. They take a lot of the programming burden off your shoulders,
enable the AVR to syncronize to external devices, and are great for
super-fast response applications.
**Slides**: [Media:
avr2011_class3.pdf](Media:_avr2011_class3.pdf "wikilink")
**Demo Code**: [Media:
avr2011_externalInterrupt.tgz](Media:_avr2011_externalInterrupt.tgz "wikilink"),
[Media:
avr2011_serialInterrupt.tgz](Media:_avr2011_serialInterrupt.tgz "wikilink")
**Labs**: Bunch of pushbutton interrupt routines, light/dark transition
sensor, non-blocking serial I/O
**Homework**: Response-time-tester Game or "improved" interrupt-driven
ghetto oscilloscope
**Resources**:
## Class 4: Timers and Counters
**Covers**: Timers and counters let you time and count events! Up until
now, we've been doing a lot with for loops and delays to count the
passing of time. It's much easier and more precise to let the hardware
do the timing. When you add interrupts and timers together, the world
becomes your oyster!
**Slides**: [Media:
avr2011_class4.pdf](Media:_avr2011_class4.pdf "wikilink")
**Demo Code**: [Media:
avr2011_counterClock.tgz](Media:_avr2011_counterClock.tgz "wikilink")
[Media:
avr2011_counterPWM.tgz](Media:_avr2011_counterPWM.tgz "wikilink")
**Labs**:
**Homework**: Response-time-tester Game or tone generator
## Class 5: Flash, EEPROM, I2C, USB, SD Cards, GPS, and Life After AVR Class
**Covers**: First, we'll cover using the internal flash memory and
EEPROM for data storage. Then I'll demo how to use other people's
code/libraries and tie it in to our packages, interfacing with all sorts
of random devices for fun and profit. The final (optional) trick will be
turning your classboard into a standalone AVR programmer so that you can
program raw chips yourself, and outgrow the bootloader.
**Labs**:
**Homework**:
[Category:Microcontrollers](Category:Microcontrollers "wikilink")
[Category:AVR_Class](Category:AVR_Class "wikilink")

View File

@@ -0,0 +1,150 @@
## Noise Toys
To turn a blinky LED program into a simple square-wave synthesizer, plug
a speaker into PB4 and ground (where the LED was before), and turn up
the frequency.
The code is largely the same, just toggling a pin on and off, but now
doing it at different speeds (for different tones) and for differing
time periods (notes duration).
## squareOne.c
<nowiki>
/* Makes a quick square wave for noise-making experimentation. */
#include <inttypes.h>
#include <avr/io.h>
#define F_CPU 16000000L /* really? tested with the scope for Tiny45 */
#include <util/delay.h>
void init(void){
DDRB |= _BV(PB4);
}
int main(void){
uint8_t i, j, k;
uint16_t wavelength;
init();
while(1){
for (k = 10; k > 3; k--){ /* pitch multiplier: makes different notes */
wavelength = 20*k;
for (j=0; j < 200/k; j++){
/* number of cycles at each pitch: controls speed of loop */
PORTB |= _BV(PB4);
for (i=0; i < wavelength; i++) /* on for 20*wavelength microsecs */
_delay_us(20); /* loop needed b/c each call to
the delay function can't
delay all that long before
it overflows */
PORTB &= ~_BV(PB4); /* off for 20*wavelength microsecs */
for (i=0; i < wavelength; i++)
_delay_us(20);
}
}
}
}
</nowiki>
## spacePhaser.c
<nowiki>
/* Starts with a very short pulse (high-frequency) and drops rapidly. */
#include <inttypes.h>
#include <avr/io.h>
#define F_CPU 16000000L /* really? tested with the scope */
#include <util/delay.h>
void init(void){
DDRB |= _BV(PB4);
}
int main(void){
uint8_t i, j, k;
uint16_t wavelength;
init();
while(1){
for (k = 3; k < 120; k++){ /* pitch multiplier: makes different notes */
wavelength = k;
for (j=0; j < 200/k; j++){
/* number of cycles at each pitch: controls speed of loop */
PORTB |= _BV(PB4);
for (i=0; i < wavelength; i++) /* on for 20*wavelength microsecs */
_delay_us(20); /* loop needed b/c each call to
the delay function can't
delay all that long before
it overflows */
PORTB &= ~_BV(PB4); /* off for 20*wavelength microsecs */
for (i=0; i < wavelength; i++)
_delay_us(20);
}
}
for (j=0; j < 60; j++){ /* with delay between shots */
for (i=0; i < 250; i++)
_delay_us(200);
}
}
}
</nowiki>
## chaosEngine.c
<nowiki>
/* Now the frequency of the wave is a crazy function. */
#include <inttypes.h>
#include <avr/io.h>
#define F_CPU 16000000L /* really? tested with the scope */
#include <util/delay.h>
void init(void){
DDRB |= _BV(PB4);
}
int main(void){
uint8_t i, j, k;
uint16_t wavelength;
init();
while(1){
wavelength = (13 * wavelength + 1) % 123 + 100;
for (j=0; j < 30; j++){
/* number of cycles at each pitch */
PORTB |= _BV(PB4);
for (i=0; i < wavelength; i++) /* on for 20*wavelength microsecs */
_delay_us(20); /* loop needed b/c each call to
the delay function can't
delay all that long before
it overflows */
PORTB &= ~_BV(PB4); /* off for 20*wavelength microsecs */
for (i=0; i < wavelength; i++)
_delay_us(20);
}
}
for (j=0; j < 60; j++){ /* longer delay between shots */
for (i=0; i < 250; i++)
_delay_us(200);
}
}
</nowiki>
[Category: AVR Tutorial](Category:_AVR_Tutorial "wikilink")

View File

@@ -0,0 +1,71 @@
Warning: this page is a nearly-completely incomplete skeleton. For the
class (and supporting materials) that actually came to be, see [AVR
Microcontroller Class](AVR_Microcontroller_Class "wikilink"). This
section needs a lot of development, so if you're in the mood please feel
free.
There's a lot of good information out there about programming
micro-controllers, but I couldn't find a good, stepwise, lesson-based
tutorial. Since a bunch of the HacDC folks are just learning their way
around, I thought it'd be fun to put together a mini-course based on the
Atmel AVR platform and GNU-GCC. The idea is to have each lesson doable
in an hour or so
What follows is a mix of how-to and code snippets and peoples'
experience walking through it all. If you're following along and want to
contribute, feel free.
[Useful AVR Links](Useful_AVR_Links "wikilink")
## The Basics (take these in order):
[AVR Lesson: Setup](AVR_Lesson:_Setup "wikilink"): Get a programmer, a
chip, the software, and some parts
[AVR Lesson: Output Pins I](AVR_Lesson:_Output_Pins_I "wikilink"): Basic
output and LED Blinky example
[AVR Lesson: Output Pins II](AVR_Lesson:_Output_Pins_II "wikilink"):
Binary math and Cylon Eyes
[AVR Lesson: Input Pins](AVR_Lesson:_Input_Pins "wikilink"): Debouncing
and Button-triggered Cylon Eyes
[AVR Lesson: Timers](AVR_Lesson:_Timers "wikilink"): Clocks and how to
use them.
[AVR Lesson: Interrupts](AVR_Lesson:_Interrupts "wikilink"):
[AVR Lesson: Pulse-width
Modulation](AVR_Lesson:_Pulse-width_Modulation "wikilink"): An easy way
to get analog outputs. Dimming LEDs or Crossfading Cylon Eyes
[AVR Lesson: Analog-digital
Conversion](AVR_Lesson:_Analog-digital_Conversion "wikilink"):
Automatical Dimming Night Light
## Advanced Material (mix-n-match):
[AVR Lesson: Watchdog Timers](AVR_Lesson:_Watchdog_Timers "wikilink"):
[AVR Lesson: I2C](AVR_Lesson:_I2C "wikilink")
[AVR Lesson: Using Program
Memory](AVR_Lesson:_Using_Program_Memory "wikilink"):
[AVR Lesson: Motor Driving](AVR_Lesson:_Motor_Driving "wikilink"):
[AVR Lesson: Servo Control](AVR_Lesson:_Servo_Control "wikilink"):
[AVR Lesson: State Machines](AVR_Lesson:_State_Machines "wikilink"):
[AVR Lesson: Sound](AVR_Lesson:_Sound "wikilink"):
[AVR Lesson: Serial I/O](AVR_Lesson:_Serial_I/O "wikilink"):
[AVR Lesson: USB](AVR_Lesson:_USB "wikilink"):
[AVR Lesson: Interfacing with External
Memory](AVR_Lesson:_Interfacing_with_External_Memory "wikilink")
[Category: AVR Tutorial](Category:_AVR_Tutorial "wikilink")

View File

@@ -0,0 +1,36 @@
So you want to program an AVR, but you don't have a programmer? Do you
have a parallel port? Then fear not!
The AVR chips are set up to flash their program memory through a serial
connection with the host computer, so programming them is mostly a
matter of getting the right lines to the chip, with the rest taken care
of by the AVRdude software.
The simplest way to get started is with one of the parallel-port
"programmers". The basic procedure is to a) look at the docs for
AVRdude's various parallel port adapters, b) look at the pinouts for the
chip you're using, and c) wire the right pins on the parallel port to
the right pins on your AVR.
For instance, the DAPA (Direct AVR Parallel Access) "programmer" makes
the following connections between the parallel port pins and the AVR:
| Parallel Pin | AVR |
|--------------|-------|
| 1 | SCK |
| 2 | MOSI |
| 11 | MISO |
| 16 | RESET |
| 20 | GND |
| 21 | GND |
Connect the wires and test it out! Type **avrdude -n -v -p tiny13 -c
dapa** and you should see your part recognized and the fuse settings
displayed. (Make sure to substitute your part name for tiny13. Type
**avrdude -p help** to see the list of supported parts.)
For a much more complicated boot strap technique, there is the [secure
bootloader](secure_bootloader "wikilink") that uses AES encrypted
firmware images.
[Category: AVR Tutorial](Category:_AVR_Tutorial "wikilink")

View File

@@ -0,0 +1,35 @@
Cut and paste the following into a file called LED_Demo.c
/* Blinker Demo */
#include <avr/io.h> /* Defines pins, ports, etc */
#define F_CPU 8000000UL /* Sets up the chip speed for delay.h */
#include <util/delay.h> /* Functions to waste time */
#define LED PB0 /* Defines pin PB0 for the LED. I
often include a bunch of the circuit
info in the code this way, which
makes porting the code to another
chip easier and reminds you of how to
hook it up. */
void main(void){
DDRB = _BV(LED); /* Data Direction Register B:
writing a one to the bit
enables output. More on the
_BV() macro in the next
lesson. */
while(1){ /* the main loop, from which we never return */
PORTB = _BV(LED); /* Turn on the LED bit/pin in PORTB */
_delay_ms(400); /* wait */
PORTB = 0; /* Turn off everything(!) on PORTB */
_delay_ms(400); /* wait */
}
}
[Category:Microcontrollers](Category:Microcontrollers "wikilink")

View File

@@ -0,0 +1,400 @@
Cut and paste the following into a file called Makefile in the same
directory as the LED_Demo.c
# WinAVR Sample makefile written by Eric B. Weddington, J??rg Wunsch, et al.
# Modified (bringing often-changed options to the top) by Elliot Williams
# make all = Make software and program
# make clean = Clean out built project files.
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
# Microcontroller Type
#MCU = attiny13
# MCU = attiny2313
# MCU = atmega8
# MCU = attiny45
# MCU = atmega88
MCU = atmega88
# Target file name (without extension).
TARGET = LED_Demo
# Programming hardware: type avrdude -c ?
# to get a full listing.
# AVRDUDE_PROGRAMMER = dapa
#AVRDUDE_PROGRAMMER = usbtiny # Note: have to use sudo make for USB
# AVRDUDE_PROGRAMMER = dt006
AVRDUDE_PROGRAMMER = avr109
#AVRDUDE_PORT = /dev/usb # dummy, but it's fun :)
#AVRDUDE_PORT = /dev/parport0 # linux
# AVRDUDE_PORT = lpt1 # windows
AVRDUDE_PORT = /dev/ttyUSB0
BAUD_RATE = 9600
############# Don't need to change below here for most purposes (Elliot)
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c
# If there is more than one source file, append them above, or modify and
# uncomment the following:
#SRC += foo.c bar.c
# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
# Additional libraries
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
# -lm = math library
LDFLAGS += -lm
# Programming support using avrdude. Settings and variables.
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_FLAGS += -V
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
#Run while cable attached or don't
AVRDUDE_FLAGS += -F # -E reset #keep chip disabled while cable attached
#AVRDUDE_FLAGS += -E noreset
## For AVR109 Bootload Programmer
AVRDUDE_FLAGS += -b $(BAUD_RATE)
#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x04:m #run with 8 Mhz clock
#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x21:m #run with 1 Mhz clock #default clock mode
#AVRDUDE_WRITE_FLASH = -U lfuse:w:0x01:m #run with 1 Mhz clock no start up time
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
# Programming support using avrdude.
AVRDUDE = avrdude
REMOVE = rm -f
COPY = cp
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
# Default target: make program!
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
finished:
@echo $(MSG_ERRORS_NONE)
end:
@echo $(MSG_END)
@echo
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
# Display compiler version information.
gccversion :
@$(CC) --version
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
# Target: clean project.
clean: begin clean_list finished end
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
$(REMOVE) *~
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
[Category:Microcontrollers](Category:Microcontrollers "wikilink")

View File

@@ -0,0 +1,105 @@
# Software:
If you haven't already installed the laptop-side software toolchain, see
[Installing AVR Toolchain](Installing_AVR_Toolchain "wikilink") and come
on back.
# Hookup:
- your laptop
- an FTDI cable
- the classboard, populated with chip and FTDI header
The chips we use in class are pre-flashed with a bootloader, which means
that you can program them over the AVR's serial port.
Plug the FTDI cable into the board -- black wire to GND.
<figure>
<img src="_avr2011_cable_hookup.jpg" title="_avr2011_cable_hookup.jpg"
width="500" />
<figcaption>_avr2011_cable_hookup.jpg</figcaption>
</figure>
# Getting the Board Into Bootloader Mode
When the chip starts up, the bootloader program checks if the "B" button
(connected to PD2) is pressed. If the button is pressed, it sits and
waits for programming data to come in over the serial line. If the
button isn't pressed, it starts your program. So, what you want to do is
reset the chip while the "B" button is pressed.
To get the chip into ready-to-program Bootloader Mode:
- Hold down the "B" button
- Tap the "A" button (RESET)
- Now you can release the "B" button
You can tell you're in bootloader mode because your normal code won't be
running. If you had and LED on or blinking, for instance, it won't be
now.
# Programming the Chip
- Get the chip into bootloader mode
- While you're in the directory with your code and the Makefile, type
"make" or "sudo make" into the terminal
- Your code will compile, and it will upload your code to the chip
- The chip will automatically reset and start running your program
If all is well, you will see
avrdude: erasing chip
avrdude: reading input file "LED_Demo.hex"
avrdude: input file LED_Demo.hex auto detected as Intel Hex
avrdude: writing flash (156 bytes):
Writing | ################################################## | 100% 0.21s
avrdude: 156 bytes of flash written
avrdude: verifying flash memory against LED_Demo.hex:
avrdude: load data flash data from input file LED_Demo.hex:
avrdude: input file LED_Demo.hex auto detected as Intel Hex
avrdude: input file LED_Demo.hex contains 156 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.19s
avrdude: verifying ...
avrdude: 156 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done. Thank you.
# If there are errors...
Common problems and their solutions include:
- Permissions to write to USB port. Solution: keep typing "sudo make" or
add yourself to the USB output group:
Ubuntu: sudo usermod -a -G dialout yourNameHere
<!-- -->
- /dev/ttyUSB0 not found. Is the FTDI cable plugged in? Try "lsusb" to
see if it's there. Try "ls /dev/ttyUSB\*" to see if it's registered as
USB1. Edit Makefile accordingly, and remember that you'll probably
have to change it back later.
<!-- -->
- Bugs in your code -\> failure to compile. If you get something like:
`Compiling: LED_Demo.c`
`LED_Demo.c: In function ???main???:`
`LED_Demo.c:22: error: expected ???;??? before ???while???`
`make: *** [LED_Demo.o] Error 1`
you have an error in your code that's preventing compilation. Read the
error output for hints, tweak your code, and try again. (In this case,
I left out a ';' in line 20.)
[Category:AVR_Class](Category:AVR_Class "wikilink")

View File

@@ -0,0 +1,244 @@
### Kit Contents
You will need:
1\) AVR ATMega microcontroller 2) AVR Classboard printed-circuit-board
3) Eight resistors (~120 ohm) 4) Eight LEDs (I like the small square
ones) 5) 1 uF capacitor 6) 0.1 uF capacitor 7) Two push buttons 8) 6-pin
header to connect the FTDI serial cable 9) A small-signal diode for
backward-power protection (optional, but certainly won't hurt)
<figure>
<img src="_avr2011_kitContents.jpg" title="_avr2011_kitContents.jpg"
width="500" />
<figcaption>_avr2011_kitContents.jpg</figcaption>
</figure>
(D'oh! I left the AVR out of the photo. You should have one.)
### A Brief Tour of the Board
Before you start assembling anything, have a look at the printed circuit
board.
<figure>
<img src="avr2011_pcb.jpg" title="avr2011_pcb.jpg" width="500" />
<figcaption>avr2011_pcb.jpg</figcaption>
</figure>
Big and bold in the center is the location for the AVR chip. Notice the
notch in the silkscreen at one end? That corresponds to a notch on the
top of the AVR chip, and helps you get it in the right orientation when
the time comes.
Just to the outside of the AVR chip itself, you'll see two rows of holes
labelled for the port/pin combinations that appear in the datasheet. For
instance, just below the chip see the two rows labelled PORTD, and PD0
-- PD7. See how there are tiny white lines connecting the two rows of
holes, pairwise? Those indicate that the two holes are electrically
connected to each other. This was a convenience -- you can solder two
things easily to each AVR pin. One side of the chip has PD0-PD7, the
other has PB0-PB7 and PC0-PC6.
Just outside of the AVR connection points, you'll see two more rows of
holes, labelled VCC and GND respectively. GND is connected to the
board's ground plane, and so is at 0V. VCC is connected to the board's
power supply and is whatever voltage you're using to drive the whole
mess -- In class, I'll refer to this as VCC or I usually just call this
5V.
And finally, at the edge of the board is another pair of rows of holes.
These are electrically connected in pairs, and are just there to allow
you to connect things together easily. For the LED array, we'll use
these paired holes to connect the resistor to the positive end of the
LED.
Other stuff:
To the left of the AVR, there are holes for two buttons, a protection
diode, power-supply buffering capacitors, an optional power LED and its
resistor, a 3x2 SPI programming header, and the 6-pin inline FTDI cable.
Below the AVR chip area and to the right, there's more prototyping space
-- just sets of holes electrically connected to each other in ways to
facilitate soldering stuff up.
The power LED and it's associated LED are optional and included for your
creative use/abuse. Everyone should solder the coolest LED they can find
in here, with a 100-1k ohm resistor, depending on how bright you want
it.
And those white areas? They're for writing your initials on. Or notes.
Tiny, little notes.
### Assembling the Kit
0\) If you're new at soldering (or even if you're not) go spend seven
minutes with [the best soldering video
ever](http://www.youtube.com/watch?v=I_NU2ruzyc4).
1\) To get your feet wet soldering, install the two capacitors. They can
go in either capacitor position, and are non-polarized (can go in either
way). When you clip off the leads from the capacitors, save the wire for
the next step.
2\) Now install the two pushbuttons. They're oblong, but there's no top
or bottom.
3\) Solder in the protection diode. Notice that it's polarized, with a
black band on the diode itself corresponding to the little band in the
silkscreen.
4\) Above the buttons, there are two pairs of holes -- these connect the
button to the pin on the AVR when they're jumpered together. (I did this
for flexibility so that you could connect the buttons up to other pins
later as you wish.) Take two of the leads you saved in step 1) and
connect each pair of holes together.
<figure>
<img src="avr2011_jumpers.jpg" title="avr2011_jumpers.jpg"
width="500" />
<figcaption>avr2011_jumpers.jpg</figcaption>
</figure>
5\) Solder in the 6-pin header for the FTDI cable. Rather than doing it
the way I did (which covers the labels on the circuit board) why not
mount the header on the bottom side like Ed did?
<figure>
<img src="avr2011_ftdiInstall.jpg" title="avr2011_ftdiInstall.jpg"
width="500" />
<figcaption>avr2011_ftdiInstall.jpg</figcaption>
</figure>
6\) Now start on the LEDs -- in PORTB pins PB0 through PB7. They _are_
polarized, and you'll notice that one lead is longer than the other. The
short lead gets connected to ground, while the long lead will eventually
connect through a resistor to the AVR output pins. (Resistors soldered
in next step.) Place the LEDs so that their short leads are in the
ground strip (labelled GND), and the long lead is in one of the outside
rows of hookup holes. Orientation matters here. Double-check it before
soldering?
<figure>
<img src="avr1022_rowLEDs.jpg" title="avr1022_rowLEDs.jpg"
width="500" />
<figcaption>avr1022_rowLEDs.jpg</figcaption>
</figure>
For aligning the LEDs, I had success putting them all face-down on the
table, and using the fact that they have rectangular faces. Pro-tip:
solder one pin on each LED, make sure they're in a nice line, and
re-heat any that you need to wiggle into place. Then solder in the
second pin on each LED.
<figure>
<img src="avr2011_aligningLEDs.jpg" title="avr2011_aligningLEDs.jpg"
width="500" />
<figcaption>avr2011_aligningLEDs.jpg</figcaption>
</figure>
7\) Once you've done the LEDs, you can solder in their resistors. These
fit most easily and cleanly on the underside of the board, so you'll
want to trim off the extra leads from the LEDs before installing. You
want to solder each resistor to the outside strip of holes that
connected to the positive (long) pin of the LEDs, and the other end of
the resistor to the pins of the AVR. Notice that you're working on the
back-side of the board! Double-check that you're not connecting the
resistor to the VCC line that is closest to the LED.
<img src="avr2011_LEDresistors.jpg" title="avr2011_LEDresistors.jpg"
width="300" alt="avr2011_LEDresistors.jpg" />
<img src="avr2011_LEDresistors_top.jpg"
title="avr2011_LEDresistors_top.jpg" width="300"
alt="avr2011_LEDresistors_top.jpg" />
<img src="avr2011_LEDresistors_bottom_done.jpg"
title="avr2011_LEDresistors_bottom_done.jpg" width="300"
alt="avr2011_LEDresistors_bottom_done.jpg" />
8\) At this point, you can install the chip. They come from the factory
with the pins splayed out a little bit -- you can lean the chip into a
tabletop to straighten the pins out. Place the chip with the notch on
the top of the chip corresponding to the notch in the silkscreen.
Double-check. Solder.
<img src="_avr2011_chipBending.jpg" title="_avr2011_chipBending.jpg"
width="400" alt="_avr2011_chipBending.jpg" />
<img src="_avr2011_chipAlignment.jpg" title="_avr2011_chipAlignment.jpg"
width="400" alt="_avr2011_chipAlignment.jpg" />
9\) Optional fun stuff: Feel free to solder in an artistic power LED and
its resistor. (Note the polarization. Short pin downwards, or notice
that there's a flat-spot on the LED flange.) Write your name on it. Wire
up the battery (black wire to GND).
<img src="_avr2011_kitDone.jpg" title="_avr2011_kitDone.jpg" width="400"
alt="_avr2011_kitDone.jpg" />
<img src="_avr2011_kitDone2.jpg" title="_avr2011_kitDone2.jpg"
width="400" alt="_avr2011_kitDone2.jpg" />
10\) You should now be ready to flash in your first program. Hooray.
From here on it's (mostly) firmware!
### Adding the Light Sensor for Class 2 (ADC)
For the light sensor, you're creating a voltage divider with the
photoresistor and two legs of the potentiometer used as a variable
resistor. The photoresistor is connected to VCC and the AVR pin PC0, and
the variable resistor from PC0 to ground.
In the following image, the red pins represent the potentiometer, and
the blue are the leads from the photoresistor.
<figure>
<img src="_avr2011_bare_board_annotated_small.jpg" title="500 px" />
<figcaption>500 px</figcaption>
</figure>
Start out by placing and soldering the potentiometer on the underside of
the board. Make sure that the smaller center pin connects to the ground
lines. Do _NOT_ clip the leads short yet.
<figure>
<img src="_avr2011_board_bottom.jpg" title="500 px" />
<figcaption>500 px</figcaption>
</figure>
Bend one lead on the variable resistor up and over the two other holes
on the board, and plug it into PC0. Solder it in on the top side. Now
soldering the photoresistor in place should be easy.
<figure>
<img src="_avr2011_board_topside_soldered.jpg" title="500 px" />
<figcaption>500 px</figcaption>
</figure>
Flash in the light sensor firmware and turn the potentiometer until it
give you a nice range of values on the LED display. I found that turning
it up to _just_ max out in full light works well -- you'll see that
it'll get down to one or two bars when you cover the cell with your
hand. You're done!
### Schematics, etc
If you'd like to make yourself a class-board, the attached Eagle files
should get you started.
Warning: It's a good idea to socket your AVR in the board so that you
can remove/swap chips when you want to.
Also, the LEDs in port B will over-ride the SPI port. For the class, we
used AVRs with a bootloader already flashed into them, so we didn't use
the SPI most of the time. If you'd like to use the SPI instead, you can
**probably** get away with using large-value (1k Ohm?) resistors for the
LEDs. Best is to omit them if you're going to use the SPI a lot, though.
[Media:
mega_classboard_files.zip](Media:_mega_classboard_files.zip "wikilink")
Finally, if you want something with almost all of the functionality (but
none of the style!), Evil Mad Science sells a nice, very cheap, AVR Mega
breakout board.
[Category:Microcontrollers](Category:Microcontrollers "wikilink")
[Category:AVR_Class](Category:AVR_Class "wikilink")

View File

@@ -0,0 +1,182 @@
`*** See also `[`Suppliers`](Suppliers "wikilink")` ***`
A sizable inventory of electronic components was purchased for
[Hackersmart](Hackersmart "wikilink"), with the goal that the unsold
portion thereof would seed HacDC's electronics lab. This has come to
pass, and the components are arranged on a pegboard by the soldering
desk. This page is to explain what's available, how much it cost, where
to get more, and as a place to request additions.
This list has not been actively maintained in some time. We are not able
to resell items or run a store because that would require us to collect
and pay DC sales tax. So, think of the parts as office supplies that we
have stocked. If you use something, please donate an appropriate amount
to the tip jar.
### Large Parts (Dept 4)
| Item | Supplier | our cost | retail price |
|---------------------------|----------|----------|--------------|
| Arduino with Atamega328 | Adafruit | \$28 | \$35 |
| Boarduino kit w/ USB | Adafruit | \$22 | \$25 |
| USB TTL-232 Cable | Adafruit | \$18 | \$23 |
| Arduino Protoshield Kit | Adafruit | \$14 | \$15 |
| USBtinyISP AVR Programmer | Adafruit | \$20 | \$25 |
| XBee Adapter | Adafruit | \$10 | \$15 |
| XBee Module | Adafruit | \$23 | \$25 |
### Small Parts
| Component | Supplier | partno | our cost | retail price | [department](cash_register "wikilink") |
|------------------------------------------------------|--------------------------------------|----------------------|-----------------------|-----------------|----------------------------------------|
| resistors | Mouser/BG | partno | 1.4c (\$2.95 for 200) | 2c | 6 |
| 100-ohm trim pots | All Electronics | TPK-100 | 10c | 25c | 6 |
| 100k trim pots | All Electronics | TP-100k | 10c | 25c | 6 |
| 0.1uF 'decoupling' caps | Mouser | K104K15X7RF53H5 | 5c | 5c | 6 |
| 4.7uF capacitors | Mouser | 647-UVR1H4R7MDD1TD | 4c | 5c | 6 |
| 47uF capacitors | All Electronics | 47R10 | 4c | 5c | 6 |
| Misc caps (grab box) | Goldmine | G3060 | 1c? | 5c | 6 |
| 56uH inductors | Goldmine | G16521 | 35c | 50c | 6 |
| Red/Grn/Yel 3mm LEDs | MPJA | 15101/15102/15103 OP | 2c | 5c | 6 |
| Red/Grn/Yel 5mm LEDs | MPJA | 15108/15308/15309 OP | 2c | 5c | 6 |
| Aqua LEDs | Goldmine | G16645 | 25c | 50c | 6 |
| Infrared LEDs | supplier | partno | cost | price | 6 |
| Ultraviolet LEDs | supplier | partno | cost | price | 6 |
| 12MHz crystal | Goldmine | G3840 | 1.50 | 2.00 | 6 |
| 1xAA holder | Mouser | 12BH311-GR | 0.69 | 1.00 | 7 |
| 2xAA holder | Mouser | 12BH321D | 0.67 | 1.00 | 7 |
| 4xAA holder | Mouser | 12BH351-R | 0.99 | 1.50? | 7 |
| 9V battery snap | MPJA | 2600BT | 0.29 | 0.50 | 7 |
| SPDT pushbutton PCB mount | Goldmine | G14045 | \$1/5 | 0.25 | 7 |
| SPDT pushbutton panel mount | MPJA | 5019SW | 0.29 | 0.50 | 7 |
| DPDT slide | Goldmine | G1827 | 5/\$1 | 0.25 | 7 |
| DPDT 5v relay | All Electronics | RLY-506 | 0.70 | 1.00 | 7 |
| 2.1mm DC power jack | supplier | partno | cost | price | 7 |
| 2.1mm DC power plug | All Electronics | DCSID | 0.50 | 0.50 | 7 |
| 2.5mm DC power jack | All Electronics | DCJ-6 | 0.20 | 0.25 | 7 |
| 2.5mm DC power plug | supplier | partno | cost | price | 7 |
| 2.5mm (3/32") stereo plug | supplier | partno | cost | price | 7 |
| 3.5mm (1/8") stereo plug | supplier | partno | cost | price | 7 |
| 3.5mm (1/8") stereo jack | Goldmine | GP3 | 50/\$2.49 | 0.25 | 7 |
| USB B jack | Mouser | 649-61729-1010BLF | 0.50 | 1.00 | 7 |
| 8-pin DIP sockets | Digi-Key | 3M5461-ND | 0.156 | 0.25 | 7 |
| 14-pin DIP sockets | Digi-Key | 3M5462-ND | 0.13 | 0.25 | 7 |
| 20-pin DIP sockets | Digi-Key | 3M5465-ND | 0.18 | 0.25 | 7 |
| 28-pin DIP sockets | Digi-Key | 3M5469-ND | 0.23 | 0.50 | 7 |
| 0.100" headers | Goldmine | GP6 | 50/\$2.49 | 0.25 | 7? |
| 830-point breadboard | MPJA | 4443TE | 3.95 in qty 10 | 5.00 | 8 |
| small perfboard | All Electronics | PC-1 | 0.75 | 1.00 | 8 |
| large perfboard | BG Micro | ACS1052 | 1.95 | 3.00? | 8 |
| crappy clipleads | Goldmine | G1498 | 10/\$2 | 25c | 8 |
| Minigrabbers (yellow) | DealExtreme | sku.8391 | 30/\$7.41 | 50c | 8 |
| Micrograbbers (red/black) | DealExtreme | sku.7892 | 20/\$6.10 | 50c | 8 |
| 6 amp Triac 400 PIV | RS | 276-1000 | 0.00 | 0.95 | 9 |
| 7805 regulator | Mouser | 512-LM7805ACT | 0.31 | 0.50 | 9 |
| 78L05 regulator | Mouser | 512-LM78L05ACZX | 0.18 | 0.50 | 9 |
| 7812 regulator | Mouser | 512-LM7812ACT | 0.31 | 0.50 | 9 |
| TL431 adjustible zener regulator | RS | 276-559 | 0.00 | 1.50 | 9 |
| LM317 adj reg | Mouser | 511-LM317MT | 0.30 | 0.50 | 9 |
| 1n914/1n4148 diode | Goldmine | G13807 | 100/\$1 | 5c | 9 |
| 1n4007 diode | MPJA | 5217DI | 0.07 | 0.10 | 9 |
| Zener diodes | BG Micro | partno | 0.12 | 0.25 | 9 |
| 2n4891 UJT Transistor | RS | 276-2029 | 0.00 | 7.08 | 9 |
| 2n3904 NPN transistor | BG Micro | TRN2N3904 | 0.06 | 0.25 | 9 |
| 2n3905 PNP transistor | Goldmine | G43374 | 0.12 | 0.25 | 9 |
| 2SC945 NPN Transistor | RS | 276-2051 | 0.00 | 0.25 | 9 |
| ICL7621 Dual Op Amp Low Power | RS | 276-2331 | 0.00 | 1.07 | 9 |
| LM358 opamp | Mouser | 512-LM358N | 0.25 | 0.50 | 9 |
| LM1458 dual opamp | Mouser | 512-LM1458CN | 0.33 | 0.50 | 9 |
| LM393 dual comparator | All Electronics | LM393 | 0.30 | 0.50 | 9 |
| LM3915N LED bargraph driver | RS | 276-1708 | 0.00 | 2.50 | 9 |
| LM555 timer | Mouser | 512-LM555CN | 0.22 | 0.50 | 9 |
| ADM202 RS232 transceiver | All Electronics | ADM202EAN | 0.75 | 1.00 | 9 |
| 4n33 optoisolator | Mouser | 78-4N33 | 0.32 | 0.50 | 9 |
| LM386 audio amp | Mouser | 513-NJM#386BD | 0.42 | 0.50 | 9 |
| MC34063 switching power supply controller | Mouser | 863-MC34063AP1G | 0.70 | 1.50 | 9 |
| 74HCT573 Octal D-type Latch | RS | CD74HCT573E | 0.00 | 0.85 | 9 |
| 74HCT4020 14 stage binary counter | RS | 74HCT4020N | 0.00 | 1.80 | 9 |
| 74HCT240 Octal Inverting Buffer | RS | 74HCT240N | 0.00 | 0.68 | 9 |
| 74HCT273 Octal D Flip Flop | RS | 74HCT273N | 0.00 | 0.66 | 9 |
| 74HCT393 Dual 4 Bit Binary Counter | RS | 74HCT393E | 0.00 | 0.60 | 9 |
| 74HCT164 8 Bit Serial In Parallel Out Shift Register | RS | 74HCT164N | 0.00 | 0.55 | 9 |
| SN74LVC16245A 16 bit bus transceiver | hamfest | SN74LVC16245A | 0.00 | 1.52 | 9 |
| 74LS244 Octal Noninverting Buffer | RS | SN74LS244N | 0.00 | 0.30 | 9 |
| 74LS373 octal transparent latch | RS | SN74LS373N | 0.00 | 1.39 | 9 |
| 4093 CMOS 2 input NAND Schmitt Trigger | RS | CD4093BCN | 0.00 | 0.55 | 9 |
| AVR microcontrollers | I'm gonna leave this to Elliot or TC | | | | 10 |
| ferrite snap beads | All Electronics | FB-80 | 2.50 | 2.00 + shipping | 10 |
| Hantronix HDM16216H-5-300S 2x16 LCD no backlight | Goldmine | G16717 | 2.95 | 5.00 | 11 |
| 0.6 amp Polyfuse | Mouser | 576-60R065XU | 0.24 | 0.50 | 11 |
| 1.1 amp Polyfuse | Mouser | 576-30R110UU | 0.26 | 0.50 | 11 |
| CF-IDE 44-pin | DealExtreme | sku.10310 | 2.26 | 3.00 | 15 |
| CF-IDE 40-pin male | DealExtreme | sku.10309 | 2.09 | 3.00 | 15 |
| CF-IDE 40-pin female | DealExtreme | sku.2720 | 2.16 | 3.00 | 15 |
| CF-IDE 40-pin male on bracket | DealExtreme | sku.10311 | 3.52 | 5.00 | 15 |
| 2.5-to-3.5-inch IDE adapter | DealExtreme | sku.727 | 1.33 | 2.00 | 15 |
| 2GB CF card | DealExtreme | sku.12352 | 22.12 | 30.00 | 15 |
| 1GB MicroSD (TransFlash) | DealExtreme | sku.1458 | 5.43 | 7.00 | 15 |
| 2GB MicroSD (TransFlash) | DealExtreme | sku.2934 | 9.22 | 12.00 | 15 |
| SDHC-to-USB adapter | DealExtreme | sku.6858 | 2.52 | 3.00 | 15 |
| All-in-one USB memory reader | DealExtreme | sku.2708 | 4.87 | 5.00 | 15 |
| | | | | | |
### Proposed Additional Inventory
| Component | Supplier | partno | our cost | retail price | department | QTY Desired |
|----------------------------------------------------------------------------|-----------------------------|--------------------------------------------------------------------------|------------|--------------|------------|-------------|
| IRFZ20 MOSFET | TBD | | | | | |
| H-Bridges | TBD | (SN754410, aka L293) | | | | |
| piezo elements | TBD | | | | | |
| 22 AWG hookup wire | TBD | | | | | |
| TBD Light Sensor | TBD | | | | | |
| TIP102 Transistor | TBD | | | | | |
| USBtinyISP AVR Programmer Kit | adafruit.com | | \$22 | | | |
| AVR Programming Adapter | Sparkfun.com | BOB-08508 | \$0.99 | | | |
| Infrared Emitters and Detectors | Sparkfun.com | SEN-00241 | \$1.95 | | | |
| 8-Bit Shift w/Latch | Mouser | 595-SN74HC595N | \$0.66 | | | |
| 5.6v Zener Diode | Mouser | 512-1N5232B | \$0.06 | | | |
| 10-pin bussed 10K-100K resistor network | Mouser | 266-100K-RC | \$0.25 | | | |
| L293D Dual H-Bridge | Mouser | 595-L293DNE | \$2.74 | | | |
| 5-position 5.08 terminal block | Mouser | 538-39880-0303 | \$077 | | | |
| 2-position 5.08 terminal block | Mouser | 538-39880-0302 | \$0.46 | | | |
| cisco 48V power supplies | <http://tinyurl.com/6n4z8b> | | \$10ea-ish | | | |
| Darlington array | Mouser | 511-ULN2801A | \$0.91 | | | |
| Opto-Isolator | Mouser | 782-139 | \$1.12 | | | |
| Power Transistor | Mouser | 511-2N3055 | \$1.40 | | | |
| 74C CMOS Logic Hex Schmitt Trigger | Mouser | 512-MM74C14N | \$0.72 | | | |
| LED Assortment | Alan Parakh | <http://alan-parekh.vstore.ca/product_info.php/cPath/4_8/products_id/31> | \$25 | | | |
| IRL3713PBF MOSFET 30V/260A continuous drain current, very low gate voltage | Newark Electronics | <http://www.newark.com/> or Mouser 844-IRL3713PBF | \$4 | | | |
### Suppliers:
[Mouser](http://www.mouser.com) and [Digi-Key](http://www.digikey.com)
are the "big guns" of the hobbyist and small professional electronics
market, with breathtaking inventories, fast order fulfillment, and
sophisticated websites. Digi-Key adds a handling fee to orders under
\$25.
[Marlin P. Jones & Associates](http://www.mpja.com) is a smaller web
retailer specializing in power supplies, but with a fair assortment of
other stuff too. Their prices on breadboards are hard to beat. (Thanks
[Jon](http://serialwombat.com/) for that tip!)
[All Electronics](http://www.allelectronics.com/) has been in the
surplus electronics game for a long time, with a small newsprint catalog
that's a staple in many geeks' bathrooms. As with any surplus dealer,
their inventory is constantly in flux, and sometimes they have really
amazing deals.
[B.G. Micro](http://www.bgmicro.com/) (known pre-9/11 as "The
Electronics Mecca", now calls itself "The Electronics Supplier") is a
small mostly-surplus dealer whose bright yellow catalog offers Texas
humor mixed with eyestrain. Their shopping cart software is chaotic
evil, but they have great prices, particularly on industrial stuff like
thermal fuses and zener diodes.
[Electronics Goldmine](http://www.goldmine-elec-products.com/) has a
better selection of motors, magnets, and boxes than almost anyone else.
They offer "GoldPaks", grab-bags and assortments of surplus (sometimes
take-outs) hardware, some of which are so-so deals and some of which are
simply jawdropping.
[Category:Materiel](Category:Materiel "wikilink")

View File

@@ -0,0 +1,227 @@
This is an attempt to write documentation for the ATmega328P
microcontroller (& learn to use it as I go along). Send corrections,
suggestions, & comments to: gippgig@gmail.com Bobby The ATmega328P
Microcontroller - 1 Setting up the I/O pins - Oct. 3, 2019 version Note:
In the following, the more negative voltage (Gnd) is 0 & the more
positive voltage (Vcc) is 1. Addresses & data are given in hexadecimal.
The ATmega328P is one of a large family of similar 8-bit
microcontrollers and can operate on 1.8 to 5.5 V. The data sheet is
available at
ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf
(in the following the section describing an item is often given
afterwards in parentheses, i.e. SREG(7.3.1)); the instruction set manual
for this family is available at
ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf
(note that the 328P does not have all of the instructions listed) & also
see en.wikipedia.org/wiki/Atmel_AVR_instruction_set. Other members
differ in various ways; consult their data sheets for details. The
ATmega328P has 32 8-bit general purpose registers (which can also be
addressed as data memory locations 0000-001F), 224 8-bit I/O registers
(which can also be addressed as data memory locations 0020-00FF; note
that 20 must therefore be added to the I/O register number when
addressing it as memory), 2kx8 data RAM(8.3) (data memory locations
0100-08FF), a separate 16kx16 program flash memory(8.2) (note that while
it is an 8-bit chip the instructions are 16 bits), & a separate 1kx8
EEPROM(8.4). The ATmega328P is available as a 28-pin DIP (more exotic
packages are also avilable) with 23 general purpose I/O pins which can
also have specialized functions(14.3.1-14.3.3); in particular, pin 1 is
an external reset(11.4) unless RSTDISBL(28.2) has been programmed to 0.
Altho each pin can be individually controlled, they are grouped into the
8 bit port B (B0-B7), 7 bit port C (C0-C6), & 8 bit port D (D0-D7). 1=C6
B7=10 2=D0 B6=9 3=D1 B5=19 4=D2 B4=18 5=D3 B3=17 6=D4 B2=16 9=B6 B1=15
10=B7 B0=14 11=D5 C6=1 12=D6 C5=28 13=D7 C4=27 14=B0 C3=26 15=B1 C2=25
16=B2 C1=24 17=B3 C0=23 18=B4 D7=13 19=B5 D6=12 23=C0 D5=11 24=C1 D4=6
25=C2 D3=5 26=C3 D2=4 27=C4 D1=3 28=C5 D0=2 There are 3 I/O registers
associated with each port: DDR(14.4.3, 14.4.6, 14.4.9) (data direction
register), PORT(14.4.2, 14.4.5, 1.4.8), & PIN(14.4.4, 14.4.7, 14.4.10).
The DDR determines whether the pins are inputs or outputs; if a bit in
the DDR is 0 the corresponding pin is an input; if 1 it is an output.
When the chip is reset (which happens automatically when power is turned
on) all the DDR & PORT bits are cleared making all pins inputs; bit 6 if
pin 1 is reset & unused bit 7 of DDRC, PORTC, & PINC are always 0. The
PORT register contains the value that is output on the corresponding
pins that are set as outputs. Note that if a bit corresponding to an
input pin is set to 1 an internal "pullup" resistor is connected from
the positve voltage to that pin unless PUD(14.4.1) has been set to 1.
Reading the PIN register gives the value of the corresponding pins
(regardless of whether they are an input or output). Note that
unconnected inputs are not defined and may give erratic values when
read. Unconnected inputs can also cause high power consumption so unused
inputs(14.2.6) should be connected to something; this is easily done by
turning on the pullup resistors. Also note that there is a 1 instruction
delay(14.2.4) between writing data to the PORT and having it appear in
the PIN register. Writing 0 to a PIN bit does nothing but writing a 1
will cause the corresponding bit in PORT to change state(14.2.2) (from 1
to 0 or from 0 to 1). Here are the I/O addresses for the various
registers: 03 PINB 04 DDRB 05 PORTB 06 PINC 07 DDRC 08 PORTC 09 PIND 0A
DDRD 0B PORTD Suppose that pin 1 is reset, 2 is an input with the pullup
resistor on, 3-6 & 9 are outputs with 9 set to 0, 10 is unused, 11-15
are outputs with 11-13 set to 1, 16-19 are unused, & 23-28 are inputs
with the pullups on for 24-25. Also suppose that setting pin 9 to 1
(except under special conditions) could damage the circuit; to reduce
the chance of this happening this output is placed next to Gnd (pin 8),
a resistor (~5k ohms suggested) is connected from the pin to Gnd, & the
other adjacent pin (10) is unused & is connected thru a "pulldown"
resistor (1k suggested) to Gnd instead of using the internal pullup.
Here is the port bit map (the port bit is given first followed by the
corresponding pin, the value of the DDR for that position, the value (if
the value doesn't matter it is generally set to 0 in these examples) of
the PORT for that position, & a description; after the last bit of a
port the hexadecimal value of DDR & PORT is shown): B7 10 0 0 unused,
resistor to Gnd B6 9 1 0 out, =0, cannot be set to 1, resistor to Gnd B5
19 0 1 unused (set PORT to 1 to turn on pullup resistor) B4 18 0 1
unused B3 17 0 1 unused B2 16 0 1 unused B1 15 1 0 out B0 14 1 0 out
DDRB=43 PORTB=3C C6 1 0 0 reset C5 28 0 0 in C4 27 0 0 in C3 26 0 0 in
C2 25 0 1 in, pullup on C1 24 0 1 in, pullup on C0 23 0 0 in DDRC=00
PORTC=06 D7 13 1 1 out, =1 D6 12 1 1 out, =1 D5 11 1 1 out, =1 D4 6 1 0
out D3 5 1 0 out D2 4 1 0 out D1 3 1 0 out D0 2 0 1 in, pullup on
DDRD=FE PORTD=E1 The following code fragment sets up the pins (in all
code examples the program memory address is given first (4 hexadecimal
digits) followed by the opcode (4 digits), the instruction, & an
explanation). When power is turned on the processor resets and starts at
address 0000(11.1) unless BOOTRST(27.6) has been programmed to 0.
However, interrupts can cause execution to start nearby (for example,
INT0 can cause execution to start at 0002(12.4)) so the first
instruction is often a jump to get out of the way. 0000 940C JMP 0001
1000 1000 ... 1000 E423 LDI R18,43 Load value to make pins 9 & 14-15
outputs into arbitrarily chosen temporary register 1001 B924 OUT 04,R18
Store into DDRB 1002 EF6E LDI R22,FE Load value to make pins 3-6 & 11-13
outputs 1003 B96A OUT 0A,R22 Store into DDRD 1004 E31C LDI R17,3C Load
value to turn on pullup resistors for unused pins 16-19 1005 B915 OUT
05,R17 Store into PORTB 1006 EE51 LDI R21,E1 Load value to set pins
11-13 to 1 & turn on pullup for pin 2 1007 B95B OUT 0B,R21 Store into
PORTD 1008 E036 LDI R19,06 Load value to turn on pullups for pins 24-25
1009 B938 OUT 08,R19 Store into PORTC 100A rest of program No need to
load DDRC since it was reset to 00 when power was turned on If possible,
do not connect or disconnect whatever would be damaged if pin 9 was 1 &
connect it to Gnd instead if applicable. Once the rest of the circuit is
built, turn on a voltmeter, set it on DC volts, & select the lowest
range that includes the voltage chosen to power the circuit. Before
connecting power to the circuit turn on the power source, select the
correct voltage, & measure the output. If the voltage is wrong make sure
the power source is plugged into an outlet that has power or test the
batteries & check for corroded battery contacts. If the voltage is
correct verify which connection is positive & which is negative. Turn
off power, connect power to the circuit MAKING SURE THE POSITIVE VOLTAGE
IS CONNECTED TO VCC, turn on power, & measure the voltage at pin 7
(Vcc). If it is negative shut off power (& hope the circuit hasn't blow
out) because the power is somehow connected backwards, if it is 0 check
for a loose connection or short circuit, if it is low check for weak
batteries or a short. If Vcc is correct check the voltage at pin 9. If
it is not 0 find & fix the problem and repeat the check. If it is 0 turn
off power, connect the rest of the circuit, & turn on power. Check pin 9
again; if it is not 0 shut off power, find & fix the problem, & repeat
the check. If it is 0 repeat the check of Vcc. If Vcc is not correct fix
the problem, repeat the check of pin 9, & then test Vcc again. If Vcc is
correct see if the circuit works. The ATmega328P Microcontroller - 2
Adding a self-test - Oct. 21, 2019 version The self-test works by
checking whether the pins have the expected values. Note that the value
of PIN should equal the value of PORT for output pins unless a pin is
heavily loaded (which should generally be avoided and always avoided at
higher Vcc); this is also the case for unused pins with the pullup
enabled & unused pins with the pullup off if pulled down to Gnd (i.e.,
pin 10 below). Unless it would cause something bad to happen to whatever
the microcontroller is controlling, the test should be repeated with
each output pin set to both 0 & 1 to detect excessively low resistance
to either Vcc or Gnd and adjacent pins should have opposite values to
detect shorts between pins. Using the previous example, suppose that pin
1 is reset, 2 is an input with pullup on, 3-6 & 9 are outputs with 9 set
to 0, 10 is unused, 11-16 are outputs with 11-13 set to 1, 17-19 are
unused, & 23-28 are inputs with pullups on for 24-25. Pin 2 should
initially be 0, pin 6 is heavily loaded, pin 9 must not be set to 1 &
has a resistor to Gnd, pin 10 also has a resistor to Gnd, pin 16 is the
self-test output (0=fail, 1=pass), pin 23 is an analog input, pin 24
should initially be 1 & pin 27 0, & pin 28 should be the same as pin 26
until the self-test sets pin 12 to 1. Note that the self-test
momentarily sets pin 16 to 0 so this must not trigger an error response.
Here is the port bit map; 3 values are given for PORTB (the first 2
being the values used for self-testing with the 2nd also being the final
value if the self-test passes (there is no need to change it since pin
16 is already 1 & 14-15 don't need to be set to a particular value)
while the 1st (pin 16 already 0) or 3rd is the final value if the
self-test fails) & 3 values are given for PORTD (the first 2 again being
the values used for self-testing & the 3rd the final value that sets the
outputs to the correct values). B7 10 0 0 0 0 unused, resistor to Gnd B6
9 1 0 0 0 out, =0, cannot be 1, resistor to Gnd B5 19 0 1 1 1 unused B4
18 0 1 1 1 unused B3 17 0 1 1 1 unused B2 16 1 0 1 0 out, self-test B1
15 1 1 0 0 out B0 14 1 0 1 1 out DDRB=47 PORTB=3A,3D,39 C6 1 0 0 reset
C5 28 0 0 in, =C3 until pin 12 is set to 1 C4 27 0 0 in, initially 0 C3
26 0 0 in, =C5 until pin 12 is set to 1 C2 25 0 1 in, pullup on C1 24 0
1 in, pullup on, initially 1 C0 23 0 0 in (analog) DDRC=00 PORTC=06 D7
13 1 1 0 1 out, =1 D6 12 1 0 1 1 out, =1 D5 11 1 1 0 1 out, =1 D4 6 1 0
1 0 out, heavy load D3 5 1 1 0 0 out D2 4 1 0 1 0 out D1 3 1 1 0 0 out
D0 2 0 1 1 1 in, pullup on, initially 0 DDRD=FE PORTD=AB,55,E1 The
following code fragment sets up the pins & does the self-test. 0000 940C
JMP 0001 1000 1000 ... 1000 E427 LDI R18,47 Load value to make pins 9 &
14-16 outputs 1001 B924 OUT 04,R18 Store into DDRB 1002 EF6E LDI R22,FE
Load value to make pins 3-6 & 11-13 outputs 1003 B96A OUT 0A,R22 Store
into DDRD 1004 E31A LDI R17,3A Load value to do 1st B self-test 1005
B915 OUT 05,R17 Store into PORTB 1006 EA5B LDI R21,AB Load value to do
1st D test 1007 B95B OUT 0B,R21 Store into PORTD 1008 E036 LDI R19,06
Load value to turn on pullups for pins 24-25 1009 B938 OUT 08,R19 Store
into PORTC 100A B173 IN R23,03 Load temporary register from PINB 100B
2771 EOR R23,R17 Clear bits where PINB=PORTB (CPI R23,3A is an equally
good alternative) 100C F4D1 BRNE 1A PINB not same as PORTB, self-test
failed, pin 16 already 0, go to 1027 (note that the branch distance is
relative to the following instruction so this jumps ahead 1B) 100D B179
IN R23,09 Load from PIND 100E 7E7F ANDI R23,EF Clear bit D4
corresponding to heavily loaded pin 6 100F 3A7A CPI R23,AA Test for
correct value (note that EOR R23,R21 is not an alternative since PORTD0
is 1 but input pin 2 should be 0 so the result should be 01 not 00) 1010
F4B1 BRNE 16 PIND outputs not same as PORTD besides D4, fail, pin 16
already 0, go to 1027 1011 B176 IN R23,06 Load from PINC 1012 7F7A ANDI
R23,FA Clear unpredictable bits C0 & C2 1013 3072 CPI R23,02 Test for
pass with C3=C5=0 1014 F011 BREQ 02 Pass with C3=C5=0, go to 1017 1015
327A CPI R23,2A Test for pass with C3=C5=1 1016 F481 BRNE 10 PORTC
wrong, fail, pin 16 already 0, go to 1027 1017 E555 LDI R21,55 Load
value to reverse D outputs 1018 B95B OUT 0B,R21 Store into PORTD 1019
E31D LDI R17,3D Load value to reverse B outputs except pin 9 101A B915
OUT 05,R17 Store into PORTB (no need to change PORTC since it has no
outputs) 101B B179 IN R23,09 Load from PIND (note that PINB couldn't be
tested yet because of 1 instruction delay) 101C 7E7F ANDI R23,EF Clear
heavily loaded bit D4 101D 3474 CPI R23,44 Test for correct value 101E
F439 BRNE 07 PIND outputs not same as PORTD besides D4, fail, go to 1026
101F B173 IN R23,03 Load from PINB 1020 2771 EOR R23,R17 Clear bits
where PINB=PORTB 1021 F421 BRNE 04 PINB not same as PORTB, fail, go to
1026 1022 B176 IN R23,06 Load from PINC 1023 7D72 ANDI R23,D2 Clear
unpredictable bits C0,C2-3,C5 1024 3072 CPI R23,02 Test for C1=1 & C4=0
1025 F009 BREQ 01 Self-test passes, pin 16=1, go to 1027 1026 982A CBI
05,2 Set pin 16 to 0 1027 EE51 LDI R21,E1 Load value to set pins 11-13
to 1 & turn on pin 2 pullup 1028 B95B OUT 0B,R21 Store into PORTD
1029... rest of program To turn on an LED if the self-test passes
(recommended because it indicates that the initialization routine
executed) connect the positive LED lead to pin 16 & the negative lead
thru a resistor (the value depends on the voltage used) to Gnd. However,
the LED may be too dim to see if the voltage is under 2V (test by
connecting it directly from Vcc to Gnd (no resistor needed if under
2V)). To do more than just set pin 16 if the self-test fails, add
additional code after 1026 & change the value of BREQ at 1025 to jump
past the end of the added code. For example, this alternate ending will
halt the program at the point the self-test failed to make it easier to
find (as described below) the problem: 1025 F011 BREQ 02 Pass, go to
1028 (increased by 1 since 1 instruction added) 1026 982A CBI 05,2 Set
pin 16 to 0 1027 CFFF RJMP FFF Go to 1027 (halt by going into infinite
loop) 1028 EE51 LDI R21,E1 Load D value 1029 B95B OUT 0B,R21 Store into
PORTD 102A... rest of program In this particular case only, it makes
sense to also change the BRNE at 100C,1010,& 1016 to F7F9 BRNE 7F to
halt the program at those points. After all the tests described
previously pass, if the self-test does not pass measure the voltage at
pin 16; if it is not 0 test the resistor & LED, make sure the LED isn't
backwards, & check for a wiring error. If pin 16 is 0 connect a 2.7k
resistor from pin 16 to Vcc; if it now reads \>1V the pin apparently was
not initialized to an output, check the program for errors (beware
typos) & make sure it was loaded into the microcontroller correctly. If
it still reads 0 the self-test really did fail. Check the voltages on
all of the pins. Suppose that the supply is 2V & the voltages on pins
1-6 are 2,0,2,0,2,1, on 9-19 are 0,0,2,0,0,0,2,0,2,2,2, & 23-28 are
.7,2,2,0,0,0. The odd value at pin 6 is not unexpected because of the
heavy load and pin 23 is an analog input while 9-10 & 14-19 match the
1st test value for port B indicating that the first part of the
self-test (at 100C) passed (but the test failed before PORTB was
reloaded at 101A). Pins 23-28 match the expected value (pin 1 should be
2V because it's reset) for port C. Pins 2-6 & 11-13 match the 1st value
for port D except for pin 13 (D7), which should be 2V but was 0. This
indicates that pin 13 is shorted, check the wiring to that pin. On the
other hand, if pins 12 & 13 were both .9V that would indicate that pins
12 & 13 are shorted together. Fix the problem & try again. If the
self-test passes see if the circuit works.

View File

@@ -0,0 +1,81 @@
## About
Some people have made the mistake of expressing interest in electron
tubes. They're about to learn more than they bargained for.
## News
The first session was a great success. We covered the first item in the
syllabus and part of the second.
The next session will feature a brief review of the first session and
finish covering the second section. I think it should be possible to
reach the section on advanced circuits. during the next session.
I also owe you guys a tube dissection, I'll try to work that into the
next session too.
## Schedule
Next class: Aug 11 at 7:30 PM.
## Silly Bus
- Thermionic emission: From the lightbulb to the pentode.
- Fundamental circuits and coupling
- Push-pull and Phase splitting circuits
- Transformers in single-ended and push-pull.
- Advanced circuits
- Tube failure modes
<!-- -->
- Hands-on experience building a battery-powered single tube filamentary
pentode pre-amp.
<!-- -->
- Power supplies and tweaking.
<!-- -->
- What is the real secret to great sound?
### Laboratory Supplies
[cheap demo
pre-amp](http://www.bottlehead.com/store.php?crn=220&rn=438&action=show_detail)
Go to \[tubedata.info\] and obtain what you think is the most
informative datasheet for the following tubes and print out a copy. --
you need a physical copy.
**filamentary diode** 5U4\* Optional: GZ34 / 5AR4
**canonical triode** 2A3 Optional: 845
**to explore gain versus output** 6SN7\* 6SL7\* or 12AX7 / ECC83
**Pentodes** 6BQ5 / EL84 Optional: KT88, EF86
3S4 \<\<\< absolutely required, this is the tube we're using.
### Suggested Reading
Radiotron Designer's Handbook 4th ed. \[www.pmillett.com\] Might have
one lying around.
Tube Circuits for Audio Amplifiers (1-882580-03-6) features some very
elegant and practical designs.
An Approach To Audio Frequency Amplifier Design. (1-882580-05-2) Has
some good discussions about output transformers and ultralinear design.
Then it starts out with some nice practical amps but, before long at
all, starts talking about 1,100 watt monsters with 2.5KV power supplies.
Building Valve Amplifiers (0-7506-5695-6) is probably too practical to
be enjoyable but I have to deem it essential. His other book is
fantastic, one of the most well worn tomes in my personal library, but
get this one first.
[Category:Classes](Category:Classes "wikilink")

View File

@@ -0,0 +1,95 @@
## Background
[Go](http://en.wikipedia.org/wiki/Go_(board_game)) is a board game of
strategy, like chess, that is around 3000 years old and the most popular
game of it's type in the world. Before going any further, take a look at
the wikipedia page... the short version is that it's an *extremely* easy
game to learn and for every player to date beyond mastery. No computer
or algorithmic approach can beat even a moderately skilled amateur (it's
been in the crosshairs of the AI community since chess, a vastly
inferior pastime, fell with little resistance) but four year olds are
routinely taught to play. Its played on a grid, usually 19x19, but
occasionally bigger and frequently smaller for faster or educational
games (9x9 and 13x13 being the other standard sizes). The object is for
two players to try to surround as much of the board as possible by
placing immovable stones on the intersection points of the grid, the
central caveat being that stones can be captured if totally surrounded
by opposing colored stones. There are maybe two other rules, depending
on how you count, but it's beautifully simple.
Games are played ([illustrative
picture](http://en.wikipedia.org/wiki/Image:Go-Equipment-Narrow-Black.png))
on a board called a Goban, traditionally a very thick slab of wood with
it's own feet that sat directly on the floor, with players on opposing
sides sitting on cushions. These days you're more likely to see a table
board, which is still essentially a slab of wood. The stones range from
traditional (read: expensive) slate and shell to bottlecaps
(glass/plastic coated lead being the most common).
## Concept
Many clients exist to play Go on computers/handheld devices. These are
wonderful in that they can record your game in the SGF format, which is
(near) universally used by players to review their games (an important
part of getting better, often done with a teacher or opponent). They're
also handy when you're moving around, and can't set up a bunch of slick
stones on a slab of wood (trains, planes, automobiles, bicycles). For
casual games, it's nice to be able to stop and resume at any time.
The big downside is face to face interaction. It's simply nowhere near
as enjoyable to play by passing a handheld back and forth or staring at
a computer, the latter not being particularly portable most of the time
anyway.
So the plan would be to build something that's as close to the form
factor of a real goban, but shrunk a bit for portability, and completely
electronic. I'd say about a 30cm square (~1 foot for the unit
challenged) and no thicker than a paperback book would be a good size.
Something you can throw in a bag without hesitation. It should have as
intuitive an interface as possible, the ability to automatically score
the game, and best of all store games and export them to a computer
somehow.
Of course, it should also have some pointless eastereggs built in...
[the game of life](http://en.wikipedia.org/wiki/Conway%27s_game_of_life)
springs to mind.
## Implementation Ideas
Simply but, a big array of multicolor LEDs, each one an "intersection"
on the board. 19^2, 361, of them. A glorious sight to behold. Initially
I thought it would be neat to make each LED a pushbutton, but quickly
realized that multicolor LED pushbuttons are expensive, make the whole
project orders of magnitude more difficult and would be rather fragile
(I'd be delighted if someone showed me otherwise though). So the backup
plan would be to simply have a big old grid of LEDs and a d-pad
(think... nintendo controller) to move around your "stone" on the matrix
before placing it. A five button interface, one on each side. If you use
Red/Green bicolor LEDs you can get three colors (tricky eh?): Red,
Green, and Yellow. I *think*
[these](http://www.superbrightleds.com/TriColor%20LED.htm) are true
tricolor LEDs... in the sense that you have one anode (or cathode, your
choice) per color (unfortunately they cost way too much, we'll see if
they can be found cheaper, something under \$0.30 would be nice). The
stone you're "placing" would be yellow, and upon pressing would turn
your color (based on whose turn it is, obviously). The yellow could also
be used to mark the "edge" when playing on a smaller 9x9 or 13x13 board.
This is a project ideally suited for a microcontroller of some sort.
They're surprisingly cheap (once you factor in how much it costs to get
PIC/AVR prog hardware) and should be very easy to interface to a
computer for game data offload. Also, the algorithms for driving this
thing will be more sophisticated than I'd want to try to implement on a
PIC or AVR. Totally open to ideas here though - I've never done anything
with microcontrollers except some robot programming in C with PICs, and
then only using an existing framework.
Driving a huge multicolor LED matrix will be... interesting. The normal
solution for a monochrome display is, as I understand it, a bunch of
shift registers. I guess for this, if you use "true" tricolor LEDs,
you'd just need twice as many shift registers. If you use bicolor LEDs,
which, as I understand it, achieve the third color by duty cycle
trickery (switching between the two colors very rapidly to blend them)
I'm not sure how you could accomplish this. Advice needed.
[Category:Proposed_Projects](Category:Proposed_Projects "wikilink")

View File

@@ -0,0 +1,501 @@
# Electronics Class
This class is targeted at the beginner who wants to learn electronics.
It would make a fine prerequisite to the [Microcontroller
Course](Microcontroller_Course "wikilink") or the
[HAMClass](HAMClass "wikilink")
### tease
These images form a slide show and a gestalt introduction to
electronics. In which we map the techniques available to hackers and
their surrounding requisite building blocks.
- \[<http://wiki.hacdc.org/images/8/82/Mindmap.jpg%5Dmindmap>
My hacking started with music and production. it wasn't exacly the tech;
more for the ride.
- [1](http://wiki.hacdc.org/images/5/5c/Wmuc_main.jpg) WMUC main studio
Complicated behaviour arises from iteration of simple models. Learning
how to operate something like this is simpler and more subtle than it
looks.
- [2](http://wiki.hacdc.org/images/thumb/9/99/Wheatstone.jpg/800px-Wheatstone.jpg)
wheatstone broadcast console
Easier to see is block diagram form; a gestural view of a complex
system. WMUC recording suites and broadcast control rooms. Computing.
- [3](http://wiki.hacdc.org/images/b/b9/Mixerschem.png) signal diagram
Why study DC/baseband/RF electronics; anachronism?
- [4](http://wiki.hacdc.org/images/a/a3/Roofchill.png) chill on the
roof.
Space shuttle shots; APRS , RACES, field day. Social technical effects
require proficiency.
- [5](http://wiki.hacdc.org/images/e/ea/W3eaxtower.png) W3EAX tower
Small systems scale into big ones. 40,000 people at Operation ceasefire
(united for peace& justice) '05 at the national mall. Standing between
SS, Park police and thousands of protesters.
- [6](http://wiki.hacdc.org/images/d/d7/Ceasefirestage.jpeg) ceasefire
stage
- [7](http://wiki.hacdc.org/images/3/30/Ceasefirecrowd.jpeg) ceasefire
40k
No always smooth sailing.
- [8](http://images.spaceref.com/news/2003/09.06.03.noaa-n.med.jpg) mars
needs bolts
Building whimsey.
- [9](http://wiki.hacdc.org/images/b/bf/Dancepanel.jpeg) lightup dance
floor
Computer control over physical objects. microcontrollers + christmas
tree lights.
- [10](http://wiki.hacdc.org/images/f/f3/Dancectll.jpeg) dance floor
controller
Not always smooth. Electrical compatibility != political compatability
- [11](http://wiki.hacdc.org/images/2/2c/Hhr.png) hhr - phear the
transaxle
More small systems iterated.
- [12](http://wiki.hacdc.org/images/c/cc/Igniterschem.jpeg) fireworks
diagram
DIY Ignition source in Berlin. in a pinch you don't need a parts
catalog.
- [13](http://wiki.hacdc.org/images/9/91/Igniterface.jpeg) igniter
controller
Apologies to Dakami
- [14](http://wiki.hacdc.org/images/d/d1/Fireworkscrates.jpeg) fireworks
crates
Simple systems, RC control, Robots and igniters.
- [15](http://2.bp.blogspot.com/_KqHQ-3WDqyk/SFqH25qqRwI/AAAAAAAAAS0/sJ2S8ppcBWQ/s1600-h/1055943372_295788412e.jpg)
wm greek fire
Recently robotics have become accessible to experimenters. Bluto cuts,
welds and hugs.
- [16](http://wiki.hacdc.org/images/4/47/Cadfab.jpg) Welding robots!
## Required Materials
(see also: our [Suppliers page](Suppliers "wikilink"))
---- <img src="Digital_Multimeter.jpg" title="Digital_Multimeter.jpg"
width="200" alt="Digital_Multimeter.jpg" /><img src="Analog_Multimeter.jpg" title="Analog_Multimeter.jpg"
width="200" alt="Analog_Multimeter.jpg" />
- Multimeter \$4
- [Source: Harbor
Freight](http://www.harborfreight.com/7-function-digital-multimeter-92020.html)
------------------------------------------------------------------------
<figure>
<img src="Soldering_iron.jpg" title="Soldering_iron.jpg" width="200" />
<figcaption>Soldering_iron.jpg</figcaption>
</figure>
- Soldering Iron (25-30w) \$10
- [Source: Harbor
Freight](http://www.harborfreight.com/30-watt-120-volt-soldering-iron-47887.html)
------------------------------------------------------------------------
<figure>
<img src="Solder.jpg" title="Solder.jpg" width="200" />
<figcaption>Solder.jpg</figcaption>
</figure>
- Solder ( 22ga )
- [Source: Harbor
Freight](http://www.harborfreight.com/lead-free-rosin-core-solder-95861.html)
- [Source: Radio
Shack](http://www.radioshack.com/product/index.jsp?productId=2062712)
- Or ANYWHERE, really.
------------------------------------------------------------------------
<figure>
<img src="Breadboard.jpg" title="Breadboard.jpg" width="200" />
<figcaption>Breadboard.jpg</figcaption>
</figure>
- Bread Board ( or [AshClassBoard](AshClassBoard "wikilink") ) \$10
- [Source:
Mouser](http://mouser.com/ProductDetail/BusBoard-Prototype-Systems/BB400/?qs=sGAEpiMZZMskUkxWo/qA8g6E2/%252b0L/2p)
- [Source:
Digi-Key](http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=438-1045-ND)
------------------------------------------------------------------------
- wire 24ga
------------------------------------------------------------------------
- 30ga solid core wire
------------------------------------------------------------------------
- Resistors 10kohm
------------------------------------------------------------------------
- variable resistor 10kohm linear \$1
------------------------------------------------------------------------
- switch
[17](http://www.mouser.com/search/ProductDetail.aspx?qs=JTMHOUw%252b%2fhkyoxmWRloCXw%3d%3d)
------------------------------------------------------------------------
- leds (various)
------------------------------------------------------------------------
- capacitor 470uf (ish)
[18](http://www.mouser.com/Search/ProductDetail.aspx?qs=Dj1PTMaP5uJBsuYHd%252b9oGQ%3d%3d)
------------------------------------------------------------------------
- pn2222 transistor \$.03
------------------------------------------------------------------------
- 1/8 male phono jack
`Read The Fine Data Sheet:  They hide secrets in the documentation.`
## Metering
`There are many like it but this one is mine.`
- Naming of parts
- Should be a VOM - Volt Ohm Meter
- metering modes
- restistance - Ohms of resistance
- voltage - Volts
- Current - Amps/Milliamps - check the leads
- diode check - see \[Diodes\]
- leads - plugged into the right ports?
- Continuity testing
- set the meter to the lowest resistance mode (200ohms or auto
resistance)
- or perhaps Diode check; or even beeping
- reads "off scale" when the leads are unconnected, this is an open
circuit
- firmly touch leads together -loopback test
- reads near 0 if the leads are crossed
- Voltage testing
- set meter to 20Vdc or VautoDC
- touch leads to metered points
- the reading on the meter is the difference in voltages between the
leads
- Try AC mains!! - safety second.
#### SwitchLab
- use the continuity meter to diagram the electrical layout of the
switch.
- solder switch to the board.
- test under power with meter voltage setting
## Relays/Switches
Codespeak
- SPDT - single pole dual throw
- DPST - dual pole single throw
- 4P10T - ???
`- Map this mystery switchLab`
## Wire
The basic wire is a pipe through which electrons can flow from the
lowest voltage side to the highest ([conventional
current](wikipedia:Electric_current#Conventional_current "wikilink")) up
to the physical limits of the wire.
- Condunctor vs. Insulators
- Current limit via wire gauge
[19](http://www.powerstream.com/Wire_Size.htm)
- Voltage limit via insulation.
- Magnetic and Electric fields surround an energized wire (what?!)
- And wire will respond with current when moved through magnetic flux
- bass pickups
- Lentz law
- Siemens, mho, ohms
- strip wire
- and don't nick the conductor
## Electromagnetics
- Einstein's "spukhafte Fernwirkung"
- Quantum Electrodynamics
- Electron and photons interact - somehow
- Gauss, Maxwell and
- Permanent magnets useful - locked domains
- Ferro materials, Ni, Co, Sr, Rb, Nb, Nd, Cr and Fe.
- Except when they aren't - curie temperature.
- Hall effect - sensing - spaceship drives
- Motors, linear, rotary, vibrational, direct ( magnetohydrodynamic)
- Radios
- EM probe demo
- EM spectrum
- DC, ELF, SLF (submarines, blue whales), AF, LF,HF, (Short wave),
VHF, UHF, Microwave, weird stuff, gamma rays (the incredible hulk,
gian ants).
## Soldering
`Hold the cold end.`
Soldering ( for our purposes ) is the process of joining electrical
contacts with a low melting point metal to make a mechanically and
electrically strong connection.
- Restrain long hair/clothing/jewelry.
- Clean both parts of waxes, oils or debris.
- Ethanol/Methanol/SLX
- Flux/Rosin/Dry
- Mechanically fit connections together
- Clean and wet the iron
- Tip should be immaculate and bright
- Heat both parts until hot
- Cheat, use another heating element
- quartz floodlight, sterno, propane or mean stare.
- but not too hot - see blue smoke lab
- Apply just enough solder to wet the contact surfaces
- Wait for the connection to shine smoothly
- remove the iron an test the connection
- yes it's hot stupid.
- the meter should find near 0 ohms of resistance between the two
parts even when mechanically stressed.
- the meter should read "off scale" to everything that should be
isolated
- Splice practice
- Western Union Splice
- Pigtail Splice
## Speakermaking lab
materials:
- junk wire, lots of it
- magnet ( stronger is better )
Test stuff:
- multimeter
- signal generator, (or music source)
- power amp
Construction:
- Make coil of wire 24ga 1" dia, 50-400 turns.
- use a form, marker, tp tube, pvc pipe
- Measure impedance \> 1.5 ohm
- Stick coil of wire to diaphram
- Make stator/armature
- stick magnet to something - not too ferrous
- stick diaphram near armature (correct axis??)
- connect to amplifier; apply Rock!
Exercises for suckers:
- Use the lentz law to calculate the force generated by thingy.
- Why 8ohm speakers in the house?
## Resistor
`Not like the NYC variety`
Resistors impede the flow of electrons across them; usually to protect
components from excessive current.
<figure>
<img src="resistoriv.png" title="Image:resistoriv.png" />
<figcaption>Image:resistoriv.png</figcaption>
</figure>
- [Ohm's law](wikipedia:Ohm's_law "wikilink")
- Diagonal IV curve.
- symmetric
##### ResistorLab
- solder resistors, meter and record;
- compare to ohms law math
##### BlueSmokeLab
`Get this out of the way early (and often)`
- turn off the switch
- Solder the 30ga wire ends on to the lab 0 area
- stow fingers away from wire
- turn on switch
## Power
- Measured in watts (usally)
`* .01w laser pointer`
`* .25w cell phone`
`* 1w `
`* 15w car stereo`
`* 25w soldering iron`
`* 100w light bulb`
`* 1500w hair dryer`
`* 200 horsepower (750w/hp)`
`* 3 tons of Air conditioner capacity (3.5kw/ton)`
- The notion of instant work
- Energy or work is expressed in joules (watt\*second). Or perhaps
(Kw\*H)
- Power(watts) = Current (Amps) \* Volts
`Electromechanical relay is a switch that's controlled electrically.`
### pros
- Easy to design for
- debugging (listen for satisfying click)
- excelent isolation
- high power control/\$
### cons
- high drive current (mostly)
- noisy (mostly)
- slow
- moving parts (eeew)
[a typical
relay](http://ecommas.tycoelectronics.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Data+Sheet%7F1308242_T77%7F1104%7Fpdf%7FEnglish%7FENG_DS_1308242_T77_1104.pdf) -
map this mystery relay lab
#### Diode
<figure>
<img src="diodeiv.png" title="Image:diodeiv.png" />
<figcaption>Image:diodeiv.png</figcaption>
</figure>
##### ScaryDataSheetLab
- a favorite led [20](http://www.vishay.com/docs/83012/83012.pdf)
- LED ( Light emitting diode ) are diodes with a clear case.
- electrons only permitted to flow in one direction: cathode to anode
- there are exceptions \[diode breakdown voltage\]
- discontinuous IV curve
- diode logic
- the cathode is marked
- the diode check function of the meter can reveal the correct polarity
of a mystery diode with a suspect cathode mark.
## Light Emitting Diode
- the short lead is the cathode
- LED's need current limiting (see
[BlueSmokeLab](ElectronicsClass#BlueSmokeLab "wikilink"))
##### LEDLab
- solder in 1kOhm resistor for the led , although you may use another if
you can justify the value
- Solder in the LED, with the short lead towards the ground.
## Motor
## Printed Circuits
## Capacitor
`470??f electrolytic cap`
<figure>
<img src="capt.png" title="Image:capt.png" />
<figcaption>Image:capt.png</figcaption>
</figure>
[wikipedia capacitor](http://en.wikipedia.org/wiki/Capacitor)
$\operator {work} (V) =
\frac {1}{2}
2)Cv^2$ Hmm.. no teX support here.
#### Applications
- Filters
- Decoupling - Ripple rejection
- Blocking - DC Bias rejection
- Use in networks - equalization networks
- Storage
- Pump and dump - Photoflash.
- Tank application - DC - DC converters
- Esoteric
- Sensors - Strain gauge
- Microphones - Old school
- nonlinear math - Calculating logs/exponents.
## Transistor
`PN2222 N channel transistor`
`Elliot substitute-taught a class on transistor amplifiers...`
`Notes in PDF are here:`
[`Media:transistorLecture.pdf`](Media:transistorLecture.pdf "wikilink")
### little amplifierlab
- class A amp
- DC blocking caps
- bias resistors
- fixed gain
- inverted waveform
### construction intro
- breadboard intro
- soldering intro
- led circuit
## Digital Logic
- AND C = A & B
- OR C = A \| B
- NOT C = !A
- NOR C = !(A\|B)
- NAND C = !(A&B)
- MUX C = select A(n) based on B(n)
## IC
`LM386 Audio Amplifier `[`21`](http://www.national.com/mpf/LM/LM386.html)
# Links and class notes
- 7-28
- [How bipolar junction transistors actually
work](http://www.allaboutcircuits.com/vol_3/chpt_2/8.html)
[Category:Classes](Category:Classes "wikilink")

View File

@@ -0,0 +1,23 @@
Counter module to be used with the [Spartan 3E Board
tutorial](http://wiki.hacdc.org/index.php/File:ISE_Tutorial_for_S3E.pdf).
module counter(clock, count_out);
input clock;
output [3:0] count_out;
reg [3:0] count_int=0;
reg [26:0] t=0;
always @(posedge clock)
if (t==4)
begin
count_int <= count_int + 1;
t=0;
end
else
t=t+1;
assign count_out=count_int;
endmodule
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,251 @@
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Digital Design and FPPGA Workshop
HacDC
William Gibb (teachmeFPGA@gmail.com)
Week 3 - Introduction to Combinatorial Verilog
Full adder and ALU exercise
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
For our exercises this week, we'll be working with a few different modeling
styles, focused around a 4-bit full adder. We'll be working with a model
where the 1 bit full adder circuit is explicitly defined, and break that down
into half adders, behavioral and structural models.
The full adder circuit can be constructed from 1-bit half adder circuits.
The truth table for the half adder is as follows.
A B | S Cout
=========
0 0 | 0 0
0 1 | 1 0
1 0 | 1 0
1 1 | 0 1
=========
S = A xor B
Cout = A and B
Two of these cells, plus an additional OR gate, can be used to implement a
full adder. The S output of the first half adder cell is connected to the
input of the second cell, as is the Cin. The S output of the second cell is
the sum S. The Cout is computed by ORing the Cout of both cells.
Likewise, the truth table for the Full Adder is as follows, for reference.
Cin A B | S Cout
===============
0 0 0 | 0 0
0 0 1 | 1 0
0 1 0 | 1 0
0 1 1 | 0 1
1 0 0 | 1 0
1 0 1 | 0 1
1 1 0 | 0 1
1 1 1 | 1 1
================
To do
0) Copy the full adder codes below to files in your working directory.
Be sure to copy a makefile to the directory.
0.a) mkdir a new directory for this example. name it something useful, such as "adder_exercise"
0.b) create a new file for each verilog module, in the form modulename.v where module name is the name of the module. We'll need full_adder.v, full_adder_4bit.v, add test_adder.v.
0.c) copy and paste the code for each module into the file. be sure that anything in the file that isn't verilog code is commented out.
0.d) if your in the vm, type copymake.sh into the command line to copy a makefile into your working directory
1) Change the values of the makefile to test the full adder.
1.a) Change the line SRC and TESTBENCH to include only the .v files created earlier. if you need to add a new source to a project, add it to your makefile as well.
2) Verify the full adder works by simulation.
3) Write a description of the half adder, at gate level
4) Write a full adder description, using the half adders you wrote in step
3. Give this full adder module a different module name than the provided
model.
5) Write a 4 bit full adder module using the new 1 bit full adder. Be sure to
give it a module name different than the name of the provided module.
6) Take a break if you feel needed...or keep on coding
7) Write a 4 bit full adder module using the new 1 bit full adder from step 6.
Be sure to give it a module name different than the name of the provided
module.
8) One last adder - Write a 4 bit behavioral adder module. Use 4 bit inputs
and outputs in this module. Again, give it a new name.
9) Add the new models to the makefile.
-half adder
-full adder from half adders
-4 bit full adder from step 5
-full adder from step 6
-4 bit full adder from step 7
-4 bit full adder from step 8
9) Modify the testbench to instantiate the new modules. You'll need to
instantiate the 4 bit full adder from step 5, step 7 and step 8. This is why
they all need to have unique module names. You'll need to add three 4 bit
wires for connecting the sum output of these new adders, as well as
three 1 bit wires for connecting the cout output of these new adders.
10) Simulate and verify all of the models behave the same way.
Once this is done, and you have simulated the adders and shown that they all
behave the same way, you'll have built the following types of modules
- Structural Model (step 5)
- Behavioral & Hierarchical Model (step 7)
- Behavioral Model (step 8)
After that is done, people are encouraged to take the ALU presented in the
slides and are encouraged to expand the functionality of the ALU to 8 total
functions. The functions that should be added to the ALU are as follows:
- r = ~A (R equals the complement of A)
- r = A ^ B (R equals A xor B)
- r = A << B (R equals A left shifted B bits)
After this functionality has been added to the ALU model, the test bench used
for the 4 bit full adder can be modified to simulate the ALU.
Steps to do this
0) Copy the test bench and makefile to your working directory
1) Add/remove wires and regs as needed
2) Replace the DUT with the ALU
3) Expand the inputs in order to test all of the ALU functions.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Full Adder Code
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
module full_adder(a, b, cin, sum, cout);
input a, b, cin;
output sum, cout;
reg sum, cout;
always @(a or b or cin)
begin
sum = a ^ b ^ cin;
cout= (a & b) | (a & cin) | (b & cin);
end
endmodule
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
module full_adder_4bit (a, b, cin, sum, cout);
input[3:0] a, b;
input cin;
output [3:0] sum;
output cout;
wire c1, c2, c3;
// instantiate 1-bit adders
full_adder FA0(a[0],b[0], cin, sum[0], c1);
full_adder FA1(a[1],b[1], c1, sum[1], c2);
full_adder FA2(a[2],b[2], c2, sum[2], c3);
full_adder FA3(a[3],b[3], c3, sum[3], cout);
endmodule
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
module test_adder;
reg[3:0] a, b;
reg cin;
wire [3:0] sum;
wire cout;
full_adder_4bit dut(a, b, cin,
sum, cout);
initial
begin
a = 4'b0000;
b = 4'b0000;
cin= 1'b0;
#50;
a = 4'b0101;
b = 4'b1010;
// sum = 1111, cout= 0
#50;
a = 4'b1111;
b = 4'b0001;
// sum = 0000, cout= 1
#50;a = 4'b0000;
b = 4'b1111;
cin= 1'b1;
// sum = 0000, cout= 1
#50;
a = 4'b0110;
b = 4'b0001;
// sum = 1000, cout= 0
end // initial begin
initial
begin
$dumpfile ("waves.lxt");
$dumpvars(0,test_adder);
end
endmodule// test_adder
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ALU Code
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
module mul16(i0,i1,prod);
input [15:0] i0,i1;
output [31:0] prod;
// this is a magnitude multiplier
// signed arithmetic later
assign prod = i0 * i1;
endmodule
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
module add32(i0,i1,sum);
input [31:0] i0,i1;
output [31:0] sum;
assign sum = i0 + i1;
endmodule
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
module sub32(i0,i1,diff);
input [31:0] i0,i1;
output [31:0] diff;
assign diff = i0 - i1;
endmodule
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
module mux32two(i0,i1,sel,out);
input [31:0] i0,i1;
input sel;
output [31:0] out;
assign out = sel? i1 : i0;
endmodule
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
module mux32three(i0,i1,i2,sel,out);
input [31:0] i0,i1,i2;
input [1:0] sel;
output [31:0] out;
reg[31:0] out;
always @ (i0 or i1 or i2 or sel)
begin
case (sel)
2???b00: out = i0;
2???b01: out = i1;
2???b10: out = i2;
default: out = 32???bx;
endcase
end
endmodule
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
module alu(a, b, f, r);
input [31:0] a, b;
input [2:0] f;
output [31:0] r;
// wire declarations
wire [31:0] addmux_out, submux_out;
wire [31:0] add_out, sub_out, mul_out;
// module declarations
mux32two adder_mux(b, 32'd1, f[0], addmux_out);
mux32two sub_mux(b, 32'd1, f[0], submux_out);
add32 our_adder(a, addmux_out, add_out);
sub32 our_subtracter(a, submux_out, sub_out);
mul16 our_multiplier(a[15:0], b[15:0], mul_out);
mux32three output_mux(add_out, sub_out, mul_out, f[2:1], r);
endmodule
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,157 @@
Homework/Verilog Coding problems
## An Upcounter design
An upcounter can be made with 3 elements - DFFs, XOR and AND gates.
The equations for a simple upcounter are a chain. The Di and Qi notation
refer to the D and Q ports on a DFF.
D0=!Q0 ^ 1
D1=Q1 ^ Q0
D2=Q2 ^ Q1&Q0
D3=Q3 ^ Q2&Q1&Q0
....
Di=Qi ^ Qi-1&Qi-2 .... &Q2&Q1&Q0
Equations 1
A upcounter described as such will continue to count whenever the
flipflops are driven
by the clock.
Say we wanted to turn the counter off and on?
The first bit, Q0, is fed by the equation D0. Its change is dependent on
the second input to the xor gate, which we see is hardwired to a one. If
we xor a zero, there is no change to the least significant digit, and
the counter won't count.
We change the equations to add an enable signal.
D0=!Q0 ^ Enable
D1=Q1 ^ Q0&Enable
D2=Q2 ^ Q1&Q0&Enable
D3=Q3 ^ Q2&Q1&Q0&Enable
....
Di=Qi ^ Qi-1&Qi-2 .... &Q2&Q1&Q0&Enable
Equations 2
Write verilog code to implement a counter like this and use a testbench
to simulate the design. I would do 4 or 8 bits wide.
## Shift Registers
The LFSR is built on the idea of a shift register. This is constructed
by taking the output of a DFF and connecting it directly to the input on
a second DFF. Lets consider the case of a n bit shift register.
module shift(D, Q, Q_regs, clk, rst);
parameter N=4;
parameter TP=1;
input D, clk, rst;
output Q;
output [N-1:0] Q_regs;
reg [N-1:0] Q_regs;
assign Q = Q_regs[n-1];
always@(posedge clk)
if(rst)
Q_regs <= #Tp 'b0;
else
Q_regs <= #Tp {Q_regs[n-2:0],D};
end module
Code 1 // updated from the slides
Data placed on D is shifted into the DFFs modeled by the always@ process
& the reg data type. The data available on the output is the nth data
bit, so over time data would be shifted in and made available. Table 1
below shows the operation of the shift register.
CLK D Q | Q3 Q2 Q1 Q0
^ 0 0 | 0 0 0 0
^ 1 0 | 0 0 0 1
^ 1 0 | 0 0 1 1
^ 0 0 | 0 1 1 0
^ 1 1 | 1 1 0 1
^ 0 1 | 1 0 1 0
^ 0 0 | 0 1 0 0
^ 0 1 | 1 0 0 0
Table 1
I recommend coding up a shift register and simulate it in order to see
the shift register in action.
## Linear Feedback shift register
A LSFR is a shift register, but the data shifted into the register is
actually a linear combination of the data currently in the register.
From Wikipedia
<http://en.wikipedia.org/wiki/Linear_feedback_shift_register>
"The only linear functions of single bits are xor and inverse-xor; thus
it is a shift register whose input bit is driven by the exclusive-or
(xor) of some bits of the overall shift register value.
The initial value of the LFSR is called the seed, and because the
operation of the register is deterministic, the stream of values
produced by the register is completely determined by its current (or
previous) state. Likewise, because the register has a finite number of
possible states, it must eventually enter a repeating cycle. However, an
LFSR with a well-chosen feedback function can produce a sequence of bits
which appears random and which has a very long cycle.
Applications of LFSRs include generating pseudo-random numbers,
pseudo-noise sequences, fast digital counters, and whitening sequences.
Both hardware and software implementations of LFSRs are common."
Fibonacci LSFRs The bits in the LFSR state which influence the input are
called taps. A maximum-length LFSR produces an m-sequence (i.e. it
cycles through all possible 2n ??? 1 states within the shift register
except the state where all bits are zero), unless it contains all zeros,
in which case it will never change. As an alternative to the XOR based
feedback in a standard LFSR, one can also use XNOR. A state with all
ones is illegal when using an XNOR feedback, in the same way as a state
with all zeroes is illegal when using XOR. This state is considered
illegal because the counter would remain "locked-up" in this state.
End Wikipedia
Maximal length LFSRs are built with specially choosen taps, which are
represented by polynomials. The 3 bit LFSR polynomial x^3+x^2+1 could be
represented by the following implementation.
module lfsr_example(D, Q, Q_bus, clk, rst);
parameter N=3;
parameter Tp=1;
input D, clk, rst;
output Q;
output [N-1:0] Q_regs;
reg [N-1:0] Q_regs;
assign Q = Q_regs[0];
always@(posedge clk)
if(rst)
Q_regs <= #Tp N'b1;
else
Q_regs <= #Tp {Q_regs[1],Q_regs[0],Q_regs[1]^Q_regs[2]};
end module
Code 2
Code 2 shows the implementation taking place inside the always@ block.
There are different ways to do this, this is just one example. For
homework/exercise, implement a LFSR with a maximal length polynomial.
Use a 4, 5, 6, 7 or 8 bit polynomial from the Wikipedia LFSR page in
your implementation and build a testbench to simulate it.
Awesomeness points are awarded for a selfchecking testbench which
actually proves that the LFSR is maximal length.
Other LFSR resources <http://homepage.mac.com/afj/lfsr.html>
<http://www.yikes.com/~ptolemy/lfsr_web/index.htm>
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,147 @@
Code from 4 person hacking session on 11/11.
The following code may or may not work properly - It appears to give relatively sane counter output in GTKWAVE.
// FALLING EDGE D FLIP FLIP MODULE:
//==============================================
module d_ff_gates (d, clk, rst, q, q_bar);
input d, clk, rst;
output q, q_bar;
wire n1,n2,n3,q_bar_n;
wire cn,dn,n4,n5,n6;
// First Latch
not (n1,d);
nand (n2,d,clk);
nand (n3,n1,clk);
nand (dn,q_bar_n,n2);
nand (q_bar_n,dn,n3, !rst);
// Second Latch
not (cn,clk);
not (n4,dn);
nand (n5,dn,cn);
nand (n6,n4,cn);
nand (q,q_bar,n5);
nand (q_bar,q,n6, !rst);
endmodule
// FALLING EDGE D FLIP FLIP TESTBENCH:
//==============================================
module d_ff_gates_tb;
reg d, clk;
wire q, q_bar;
d_ff_gates dut(d, clk, q, q_bar);
initial
begin
d=0; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
d=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
end
initial
begin
$dumpfile ("waves.lxt");
$dumpvars (0, d_ff_gates_tb);
end
endmodule
// 4 BIT COUNTER MODULE:
//==============================================
module upcounter (rst, clk, enable, q, qb);
input rst, clk, enable;
output [3:0] q, qb;
wire d0, d1, d2, d3; // input wires
wire a0, a1; // and wires
//q[1] = 1'b0; q[2] = 1'b0; q[3] = 1'b0; // init q
xor (d0, q[0], 1'b1); // d0 = q0 xor 1
d_ff_gates dff0(d0, clk, rst, q[0], qb[0]);
xor (d1, q[1], q[0]); // d1 = q1 xor q0
d_ff_gates dff1(d1, clk, rst, q[1], qb[1]);
and (a0, q[1], q[0]);
xor (d2, q[2], a0); // d2 = q2 xor (q1 && q0)
d_ff_gates dff2(d2, clk, rst, q[2], qb[2]);
and (a1, q[2], q[1]);
xor (d3, q[3], a1); // d3 = q3 xor (q2 && q1 && q0)
d_ff_gates dff3(d3, clk, rst, q[3], qb[3]);
endmodule
// 4 BIT COUNTER TESTBENCH:
//==============================================
module upcounter_tb;
reg rst, clk, enable;
wire [3:0] q, qb;
upcounter dut(rst, clk, enable, q, qb);
initial
begin
rst = 1;
enable = 0;
clk=0; #1;
rst = 0;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
clk=0; #1;
clk=1; #1;
end
initial
begin
$dumpfile ("waves.lxt");
$dumpvars (0, upcounter_tb);
end
endmodule
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,255 @@
## Shift Register
//filename sr.v
`include "timescale.v"
module sr(D, Q, Q_regs, clk, rst);
parameter Ndepth=4;
parameter TP=1;
input D, clk, rst;
output Q;
output [Ndepth-1:0] Q_regs;
reg [Ndepth-1:0] Q_regs;
assign Q = Q_regs[Ndepth-1];
/* This is a comment block
Hi Elliot
This works fine! */
always@(posedge clk)
if(rst)
Q_regs <= #TP 0; //This is a comment
else
Q_regs <= #TP {Q_regs[Ndepth-2:0],D};
endmodule
## Shift Register Testbench
//
// filename sr_tb.v
//
// Exercise 6
// FPGA Workshop - HacDC
// Group think
//
`include "timescale.v"
module sr_tb();
// Parameters
parameter CLKPERIOD = 20; // 50Mhz w/ 1ns time increments
parameter FINISHTIME = 1000;
// DUT INPUTS
reg D;
reg clk;
reg rst;
// DUT OUTPUTS
wire Q;
wire [3:0] Q_regs;
// Misc
reg finish;
// Event defitions
event reset;
// DUT Instantiation
// shift(.D(), .Q(), .Q_regs(), .clk(), .rst());
sr DUT(.D(D),
.Q(Q),
.Q_regs(Q_regs),
.clk(clk),
.rst(rst));
// --------
// Stimulus
// --------
// Clk Generation
always
#(CLKPERIOD/2) clk = ~clk;
// Initial Conditions
initial
begin
D = 0;
rst = 0;
clk = 1;
finish = 0;
// Wait to end the simulation
#FINISHTIME
$display("=============================");
$display("I'm done now!");
$display("Finished at time %5d", $time);
$finish;
end
// Inputs
initial
begin
#1 -> reset; //event calls like to occur after some
//period of time
wait(finish);
finish = 0;
repeat (5)
#CLKPERIOD;
D=1;
wait (Q);
#CLKPERIOD
D=1;
#CLKPERIOD
D=0;
#CLKPERIOD
D=1;
#CLKPERIOD
D=0;
repeat (5)
#CLKPERIOD;
$display("================");
$display("End of Stimulus");
$display("Finishing at time %5d", $time);
$finish;
end
// Event defitions
always @(reset)
begin
$display ("Resetting the Registers");
#(CLKPERIOD/2) rst = 1;
#CLKPERIOD rst = 0;
finish = 1;
end
// Monitor
initial
begin
$dumpfile ("waves.lxt");
$dumpvars(0,sr_tb);
end
endmodule
## Linear Feedback Shift Register
module lfsr(Q, Q_regs, clk, rst);
// x^5+x^3+1
parameter N=5;
parameter Tp=1;
input clk, rst;
output Q;
output [N-1:0]
Q_regs; reg [N-1:0] Q_regs;
assign Q = Q_regs[0];
always@(posedge clk)
if(rst)
Q_regs<= #Tp 5'b1;
else
Q_regs<= #Tp {Q_regs[3], Q_regs[2], Q_regs[1], Q_regs[0], Q_regs[4]^Q_regs[2]};
endmodule
## LFSR Testbench
//
// Exercise 6
// FPGA Workshop - HacDC
// Group think
//
`include "timescale.v"
module lfsr_tb();
// Parameters
parameter CLKPERIOD = 20; // 50Mhz w/ 1ns time increments
parameter FINISHTIME = 2*1000;
// DUT INPUTS
reg clk;
reg rst;
// DUT OUTPUTS
wire Q;
wire [4:0] Q_regs;
// Misc
reg finish;
// Event defitions
event reset;
// DUT Instantiation
// lfsr(.Q(), .Q_regs(), .clk(), .rst());
lfsr DUT(.Q(Q),
.Q_regs(Q_regs),
.clk(clk),
.rst(rst));
// --------
// Stimulus
// --------
// Clk Generation
always
#(CLKPERIOD/2) clk = ~clk;
// Initial Conditions
initial
begin
rst = 0;
clk = 1;
finish = 0;
// Wait to end the simulation
#FINISHTIME
$display("=============================");
$display("I'm done now!");
$display("Finished at time %5d", $time);
$finish;
end
// Inputs
initial
begin
#1 -> reset; //event calls like to occur after some
//period of time
wait(finish);
finish = 0;
repeat (62)
#CLKPERIOD;
$display("================");
$display("End of Stimulus");
$display("Finishing at time %5d", $time);
$finish;
end
// Event defitions
always @(reset)
begin
$display ("Resetting the Registers");
#(CLKPERIOD/2) rst = 1;
#CLKPERIOD rst = 0;
finish = 1;
end
// Monitor
initial
begin
$dumpfile ("waves.lxt");
$dumpvars(0,lfsr_tb);
end
endmodule
## Timescale
//
// filename timescale.v
//
`timescale 1ns / 10ps
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,144 @@
## Level-to-pulser
Finite state machine implementation of a device that takes a level
change (low to high) and turns it into a one-period pulse.
module levelToPulse(clk, in, out, reset);
input clk, in, reset;
output reg out;
reg [1:0] state, next;
// States
parameter WAIT_LOW = 0;
parameter WAIT_HIGH = 1;
parameter RISING = 2; // I've just seen a rising edge
parameter PULSE = 3; // I'm in the process of generating a pulse
// Reset or update the state on every clock
always @ (posedge clk or reset)
begin
if (reset)
begin
state <= WAIT_LOW;
next <= WAIT_LOW;
out = 0;
end
else
state <= next;
end
// What to do in each state
always @ (state or in) begin
case (state)
WAIT_LOW:
begin
if (in == 1)
next = RISING;
end
RISING:
begin
out = 1;
next = PULSE;
end
PULSE:
begin
out = 0;
if (in == 0)
next = WAIT_LOW;
else
next = WAIT_HIGH;
end
WAIT_HIGH:
if (in == 0)
next = WAIT_LOW;
endcase // case (state)
end
endmodule
## Level-to-pulser Testbench
module test_stateMachine();
// Parameters
parameter CLKPERIOD = 20; // 50MHz at 1ns
parameter FINISHTIME = 1000; // 1ms
// DUT inputs
reg clk, in, reset;
// DUT outputs
wire out;
// DUT instantiation
//
levelToPulse DUT(clk, in, out, reset);
// Stimulus
// Clock generation
always
#(CLKPERIOD/2) clk = ~clk;
// Initial conditions
initial
begin
in = 0;
clk = 1;
reset = 0;
// When at finishtime -- this shouldn't happen. It's just a safety.
#FINISHTIME $display ("Reached the end of the sidewalk: %5d", $time);
$finish;
end
// Inputs
initial
begin
// Reset and wait
#3 reset = 1;
#3 reset = 0;
repeat(5)
#CLKPERIOD;
// Go level high
in = 1;
repeat(5)
#CLKPERIOD;
// Go low
in = 0;
repeat(4)
#CLKPERIOD;
// Delay a short time so that input is in different phase with the clock
#(CLKPERIOD / 2);
in = 1;
repeat(5)
#CLKPERIOD;
$display("-----------------------");
$display("- Normal End at %5t -", $time);
$display("-----------------------");
$finish;
end
// Monitor
initial
begin
$dumpfile ("test_stateMachine.lxt");
$dumpvars(0, test_stateMachine);
end
endmodule
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,110 @@
- Download the Frequency Counter and Frequency Generator reference
designs from
<http://www.xilinx.com/products/boards/s3estarter/reference_designs.htm>
- Download the Picoblaze processor core from
<http://www.xilinx.com/products/ipcenter/picoblaze-S3-V2-Pro.htm>
- Unzip these projects & picoblaze source to your ~/Projects directory
(or appropriatlely)
- Implementing the projects directly
- Each project comes with a .bit file that you can use to program the
FPGA starter kit with. Use impact to program the chip.
- On Windows, you can run the install batch scripts to run impact
automatically.
- Find a buddy with a board, and each of you program your respective
boards. Grab an SMA cable and use that to check the output of the
generator with the counter.
- Implementing the projects through ISE
- Implementing the frequency counter
- In the frequency counter folder, there is a pdf. It is the readme
for the project. It will be your friend - it details how to
quickly run the project, setup the ISE project, design details for
the hardware and picoblaze software, and some more project ideas.
- In ISE, create a new design called "s3e_ref_freq_count" in your
~/Projects directory.
- Add the existing .vhd and .ucf sources from the frequency counter
reference design folder that you unzipped
- Add the existing .vhd source for kcpsm3.vhd from the picoblaze
VHDL source folder
- A portion of the design uses a undocumented mode of operation for
the S3E DCM. Instructions for enabling this can be found in the
dcm_fixed_osc.vhd file. In my experience, this breaks P&R (-will),
and this should be removed in order to complete the design. The
DCM is simply working in an free-running oscillator mode; this is
merely used to provide a frequency source for testing and its
removal will not adversely affect the design.
- You'll need to modify the **frequency_counter.vhd** file in the
project, to remove the instance of 'dcm_fixed_osc.vhd' from the
design. We won't be doing anything in-depth with VHDL so don't
be intimidated by the different language syntax.
- You'll want to comment out the component dcm_fixed_osc (approx
line 117) . In VHDL, comments are done with double hypens, --.
- Commented out component
<!-- -->
--
-- Fixed frequency oscillator using a DCM
--
--component dcm_fixed_osc
-- port( clk_out : out std_logic;
-- kick_start : in std_logic );
-- end component;
- - The instantiation of the dcm_fixed_osc needs to be commented out
(approximately line 223)
- Commented portion
<!-- -->
-- dcm_fixed_oscillator: dcm_fixed_osc
-- port map ( clk_out => dcm_oscillator,
-- kick_start => source_control(7) );
- - Now we'll need to change the multiplexer. To keep the design nearly
intact, we'll replicate the ring oscillator signal twice (approx
line 245).
- Changed multiplexer
<!-- -->
freq_for_measurement <= sma_clk when (source_control(1 downto 0)="00")
else clk_50mhz when (source_control(1 downto 0)="01")
else ring_oscillator when (source_control(1 downto 0)="10")
else ring_oscillator;
- - Select the top level module, and take it through the implementation
process - synthesis, place and route, generate programming file.
- Use impact to program the .bit file to the FPGA! It should
- - Implementing the frequency generator
- In the frequency generator folder, there is a pdf. It is the
readme for the project. It will be your friend - it details how to
quickly run the project, setup the ISE project, design details for
the hardware and picoblaze software, and some more project ideas.
- In ISE, create a new design called "s3e_ref_freq_ref" in your
~/Projects directory.
- Add the existing .vhd and .ucf sources from the frequency ref
reference design folder that you unzipped
- Add the existing .vhd source for kcpsm3.vhd from the picoblaze
VHDL source folder
- A portion of the design uses a undocumented mode of operation for
the S3E DCM. Instructions for enabling this can be found on page
13 of the Frequency generator documentation. **The design will not
work if the instructions are not followed!**
- Afer this is done, you should be able to implement this design and
program the FPGA with impact.
- Things you can do!
- You can use the .ucf file to move around the pin assignments. For
instance, you can have the frequency counter read the clock input
off of a stake or one of the pmod headers.3
- Easy extension - create a second ring oscillator, called ring_osc2.
You can extend the ring_osc.vhd for this purpose, adding additional
delay stages will decrease the frequency generated. Follow a similar
format, to the rest of the VHDL code, to declare the component,
instantiation, a second ring_oscillator signal, and modify the
multiplexer.
- Once that is done, synthesis, P&R, and program the design. Select
the second ring oscillator and see what its frequency is!
- Look at the PDF's which come with the reference designs for more
ideas!
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,85 @@
Placeholder...
## Verilog Define Statements
Verilog provides a text macro substitution facility. This may be useful
for defining constants, opcodes, or with conditional compilation. To
define a text macro, use the define keyword.
`define myCode 13
When you want to use the macro, simple use the macroname with a accent
key.
a = `myCode;
The following compile directives are available for use
`include Includes another file, avoid using pathnames
`define Define a text macro
`ifdef Starts conditional compilation, dependant on if a macro has been defined
`else Alternate condiational compilation
`endif Ends conditional compilation
`ifndef Starts conditional compilation, like `ifdef
`elseif Alternative conditional compilation
The use of *\`define* doesn't require that the macro be given a value.
This allows for the following code style (exceprt from a defines.v
file).
// Number of bits used for devider register. If used in system with
// low frequency of system clock this can be reduced.
// Use SPI_DIVIDER_LEN for fine tuning theexact number.
//
`define SPI_DIVIDER_LEN_8
//`define SPI_DIVIDER_LEN_16
//`define SPI_DIVIDER_LEN_24
//`define SPI_DIVIDER_LEN_32
`ifdef SPI_DIVIDER_LEN_8
`define SPI_DIVIDER_LEN 5 // Can be set from 1 to 8
`endif
`ifdef SPI_DIVIDER_LEN_16
`define SPI_DIVIDER_LEN 16 // Can be set from 9 to 16
`endif
`ifdef SPI_DIVIDER_LEN_24
`define SPI_DIVIDER_LEN 24 // Can be set from 17 to 24
`endif
`ifdef SPI_DIVIDER_LEN_32
`define SPI_DIVIDER_LEN 32 // Can be set from 25 to 32
`endif
Likewise, conditional compilation of code is possible
module add23(
a,
b,
`ifdef ADD3
c,
`endif
sum);
output [3:0] sum;
input [3:0] a, b;
`ifdef ADD3
input [3:0] c;
`endif
assign sum =
`ifdef ADD3
c+
`endif
a+b;
endmodule
## Verilog Events
Lorem Ipsum
## Verilog Tasks
Lorem Ipsum
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,160 @@
*These notes are intended to highlight bits of information from the
Xilinx KCPSM3 manual distributed with the microprocessor*
**Xilinx Picoblaze**
KCPSM3 - An 8 Bit Microcontroller for Xilinx Spartan 3 & Virtex 2/4
devices
**What is kcpsm3**
Very Simple microcontroller. Can be used for data processing or as a
complex state machine.
**KCPSM** - (**K**)constant **C**oded **P**rogrammable **S**tate
**M**achine
Its very small - 96 Spartan3 slices + 1 block ram
Our boards - 4656 slices -\> that is 2% of the slice resources!
Entirely embedded in the fpga fabric - integrates with all the logic
you've already been writing!
**kcpsm is small**
Konstant explained - notice how the mips = 1/2 clock speed?
CPI of the processor is 2. And fixed at 2. that makes it very easy to
determine the runtime of a program in an embedded system.
**kcpsm3 architecture**
architecture is closed (it is a xilinx macro, not a readily readable
verilog design) but the architecture is not secret though
simple input port/output based IO, up to 256 addressable 8bit
ports/devices 16 general purpose registers 64 byte memory/scratch pad
alu with carry/zero flags single interrupt line/acknowledge program
counter control/instruction decoder program memory
**device features**
program memory - 1 18kb block ram! this stores 1024 18 bit instructions.
16 general purpose registers. No dedicated zero register or accumulator
alu - does add/sub/add&sub with carry alu - load/and/or/xor bitwise
alu - shift/rotates flags and flow control - help determine program flow
with carry/zero flags + conditional jump/call instructions interrupts -
jumps to a single address (initiates CALL 3FF) - an ISR
**using the kcpsm3** used as a verilog module in the design flow. simply
copy the kcpsm3.v file into your project and instantiate it kcpsm3
assembler generates a verilog memory file - use that in your design as
well. connect the two modules together. alternatively - use the
embedded_kcpsm3.v file
**instruction set**
1. program control group
1. unconditional jump
2. conditional jumps (branches!)
3. call/return with stack depth of 31
2. interrupt group
1. enable/disable interrupt
2. return from isr & either enable/disable the interrupt
3. storage group
1. store/fetch data from the scratch pad
4. i/o group
5. arithmetic group
1. add/sub/compare
1. work with 2 operands or 1 operand and a constant
6. logical group
1. load/and/or/xor/test
1. work with 2 operands or 1 operand and a constant
7. shift/rotate group
1. both left/right shifts available
pointers available
**port access**
input and output ports available.
very simple with the two cycle operation
1. 1st cycle - instruction decode
2. 2nd cycle - instruction execute
Read strobe - not needed, port_id used w/ a mux to determine what gets
put on input port. data captured by kcpsm3 on next clock edge.
write strobe - use as a clock enable signal for external circuitry to
capture data from out port.
\<8 output ports, use 1hot addressing
\>8 output ports, use address decoder to enable the correct port
input ports -\> leads itself to a multiplexed architecture
**reset**
synchronous to kcpsm3 clock. blanks the processor and restarts it at
address 0x000.
**picoblaze assembler**
xilinx assembler is a dos program, which accepts .psm (picoblaze
assembler) source files and outputs vhdl/verilog files for your use
multipass, lots of quick information. don't be afraid to dump the file.
possible to run under wine/dosbox, lots of alternatives available.
**program syntax**
1. blank lines are ignored
2. comments begin with ;
3. registers - form sX, where X={0,1,2,..9,A,...,E,F}
4. constants
5. Data value - 00 -\>FF
6. Port value - 00 -\>FF
7. Address - 000 -\>3FF
8. Line labels: Useful for call and jump instructions!
constant -\> define a label used within the program for holding a
constant value. like a C macro
namereg -\> define a label used within the program for identifying a
register. allows for much more readable code.
**Interrupts**
slides are really detailed about this and good - read them
**call/return stack**
31 level call/return stack. program counter preserved upon the calll
instruction or interrupt. registers are not preserved - be careful not
to clobber your registers.
**simulation** picoblaze assembly simulators exist - \> prove your code
by hand (slow) nothing stopping you from simulating the HDL design - but
can be very slow. quicker to fix hardware design -\> then code and
download to picoblaze via jtag and run the software.
**other picoblaze ide/assemblers/simulators/implementations that are not
from xilinx**
1. **pacoblaze** [Pacoblaze](http://www.bleyer.org/pacoblaze/)
opensource, picoblaze compliant verilog implementation. complete
with java assembler.
2. **openPicIDE** [openPicIDE](http://www.openpicide.org/) opensource
picoblaze ide/assembler/simulator. very robust! works on linux, mac,
windows.
3. **mediatronix picoblaze ide**
[mediatronix](http://www.mediatronix.com/tools/index.htm) amazing
windows picoblaze ide
4. **kpicosim** [kpicosim](http://www.xs4all.nl/~marksix/) picoblaze
simulator and assembler. linux
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,284 @@
this is known broke - will
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 11:23:27 01/28/2010
// Design Name:
// Module Name: frequency_counter
// Project Name:
// Target Devices:
// Tool versions:
// Description: Verilog implementatino of the frequency counter reference
// design from Xilinx for Spartan 3E Starter Kit
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module frequency_counter(
output [7:0] led,
input [4:0] sw,
output strataflash_oe,
output strataflash_ce,
output strataflash_we,
inout [7:4] lcd_d,
output lcd_rs,
output lcd_rw,
output lcd_e,
input sma_clk,
input clk_50mhz
);
// signals for counting the test clock
reg [3:0] ab_switch_delay;
reg a_count_ce, b_count_ce;
reg [31:0] a_count, b_count;
reg a_count_rst, b_count_rst;
reg freq_for_measurement;
wire test_clk;
// signals for 1 second interrupt generation and couter switching
reg ab_switch;
reg [99:0] interrupt_delay;
reg [25:0] one_second_count;
reg one_second_pulse;
reg interrupt;
reg [7:0] source_control;
// signals for processor interconnect
reg [7:0] in_port;
wire [7:0] out_port;
wire write_strobe, read_strobe;
wire [7:0] port_id;
wire interrupt_ack;
wire [17:0] instruction;
wire [9:0] address;
// lcd wires
reg [7:0] lcd_reg;
wire lcd_drive;
wire lcd_output_data;
// led reg
reg [7:0] led_reg;
// ring osscillator instantiations
ring_osc logic_oscillator (.reset(source_control[6]),.osc_out(ring_oscillator));
ring_osc2 logic_oscillator2 (.reset(source_control[6]),.osc_out(ring_oscillator2));
// frequency selection mux - purely combinational
always@(sma_clk or clk_50mhz or ring_oscillator or ring_oscillator2)
if(source_control[1:0] == 2'b00)
freq_for_measurement = sma_clk;
else if(source_control[1:0] == 2'b01)
freq_for_measurement = clk_50mhz;
else if(source_control[1:0] == 2'b10)
freq_for_measurement = ring_oscillator2;
else
freq_for_measurement = ring_oscillator;
// global clock buffer the test clock
BUFG buffer_clkin(.O(test_clk), .I(freq_for_measurement));
// counter switch control
always@(posedge test_clk)
begin
ab_switch_delay <= {ab_switch_delay[2:0], ab_switch};
case(ab_switch_delay[3:1])
3'b000: begin
a_count_ce <= 1;
b_count_ce <= 0;
end
3'b111: begin
a_count_ce <= 0;
b_count_ce <= 1;
end
default: begin
a_count_ce <= 1;
b_count_ce <= 0;
end
endcase
end
// test counters
always@(posedge test_clk or posedge a_count_rst)
if(a_count_rst)
a_count <= 'b0;
else if(a_count_ce)
a_count <= a_count+1;
else
a_count <= a_count;
always@(posedge test_clk or posedge b_count_rst)
if(b_count_rst)
b_count <= 'b0;
else if(b_count_ce)
b_count <= b_count+1;
else
b_count <= b_count;
// one second interrupt generation and clock switching
/* always@(posedge clk_50mhz)
begin
// divide by 50,000,000 to generate pulse
if(one_second_count == 26'd49999999)
begin
one_second_count <= 'b0;
one_second_pulse <= 1'b1;
end
else
begin
one_second_count <= one_second_count + 1;
one_second_pulse <= 1'b0;
end
// delay 100 clock cycles before generating interrupt
interrupt_delay <= {interrupt_delay[98:0], one_second_pulse};
// interrupt generation
if (interrupt_ack == 1'b1)
interrupt <= 1'b0;
else if (interrupt_delay[99] == 1'b1)
interrupt <= 1'b1;
else
interrupt <= interrupt;
// counter selection switch toggle's each second
if (one_second_pulse == 1'b1)
ab_switch <= ~ab_switch;
end*/
always@(posedge clk_50mhz)
begin
// divide by 50,000,000 to generate pulse
if(one_second_count == 26'd49999999)
begin
one_second_count <= 'b0;
one_second_pulse <= 1'b1;
end
else
begin
one_second_count <= one_second_count + 1;
one_second_pulse <= 1'b0;
end
end
always@(posedge clk_50mhz)
begin
// delay 100 clock cycles before generating interrupt
interrupt_delay <= {interrupt_delay[98:0], one_second_pulse};
end
always@(posedge clk_50mhz)
begin
// interrupt generation
if (interrupt_ack == 1'b1)
interrupt <= 1'b0;
else if (interrupt_delay[99] == 1'b1)
interrupt <= 1'b1;
else
interrupt <= interrupt;
end
always@(posedge clk_50mhz)
begin
// counter selection switch toggle's each second
if (one_second_pulse == 1'b1)
ab_switch <= ~ab_switch;
else
ab_switch <= ab_switch;
end
// picoblaze instantiation
kcpsm3 processor (.address(address),
.instruction(instruction),
.port_id(port_id),
.write_strobe(write_strobe),
.out_port(out_port),
.read_strobe(read_strobe),
.in_port(in_port),
.interrupt(interrupt),
.interrupt_ack(interrupt_ack),
.reset(reset),
.clk(clk_50mhz));
fc_ctrl program_rom (.address(address),
.instruction(instruction),
.proc_reset(proc_reset),
.clk(clk_50mhz));
// processor input ports
always@ (posedge clk_50mhz)
case(port_id[7:4])
// read A counter
4'b0000: in_port <= a_count[7:0];
4'b0001: in_port <= a_count[15:8];
4'b0010: in_port <= a_count[23:16];
4'b0011: in_port <= a_count[31:24];
// read B counter
4'b0100: in_port <= b_count[7:0];
4'b0101: in_port <= b_count[15:8];
4'b0110: in_port <= b_count[23:16];
4'b0111: in_port <= b_count[31:24];
// read slide switches
4'b1000: in_port <= {3'b000, ab_switch, sw};
// read LC Ddata at address 90 hex
4'b1001: in_port <= {lcd_d, 4'b0000};
// original design used a dont care condition
// I've decided to let it retain its value.
default: in_port <= in_port;
endcase
// output ports
always@ (posedge clk_50mhz)
if(write_strobe)
case(port_id[3:0])
// LED register at address 0x01
4'b0001: led_reg <= out_port;
// Counter reset controls at 0x02
4'b0010: begin
a_count_rst <= out_port[0];
b_count_rst <= out_port[1];
end
// LCD data/controls at 0x04
4'b0100: begin
lcd_reg <= out_port;
end
// Source selection and control at 0x08
4'b1000: source_control <= out_port;
endcase
// LCD controls
assign lcd_rw_control = lcd_reg[1];
assign lcd_drive = lcd_reg[3];
assign lcd_output_data = lcd_reg [7:4];
// LCD Outputs
assign lcd_e = lcd_reg[0];
assign lcd_rw = lcd_rw_control && lcd_drive;
assign lcd_rs = lcd_reg[2];
assign lcd_d = ((lcd_rw_control == 1'b0) && (lcd_drive == 1'b1)) ? lcd_output_data : 4'bZZZZ;
// LED assignment
//assign led = led_reg;
// Debug assignments
assign led[7]=led_reg[7]; //A counter
assign led[6]=led_reg[0]; //B counter
assign led[5]=a_count[10]; // should toggle at 8hz when enabled
assign led[4]=b_count[10]; // should toggle at 8hz when enabled
assign led[3]=one_second_count[24]; // should toggle very fast.
assign led[2]=one_second_pulse; // once per second
assign led[1]=interrupt_ack; //interrupt ack
assign led[0]=interrupt; //interrupt
// strataflash chip enable signals to disable onboard strataflash
assign strataflash_we = 1'b1;
assign strataflash_ce = 1'b1;
assign strataflash_oe = 1'b1;
endmodule
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,425 @@
## PicoBlaze Flow / Tutorial
**THIS SET OF INSTRUCTIONS ASSUMES THE READER IS FAMILIAR WITH THE ISE
SUITE FLOW FOR CREATING, IMPLEMENTING AND PROGRAMING PROJECTS.**
### Overview of Picoblaze / ISE Development flow
The PicoBlaze development flow is different from the FPGA flow we've
seen so far. We have to use a new tool, a PicoBlaze assembler, in
conjunction with the ISE tool set.
<figure>
<img src="Picoblaze_flow.png" title="File:Picoblaze_flow.png" />
<figcaption><a
href="File:Picoblaze_flow.png">File:Picoblaze_flow.png</a></figcaption>
</figure>
I reccomend placing a folder named 'asssembly' or something else
memorable in the root of your desired ISE project. This will keep an
entire project togetheer in a single directory. You'll want to copy the
ROM_form.vhd file from the picoblaze processor distribution to a
convenient place, such as ./assembly directory or your project
directory. We'll need to have a copy of this to use later.
The new tool we'll be working with today is openpicide. It is a project
management IDE, Syntax check, program assembler and device simulator. It
is opensource project, based on the QT framework. We'll be using it to
generate the program ROM as a VHDL block ram file, which will be used
with our design. The structure of our example project will look like the
following:
1. top_level.v
1. embedded_kcpsm3.v
1. kcpsm3.v
2. prog_rom.vhd - This is the file generated by the assembler.
2. project_constraints.ucf
In general, a picoblaze design would look like this
1. top_level.v
1. embedded_kcpsm3.v
1. kcpsm3.v
1. prog_rom.vhd - This is the file generated by the
assembler.
2. periperal1.v
3. periperal2.v
1. sub_module1.v
2. ....
4. other logic as needed
2. project_constraints.ucf
## Example \#1
### Picoblaze simple example / toolchain tutorial
To begin, make sure you've got Xilinx ISE and OpenpicIDE installed. You
can obtain openpicIDE here <http://openpicide.org/> You'll also need to
get the picoblaze download package.
First, we'll create the ISE project. Create a new project called
picoblaze_example1 in your projects directory. Add copies of the
following files from the picoblaze download package.
- embedded_kcpsm3.v
- kcpsm3.v
Then create 2 new source files
- constraints.ucf
- picoblaze_example1.v.
Copy and paste the contents of these files from the wiki \[see below\].
You should note that your missing a file, prog_rom, which is in the
embedded_kcpsm3 module. Do not attempt to implement the design - it will
not work until we generate the program ROM.
When openpicide opens, you'll want to create a project. You should save
the project file in your 'assembly' folder as "picoblaze_example1".
Under the settings for the project, you'll need to do the following:
1. Set the processor to Xilinx picoblaze
2. Under the VHDL tab, set the entity name to "prog_rom"
3. Set the vhdl source file to the ROM_form.vhd file we copied earlier.
4. You can leave the rest of the settings to their default values.
You'll then need to create a new file - use the new file button in the
upper left corner, or go to **File** -\> **New**. Copy and paste the 1st
example source file from the wiki. Using the **Picoblaze Menu** Run a
syntax check on the code to make sure it is correct, and then generate a
VHDL memory file from the code. Save the file as "prog_rom_example1.vhd"
in your assembly section. You can now move back to ISE.
**note: the picoblaze assembly files and the openpicide project file
need to be in the same directory**
Now, add the program file "prog_rom_example1.vhd" to your project, using
"Add Copy of Source". You'll notice that the prog_rom module is no
longer missing. You now need to comment out line 29, defining the
constraint for SW1, from the UCF file. After that is commented out, you
can implement the design. After programming the board, you should now
see the LED's flipping on and off; if so, you have a working Picoblaze
toolchain.
### constraints.ucf
This constraints file can be used with the design examples covered in
this tutorial.
#
# UCF For Picoblaze Examples
#
# Period constraint for 50MHz operation, assume a 50% duty cycle, +/- 10%
#
NET "CLK_50MHZ" PERIOD = 20.0ns HIGH 40%;
#
# soldered 50MHz Clock.
#
NET "CLK_50MHZ" LOC = "C9" | IOSTANDARD = LVTTL;
# Simple LEDs
# Require only 3.5mA.
#
NET "LED<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
NET "LED<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
NET "LED<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
NET "LED<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
NET "led<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
NET "led<5>" LOC = "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
NET "led<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
NET "led<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
# Simple switches
# Pull UP resistors used to stop floating condition during switching.
# sw0
NET "FPGA_RESET" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP;
# sw1
NET "SW1" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP;
### picoblaze_example1.v
module picoblaze_example1(
input FPGA_RESET,
input CLK_50MHZ,
output [7:0] LED
);
wire clock = CLK_50MHZ;
// reset is active high.
// if no reset signal input
// then tie reset to zero here.
wire reset = FPGA_RESET;
wire [7:0] port_id;
wire write_strobe;
wire read_strobe;
wire [7:0] out_port;
wire [7:0] in_port=0;
wire interrupt=0;
wire interrupt_ack;
embedded_kcpsm3 EMBEDDED(
.port_id(port_id),
.write_strobe(write_strobe),
.read_strobe(read_strobe),
.out_port(out_port),
.in_port(in_port),
.interrupt(interrupt),
.interrupt_ack(interrupt_ack),
.reset(reset),
.clk(clock)
);
// only one bit written to by picoblaze, the LED.
// therefore don't need to decode port_id.
// if write_strobe asserts, grab out_port[0] and
// hold it in userbit.
reg [7:0] userbit = 0;
always @(posedge clock) begin
if(write_strobe) begin
userbit <= out_port;
end
end
assign LED = userbit;
endmodule
### example \#1 source
;
; simple example code, original
;
start: LOAD s9, 0xAA
drive_wave: OUTPUT s9, 0x02 ; write s9 register to userbit
LOAD S2, 0x0F ; S2 initial value
loop2: LOAD S1, 0xFF ; S1 initial value
loop1: LOAD s0, 0xFF ; S0 initial value
loop0: SUB s0, 0x01
JUMP NZ, loop0
SUB s1, 0x01
JUMP NZ, loop1
SUB s2, 0x01
JUMP NZ, loop2
;
XOR s9, 0xFF ;toggle register
JUMP drive_wave
## Example \#2
### Expanding on the example
Create a new picoblaze project, in the assembly directory. Use the
source from example \#2 to create a new program rom file. You can name
this program rom "prog_rom_example2.vhd". Copy this into your ISE
project, and then remove the original prog_rom_example1.vhd from your
project. Rebuild the project and reprogram your board. Your LEDs should
be shifty now, instead of inverting!
### picoblaze_example2.psm source
;
; simple example code, shifting
; wait longer too
;
start: LOAD s9, 0xA5 ; 10100101 ; <---- THIS CHANGED
drive_wave: OUTPUT s9, 0x02 ; write s9 register to userbit
LOAD S2, 0x2F ; S2 initial value <---- THIS CHANGED
loop2: LOAD S1, 0xFF ; S1 initial value
loop1: LOAD s0, 0xFF ; S0 initial value
loop0: SUB s0, 0x01
JUMP NZ, loop0
SUB s1, 0x01
JUMP NZ, loop1
SUB s2, 0x01
JUMP NZ, loop2
;
RL s9 ; shift left register ; <---- THIS CHANGED
JUMP drive_wave
## Example \#3
### Lets add some input
Lets read in a switch now! To do this, you can do one of two things. You
can add a input port, and add the multiplexed input re g manually. I've
already built this example, so you can create a new ISE project. Can
call this project "picoblaze_example3". Follow the instructions from
earlier in the tutorial, but use the following verilog source file.
You'll also need to create a new OpenPicIDE project with the source used
in the following example. Make sure that SW1 is not commented out in
your UCF file.
### picoblaze_example3.v source
module picoblaze_example3(
input FPGA_RESET,
input CLK_50MHZ,
input SW1,
output [7:0] LED
);
wire clock = CLK_50MHZ;
// reset is active high.
// if no reset signal input
// then tie reset to zero here.
wire reset = FPGA_RESET;
wire [7:0] port_id;
wire write_strobe;
wire read_strobe;
wire [7:0] out_port;
reg [7:0] in_port;
wire [7:0] switches;
wire interrupt=0;
wire interrupt_ack;
embedded_kcpsm3 EMBEDDED(
.port_id(port_id),
.write_strobe(write_strobe),
.read_strobe(read_strobe),
.out_port(out_port),
.in_port(in_port),
.interrupt(interrupt),
.interrupt_ack(interrupt_ack),
.reset(reset),
.clk(clock)
);
// only one bit written to by picoblaze, the LED.
// therefore don't need to decode port_id.
// if write_strobe asserts, grab out_port[0] and
// hold it in userbit.
reg [7:0] userbit = 0;
always @(posedge clock)
if(write_strobe)
userbit <= out_port;
// only one bit is read by picoblaze, the SW1.
// therefore don't need to decode port_id.
// if read_strobe asserts, grab swib out_port[0] and
// hold it in userbit.
always @(posedge clock)
if(read_strobe)
in_port <= switches;
else
in_port <= 8'bX;
assign LED = userbit;
assign switches = {7'b0, SW1};
endmodule
### picoblaze_example3.psm
;
; simple example code, shifting and inverting
; wait longer too
;
; read in a switch at each loop, if the switch is 1 then invert
; the register instead of shifting it
;
;
start: LOAD s9, 0xA5 ; 10100101
drive_wave: OUTPUT s9, 0x02 ; write s9 register to userbit
LOAD S2, 0x2F ; S2 initial value
loop2: LOAD S1, 0xFF ; S1 initial value
loop1: LOAD s0, 0xFF ; S0 initial value
loop0: SUB s0, 0x01
JUMP NZ, loop0
SUB s1, 0x01
JUMP NZ, loop1
SUB s2, 0x01
JUMP NZ, loop2
; Read the inport to s8
INPUT s8, 0x01
; test bit 0, if 1, set carry flag
TEST s8, 0x01
; if (s8[0] == 1) invert_wave else shift_wave
JUMP C, invert_wave
; shift the wave and drive it
shift_wave: RL s9 ; shift left register
JUMP drive_wave
; invert the wave and drive it
invert_wave: XOR s9, 0xFF ;toggle register
JUMP drive_wave
However, that code is a bit hard to read!! It can be much easier to read
mnemonics instead of hex value and register id's. After getting the code
above working, go ahead and add the following to the top of your
picoblaze assembly source.
;
; Make it human readable with mnemonics!
;
NAMEREG S0, I_VAR
NAMEREG S1, J_VAR
NAMEREG S2, K_VAR
NAMEREG S9, WAVE_VAR
NAMEREG S8, SCRATCH_VAR
CONSTANT INITIAL_I, 0xFF
CONSTANT INITIAL_J, 0xFF
CONSTANT INITIAL_K, 0x2F
CONSTANT INITIAL_WAVE, 0xA5 ;10100101
CONSTANT BITMASK, 0x01
;
After adding this section to your code, go through and replace the
following items
- Register references, sX, should be replaced with the variable names
- Constants which are named should be replaced.
After replacing the constants, you're code should look like this
start: LOAD WAVE_VAR, INITIAL_WAVE ;
drive_wave: OUTPUT WAVE_VAR, 0x02 ; write s9 register to userbit
LOAD K_VAR, INITIAL_K ; S2 initial value
loop2: LOAD J_VAR, INITIAL_J ; S1 initial value
loop1: LOAD I_VAR, INITIAL_I ; S0 initial value
loop0: SUB I_VAR, 0x01
JUMP NZ, loop0
SUB J_VAR, 0x01
JUMP NZ, loop1
SUB K_VAR, 0x01
JUMP NZ, loop2
; Read the inport to s8
INPUT SCRATCH_VAR , 0x01
; test bit 0, if 1, set carry flag
TEST SCRATCH_VAR , BITMASK
; if (s8[0] == 1) invert_wave else shift_wave\
JUMP C, invert_wave
; shift the wave and drive it
shift_wave: RL WAVE_VAR ; shift left register
JUMP drive_wave
; invert the wave and drive it
invert_wave: XOR WAVE_VAR, 0xFF ;toggle register
JUMP drive_wave
## Run the simulator
Now we have mnemonics entered into our code, we can easily tweak it.
First, we can change the I_Var, J_Var, K_Var, to be smaller values, such
as 0x0F. You can then step through the program, or just run it, in the
OpenPicIDE simulator.
## Acknowledgements / References
This was based on a simple example found here
<http://forums.xilinx.com/xlnx/board/message?board.id=PicoBlaze&thread.id=780>
The Picoblaze download can be found here
<http://www.xilinx.com/products/ipcenter/picoblaze-S3-V2-Pro.htm>
OpenPicIDE is available here <http://openpicide.org>
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,4 @@
My project is a PROM reader/burner for my old Galaga stand-up arcade
game.
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,114 @@
Currently I only have some meta ideas:
I'd like to do something that:
\- can't be done using microcontrollers.
\- that I can complete
------------------------------------------------------------------------
I thought I'd share another meta-idea that might lend itself FPGA
programming. I have to come up with a practical application, to test out
these ideas, but I need help working out an issue, described at the
bottom of this.
This idea follows what I call the "sailing philosophy", that is: meet
requirements using the wind that you get, even if you have to zigzag,
and NOT getting all silly about controlling the wind and rest of the
environment.
This may also be an example of the ["Worse is
better"](http://en.wikipedia.org/wiki/Worse_is_better) philosophy.
## The sloppy redundant full feedback approach to physical computing
-or-
## The Cloud Computing approach to Managing Sensors
Abstract: Physical computing, robotics, and mechatronics suffer from a
mapping problem, a mechanical complexity problem, and a configuration
management problem. These problems can be solved by creating and using
clumps of cheap sensors, attached using modern adhesive materials and
connecting their output wires randomly to the input of the computer
controller. Then, requiring the designer to set a sensor clump for every
movement, the controller can manage it's own configuration
automatically.
Sensor mounting: Wrap-on, spray on, glue on. Must work without perfect
positioning and without careful mounting of screws and mounting plates
-- none of that. It should be like putting on a band aid, a bandanna, or
peeling a Bannana. :^) It should be a blob of clay with wires that you
push into the correct spot for sensing. (Epoxy putty and two part
silicone come to mind.) Or perhaps like a strip of adhesive tape or
Velcro(TM) that you wrap around or along a moving joint.
Sensor clumps: Sensors must be a bunch of more or less redundant wired
outputs that sense different portions of where they are mounted. For
example, an array of light sensors, each positioned and pointed randomly
and distributed. For another example, conductors thinly separated,
changing resistance, distributed around something that moves, or
capacitive around gaps, or hall affect around moving metal. Each sensor
is actually a bundle of cheap sensors, maybe thirty or a hundred tiny
points of electronics that change electrical output in response to a
change in the environment.
Connecting the sensors: Should be a bundle of wires, perhaps a ribbon
cable, that makes it's way to each sensor. The mapping of the wires to
the input on the controller MUST be inconsequential. Figuring out which
wire goes to which sensor is a responsibility of the system, NOT human
that connects them. The wires get bundled together randomly and
connected regardless of what they sense, or even if they are not
connected.
Actuators: Motors, piston cylinders, lights, heaters, anything that
moves, emits radiation, or otherwise changes a physical state MUST have
a sensor clump mounted on or with it. This is practical because sensors
are easy to apply and cheap -- see sensor clumps, and sensor mounts.
Controller initialization: When the controller is powered on it must go
through a series of movements whereby it changes an actuator and records
which sensors are relevant to each movement and what scale . This way it
can set up feedback loops from the control output to the sensor
feedback. This is similar to what I imagine infants do, as they move
randomly and map the sensations produced. It can store this mapping of
actuator to sensor in non-volitale memory for next power up, perhaps use
it as a hint, so that the initialization can be much faster and requires
only a small movement.
Limit sensing 1: Limit sensing must be done carefully since driving a
motor past it's range of motion can damage the structure or the
actuator. One idea perhaps to designated some sensors that report a bad
state and other sensors that can predict the bad state. For example, a
position sensor and a limit switch to indicate a bad state, or a
temperature sensor that can be calibrated to predict an over-heating
sensor. The bad state sensor must be manually calibrated, or positioned
at the limit manually. I don't know how the controller would determine
which is the bad state sensor. Perhaps it could be first initialized
with all bad state sensors in their good state, then record that for the
life of the device.
Limit sensing 2: Another idea for limit sensing is the designer could
associate particular actuators as having limits, so that during
initiation it will search for it's limits by oscillating in small
increments, progressing slowly in one direction, until it senses
feedback with the same frequency as it's oscillation, and then do the
same in the other direction.
The blocking challenge: Another issue with this approach that I have to
solve before I start is that of analog to digital. A wide variety of
analog inputs with unpredictable ranges need to be connected to a large
number of digital inputs. I'm hoping some simple thresholding with
comparators or similar can allow easily connecting to digital inputs. I
guess an analog multiplexer connected to an ADC might do the trick. Then
I just need 8 or 16 bits to connect the signal input to the controller,
and address bits that select a sensor's wire, maybe another few IO pins
to control a gain amplifier for sensors with weak signals.
I had hoped that FPGA's had more analog features at their inputs, but
they seem black and white. This is the part that I haven't yet figured
out. Please help! --[DLotts](User:DLotts "wikilink") 06:39, 28 February
2010 (UTC)
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,12 @@
## Project(s)
Personal page: [User:obscurite](User:obscurite "wikilink")
- Work with Martin on Game of Life simulation models and display (VGA?)
<!-- -->
- Work on bio signals processing (ECG for now) using [DIY
ECG](DIY_ECG "wikilink") circuits
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,18 @@
1\. Port [**AMRAD
Charleston**](http://amrad.org/projects/charleston_sdr/) FPGA loads from
Digilent Nexys2 to the Xilinx Spartan3 dev board
2\. See if
[**nexsys2prog**](http://plausible.org/andy/nexys2prog.tar.gz) can be
adapted to support these boards and allow
[**UrJTAG**](http://packages.debian.org/squeeze/urjtag) to work.
3\. Try to mimic a USRP only using AMRAD Charleston receiver boards. (Or
audio ADC.)
4\. Look into [**VITA Radio Transport (VRT)
protocol**](http://www.digitalif.org/) support
5\. Make use of the Ethernet port, possibly mimic a USRP2.
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,41 @@
Three ideas so far:
Multiple 8-bit game console sound chip emulator. Generate the sounds of
the '80s: C64, NES, Atari, etc. I need to research some of the chips but
it looks like there is plenty of info out there. Manuals/schematics:
- [Mikes Arcade](http://www.mikesarcade.com/arcade/manuals.html)
- [Important Space Invader
information](http://www.brentradio.com/SpaceInvaders.htm)
- [TI 76489 Audio
Chip](http://web.inter.nl.net/users/J.Kortink/home/articles/sn76489/)
- [PicoBlaze D/A converter design
example](http://www.xilinx.com/products/boards/s3estarter/files/s3esk_picoblaze_dac_control.pdf)
- [fpga-synth.net - FPGAs to build/design synthesizers and audio
processing engines](http://www.fpga.synth.net/)
Limited AM radio. Use passive front end Nyquist filter, digital
down-converter and low-pass filter to receive the lower part of the AM
broadcast band. Got the idea from Oct '09 Circuit Cellar article
'Multi-rate Techniques and CIC Filter'. Success would be anything that
worked better than the chunk of geranium and safety pin radio from grade
school.
- [Xilinx LogiCORE CIC (Cascaded Integrator-Comb)
compiler](http://www.xilinx.com/support/documentation/ip_documentation/cic_compiler_ds613.pdf)
Game of life analyzer. Run game of life for many generations while
saving/encoding previous states of the game array to look for repeated
and other patterns. VGA game output would be fun too. Some fun life/CA
links:
<http://web.cecs.pdx.edu/~mperkows/CLASS_573/MARCH_3_06/D_0000_Intro-Cellular-Automata-Artificial-Life.ppt>
<http://web.cecs.pdx.edu/~mperkows/CLASS_573/MARCH_3_06/D_0050.Margolus-Physical-Reversible-Models-of-CAs.ppt>
<http://www.it.lth.se/suleyman/ref_docs/malki_CIMSA%2005.pdf>
1/27/10 - Patched together some Pong code (game not the professor) on
the Spartan 3E dev board to learn VGA interface. Pong code lacks
sounds - might as well give that a try. 8/25/10 - Run ISE simulator
under Win 7 - set webservices to startup automatically
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,15 @@
I've got a couple of ideas so far:
1. WEP or WPA (or other hash/cipher) crack acceleration
- In my dreams, I imagine a crack accelerator embedded in an
autonomous robot that drives itself around cracking networks as it
goes.
2. non-von Neumann computer
- E.g., the Reduceron, which is a machine that does something called
graph reduction, a thing computationally equivalent to a Turing
machine but which is better suited to pure functional languages
like Haskell
- see <http://www.cs.york.ac.uk/fp/reduceron/>
3. SIP \<-\> analog telephone adapter
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,23 @@
**Video scaler with VGA output**
To reduce the high likelihood of this project ending in undebuggable
disaster, I plan to start off with simple goals and add complexity to
the code and input/output circuitry incrementally.
1: (COMPLETED) Generate a simple 640x480 VGA test pattern with all
timing and sync signals controlled by the FPGA.
3: Create a framebuffer in Block RAM or the devboard's SRAM.
4: Use the framebuffer to window low resolution (\<640x480) digital
video input within a 640x480 output frame (no scaling).
5: Attempt to implement scaling algorithms to scale the input resolution
to fill the full frame of the output resolution.
6: Add 24-bit color depth to the output with the addition of a THS8134B
video DAC.
If I can manage to get this far, I will add additional objectives.
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,260 @@
Archive of Materials from the HacDC FPGA Workshop
------------------------------------------------------------------------
### Discussion Materials
<table>
<tbody>
<tr class="odd">
<td><p>Week</p></td>
<td><p>Date</p></td>
<td><p>Topics Covered</p></td>
<td><p>Exercise</p></td>
<td><p>Solutions/Approach</p></td>
</tr>
<tr class="even">
<td><p>1</p></td>
<td><p>October 7th, 2009</p></td>
<td><p><a
href="http://wiki.hacdc.org/index.php/File:Lect1_draft2.pdf">Workshop
Introduction &amp; Introduction to digital systems and
design</a></p></td>
<td><p>Make sure people can run the Virtual Machine or FOSS
tools</p></td>
<td><p>Lorem Ipsum</p></td>
</tr>
<tr class="odd">
<td><p>2</p></td>
<td><p>October 14th, 2009</p></td>
<td><p><a
href="http://wiki.hacdc.org/index.php/File:Lect2_draf3.pdf">Boolean
Logic, combinatorial circuits and timing</a></p></td>
<td><p>Make sure people can run the Virtual Machine or FOSS tools<br />
|<a
href="http://wiki.hacdc.org/index.php/File:Lect2_exercise.pdf">Boolean
&amp; Combinatorial Exercises</a></p></td>
<td><p><a
href="http://wiki.hacdc.org/index.php/File:Lect2_sol.pdf">Exercise
Solutions</a> <a href="Discussion_2_Exercises_Solution_notes"
title="wikilink">Discussion 2 Exercises Solution notes</a></p></td>
</tr>
<tr class="even">
<td><p>3</p></td>
<td><p>October 21st, 2009</p></td>
<td><p><a
href="http://wiki.hacdc.org/index.php/File:Lect3.pdf">Introduction to
Verilog Coding, focusing on combinatorial circuits</a></p></td>
<td><p><a href="FPGAExercise3" title="wikilink">Verilog Coding Modular
Full Adder Design and Simulation and ALU extension project</a></p></td>
<td><p>Solutions</p></td>
</tr>
<tr class="odd">
<td><p>4</p></td>
<td><p>October 28th, 2009</p></td>
<td><p>Make up day</p></td>
<td></td>
<td><p>Solutions</p></td>
</tr>
<tr class="even">
<td><p>4 1/2</p></td>
<td><p>November 4th, 2009</p></td>
<td><p><a
href="http://wiki.hacdc.org/index.php/File:Intro_to_Sequential_Logic.pdf">Introduction
to Sequential Logic and Flip Flops</a></p></td>
<td><p><a
href="http://projects.hacdc.org/tapemachine/SequentialCircuits.mp3">Audio</a></p></td>
<td><p>Placeholder</p></td>
</tr>
<tr class="odd">
<td><p>5</p></td>
<td><p>November 11th, 2009</p></td>
<td><p>No class meeting with Will</p></td>
<td><p><a href="FPGAExercise5" title="wikilink">Different adder
construction, shift register and LFSR construction</a></p></td>
<td><p><a href="FPGAExercise5code" title="wikilink">4 bit counter code
from group hacking session</a></p></td>
</tr>
<tr class="even">
<td><p>6</p></td>
<td><p>November 18th, 2009</p></td>
<td><p><a href="http://wiki.hacdc.org/index.php/File:FPGAWeek6.pdf">DFFs
round 2, Testbenches</a> <a href="FPGAWeek6Followup"
title="wikilink">Notes on the use of Define statements, tasks and
events</a></p></td>
<td><p>Shift Register &amp; LFSR examples from week 5</p></td>
<td><p><a href="FPGAExercise6code" title="wikilink">Shift Register, SR
Testbench, LFSR, LFSR Testbench</a></p></td>
</tr>
<tr class="odd">
<td><p>7</p></td>
<td><p>November 25th, 2009</p></td>
<td><p><a href="Xilinx_ISE_Installation_Instructions"
title="wikilink">Xilinx tool install party</a></p></td>
<td><p><a href="FPGA_Workshop#Xilinx_Links" title="wikilink">Xilinx ISE
In-Depth Tutorial</a></p></td>
<td><p>See Tutorial</p></td>
</tr>
<tr class="even">
<td><p>8</p></td>
<td><p>December 2nd, 2009</p></td>
<td><p><a
href="http://wiki.hacdc.org/index.php/File:Week8_fsm_notes.pdf">Finite
State Machines</a><br />
<a
href="http://wiki.hacdc.org/index.php/File:Week8_clocking_notes.pdf">Clocking
Notes</a></p></td>
<td><p>Vending Machine Simulation from notes</p></td>
<td><p><a href="FPGAExercise8code" title="wikilink">FSM level-to-pulse
converter, testbench</a></p></td>
</tr>
<tr class="odd">
<td><p>9</p></td>
<td><p>December 9th, 2009</p></td>
<td><p>We talked about stuff</p></td>
<td><p><a
href="http://wiki.hacdc.org/index.php?title=FPGA_Workshop#FPGA_Workshop_Projects">People
start posting project ideas</a></p></td>
<td><p><a
href="http://www.google.com/search?q=fpga+project+ideas">Solutions</a></p></td>
</tr>
<tr class="even">
<td><p>10</p></td>
<td><p>December 16th, 2009</p></td>
<td><p><a
href="http://wiki.hacdc.org/index.php/File:Week10_programmable_fabric.pdf">Introduction
to FPGAs - History, Capabilities and Features</a></p></td>
<td><p>Exploring designs and FPGA tools</p></td>
<td><p>Solutions</p></td>
</tr>
<tr class="odd">
<td><p>11</p></td>
<td><p>December 23rd, 2009</p></td>
<td><p><a
href="http://wiki.hacdc.org/index.php/File:ISE_Tutorial_for_S3E.pdf">ISE
Tutorial for Spartan 3E board</a></p></td>
<td><p><a href="FPGAExercise10code" title="wikilink">Counter
Source</a></p></td>
<td><p><a href="http://www.youtube.com/watch?v=_bxUEjCDVZ8">Video of
HacDC FPGA blinkenlites</a></p></td>
</tr>
<tr class="even">
<td><p>12</p></td>
<td><p>December 30th, 2009</p></td>
<td><p>Distribute kits, play with tutorial, work on usb drivers</p></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td><p>13</p></td>
<td><p>January 5th, 2010</p></td>
<td><p><a href="FPGAWeek12Exercise" title="wikilink">Implement Frequency
Counter and Frequency Generator reference designs</a></p></td>
<td><p><a
href="http://www.xilinx.com/products/boards/s3estarter/reference_designs.htm">Spartan
3E Reference Designs</a></p></td>
<td></td>
</tr>
<tr class="even">
<td><p>14</p></td>
<td><p>January 26th, 2010</p></td>
<td><p><a href="FPGAWorkshop13notes" title="wikilink">Intro to
PicoBlaze</a></p></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td><p>15</p></td>
<td><p>February 2nd, 2010</p></td>
<td><p>Cancelled</p></td>
<td></td>
<td></td>
</tr>
<tr class="even">
<td><p>16</p></td>
<td><p>February 16th, 2010</p></td>
<td><p><a href="FPGAWorkshop16Notes" title="wikilink">Analysis of
Frequency counter PicoBlaze reference design</a></p></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td><p>17</p></td>
<td><p>March 2nd, 2010</p></td>
<td><p><a href="FPGAWorkshop17Notes" title="wikilink">Picoblaze Flow /
Hello World</a></p></td>
<td></td>
<td></td>
</tr>
<tr class="even">
<td><p>18</p></td>
<td><p>March 23rd, 2010</p></td>
<td><p>Modify the counter reference design to print data to
UART.</p></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td><p>19</p></td>
<td><p>April 6th, 2010</p></td>
<td><p>tbd</p></td>
<td></td>
<td></td>
</tr>
<tr class="even">
<td><p>19</p></td>
<td><p>April 20th, 2010</p></td>
<td><p>tbd</p></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
### Videos of Discussions
The videos are mpeg4 video with aac audio
{\| border="1" \| Week \| Video Links \| Notes \|- \|1 \| [Part
1](http://wiki.hacdc.org/videos/hacdc-fpga/week01/MOV011.TOD.ff.mp4)
[Part
2](http://wiki.hacdc.org/videos/hacdc-fpga/week01/MOV012.TOD.ff.mp4)
[Part
3](http://wiki.hacdc.org/videos/hacdc-fpga/week01/MOV013.TOD.ff.mp4)
[Part
4](http://wiki.hacdc.org/videos/hacdc-fpga/week01/MOV014.TOD.ff.mp4)
[Part
5](http://wiki.hacdc.org/videos/hacdc-fpga/week01/MOV015.TOD.ff.mp4)
[Part
6](http://wiki.hacdc.org/videos/hacdc-fpga/week01/MOV016.TOD.ff.mp4)
[Part
7](http://wiki.hacdc.org/videos/hacdc-fpga/week01/MOV017.TOD.ff.mp4)
[Part
8](http://wiki.hacdc.org/videos/hacdc-fpga/week01/MOV018.TOD.ff.mp4)
\|not equal length \|- \|2 \| [Part
1](http://wiki.hacdc.org/videos/hacdc-fpga/week02/MOV005.TOD.ff.mp4)
[Part
2](http://wiki.hacdc.org/videos/hacdc-fpga/week02/MOV006.TOD.ff.mp4)
[Part
3](http://wiki.hacdc.org/videos/hacdc-fpga/week02/MOV007.TOD.ff.mp4)
[Part
4](http://wiki.hacdc.org/videos/hacdc-fpga/week02/MOV008.TOD.ff.mp4)
[Part
5](http://wiki.hacdc.org/videos/hacdc-fpga/week02/MOV009.TOD.ff.mp4) \|
Video cuts out at a discussion about Rise and Fall times \|- \|3 \|
[Part 1](http://wiki.hacdc.org/videos/hacdc-fpga/week03/10.avi) [Part
2](http://wiki.hacdc.org/videos/hacdc-fpga/week03/11.avi) [Part
3](http://wiki.hacdc.org/videos/hacdc-fpga/week03/12.avi)
[Part 4](http://wiki.hacdc.org/videos/hacdc-fpga/week03/13.avi) [Part
5](http://wiki.hacdc.org/videos/hacdc-fpga/week03/14.avi) \| \|- \|4 \|
\| \|}
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,372 @@
## Main Topics
1\) Introduction to digital logic & design
2) Verilog HDL modeling & testing
3) FPGA's & using them.
We will be taking an approach of reviewing & learning digital design,
implementing designs and methods of formally simulating and verifying
designs before moving into
[FPGA](http://en.wikipedia.org/wiki/Field-programmable_gate_array)
oriented work. This workshop will be more engineering oriented than
hobbyist/tinkerer oriented.
## Hardware
We'll be covering some FPGA specific topics and projects using real
hardware. The first half of the workshop will cover logic design,
implementation and testing. This will allow people to put off ordering
any hardware until they know that they actually want to pursue FPGA
development, since the dev board I've chosen for this is not cheap but I
feel is robust enough to be a good starting board for this group.
The hardware we'll be using is the Xilinx Spartan 3AN development kit.
This kit is available from a few vendors for 199USD + shipping. This
will be discussed more later on. The kit includes programming cable, and
evaluation copies of some of the Xilinx tools."
## Tools
### Verilog Simulation and Waveform Viewing
Icarus verilog & gtkwave; for doing Verilog compilation, simulation and
waveform viewing. A makefile has been made to simplify the flow for any
exercises and projects we use these tools with. That makefile can be
found [**here**](iverilogmakefile "wikilink"). Instructions for
installing these programs on Mac osX and Ubuntu can be found here:
[**FOSS Verilog tool
installation**](FOSS_Verilog_tool_installation "wikilink")
=== FPGA Toolchain === After we finish up with covering Verilog
modeling, we'll move to the Xilinx ISE Webpack tools and actual work
with FPGAs. This software is available from Xilinx for free, and is
available for Windows and Linux platforms. This will be used for Verilog
compilation, simulation, synthesis of designs, design mapping, place and
routing of designs, bitstream generation and board programming.
Instructions for installing the Xilinx tools on the VM can be found
here:[**Xilinx ISE Installation
Instructions**](Xilinx_ISE_Installation_Instructions "wikilink")
=== Virtual Machine === An OpenSuse Virtual Machine (VMWare based) will
be available for people to use in this course, if they wish. This will
have the icarus verilog tools and GTKwave loaded on it, along with
Firefox, gcc and make. The suseStudio team has encouraged the use of
their VMs in such a manner (teaching workshops). This is being built in
susestudio, and will be available as a live install as well.
When we move over to the Xilinx tools, people will have to download and
install the Xilinx tools by themselves, since that material is
copyrighted. Instructions will be given for doing that.
The VMware VM image is ready (ver 0.5.2) for people to grab if they
wish. [**Get it
here.**](http://susestudio.com/download/d931a0f28972e3505eacf8d0bad28fc0/Digital_Design__FPGA_Workshop_VM_v4.i686-0.5.2.vmx.tar.gz)
The image also works with VirtualBox. Create a new machine, and when it
asks you for a hard drive, select use an existing drive. This takes you
to the hard-drives list dialog box. From there, file..create a new
drive, link it to the .vmdk file, select it, and you're all set. For the
rest, all defaults are ok. (Bother Elliot for hints with VBox.)
There are a few items of note regarding the VM
\* Download is approximately 350MB, the tarball is about 1.5GB in size,
and the virtual disk will expand up to 20gigs dynamically.
- The download link is a virgin, freshly built VM, so you'll be the
first user booting it up since build.
- There are two users, root and workshop. Both have the password 'linux'
- For the user workshop, ~/scripts/ is included in their \$PATH
- Also, user workshop has a few small files in ~/resources/ including a
simple upcounter design example.
- May need to run the network configuration tools to ensure you get
functional networking. I've experienced issues with the VM in suspend
mode, switching networks on the host machine, and completely loosing
network on the VM until rerunning the network config tools. They can
be found poking around in the system settings for yast.
- Currently, the Xilinx Cable Drivers aren't building on the VM (but all
the other Xilinx tools work). If someone is a linux guru and wants to
try to make it work, contact me at <teachmeFPGA@gmail.com>. My next
attempt is to turn the vm into a live-install and try building the
cable drivers on real hardware instead of a VM.
- After loading the Xilinx settings (which will be covered in more
detail when those tools are introduced), the current shell can no
longer run icarus verilog flows. Start a new shell in order to run
icarus verilog.
- Its a fairly minimalist system, with the FOSS tools listed above load,
along with firefox, gcc and nano. Use yast or yast2 in order to
install any additional packages. example yast2 --install *packname*
- If the download link stops working, the build has likely expired on
the SuseStudio server. Please email <teachmeFPGA@gmail.com> if the
download link no longer works.
- Mad props to the susestudio team for making this possible
## Lecture
Lecture/Discussions will mainly be based on content from a pair of
courses in MIT's Opencourseware initiative. This content is licensed on
the Creative Commons Attribution NonCommercial Share-alike 3.0 license;
as a result, the electronic content generated by the workshop will also
need to be made available under the same license. This will allow people
to freely access just the discussion slides without watching through
videos.
A [video](http://www.youtube.com/watch?v=Q06M_j49zRM) archive will be
[link building service](http://www.diamondlinks.net) made available for
those unable to attend. They are available here
[**here**](FPGAWorkshopTopics "wikilink").
### List of Lectures
An archival list of lectures, including presentations and videos, can be
found [**here**](FPGAWorkshopTopics "wikilink")
*This is currently an incomplete list, additional topics will be added
as I solidify them - will*
| | | | | |
|------|---------------------|-----------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
| Week | Date | Topics Covered | Exercise | Solutions/Approach |
| 10 | December 16th, 2009 | [Introduction to FPGAs - History, Capabilities and Features](http://wiki.hacdc.org/index.php/File:Week10_programmable_fabric.pdf) | Exploring designs and FPGA tools | Solutions |
| 11 | December 23rd, 2009 | [ISE Tutorial for Spartan 3E board](http://wiki.hacdc.org/index.php/File:ISE_Tutorial_for_S3E.pdf) | [Counter Source](FPGAExercise10code "wikilink") | [Video of HacDC FPGA blinkenlites](http://www.youtube.com/watch?v=_bxUEjCDVZ8) |
| 12 | December 30th, 2009 | Distribute kits, play with tutorial, work on usb drivers | | |
| 13 | January 5th, 2010 | [Implement Frequency Counter and Frequency Generator reference designs](FPGAWeek12Exercise "wikilink") | [Spartan 3E Reference Designs](http://www.xilinx.com/products/boards/s3estarter/reference_designs.htm) | |
| 14 | January 26th, 2010 | [Intro to PicoBlaze](FPGAWorkshop13notes "wikilink") | | |
| 15 | February 2nd, 2010 | Cancelled | | |
| 16 | February 16th, 2010 | [Analysis of Frequency counter PicoBlaze reference design](FPGAWorkshop16Notes "wikilink") | | |
| 17 | March 6nd, 2010 | [Picoblaze Flow / Hello World](FPGAWorkshop17Notes "wikilink") | | |
| 18 | March 23rd, 2010 | FPGA hackins. | | |
| 19 | April 6th, 2010 | FPGA hackins | | |
| 19 | April 20th, 2010 | FPGA hackins | | |
| | | | | |
## Workshop requirements
This workshop will be free of charge to attend, but there are additional
needs in order to fully benefit from attending the workshop.
- Open mind to learning
- Willingness to read documentation, as the capacity for independent
research is important for doing hardware design.
- Willingness to commit time over this fall
- Either ability to run a VMWare virtual machine, the ability to convert
the VM for virtualBox, or ability to install the icarus
verilog/gtkwave tools on your own. This will likely necessitate a
laptop of some sort.
- Xilinx.com account, for licensing Xilinx tools and IP.
- Hardware will NOT be required at the beginning of the course but will
be needed later on to run exercises and to do any interesting projects
## Workshop Frequently Asked Questions
1. What operating systems will the FPGA toolchain be available on?
1. The Xilinx ISE Webpack is supported on Windows XP Pro, Windows
Vista Business, Redhat Linux and Suse Linux Enterprise. For a
detailed list of official OS support, check out the [Operating
system support page on
Xilinx.com](http://www.xilinx.com/ise/ossupport/index.htm). The
tools will run on openSuse as well. Feel free to try other linux
distros and post your results.
2. What is the cost of the FPGA development board we'll be using?
1. The retail cost of the development board is typically around
199-220 USD, plus shipping, from a few different vendors. Links
for that are
[here](FPGA_Workshop#Spartan_3AN_Starter_Kit "wikilink").
3. Will there be homework?
1. Since this isn't an academic course, there will not be graded
homework in the traditional sense. I'll be choosing a few
additional exercises that people can do outside of the workshop
each week, if they wish, that will further help hone their
skills.
4. Will there be extensive C/C++ coding?
1. C experience is not a prerequisite for this workshop. There will
not be any C/C++ coding involved in the workshop directly. There
is one project that I've got in mind that may be of interest to
people that are proficient in C/C++ and pick up hardware design
rather well.
## Workshop Mailing List
A HacDC Mailman mailling list has been setup for this workshop. That
list is fpga@hacdc.org. You can subscribe to that list by sending an
email to fpga-request@hacdc.org with the subject line "subscribe" or
click the mailto link <fpga-request@hacdc.org?Subject=subscribe> and let
your email application handle it...
## Workshop Instructor
William Gibb, mad scientist. For contacting him regarding the workshop,
please email <teachmeFPGA@gmail.com>.
## References
### Grateful Dead Trees Reference
Fundamentals of Digital Logic with Verilog Design by Brown and
Vranesic
Verilog Quickstart: A Practical Guide to Simulation and Synthesis in
Verilog by Lee
FPGA Prototyping using Verilog Examples by Chu.
These texts will not be required for the course, but are very good
launching points for the topics that we are covering.
### Online References
#### General Resources
[Open Circuit Design](http://www.opencircuitdesign.com/) Open Source
design tools
[Doulos Digital Design Resources](http://www.doulos.com/knowhow/) Good
learning and design references
[**ASIC World**](http://www.asic-world.com/) Good learning references
[Play Hookey Digital Design](http://www.play-hookey.com/digital/) Good
learning references
[*'FPGA4Fun*](http://www.fpga4fun.com/) Lots of available IP
[Companion website for Professor Pong Chu's Verilog
Book](http://academic.csuohio.edu/chu_p/rtl/fpga_vlog.html)
[**OpenCores**](http://www.opencores.org) Very good repository for IP.
Also the home to the OpenRISC System on Chip project
[Bucknell Handbook on Verilog
HDL](http://hdlplanet.tripod.com/verilog/verilog-manual.html#RTFToC0)
(Martin found this) Old but useful?
[KD7IRS's Verilog - OpenHPSDR - Lectures](http://verilog.openhpsdr.org/)
Webcast style class, with lab
[VA Tech Configurable Computing Lab
Wiki](http://pip0.ccm.ece.vt.edu/twiki/bin/view/Main/Spartan3Radio)
Simple Radio Structures on the Spartan3e Starter Kit
[VA Tech Configurable Computing Lab
Wiki](http://pip0.ccm.ece.vt.edu/twiki/bin/view/Main/GNURadio) GNU
Radio - USRP for Spartan 3E
[San Jose State University](http://www.engr.sjsu.edu/crabill/) Digital
design course (EE178) with Spartan 3E Development board and ISE 8.1 -
lecture & lab materials
[George Washington University ECE128
Lab](http://www.seas.gwu.edu/~vlsi/ece128/SPRING/lab.html) Contains good
Verilog coding and testbench resources
[FPGA Arcade](http://www.fpgaarcade.com/) Devoted to gaming on FPGAs,
Space Invaders in VHDL...
[Simplified Floating Point for
DSP](http://instruct1.cit.cornell.edu/courses/ece576/FloatingPoint/index.html)
8-bit exponent and 9-bit mantissa and sign to fit into 18 bit IP
blocks - Thanks Cornell!
#### FPGA Vendors
[Xilinx](http://www.xilinx.com/)
[Altera](http://www.altera.com/)
[Actel](http://www.actel.com/)
[Atmel FPGA](http://www.atmel.com/products/fpga/)
[Silicon Blue](http://www.siliconbluetech.com/)
[Point of Sale System](http://www.merchantos.com)
[Lattice Semiconductor](http://www.latticesemi.com/)
[Achronix](http://www.achronix.com/)
#### Course Resources
[Icaurus Verilog](http://www.icarus.com/eda/verilog/)
[GTKWave](http://gtkwave.sourceforge.net/)
[VMware Player - Free download for Windows and
Linux](http://www.vmware.com/products/player/)
[SUSE Studio](http://www.susestudio.com) SLED/OpenSUSE build service.
Make VMs, live installs, all customized
#### Xilinx Links
[Xilinx Tutorials](http://www.xilinx.com/support/techsup/tutorials/)
[Xilinx ISE 10.1 Tutorial and
files](http://www.xilinx.com/support/techsup/tutorials/tutorials10.htm)
[ISE 10.1 In Depth Tutorial Direct link to
PDF](http://www.xilinx.com/direct/ise10_tutorials/ise10tut.pdf)
[Xilinx
Documentation](http://www.xilinx.com/support/documentation/index.htm)
This includes device data sheets, user guides, IP documentation and
Xilinx software manuals
[Xilinx Design Tools](http://www.xilinx.com/tools/designtools.htm) Xilnx
Software tools can be found here
[Spatan 3E Starter
Kit](http://www.xilinx.com/products/devkits/HW-SPAR3E-SK-US-G.htm) Site
for the Spartan 3E kit
[Spartan 3AN Starter
Kit](http://www.xilinx.com/products/devkits/HW-SPAR3AN-SK-UNI-G.htm)
Site for the Spartan 3AN kit
[Free Video Training
courses](http://www.xilinx.com/support/training/free-courses.htm) Name
says it all
[Yet Another Xilinx ISE 10.1
Tutorial](http://xess.com/appnotes/ise-10.pdf) For Xess Spartan-3
Development Board
#### Spartan 3AN Starter Kit
[Spartan 3AN Starter
Kit](http://www.xilinx.com/products/devkits/HW-SPAR3AN-SK-UNI-G.htm)
[AVNet Spartan 3AN Starter Kit sales
page](http://www.em.avnet.com/evk/home/0,1707,RID%253D0%2526CID%253D45129%2526CCD%253DUSA%2526SID%253D32214%2526DID%253DDF2%2526LID%253D32232%2526PRT%253D0%2526PVW%253D%2526BID%253DDF2%2526CTP%253DEVK,00.html)
[NuHorizons - Xilinx Vendor](http://www.nuhorizons.com/) Do a search for
HW-SPAR3AN-SK-UNI-G
[Digi-key Spartan 3AN Starter Kit Sales
page](http://search.digikey.com/scripts/DkSearch/dksus.dll?Cat=2621773&k=spartan%203an)
Probably also at other [suppliers](suppliers "wikilink").
#### Spartan 3E Starter Kit
[Digilent](http://www.digilentinc.com/)
##### Group Order Participants
NOTE: Xilinx has donated 15 spartan3 boards, which should arrive before
12/7
- Daniel (obscurite on \#hacdc on freenode)
- Alden
- Dan Barlow
- Navid
- Matt Liggett
- Maitland Bottoms
- Ben Peizik (benparse@yahoo.com)
- Martin
- Rob Seastrom (rs@seastrom.com)
- Phillip Stewart
- Tim F (smilemoose@gmail.com)
- Nick
- Brian
<!-- -->
- Elliot
- Justin
#### MIT OpenCourseWare links
[MIT OCW Terms of
Use](http://ocw.mit.edu/OcwWeb/web/terms/terms/index.htm)
[OCW site for 6.004 - Computation
Structures](http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-004Computation-StructuresFall2002/CourseHome/index.htm)
[OCW site for 6.111 Introductory Digital Systems,
2006](http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-111Spring-2006/CourseHome/index.htm)
## FPGA Workshop Projects
List of FPGA projects people are working on at HacDC
| | |
|-------------------------------------------|-----------------------------------------------------------------------------------------------------------------|
| Person | Project |
| William Gibb | [AD/DA controller for Spartan 3E/3A/3AN Development Kits](http://opencores.org/project,spi_core_dsp_s3ean_kits) |
| Daniel (obscurite on \#hacdc on freenode) | [Daniel's Project (Game of Life w/ Martin & Breakout VGA/LED?)](FPGAWorkshopDaniel "wikilink") |
| Alden | [Alden's Project](FPGAWorkshopAlden "wikilink") |
| Dan Barlow | [Barlows's Project](FPGAWorkshopBarlow "wikilink") |
| Navid | [Navid's Project](FPGAWorkshopNavid "wikilink") |
| Matt Liggett | [Matt's Project](FPGAWorkshopMatt "wikilink") |
| Maitland Bottoms | [Maitland's Project](FPGAWorkshopMaitland "wikilink") |
| Ben Peizik (benparse@yahoo.com) | [Ben's Project](FPGAWorkshopBen "wikilink") |
| Martin | [Martin's Project](FPGAWorkshopMartin "wikilink") |
| Rob Seastrom (rs@seastrom.com) | [Justin's Project](FPGAWorkshopJustin "wikilink") |
| Phillip Stewart | [Phillip's Project](FPGAWorkshopPhillip "wikilink") |
| Tim F (smilemoose@gmail.com) | [Tims Project](FPGAWorkshopJustin "wikilink") |
| Nick | [Nick's Project](FPGAWorkshopNick "wikilink") |
| Brian | [PROM Burner/Reader](FPGAWorkshopBrian "wikilink") |
| Elliot | [Elliots's Project](FPGAWorkshopElliot "wikilink") |
| Justin | [Justin's Project](FPGAWorkshopJustin "wikilink") |
| Arc | [Arcs SMT oven](FPGAWorkshopArc "wikilink") |
| Davel (DLotts) | [Davel's Project](FPGAWorkshopDLotts "wikilink") |
[Category:Classes](Category:Classes "wikilink")
[Category:FPGAWorkshop](Category:FPGAWorkshop "wikilink")

View File

@@ -0,0 +1,122 @@
This is the source code for the float switch 3d printed parts for the
water level detector for the [Cheap Chinese
Laser](Cheap_Chinese_Laser "wikilink"). It is made in two parts: the
head and the base. You also need 4 pieces of 1/4-20 all thread to
connect the two of them and 8 nuts. The base is internally threaded. The
head needs nuts top and bottom. Washers would be good too.
![<File:Float-switch-head.stl>](Float-switch-head.stl "File:Float-switch-head.stl")
rendered on 5/1/2017
![<File:Float-switch-base.stl>](Float-switch-base.stl "File:Float-switch-base.stl")
rendered on 5/7/2017
/*
low water level detector
safety interlock for cheap Chinese laser at Hac DC
This water level detector is a two piece assembly connected by threaded rod. This model uses 1/4-20 rod. The lower foot has a 40mm home in the bottom to insert a pingpong ball as the float.
James Sullivan
5-8-17
Mk 5 - removed tolerance variable and adjusted threads, ppbd, and head threaded rod holes diameters
OpenSCAD version 2015.03-1
*/
ppbd=41; //ping pong ball diameter, includes 1mm tolerance
ppbw=2.7; //ping pong ball weight in grams
shd=2; //switch hole diameter
shp=10; //switch hole pitch, i.e. center to center spacing of mounting holes on microswitch
wlh=200; //water level height
sbw=6; //switch body width
nfw=4; //nut face width, switch mounting nuts
nt=1; //nut thickness, switch mounting nuts
thick=5; //thickness
eps=0.1; //epsilon
br=50; //base radius
rod=25.4/4; //rod outer diameter
tpi=20; //threads per inch
td=13.74/tpi; //thread depth
fph=25.4*5/tpi;//foot pillar height
bfw=ppbd+2*thick; //base flange width
$fn=48;
function mod(num,den) = num - floor(num/den)*den;
//dimensions taken from Front Door Switch Holder
wr=4; //wrench size for nuts width across flats
nh=1; //nut height, depth of nut sockets
//head
module head() {
color("cyan") difference(){
union(){
for(angle=[45:90:315]){
rotate([0,0,angle]) translate([ppbd/2+rod/2+td,0,0]) cylinder(d=rod+thick*2,h=thick); //leg cylinders
}
cylinder(h=thick,r=ppbd/2+rod/2+td-thick/2);
}
translate([0,0,-thick/2]) cylinder(h=thick*2,r=ppbd/2+rod/2-3*thick/2); //center bore to reduce material amount and print time
for(angle=[45:90:315]){
rotate([0,0,angle]) translate([ppbd/2+rod/2+td,0,-thick/2]) cylinder(d=rod*1.1,h=thick*2); //leg holes for threaded rods
}
}
translate([sbw/2,(ppbd+rod-2*thick)/(-2),0]) cube([thick,ppbd+rod-2*thick,thick]); //support for switch mounting block
translate([sbw/2,shp/2,thick]) difference(){ //switch mounting block, aligned with z-plane and x-plane, centered on y-plane
translate([0,-shp/2-nfw,0]) color("green") cube([thick,shp+2*nfw,2*nfw]);
for (y=[-shp/2,shp/2]) {
translate([thick/2,y,nfw]) rotate([0,90,0]) cylinder(d=shd,h=thick*2,center=true); //screw holes
translate([sbw-nh,y,nfw]) union(){ //nut sockets
for (ang=[0,120,240]) rotate([ang,0,0]) cube([nh*2,wr,wr/sqrt(3)],center=true);
}
}
translate([sbw/2+thick,bfw/2-nfw-shp,nfw]) union(){ //center nut socket
cube([nh*2,wr,wr/sqrt(3)],center=true);
rotate([120,0,0]) cube([nh*2,wr,wr/sqrt(3)],center=true);
rotate([240,0,0]) cube([nh*2,wr,wr/sqrt(3)],center=true);
}
}
}
module socket(nd,tpi,tl,thick) {
//nd = nominal diameter
//tpi = threads per inch
//tl = thread length
ror=nd/2; //rod outer radius
pitch=25.4/tpi; //thread pitch in mm
td=13.74/tpi; //thread depth in mm
rir=ror-td; //rod inner radius
sor=ror+thick; //socket outer radius
vert= [for (ang=[0:360/$fn:720]) ang<=90 ? [cos(ang),sin(ang)]*rir :
ang<202.5 ? [cos(ang),sin(ang)]*(rir+td*(ang-90)/112.5) :
ang<=247.5 ? [cos(ang),sin(ang)]*ror :
ang<360 ?[cos(ang),sin(ang)]*(rir+td*(360-ang)/112.5) :
[cos(ang),sin(ang)]*sor];
path1=[for(p=[0:$fn]) p<$fn ? p : 0 ];
path2=[for(p=[$fn:2*$fn]) p<2*$fn ? p : $fn ];
color("green") difference(){
linear_extrude(height=tl,center=false,convexivity=20,twist=tl/25.4*tpi*360){
polygon(points=vert,paths=[path1,path2]);
}
translate([0,0,tl-ror*tan(30)]) cylinder(r2=ror,r1=0,h=ror*tan(30)); //inlet chamfer
}
}
//foot
module foot(){
difference(){
union(){
translate([0,0,thick/2]) cube([ppbd+2*thick,ppbd+2*thick,thick],center=true);
for (angle=[45:90:315]){
rotate([0,0,angle]){
translate([ppbd/2+rod/2+13.74/tpi,0,thick]) socket(rod*1.1,tpi,fph,thick); //pillar
translate([0,-thick,0]) cube([br-thick,thick*2,thick]); //leg
translate([br-thick,0,0]) cylinder(r=thick,h=thick); //foot
} //end rotate
} //end for
} //end union
translate([0,0,-eps/2]) cylinder(d=ppbd,h=fph+eps+thick); //ping pong ball entry
} //end difference
} //end foot module
//head();
foot();
[Category: CheapChineseLaser](Category:_CheapChineseLaser "wikilink")

View File

@@ -0,0 +1,176 @@
# Introduction
There are a few pieces of software you'll definitely want for AVR
programming:
- A compiler and/or assembler
([avr-gcc](http://www.nongnu.org/avr-libc/)) to convert human-readable
code to binary
- Manipulation of binaries
([binutils-avr](http://www.nongnu.org/avr-libc/)). You'll need to
convert from the ELF file to something your chip will like.
- Something to talk to your AVR programmer
([AVRDUDE](http://www.bsdhome.com/avrdude/)), that is the piece of
hardware you plug into both your computer and the chip you want to
program.
- Not required, but something to make your life easier: ([GNU
make](http://www.gnu.org/software/make/))
Note that both avr-gcc and binutils-avr come from the
[avr-libc](http://www.nongnu.org/avr-libc/) project. avr-libc itself
isn't software per-se; it's a library that implements standard C
functions for AVRs.
# Installation
## Linux
### Ubuntu
Install the following packages:
- avrdude
- avrdude-doc
- binutils-avr
- avr-libc
- gcc-avr
You can get them in one shot using:
`sudo aptitude install avrdude avrdude-doc binutils-avr avr-libc gcc-avr`
### Gentoo
Install the following packages:
- dev-embedded/avrdude
- sys-devel/crossdev
Run (as root):
`crossdev -t avr`
This will install cross-avr/gcc, cross-avr/binutils, and
cross-avr/avr-libc (pulled from an avr portage overlay).
Finally, the following command is necessary to make the linker happy
(again, as root):
`ln -s /usr/lib/binutils/avr/2.21/ldscripts /usr/x86_64-pc-linux-gnu/avr/binutils-bin/2.21/ldscripts`
You'll want to adjust the path above to match your architecture and
binutils version.
## OS X
> NOTE: In trying to program the AVR without using CrossPack (below), we
> were unable to get OS X to recognize the FTDI device until we
> installed FTDI USB Serial drivers. The easiest way to do this is to
> download the [latest Arduino installer
> archive](http://arduino.cc/en/Main/Software) and installing the
> FTDIUSBSerialDriver_10_4_10_5_10_6.mpkg (its name as of 3/27/11) from
> it.
[CrossPack](http://www.obdev.at/products/crosspack/index.html) Will take
care of you. It doesn't require you to have Xcode installed, but if you
do, you can do your development in Xcode and run your makefile from that
IDE. If you have an open terminal.app session open when you install it,
you'll need to reload your .profile to use crosspack.
**You don't have to use the crosspack tools to manage a build projects,
you can use elliots makefile as well. You'll need to modify it
appropriately**
When you install crosspack, you'll be presented with documentation in
your web browser. These docs are also located at
/Applications/Crosspack-AVR-Manual.html. This is important, as the
Crosspack docs are not on the www.obdev.at site :\\
### Making Crosspack projects work with Elliot's boards
Follow the crosspack 'getting started' section to create your first
hello world project.
First, make a demo project.
bash$ cd ~/Documents
bash$ mkdir AVR
bash$ cd AVR
bash$ avr-project Demo
bash$ open Demo
bash$ cd Demo
bash$ ls -l
drwxr-xr-x 5 cs cs 170 Nov 19 13:58 Demo.xcodeproj
drwxr-xr-x 4 cs cs 136 Nov 19 13:58 firmware
bash$ cd firmware
bash$ ls -l
-rw-r--r-- 1 cs cs 4139 Nov 19 13:58 Makefile
-rw-r--r-- 1 cs cs 348 Nov 19 13:58 main.c
You can see, your code lives in the projects' firmware folder. You can
replace the code (\*.c) as you please with whatever blinkenlights
project you see fit. You'll want to open up the Makefile and edit two
lines - the DEVICE and PROGARMMER line. The device we are using is the
"atmega88". The programmer needs to be set to avr109, the baud rate to
9600, and the port to whatever your /tty.usbserial device (read: FTDI
cable) is called. Mine shows up as /dev/tty.usbserial-FTEA4CYY, yours
may very well show up with a different name.
DEVICE = atmega88
CLOCK = 8000000
PROGRAMMER = -c avr109 -P /dev/tty.usbserial-FTEA4CYY -b 9600
OBJECTS = main.o
FUSES = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m\
One you've edited your make file, you can run the following commands
make
make flash
Make will compile the c code into object code and then to the correct
HEX code for the device. Make flash will try to program the code. Make
sure you've held down reset and button A in order to let the device
reset into programming mode! Grab Elliots blinking led code and try it
out!
-Will
## Windows
[WinAVR](http://winavr.sourceforge.net/) has everything you need.
For the programmer type, select AVR109 or Butterfly. For the serial
port, select the USB device.
# Special-Needs Hardware
#### Atmel Dragon Hardware Programmer with avrdude on Ubuntu
Apparently there are two bugs that get in the way when trying to use
avrdude with the dragon.
- avrdude 5.8 (via apt-get) segfaults after writing 1 byte:
<http://savannah.nongnu.org/bugs/?27507> - there is a patch for 5.8
posted there
- avrdude 5.9 (via the official site) source apparently has some other
bug that prevents the build from completing
First, get the dependencies for building the code.
`sudo apt-get build-dep avrdude`
The solution (aside from applying patches to the above versions) is to
use the patched 5.10 SVN code. The instructions are from this link:
<http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=87972&start=20>
- svn co <svn://svn.savannah.nongnu.org/avrdude/trunk> .
- cd avrdude
- ./bootstrap
- ./configure
- ./make
- sudo ./make install
That seems to have worked for me! I'm on 9.04 32bit and I also installed
bison/flex/autoconf --obscurite
[Category:Microcontrollers](Category:Microcontrollers "wikilink")

View File

@@ -0,0 +1,323 @@
## Integrated Circuits
Paul Charles Leddy donated these June 29,2010
10x ADC0817CCN
8-Bit Microprocessor Compatible A/D Converter With 16-Channel
Multiplexer, equivalent to MM74C948-1 100 ??s
12x ADC0833BCN
8-Bit Serial I/O A/D Converter with 4-Channel Multiplexer
27x ADC0848CCN
8-bit 40uS Parallel IO Analog to Digital Converter with 8 input
Multiplexer
16x AF100-1CN
Universal Active Filter - Highpass, Lowpass, Bandpass
6x IDM2909ANC
Nonvolatile, dual, linear-taper, digital potentiometers perform the
function of a mechanical potentiometer, but replace the mechanics with a
simple 2-wire digital interface. Each device performs the same function
as a discrete potentiometer or variable resistor and has 256 tap points.
25x MM74C00J
Quad 2-input NAND
17x MM74C02N
Quad 2-Input NOR Gate
13x MM74C14N
Hex Schmitt Trigger
18x DM74H74N
Dual Positive-Edge-Triggered D-Type Flip-Flops with Preset, Clear
65x DM7483J
4-Bit Parallel Full Adder
50x DM7490AN
counter binary/decade
15x MM74C93J
4-Bit Decade, Binary Counter
14x DM74148N
Priority Encoders
30x DM74154N 9311 -831
Decodes 4 binary-coded inputs into one of 16 mutually exclusive outputs
Performs the demultiplexing function by distributing data from one input
line to any one of 16 outputs
20x MM74C175N
Quad D-type Flip Flop
14x MM74C193N
Synchronous 4-Bit Up/Down Decade Counter
4x MM74C244N
Inverting Octal buffer and line driver
5x MM74C373N
Three-state Octal D-type latch
22x MM74C915N
7 segment to bcd decoder
9x DS1488N
Quad Line Driver for RS-232
5x MM14543BCN
BCD TO 7 SEGMENT DECODER DRIVER
15x DP8340N
IBM 3270 Protocol Transmitter / Encoder
15x DP8341N
IBM 3270 Protocol Receiver / Decoder
5x DP8342N S=B8624
Parallel to multibyte serial high speed transmitter, up to 3.5 MBit/Sec
5x DP8390N
10 mBit Ethernet MAC
5x DP8391N
10 mBit Ethernet Serial Network Interface (use with 8390)
5x DP8392AN
Coaxial Transceiver Interface 10Base2
20x DM8602N
Dual Retriggerable / Resettable One Shots
49x DM9093N
DTL dual JK flip-flops
76x DM946N
Quad 2-input DTL gate (Diode-Transistor Logic)
50x DM949N
DTL part
50x DM961N
DTL dual 4-input AND gate with expanders
20x CD4029BMJ 12x CD4029BJC
Presettable Binary/Decade Up/Down Counter
20x CD4051BCJ
Single 8-Channel Analog Multiplexer/Demultiplexer
22x MM5307AA/N
??? 1 GENERATOR, BAUD RATE
7x MM5303N
UNIVERSAL ASYNCHRONOUS RECEIVER/TRANSMITTER DC:94 NATIONAL 40 PIN DIP
25x MM54C04J
Hex Inverter
25x DM5486N
2-Input Exclusive-OR
22x MM54C221J
Dual Monostable Multivibrator
16x DM54S287J
60 ns, (256 x 4) 1024-bit TTL PROM
20x MM54C906J
Hex Open Drain N-Channel Buffers
15x DM9300N
4-Bit Parallel-Access Shift Register
5x DAC1265LCJ
+/-18 V, hi-speed(200ns/5MHz) 12-bit D/A converter with reference in
24-pin DIP package. Operational temperature range from 0??C to 70??C.
3x DAC1266LCJ
0 V to -18 V, hi-speed 12-bit D/A converter
10x LF347N
Quad JFET Input Op-Amp
44x LF13300D (gold ceramic case)
INTEGRATING A/D ANALOG BUILDING BLOCK
20x LM318D
Fast general purpose op-amps Small-Signal Bandwidth . . . 15 MHz Typ
Slew Rate . . . 50 V/??s Min Bias Current . . . 250 nA Max (LM118,
LM218) Supply Voltage Range . . . ?? 5 V to ?? 20 V Internal Frequency
Compensation Input and Output Overload Protection Same Pin Assignments
as General-Purpose Operational Amplifiers
25x LM339N
Single Supply Quad Comparators
17x LM1800AN
Phase-Locked Loop FM Stereo Demodulator
18x MK4564N-20
64K by 1 bit 200nS DRAM
5x LMC669CD
Auto-Zero for Input Offset Voltage of any Op-Amp
[Category:Materiel](Category:Materiel "wikilink")

View File

@@ -0,0 +1,567 @@
## Concept
The idea behind this course structure is for six sessions held a week
apart. In order to provide a tangible end for students to feel like
they???re working toward, each week will have a project; students will
be walked through building that project and completing it by the end of
the session.
In that sense, each week stands alone — a project started in one week
does not need a future week in order to be complete. That said, later
projects will depend on the knowledge gained in previous projects, and
some of them will even be based on previous projects. (For example,
[Week 5???s
project](Intro_to_Electronics#Week_5:_Digital_logic "wikilink") is a
Larson scanner, and it uses [Week 4???s
project](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink")
— a typical 555-based astable multivibrator circuit — to provide its
clock signal.)
The course starts with a few basic circuit components (a voltage source,
a resistor and an LED) and an explanation of typical prototyping
equipment (breadboard and multimeter) and builds up to include regulated
power supplies, basic optoelectronics and eventually digital logic.
It does not (at least in this draft) include much in the way of detailed
exploration of analog electronics; it???s intended more as an
introduction to the field of hobbyist electronics as a whole and to an
assortment of the basic components one might find in a variety of
projects.
Suggestions are, of course, welcome, as are other potential projects to
use in place of some of the ones listed here. (In particular, a good
introductory op-amp project might be handy to have.) I???ve listed
[component prices](Intro_to_Electronics#Components "wikilink") for 25
students; my goal would be to keep the cost per student at \$25 or less
— preferably more in the \$20 range.
## Syllabus
### Week 1: Getting familiar with components
**Goal:** Light an LED with AA batteries and an on-off switch
**Slides:**
[Media:Intro_to_Electronics-Week1-Slides.pdf](Media:Intro_to_Electronics-Week1-Slides.pdf "wikilink")
Explanations:
- Breadboard
- What is it?
- How is it organized?
- Why is it useful?
- **Hands-on:** Here's a breadboard
- LED
- What is it?
- How does it work?
- Not at the P/N junction level
- Current goes in, light comes out
- Current only flows in one direction (diode!)
- Too much current = bad
- **Hands-on:** Plug one into the breadboard
- Battery
- What is it?
- How does it work?
- Roughly constant voltage source for a while
- Discharges over time — voltage decreases
- Definition of "dead"
- Maybe some chemistry? Doubtful, though
- **Hands-on:** Batteries (three or four AAs) in a holder
- Plug them into the breadboard
- Switch
- What is it?
- How does it work?
- Define poles and throws
- **Hands-on:** Plug one (SPST) into the breadboard
- Resistor
- What is it?
- How does it work?
- Ohm's Law
- Units of measurement
- Ohm
- Ampere
- Volt
- Non-polarized
- Describe color codes
- Give resources — memorizing is a bit daunting right now, I
imagine
- Tolerances — nothing's perfect
- What does a ±5% tolerance mean?
- **Hands-on:** Pick a resistor and plug it in to the breadboard
- Select using Ohm's Law
- Schematic
- What is it?
- Symbols
- LED
- Battery (DC source)
- Switch
- Resistor
- Ground!
- Define ground
- Draw one
- **Hands-on:** Connect components to match [this schematic (tested
April 2,
2012)](Media:Intro_to_Electronics-Week1-0-LED.svg "wikilink")
- Moment of truth: Turn it on!
### Week 2: Test equipment
**Goal:** Build a power supply
**Slides:**
[Media:Intro_to_Electronics-Week2-Slides.pdf](Media:Intro_to_Electronics-Week2-Slides.pdf "wikilink")
Explanations:
- Multimeter
- What is it?
- Review units of measurement
- Ohm
- Ampere
- Volt
- **Hands-on:** Measure [last week's LED
circuit](Intro_to_Electronics#Week_1:_Getting_familiar_with_components "wikilink")
- Voltages at different nodes
- Current through LED branch?
- Resistance of current-limiting resistor
- Voltage divider
- What is it?
- How does it work?
- Ohm's Law!
- Walk through the analysis
- **Hands-on:** Build one ([Schematic here (tested April 2,
2012)](Media:Intro_to_Electronics-Week2-0-divider.svg "wikilink"))
- Measure no-load output voltage
- Regulated versus unregulated power supply
- What's the difference?
- **Hands-on:** Add a load to the voltage divider ([Schematic here
(tested April 2,
2012)](Media:Intro_to_Electronics-Week2-1-divider-loaded.svg "wikilink"))
- Measure difference in output voltage
- Why does this happen?
- Equivalent resistances in series and in parallel
- Datasheet
- What are they?
- How can you find them?
- **Hands-on:** Here's an LM317 ([Schematic here (tested April 2,
2012)](Media:Intro_to_Electronics-Week2-2-LM317.svg "wikilink"))
- Look up example circuits in [the
datasheet](http://www.ti.com/lit/ds/symlink/lm117.pdf)
- Capacitor
- What is it?
- How does it work?
- Polarized (electrolytic) versus non-polarized (ceramic)
- Filter capacitors
- Show them on the datasheet's example circuit
- **Hands-on:** Build the example circuit ([Schematic here (tested
April 2,
2012)](Media:Intro_to_Electronics-Week2-3-LM317-filtered.svg "wikilink"))
- Measure input voltage over time with and without filter
capacitors
- Not sure if we'll be able to notice on the multimeter
- Oscilloscope (if there's time)
- What is it?
- How does it work?
- Time axis
- Voltage axis
- **Hands-on:** Look at regulator's output waveform
- Vary load and see what happens!
### Week 3: Optoelectronics
**Goal:** Build a night light (Many thanks to
[EMSL](http://www.evilmadscientist.com/article.php/nightlight))
**Slides:**
[Media:Intro_to_Electronics-Week3-Slides.pdf](Media:Intro_to_Electronics-Week3-Slides.pdf "wikilink")
Explanations:
- LED (review)
- What does it take to light one?
- Remember to limit current
- **Hands-on:** Light one
- Probably just rebuild [Week 1's
circuit](Intro_to_Electronics#Week_1:_Getting_familiar_with_components "wikilink")
([schematic here (tested April 2,
2012](Media:Intro_to_Electronics-Week3-0-LED.svg "wikilink")),
though you really don't even need the switch for this
- Transistor (BJT)
- What is it?
- How does it work?
- Amplifier
- Switch — what we'll focus on for now
- What are the different terminals?
- Base
- Collector
- Emitter
- NPN versus PNP
- **Hands-on:** Use one to control the LED ([Schematic here (tested
April 2,
2012](Media:Intro_to_Electronics-Week3-1-BJT.svg "wikilink"))
- Phototransistor
- What is it?
- How does it work?
- Apply light instead of base current
- **Hands-on:** Add one to our circuit to switch the other transistor
([Schematic here (tested April 2,
2012](Media:Intro_to_Electronics-Week3-2-phototransistor.svg "wikilink"))
- Should look essentially identical to [the EMSL
circuit](http://www.evilmadscientist.com/article.php/nightlight),
except that we'll keep a current-limiting resistor in series with
the LED
- Note: This phototransistor (like many others) is mainly sensitive
to infrared and will consider a room lit only by fluorescent bulbs
to be "dark". Bring around a different lamp to test the projects.
- Bonus: Start talking about digital logic
- What is it?
- Logic gates
- High-level explanation
- Names: AND, OR, NOT (maybe XOR)
- Show examples of 7400-series ICs
- Show a schematic of a NOT gate (for example: [this
one](http://www.kpsec.freeuk.com/trancirc.htm#inverter),
[presentation schematic
here](Media:Intro_to_Electronics-Week3-3-NOT.svg "wikilink"))
- **Hands-on (ish):** Compare the NOT gate schematic to our night
light
- We've made one with a phototransistor!
- Could have been done with a normal transistor, too
- Way less useful that way
### Week 4: Oscillators ??? and the venerable 555
**Goal:** Build a 555 circuit to blink an LED
**Slides:**
[Media:Intro_to_Electronics-Week4-Slides.pdf](Media:Intro_to_Electronics-Week4-Slides.pdf "wikilink")
Explanations:
- 555 timer
- What is it?
- How does it work?
- High-level explanation, though more detail can come afterward for
anyone who wants to know
- Modes of operation
- Look at [the
datasheet](http://www.ti.com/lit/ds/symlink/ne555.pdf)
- We're interested in the astable multivibrator
- What does that mean?
- What crazy things do people do with it? ([All kinds of
things.](http://www.555contest.com/))
- **Hands-on:** Wire one up ([Schematic here (tested April 4,
2012)](Media:Intro_to_Electronics-Week4-0-555.svg "wikilink"))
- Show output on an oscilloscope
- LED (review)
- Look up forward voltages
- Use a different LED this time (maybe blue!)
- **Hands-on:** Figure out an appropriate current-limiting resistor
- Hook it up to the output of the 555 ([Schematic here (tested April
4,
2012)](Media:Intro_to_Electronics-Week4-1-555-LED.svg "wikilink"))
- Potentiometer
- What is it?
- How do I use one?
- **Hands-on:** Measure resistances between different terminals
- Could have used it in [Week
2](Intro_to_Electronics#Week_2:_Test_equipment "wikilink") to vary
regulator output voltage
- **Another hands-on:** Replace one of the 555 frequency-setting
resistors ([Schematic here (tested April 4,
2012)](Media:Intro_to_Electronics-Week4-2-555-potentiometer.svg "wikilink"))
- Change its resistance and watch what happens!
### Week 5: Digital logic
**Goal:** Build a Larson scanner (Schematic (more or less) from
[EMSL](http://www.evilmadscientist.com/article.php/CylonOLantern))
**Slides:**
[Media:Intro_to_Electronics-Week5-Slides.pdf](Media:Intro_to_Electronics-Week5-Slides.pdf "wikilink")
(with notes here:
[Media:Intro_to_Electronics-Week5-Slides_and_Notes.pdf](Media:Intro_to_Electronics-Week5-Slides_and_Notes.pdf "wikilink")
- Use [Week 4's 555
project](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink")
for the clock signal
- Can change resistor values to EMSL-recommended values to change
speed
- Leave out the low-pass filter because of time and cost
Explanations:
- Digital logic (in general)
- What is it?
- Compare to analog electronics — also has cool applications
- What can I do with it?
- State machines
- Multiplexers
- Counters
- **Hands-on:** Manual logic switch ([Schematic here (tested April 4,
2012)](Media:Intro_to_Electronics-Week5-0-switch.svg "wikilink"))
- SPST on a line with a pull-up (or pull-down) resistor
- How does such a resistor work? What does it do?
- Watch it on a multimeter
- How does it differ from the SPST without the resistor?
- Decimal counter
- What is it?
- How does it work?
- **Hands-on:** Hook one up to power and the 555 circuit from [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink")
- Watch what happens — connect each output pin to an LED to make it
more obvious ([schematic here (tested April 4, 2012) with
different (i.e., faster) resistor values as suggested by
EMSL](Media:Intro_to_Electronics-Week5-1-counter.svg "wikilink"))
- OR gate
- Review logic gates (if we got to them at the end of [Week
3](Intro_to_Electronics#Week_3:_Optoelectronics "wikilink"))
- Why are we interested in these?
- Plot out Larson scanner details/excitation table
- We need four of them
- **Hands-on:** Add them to the circuit ([Schematic here (tested April
4, 2012)](Media:Intro_to_Electronics-Week5-2-Larson.svg "wikilink"))
- Watch the lights scan back and forth
### Week 6: Soldering
**Goal:** Solder [Week 5's
project](Intro_to_Electronics#Week_5:_Digital_logic "wikilink") on a
printed circuit board
Explanations:
- Solder
- What is it?
- How do I use it?
- Leaded versus lead-free
- **Hands-on (ish):** Here's some solder
- Soldering iron
- What is it?
- How do I clean and tin the tip?
- **Demo:** How do I form a good solder joint?
- Heat both terminals
- Apply solder
- Examples of solder joints
- Ideal
- Cold
- Bridged
- **Hands-on:** Solder two wires together
- Printed circuit board
- What is it?
- Fiberglass
- Copper traces/pads
- Drilled holes/plated vias
- Silkscreened markings
- **Hands-on:** Solder a component
- Assembly
- **Hands-on:** Finish the board! ([PCB design (EAGLE) here, still
untested](Media:Intro_to_Electronics-Week6-EAGLE.zip "wikilink"))
- Bonus: Do I need one of these? (Other ways to mount circuits)
- Prototyping board, layout tools, etching (chemical and mechanical)
## Bill of materials
Pricing assumes 25 kits with no special discounts (e.g., [Adafruit
hackerspace
discount](http://www.adafruit.com/blog/2010/06/01/big-news-all-hacker-spaces-in-the-world-get-adafruit-reseller-pricing-starting-today/)).
Total cost — not including breadboard jumpers, multimeter, PCB and
shipping for all of these things — comes out to \$368.20 (or \$14.73 per
person).
### Equipment
- Multimeter
- Relatively inexpensive (but maybe more than we want students to
spend)
- Voltage, current, resistance, continuity
- Diode test would be nice to have
- Do we want people to get their own, or do we want to use the
space's?
- MAS830 (\$337.50 for 25:
[Adafruit](http://www.adafruit.com/products/71))
- Does the space have enough working meters? (If not, can we
convince some place to donate some more?)
- Breadboard
- Full size x1 (\$180 for 25:
[Adafruit](https://www.adafruit.com/products/239))
- Battery holder
- 4xAA x1 (\$21.18 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/BH14AAW/BH14AAW-ND/66735))
- Batteries
- Alkaline AA x4 (\$33.48 for 100-pack:
[Amazon](http://www.amazon.com/Duracell-Coppertop-MN1500-Batteries-Count/dp/B006W9QIM2/))
### Things we could make ourselves
- Assorted breadboard jumpers
- We could cut these ourselves to reduce cost, assuming we have enough
small solid-core wire
- Apparently Digi-Key also sells these in [packs of 150 or
200](http://search.digikey.com/us/en/cat/prototyping-products/jumper-wire/2359516?stock=1&pbfree=1&rohs=1)
for various lengths for \$16.48
- Beginners might be more comfortable with longer pieces of wire
(e.g., [these packs of 75](http://www.adafruit.com/products/153)
for \$6.00 each), though — thoughts?
- Printed circuit board for [Week
6](Intro_to_Electronics#Week_6:_Soldering "wikilink")
- Do we etch or mill these ourselves? Do we have some batch PCB
service (e.g., Seeed, Sparkfun) get them done?
- First design (EAGLE files [here](https://gist.github.com/2067344))
is 1.70 x 3.00 inches
- BatchPCB price at that size for 25: \$328.75 (\$13.15 each)
- Fusion PCB price at that size for 30: \$84.70 (\$2.83 each)
- Fusion PCB price at that size for 50: \$84.90 (\$1.70 each)
- Both Fusion PCB prices are with the extra fee for testing all of
them (instead of half) since it'd be nice not to have to
troubleshoot the boards themselves in addition to the students'
work
- Still have some room in the corner if we're interested in doing
anything else with it
### Components
- LEDs
- 5mm red x10 (\$19.38 for 250:
[Digi-Key](http://search.digikey.com/us/en/products/WP7113SRC%2FDU/754-1274-ND/1747673))
- [Week
1](Intro_to_Electronics#Week_1:_Getting_familiar_with_components "wikilink"):
x1 (light)
- [Week 3](Intro_to_Electronics#Week_3:_Optoelectronics "wikilink"):
x1 (light)
- [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink"):
x1 (555 output)
- [Week 5](Intro_to_Electronics#Week_5:_Digital_logic "wikilink"):
x10 (4017 output, later x6 for Larson scanner)
- [Week 6](Intro_to_Electronics#Week_6:_Soldering "wikilink"): x6
(Larson scanner)
- 5mm blue x1 (\$4.75 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/C503B-BCS-CV0Z0461/C503B-BCS-CV0Z0461-ND/1922944))
- [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink"):
x1 (555 output)
- Switches
- SPDT slider x1 (\$14.72 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/EG1218/EG1903-ND/101726))
(Note: We only need SPST, but for some reason those are several
times more expensive. Not sure why that is. SPDT will take a tad
more explanation, but it shouldn't be that big of a deal.)
- [Week
1](Intro_to_Electronics#Week_1:_Getting_familiar_with_components "wikilink"):
x1 (power)
- [Week 5](Intro_to_Electronics#Week_5:_Digital_logic "wikilink"):
x1 (logic)
- Voltage regulator
- LM317 x1 (\$9.80 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/LM317KCS/296-13869-5-ND/521368))
- [Week 2](Intro_to_Electronics#Week_2:_Test_equipment "wikilink"):
x1 (regulator)
- Resistors
- 220 Ω x1 (\$4.23 for 250:
[Digi-Key](http://search.digikey.com/us/en/products/CFM14JT220R/S220QCT-ND/2617711))
- [Week
1](Intro_to_Electronics#Week_1:_Getting_familiar_with_components "wikilink"):
x1 (current limiting)
- [Week 2](Intro_to_Electronics#Week_2:_Test_equipment "wikilink"):
x1 (voltage divider load), x1 (LM317 R1)
- [Week 3](Intro_to_Electronics#Week_3:_Optoelectronics "wikilink"):
x1 (current limiting)
- [Week 5](Intro_to_Electronics#Week_5:_Digital_logic "wikilink"):
x10 (current limiting)
- [Week 6](Intro_to_Electronics#Week_6:_Soldering "wikilink"): x6
(current limiting)
- 360 Ω x1 (\$1.38 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/CFM14JT360R/S360QCT-ND/2617740))
- [Week 2](Intro_to_Electronics#Week_2:_Test_equipment "wikilink"):
x1 (voltage divider top half), x1 (LM317 R2)
- 1 kΩ x1 (\$1.38 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/CFM14JT1K00/S1KQCT-ND/2617685))
- [Week 2](Intro_to_Electronics#Week_2:_Test_equipment "wikilink"):
x1 (voltage divider bottom half)
- [Week 3](Intro_to_Electronics#Week_3:_Optoelectronics "wikilink"):
x1 (BJT base current)
- [Week 5](Intro_to_Electronics#Week_5:_Digital_logic "wikilink"):
x1 (pull-up or pull-down resistor)
- 180 kΩ x2 (\$1.50 for 50:
[Digi-Key](http://search.digikey.com/us/en/products/CFM14JT180K/S180KQCT-ND/2617681))
- [Week 5](Intro_to_Electronics#Week_5:_Digital_logic "wikilink"):
x2 (555 R1, 555 R2)
- [Week 6](Intro_to_Electronics#Week_6:_Soldering "wikilink"): x2
(555 R1, 555 R2)
- 1 MΩ x1 (\$1.38 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/CFM14JT1M00/S1MQCT-ND/2617692))
- [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink"):
x1 (555 R1)
- 2 MΩ x1 (\$1.38 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/CFM14JT2M00/S2MQCT-ND/2617726))
- [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink"):
x1 (555 R2)
- 150 Ω x1 (\$1.38 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/CFM14JT150R/S150QCT-ND/2617674))
- [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink"):
x1 (current limiting)
- Capacitors
- 0.1 µF ceramic x1 (\$2.91 for 25:
[Digi-Key](http://search.digikey.com/scripts/DkSearch/dksus.dll?x=20&y=11&lang=en&site=us&KeyWords=490-3859-ND))
- [Week 2](Intro_to_Electronics#Week_2:_Test_equipment "wikilink"):
x1 (LM317 input filter)
- 0.22 µF ceramic x1 (\$5.00 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/FK18Y5V1H224Z/445-4806-ND/2050155))
- [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink"):
x1 (555 C)
- [Week 5](Intro_to_Electronics#Week_5:_Digital_logic "wikilink"):
x1 (555 C)
- [Week 6](Intro_to_Electronics#Week_6:_Soldering "wikilink"): x1
(555 C)
- 0.01 µF ceramic x1 (\$4.70 for 25:
[Digi-Key](http://search.digikey.com/scripts/DkSearch/dksus.dll?x=7&y=18&lang=en&site=us&KeyWords=490-3813-ND))
- [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink"):
x1 (555 filter)
- [Week 5](Intro_to_Electronics#Week_5:_Digital_logic "wikilink"):
x1 (555 filter)
- [Week 6](Intro_to_Electronics#Week_6:_Soldering "wikilink"): x1
(555 filter)
- Potentiometer
- 2 MΩ x1 (\$15.08 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/CT6EP205/CT6EP205-ND/738311))
- [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink"):
x1 (555 R1)
- Transistors
- 2N3904 x1 (\$6.90 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/2N3904-AP/2N3904-APCT-ND/950591))
- [Week 3](Intro_to_Electronics#Week_3:_Optoelectronics "wikilink"):
x1 (switch for output LED)
- Phototransistor
- x1 (\$6.75 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/PT334-6C/1080-1159-ND/2675650))
- [Week 3](Intro_to_Electronics#Week_3:_Optoelectronics "wikilink"):
x1 (light sensor)
- 555 timer
- NE555N x1 (\$6.99 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/NE555N/497-1963-5-ND/599557))
- [Week
4](Intro_to_Electronics#Week_4:_Oscillators_.E2.80.94_and_the_venerable_555 "wikilink"):
x1 (oscillator)
- Decimal counter
- 74HC4017 x1 (\$17.05 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/M74HC4017B1R/497-1835-5-ND/591928))
- [Week 5](Intro_to_Electronics#Week_5:_Digital_logic "wikilink"):
x1 (counter)
- [Week 6](Intro_to_Electronics#Week_6:_Soldering "wikilink"): x1
(counter)
- OR gates
- 74HC32 x1 (\$6.88 for 25:
[Digi-Key](http://search.digikey.com/us/en/products/SN74HC32N/296-1589-5-ND/277235))
- [Week 5](Intro_to_Electronics#Week_5:_Digital_logic "wikilink"):
x1 (count reverser)
- [Week 6](Intro_to_Electronics#Week_6:_Soldering "wikilink"): x1
(count reverser)
[Category:Intro_to_Electronics](Category:Intro_to_Electronics "wikilink")

View File

@@ -0,0 +1,96 @@
This page is a resource for keysigning parties @ HacDC.
## Upcoming Parties
Friday, November 13th @ 7:30PM
## Past Parties
September 10th, 2009
- We had about 20 folks and about 10 of whom were productively
keysigning.
## Intro to KeySigning
- You have a private key and a public key, which you generate (your
keypair).
- gpg --gen-key
<!-- -->
- People use your public key to send you encrypted messages that only
you can open via the magic of crypto!
- gpg --output doc.gpg --encrypt --recipient obscurite@hacdc.org doc
<!-- -->
- You decrypt these messages with your private key, which only you have
access to.
- gpg --output doc --decrypt doc.gpg
<!-- -->
- But first, you must share your public key, either directly or by
uploading it to a keyserver.
- gpg --keyserver pgp.mit.edu --send-keys D34DB33F
<!-- -->
- If it's on a keyserver, they must download it from the keyserver.
- gpg --keyserver pgp.mit.edu --recv-key D34DB33F
<!-- -->
- If it was a file (called obscurite.gpg for example), they can import
it manually.
- gpg --import obscurite.gpg
<!-- -->
- Now they can sign the key and send the key back to the keyserver.
- gpg --sign-key D34DB33F
<!-- -->
- But before anyone signs anyone elses key they have to make sure that
person actually owns that key (checking physical ID).
- Minimum recommendation is state photo ID + secondary photo ID
(school, employer)
<!-- -->
- You can see who has signed someone's public key. If their key has been
signed by someone in your web of trust, then that person is in your
web of trust as well.
- gpg --list-sigs D34DB33f
<!-- -->
- Don't forget to generate a revokation certificate for your public key
in case you lose your passphrase or your key is compromised!
- gpg --gen-revoke
## DETAILS
- Obscurite generally uses the pgp.mit.edu keyserver, but
keyserver.ubuntu.com is well liked and they do sync regularly, so it
doesn't especially matter which one you use, except that pgp.mit.edu
has a nice web search interface.
- I will pass around copies of signatures so you can check people off as
you confirm their identity
- I recommend using a valid state photo ID as a minimum validation. It
is up to your personal "keysigning policy."
## Links
- [Keysigning
commands](http://commandline.org.uk/command-line/ten-steps-for-attending-a-keysigning-party/)
- [Keysigning
HOWTO](http://www.cryptnet.net/fdp/crypto/keysigning_party/en/keysigning_party.html#overview)
- [Perl script to generate keyring
list](http://cryptnet.net/fdp/crypto/keysigning_party/en/extra/party-table.pl)
- [Checking the integrity of the installer, even without GPG already
installed](http://www.gnupg.org/download/integrity_check.en.html)
[Category:Previous_Projects](Category:Previous_Projects "wikilink")

View File

@@ -0,0 +1,46 @@
At the moment this is Katie's page for planning an LED Embroidery
workshop. It may later become a resource page for workshop participants.
[LED Calculator](http://led.linear1.org/1led.wiz)
[one way to do
it](http://makeprojects.com/Project/Electronic-Embroidery/44/1)
Resources already on hand:
- coin cell batteries (3V)
- ~~resistors~~ [not
needed](http://www.evilmadscientist.com/article.php/throw/print) in
this case
- Limor says lithium coin batteries are internally current-limited
- conductive thread (~25Ohms/foot)
- white 3mm LEDs (3.5V, 20mA)
What each participant should get:
1. embroidery needle
2. regular embroidery thread
3. conductive thread
4. LEDs
5. embroidery hoop
6. dark fabric
7. fabric pencil?
8. coin cell battery
9. tape to secure battery?
10. needle threader
Resource I should provide:
1. books with constellation drawings
2. photo and sample of finished piece
Instructions:
1. Choose a design.
2. Layout the design with fabric pencil.
3. Prep LEDs (punch through fabric and twist leads).
4. Sew circuit with conductive thread.
5. Test with battery.
6. Sew decorative part with regular thread.
[Category:Proposed_Projects](Category:Proposed_Projects "wikilink")

View File

@@ -0,0 +1,70 @@
# Efficiency
Interesting factoids about [replacing sodium vapor lamps with
LEDs](http://dansdata.blogsome.com/2008/12/27/led-street-lighting-not-as-good-as-you-think/)
for city-wide lighting.
- The theoretical lumen/Watt figures for LEDs are worse than
low-pressure sodium vapor lamps (100 lm/W versus 200 lm/W)
- White LEDs are actually blue LEDs with a consumable phosphor layer
that turns opaque after a few years of operation.
- Combined RGB LEDs will have better efficiency than a "white" LED.
Other real-world tests have concluded that LED street lights have about
the same lumen/Watt in practice as the sodium vapor lamps ([64 lm/W
LEDs](http://www.olino.org/us/articles/2008/11/02/streetlamp-lioris-aduro-52)
versus [67 lm/W Sodium
vapor](http://www.olino.org/us/articles/2008/12/29/indal-industria-aurora-streetlamp)).
Neon and florescent efficiency [depends on the color and
shape](http://www.signindustry.com/neon/articles/2003-07-11-RC-NeonandFlour.php3):
> \[...\] the fluorescent tube produces between 50 and 100 lumens of
> light per watt depending upon design. Compare this with the typical
> incandescent light bulb that produces between 10 and 20 lumens per
> watt. Neon light efficiency is based upon much fancier pants, the
> color of its output, which ranges from 10 lumens per watt for red to
> 60 lumens per watt for green or blue. One reason that green and blue
> tubes are more efficient is that phosphor coatings used to produce
> such colors better ballyhoo the high-energy ultraviolet light from the
> argon/mercury mix into visible colors. One reason that the fluorescent
> tube is more efficient than a neon tube is that a large straight tube
> offers less resistance to electrical current flow than a skinny bent
> one.
# Obstacles
Little Rock, AK wanted to replace their inefficient shielded lights with
more efficient fixtures, but their contract with Entergy is not a simple
\$/kW formula: [the energy company sets the price based on the type of
fixture](http://www.arktimes.com/Articles/ArticleViewer.aspx?ArticleID=fce07cab-0dea-4fc5-b57e-f1145715f01e).
> \[...\] According to Henry, the city tested out more efficient
> 100???watt HPS bulbs in one Little Rock neighborhood about five years
> ago. When the city asked Entergy to set a rate for those fixtures, it
> was almost double the rate for the 150-watt HPS type.
>
> When asked if Entergy was keeping Little Rock from being more energy
> efficient, Henry said simply, "Yes."
>
> "But how do you fight Entergy?" Henry asked. "I mean, we've had people
> come in and show us new, more efficient lights and we've said, well,
> the problem is, it's not going to save us anything. It will be a whole
> lot less wattage and it will put light out on the street but we can't
> get any benefit out of it because of the tariffs."
# Commercial LED lamps
[SparkFun](http://sparkfun.com) sells LED lamps that are screw
compatible with US light sockets:
- [75
W](http://www.sparkfun.com/commerce/product_info.php?products_id=8716)
- [12
W](http://www.sparkfun.com/commerce/product_info.php?products_id=8714)
- [3
W](http://www.sparkfun.com/commerce/product_info.php?products_id=8717)
- [1
W](http://www.sparkfun.com/commerce/product_info.php?products_id=8715)
[Category:Useful_Info](Category:Useful_Info "wikilink")

View File

@@ -0,0 +1,193 @@
HacDC Annual Meeting February 21, 2009
The meeting was called to order at 5:11 PM by standing Coordinator In
Chief Elliot Williams.
Members Present: Nick Farr, Ben Stanfield, Matt Lesko, Derek Cooper, Tim
Collins, Serge Wroclawski, Member 7, Katie Bechtold, Martin Rothfield,
Member 19, Member 44, Elliot Williams, Jonathon Blocksom, Member 48
Others Present: Andrew Gillette, Tommy Johnson, Art Coleman
The C-i-C declared a Quorum was present, and gave a brief overview of
the official items to address at the meeting.
## New Business
### Board of Director Elections
Jason nominated Elliot Williams Member 48 seconded. The nomination was
accepted.
Elliot danced for 2 minutes as ordered by the bylaws.
No other nominations were offered, so Elliot Williams is Coordinator in
Chief.
Minister of Information
Member 7 nominated himself. Tim Collins Seconded.
Katie nominated herself. Nick Farr pointed out that there is no
requirement for seconding.
A vote began, but was halted when Rodney expressed a desire to address
those present about why he wanted to serve.
Candidates were given the opportunity to give their reasons for wanting
to serve.
Member 7 spoke on his wish for a website with more functionality.
Derek and Tim expressed an interest in having members available to step
up and help out regardless of ministerial duties.
A vote was held and the vote was in favor of Katie. Katie Bechtold is
the Minister of Information.
Keeper of the MIBS Ben nominated himself. The nomination was accepted.
No other nominations were offered, so Ben Stanfield is Keeper of the
MIBS.
Tim Collins nominated himself for Minister of Finance.
Tim plans to increase transparency for the finance office.
No other nominations were offered, so Tim Collins is the Minister of
Finance.
#### At Large Board of Directors
Derek Cooper nominated himself.
Serge Wroclawski nominated himself.
Tim Collins nominated Member 7. Member 7 declined the nomination.
Nick Farr was nominated by Ben. Nick declined the nomination.
No other nominations were offered so Serge and Derek are the at-large
board members.
Elliot made a motion to change the registered address to HacDC from the
former apartment of Nick Farr to the HacDC Space's Address.
Derek seconded the motion.
No one was opposed. Motion carried.
### New Member Approval Discussion
Elliot explained the current process, and opened it for discussion.
Nick Farr pointed out that the Minister of Finance can bestow non voting
member privileges before becoming an official voting member.
Derek Cooper suggested that a member should have to go through a review.
Tim suggested membership should require approval by the board at some
point.
Ben Stanfield expressed his desire that when a person paid dues they
immediately became a member.
Nick Farr made a motion to defer any undecided issues from the annual
meeting to the next regular meeting.
Tim Collins seconded.
Derek Cooper moved to admend the motion to end this meeting at 7. No one
seconded and the amendment died.
No one opposed Nick's motion. Motion carried.
Elliot moved to table the discussion of new member approval. Member 7
seconded.
there were no objections.
## HacDC Finances
Elliot asked for the finance report report from the outgoing minister of
finance.
Nick Farr presented the finance report (see attached) and turned over
current financial records to the incoming minister of finance.
Discussion of the finance report centered around the cost of a wireless
credit card machine that Nick Farr had arranged, but had never been
used. Nick agreed to pay back HacDC for the \$1,231.85 in fees and
charges associated with the machine.
Without objections, the finance report was accepted.
Elliot moved to table each further topic after 15 minutes of discussion.
The meeting was suspended for dinner.
At 8:05 the meeting was resumed.
Ben proposed a motion to change the standing rules for meeting
frequency. The motion was to make every second Tuesday of the month the
"formal business meeting" and to make the every other Tuesday meeting an
"informal non-voting meeting" where no business may be conducted.
Elliot seconded.
Debate centered around whether the [bylaws](bylaws "wikilink") allowed
us to hold non voting meetings. Derek believes that the
[bylaws](bylaws "wikilink") do not allow it. Nick Farr and Ben Stanfield
both argued that the Annual meeting is for setting standing rules, and
that it was possible for a rule to declare which meetings could allow
voting on official business.
The motion carried.
Ben moved to adopt Robert's Rules of Order as the framework.
Member 7 moved to amend the motion and select the modified or new
revisions.
Ben seconded
There were no objections.
Derek motioned to table, arguing he needed more time to study Robert's
Rules of Order. Tim seconded.
Ben pointed out that it had been on the agenda for a month, and that
virtually every single club, group, organization, and membership body in
the world used Robert's Rules.
The motion to table passed.
[Quorum](Quorum "wikilink") changes were discussed, but there didn't
seem to be a consensus on whether we need to change it or not.
There was a proposal to add a quartermaster position to handle space
cleanup and sell our unused inventory on eBay.
Tim suggested having a once a month day to clean the space, mixed with
an event like beer making.
There was discussion of talking about accepting and disposal of hardware
at a future meeting.
The general consensus was that no one wanted to be the quartermaster as
described, so the motion to create the position was tabled.
## 2009 Budget Items
A discussion about possible budget items for 2009 was suggested.
Different items included Basement project, 501c3, Tools, Advertising,
[Conferences](Conferences "wikilink"), food, reserve fund, and more.
Serge nominated himself for PR Coordinator. There was no objection.
A motion was made to approve two new members. There was no objection.
A motion was made to adjourn. There were no objections. Meeting
adjourned at 11:18 PM.
[Category:Meeting_Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,165 @@
**Note:** This page serves as the 2010 Annual Meeting's agenda (before
the meeting) and minutes (after the meeting).
# Purpose
From the HacDC Bylaws, Article III, Section 2:
At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.
# Time and Location
7:30 p.m., Tuesday, 13 April 2010
Meeting called to order at 7:40:12 by el Presidente outgoing
Members Present: Jason D, Brad B, Todd F, Elliot W, Tim C, Ash, Alberto
G, Daniel B, Martin R, Ben S, Tim B, Daniel P, Brian Redbear, Katie B,
Nikolas C, Dan T, William G,
Others: Allen M, Nick F, Tom C
[Quorum](Quorum "wikilink") established? Yes
# Officer Reports
## President's Report
Been a really good year and a bit for HacDC. We've grown a lot. We've
outgrown our space, we've got a bunch of great people doing great
things. We've helped the church out along the way. The basement is
turning into a workable workshop.
## Vice President's Report
Nothing to report.
## Treasurer's Report
See attached. The financial status of HacDC is strong.
## Secretary's Report
# Member Reports
## Daniel Packer
There's a possibility of using warehouse space (near 1400 N Capitol)
that's being used by MIT's FabLab. There's also possibilities of working
with that group.
Digital capital week: HacDC has been invited to participate. There is
funding available for kit builds, etc. Soft deadline, but proposals are
currently being accepted.
## Nikolas C
Doing more kit builds. AVR Programming class has started and should be
more regular now.
## Brad
Natural Language and AI group is fun.
## Tim Ball
Airplane hanger space is still an option.
## Ash
Would like to repeat the electronics class. Needs several alternate
teachers
## Daniel P
Is helping to organize a HacDC table for Robot Fest.
## Todd F
501c3 App is ready to go now that we have the financial reports
finished. The only other thing we need to do is to write a conflict of
interest policy.
Ben moved to second the boilerplate conflict of interest policy Todd F
posted to the members list. It passed unanimously
## Alberto G
Hackers in Space project is gaining momentum.
## Daniel B
Showing off goodies from Riley's shop.
## Jay K
Requesting approval to get a new callsign for HacDC.
## William G
FPGA class is going well.
# New Business
## Board of Directors Elections
### President
##### Nominations
Daniel P nominated himself, Alberto seconded
There were no other nominations.
### Vice-President
Tim Ball nominated himself, Jay nominated himself, Daniel P nominated
Todd F, Todd Declined someone nominated Nikolas C
Jay declined to give a statement.
Tim B promised to bring in beer if nominated
Nikolas says "blinkie lights are good"
Tim B won the vote.
### Treasurer
Todd F was nominated
There were no further nominations
### Secretary
Tim B nominated Ben S. Daniel P nominated Nikolas C Ben S withdrew his
nomination
There were no further nominations
### At-Large Directors
Will was nominated Jay was nominated Tim C nominated Osman Tim B
nominated Redbeard
Katie was the winner. Second place was a tie between William and Brian.
A coin flip decided the vote in William's favor.
### Induction of New Members
- Alan McCosh
- Tom Cohlmia
- Nick Farr
# Finances
# Adjournment
Meeting adjourned at 9pm'ish
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,252 @@
**Note:** This page serves as the 2011 Annual Meeting's agenda (before
the meeting) and minutes (after the meeting).
# Purpose
From the HacDC Bylaws, Article III, Section 2:
At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.
# Time and Location
Meeting called to order at 2008 EST by Brian Harrington
Members Present:
Brian Harrington Toast Xaq R. Bradford Barr John Katie B. William Gibb
Todd Fine Peter Edworthy Ben the Pirate Chris K. Phillip Stewart Tim C
Jamie Martin Rueben Elliot Williams
Others:
[Quorum](Quorum "wikilink") Yes
# Officer Reports
## President's Report
IRS 501c3 status has been obtained. Donations made to HacDC can now be
considered tax-exempt. Please contact any Board Member to obtain a
receipt for a donation made to the space.
Membership has changed over the past year; gaining members, losing
members and having old members return to the space.
Fundraising is now a very important part of our organization. This is
traditionally the job of the president in a non profit.
We have been in contact over the past two years with news
organizations - we need to make sure we keep in contact with these
groups, as it will only be beneficial for ourselves.
Keep up the programming! With our do-ocracy approach that may seem
difficult, but it is a crux of how we operate. See examples of Elliots
microcontrollers class, Brad's lockpicking class, Tom's lathe class, et
cetera. This is a core strength and needs to be maintained.
Remember that we're all adults and should be capable of resolving
personel issues amongst ourselves.
Always feel comfortable approaching the Board of Directors with any
issues you feel are large enough to warrant our attention. Email bod \[
at \] hacdc \[ dot \] org or talk to one of us in person. We need to be
aware of large issues.
CHECK OUT Foundation Center <http://foundationcenter.org/> They are
located in Downtown DC and area fantastic resource!
## Vice President's Report
Not Present
## Treasurer's Report
ASSETS
Current Assets
Bank Accounts
BBT Checking 2,726.07
Total Bank Accounts \$2,726.07
Other Current Assets
Paypal 3,733.28
Undeposited Funds 0.00
Total Other Current Assets \$3,733.28
Total Current Assets \$6,459.35
Other Assets
Rent Security Deposits 850.00
Total Other Assets \$850.00
TOTAL ASSETS \$7,309.35
LIABILITIES AND EQUITY
Liabilities
Total Liabilities
Equity
Opening Balance Equity (April 2010, Beginning of Quickbooks) 9,023.84
Retained Earnings -1,304.64
Net Income -409.85
Total Equity \$7,309.35
TOTAL LIABILITIES AND EQUITY \$7,309.35
BUDGET:
2526.00 RENT
\$68.58 ST. FARM INSURANCE
\$37.45 LINODE
\$10.55 QUICKBOOKS
\$2642.58
-~2000
=642.58 STRUCTURAL DEFICIT
We have some serious budget considerations we need to address. We have
an operating budget of about ~2,600 USD/month.
At the present burn rate, we will be able to make it through our current
lease without going bankrupt. After the end of our current lease, we
will need to seriously consider if we can stay in this space.
Q: Have we reconciled the billing discrepency with the church, regarding
the change in our monthly rent? A: The church has started billing us at
the proper rate, as of this month.
## Secretary's Report
No Secretary present.
## At-Large Directors' Reports
### Katie
Hopes to have been a useful board member. Will be leave DC for a year to
move to Kyoto to study the Art of Tea.
### Will
Secured a large electronics test equipment donation from GWU. Happy to
have been a board member the past year :)
# Member Reports
- Martin: Robotfest is coming up. This is a huge gathering of folks
likeminded towards HacDC. We should make a presence there, as it will
provide good visibility to us as an organization. We should take up
spaceblimp, other projects we do. I volunteer to drive up there.
<!-- -->
- Todd Fine: Nick B. and Alex H. helped out quite a bit in building out
the FIRST Robotics robot. This is a good start towards a useful
relationship to promote HacDC.
# New Business
Brian: New benefits that go inhand with out 501c3 Status.
- Signed up for Google Ads for Hacdc, we get 10,000 USD worth of Adwords
each month.
- Eventbrite fees are nearly nothing. Very easy to use to run ticketing
for events that have limited resources. See Brian or ??? to get hooked
up with that.
<!-- -->
- Remote meetings/telemeetings via GoToMeeting via TechSoup. \$95/year
for up to 1000 attendees \[for up to 5 years, normally a 5,000 USD
value\]. Voting allowed, but not secret ballot (if you want it secret,
show up). Would also allow for remote attendees of classes. This
allows for unlimited phone callins to classes, meetings, et cetera.
Also screencasting. This nearly nonexistent in the Hackerspace world.
IRC lurkers, members that are away from the space, other visitors, can
easily callin or connect to our screencasts.
- Redbeard proposed the purchase of GoToMeeting via TechSoup, TC
Seconded.
- Motion Passes
<!-- -->
- Brian Harrington proposes to ratify the standing rules as they stand.
- Elliot Williams seconds the motion.
- Motion Passes
## Board of Directors Elections
### President
Elliot and Redbeard were nominated. Redbeard elected.
### Vice-President
Tim, Elliot, Brad? nominated. Elliot elected.
### Treasurer
Tim C. elected through acclimation.
### Secretary
Ben Mendis elected through acclimation.
### At-Large Directors
Will, Toast, Brad, Xaq, Phil nominated. Will and Brad elected.
### Induction of New Members
JustMike from NYC (knows A1Labs, NYCResistor). Nominated by Redbeard,
seconded by Brad. Memberized.
# Finances
Several ideas
- Artisphere electronics: Alberto has made us aware of Artisphere's
desire to partner with us on an electronics class. There is potential
to do a one off workshop. There a potential to run a longer-term class
(8 weeks) that could be a revenue stream for us.
- Kickstarter: Valid for 501c3 donations, but cannot be used for
operational expenses. Martin would like to see us put together a
Kickstarter program put in place in order to build up facilities.
- JustMike - Lots of potential to get federal funding for wireless
sensor networks, solar power, methane works. Needs to be applied to
green energy, agriculture, energy reduction applications. Kid/youth
education and integration programs are also available.
- Peter Edworthy - We need to make sure anything we do has some way to
enable longterm financial streams.
- Toast: RadioCPR does bar nights, CPR does 1200/USD pre bar night in
practically free money. We should too.
# Adjournment
Meeting adjourned at 2200 EST.
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,181 @@
**Note:** This page serves as the 2011 Annual Meeting's agenda (before
the meeting) and minutes (after the meeting).
# Purpose
From the HacDC Bylaws, Article III, Section 2:
At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.
This meeting will also serve as the monthly meeting for the month of
February.
# Time and Location
Location: HacDC (software room)
Wednesday, February 15, 2012
Meeting called to order at _7:50_ by: _Brad_
Members Present: Brad, Tim S., Tim C., Alberto, Martin, Phil, Chris,
Reuven, Max, Todd Fine, Elizabeth, Scott, Lee, Jaime, Sean, Timmothy,
Bill, Eric, Alex, Nick
Others Present: Justin
[Quorum](Quorum "wikilink") met? _Yes_
# Officer Reports
## President's Report
Not present.
## Vice President's Report
Has some ideas for events and stuff to be mentioned later.
XLaser mentioned the would send us another package of laser stuff, but
never did. (Sharks with freaking laser beams.)
## Treasurer's Report
Currently have 59 voting members so quorum is still 14 for now.
Here is the financial summary spreadsheet for Jan 2012:
![<file:HacDC_Financials_Jan_2012.pdf>](HacDC_Financials_Jan_2012.pdf "file:HacDC_Financials_Jan_2012.pdf")
We added members Scott Robbins and Stephen Nichols in January. Vince was
voted in but has not paid yet as far as I know - please contact me if
this is incorrect! And we added three other membership subscriptions
(Chalk, Hughes, and Myers) but have not voted on them as members yet as
well - maybe this month? Two non-paying members, one hasn't responded
and may be dropping.
We finished January almost \$500 ahead and membership revenue is now \>=
expenses! If this keeps up, HacDC will have some resources to put into
projects again going forward.
## Secretary's Report
Nothing special to report. Haven't been around for a couple months.
## At-Large Directors' Reports
### Toast
Not present.
### Martin
Nothing to report.
# Member Reports
## Brad
Smithsonian Institute has contacted Brad about 3D vision stuff. It would
be cool to have a hackathon here to help out. Talk on Blabber if you're
interested. Would like to have an event where we take pictures of
objects at the Smithsonian, turn them into 3d models, and print them out
with the printers at the space.
## haxwithaxe
- occupancy sensor getting it's own machine (sheevaplug)
- project server on the fritz (might need replacement,more fiddling
required to know)
- Byzantium gunning for CFP acceptance at HOPE and several other cons
- found HacDC patches with HOPE vulture. i have them in my bag so they
make it to HOPE for those interested in them.
- working on occsensor controlled outlet to prevent things that
shouldn't be on when no one is at the space from being on while no one
is at the space.
## Martin
- noise reduction: status? items/actions/help required? (item added by
haxwithaxe)
- got started, will continue to get worked on as time permits
## Alberto
We're going to get some monies for the class that Brad is teaching.
(Let's earmark it for lasers.)
## Eric
Working on fixing up the Internet in the space/church. Might be a
problem with the AP.
Bill has donated an AP which might help with the Internets.
## Tim S
Sparkfun would like to borrow our space, and will reciprocate by doing
something nice for us.
Lots of recent work on infrastructure:
- Mailing lists move to Google
- Website moved to Dreamhost
- Infrastructure work thanks to Jaime and Chris
# New Business
New America Foundation conference (on impact of Makers on technology)
has invited us to come and show off our toys (3D printers). In favor of
us being there and participating (and moving the Cupcake there, with
Andy Walker's permission)? **Vote passes.**
Alex, non-member, would like to teach a class about Java programming. On
March 28th, at 7 or 8p. Gonna post something to Blabber. Sponsor: Brad
## Board of Directors Elections
### President
- Ben (the pirate) nominated by Jamie, seconded by haxwithaxe
- Brad nominated by Martin, second by Tim C.
Ben withdraws.
Brad wins unopposed.
### Vice-President
- Ben nominated Tim S. second Chris and Reuven
Ben wins unopposed.
### Treasurer
Tim Slagle is running for re-election as Treasurer. Second Ben.
Tim wins unopposed.
### Secretary
Reuven is nominated by Ben, second by Chris. Eric is nominated by Brad,
second by Martin.
Voted by secret ballot: Eric won by a bunch.
### At-Large Directors
haxwithaxe is running, seconded by Reuven. Marin, seconded by Brad Nick,
seconded by Ben
Nick and Martin elected by vote.
### Induction of New Members
# Adjournment
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,314 @@
## Purpose
From the HacDC Bylaws, Article III, Section 2:
At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.
This meeting will also serve as the monthly meeting for the month of
March.
## Time and Location
March 12, 2013
Meeting called to order at 7:45 p.m. by Ben the Pyrate
Members Present: Ben, Dan, Shawn, Dave, mirage335, Loki, Bryce, Chris,
Reuven, Shahar, Tim D., Phil W, Phil S., Brad, Alberto, Katie, Tim
Slagle, David Whiteis, Martin, Nick B., Justin Myers, Jon H, Jamie Ai,
William Gibb, Andy Ta
Others Present: Logan, Graham
[Quorum](Quorum "wikilink") met? yes
## Approval of Previous Meeting's Minutes
[Regular Member Meeting 2013 02
12](Regular_Member_Meeting_2013_02_12 "wikilink") Approved unanimously.
## Recognition
Eric for being our president. Even if he didn't show up tonight. :P
Tim Slagle for being treasurer. And proposing Project Awesome.
And the entire board.
## Director Reports
### President's Report
Absent.
### Vice President's Report
Nothing to report.
### Treasurer's Report
Here is the financial summary spreadsheet for February 2013:
![<File:HacDC_Financials_2013_02.pdf>](HacDC_Financials_2013_02.pdf "File:HacDC_Financials_2013_02.pdf").
We gained one new member (Philip Westlow). The other two members voted
in last meeting have not paid their dues yet. We lost Stephen Beuttel
~~and dropped Reuven Cohen after 4 months without dues payment~~. We had
55 paying members and 2 non-paying members. Our dues revenue continues
to meet our expenses again, and thanks to those that donate extra we had
a regular (non-earmarked) monthly net of \$563.
Quorum is 14.
#### Project Awesome
We had a surplus so I am able to declare a \$450 Project Awesome
dividend and add \$113 to our reserves. Here is the Project Awesome
spreadsheet for February:
![<File:HacDC_PA_Projects-2013_02.pdf>](HacDC_PA_Projects-2013_02.pdf "File:HacDC_PA_Projects-2013_02.pdf").
Thanks to everyone that voted for projects in February, there are now
nine votes total.
There have been no reports for Project 3DP (3D Printing, contact Andy
Ta) for the last two months so the project is suspended and will get no
additional funding. If there is no report for next month it will be
**cancelled** and any funds returned to the general. Andy, if you are
out there, file a report or have someone else do it! And if you don't
think you'll want to continue as coordinator, please turn it over to
someone else.
### Secretary's Report
Announcements, membership database.
### Director-at-Large Reports
#### Martin
Dan, Hax and Martin attended VWS Winterfest. Brought in \$353 selling
unwanted junk from HacDC. Lots of people were interested in finding out
about HacDC.
#### Andy
Absent.
## [Project Awesome](:Category:Project_Awesome "wikilink") Reports
### Project LASER
A bunch of research was done, resulting in a comparison
\[<https://docs.google.com/spreadsheet/ccc?key=0Ai_FSnJ6DCsUdEpPdDJhM2Y0WUQ5eEw4TzRHMm84SWc&usp=sharing>\|
spreadsheet\] and more [links](LaserCutterLinks "wikilink") to
manufacturers and articles. HacDC's front door is 30.5 inches wide which
limits our choices substantially.
### Project BYZANTIUM
Won a \$10K grant (InformSec)! Can be spent on ham equipment, raspberry
pis, macbook and macbook air. Also on CDs. The money will go through
HacDC.
Haven't heard back about FEMA grant (no applicants have).
### Project KITBUILD
Earmarked balance large enough to pay for some tools and supplies, need
to check out existing bin to see what we already have available.
### Project 3DP
Do we want to keep buying plastic? Andy will pass the baton to mirage335
as coordinator.
## Member Reports
### Shawn Nock
GrindDC (HacDC Biohacking Group) hasn't been active for an entire year
yet... but we've made impressive progress. A functional Biosignal Amp
(http://mirage335.dyndns.org/wiki/Mirage335BiosignalAmp), several
versions of tDCS (https://github.com/nocko/tdcs), Implant Design
(https://github.com/nocko/heledd/tree/master/hardware), a temperature
controlled bath for biomaterials testing. Our Grinder nights at the
space regularly attract 8-12 attendees.
We're also in the process of organizing a SMT soldering class in for
HacDC. Prototype teaching boards and partlists we're made
(https://github.com/nocko/smt-practice) and a beta-quality seminar was
held two months ago to test out our teaching chops.
Challenges moving forward:
- Expanding into DIYBio: Safety (MSDS/right-to-know documentation),
autoclave and lab glassware purchases, reagent purchase and storage.
- Heavy interest in Qualified Self projects specifically with respect to
Smartphone integration (writing apps and developing sensors).
- Electro-physiology and DIY EEG/EMG: Designing analysis software and
novel applications for the Biosignal Amp Mirage designed.
### Dan Barlow
Have been telling you about Jon Singer's moving adventure. Do you know
anyone who wants a transformer (designed to be immersed in oil)? Give
Dan feedback about what HacDC wants/needs.
### Philip
See e-mail. (Looking for hardware for old video games for an electronic
literature showcase.)
### David Whiteis
[F3-robot](F3-robot "wikilink") (used to sequence human genome). Brought
stuff that can be claimed but not left in the space.
### mirage335
Would like laptops for HARC. Offline discussion.
Occupancy sensor is working fine.
### Martin
There are new HARC postcards that will be sent to FCC license-holders in
DC.
## Old Business
None.
## New Business
### Approve new Standing Rules
Because the Standing Rules are not fully completed and we haven't had
much time to discuss them among the members before voting, we can just
vote on the first Article today -
[Voting](Proposed_Standing_Rules#Article_I:_Voting "wikilink"). That
will give us the ability to continue edits and discussions, and vote on
the other parts of the Standing Rules at future monthly member meetings.
Unanimously approved.
### Anti-Harassment Policy and Diversity Statement
[Anti-Harassment Policy](Anti-Harassment_Policy "wikilink") and
[Diversity Statement](Diversity_Statement "wikilink") need to be voted
on.
Ben read the prepared statement \[insert statement here\].
What has transpired?
<!-- -->
Last Friday, 03/08/2013, there was an e-mail exchange discussing the
proposed Anti-Harassment policy to be included in HacDC bylaws. During
this discussion, an individual brought up the topic of rape.
Specifically, statements were made regarding ???false accusations of
rape??? and the ???psychology of victimhood.??? A few members sent
e-mails to the board requesting that the conversation be stopped.
<!-- -->
Why is this a problem?
<!-- -->
This topic directly affects our membership. We, as a community, have
members who have been victims of sexual violence. Statements like this
trivialize and normalize their experiences and create a threatening and
hostile environment at HacDC.
<!-- -->
HacDC is part of the community at St. Stephens, and as part of that
community bears the responsibility to make the space safe for everyone.
Statements which create threatening and hostile environments cannot be
tolerated. These statements do not relate to the specific goals of HacDC
and are damaging to the organization and the community which it is a
part of. They alienate part of our membership and hurt our standing with
hackerspaces, organizations at St. Stephens, and all peer/community
learning institutions.
<!-- -->
What we intend to do about it.
<!-- -->
E-mail exchanges about this topic will not produce any valuable results
and will only alienate more members of our community. This topic will be
discussed at the Annual Meeting on Tuesday, March 12th, 2013.
Alberto thought it was bad to end an ongoing discussion. It was a
philosophical issue at stake, not big enough to stop the conversation.
Loki proposes a working committee be formed from selected members to
form a version of the Anti-Harassment Policy that has broader consensus.
Reuven says limits for the intensity of conversations should be looked
into.
Jon urges people to keep conversation on topic on the members list.
Doc says this problem crops up in other communities. Invoking the
principle of Buddhist Right Speech seems to fix it. He can post some
links to the wiki about how it has been implemented in other
communities.
Loki gave a one-minute summary arguing in favor of Proposal 2. New
member Graham gave a one-minute summary arguing in favor of Proposal 1.
Two people voted to defer. Two people voted for Proposal 2. Everyone
else voted for Proposal 1. Proposal 1 is approved.
Diversity Statement approved unanimously.
## Board of Directors Elections
### President
Ben has been nominated and wins by default.
### Vice-President
Shahar and Chris and Reuven have been nominated. Chris wins.
### Treasurer
Katie has been nominated and wins by default.
### Secretary
David Mc has been nominated and wins by default.
### At-Large Directors (two)
Shawn Nock and Reuven are nominated and win by default.
## New Members
Logan is originally from DC and just moved back here about a year ago.
Physics background. Programming job. Been coming to GrindDC meetups.
Approved.
Graham moved to DC 3.5 years ago. Has a 3D printer. Does electronics
work for fun. Approved.
## Adjournment
Adjourned at 9:23 pm
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,215 @@
## Purpose
From the HacDC Bylaws, Article III, Section 2:
At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.
This meeting will also serve as the monthly meeting for the month of
March.
## Time and Location
March 11, 2014
Meeting called to order at 1955 by Ben.
Members Present: Ben, Katie, DavidMc.. 12 in person, 3 online.
Others Present: ~5
[Quorum](Quorum "wikilink") met? Yes.
## Approval of Previous Meeting's Minutes
[Regular Member Meeting 2014 02
11](Regular_Member_Meeting_2014_02_11 "wikilink") - approved.
## Recognition
- Thanks to Evan and Zack for their work on the laser cutter.
- Everyone involved in Project SEM .
- David McInnis for adding really cool lighting to the new shelves in
the basement.
- Julia Longtin (aka. juri) for more 3D printer tweaking and getting
ahead on cleaning up the space.
## Director Reports
### President's Report
As reported last month, the BoD has approved accepting the donation of a
Scanning Electron Microscope (SEM). The SEM is now ready to be picked up
and we have about three weeks to collect it. It is currently in Norfolk,
VA and is a large, heavy piece of equipment. We will need to rent/borrow
a truck (ideally one with a lift-gate) to transport it up to HacDC, and
we'll need several strong volunteers to help us load, and unload the
truck (including bringing it up the stairs and into the workshop).
Additionally, we will need some help making space for it in the
workshop. **We are currently shooting for Saturday, March 29th.**
### Vice President's Report
admin team is accepting donations of gigabit network switches. we need
both managed and unmanaged switches. one managed switch with 20+ ports
which is for the church network. we are getting the space wired for
gigabit ethernet so cat5e and cat6 keystone jacks and and wall plates
are welcome.
### Treasurer's Report
Here is the financial summary spreadsheet for February 2014:
![<File:HacDC_Financials_2014_02.pdf>](HacDC_Financials_2014_02.pdf "File:HacDC_Financials_2014_02.pdf").
We gained two members in the last month: Elizabeth Smith and Ariam
Mogos. We lost two members in the last month: Tim Dixon and Nick Mapsy.
We have 46 dues-paying members in good standing, two permanently
dues-waived members, four temporarily dues-waived members, and five
members who are behind on dues.
#### Project Awesome
Here is the Project Awesome spreadsheet for February:
![<File:HacDC_PA_Projects-2014_02.pdf>](HacDC_PA_Projects-2014_02.pdf "File:HacDC_PA_Projects-2014_02.pdf").
Once again we are in the red for the month, so there is no Project
Awesome dividend. :(
### Secretary's Report
NonHacDC calendar is being populated. Need to put it in a more public
place and open it up to members for editing. Otherwise nothing
significant to report.
### Director-at-Large Reports
No report.
## [Project Awesome](:Category:Project_Awesome "wikilink") Reports
### Project LASER
Dan: Optical maintenance; cleaning lenses, tightening things, etc. Found
the aluminum track is wearing and has some play. Will try to flip them
to use the other side, otherwise will purchase new tracks. This is
expected, normal wear. Aiming laser and combining optic is here, but
dust is still a problem. Will add air flushing to all optical
components. Thanks to those who worked on the alignment. The idea of
having jigs underneath is being put off. The cabinet will need to be
reworked first.
### Project BYZANTIUM
Nothing new to report.
### Project KITBUILD
Nothing new to report.
### Project SUPPLIES
Still healthy and stable. A few expenses this month, related to lighting
the new shelves.
### Project EXPANSION
We may be able to afford a small vertical bandsaw for about \$100,
similar to the one we had before. This would help cutting stock
materials for CNC mill, laser cutter, photolithography fab, etc. Any
suggestions or objections? Dan: reminds Mirage that we'd like ink for
the inkjet plotter in the basement.
### Project SPACECAM
Kevin: comments on Rob's donation list, very interested in the
projectors and the scanning/projecting white boards. WebRTC is what will
hopefully replace Hangouts in the future. Please check it out.
## Member Reports
### Justin Myers
Quick reminder that our first
[Laurel](http://larcmd.org/vec/)-accredited ham radio licensing [exam
session](Licensing_Exams "wikilink") starts at noon [March
22](http://www.meetup.com/hac-dc/events/160901402/) (a week from this
coming Saturday). Review/questions are welcome at tomorrow's (March 12)
HARC meeting.
If you're interested in getting licensed, take your exams here for free!
Other exam dates this year: [June
21](http://www.meetup.com/hac-dc/events/160901522/) and [Nov.
8](http://www.meetup.com/hac-dc/events/160901572/).
We also need more examiners who can help out at these sessions; if
you're already licensed (General or above) and want to help, let me
know.
### Mirage
Audio difficulties.
From chat: Basically, I have a nice HF antenna, and continuing work with
Imagnus. The USRP is cooperating now. Would like Dan and I to have
permission to expediently dispose of remaining junk in the basement.
Three months is far too long!
### Dan
New acrylic colors in stock. Non-rastering cutting is working fine
(laser cutter). Discussion: computer for laser cutter could use more
memory, but it's windoz XP. Options presented, will look into it.
## Old Business
Provide Martin a keyholding honorary (nonpaying) membership. - Approved
by member vote.
## New Business
Approve Article IV of the [Proposed Standing
Rules](Proposed_Standing_Rules#Article_IV:_Meetings "wikilink"). This
codifies our existing policies and empowers the BoD to reschedule member
meetings for the following week in the event that an emergency (such as
weather) forces the cancellation of a scheduled meeting. - proposed
rules reviewed in meeting, minor discussion followed - Approved by
member vote.
Permit Dan Barlow and mirage335 to expediently dispose of junk in the
basement for the next few months. - Approved by member vote.
## Board of Directors Elections
Results of the elections are as follows:
### President
Dan
### Vice-President
Chris
### Treasurer
Katie
### Secretary
DaveMc
### At-Large Directors (two)
Zach and Ben
## New Members
Chris - electronics, Ham, Windows expert - Approved by member vote.
## Adjournment
Adjourned at 2110.
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,212 @@
## Purpose
From the HacDC Bylaws, Article III, Section 2:
At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.
This meeting will also serve as the monthly meeting for the month of
January.
## Time and Location
January 10, 2015
Meeting called to order at __3:13__ by __Ben the Pyrate___.
Members Present: Enrique, Katie, Zack, Kevin, Travis, Shawn, Don, Pat,
Phil Stewart, Hunter, Celeste, Mirage
Others Present: Danish, A-KO
[Quorum](Quorum "wikilink") met? Yes
## Approval of Previous Meeting's Minutes
[Regular Member Meeting 2014 12
09](Regular_Member_Meeting_2014_12_09 "wikilink") Approved
## Recognition
## Director Reports
### President's Report
Not Present
### Vice President's Report
Not Present
### Treasurer's Report
Here is the financial summary spreadsheet for December 2014:
![<File:HacDC_Financials_2014_12.pdf>](HacDC_Financials_2014_12.pdf "File:HacDC_Financials_2014_12.pdf").
We gained Gary Sparkes (Hunter) as a new member, re-gained Ann
Millspaugh as a returning member, and lost Christine Prefontaine and
Phillip Walker. We have 44 dues-paying members in good standing and 6
dues-waived members.
The CFC charity application is proving non-trivial to complete. By
January 23 we must, in addition to the forms completed thus far:
- submit supporting statements and/or documentation of substantial local
presence in the geographical area covered by the local campaign and a
description of the programs, services, benefits, etc. provided by the
organization in calendar year 2014 and how those programs, services,
benefits, etc. affect human health and welfare of the target
population.
- complete and submit a Pro Forma [IRS Form
990](http://www.irs.gov/pub/irs-pdf/f990.pdf). The following sections
must be completed: Page 1, Items A-M; Part I (Summary and Part II,
Signature Block), Lines 1-4 only; Part VII (Compensation section A
only); Part VIII (Statement of Revenues); Part IX (Statement of
Functional Expenses), and; Part XII (Financial Statements and
Reporting).
- prohibit the sale or lease of CFC contributor lists
#### Project Awesome
Here is the Project Awesome spreadsheet for December:
![<File:HacDC_PA_Projects-2014_12.pdf>](HacDC_PA_Projects-2014_12.pdf "File:HacDC_PA_Projects-2014_12.pdf").
We continue to have to dip into savings to pay our rent, so no dividend
this month. :(
### Secretary's Report
No Report.
### Director-at-Large Reports
#### Travis
CNC will be running by end of the month. Prusa is running.
#### Zack
No report.
## [Project Awesome](:Category:Project_Awesome "wikilink") Reports
### Project LASER
No report. Hand-off required?
### Project BYZANTIUM
We're re-factoring the project. Slowly because we all have jobs now.
### Project KITBUILD
Nothing new to report. Still hoping to organize a kit build in concert
with a Learn to Solder event sometime this spring.
### Project SUPPLIES
Ordered replacement extruder for Rostock Max. Also ordered 0.35mm nozzle
for dramatically improved resolution.
When finances become less strained, a Rev.7 PCB heater would be a nice
addition. More even heating across the glass would reduce thermal stress
and greatly improve adhesion.
### Project EXPANSION
Still conservative.
### Project HAMRADIO
Don has installed a 2 element 10m and a 160m dipole antenna. Don fitted
a narrow (CW) filter in the main HF radio to improve narrow signal
performance. We have participated in a number of on-air contests and
contacted more than 100 countries.
Lee N4TCW
## Member Reports
### mirage335
#### Lessons from Kamal Jain of Lowell Makes
Met Kamal Jain from [Lowell Makes](http://lowellmakes.com/),
Massachusetts hackerspace last month. Among other things, we discussed
revenue/sponsor structures. Recently received email detailing these
opportunities. In particular, we should look into
[1](https://doublethedonation.com/blog/2014/08/donation-requests/).
#### Shimmer
HacDC server Shimmer is proving stable. Please contact me by email
(directly or members@hacdc.org) for an account.
#### RFID
NetPLC boards and parts are in, so RFID system will be implemented soon.
## Old Business
## New Business
### Cams
Funding and installation of 'lights-on' cameras, and authorize BoD to
examine other relevant footage (ie. hallway cams) to correlate
incidents. Members' identities would not be recorded in any way not
already documented (ie. hallway cam).
This proposal is not a plan of action (ie. we may not need to buy cams),
just a provision for future improvement.
Approved the installation of camera. Funding and technical details to be
revisited.
### Dues Structure
We may benefit from some sort of multi-level membership structure,
perhaps particularly to ensure fair compensation for renting the office
space.
Needs to be discussed and revisited in a separate meeting.
### Increase Dues by \$10 for one year
Approved.
## Board of Directors Elections
Results of the elections are as follows:
### President
Celeste
### Vice-President
Haxwithaxe
### Treasurer
Travis
### Secretary
Enrique
### At-Large Directors (two)
Phil Don
## New Members
Danish
## Adjournment
Adjourned at ___4:02____.
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,258 @@
## Purpose
From the HacDC Bylaws, Article III, Section 2:
*At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.*
## Time and Location
February 9th, 2016 (postponed from January 23)
Meeting called to order at 7:45pm by Enrique.
Members Present: Ethan W., Matthew H., Julia L., Michael C., Nick S.,
Phil S., Tom I., Bill B., Don J. Sumter T., Kevin C., Pat B., Shawn W.
Others Present: [Quorum](Quorum "wikilink") met? YES
## Approval of Previous Meeting's Minutes
## Recognition
- HacDC Members and Volunteers: This year we had a whole new board. We
applied, appealed and were accepted as a Combined Federal Campaign
charity, renewed our non-profit status with DC, fixed some years-old
problems with our finances paperwork even after we lost our treasurer
mid-year and had a horrible transition. We gained three sponsors this
year: Lulzbot, Accelebrate and Newark element 14. We put up a
microwave tower on the roof, the radio transceiver online and took a
large-format laser cutter from design to operational project. Plus we
significantly cleaned up the basement, moved much of the workshop down
there, updated our inventory, moved the classroom to another suite and
built custom shelving for it. On top of all those accomplishments,
between 3D Thursdays, Amateur Radio and Microcontroller Mondays, HacDC
has held about 100 free, public workshops in 2015. This doesn't
include all the Radio Contests, Field Days and Licensing Exam
Sessions, Capture The Flag, Web Scraping, SEM Workdays, the Intro
Security Workshop, the Raspberry Jam, CNC Mill Class, Lockpicking,
Virtual Reality Night, Table Top Gaming, our table at the Columbia
Heights Farmers Market many Saturdays, and participation at the
Greenbelt Maker Faire, the Silver Spring Maker Faire and nearly two
full days at the National Maker Faire. So for all the hardships and
frustrations we've had this year, thank you to everyone who makes
HacDC awesome.
## Director Reports
### President's Report
### Vice President's Report
Ok, so I have been too hot under the collar about this lately, so I'll
step back from leading the charge. Please give some thought to improving
basement/shop policy.
Also, obtained copies of
![<File:MakersmithsRules.pdf>](MakersmithsRules.pdf "File:MakersmithsRules.pdf"),
![<File:MakersmithsDisclaimer.pdf>](MakersmithsDisclaimer.pdf "File:MakersmithsDisclaimer.pdf"),
and
![<File:MakersmithsSignIn.pdf>](MakersmithsSignIn.pdf "File:MakersmithsSignIn.pdf")
sheet. Please consider these documents as rough examples.
Members, please consider the impact of negativity towards the successful
OpticalTableRobot, as well as the concerns of hard working volunteers
who have sometimes endured more debate or distraction than support.
BoD candidates, please consider the need to form a cohesive body of
leadership for HacDC.
HacDC has a lot of options right now, both in terms of equipment and
goals.
HacDC has the potential to offer advanced tooling and support quality
research. Or, HacDC can focus on less difficult, perhaps less polarzing
aspects of its mission. In the former case, we need to make
basement/shop areas more insulated from politics and recklessness. In
the latter case, it would make sense to liquidate assets that will not
be used, such as the OpticalTableRobot, extra electronics test
equipment, high-voltage transformers, etc.
### Treasurer's Report
- Dwolla ballance: \$5,030.00
- Paypal ballance: \$5,140.66
- BB&T ballance: \$2,105.47
<!-- -->
- January Income from membership dues: \$1500
- January donations: \$190
### Secretary's Report
(Will update before meeting)
- We have 34 members in good standing. Quorum is 9, majority 18 and
two-thirds is 23.
### Director-at-Large Reports
#### Phil
#### Don
## [Project Awesome](:Category:Project_Awesome "wikilink") Reports
### Project HAMRADIO
Putting up a repeater; will coordinate with HacDC next year when Don
moves to Uganda.
### Project SEM
Nothing much to report, bought a penning gauge.
### Project SUPPLIES
Anticipating minor IT services related expenses, including \$20 for VoIP
services.
### Project EXPANSION
Approved an ~\$215 computer purchase to reinstate classroom web
conferencing and presentation functionality.
Some proposals for funding structures are already served by this fund.
Please consider working within the democratic, yet efficient, Project
Awesome framework.
## Audit Committee Report
The Committee will update the members on progress thus far and discuss
the plan forward.
## Member Reports
- Enrique. Hosted two Introduction to Linux nights. Attendance was very
sparse though; maybe 7 people total. Also Kerbal Space Program. I've
asked Brian about improving signage to direct people to HacDC from the
St. Stephen's main entrance because I found one attendee pacing back
and forth there looking for the address. Let's open the Newark stuff
and take some photos! Also Julia, myself, and Dan and a few volunteers
fixed the TV! I made a video. If people like it maybe it'll be online.
## Old Business
### Membership Dues Waiver for EdTechDMV / Representative
- Old problem, new example: An outside organization wants to use HacDC
facilities during business hours. The organization is EdTechDMV, an
educational non-profit organization, wants to offer IT workshops and
computer training classes in HacDC's classroom. The two examples are
an upcoming workshop the evening of February 17th, and computer
training classes during 9-5 hours they want to offer this summer. Are
these events something HacDC wants to facilitate/host? What are the
pros and cons? If we do, how would we give EdTechDMV access to the
classroom when members are not available?
### Bylaws Amendment
- Proposed Amendment to Bylaws Article II, Section 6: Add "*For
substantial cause, the Board of Directors may indefinitely suspend a
member's access to the space by a 2/3 majority vote of the board. By
voting at an official meeting with quorum, members may reinstate or
suspend, access or membership, for any member whose access has been
suspended by the board. The board may suspend the access of no more
than two members per month via this procedure. Access to the space may
not be re-suspended by the Board of Directors for the same actions or
incidents. Explanation of such suspensions must be submitted
electronically to all members."* (This proposed bylaws amendment must
be signed by 3/4ths of all members before it is adopted)
### Restrict Workshop and Tool Access
- Approve a *non-binding resolution* that access to the workshop in the
basement should be restricted to HacDC members who have undergone a
safety briefing and use of certain tools (CNC Mill, Lathe, PCB Etch
Supplies, OTR) restricted to members authorized by an approved
custodian of each tool (to be determined).
Proposal text was send via email to members was was approved by large
majority: "I propose that we change the access control policy to the
basement, establishing a "basement custodian", who has the authority to
control who has access to the basement, and the responsibility to
restrict access to those who are able to use the equipment and space
without being a disturbance to the use of the machinery and space by
others. Regarding my second proposal, I would like the initial basement
custodian to be selected by the board, with replacements selected by the
standing custodian. The board should be empowered to replace the
custodian only through a membership vote at a membership meeting with
quorum." This proposal was approved by a large majority vote, with the
understanding that the custodian is subject to replacement at the next
meeting if members are not satisfied with the rules and procedures
required to certify members for basement access before then. The
custodian was renamed Dungeon Master. The board voted to appoint Julia
as the first Dungeon Master.
### Reimbursements
- Approve reimbursement of \$95.14 to Enrique for purchase of an 8' step
ladder for basement use. (replaced 8' wooden ladder) - This was
Approved.
- Approve \$2,000 for fully recomissioning the OpticalTableRobot. - This
was Tabled.
- Approve \$500 for an off-the-shelf throw-away eBay laser cutter. -
This was Tabled.
## New Business
- Colloboratively discuss, consider, and adopt policy reforms to protect
volunteer contributions to the basement/shop areas.
- Invited speakers. The Amateur Radio club finds and hosts invited
speakers monthly and I think that's something HacDC could do even more
often. What topics are we interested in hearing about? Off the top of
my head: quantum computing, and something a bit more social like
epistemology online.
- Review our year long experiment of having \$60 dues, and possibly vote
on whether to continue requiring \$60. - This was temporarily approved
for the month.
## Board of Directors Elections
Results of the elections are as follows:
### President
Julia Longtin
### Vice-President
Ethan Waldo
### Treasurer
Enrique Cobas
### Secretary
Tom Iddings
### At-Large Directors (two)
Michael Chelen
Matthew Hines (mirage335)
## New Members
John P.
## Adjournment
Adjourned at 10:20 by Enrique.
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,176 @@
## Purpose
From the HacDC Bylaws, Article III, Section 2:
*At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.*
## Time and Location
January 28th, 2017 at 4pm
Meeting called to order at
`   1630`
Members Present:
`   Ben Enrique Julia Ankeet Andrew Matt Ken Tom Kevin`
Others Present:
`   Others`
[Quorum](Quorum "wikilink") met?
`   yes`
## Approval of Previous Meeting's Minutes
## Recognition
In 2016 HacDC held nearly 100 free workshops on microcontroller
programming, 3D design and 3D printing. We also started workshops
teaching people about PC hardware and software with several PC Rebuilds
events, a couple of Linux Install nights and about a dozen Introduction
to Linux workshops. The Amateur Radio Club also held dozens of meetings
including many guest speakers, and participated in national and
international contests including field excursions to the White House,
National Parks, Lincoln's Cottage and more. HacDC itself had three long
days of off-site demos at the USA Science and Engineering Festival and
RobotFest. HARC also participated in the Silver Spring Maker Faire,
enabled remote online access to the W3HAC station and set up a repeater.
We also had a few one-off events like the Apple v FBI discussion, a
Kerbal Space Program gathering, a couple of Hackathons run by
hackster.io, and we fixed the LCD TV! Last but not least, we assembled,
launched, tracked and recovered Spaceblimp 6 and got some beautiful
images and video from the stratosphere (104,000ft!).
Through our partnership with High School Tech Services HacDC has hosted
classes on project management, programming fundamentals, object oriented
programming, HTML5 and more.
Besides the workshops, events and projects, we also continued to
reorganize ourselves in our new space after our late 2015 move, we
renewed a \$500 sponsorship from Accelebrate and obtained a new
sponsorship from Newark element 14, we got over \$550 in donations from
federal employees via the CFC process. We restored our reserves to 6
months of expenses, we cleaned up the Standing Rules and some other
parts of the Wiki. Several of our members attended the Nation of Makers
meeting and continue to be involved in the new national organization.
HARC: 132 exams were given in 2016. 116 new licenses or upgrades. We
participated in 16 radio contests and 22 National Park on the Air
events, including the National Monument and Presidents Park(White
House). We purchased and installed a 440mhz repeater.
## Director Reports
### President's Report
`   nice LED lights`
### Vice President's Report
`   not present`
### Treasurer's Report
- See the January meeting minutes for numbers. We have about 7-8 months
of full operating expenses in reserve but we're close to breaking even
month-to-month, especially with the coming 5% rent increase.
- We are too reliant on membership dues (95%+ of our revenue) and the
dues are pretty high already. We should look at getting more donations
or applying for grants.
- To raise more than \$1,500/yr in donations, we need a solicitation
permit, which we should and will apply for shortly.
- Apparently HacDC has never filed tax returns with DC Govt since it was
founded. Once we start (this year), even though we've been tax-exempt,
we may get fined for not filing returns as expected. We should clear
that up before looking at grants.
### Secretary's Report
`   I was Secretary and a member of the BOD this past year.`
### Director-at-Large Reports
#### Matt
Has been a good year. No drama. More volunteers getting involved. Maybe
next year we can grow and do really awesome things.
#### Mike
## [Project Awesome](:Category:Project_Awesome "wikilink") Reports
### Project HAMRADIO
### Project SEM
### Project SUPPLIES
### Project EXPANSION
## Audit Committee Report
Nobody bothered to form a committee so there's no report. All financial
statements including receipts for all purchases are at the space, in the
BOD locker, treasurer's folder. The Dwolla statements include member
names, the rest don't. -Enrique
## Member Reports
## Old Business
`   The bylaws amendment has enough signatures to consider.`
`   The bylaws amendment below passed by unanimous acclamation.`
### Bylaws Amendments
- Proposed Amendment to Bylaws Article II, Section 6: Add "*For
substantial cause, the Board of Directors may indefinitely suspend a
member's access to the space by a 2/3 majority vote of the board. By
voting at an official meeting with quorum, members may reinstate or
suspend, access or membership, for any member whose access has been
suspended by the board. The board may suspend the access of no more
than two members per month via this procedure. Access to the space may
not be re-suspended by the Board of Directors for the same actions or
incidents. Explanation of such suspensions must be submitted
electronically to all members."* (This proposed bylaws amendment must
be signed by 3/4ths of all members before it is adopted)
## New Business
- Group Photo. The group photo we have is ANCIENT. Literally 90% of
those people are gone. New photo is years overdue.
## Board of Directors Elections
Results of the elections are as follows:
`   President: ''Julia stood for election unopposed.`
`   Vice President:  ''Andrew and Tom stand for VP.`
`   ''Tom won with 7 votes to 3`
`    Treasurer: ''Enrique stood for election unopposed.`
`    Secretary: ''Ben stood for election unopposed.`
`   At large seats: ''Andrew, Mirage, and Kevin stand for at large seats.`
`   Mirage and Kevin won the ranked choice vote.`
## New Members
## Adjournment
Adjourned at
`   1700`
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,177 @@
## Purpose
From the HacDC Bylaws, Article III, Section 2:
*At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.*
## Time and Location
`   Date: 2018.13.10 (March 10, 2018)`
`   Location: HacDC`
Meeting called to order at
`   Time: 15:37`
## Participants
- Members Present:
- Kevin
- Julia
- Matt Zand
- JP
- Karen
- mirage
- Nic
- Tayeb
- Ken
- Tom
- Enrique (virtually)
<!-- -->
- Others Present:
- Aden
[Quorum](Quorum "wikilink") met?
`   Yes`
## Recognition
`   Enrique was Treasurer, thank you. Julia was President. Mirage is also an outgoing 3-year veteran of BoD.`
`   Thanks to all 3 for your service. Tom did good work as VP.`
## Director Reports
### President's Report
`   President is present but incommunicado.`
### Vice President's Report
`   I lost our IT admin contract. Been working on various infrastructure projects like the printer, classroom TV,`
`   basement TV, videoconferencing, etc. Would like to continue my work as VP and help grow and improve our`
`   organization over the next year.`
### Treasurer's Report
`   Did a bunch of legwork and treasurer stuff, helped us be square with the government.`
### Secretary's Report
`   Nic is happy to be a member of HacDC over the past year, has found HacDC to be a valuable community to be a`
`   member of. Has been Secretary for a few months, but has been away on international travel.`
### Director-at-Large Reports
#### Matt
`   Project Awesome fund allocations are still necessary but have been under-utilized the past year. USASEF is a big event,`
`   we kind of dropped the ball this year. The next BoD should bear this in mind for future years; and try to stay in touch`
`   with previous BoD members so institutional knowledge is kept.`
`   Treasurer is an important job, hope the next one takes their responsibility seriously. Don't be too hard on folks, but it's`
`   important the Treasurer does reimburse people promptly.`
`   HacDC's BoD needs to take responsibility for members causing problems, and members need to take responsibility for their guests.`
`   Problems need to be addressed promptly.`
#### Kevin
For the most part, my year has consisted of trying to network HacDC with
other groups and represent HacDC at events. To that end, I:
- offered 3D printing services, along with Julia, at the two-day
Smithsonian Institute's [Earth Optimism
Summit](https://earthoptimism.si.edu/2017/) ["Make for the
Planet"](https://earthoptimism.si.edu/calendar/2017/events/make-planet-pitches/)
hack-a-thon
- represented HacDC for the [Community Makerspace
Day](https://www.eventbrite.com/e/community-makerspace-day-tickets-39168856103#)
event at Mary McLeod Bethune Day Academy PCS
- supported Ken's [Neighborhood Opportunity
Centers](DC_Community_Hackerspaces "wikilink") (NOCs) proposals by:
- participating in two meetings with DC government officials and
Nation of Makers executive director
- arranged a meeting between HacDC and the New America Foundation's
Open Source Institute
- established a wiki page for collecting, coalating and coordinating
potential NOC resources
In lesser news, I've been:
- recreating a passport stamp
- working on a brief [OpenSCAD rotate_extrude tutorial
video](https://drive.google.com/file/d/1CINyLSA3x984h7JMWaxRRfdgh0C0v81g/view)
- futzing around with the teleconferencing system, and continue
attempting to document progress on the wiki (See [La
Fonera](La_Fonera "wikilink") and [OBi110 VoIP
setup](OBi110_VoIP_setup "wikilink").)
- doing this, that and the other thing
- occasionally restocking the fridge
- kept the tunes going a la [Radio
Paradise](https://www.radioparadise.com/)
## [Project Awesome](:Category:Project_Awesome "wikilink") Reports
### Project SPACEBLIMP
We postponed our March 3-4 launch due to winds out in Strasburg, despite
everything being ready to go otherwise. Sad! We're currently deciding on
a new launch date but the weekends of March 24 and March 31 are likely.
We've also entered the Global Space Balloon Challenge under the team
name Hackers SLS (Space Lunch System) and plan to launch another
Spaceblimp for that competition in later April (not to far away).
Enrique
## Audit Committee Report
Nobody bothered to form a committee so there's no report.
## Member Reports
Enrique - This year I hosted events on Lockpicking (TOOOL came),
Software Defined Radio, Cryptocurrencies and the Metasploit Workshop put
on by Beltway Hackers. Also lots of Spaceblimp meetings, especially
lately. Spaceblimp 7 was postponed from the Eclipse date to early 2018
and just postponed again due to weather but we're ready to go very soon.
### Bylaws Amendments
"Bylaws amendment proposal: Change the threshold for future bylaws
amendments from "more than three quarters (3/4ths) of voting members,"
to "more than three quarters (3/4ths) of member votes cast 90 days from
the proposal approval date," and from "Notice of such petition must be
submitted electronically to all members," to "Notice of such a petition
must be submitted to all members electronically and, where electronic
means produce no response, all other available means." (petition
approved April 2017)
<http://wiki.hacdc.org/index.php/Regular_Member_Meeting_2017_04_11>)
## New Business
## Board of Directors Elections
Results of the elections are as follows:
`   President:  ''Karen stood for election for President unopposed.`
`   Vice President:  ''Tom stood for election for VP unopposed.`
`   Treasurer:  ''Tayeb stood for election unopposed.`
`   Secretary:  ''Nic stood for election unopposed.`
`   At large seats:  ''Ken, Kevin, and stood for 2 at large seats.`
## Adjournment
`   Adjourned at 1627`
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

View File

@@ -0,0 +1,208 @@
## Purpose
From the HacDC Bylaws, Article III, Section 2:
*At the annual meeting, the voting members shall elect the Board of
Directors, review and vote on the standing rules and policies of the
corporation, receive reports on the activities of the corporation,
approve the budget and determine the direction of corporation in the
coming year.*
## Time and Location
`   Date: Tuesday, March 12`
`   Location: HacDC`
Meeting called to order at
`   Time: 7:00pm`
`   By: Karen`
## Participants
- Members Present:
- Karen
- Kevin
- Ken
- Bobby
- John
<!-- -->
- Members remoting:
- Tayeb
- Enrique
- Mirage (Matt)
<!-- -->
- Others Present:
- ITechGeek
[Quorum](Quorum "wikilink") met?
`   Unknown`
## Approval of Previous Meeting's Minutes
## Recognition
## Director Reports
### President's Report
Fundraising Activities - scheduled and proposed
- HacDC is going to have an event at Dupont Underground Tuesday, April
23 - proposal is for demos, public domain films, and musical
entertainment. HacDC will approach Words/Beats/Life to see if they
would be interested in collaborating
- Board met with the owner of Exiles on U Street about the possibilities
for fundraising - they are pretty flexible so there are many options
to discuss
- Sign in sheet - we need to show our service to the community with
something more tangible - there is a sign in sheet - all members and
visitors should sign in.
Testimony at the DC Council DMPED oversight hearing
- Karen Shunk testified
- Was able to meet contacts at DMPED, Focus on the Story, and District
Makers Collective
Next Movie night:
- Friday, March 16
- Gravity (2013) directed by Alfonso Cuaron, starring Sandra Bullock and
George Clooney
### Vice President's Report
### Treasurer's Report
The cash flow spreadsheets should be visible to all present, and there
are a couple of things I would like to point out. We continue to have a
reserve of approximately \$10,000, though this is decreasing because we
are spending more money on rent per month than we are bringing in
through membership dues. The costs for January were unusually high so
look at those numbers with a grain of salt (we were charged for two
months rent during that period due to the timing of check cashing, and
we had additional one-time payments). The more important number for the
future is the \$1579/month rent that will continue to cost us in the
longer term.
We currently have 21 members in good standing. Due to irregular payment
schedules for some members this is not clear from the cash flow
spreadsheet but the majority of our members pay through Paypal. Dwolla
has recently closed down the service we were using for a handful of our
member payments so we are no longer able to collect dues through their
platform. We will need to modify the HacDC website to remove that
offering and possibly look into other alternatives that have lower fees
like Dwolla did (Paypal currently costs us about ~\$40/month in fees).
We have not seen any large effects due to fundraising, though we have
had a few individual donations that have helped us these last few
months. However both donations were from people within HacDC so I don't
think we are reaching a wider audience yet for our fundraising.
This is my last month as treasurer, I am resigning and not running again
for next year since I have not been living in the DC area for a few
months now. To whoever ends up in this board seat, I will reach out to
discuss the best way to hand off the credentials and any other pressing
financial matters for HacDC (e.g. filing with the IRS to maintain our
non-profit status).
### Secretary's Report
### Director-at-Large Reports
#### Ken
#### Kevin
## [Project Awesome](:Category:Project_Awesome "wikilink") Reports
### Project HAMRADIO
### Project SEM
### Project SUPPLIES
### Project EXPANSION
## Audit Committee Report
Nobody bothered to form a committee so there's no report. All financial
statements including receipts for all purchases are at the space, in the
BOD locker, treasurer's folder. The Dwolla statements include member
names, the rest don't. -Enrique
## Member Reports
## Old Business
Rules of the Road - Code of Conduct Review
- Please review the draft code of conduct at
<https://wiki.hacdc.org/index.php?title=Code_of_Conduct#DRAFT:_Code_of_Conduct_for_HacDC>
for discussion at the next member meeting in April
- This has been updated with input from other members and review of
codes of conduct of other hackerspaces
More space cleanup
- Need to finish cleaning out back section of basemen
- Mike Ritonia has agreed to install new lock on basement door
- We can use the dumpsters out front (within reason)
- Ideas for basement - besides storage, could we organize a workshop?
Maybe metal or woodworking?
Proposal for an intermediate membership type:
- We have a discounted "starving hacker/student" and a keyed, full
membership; unlike other spaces, we do not have an intermediate
membership
- Typically, the intermediate membership level gives members limited
storage, access to 'members wifi' (we would have to set that up) and a
few other perks (could work unsupervised in the basement, for example)
- Do we see value in this dues level, and what are the membership
services that come with it?
Discussion: need to develop ROI of membership levels, possibly create
new benefits. Important to know how many members at what level right
now. It would be good to have an effort at the April 23rd event to sign
up members or take donations.
### Bylaws Amendments
## New Business
Business license expires in June, James will renew it.
## Board of Directors Elections
Results of the elections are as follows:
`   President: ''Karen stood for election unopposed.`
`   Vice President:  ''John stood for election unopposed.`
`   Treasurer: ''James stood for election unopposed.`
`   Secretary: ''Dave stood for election unopposed.`
`   At large seats: ''Ken and Kevin stand for at large seats unopposed.`
Karen moved, Kevin seconded a motion to elect the slate of board
candidates in a single vote. Motion to elect the slate passed.
## New Members
## Adjournment
Adjourned at
`   Time: Change me`
[Category:Meeting Minutes](Category:Meeting_Minutes "wikilink")

Some files were not shown because too many files have changed in this diff Show More