Merge branch 'master' of github.com:c3d2/pentabug
Conflicts: firmware/Makefile
This commit is contained in:
commit
abeced81a2
13
README.md
13
README.md
|
@ -3,17 +3,20 @@ pentabug
|
||||||
|
|
||||||
The pentabug is a small microcontroller soldering project. It's especially suited for young hackers and beginners of all ages. Assembly requires no prior soldering skills and can be accomplished - with a little help for the tricky parts - by children old enough to savely hold a soldering iron (thats about 7 years and up).
|
The pentabug is a small microcontroller soldering project. It's especially suited for young hackers and beginners of all ages. Assembly requires no prior soldering skills and can be accomplished - with a little help for the tricky parts - by children old enough to savely hold a soldering iron (thats about 7 years and up).
|
||||||
|
|
||||||
At the event [Datenspuren 2012](http://datenspuren.de/2012/ "Datenspuren 2012") nearly 80 kits from our first production run of 100 PCBs have been successfully assembled with just one bug in need of special treatment for a controller mounted the wrong way. Have a look at our [slides in german](/c3d2/pentabug/raw/master/doc/201210_slides_datenspuren.pdf "slides form the Datenspuren 2012 talk") from the accompanying [presentation](http://www.datenspuren.de/2012/fahrplan/events/5074.de.html "pentabug talk announcement"). A video of this session will be available soon.
|
At various events, e.g. [Datenspuren 2012 and 2013](http://datenspuren.de "Datenspuren 2012 and 2013"), Chaos Communication Congress 2012+2013, and many more, several hundred kits have been successfully assembled with just a handfull of bugs needing 'special treatment' for e.g. a controller mounted the wrong way. Have a look at our [slides in german](/c3d2/pentabug/raw/master/doc/201210_slides_datenspuren.pdf "slides form the Datenspuren 2012 talk") from the accompanying [presentation](http://www.datenspuren.de/2012/fahrplan/events/5074.de.html "pentabug talk announcement") or watch [this video](http://www.youtube.com/watch?v=HTBhXqNR6LY "Dresdner Piratencast Folge 14 - Datenspuren") of Frank and his sons beeing interviewed at our workshop table.
|
||||||
Meanwhile you can watch [this video](http://www.youtube.com/watch?v=HTBhXqNR6LY "Dresdner Piratencast Folge 14 - Datenspuren") of Frank and his sons beeing interviewed at our workshop table.
|
|
||||||
|
|
||||||
|
A complete walktrough of the assembly process is given in ["Pentabug - The Movie"](http://www.c3d2.de/news/video-pentabug-bauen.html "Pentabug - The Movie"), courtesy of [C3D2 - Chaos Computer Club Dresden](http://c3d2.de "C3D2 - Chaos Computer Club Dresden"). It would be amazing if Scott Manley could do an english version ;-).
|
||||||
|
|
||||||
|
![Assembled V2 PCB with extension boards](https://github.com/c3d2/pentabug/raw/master/img/assembled_v2_728x483.jpg)
|
||||||
|
Img. 1: A completely assembled V2 PCB with extension boards.
|
||||||
|
|
||||||
![Slightly Advanced Prototype Hardware](https://github.com/c3d2/pentabug/raw/master/img/prototype.jpg)
|
![Slightly Advanced Prototype Hardware](https://github.com/c3d2/pentabug/raw/master/img/prototype.jpg)
|
||||||
Img. 1: A slightly advanced prototype version of the bug with single layer pcb.
|
Img. 2: A slightly advanced (but early) prototype version of the bug with a single layer pcb.
|
||||||
|
|
||||||
![Top Layer of Version 1.0 Board](https://github.com/c3d2/pentabug/raw/master/img/board_top.png)
|
![Top Layer of Version 1.0 Board](https://github.com/c3d2/pentabug/raw/master/img/board_top.png)
|
||||||
Img. 2: The top layer view of the Version 1.0 production board (two layer pcb).
|
Img. 3: The top layer view of the Version 1.0 production board (two layer pcb).
|
||||||
|
|
||||||
![Version 1.0 Schematics (Thumbnail)](https://github.com/c3d2/pentabug/raw/master/img/schematics_v1_0_thumb.png)
|
![Version 1.0 Schematics (Thumbnail)](https://github.com/c3d2/pentabug/raw/master/img/schematics_v1_0_thumb.png)
|
||||||
Img. 3: Version 1.0 schematics ([high resolution image](https://github.com/c3d2/pentabug/raw/master/img/schematics_v1_0.png "high resolution image of schematics")).
|
Img. 4: Version 1.0 schematics ([high resolution image](https://github.com/c3d2/pentabug/raw/master/img/schematics_v1_0.png "high resolution image of schematics")).
|
||||||
|
|
||||||
[Bill of Materials for Version 1.0](https://github.com/c3d2/pentabug/blob/master/bom.md "bill of materials")
|
[Bill of Materials for Version 1.0](https://github.com/c3d2/pentabug/blob/master/bom.md "bill of materials")
|
||||||
|
|
BIN
doc/Anleitungsflyer_V2.4up.ink.pdf
Normal file
BIN
doc/Anleitungsflyer_V2.4up.ink.pdf
Normal file
Binary file not shown.
BIN
doc/Anleitungsflyer_V2.4up.ink.svgz
Normal file
BIN
doc/Anleitungsflyer_V2.4up.ink.svgz
Normal file
Binary file not shown.
Binary file not shown.
BIN
doc/buglogo.eps
Normal file
BIN
doc/buglogo.eps
Normal file
Binary file not shown.
163
doc/buglogo.svg
Normal file
163
doc/buglogo.svg
Normal file
|
@ -0,0 +1,163 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="210mm"
|
||||||
|
height="297mm"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="buglogo.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.35"
|
||||||
|
inkscape:cx="387.06203"
|
||||||
|
inkscape:cy="281.09433"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:window-width="1535"
|
||||||
|
inkscape:window-height="876"
|
||||||
|
inkscape:window-x="65"
|
||||||
|
inkscape:window-y="24"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<g
|
||||||
|
id="g3020"
|
||||||
|
transform="matrix(3.3929814,0,0,3.3929814,-770.00486,-840.10178)">
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||||
|
d="m 337.74908,386.92247 c 21.49942,9.34128 41.38432,18.51011 54.13327,24.00919"
|
||||||
|
id="path8514"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||||
|
d="m 288.65143,393.46268 -44.30289,-7.9311 2.52297,21.74267"
|
||||||
|
id="path8516"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||||
|
d="m 313.67114,423.39271 -16.60876,20.06307 19.91901,12.67566"
|
||||||
|
id="path8518"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||||
|
d="m 342.06976,432.81232 -3.42558,25.23208 23.8601,2.37043"
|
||||||
|
id="path8520"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||||
|
d="m 369.82356,429.58275 8.39633,24.60907 22.47077,-6.8099"
|
||||||
|
id="path8522"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||||
|
d="m 353.2315,347.70342 5.2902,-23.20428 22.98561,6.61651"
|
||||||
|
id="path8524"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||||
|
d="m 378.36363,363.57694 17.93197,-16.96585 17.30399,15.32416"
|
||||||
|
id="path8526"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||||
|
d="m 393.71191,384.85867 25.07043,-8.33534 9.07709,19.65288"
|
||||||
|
id="path8528"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 295.39879,408.7854 c 12.15052,-24.0068 41.57422,-22.22061 41.57422,-22.22061 0,0 -20.06592,-19.06456 -7.68827,-43.52012"
|
||||||
|
id="path8530"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 295.17167,409.23413 c 58.95859,45.89928 98.97912,2.96487 98.97912,2.96487 0,0 9.05269,-55.82691 -65.11629,-69.26532"
|
||||||
|
id="path8532"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="M 310.92751,349.05134 274.13319,321.88058 291.133,308.26632"
|
||||||
|
id="path8534"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 319.32024,411.15324 41.02968,18.19749"
|
||||||
|
id="path8536"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 337.43789,403.80407 41.02956,18.19744"
|
||||||
|
id="path8538"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 351.0185,375.76113 41.02968,18.19748"
|
||||||
|
id="path8540"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 344.14114,357.87561 41.02968,18.19748"
|
||||||
|
id="path8542"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 294.8742,409.0692 -6.18837,-15.18835 22.84436,-45.1355 17.0054,-5.77417"
|
||||||
|
id="path8544"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 285.98134,391.19913 -8.79499,-30.87786 30.57241,-11.92044"
|
||||||
|
id="path8546"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ccc" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000004;stroke-width:5.13603163;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="m 293.17299,368.96574 -2.10152,-5.69145 -5.62583,2.55564 -7.63199,-5.03616"
|
||||||
|
id="path8548"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.9 KiB |
39
doc/de/teil_0:prolog.md
Normal file
39
doc/de/teil_0:prolog.md
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# RTFM: Pentabug
|
||||||
|
|
||||||
|
## Vorwort
|
||||||
|
|
||||||
|
Lieber Junghacker-Padawan,
|
||||||
|
|
||||||
|
dies ist die Dokumentation zum [Pentabug-Projekt](https://github.com/c3d2/pentabug).
|
||||||
|
|
||||||
|
Wenn Du sie liest und verinnerlichst, wirst Du Deinen Pentabug von innen bis
|
||||||
|
aussen kennen. Du wirst wissen, wie er entstanden ist, wie er aufgebaut ist,
|
||||||
|
welche Fähigkeiten er besitzt und wie Du ihn erweitern kannst.
|
||||||
|
|
||||||
|
Doch viel mehr wirst Du selbst gelernt haben, ein Projekt wie den Pentabug zu
|
||||||
|
realisieren. Du wirst zum Junghacker-Jedi.
|
||||||
|
|
||||||
|
## Struktur dieser Dokumentation
|
||||||
|
|
||||||
|
Diese Dokumentation ist in verschiedene Teile aufgebaut.
|
||||||
|
Wir fangen ganz von vorne an und gehen bis ganz zum Ende.
|
||||||
|
Danach gehen wir noch weiter nach vorne und enden noch weiter hinten.
|
||||||
|
|
||||||
|
So kommst Du ganz ohne Basiswissen schnell zu ergebnissen und brauchst nur
|
||||||
|
jeweils so viel lesen, wie Dich interessiert.
|
||||||
|
|
||||||
|
Teil 1: [Episode 2 - Das Gelöt von Pentabug](teil_1:episode_2.md)
|
||||||
|
Teil 2: Episode 3 - Mögen die Bits mit Dir sein
|
||||||
|
Teil 3: Episode 1 - Layout und Ätzen
|
||||||
|
|
||||||
|
|
||||||
|
# Teil 1: [Episode 2 - Das Gelöt von Pentabug](teil_1:episode_2.md)
|
||||||
|
|
||||||
|
Inhalt soll werden:
|
||||||
|
- Funktionen des Pentabug
|
||||||
|
- Wie findet man den richtigen Lötkolben
|
||||||
|
- Wie lötet man richtig.
|
||||||
|
- Was machtjedes Bauteil
|
||||||
|
|
||||||
|
# Teil 2: Episode 3 - Mögen die Bits mit Dir sein TODO
|
||||||
|
# Teil 3: Episode 1 - Layout und Ätzen TODO
|
131
doc/de/teil_1:episode_2.md
Normal file
131
doc/de/teil_1:episode_2.md
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
# Das Gelöt von Pentabug
|
||||||
|
|
||||||
|
In dieser Episode erfährst Du, junger Padawan, was Dein Pentabug so kann, wie
|
||||||
|
Du ihn zusammenbaust und dann zum Leben erweckst.
|
||||||
|
|
||||||
|
## Was kann son Pentabug eigentlich?
|
||||||
|
|
||||||
|
Der Pentabug ist ein kleiner Roboter, den Du selbst zusammebauen und
|
||||||
|
programmieren kannst. Er ist recht einfach gehalten und gerade für Einsteiger
|
||||||
|
im Bereich der Elektronik besonders gut geeignet.
|
||||||
|
|
||||||
|
Der Pentabug kann leuchten, piepen, sich bewegen, auf Geräusche reagieren,
|
||||||
|
Infrarot senden und empfangen. Das kann man zum einen dafür nutzen, dass sich
|
||||||
|
verschiedene Pentabugs unterhalten, zum anderen aber auch um Geräte
|
||||||
|
fernzusteuern. Zudem ist er erweiterbar, d.h. man kann recht einfach weitere
|
||||||
|
kleine Schaltungen bauen, die seine Funktionen erweitern.
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
Wenn Du einen Pentabug bauen möchtest benötigst Du neben einem Pentabug-Bausatz folgende weitere Dinge:
|
||||||
|
|
||||||
|
1. 1 Lötkolben
|
||||||
|
2. 1 Schwämmchen, feucht. Ein feuchtes Tuch tut es auch.
|
||||||
|
3. Lötzinn.
|
||||||
|
4. 1 hitzebeständige Arbeitsunterlage (z.B. kleines Holzbrett oder eine Pappe).
|
||||||
|
5. 1 Heißklebepistole mit Kleber
|
||||||
|
6. 1 Seitenschneider
|
||||||
|
7. 1 Spitzzange (nicht unbedingt zwingend)
|
||||||
|
|
||||||
|
Für den Fall, dass Du mal fehler machst, benötigst Du weitere Dinge:
|
||||||
|
|
||||||
|
8. 1 Multimeter
|
||||||
|
9. 1 Lötlutsche und / oder Entlötlitze
|
||||||
|
|
||||||
|
### Auswahl des Lötkolbens und des Lötzinns
|
||||||
|
|
||||||
|
Der Lötkolben ist ein Werkzeug mit dem man die verschiedenen elektornischen
|
||||||
|
Bauelemente mit einander verbindet. Er wird mit Strom betrieben und wird sehr
|
||||||
|
heiß. Diese Hitze nutzt man um Lötzinn zum schmelzen zu bringen, welches dann
|
||||||
|
sozusagen die elektrischen Bauelemente elektrisch leitend mit einander
|
||||||
|
verklebt.
|
||||||
|
|
||||||
|
Wenn Du noch keinen Lötkolben zur Verfügung hast, also jetzt loslaufen möchtest
|
||||||
|
um Dir einen zu besorgen, achte darauf, dass er mindestens 25 Watt hat. Wenn er
|
||||||
|
mehr Watt hat, macht das Löten allerdings mehr Spass, da man pro Lötstelle
|
||||||
|
nicht so lange auf das Heißwerden warten muss.
|
||||||
|
|
||||||
|
Die Spitze sollte nicht zu dick sein; einen Feinlötkolben benötigst Du für
|
||||||
|
dieses Projekt allerdings auch nicht.
|
||||||
|
|
||||||
|
Überlege, ob Du gleich eine kleine Lötstation kaufst. Die hat meistens gleich
|
||||||
|
einen Halter für den Kolben, ein kleines Schwämmchen dabei und man kann die
|
||||||
|
Leistung des Lötkolbens regeln.
|
||||||
|
|
||||||
|
Ein Beispiel für einen ausreichendes Lötgeröt findet Ihr
|
||||||
|
[hier](http://www.amazon.de/dp/B000UNM0QY/). [Disclaimer] Da ist auch schon gleich eine
|
||||||
|
Lötlutsche dabei.
|
||||||
|
|
||||||
|
Wenn Ihr nicht gleich einen Lötkolben kaufen wollt, könnt Ihr ihn bestimmt in
|
||||||
|
einem [Hackerspace](http://hackerspaces.org) in Eurer Nähe ausleihen, um den
|
||||||
|
PBG zu bauen.
|
||||||
|
|
||||||
|
TODO: kann wer was zum Zinn schreiben?
|
||||||
|
|
||||||
|
TODO: Da man bei den ganzen Sachen hier immer wieder was besorgen muss sollten
|
||||||
|
wir auch Tips zum besorgen der Werkzeuge und Elemente geben.
|
||||||
|
|
||||||
|
### Auswahl des Multimeters
|
||||||
|
|
||||||
|
Das Multimeter ist ein Werkzeug mit dem man verschiedene (deswegen "multi")
|
||||||
|
elektrische Messgrößen erfassen (d.h. messen, deswegen
|
||||||
|
["meter"](http://de.wikipedia.org/wiki/Meter)) kann.
|
||||||
|
|
||||||
|
Für den Pentabug reicht ein ganz billiges aus dem Baumarkt oder halt auch von
|
||||||
|
[Amazon](http://www.amazon.de/dp/B003IP80SS/).
|
||||||
|
|
||||||
|
## Die Bauteile erklärt
|
||||||
|
|
||||||
|
Damit Ihr wisst, was Ihr verbaut, folgt hier noch eine kurze Erklärung der einzelnen Bauteile.
|
||||||
|
Die Erklärung folgt ist nicht unbedingt die Reihenfolge in der Ihr die Bauteile auch später verbaut.
|
||||||
|
|
||||||
|
### Die Platine
|
||||||
|
|
||||||
|
TODO: Insert hier Bild von PLatine
|
||||||
|
|
||||||
|
Die Platine ist das Bauteil, auf der alle anderen Bauteile befestigt werden. Sie hat für jedes benötigte Bauteil vorgefertigte Löcher / Bohrungen, sowie Beschriftungen. Zusätzlich liegen auf ihr unter dem Lack Kupferleitungen zwischen einigen Löchern. Diese Kupferleitungen sind wie Kabel und dienen dazu, später den Strom zu transportieren.
|
||||||
|
|
||||||
|
### Die Batterie
|
||||||
|
|
||||||
|
TODO: Insert hier Bild von Batterie
|
||||||
|
|
||||||
|
Eine Batterie kennt Ihr.
|
||||||
|
|
||||||
|
Sie liefert die benötigte Energie um den Pentabug später zu betreiben. Neben der richtigen Form und Größe gibt es noch weitere wichtige Eigenschaften einer Batterie, die ein Jedi kennen muss:
|
||||||
|
|
||||||
|
Eine Batterie hat immer zwei Pole ("+" und "-"). Im inneren dieser Batterie befinden sich an einem Polende viele Elektronen, die gerne an das andere Polende kommen möchten. Da es im inneren der Batterie aber keinen Durchgang gibt, können die Elektronen nur außen herum, wenn man ihnen eine Möglichkeit dazu gibt. Den Weg, den der Pentabug den Elektronen der Batterie bietet, ist der eigentliche Schaltkreis. Die Elektronen werden also von dem einen Pol der Batterie durch die Schaltung des Pentabug, durch alle Bauteile hindurch, zum anderen Pol der Batterie geleitet. Ein bestimmtes, weiter unten besprochenes, Bauteil verhindert, dass die Elektronen immer durch alle Bauteile fließen, sondern nur dann, wenn der Padawan dies wünscht.
|
||||||
|
|
||||||
|
Den Wunsch, wie dolle die Elektronen von einem Pol zum anderen wollen, nennt man *Spannung*. Diese Spannung wird in der Einheit *Volt* (V) angegeben. Auf der Batterie ist aufgedruckt, welche Spannung sie liefert. Die Bauteile stellen eine gewisse Hürde auf um überquert zu werden. Diese Hürde nennt man *Widerstand*. Er wird in der Einheit *Ohm* (Ω) angegeben. Dann wäre da noch der Begriff des *Strom*es. Dieser beschreibt (zumindest ungefähr) wie viele Elektronen an einer gewissen Stelle durchfließen.
|
||||||
|
|
||||||
|
TODO: URI jetzt noch im Zusammenhang erklären und paar Beispiele geben. Vielleicht auch noch eine weniger abstrakte Beschreibung liefern?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Auf gehts
|
||||||
|
|
||||||
|
Jetzt geht es schon ans Zusammenbauen des Pentabugs. Wenn Du kein Bock auf
|
||||||
|
lesen hast, haben wir dafür auch ein
|
||||||
|
[Video](http://c3d2.de/news/video-pentabug-bauen.html) vorbereitet, was gut
|
||||||
|
erklärt, wie der Pentabug gelötet wird.
|
||||||
|
|
||||||
|
Während Du jetzt also das Lichtschwert eines jeden Junghackers, also den
|
||||||
|
Lötkolben an der Steckdose heiß werden lässt, packe die einzelnen Bauteile des
|
||||||
|
Pentabug vor Dir aus und schaue sie genau an. Am besten sortierst Du sie, damit
|
||||||
|
Du sie schnell griffbereit hast.
|
||||||
|
|
||||||
|
In der PBG-Kiste ist auch ein Zettel, der die nötigsten Informationen
|
||||||
|
zusammenfasst. Bei einigen Bauteilen muss man aufpassen, in welcher Richtung
|
||||||
|
man sie einbaut.
|
||||||
|
|
||||||
|
Die Bauteile werden in der Reihenfolge verbaut, in der sie auf dem Zettel
|
||||||
|
stehen. Das macht man deswegen, weil man später an manche Bauteile nicht mehr
|
||||||
|
so gut rankommt, wenn rundherum schon viele andere Teile verbaut sind.
|
||||||
|
|
||||||
|
Das Basis-Bauelement, auf dem alle anderen Teile verbaut werden, ist die
|
||||||
|
Platine.
|
||||||
|
|
||||||
|
### Wie man richtig lötet
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[Disclaimer]: Auch andere Läden haben Lötkolben oder andere Werkzeuge / Bauelementeund die von uns angegebenen Links sind keinesfalls die besten oder billigsten Teile. Die Links sollen Euch lediglich in die ungefähre Richtung schicken.
|
BIN
doc/packliste.odt
Normal file
BIN
doc/packliste.odt
Normal file
Binary file not shown.
BIN
doc/pentabug-anleitung.indd
Normal file
BIN
doc/pentabug-anleitung.indd
Normal file
Binary file not shown.
BIN
doc/pentabug-anleitung.pdf
Normal file
BIN
doc/pentabug-anleitung.pdf
Normal file
Binary file not shown.
|
@ -1,4 +1,4 @@
|
||||||
APPS = buggy jumpy mariotheme geiger ducklings wuerfel blinker
|
APPS = buggy jumpy mariotheme geiger ducklings blinker
|
||||||
|
|
||||||
PROJECT=pentabug
|
PROJECT=pentabug
|
||||||
|
|
||||||
|
@ -77,6 +77,8 @@ fljohn: $(PROJECT).hex Makefile
|
||||||
flsmart: $(PROJECT).hex Makefile
|
flsmart: $(PROJECT).hex Makefile
|
||||||
$(AVRDUDE) -p m88 -F -P /dev/ttyUSB0 -c stk500v2 -v -v -U flash:w:$(PROJECT).hex
|
$(AVRDUDE) -p m88 -F -P /dev/ttyUSB0 -c stk500v2 -v -v -U flash:w:$(PROJECT).hex
|
||||||
|
|
||||||
|
flusbasp: $(PROJECT).hex Makefile
|
||||||
|
$(AVRDUDE) -p m88 -F -c usbasp -v -v -U flash:w:$(PROJECT).hex
|
||||||
|
|
||||||
.PHONY : clean all fuse flash fljohn
|
.PHONY : clean all fuse flash fljohn
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
#include <pentabug/music.h>
|
#include <pentabug/music.h>
|
||||||
#include <pentabug/helper.h>
|
#include <pentabug/helper.h>
|
||||||
|
|
||||||
|
#define BASELINE 0xa0
|
||||||
|
|
||||||
inline uint16_t biased_random(uint8_t value) {
|
inline uint16_t biased_random(uint8_t value) {
|
||||||
return value / 2 * (rand() & 15);
|
return value / 2 * (rand() & 15);
|
||||||
}
|
}
|
||||||
|
@ -79,12 +81,12 @@ static void run(void) {
|
||||||
|
|
||||||
pentatonic_all_led_set(light >> 3);
|
pentatonic_all_led_set(light >> 3);
|
||||||
|
|
||||||
motor_set(biased_random(light) > 0x70);
|
motor_set(biased_random(light) > BASELINE + 0x40);
|
||||||
|
|
||||||
led_set(RIGHT, biased_random(light) > 0x30);
|
led_set(RIGHT, biased_random(light) > BASELINE + 0x00);
|
||||||
led_set(LEFT, biased_random(light) > 0x30);
|
led_set(LEFT, biased_random(light) > BASELINE + 0x00);
|
||||||
|
|
||||||
if(biased_random(light) > 0x60) {
|
if(biased_random(light) > BASELINE + 0x20) {
|
||||||
uint16_t tone = (biased_random(light) * 2) + 500;
|
uint16_t tone = (biased_random(light) * 2) + 500;
|
||||||
set_note(tone, 0);
|
set_note(tone, 0);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -10,5 +10,6 @@ void matrix_show(void);
|
||||||
void matrix_init(void);
|
void matrix_init(void);
|
||||||
|
|
||||||
void matrix_set(uint8_t x, uint8_t y, uint8_t active);
|
void matrix_set(uint8_t x, uint8_t y, uint8_t active);
|
||||||
|
void matrix_brightness(uint8_t x, uint8_t y, uint8_t brightness);
|
||||||
|
|
||||||
#endif /* MATRIX_H */
|
#endif /* MATRIX_H */
|
||||||
|
|
|
@ -3,8 +3,9 @@
|
||||||
#include <pentabug/timer.h>
|
#include <pentabug/timer.h>
|
||||||
#include <pentabug/hal.h>
|
#include <pentabug/hal.h>
|
||||||
|
|
||||||
static uint8_t pixels[9];
|
static uint8_t pixels[9] = {0};
|
||||||
static uint8_t index;
|
static uint8_t index;
|
||||||
|
static uint8_t cycle;
|
||||||
|
|
||||||
void matrix_init(void) {
|
void matrix_init(void) {
|
||||||
DDRD |= (1 << 5) | (1 << 6) | (1 << 7);
|
DDRD |= (1 << 5) | (1 << 6) | (1 << 7);
|
||||||
|
@ -17,19 +18,19 @@ static void move_line(uint8_t line) {
|
||||||
PORTD &= ~(1 << (line + 5));
|
PORTD &= ~(1 << (line + 5));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_line(uint8_t data[]) {
|
static void write_line(uint8_t data[], uint8_t timing) {
|
||||||
PORTC &= ~((1 << 5) | (1 << 4));
|
PORTC &= ~((1 << 5) | (1 << 4));
|
||||||
PORTB &= ~(1 << 2);
|
PORTB &= ~(1 << 2);
|
||||||
|
|
||||||
if(data[0]) {
|
if(data[0] > timing) {
|
||||||
PORTC |= 1 << 5;
|
PORTC |= 1 << 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data[1]) {
|
if(data[1] > timing) {
|
||||||
PORTC |= 1 << 4;
|
PORTC |= 1 << 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data[2]) {
|
if(data[2] > timing) {
|
||||||
PORTB |= 1 << 2;
|
PORTB |= 1 << 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,16 +39,17 @@ static void matrix_int(void) {
|
||||||
++index;
|
++index;
|
||||||
|
|
||||||
if(index >= 3) {
|
if(index >= 3) {
|
||||||
|
++cycle;
|
||||||
index = 0;
|
index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
move_line(index);
|
move_line(index);
|
||||||
write_line(pixels + (index * 3));
|
write_line(pixels + (index * 3), cycle & 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_start(void) {
|
void matrix_start(void) {
|
||||||
matrix_init();
|
matrix_init();
|
||||||
start_timer(PRESCALE_64, 125, matrix_int);
|
start_timer(PRESCALE_64, 32, matrix_int);
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_stop(void) {
|
void matrix_stop(void) {
|
||||||
|
@ -55,16 +57,22 @@ void matrix_stop(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_show(void) {
|
void matrix_show(void) {
|
||||||
uint8_t i;
|
for(uint8_t n = 0; n < 4; ++n) {
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
for(i = 0; i < 3; ++i) {
|
for(i = 0; i < 3; ++i) {
|
||||||
move_line(i);
|
move_line(i);
|
||||||
write_line(pixels + (i * 3));
|
write_line(pixels + (i * 3), n);
|
||||||
wait_ms(3);
|
wait_ms(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_set(uint8_t x, uint8_t y, uint8_t active) {
|
void matrix_set(uint8_t x, uint8_t y, uint8_t active) {
|
||||||
pixels[x*3+y] = active;
|
pixels[x*3+y] = active ? 4 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_brightness(uint8_t x, uint8_t y, uint8_t brightness) {
|
||||||
|
pixels[x*3+y] = brightness;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ uint8_t photons_measure(void) {
|
||||||
|
|
||||||
// wait for discharge
|
// wait for discharge
|
||||||
|
|
||||||
wait_ms(1);
|
wait_ms(5);
|
||||||
|
|
||||||
// set direction to input for measurement
|
// set direction to input for measurement
|
||||||
|
|
||||||
|
|
|
@ -69,15 +69,17 @@ fuse:
|
||||||
$(AVRDUDE) -p m88 -F -P /dev/ttyUSB0 -c stk500v2 -v -v -U $(FUSES)
|
$(AVRDUDE) -p m88 -F -P /dev/ttyUSB0 -c stk500v2 -v -v -U $(FUSES)
|
||||||
|
|
||||||
|
|
||||||
#flash: $(PROJECT).hex Makefile
|
flash: $(PROJECT).hex Makefile
|
||||||
# $(AVRDUDE) -p m88 -F -c usbtiny -v -v -U flash:w:$(PROJECT).hex
|
# $(AVRDUDE) -p m88 -F -c usbtiny -v -v -U flash:w:$(PROJECT).hex
|
||||||
|
$(AVRDUDE) -p m88 -F -P /dev/ttyUSB0 -c stk500v2 -v -v -U flash:w:$(PROJECT).hex
|
||||||
|
|
||||||
|
|
||||||
fljohflsmart: $(PROJECT).hex Makefile
|
fljohflsmart: $(PROJECT).hex Makefile
|
||||||
$(AVRDUDE) -p m88 -F -P /dev/ttyUSB0 -c stk500v2 -v -v -U flash:w:$(PROJECT).hexn: $(PROJECT).hex Makefile
|
$(AVRDUDE) -p m88 -F -P /dev/ttyUSB0 -c stk500v2 -v -v -U flash:w:$(PROJECT).hexn: $(PROJECT).hex Makefile
|
||||||
$(AVRDUDE) -p m88 -F -P /dev/serial/by-id/usb-FTDI_USB__-__Serial-if00-port0 -c stk500v2 -v -v -U flash:w:$(PROJECT).hex
|
$(AVRDUDE) -p m88 -F -P /dev/serial/by-id/usb-FTDI_USB__-__Serial-if00-port0 -c stk500v2 -v -v -U flash:w:$(PROJECT).hex
|
||||||
|
|
||||||
flash: $(PROJECT).hex Makefile
|
#flash: $(PROJECT).hex Makefile
|
||||||
$(AVRDUDE) -p m88 -F -P /dev/ttyUSB0 -c stk500v2 -v -v -U flash:w:$(PROJECT).hex
|
# $(AVRDUDE) -p m88 -F -P /dev/ttyUSB0 -c stk500v2 -v -v -U flash:w:$(PROJECT).hex
|
||||||
|
|
||||||
.PHONY : clean all fuse flash fljohn
|
.PHONY : clean all fuse flash fljohn
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,13 @@
|
||||||
# Test firmware
|
# Test firmware
|
||||||
|
|
||||||
Use this firmware to test all hardware components of a Pentabug. It can test
|
Use this firmware to test all hardware components of a Pentabug. It can test
|
||||||
nearly all hardware features of the device.
|
nearly all hardware features of the device. It offers the following features:
|
||||||
|
|
||||||
The following things exist in all modes:
|
* the left led blinks when no input is present
|
||||||
|
* receiving an IR signal activates the right led
|
||||||
* right LED is on when IR signals are received (use a remote or first mode to
|
* pressing the left button sends an IR signal (triggering the right led)
|
||||||
test)
|
* pressing the right button activates the motor
|
||||||
* pressing the right button activates next mode, plays a sound using BUZZR
|
* each button plays a sound using a different pin of the buzzer
|
||||||
|
* the pins of the extension board are constantly cycled through (add a
|
||||||
Here is a description what happens on a right button press in which mode:
|
pentatonic to visualize all but one pin)
|
||||||
|
|
||||||
* activate left LED and send IR signal
|
|
||||||
* activates motor
|
|
||||||
* plays sound using BUZZGND
|
|
||||||
* activates all pins on the extension board for a short time (add a penetatonic
|
|
||||||
to get feedback on all but one of those pins)
|
|
||||||
|
|
||||||
|
|
125
fw_test/main.c
125
fw_test/main.c
|
@ -12,35 +12,14 @@
|
||||||
|
|
||||||
#define FLASH(port, pin) { port &= ~(1 << pin); _delay_ms(50); port |= 1 << pin;}
|
#define FLASH(port, pin) { port &= ~(1 << pin); _delay_ms(50); port |= 1 << pin;}
|
||||||
|
|
||||||
static volatile uint32_t button_state = 0;
|
|
||||||
static volatile uint8_t next_mode = 0;
|
|
||||||
static volatile uint8_t ir_active = 0;
|
static volatile uint8_t ir_active = 0;
|
||||||
|
|
||||||
enum test_modes {
|
|
||||||
PHOTONS,
|
|
||||||
MOTOR,
|
|
||||||
AUDIO,
|
|
||||||
SHIELD,
|
|
||||||
// the end ... wrap
|
|
||||||
MODE_MAX,
|
|
||||||
};
|
|
||||||
|
|
||||||
ISR(TIMER0_COMPA_vect) {
|
ISR(TIMER0_COMPA_vect) {
|
||||||
if(ir_active) {
|
if(ir_active) {
|
||||||
PORTD ^= 1 << 2;
|
PORTD ^= 1 << 2;
|
||||||
} else {
|
} else {
|
||||||
PORTD &= ~(1 << 2);
|
PORTD &= ~(1 << 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(PINB & (1 << 1)) {
|
|
||||||
button_state = 0;
|
|
||||||
} else {
|
|
||||||
++button_state;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(button_state == (38l * 1000 / 2)) {
|
|
||||||
next_mode = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset_hw(void) {
|
static void reset_hw(void) {
|
||||||
|
@ -70,7 +49,6 @@ static void reset_hw(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
uint8_t vib_delay = 0;
|
|
||||||
uint16_t count = 0;
|
uint16_t count = 0;
|
||||||
|
|
||||||
// we need to get real fast (8MHz) to handle 38kHz IR frequency ...
|
// we need to get real fast (8MHz) to handle 38kHz IR frequency ...
|
||||||
|
@ -96,79 +74,54 @@ int main(void) {
|
||||||
|
|
||||||
// looping
|
// looping
|
||||||
|
|
||||||
enum test_modes mode = PHOTONS;
|
|
||||||
|
|
||||||
for ever {
|
for ever {
|
||||||
// next mode?
|
// blinking left led
|
||||||
|
|
||||||
if(next_mode) {
|
if(count % 0x4000 == 0) {
|
||||||
// cleanup
|
PORTD ^= 1 << 4;
|
||||||
switch(mode) {
|
|
||||||
case PHOTONS:
|
|
||||||
ir_active = 0;
|
|
||||||
break;
|
|
||||||
case MOTOR:
|
|
||||||
case AUDIO:
|
|
||||||
case SHIELD:
|
|
||||||
break;
|
|
||||||
case MODE_MAX: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
reset_hw();
|
|
||||||
|
|
||||||
++mode;
|
|
||||||
|
|
||||||
if(mode == MODE_MAX) {
|
|
||||||
mode = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t i;
|
|
||||||
for(i = 0; i < 50; ++i) {
|
|
||||||
PORTB ^= 1 << 7;
|
|
||||||
_delay_ms(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
next_mode = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t button = !(PINB & (1 << 0));
|
++count;
|
||||||
|
|
||||||
|
// right led on ir
|
||||||
|
|
||||||
not_follow(PIND & (1 << 3), PORTC, 2);
|
not_follow(PIND & (1 << 3), PORTC, 2);
|
||||||
|
|
||||||
switch(mode) {
|
// left button
|
||||||
case PHOTONS:
|
|
||||||
{
|
|
||||||
ir_active = button;
|
|
||||||
if(count % 0x2000 == 0) {
|
|
||||||
PORTD ^= 1 << 4;
|
|
||||||
}
|
|
||||||
++count;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case MOTOR:
|
|
||||||
not_follow(button, PORTB, 6);
|
|
||||||
break;
|
|
||||||
case AUDIO:
|
|
||||||
{
|
|
||||||
if(button) {
|
|
||||||
PORTC ^= 1 << 0;
|
|
||||||
_delay_ms(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
const uint8_t button_r = !(PINB & (1 << 0));
|
||||||
}
|
const uint8_t button_l = !(PINB & (1 << 1));
|
||||||
case SHIELD:
|
|
||||||
if(button) {
|
// ir
|
||||||
FLASH(PORTB, 2);
|
|
||||||
FLASH(PORTD, 5);
|
ir_active = button_r;
|
||||||
FLASH(PORTD, 6);
|
|
||||||
FLASH(PORTD, 7);
|
// motor
|
||||||
FLASH(PORTC, 5);
|
|
||||||
FLASH(PORTC, 4);
|
not_follow(button_l, PORTB, 6);
|
||||||
}
|
|
||||||
break;
|
// sound stuff
|
||||||
case MODE_MAX: break;
|
|
||||||
|
if(button_l) {
|
||||||
|
PORTC ^= 1 << 0;
|
||||||
|
_delay_ms(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(button_r) {
|
||||||
|
PORTC ^= 1 << 0;
|
||||||
|
_delay_ms(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// cycle pins on extension board
|
||||||
|
|
||||||
|
const uint8_t step = (count >> 13) & 7;
|
||||||
|
|
||||||
|
follow(step == 0, PORTB, 2);
|
||||||
|
follow(step == 1, PORTD, 5);
|
||||||
|
follow(step == 2, PORTD, 6);
|
||||||
|
follow(step == 3, PORTD, 7);
|
||||||
|
follow(step == 4, PORTC, 5);
|
||||||
|
follow(step == 5, PORTC, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* never return 0; */
|
/* never return 0; */
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
BIN
hardware/production/pentabug_2.1.zip
Normal file
BIN
hardware/production/pentabug_2.1.zip
Normal file
Binary file not shown.
Binary file not shown.
1470
hardware/v2/pentabug_v2.1.brd
Normal file
1470
hardware/v2/pentabug_v2.1.brd
Normal file
File diff suppressed because it is too large
Load Diff
4465
hardware/v2/pentabug_v2.1.sch
Normal file
4465
hardware/v2/pentabug_v2.1.sch
Normal file
File diff suppressed because it is too large
Load Diff
BIN
img/assembled_v2_728x483.jpg
Normal file
BIN
img/assembled_v2_728x483.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 141 KiB |
Before Width: | Height: | Size: 608 KiB After Width: | Height: | Size: 608 KiB |
Loading…
Reference in New Issue
Block a user