├── .gitignore ├── README.md ├── etc ├── default │ └── udhcpd ├── dhcpcd.conf ├── exports ├── hostname ├── hosts ├── network │ └── interfaces.d │ │ ├── br0 │ │ ├── usb0 │ │ ├── usb1 │ │ ├── usb2 │ │ └── usb3 ├── rc.local ├── ssh │ └── ssh_config ├── sysctl.d │ └── 97-ipforward.conf └── udhcpd.conf ├── homebin ├── bootme ├── cycleall ├── isalive ├── runall ├── tcbootall ├── tchpl ├── tcshutdown └── waitforalive ├── hpl ├── HPL.dat ├── Make.rpi ├── README ├── nodes └── run_hpl ├── node_init.sh ├── nodeimg_build.sh ├── setup_head.sh ├── terrible_pcb ├── LICENSE ├── README ├── ap2191dwg.lib ├── cy7c65632-48.lib ├── gerber_v0.1 │ ├── terrible-B.Cu.gbl │ ├── terrible-B.Mask.gbs │ ├── terrible-B.SilkS.gbo │ ├── terrible-Edge.Cuts.gm1 │ ├── terrible-F.Cu.gtl │ ├── terrible-F.Mask.gts │ ├── terrible-F.SilkS.gto │ └── terrible-drl.txt ├── parametric-fan.scad ├── pi0computer.stl ├── pi0sdcard.stl ├── terrible-cache.lib ├── terrible.kicad_pcb ├── terrible.pdf ├── terrible.pro ├── terrible.scad ├── terrible.sch ├── terrible.stl ├── terrible_case.scad ├── terrible_misc.pretty │ ├── C_Radial_D8_L11.5_P3.5.kicad_mod │ ├── C_Radial_D8_L6_P2.5.kicad_mod │ └── skull.kicad_mod └── terrible_v1a_bom.csv └── wpa_supplicant.conf /.gitignore: -------------------------------------------------------------------------------- 1 | # For PCBs designed using KiCad: http://www.kicad-pcb.org/ 2 | 3 | # Temporary files 4 | *.000 5 | *.bak 6 | *.bck 7 | *.kicad_pcb-bak 8 | *~ 9 | _autosave-* 10 | *.tmp 11 | 12 | # Netlist files (exported from Eeschema) 13 | *.net 14 | 15 | # Autorouter files (exported from Pcbnew) 16 | *.dsn 17 | *.ses 18 | 19 | # Exported BOM files 20 | *.xml 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # terrible-pi 2 | 3 | 4 | 5 | ![](https://i.imgur.com/5njScmk.jpg) ![](https://i.imgur.com/kaebvPF.jpg) 6 | 7 | *A supercomputer, but fun sized. And not super.* 8 | 9 | In this repo you'll find hardware designs for the Terrible-Pi, a cluster 10 | computer made from four Raspberry Pi Zero boards used as compute elements 11 | and one Raspberry Pi Zero W as a head node and network router. 12 | 13 | terrible-pi is based around a USB backplane that powers and interconnects 14 | all five Pi Zeros and allows the head node to control power to each of the 15 | compute nodes. The USB boot feature of the Pi Zero is used to automate 16 | deployment of new OS images to each compute node. 17 | 18 | Up to date news on this project can be found at [this Hackaday project.](https://hackaday.io/project/27142-terrible-cluster) 19 | 20 | 21 | Repo Contents 22 | ------------- 23 | The terrible_pcb directory has a board design for the backplane and a 3D printable case. See terrible_pcb/README for instructions for printing the case and the backplane board. 24 | 25 | `etc` contains config files to be copied on top of the Raspbian install for 26 | the head node. 27 | 28 | wpa_supplicant.conf is a template WiFi config for the head node. This is used 29 | for headless setup of the head node Raspbian SD card for remote SSH access. 30 | 31 | `nodeimg_build.sh` is a script for extracting a Raspbian distribution image into 32 | a set of files used to deploy new compute nodes. 33 | 34 | `node_init.sh` is a script used to upload the compute node Raspbian generated 35 | by `nodeimg_build.sh` to the SD card of a compute node. 36 | 37 | terrible-pi Install and Usage Guide 38 | =================================== 39 | 40 | Setting up a terrible-pi cluster head node 41 | ------------------------------------------ 42 | 43 | 1. Get the latest Raspbian (https://downloads.raspberrypi.org/raspbian_lite_latest) 44 | and install to a microSD 45 | 46 | 2. Mount the first (FAT) partition of the card on a PC. 47 | 48 | 3. Copy "wpa_supplicant.conf" from this repo to the card. Edit it so that 49 | "YOUR_SSID" is replaced by the WiFi network name that you want the head node 50 | to connect to, and "YOUR_PASSPHRASE" is replaced by the network's key. Use 51 | your Google-fu if you can't get it to work. 52 | 53 | 4. Create an empty file on the card named "ssh". Use the UNIX command "touch 54 | ssh" or just open and save a new file "ssh" with your text editor. 55 | 56 | 5. Boot the microSD on the Pi Zero W 57 | 58 | 6. After 4-5 minutes, try SSHing as "pi" to the Zero W with the hostname 59 | "raspberrypi", "raspberrypi.lan", or "raspberrypi.local". Use the password 60 | "raspberry". If your router isn't serving DNS for local domains, you may 61 | have to check the router's DHCP lease logs to see what IP the head node has. 62 | 63 | 7. Now that you're logged into the Pi Zero W, update to the latest Raspbian 64 | packages: 65 | 66 | ``` 67 | sudo apt-get -y update && sudo apt-get -y upgrade 68 | ``` 69 | 70 | 8. Install the necessary packages: 71 | 72 | ``` 73 | sudo apt-get -y install libusb-1.0-0-dev nfs-kernel-server git \ 74 | pdsh udhcpd iptables bridge-utils 75 | ``` 76 | 9. Build and install the USB hub tool: 77 | 78 | ``` 79 | cd 80 | git clone https://github.com/mvp/uhubctl.git 81 | pushd uhubctl 82 | make 83 | sudo cp uhubctl /usr/local/bin/. 84 | sudo chown root:root /usr/local/bin/uhubctl 85 | popd 86 | ``` 87 | 10. Build and install the USB boot tool: 88 | 89 | ``` 90 | git clone https://github.com/raspberrypi/usbboot.git 91 | pushd usbboot 92 | make 93 | sudo cp rpiboot /usr/local/bin/. 94 | sudo mkdir /usr/share/rpiboot 95 | sudo cp -a msd /usr/share/rpiboot 96 | sudo chown -R root:root /usr/share/rpiboot 97 | sudo chown -R root:root /usr/local/bin/rpiboot 98 | popd 99 | ``` 100 | 11. Get this repo on the Pi: 101 | 102 | ``` 103 | git clone https://github.com/al177/terrible-pi.git 104 | ``` 105 | 106 | 12. Copy the config files for the DHCP server, networks, NFS, SSH, and 107 | hosts, hostname, and startup scripts: 108 | 109 | ``` 110 | sudo chown -R root:root /home/pi/terrible-pi/etc 111 | sudo cp -a /home/pi/terrible-pi/etc/* /etc/. 112 | ``` 113 | 13. Enable necessary services: 114 | 115 | ``` 116 | sudo systemctl enable udhcpd 117 | sudo systemctl enable rpcbind 118 | sudo systemctl enable nfs-kernel-server 119 | ``` 120 | 14. Create an NFS directory for the clients: 121 | 122 | ``` 123 | sudo mkdir /srv/pihome 124 | sudo chown pi:pi /srv/pihome 125 | chmod 755 /srv/pihome 126 | mkdir /srv/pihome/.ssh 127 | chmod 700 /srv/pihome/.ssh 128 | ``` 129 | 130 | 15. Reboot the head node. 131 | 132 | 16. SSH to the head node again. The config files copied over have changed the 133 | hostname to "head". So if you connected as "raspberrypi.lan", 134 | "raspberrypi", or "raspberrypi.local" above, use "head.lan", "head", or 135 | "head.local" when reconnecting. 136 | 137 | 17. Make an empty passphrase SSH key so the head can automatically connect to 138 | the nodes: 139 | 140 | ``` 141 | ssh-keygen -t rsa -f /srv/pihome/.ssh/terrible.rsa -N "" 142 | cp /srv/pihome/.ssh/terrible.rsa.pub /srv/pihome/.ssh/authorized_keys 143 | chmod 600 /srv/pihome/.ssh/authorized_keys 144 | mkdir -p ~/.ssh 145 | chmod 700 ~/.ssh 146 | cp /srv/pihome/.ssh/terrible.rsa ~/.ssh/. 147 | ``` 148 | 149 | Setting up terrible cluster compute nodes 150 | ----------------------------------------- 151 | 152 | ### Creating the compute node filesystem 153 | 154 | 1. Get the Raspbian Lite zip file on the head node in /home/pi. This can be 155 | the zip used to create the head node microSD card, or can be downloaded by: 156 | 157 | ``` 158 | wget --trust-server-names https://downloads.raspberrypi.org/raspbian_lite_latest 159 | ``` 160 | 161 | Note the filename that it downloads as. 162 | 163 | 2. Prep the boot image: 164 | 165 | ``` 166 | sudo terrible-pi/nodeimg_build.sh 2017-09-07-raspbian-stretch-lite.zip 167 | ``` 168 | 169 | This will take 10-15 minutes. The result will be a directory "tcboot" 170 | that contains the boot files and filesystems for the nodes. This process 171 | needs to be repeated only when changing or upgrading the Raspbian install on 172 | the compute nodes. 173 | 174 | ### Deploying Raspbian to the compute nodes 175 | 176 | 1. Insure that the microSD cards in nodes do not contain the Raspberry Pi 177 | bootloader, or the USB boot method used to manage this cluster will not work. 178 | Insure that "bootcode.bin" does not exist in the root of any of the 179 | partitions on any of the cards. If in doubt, do a full erase on the SD card 180 | to wipe out the bootloader in any of the partitions. 181 | 182 | 2. Turn off all the nodes. If the nodes all power up in bootstrap mode 183 | simultaneously, the image transfer script won't work. 184 | 185 | ``` 186 | sudo uhubctl -r 4 -a off 187 | ``` 188 | 189 | 3. Transfer the SD filesystem to each node, looping over all nodes in series: 190 | 191 | ``` 192 | for N in 1 2 3 4; do sudo terrible-pi/node_init.sh tcboot $N; done 193 | ``` 194 | 195 | This takes 5-10 minutes per node depending on the speed of the SD cards 196 | on the compute node Pi Zeros. 197 | 198 | Terrible cluster management 199 | --------------------------- 200 | 201 | ### Booting the cluster 202 | 203 | To boot the compute nodes, first start the rpiboot server in another 204 | terminal session: 205 | 206 | ``` 207 | sudo rpiboot -o -l -d /home/pi/tcboot 208 | ``` 209 | 210 | Then cycle power on all of the nodes: 211 | 212 | ``` 213 | sudo uhubctl -r 4 -a cycle 214 | ``` 215 | 216 | The boot will take 2-3 minutes. The nodes should be pingable once they are 217 | done. 218 | 219 | ### Connecting to the nodes 220 | 221 | Before SSHing to a node in any given session, start the key agent and add 222 | the SSH key: 223 | 224 | ``` 225 | eval `ssh-agent` 226 | ssh-add ~/.ssh/terrible.rsa 227 | ``` 228 | 229 | You can SSH to a node by name: 230 | 231 | ``` 232 | ssh node1 233 | ``` 234 | 235 | Or you can run a command on all nodes with pdsh: 236 | 237 | ``` 238 | pdsh -R ssh -w node1,node2,node3,node4 hostname 239 | ``` 240 | 241 | 242 | Raspberry Pi Zero 1.3 models 243 | [pi0computer.stl and pi0sdcard.stl](https://www.thingiverse.com/thing:2101674) 244 | are created by jdhorvat and licensed CC-BY-NC. [OpenSCAD parametric fan model](https://www.thingiverse.com/thing:625905) is created by GelatinousSlime and licensed CC-BY-SA. All other files in this tree are by Andrew Litt and licensed as 245 | [CC-BY-SA.](https://creativecommons.org/licenses/by-sa/4.0/) 246 | -------------------------------------------------------------------------------- /etc/default/udhcpd: -------------------------------------------------------------------------------- 1 | # Comment the following line to enable 2 | DHCPD_ENABLED="yes" 3 | 4 | # Options to pass to busybox' udhcpd. 5 | # 6 | # -S Log to syslog 7 | # -f run in foreground 8 | 9 | DHCPD_OPTS="-S" 10 | -------------------------------------------------------------------------------- /etc/dhcpcd.conf: -------------------------------------------------------------------------------- 1 | # A sample configuration for dhcpcd. 2 | # See dhcpcd.conf(5) for details. 3 | 4 | # Allow users of this group to interact with dhcpcd via the control socket. 5 | #controlgroup wheel 6 | 7 | # Inform the DHCP server of our hostname for DDNS. 8 | hostname 9 | 10 | # Use the hardware address of the interface for the Client ID. 11 | clientid 12 | # or 13 | # Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361. 14 | # Some non-RFC compliant DHCP servers do not reply with this set. 15 | # In this case, comment out duid and enable clientid above. 16 | #duid 17 | 18 | # Persist interface configuration when dhcpcd exits. 19 | persistent 20 | 21 | # Rapid commit support. 22 | # Safe to enable by default because it requires the equivalent option set 23 | # on the server to actually work. 24 | option rapid_commit 25 | 26 | # A list of options to request from the DHCP server. 27 | option domain_name_servers, domain_name, domain_search, host_name 28 | option classless_static_routes 29 | # Most distributions have NTP support. 30 | option ntp_servers 31 | # Respect the network MTU. This is applied to DHCP routes. 32 | option interface_mtu 33 | 34 | # A ServerID is required by RFC2131. 35 | require dhcp_server_identifier 36 | 37 | # Generate Stable Private IPv6 Addresses instead of hardware based ones 38 | slaac private 39 | 40 | # Example static IP configuration: 41 | #interface eth0 42 | #static ip_address=192.168.0.10/24 43 | #static routers=192.168.0.1 44 | #static domain_name_servers=192.168.0.1 8.8.8.8 45 | 46 | # It is possible to fall back to a static IP if DHCP fails: 47 | # define static profile 48 | #profile static_eth0 49 | #static ip_address=192.168.1.23/24 50 | #static routers=192.168.1.1 51 | #static domain_name_servers=192.168.1.1 52 | 53 | # fallback to static profile on eth0 54 | #interface eth0 55 | #fallback static_eth0 56 | denyinterfaces usb* br* 57 | -------------------------------------------------------------------------------- /etc/exports: -------------------------------------------------------------------------------- 1 | # /etc/exports: the access control list for filesystems which may be exported 2 | # to NFS clients. See exports(5). 3 | # 4 | # Example for NFSv2 and NFSv3: 5 | # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) 6 | # 7 | # Example for NFSv4: 8 | # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) 9 | # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) 10 | # 11 | /srv/pihome *(rw,sync,no_subtree_check,no_root_squash) 12 | -------------------------------------------------------------------------------- /etc/hostname: -------------------------------------------------------------------------------- 1 | head 2 | -------------------------------------------------------------------------------- /etc/hosts: -------------------------------------------------------------------------------- 1 | 127.0.0.1 localhost 2 | ::1 localhost ip6-localhost ip6-loopback 3 | ff02::1 ip6-allnodes 4 | ff02::2 ip6-allrouters 5 | 6 | 127.0.1.1 head 7 | 8 | 10.1.1.101 node1 9 | 10.1.1.102 node2 10 | 10.1.1.103 node3 11 | 10.1.1.104 node4 12 | -------------------------------------------------------------------------------- /etc/network/interfaces.d/br0: -------------------------------------------------------------------------------- 1 | auto br0 2 | iface br0 inet static 3 | address 10.1.1.1 4 | netmask 255.255.255.0 5 | bridge_ports none 6 | bridge_stp on 7 | post-up ifconfig br0 mtu 15000 8 | -------------------------------------------------------------------------------- /etc/network/interfaces.d/usb0: -------------------------------------------------------------------------------- 1 | auto usb0 2 | 3 | allow-hotplug usb0 4 | iface usb0 inet manual 5 | up ip link set usb0 up 6 | up brctl addif br0 usb0 7 | post-up ifconfig usb0 mtu 15000 8 | -------------------------------------------------------------------------------- /etc/network/interfaces.d/usb1: -------------------------------------------------------------------------------- 1 | auto usb1 2 | 3 | allow-hotplug usb1 4 | iface usb1 inet manual 5 | up ip link set usb1 up 6 | up brctl addif br0 usb1 7 | post-up ifconfig usb1 mtu 15000 8 | -------------------------------------------------------------------------------- /etc/network/interfaces.d/usb2: -------------------------------------------------------------------------------- 1 | auto usb2 2 | 3 | allow-hotplug usb2 4 | iface usb2 inet manual 5 | up ip link set usb2 up 6 | up brctl addif br0 usb2 7 | post-up ifconfig usb2 mtu 15000 8 | -------------------------------------------------------------------------------- /etc/network/interfaces.d/usb3: -------------------------------------------------------------------------------- 1 | auto usb3 2 | 3 | allow-hotplug usb3 4 | iface usb3 inet manual 5 | up ip link set usb3 up 6 | up brctl addif br0 usb3 7 | post-up ifconfig usb3 mtu 15000 8 | -------------------------------------------------------------------------------- /etc/rc.local: -------------------------------------------------------------------------------- 1 | #!/bin/sh -e 2 | # 3 | # rc.local 4 | # 5 | # This script is executed at the end of each multiuser runlevel. 6 | # Make sure that the script will "exit 0" on success or any other 7 | # value on error. 8 | # 9 | # In order to enable or disable this script just change the execution 10 | # bits. 11 | # 12 | # By default this script does nothing. 13 | 14 | # Print the IP address 15 | _IP=$(hostname -I) || true 16 | if [ "$_IP" ]; then 17 | printf "My IP address is %s\n" "$_IP" 18 | fi 19 | /sbin/iptables -P FORWARD ACCEPT 20 | /sbin/iptables --append FORWARD --in-interface br0 -j ACCEPT 21 | /sbin/iptables --table nat -A POSTROUTING -o wlan0 -j MASQUERADE 22 | 23 | exit 0 24 | -------------------------------------------------------------------------------- /etc/ssh/ssh_config: -------------------------------------------------------------------------------- 1 | 2 | # This is the ssh client system-wide configuration file. See 3 | # ssh_config(5) for more information. This file provides defaults for 4 | # users, and the values can be changed in per-user configuration files 5 | # or on the command line. 6 | 7 | # Configuration data is parsed as follows: 8 | # 1. command line options 9 | # 2. user-specific file 10 | # 3. system-wide file 11 | # Any configuration value is only changed the first time it is set. 12 | # Thus, host-specific definitions should be at the beginning of the 13 | # configuration file, and defaults at the end. 14 | 15 | # Site-wide defaults for some commonly used options. For a comprehensive 16 | # list of available options, their meanings and defaults, please see the 17 | # ssh_config(5) man page. 18 | 19 | Host * 20 | # ForwardAgent no 21 | # ForwardX11 no 22 | # ForwardX11Trusted yes 23 | # RhostsRSAAuthentication no 24 | # RSAAuthentication yes 25 | # PasswordAuthentication yes 26 | # HostbasedAuthentication no 27 | # GSSAPIAuthentication no 28 | # GSSAPIDelegateCredentials no 29 | # GSSAPIKeyExchange no 30 | # GSSAPITrustDNS no 31 | # BatchMode no 32 | # CheckHostIP yes 33 | # AddressFamily any 34 | # ConnectTimeout 0 35 | # StrictHostKeyChecking ask 36 | # IdentityFile ~/.ssh/identity 37 | # IdentityFile ~/.ssh/id_rsa 38 | # IdentityFile ~/.ssh/id_dsa 39 | # IdentityFile ~/.ssh/id_ecdsa 40 | # IdentityFile ~/.ssh/id_ed25519 41 | # Port 22 42 | # Protocol 2 43 | # Cipher 3des 44 | # Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc 45 | # MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 46 | # EscapeChar ~ 47 | # Tunnel no 48 | # TunnelDevice any:any 49 | # PermitLocalCommand no 50 | # VisualHostKey no 51 | # ProxyCommand ssh -q -W %h:%p gateway.example.com 52 | # RekeyLimit 1G 1h 53 | SendEnv LANG LC_* 54 | HashKnownHosts yes 55 | GSSAPIAuthentication yes 56 | 57 | Host "node?" 58 | StrictHostKeyChecking no 59 | UserKnownHostsFile /dev/null 60 | IdentityFile /srv/pihome/.ssh/terrible.rsa 61 | 62 | -------------------------------------------------------------------------------- /etc/sysctl.d/97-ipforward.conf: -------------------------------------------------------------------------------- 1 | net.ipv4.ip_forward=1 2 | -------------------------------------------------------------------------------- /etc/udhcpd.conf: -------------------------------------------------------------------------------- 1 | # Sample udhcpd configuration file (/etc/udhcpd.conf) 2 | 3 | # The start and end of the IP lease block 4 | 5 | start 10.1.1.10 6 | end 10.1.1.14 7 | 8 | 9 | # The interface that udhcpd will use 10 | 11 | interface br0 #default: eth0 12 | 13 | 14 | # The maximim number of leases (includes addressesd reserved 15 | # by OFFER's, DECLINE's, and ARP conficts 16 | 17 | max_leases 10 #default: 254 18 | 19 | 20 | # If remaining is true (default), udhcpd will store the time 21 | # remaining for each lease in the udhcpd leases file. This is 22 | # for embedded systems that cannot keep time between reboots. 23 | # If you set remaining to no, the absolute time that the lease 24 | # expires at will be stored in the dhcpd.leases file. 25 | 26 | #remaining yes #default: yes 27 | 28 | 29 | # The time period at which udhcpd will write out a dhcpd.leases 30 | # file. If this is 0, udhcpd will never automatically write a 31 | # lease file. (specified in seconds) 32 | 33 | #auto_time 7200 #default: 7200 (2 hours) 34 | 35 | 36 | # The amount of time that an IP will be reserved (leased) for if a 37 | # DHCP decline message is received (seconds). 38 | 39 | #decline_time 3600 #default: 3600 (1 hour) 40 | 41 | 42 | # The amount of time that an IP will be reserved (leased) for if an 43 | # ARP conflct occurs. (seconds 44 | 45 | #conflict_time 3600 #default: 3600 (1 hour) 46 | 47 | 48 | # How long an offered address is reserved (leased) in seconds 49 | 50 | #offer_time 60 #default: 60 (1 minute) 51 | 52 | # If a lease to be given is below this value, the full lease time is 53 | # instead used (seconds). 54 | 55 | #min_lease 60 #defult: 60 56 | 57 | 58 | # The location of the leases file 59 | 60 | #lease_file /var/lib/misc/udhcpd.leases #defualt: /var/lib/misc/udhcpd.leases 61 | 62 | # The location of the pid file 63 | #pidfile /var/run/udhcpd.pid #default: /var/run/udhcpd.pid 64 | 65 | # Everytime udhcpd writes a leases file, the below script will be called. 66 | # Useful for writing the lease file to flash every few hours. 67 | 68 | #notify_file #default: (no script) 69 | 70 | #notify_file dumpleases # <--- useful for debugging 71 | 72 | # The following are bootp specific options, setable by udhcpd. 73 | 74 | #siaddr 192.168.0.22 #default: 0.0.0.0 75 | 76 | #sname zorak #default: (none) 77 | 78 | #boot_file /var/nfs_root #default: (none) 79 | 80 | # The remainer of options are DHCP options and can be specifed with the 81 | # keyword 'opt' or 'option'. If an option can take multiple items, such 82 | # as the dns option, they can be listed on the same line, or multiple 83 | # lines. The only option with a default is 'lease'. 84 | 85 | #Examles 86 | opt dns 8.8.4.4 87 | option subnet 255.255.255.0 88 | opt router 10.1.1.1 89 | option domain local 90 | option lease 864000 # 10 days of seconds 91 | 92 | 93 | # Currently supported options, for more info, see options.c 94 | #opt subnet 95 | #opt timezone 96 | #opt router 97 | #opt timesrv 98 | #opt namesrv 99 | #opt dns 100 | #opt logsrv 101 | #opt cookiesrv 102 | #opt lprsrv 103 | #opt bootsize 104 | #opt domain 105 | #opt swapsrv 106 | #opt rootpath 107 | #opt ipttl 108 | #opt mtu 109 | #opt broadcast 110 | #opt wins 111 | #opt lease 112 | #opt ntpsrv 113 | #opt tftp 114 | #opt bootfile 115 | #opt wpad 116 | 117 | # Static leases map 118 | static_lease 68:08:11:55:aa:01 10.1.1.101 119 | static_lease 68:08:11:55:aa:02 10.1.1.102 120 | static_lease 68:08:11:55:aa:03 10.1.1.103 121 | static_lease 68:08:11:55:aa:04 10.1.1.104 122 | 123 | -------------------------------------------------------------------------------- /homebin/bootme: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo rpiboot -o -l -d /home/$( whoami )/tcboot 3 | -------------------------------------------------------------------------------- /homebin/cycleall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo /home/$( whoami )/uhubctl/uhubctl -r 4 -a cycle 3 | -------------------------------------------------------------------------------- /homebin/isalive: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | arp -na | grep 68:08 3 | pdsh -R ssh -w node[1-4] hostname 4 | -------------------------------------------------------------------------------- /homebin/runall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | pdsh -R ssh -w node[1-4] $1 3 | -------------------------------------------------------------------------------- /homebin/tcbootall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | cnodes=4 3 | max_tries=20 4 | sudo killall rpiboot 5 | ME="$( whoami )" 6 | sudo /home/${ME}/uhubctl/uhubctl -l 1-1 -R -r 4 -w 500 -a on 7 | sleep 2 8 | sudo /home/${ME}/uhubctl/uhubctl -l 1-1 -r 4 -w 500 -a off 9 | sleep 2 10 | sudo rpiboot -o -l -m 10000 -v -d /home/${ME}/terrible-pi/tcboot > /tmp/tcboot.log 2>&1 & 11 | rpiboot_pid=$! 12 | echo "rpiboot started, pid $rpiboot_pid. Log in /tmp/tcboot.log" 13 | echo "Wait for nodes to boot..." 14 | sudo /home/${ME}/uhubctl/uhubctl -l 1-1 -w 1000 -a on -p 1 15 | sleep 30 16 | sudo /home/${ME}/uhubctl/uhubctl -l 1-1 -w 1000 -a on -p 2 17 | sleep 30 18 | sudo /home/${ME}/uhubctl/uhubctl -l 1-1 -w 1000 -a on -p 3 19 | sleep 30 20 | sudo /home/${ME}/uhubctl/uhubctl -l 1-1 -w 1000 -a on -p 4 21 | sleep 30 22 | tries=1 23 | num_alive=0 24 | while [ $num_alive -lt $cnodes ] && [ $tries -le $max_tries ]; do 25 | sleep 10 26 | echo -n "Try $tries : " 27 | num_alive=`pdsh -R ssh -w node[1-4] hostname 2>/dev/null | grep -e "^node" | wc -l` 28 | echo " $num_alive responding" 29 | sudo /home/${ME}/uhubctl/uhubctl -l 1-1 30 | tries=$(( tries + 1 )) 31 | done 32 | 33 | sudo kill $rpiboot_pid 34 | -------------------------------------------------------------------------------- /homebin/tchpl: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo killall rpiboot 3 | pushd /home/pi/hpl-2.2/bin/rpi 4 | ./run_hpl 5 | popd 6 | -------------------------------------------------------------------------------- /homebin/tcshutdown: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | pdsh -R ssh -w node[1-4] "sudo halt" 3 | -------------------------------------------------------------------------------- /homebin/waitforalive: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | cnodes=4 3 | max_tries=20 4 | echo "Wait for nodes to boot..." 5 | tries=1 6 | num_alive=0 7 | while [ $num_alive -lt $cnodes ] && [ $tries -le $max_tries ]; do 8 | sleep 10 9 | echo -n "Try $tries : " 10 | num_alive=`pdsh -R ssh -w node[1-4] hostname 2>/dev/null | grep -e "^node" | wc -l` 11 | echo " $num_alive responding" 12 | tries=$(( tries + 1 )) 13 | done 14 | 15 | -------------------------------------------------------------------------------- /hpl/HPL.dat: -------------------------------------------------------------------------------- 1 | HPLinpack benchmark input file 2 | Innovative Computing Laboratory, University of Tennessee 3 | HPL.out output file name (if any) 4 | 6 device out (6=stdout,7=stderr,file) 5 | 1 # of problems sizes (N) 6 | 14720 Ns 7 | 1 # of NBs 8 | 80 NBs 9 | 0 PMAP process mapping (0=Row-,1=Column-major) 10 | 1 # of process grids (P x Q) 11 | 1 Ps 12 | 5 Qs 13 | 16.0 threshold 14 | 1 # of panel fact 15 | 2 PFACTs (0=left, 1=Crout, 2=Right) 16 | 1 # of recursive stopping criterium 17 | 4 NBMINs (>= 1) 18 | 1 # of panels in recursion 19 | 2 NDIVs 20 | 1 # of recursive panel fact. 21 | 1 RFACTs (0=left, 1=Crout, 2=Right) 22 | 1 # of broadcast 23 | 1 BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM) 24 | 1 # of lookahead depth 25 | 1 DEPTHs (>=0) 26 | 2 SWAP (0=bin-exch,1=long,2=mix) 27 | 64 swapping threshold 28 | 0 L1 in (0=transposed,1=no-transposed) form 29 | 0 U in (0=transposed,1=no-transposed) form 30 | 1 Equilibration (0=no,1=yes) 31 | 8 memory alignment in double (> 0) 32 | ##### 33 | 0 34 | 1200 10000 30000 35 | 0 36 | 40 9 8 13 13 20 16 32 64 37 | -------------------------------------------------------------------------------- /hpl/Make.rpi: -------------------------------------------------------------------------------- 1 | # 2 | # -- High Performance Computing Linpack Benchmark (HPL) 3 | # HPL - 2.2 - February 24, 2016 4 | # Antoine P. Petitet 5 | # University of Tennessee, Knoxville 6 | # Innovative Computing Laboratory 7 | # (C) Copyright 2000-2008 All Rights Reserved 8 | # 9 | # -- Copyright notice and Licensing terms: 10 | # 11 | # Redistribution and use in source and binary forms, with or without 12 | # modification, are permitted provided that the following conditions 13 | # are met: 14 | # 15 | # 1. Redistributions of source code must retain the above copyright 16 | # notice, this list of conditions and the following disclaimer. 17 | # 18 | # 2. Redistributions in binary form must reproduce the above copyright 19 | # notice, this list of conditions, and the following disclaimer in the 20 | # documentation and/or other materials provided with the distribution. 21 | # 22 | # 3. All advertising materials mentioning features or use of this 23 | # software must display the following acknowledgement: 24 | # This product includes software developed at the University of 25 | # Tennessee, Knoxville, Innovative Computing Laboratory. 26 | # 27 | # 4. The name of the University, the name of the Laboratory, or the 28 | # names of its contributors may not be used to endorse or promote 29 | # products derived from this software without specific written 30 | # permission. 31 | # 32 | # -- Disclaimer: 33 | # 34 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 35 | # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 37 | # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY 38 | # OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 39 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 40 | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41 | # DATA OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45 | # ###################################################################### 46 | # 47 | # ---------------------------------------------------------------------- 48 | # - shell -------------------------------------------------------------- 49 | # ---------------------------------------------------------------------- 50 | # 51 | SHELL = /bin/sh 52 | # 53 | CD = cd 54 | CP = cp 55 | LN_S = ln -s 56 | MKDIR = mkdir 57 | RM = /bin/rm -f 58 | TOUCH = touch 59 | # 60 | # ---------------------------------------------------------------------- 61 | # - Platform identifier ------------------------------------------------ 62 | # ---------------------------------------------------------------------- 63 | # 64 | ARCH = rpi 65 | # 66 | # ---------------------------------------------------------------------- 67 | # - HPL Directory Structure / HPL library ------------------------------ 68 | # ---------------------------------------------------------------------- 69 | # 70 | TOPdir = /srv/pihome/hpl 71 | INCdir = $(TOPdir)/include 72 | BINdir = $(TOPdir)/bin/$(ARCH) 73 | LIBdir = $(TOPdir)/lib/$(ARCH) 74 | # 75 | HPLlib = $(LIBdir)/libhpl.a 76 | # 77 | # ---------------------------------------------------------------------- 78 | # - Message Passing library (MPI) -------------------------------------- 79 | # ---------------------------------------------------------------------- 80 | # MPinc tells the C compiler where to find the Message Passing library 81 | # header files, MPlib is defined to be the name of the library to be 82 | # used. The variable MPdir is only used for defining MPinc and MPlib. 83 | # 84 | MPdir = 85 | MPinc = 86 | MPlib = -lmpi 87 | # 88 | # ---------------------------------------------------------------------- 89 | # - Linear Algebra library (BLAS or VSIPL) ----------------------------- 90 | # ---------------------------------------------------------------------- 91 | # LAinc tells the C compiler where to find the Linear Algebra library 92 | # header files, LAlib is defined to be the name of the library to be 93 | # used. The variable LAdir is only used for defining LAinc and LAlib. 94 | # 95 | LAdir = /usr/lib/arm-linux-gnueabihf 96 | LAinc = 97 | LAlib = $(LAdir)/libopenblas.a -lpthread 98 | # 99 | # ---------------------------------------------------------------------- 100 | # - F77 / C interface -------------------------------------------------- 101 | # ---------------------------------------------------------------------- 102 | # You can skip this section if and only if you are not planning to use 103 | # a BLAS library featuring a Fortran 77 interface. Otherwise, it is 104 | # necessary to fill out the F2CDEFS variable with the appropriate 105 | # options. **One and only one** option should be chosen in **each** of 106 | # the 3 following categories: 107 | # 108 | # 1) name space (How C calls a Fortran 77 routine) 109 | # 110 | # -DAdd_ : all lower case and a suffixed underscore (Suns, 111 | # Intel, ...), [default] 112 | # -DNoChange : all lower case (IBM RS6000), 113 | # -DUpCase : all upper case (Cray), 114 | # -DAdd__ : the FORTRuAN compiler in use is f2c. 115 | # 116 | # 2) C and Fortran 77 integer mapping 117 | # 118 | # -DF77_INTEGER=int : Fortran 77 INTEGER is a C int, [default] 119 | # -DF77_INTEGER=long : Fortran 77 INTEGER is a C long, 120 | # -DF77_INTEGER=short : Fortran 77 INTEGER is a C short. 121 | # 122 | # 3) Fortran 77 string handling 123 | # 124 | # -DStringSunStyle : The string address is passed at the string loca- 125 | # tion on the stack, and the string length is then 126 | # passed as an F77_INTEGER after all explicit 127 | # stack arguments, [default] 128 | # -DStringStructPtr : The address of a structure is passed by a 129 | # Fortran 77 string, and the structure is of the 130 | # form: struct {char *cp; F77_INTEGER len;}, 131 | # -DStringStructVal : A structure is passed by value for each Fortran 132 | # 77 string, and the structure is of the form: 133 | # struct {char *cp; F77_INTEGER len;}, 134 | # -DStringCrayStyle : Special option for Cray machines, which uses 135 | # Cray fcd (fortran character descriptor) for 136 | # interoperation. 137 | # 138 | F2CDEFS = -DAdd_ -DF77_INTEGER=int -DStringSunStyle 139 | # 140 | # ---------------------------------------------------------------------- 141 | # - HPL includes / libraries / specifics ------------------------------- 142 | # ---------------------------------------------------------------------- 143 | # 144 | HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc) 145 | HPL_LIBS = $(HPLlib) $(LAlib) $(MPlib) 146 | # 147 | # - Compile time options ----------------------------------------------- 148 | # 149 | # -DHPL_COPY_L force the copy of the panel L before bcast; 150 | # -DHPL_CALL_CBLAS call the cblas interface; 151 | # -DHPL_CALL_VSIPL call the vsip library; 152 | # -DHPL_DETAILED_TIMING enable detailed timers; 153 | # 154 | # By default HPL will: 155 | # *) not copy L before broadcast, 156 | # *) call the BLAS Fortran 77 interface, 157 | # *) not display detailed timing information. 158 | # 159 | HPL_OPTS = -DHPL_CALL_CBLAS 160 | # 161 | # ---------------------------------------------------------------------- 162 | # 163 | HPL_DEFS = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES) 164 | # 165 | # ---------------------------------------------------------------------- 166 | # - Compilers / linkers - Optimization flags --------------------------- 167 | # ---------------------------------------------------------------------- 168 | # 169 | CC = mpicc 170 | CCNOOPT = $(HPL_DEFS) 171 | #CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -W -Wall 172 | CCFLAGS = $(HPL_DEFS) -O3 -W -Wall 173 | # 174 | LINKER = mpicc 175 | LINKFLAGS = $(CCFLAGS) 176 | # 177 | ARCHIVER = ar 178 | ARFLAGS = r 179 | RANLIB = echo 180 | # 181 | # ---------------------------------------------------------------------- 182 | -------------------------------------------------------------------------------- /hpl/README: -------------------------------------------------------------------------------- 1 | Uses hpl-2.2 sources: https://www.netlib.org/benchmark/hpl/hpl-2.2.tar.gz 2 | 3 | 4 | Unpack tarball into /srv/pihome 5 | 6 | ln -s /srv/pihome/hpl /home/pi/hpl 7 | 8 | sudo apt -y install gfortran libopenblas-dev automake openmpi-bin libopenmpi-dev 9 | 10 | Download atlas: 11 | https://downloads.sourceforge.net/project/math-atlas/Stable/3.10.3/atlas3.10.3.tar.bz2 12 | 13 | 14 | Build with 'Make.rpi' makefile: 15 | mv hpl-2.3 hpl 16 | cd hpl 17 | cp /home/pi/terrible_pi/hpl/Make.rpi . 18 | cd setup 19 | sh make_generic 20 | cd .. 21 | make arch=rpi 22 | cd bin/rpi 23 | cp /home/pi/terrible_pi/hpl/run_hpl . 24 | cp /home/pi/terrible_pi/hpl/nodes . 25 | cp /home/pi/terrible_pi/hpl/HPL.dat . 26 | cd 27 | 28 | Copy HPL.dat, run_hpl, and nodes to /srv/pihome/hpl/bin/rpi 29 | 30 | Boot all nodes, then: 31 | pdsh -R ssh -w node[1-4] "sudo apt install openmpi-bin libopenmpi-dev" 32 | 33 | -------------------------------------------------------------------------------- /hpl/nodes: -------------------------------------------------------------------------------- 1 | node1 2 | node2 3 | node3 4 | node4 5 | head 6 | -------------------------------------------------------------------------------- /hpl/run_hpl: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | prep_cmd="sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches; grep MemAv /proc/meminfo; echo performance | tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor '" 3 | eval $prep_cmd 4 | pdsh -R ssh -w node[1-4] $prep_cmd 5 | nohup mpiexec --hostfile nodes ./xhpl >hpl.log 2>&1 & 6 | echo "Started xhpl, log is hpl.log" 7 | -------------------------------------------------------------------------------- /node_init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | BOOTDIR_PATH=`readlink -f $1` 4 | NODE=$2 5 | 6 | UHUBCTL="uhubctl -l 1-1" 7 | RPIBOOT=rpiboot 8 | 9 | 10 | if [ ! -e $BOOTDIR_PATH ]; then 11 | echo "Missing boot dir path" 12 | exit 255 13 | fi 14 | 15 | if [ -z "$NODE" ]; then 16 | echo "Must specify node number" 17 | exit 255 18 | fi 19 | 20 | BOOT_MNTPT=/tmp/boot$NODE 21 | ROOT_MNTPT=/tmp/root$NODE 22 | 23 | rm -rf $BOOT_MNTPT 24 | mkdir $BOOT_MNTPT 25 | 26 | rm -rf $ROOT_MNTPT 27 | mkdir $ROOT_MNTPT 28 | 29 | echo "---Cycling power" 30 | $UHUBCTL -r 4 -p $NODE -a cycle 31 | 32 | echo "---Putting node ${NODE} into USB MSD mode" 33 | $RPIBOOT 34 | 35 | sleep 10 36 | 37 | DISKDEV=`ls -1 /dev/disk/by-path/*usb-[0-9]:[0-9].${NODE}*:0` 38 | echo "---Checking ${DISKDEV}" 39 | 40 | if [ ! -L $DISKDEV ]; then 41 | echo "Could not find mass storage device" 42 | exit 255 43 | fi 44 | 45 | echo -e ",524288,0xC\n,+,L" | sfdisk $DISKDEV 46 | sync 47 | 48 | # tell the kernel that the partitions have changed 49 | partx ${DISKDEV} 50 | 51 | # need to wait for the symlinks to update 52 | sleep 10 53 | sfdisk -l $DISKDEV 54 | sleep 1 55 | ls -l /dev/disk/by-path 56 | 57 | mkdosfs ${DISKDEV}-part1 58 | mkfs.ext4 -F ${DISKDEV}-part2 59 | 60 | mount ${DISKDEV}-part1 $BOOT_MNTPT 61 | mount ${DISKDEV}-part2 $ROOT_MNTPT 62 | 63 | echo "---Untarring boot partition" 64 | tar -C $BOOT_MNTPT -xzf $BOOTDIR_PATH/bootfs.tar.gz 65 | echo "---Untarring root partition" 66 | tar -C $ROOT_MNTPT -xzf $BOOTDIR_PATH/rootfs.tar.gz 67 | 68 | echo "---Fixup hostname for node${NODE}" 69 | sed -i -e "s/raspberrypi/node${NODE}/g" $ROOT_MNTPT/etc/hosts 70 | echo "node${NODE}" > $ROOT_MNTPT/etc/hostname 71 | 72 | echo "---Unmounting filesystems" 73 | umount $BOOT_MNTPT 74 | umount $ROOT_MNTPT 75 | rmdir $BOOT_MNTPT 76 | rmdir $ROOT_MNTPT 77 | sync 78 | 79 | echo "---Done" 80 | -------------------------------------------------------------------------------- /nodeimg_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | IMGLOOP="" 5 | BOOTPART="" 6 | ROOTPART="" 7 | 8 | BOOT=/tmp/boot 9 | ROOT=/tmp/root 10 | 11 | function unmount_cleanup() 12 | { 13 | umount $ROOT 14 | umount $BOOT 15 | rmdir $ROOT 16 | rmdir $BOOT 17 | losetup -d $IMGLOOP 18 | #rm $IMGFILE 19 | } 20 | 21 | if [ -z "$1" ]; then 22 | echo "Must pass a Raspbian .zip file on the command line" 23 | exit 255 24 | fi 25 | 26 | IMGBASENAME=`sed -e "s/\.img\.xz//g" <<< "$1"` 27 | IMGFILE="${IMGBASENAME}.img" 28 | if [ ! -e ${IMGFILE} ]; then 29 | echo "unpacking ${IMGFILE}" 30 | xzcat $1 > ${IMGFILE} 31 | fi 32 | 33 | BOOTDIR="tcboot" 34 | rm -rf $BOOTDIR 35 | mkdir $BOOTDIR 36 | 37 | if [ ! -e $IMGFILE ]; then 38 | echo "Missing Raspbian .img file" 39 | exit 255 40 | fi 41 | 42 | IMGLOOP=`losetup -f` 43 | losetup -P $IMGLOOP $IMGFILE 44 | 45 | echo $IMGLOOP 46 | sync 47 | sleep 10 48 | BOOTPART=${IMGLOOP}p1 49 | ROOTPART=${IMGLOOP}p2 50 | 51 | if [ ! -e $BOOTPART ]; then 52 | 53 | echo "Missing boot partition" 54 | unmount_cleanup 55 | exit 255 56 | fi 57 | 58 | if [ ! -e $ROOTPART ]; then 59 | 60 | echo "Missing root partition" 61 | unmount_cleanup 62 | exit 255 63 | fi 64 | 65 | mkdir -p $BOOT 66 | mkdir -p $ROOT 67 | mount $BOOTPART $BOOT 68 | mount $ROOTPART $ROOT 69 | 70 | # copy boot partition contents to the new remote boot dir 71 | cp -a $BOOT/* $BOOTDIR/. 72 | 73 | # make device specific boot paths 74 | 75 | for F in 1 2 3 4; do 76 | mkdir $BOOTDIR/1-1.$F 77 | cp $BOOTDIR/config.txt $BOOTDIR/cmdline.txt $BOOTDIR/1-1.$F 78 | sed -i -e "s/rootwait.*$/rootwait modules-load=dwc2,g_ether g_ether.dev_addr=68:08:11:55:aa:0${F}/g" $BOOTDIR/1-1.$F/cmdline.txt 79 | sed -i -e "s/PARTUUID=[^ ]*/\/dev\/mmcblk0p2/g" $BOOTDIR/1-1.$F/cmdline.txt 80 | echo "dtoverlay=dwc2" >> $BOOTDIR/1-1.$F/config.txt 81 | done 82 | 83 | ls $BOOTDIR 84 | rm $BOOTDIR/cmdline.txt 85 | rm $BOOTDIR/config.txt 86 | # Use bootcode.bin from the rpiboot distribution 87 | rm $BOOTDIR/bootcode.bin || true 88 | 89 | 90 | echo "---Fixing up root and boot contents" 91 | # clean out the first stage bootloader so we don't accidentally boot 92 | # from SD 93 | ls $BOOT 94 | rm $BOOT/bootcode.bin || true 95 | 96 | # enable SSH 97 | touch $BOOT/ssh 98 | 99 | # preconfigure user 100 | echo -n "$( whoami ):" > $BOOT/userconf.txt 101 | openssl passwd -6 "terrible" >> $BOOT/userconf.txt 102 | 103 | # disable host key checking for the nodes 104 | echo 'Host "node?"' >> $ROOT/etc/ssh/ssh_config 105 | echo ' StrictHostKeyChecking no' >> $ROOT/etc/ssh/ssh_config 106 | echo ' UserKnownHostsFile /dev/null' >> $ROOT/etc/ssh/ssh_config 107 | echo ' IdentityFile /srv/pihome/.ssh/terrible.rsa' >> $ROOT/etc/ssh/ssh_config 108 | echo "Host \"$( hostname )\"" >> $ROOT/etc/ssh/ssh_config 109 | echo ' StrictHostKeyChecking no' >> $ROOT/etc/ssh/ssh_config 110 | echo ' UserKnownHostsFile /dev/null' >> $ROOT/etc/ssh/ssh_config 111 | echo ' IdentityFile /srv/pihome/.ssh/terrible.rsa' >> $ROOT/etc/ssh/ssh_config 112 | 113 | # set jumbo frames on the USB network interface 114 | mkdir -p $ROOT/etc/network/interfaces.d 115 | echo 'auto usb0' > $ROOT/etc/network/interfaces.d/usb0 116 | echo 'allow-hotplug usb0' >> $ROOT/etc/network/interfaces.d/usb0 117 | echo ' iface usb0 inet dhcp' >> $ROOT/etc/network/interfaces.d/usb0 118 | echo ' post-up ifconfig usb0 mtu 15000' >> $ROOT/etc/network/interfaces.d/usb0 119 | 120 | # add hostnames for all nodes to the node hosts file 121 | for N in 1 2 3 4; do 122 | echo "10.1.1.10${N} node${N}" >> $ROOT/etc/hosts 123 | done 124 | echo "10.1.1.1 `hostname`" >> $ROOT/etc/hosts 125 | 126 | # set up home dir nfs mount 127 | echo "head:/srv/pihome /home/$( whoami ) nfs defaults,noatime,nolock,x-systemd.automount 0 0" >> $ROOT/etc/fstab 128 | 129 | touch $ROOT/etc/rc.local 130 | # disable HDMI on boot 131 | sed -i -e "$ i /usr/bin/tvservice -o" $ROOT/etc/rc.local 132 | 133 | # make LED show the heartbeat 134 | sed -i -e "$ i echo heartbeat > /sys/class/leds/led0/trigger" $ROOT/etc/rc.local 135 | 136 | # switch fstab to using mmcblk partitions 137 | sed -i -e "s/PARTUUID=[^ \t]*\([12][ \t]\)/\/dev\/mmcblk0p\1/g" $ROOT/etc/fstab 138 | 139 | echo "---Tarring up the filesystems" 140 | tar -czp -C $ROOT -f $BOOTDIR/rootfs.tar.gz . 141 | tar -czp -C $BOOT -f $BOOTDIR/bootfs.tar.gz . 142 | 143 | echo "---Fixing perms for the boot dir" 144 | chown -R $( whoami ) $BOOTDIR 145 | 146 | unmount_cleanup 147 | -------------------------------------------------------------------------------- /setup_head.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | CFUSER=`whoami` 5 | 6 | sudo apt update && sudo apt upgrade -y 7 | sudo apt install -y libusb-1.0-0-dev nfs-kernel-server git \ 8 | pdsh udhcpd iptables bridge-utils screen vim-nox \ 9 | xz-utils 10 | sudo apt remove -y vim-tiny 11 | 12 | cd 13 | git clone --depth=1 https://github.com/mvp/uhubctl.git 14 | pushd uhubctl 15 | make 16 | sudo cp uhubctl /usr/local/bin/. 17 | sudo chown root:root /usr/local/bin/uhubctl 18 | popd 19 | 20 | git clone --depth=1 https://github.com/raspberrypi/usbboot.git 21 | pushd usbboot 22 | make 23 | sudo cp rpiboot /usr/local/bin/. 24 | sudo mkdir -p /usr/share/rpiboot 25 | sudo cp -a msd /usr/share/rpiboot 26 | sudo chown -R root:root /usr/share/rpiboot 27 | sudo chown -R root:root /usr/local/bin/rpiboot 28 | popd 29 | 30 | git clone --depth=1 https://github.com/al177/terrible-pi.git 31 | 32 | rm terrible-pi/etc/hosts 33 | rm terrible-pi/etc/hostname 34 | sudo chown -R root:root /home/${CFUSER}/terrible-pi/etc 35 | sudo cp -a /home/${CFUSER}/terrible-pi/etc/* /etc/. 36 | sudo sh -c 'echo -e "\n127.0.1.2 head\n10.1.1.101 node1\n10.1.1.102 node2\n10.1.1.103 node3\n10.1.1.104 node4\n" >> /etc/hosts' 37 | 38 | sudo systemctl enable udhcpd 39 | sudo systemctl enable rpcbind 40 | sudo systemctl enable nfs-kernel-server 41 | 42 | sudo mkdir -p /srv/pihome 43 | sudo chown ${CFUSER}:${CFUSER} /srv/pihome 44 | chmod 755 /srv/pihome 45 | mkdir -p /srv/pihome/.ssh 46 | chmod 700 /srv/pihome/.ssh 47 | 48 | ssh-keygen -t rsa -f /srv/pihome/.ssh/terrible.rsa -N "" 49 | cp /srv/pihome/.ssh/terrible.rsa.pub /srv/pihome/.ssh/authorized_keys 50 | chmod 600 /srv/pihome/.ssh/authorized_keys 51 | #mkdir -p ~/.ssh 52 | #chmod 700 ~/.ssh 53 | cp /srv/pihome/.ssh/terrible.rsa ~/.ssh/. 54 | 55 | wget --trust-server-names https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2025-05-13/2025-05-13-raspios-bookworm-armhf-lite.img.xz 56 | 57 | sudo reboot 58 | -------------------------------------------------------------------------------- /terrible_pcb/LICENSE: -------------------------------------------------------------------------------- 1 | Attribution 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution 4.0 International Public License 58 | 59 | By exercising the Licensed Rights (defined below), You accept and agree 60 | to be bound by the terms and conditions of this Creative Commons 61 | Attribution 4.0 International Public License ("Public License"). To the 62 | extent this Public License may be interpreted as a contract, You are 63 | granted the Licensed Rights in consideration of Your acceptance of 64 | these terms and conditions, and the Licensor grants You such rights in 65 | consideration of benefits the Licensor receives from making the 66 | Licensed Material available under these terms and conditions. 67 | 68 | 69 | Section 1 -- Definitions. 70 | 71 | a. Adapted Material means material subject to Copyright and Similar 72 | Rights that is derived from or based upon the Licensed Material 73 | and in which the Licensed Material is translated, altered, 74 | arranged, transformed, or otherwise modified in a manner requiring 75 | permission under the Copyright and Similar Rights held by the 76 | Licensor. For purposes of this Public License, where the Licensed 77 | Material is a musical work, performance, or sound recording, 78 | Adapted Material is always produced where the Licensed Material is 79 | synched in timed relation with a moving image. 80 | 81 | b. Adapter's License means the license You apply to Your Copyright 82 | and Similar Rights in Your contributions to Adapted Material in 83 | accordance with the terms and conditions of this Public License. 84 | 85 | c. Copyright and Similar Rights means copyright and/or similar rights 86 | closely related to copyright including, without limitation, 87 | performance, broadcast, sound recording, and Sui Generis Database 88 | Rights, without regard to how the rights are labeled or 89 | categorized. For purposes of this Public License, the rights 90 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 91 | Rights. 92 | 93 | d. Effective Technological Measures means those measures that, in the 94 | absence of proper authority, may not be circumvented under laws 95 | fulfilling obligations under Article 11 of the WIPO Copyright 96 | Treaty adopted on December 20, 1996, and/or similar international 97 | agreements. 98 | 99 | e. Exceptions and Limitations means fair use, fair dealing, and/or 100 | any other exception or limitation to Copyright and Similar Rights 101 | that applies to Your use of the Licensed Material. 102 | 103 | f. Licensed Material means the artistic or literary work, database, 104 | or other material to which the Licensor applied this Public 105 | License. 106 | 107 | g. Licensed Rights means the rights granted to You subject to the 108 | terms and conditions of this Public License, which are limited to 109 | all Copyright and Similar Rights that apply to Your use of the 110 | Licensed Material and that the Licensor has authority to license. 111 | 112 | h. Licensor means the individual(s) or entity(ies) granting rights 113 | under this Public License. 114 | 115 | i. Share means to provide material to the public by any means or 116 | process that requires permission under the Licensed Rights, such 117 | as reproduction, public display, public performance, distribution, 118 | dissemination, communication, or importation, and to make material 119 | available to the public including in ways that members of the 120 | public may access the material from a place and at a time 121 | individually chosen by them. 122 | 123 | j. Sui Generis Database Rights means rights other than copyright 124 | resulting from Directive 96/9/EC of the European Parliament and of 125 | the Council of 11 March 1996 on the legal protection of databases, 126 | as amended and/or succeeded, as well as other essentially 127 | equivalent rights anywhere in the world. 128 | 129 | k. You means the individual or entity exercising the Licensed Rights 130 | under this Public License. Your has a corresponding meaning. 131 | 132 | 133 | Section 2 -- Scope. 134 | 135 | a. License grant. 136 | 137 | 1. Subject to the terms and conditions of this Public License, 138 | the Licensor hereby grants You a worldwide, royalty-free, 139 | non-sublicensable, non-exclusive, irrevocable license to 140 | exercise the Licensed Rights in the Licensed Material to: 141 | 142 | a. reproduce and Share the Licensed Material, in whole or 143 | in part; and 144 | 145 | b. produce, reproduce, and Share Adapted Material. 146 | 147 | 2. Exceptions and Limitations. For the avoidance of doubt, where 148 | Exceptions and Limitations apply to Your use, this Public 149 | License does not apply, and You do not need to comply with 150 | its terms and conditions. 151 | 152 | 3. Term. The term of this Public License is specified in Section 153 | 6(a). 154 | 155 | 4. Media and formats; technical modifications allowed. The 156 | Licensor authorizes You to exercise the Licensed Rights in 157 | all media and formats whether now known or hereafter created, 158 | and to make technical modifications necessary to do so. The 159 | Licensor waives and/or agrees not to assert any right or 160 | authority to forbid You from making technical modifications 161 | necessary to exercise the Licensed Rights, including 162 | technical modifications necessary to circumvent Effective 163 | Technological Measures. For purposes of this Public License, 164 | simply making modifications authorized by this Section 2(a) 165 | (4) never produces Adapted Material. 166 | 167 | 5. Downstream recipients. 168 | 169 | a. Offer from the Licensor -- Licensed Material. Every 170 | recipient of the Licensed Material automatically 171 | receives an offer from the Licensor to exercise the 172 | Licensed Rights under the terms and conditions of this 173 | Public License. 174 | 175 | b. No downstream restrictions. You may not offer or impose 176 | any additional or different terms or conditions on, or 177 | apply any Effective Technological Measures to, the 178 | Licensed Material if doing so restricts exercise of the 179 | Licensed Rights by any recipient of the Licensed 180 | Material. 181 | 182 | 6. No endorsement. Nothing in this Public License constitutes or 183 | may be construed as permission to assert or imply that You 184 | are, or that Your use of the Licensed Material is, connected 185 | with, or sponsored, endorsed, or granted official status by, 186 | the Licensor or others designated to receive attribution as 187 | provided in Section 3(a)(1)(A)(i). 188 | 189 | b. Other rights. 190 | 191 | 1. Moral rights, such as the right of integrity, are not 192 | licensed under this Public License, nor are publicity, 193 | privacy, and/or other similar personality rights; however, to 194 | the extent possible, the Licensor waives and/or agrees not to 195 | assert any such rights held by the Licensor to the limited 196 | extent necessary to allow You to exercise the Licensed 197 | Rights, but not otherwise. 198 | 199 | 2. Patent and trademark rights are not licensed under this 200 | Public License. 201 | 202 | 3. To the extent possible, the Licensor waives any right to 203 | collect royalties from You for the exercise of the Licensed 204 | Rights, whether directly or through a collecting society 205 | under any voluntary or waivable statutory or compulsory 206 | licensing scheme. In all other cases the Licensor expressly 207 | reserves any right to collect such royalties. 208 | 209 | 210 | Section 3 -- License Conditions. 211 | 212 | Your exercise of the Licensed Rights is expressly made subject to the 213 | following conditions. 214 | 215 | a. Attribution. 216 | 217 | 1. If You Share the Licensed Material (including in modified 218 | form), You must: 219 | 220 | a. retain the following if it is supplied by the Licensor 221 | with the Licensed Material: 222 | 223 | i. identification of the creator(s) of the Licensed 224 | Material and any others designated to receive 225 | attribution, in any reasonable manner requested by 226 | the Licensor (including by pseudonym if 227 | designated); 228 | 229 | ii. a copyright notice; 230 | 231 | iii. a notice that refers to this Public License; 232 | 233 | iv. a notice that refers to the disclaimer of 234 | warranties; 235 | 236 | v. a URI or hyperlink to the Licensed Material to the 237 | extent reasonably practicable; 238 | 239 | b. indicate if You modified the Licensed Material and 240 | retain an indication of any previous modifications; and 241 | 242 | c. indicate the Licensed Material is licensed under this 243 | Public License, and include the text of, or the URI or 244 | hyperlink to, this Public License. 245 | 246 | 2. You may satisfy the conditions in Section 3(a)(1) in any 247 | reasonable manner based on the medium, means, and context in 248 | which You Share the Licensed Material. For example, it may be 249 | reasonable to satisfy the conditions by providing a URI or 250 | hyperlink to a resource that includes the required 251 | information. 252 | 253 | 3. If requested by the Licensor, You must remove any of the 254 | information required by Section 3(a)(1)(A) to the extent 255 | reasonably practicable. 256 | 257 | 4. If You Share Adapted Material You produce, the Adapter's 258 | License You apply must not prevent recipients of the Adapted 259 | Material from complying with this Public License. 260 | 261 | 262 | Section 4 -- Sui Generis Database Rights. 263 | 264 | Where the Licensed Rights include Sui Generis Database Rights that 265 | apply to Your use of the Licensed Material: 266 | 267 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 268 | to extract, reuse, reproduce, and Share all or a substantial 269 | portion of the contents of the database; 270 | 271 | b. if You include all or a substantial portion of the database 272 | contents in a database in which You have Sui Generis Database 273 | Rights, then the database in which You have Sui Generis Database 274 | Rights (but not its individual contents) is Adapted Material; and 275 | 276 | c. You must comply with the conditions in Section 3(a) if You Share 277 | all or a substantial portion of the contents of the database. 278 | 279 | For the avoidance of doubt, this Section 4 supplements and does not 280 | replace Your obligations under this Public License where the Licensed 281 | Rights include other Copyright and Similar Rights. 282 | 283 | 284 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 285 | 286 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 287 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 288 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 289 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 290 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 291 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 292 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 293 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 294 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 295 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 296 | 297 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 298 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 299 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 300 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 301 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 302 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 303 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 304 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 305 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 306 | 307 | c. The disclaimer of warranties and limitation of liability provided 308 | above shall be interpreted in a manner that, to the extent 309 | possible, most closely approximates an absolute disclaimer and 310 | waiver of all liability. 311 | 312 | 313 | Section 6 -- Term and Termination. 314 | 315 | a. This Public License applies for the term of the Copyright and 316 | Similar Rights licensed here. However, if You fail to comply with 317 | this Public License, then Your rights under this Public License 318 | terminate automatically. 319 | 320 | b. Where Your right to use the Licensed Material has terminated under 321 | Section 6(a), it reinstates: 322 | 323 | 1. automatically as of the date the violation is cured, provided 324 | it is cured within 30 days of Your discovery of the 325 | violation; or 326 | 327 | 2. upon express reinstatement by the Licensor. 328 | 329 | For the avoidance of doubt, this Section 6(b) does not affect any 330 | right the Licensor may have to seek remedies for Your violations 331 | of this Public License. 332 | 333 | c. For the avoidance of doubt, the Licensor may also offer the 334 | Licensed Material under separate terms or conditions or stop 335 | distributing the Licensed Material at any time; however, doing so 336 | will not terminate this Public License. 337 | 338 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 339 | License. 340 | 341 | 342 | Section 7 -- Other Terms and Conditions. 343 | 344 | a. The Licensor shall not be bound by any additional or different 345 | terms or conditions communicated by You unless expressly agreed. 346 | 347 | b. Any arrangements, understandings, or agreements regarding the 348 | Licensed Material not stated herein are separate from and 349 | independent of the terms and conditions of this Public License. 350 | 351 | 352 | Section 8 -- Interpretation. 353 | 354 | a. For the avoidance of doubt, this Public License does not, and 355 | shall not be interpreted to, reduce, limit, restrict, or impose 356 | conditions on any use of the Licensed Material that could lawfully 357 | be made without permission under this Public License. 358 | 359 | b. To the extent possible, if any provision of this Public License is 360 | deemed unenforceable, it shall be automatically reformed to the 361 | minimum extent necessary to make it enforceable. If the provision 362 | cannot be reformed, it shall be severed from this Public License 363 | without affecting the enforceability of the remaining terms and 364 | conditions. 365 | 366 | c. No term or condition of this Public License will be waived and no 367 | failure to comply consented to unless expressly agreed to by the 368 | Licensor. 369 | 370 | d. Nothing in this Public License constitutes or may be interpreted 371 | as a limitation upon, or waiver of, any privileges and immunities 372 | that apply to the Licensor or You, including from the legal 373 | processes of any jurisdiction or authority. 374 | 375 | 376 | ======================================================================= 377 | 378 | Creative Commons is not a party to its public licenses. 379 | Notwithstanding, Creative Commons may elect to apply one of its public 380 | licenses to material it publishes and in those instances will be 381 | considered the "Licensor." Except for the limited purpose of indicating 382 | that material is shared under a Creative Commons public license or as 383 | otherwise permitted by the Creative Commons policies published at 384 | creativecommons.org/policies, Creative Commons does not authorize the 385 | use of the trademark "Creative Commons" or any other trademark or logo 386 | of Creative Commons without its prior written consent including, 387 | without limitation, in connection with any unauthorized modifications 388 | to any of its public licenses or any other arrangements, 389 | understandings, or agreements concerning use of licensed material. For 390 | the avoidance of doubt, this paragraph does not form part of the public 391 | licenses. 392 | 393 | Creative Commons may be contacted at creativecommons.org. 394 | 395 | -------------------------------------------------------------------------------- /terrible_pcb/README: -------------------------------------------------------------------------------- 1 | Hardware design for the Terrible Cluster. 2 | 3 | 1) Backplane board 4 | 5 | terrible.pro is the KiCad project for the Terrible Cluster backplane board. All components needed to create fabbable output are in this project, however due to license restrictions the 3D models needed to render the assembly are not included. 6 | 7 | Pre-built gerbers for the v0.1 release of the board are in the directory gerber_v0.1. These are fab-ready and can be zipped and sent off as-is. 8 | 9 | terrible_v1a_bom.csv is a CSV format BOM for the backplane. It can be imported to a Digi-Key cart for convenience. 10 | 11 | BOM history 12 | ----------- 13 | v1 - Initial BOM for PCB v0.1 14 | v1a - Corrected microUSB B to match the current footprint, add insulator 15 | spacer for crystal Y1 16 | 17 | After assembling the backplane, flush cut all of the through hole pins to under 1mm, or it may not fit in the case. 18 | 19 | 2) Case 20 | 21 | terrible_case.scad is an OpenSCAD model for a 3D printed enclosure for the Terrible Cluster. It is a single piece into which the backplane and Zero nodes can slide. A 40mm x 40mm x 10mm 5V fan is friction-fit into the open end, and provides cooling for the cluster. The cluster board assembly is held in place by a piece of 1.75mm filament fed through holes at the open side of the backplane PCB channel. 22 | 23 | terrible_case.stl is a printable file for the case rendered from terrible_case.scad. This case is sensitive to printer tolerances, so if parts of the case print too tight or loose, it may be necessary to customize the SCAD file and regenerate the .stl. 24 | 25 | The fan is wired to the two pin power pads on the backplane. A 2x1 0.1" right angle header can be soldered to the pads, and a matching plug attached to the fan leads if desired, or the fan can be soldered directly to the pads. Care should be taken to reduce slack in the fan cable to prevent any loose wire from interfering with the fan. 26 | 27 | When sliding the cluster into the case, it may be necessary to move the Zeros side to side to get them to all fit in the slot cutouts. It should not take much force to get the backplane to slide in all the way. 28 | 29 | After the cluster is in the case, feed a piece of 1.75mm filament through both holes towards the back of the case. Use flush cutters to clip the filament even with the side of the case on both sides. This will prevent the cluster from sliding backwards into the fan, especially when inserting a microUSB power cable. To take apart the cluster, push the filament through with a paperclip and pull it out from the other side. 30 | 31 | The fan uses a friction fit to hold it in the back of the case. Exact outer dimensions of these fans can vary slightly, so the fan cutout is intentionally slightly oversized. Use a piece of folded paper or layers of tape on one side of the fan as a shim to secure the fan. 32 | 33 | The SCAD file can render the case alone in an orientation for printing, or render the case along with a model of the cluster and the fan to show the finished cluster. Set "PRODUCTION=true" near the top of the SCAD to render for printing, and "PRODUCTION=false" to render the internal parts as well. 34 | 35 | 3) Cluster model 36 | 37 | terrible.scad is an OpenSCAD model of the backplane board and the Raspberry Pi Zeros. It is used as part of the case model for checking fitment and to render a completed Terrible Cluster. Load it into OpenSCAD on its own to render the cluster boards. 38 | 39 | 40 | 41 | Attributions: 42 | 43 | -Raspberry Pi Zero model by MisterC from https://www.thingiverse.com/thing:1638529 for the 3D model. 44 | 45 | -OpenSCAD parametric fan model by GelatinousSlime from https://www.thingiverse.com/thing:625905 for the case model. 46 | -------------------------------------------------------------------------------- /terrible_pcb/ap2191dwg.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # AP2181DWG 5 | # 6 | DEF AP2181DWG U 0 40 Y Y 1 F N 7 | F0 "U" 0 -150 60 H V C CNN 8 | F1 "AP2181DWG" 0 250 60 H V C CNN 9 | F2 "" 0 0 60 H I C CNN 10 | F3 "" 0 0 60 H I C CNN 11 | $FPLIST 12 | sot-25 13 | $ENDFPLIST 14 | DRAW 15 | S -450 550 450 -450 0 1 0 N 16 | X OUT 1 650 450 200 L 50 50 1 1 w 17 | X GND 2 0 -650 200 U 50 50 1 1 P 18 | X /FLG 3 -650 50 200 R 50 50 1 1 P 19 | X /EN 4 -650 -350 200 R 50 50 1 1 I 20 | X IN 5 -650 450 200 R 50 50 1 1 W 21 | ENDDRAW 22 | ENDDEF 23 | # 24 | # AP2191DWG 25 | # 26 | DEF AP2191DWG U 0 40 Y Y 1 F N 27 | F0 "U" 0 -150 60 H V C CNN 28 | F1 "AP2191DWG" 0 250 60 H V C CNN 29 | F2 "" 0 0 60 H I C CNN 30 | F3 "" 0 0 60 H I C CNN 31 | $FPLIST 32 | sot-25 33 | $ENDFPLIST 34 | DRAW 35 | S -450 550 450 -450 0 1 0 N 36 | X OUT 1 650 450 200 L 50 50 1 1 w 37 | X GND 2 0 -650 200 U 50 50 1 1 P 38 | X /FLG 3 -650 50 200 R 50 50 1 1 T 39 | X EN 4 -650 -350 200 R 50 50 1 1 I 40 | X IN 5 -650 450 200 R 50 50 1 1 W 41 | ENDDRAW 42 | ENDDEF 43 | # 44 | #End Library 45 | -------------------------------------------------------------------------------- /terrible_pcb/cy7c65632-48.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # CY7C65632-48 5 | # 6 | DEF CY7C65632-48 U 0 40 Y Y 1 F N 7 | F0 "U" 0 1100 60 H V C CNN 8 | F1 "CY7C65632-48" 0 -700 60 H V C CNN 9 | F2 "" 0 -100 60 H I C CNN 10 | F3 "" 0 -100 60 H I C CNN 11 | DRAW 12 | S -1200 1900 1150 -1800 0 1 0 N 13 | X VCC_A 1 -200 2100 200 D 50 50 1 1 W 14 | X GND 2 -300 -2000 200 U 50 50 1 1 P 15 | X D- 3 -1400 1400 200 R 50 50 1 1 B 16 | X D+ 4 -1400 1300 200 R 50 50 1 1 B 17 | X DD-[1] 5 1350 850 200 L 50 50 1 1 B 18 | X DD+[1] 6 1350 750 200 L 50 50 1 1 B 19 | X VCC_A 7 0 2100 200 D 50 50 1 1 W 20 | X GND 8 -100 -2000 200 U 50 50 1 1 P 21 | X DD-[2] 9 1350 250 200 L 50 50 1 1 B 22 | X DD+[2] 10 1350 150 200 L 50 50 1 1 B 23 | X GND 20 300 -2000 200 U 50 50 1 1 P 24 | X OVR#[3] 30 1350 -150 200 L 50 50 1 1 B 25 | X OVR#[2] 40 1350 450 200 L 50 50 1 1 B 26 | X RREF 11 -1400 -1400 200 R 50 50 1 1 P 27 | X DD-[4] 21 1350 -1000 200 L 50 50 1 1 P 28 | X PWR#[3] 31 1350 -250 200 L 50 50 1 1 B 29 | X PWR#[2] 41 1350 350 200 L 50 50 1 1 B 30 | X VCC_A 12 200 2100 200 D 50 50 1 1 W 31 | X DD+[4] 22 1350 -1100 200 L 50 50 1 1 P 32 | X GREEN[3]/FIXED_PORT3 32 -1400 100 200 R 50 50 1 1 B 33 | X OVR#[1] 42 1350 1050 200 L 50 50 1 1 B 34 | X GND 13 100 -2000 200 U 50 50 1 1 P 35 | X GREEN[4]/FIXED_PORT4 23 -1400 -100 200 R 50 50 1 1 B 36 | X AMBER[3]/SET_PORT_NUM2 33 -1400 0 200 R 50 50 1 1 B 37 | X PWR#[1]/I2C_SDA 43 1350 950 200 L 50 50 1 1 B 38 | X XIN 14 -1400 1000 200 R 50 50 1 1 P 39 | X AMBER[4]/SET_PORT_NUM1 24 -1400 -200 200 R 50 50 1 1 B 40 | X VCC_D 34 800 2100 200 D 50 50 1 1 W 41 | X SEL27 44 -1400 -600 200 R 50 50 1 1 B 42 | X XOUT 15 -1400 900 200 R 50 50 1 1 P 43 | X SEL48 25 -1400 -700 200 R 50 50 1 1 B 44 | X GREEN[2]/SPI_MISO/FIXED_PORT2 35 -1400 300 200 R 50 50 1 1 B 45 | X GREEN[1]/SPI_SK/FIXED_PORT1 45 -1400 500 200 R 50 50 1 1 B 46 | X VCC_A 16 400 2100 200 D 50 50 1 1 W 47 | X RESET# 26 -1400 -1000 200 R 50 50 1 1 B 48 | X AMBER[2]/SPI_MOSI/PWR_PIN_POL 36 -1400 200 200 R 50 50 1 1 B 49 | X AMBER[1]/SPI_CS 46 -1400 400 200 R 50 50 1 1 B 50 | X DD-[3] 17 1350 -350 200 L 50 50 1 1 B 51 | X TEST/SCL 27 -1400 -800 200 R 50 50 1 1 B 52 | X SELFPWR 37 -1400 -400 200 R 50 50 1 1 B 53 | X VCC 47 -850 2100 200 D 50 50 1 1 W 54 | X DD+[3] 18 1350 -450 200 L 50 50 1 1 B 55 | X OVR#[4] 28 1350 -800 200 L 50 50 1 1 B 56 | X VCC_D 38 1000 2100 200 D 50 50 1 1 W 57 | X VREG 48 1350 1300 200 L 50 50 1 1 w 58 | X VCC_A 19 600 2100 200 D 50 50 1 1 W 59 | X PWR#[4] 29 1350 -900 200 L 50 50 1 1 B 60 | X GANG 39 -1400 -500 200 R 50 50 1 1 B 61 | ENDDRAW 62 | ENDDEF 63 | # 64 | #End Library 65 | -------------------------------------------------------------------------------- /terrible_pcb/gerber_v0.1/terrible-B.Mask.gbs: -------------------------------------------------------------------------------- 1 | G04 #@! TF.FileFunction,Soldermask,Bot* 2 | %FSLAX46Y46*% 3 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 4 | G04 Created by KiCad (PCBNEW 4.0.4+dfsg1-stable) date Sun Aug 27 23:53:47 2017* 5 | %MOMM*% 6 | %LPD*% 7 | G01* 8 | G04 APERTURE LIST* 9 | %ADD10C,0.100000*% 10 | %ADD11C,1.500000*% 11 | %ADD12O,2.000000X1.400000*% 12 | %ADD13R,2.432000X2.432000*% 13 | %ADD14O,2.432000X2.432000*% 14 | %ADD15C,1.700000*% 15 | %ADD16R,1.700000X1.700000*% 16 | %ADD17O,1.650000X1.350000*% 17 | %ADD18O,1.400000X1.950000*% 18 | %ADD19C,1.822400*% 19 | G04 APERTURE END LIST* 20 | D10* 21 | D11* 22 | X117225000Y-100000000D03* 23 | X118775000Y-100650000D03* 24 | X117225000Y-101300000D03* 25 | X118775000Y-99350000D03* 26 | X117225000Y-98700000D03* 27 | D12* 28 | X118000000Y-95900000D03* 29 | X118000000Y-104100000D03* 30 | D13* 31 | X99800000Y-137100000D03* 32 | D14* 33 | X97260000Y-137100000D03* 34 | D11* 35 | X105225000Y-100000000D03* 36 | X106775000Y-100650000D03* 37 | X105225000Y-101300000D03* 38 | X106775000Y-99350000D03* 39 | X105225000Y-98700000D03* 40 | D12* 41 | X106000000Y-95900000D03* 42 | X106000000Y-104100000D03* 43 | D11* 44 | X99225000Y-100000000D03* 45 | X100775000Y-100650000D03* 46 | X99225000Y-101300000D03* 47 | X100775000Y-99350000D03* 48 | X99225000Y-98700000D03* 49 | D12* 50 | X100000000Y-95900000D03* 51 | X100000000Y-104100000D03* 52 | D11* 53 | X111225000Y-100000000D03* 54 | X112775000Y-100650000D03* 55 | X111225000Y-101300000D03* 56 | X112775000Y-99350000D03* 57 | X111225000Y-98700000D03* 58 | D12* 59 | X112000000Y-95900000D03* 60 | X112000000Y-104100000D03* 61 | D11* 62 | X123225000Y-100000000D03* 63 | X124775000Y-100650000D03* 64 | X123225000Y-101300000D03* 65 | X124775000Y-99350000D03* 66 | X123225000Y-98700000D03* 67 | D12* 68 | X124000000Y-95900000D03* 69 | X124000000Y-104100000D03* 70 | D15* 71 | X125500000Y-90000000D03* 72 | D16* 73 | X123000000Y-90000000D03* 74 | D15* 75 | X98500000Y-90000000D03* 76 | D16* 77 | X96000000Y-90000000D03* 78 | D15* 79 | X107500000Y-90000000D03* 80 | D16* 81 | X105000000Y-90000000D03* 82 | D15* 83 | X116500000Y-90000000D03* 84 | D16* 85 | X114000000Y-90000000D03* 86 | D17* 87 | X108029100Y-137637460D03* 88 | X113029100Y-137637460D03* 89 | D18* 90 | X107029100Y-140337460D03* 91 | X114029100Y-140337460D03* 92 | D19* 93 | X102930960Y-113014760D03* 94 | X102930960Y-118094760D03* 95 | M02* 96 | -------------------------------------------------------------------------------- /terrible_pcb/gerber_v0.1/terrible-Edge.Cuts.gm1: -------------------------------------------------------------------------------- 1 | G04 #@! TF.FileFunction,Profile,NP* 2 | %FSLAX46Y46*% 3 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 4 | G04 Created by KiCad (PCBNEW 4.0.4+dfsg1-stable) date Sun Aug 27 23:53:47 2017* 5 | %MOMM*% 6 | %LPD*% 7 | G01* 8 | G04 APERTURE LIST* 9 | %ADD10C,0.100000*% 10 | %ADD11C,0.200000*% 11 | G04 APERTURE END LIST* 12 | D10* 13 | D11* 14 | X129540000Y-141732000D02* 15 | X129540000Y-76454000D01* 16 | X91520000Y-76454000D02* 17 | X91520000Y-141732000D01* 18 | X91520000Y-141732000D02* 19 | X129540000Y-141732000D01* 20 | X91520000Y-76454000D02* 21 | X129540000Y-76454000D01* 22 | M02* 23 | -------------------------------------------------------------------------------- /terrible_pcb/gerber_v0.1/terrible-F.Mask.gts: -------------------------------------------------------------------------------- 1 | G04 #@! TF.FileFunction,Soldermask,Top* 2 | %FSLAX46Y46*% 3 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 4 | G04 Created by KiCad (PCBNEW 4.0.4+dfsg1-stable) date Sun Aug 27 23:53:47 2017* 5 | %MOMM*% 6 | %LPD*% 7 | G01* 8 | G04 APERTURE LIST* 9 | %ADD10C,0.100000*% 10 | %ADD11C,1.500000*% 11 | %ADD12O,2.000000X1.400000*% 12 | %ADD13R,1.600000X1.150000*% 13 | %ADD14R,1.050000X1.460000*% 14 | %ADD15R,2.432000X2.432000*% 15 | %ADD16O,2.432000X2.432000*% 16 | %ADD17R,1.300000X1.600000*% 17 | %ADD18R,1.600000X1.300000*% 18 | %ADD19R,0.650000X1.700000*% 19 | %ADD20R,1.700000X0.650000*% 20 | %ADD21R,1.150000X1.600000*% 21 | %ADD22C,1.700000*% 22 | %ADD23R,1.700000X1.700000*% 23 | %ADD24R,0.800000X1.750000*% 24 | %ADD25O,1.650000X1.350000*% 25 | %ADD26O,1.400000X1.950000*% 26 | %ADD27C,1.822400*% 27 | %ADD28R,1.650000X1.900000*% 28 | G04 APERTURE END LIST* 29 | D10* 30 | D11* 31 | X117225000Y-100000000D03* 32 | X118775000Y-100650000D03* 33 | X117225000Y-101300000D03* 34 | X118775000Y-99350000D03* 35 | X117225000Y-98700000D03* 36 | D12* 37 | X118000000Y-95900000D03* 38 | X118000000Y-104100000D03* 39 | D13* 40 | X109758520Y-121920000D03* 41 | X107858520Y-121920000D03* 42 | D14* 43 | X105050000Y-84600000D03* 44 | X106000000Y-84600000D03* 45 | X106950000Y-84600000D03* 46 | X106950000Y-82400000D03* 47 | X105050000Y-82400000D03* 48 | X96050000Y-84600000D03* 49 | X97000000Y-84600000D03* 50 | X97950000Y-84600000D03* 51 | X97950000Y-82400000D03* 52 | X96050000Y-82400000D03* 53 | X123050000Y-84600000D03* 54 | X124000000Y-84600000D03* 55 | X124950000Y-84600000D03* 56 | X124950000Y-82400000D03* 57 | X123050000Y-82400000D03* 58 | X114050000Y-84600000D03* 59 | X115000000Y-84600000D03* 60 | X115950000Y-84600000D03* 61 | X115950000Y-82400000D03* 62 | X114050000Y-82400000D03* 63 | D15* 64 | X99800000Y-137100000D03* 65 | D16* 66 | X97260000Y-137100000D03* 67 | D17* 68 | X126800000Y-82225000D03* 69 | X126800000Y-84425000D03* 70 | X117750000Y-82225000D03* 71 | X117750000Y-84425000D03* 72 | X121000000Y-128750000D03* 73 | X121000000Y-126550000D03* 74 | X108750000Y-82225000D03* 75 | X108750000Y-84425000D03* 76 | D18* 77 | X120950000Y-130600000D03* 78 | X118750000Y-130600000D03* 79 | X116600000Y-129275000D03* 80 | X114400000Y-129275000D03* 81 | X109450000Y-131030000D03* 82 | X107250000Y-131030000D03* 83 | D17* 84 | X124225000Y-126550000D03* 85 | X124225000Y-128750000D03* 86 | D18* 87 | X112026880Y-108778040D03* 88 | X109826880Y-108778040D03* 89 | D17* 90 | X99775000Y-82225000D03* 91 | X99775000Y-84425000D03* 92 | X122625000Y-128750000D03* 93 | X122625000Y-126550000D03* 94 | D18* 95 | X126700000Y-118950000D03* 96 | X124500000Y-118950000D03* 97 | X111100000Y-125800000D03* 98 | X113300000Y-125800000D03* 99 | D19* 100 | X120631400Y-115746280D03* 101 | X120131400Y-115746280D03* 102 | X119631400Y-115746280D03* 103 | X119131400Y-115746280D03* 104 | X118631400Y-115746280D03* 105 | X118131400Y-115746280D03* 106 | X117631400Y-115746280D03* 107 | X117131400Y-115746280D03* 108 | X116631400Y-115746280D03* 109 | X116131400Y-115746280D03* 110 | X115631400Y-115746280D03* 111 | X115131400Y-115746280D03* 112 | D20* 113 | X113531400Y-117346280D03* 114 | X113531400Y-117846280D03* 115 | X113531400Y-118346280D03* 116 | X113531400Y-118846280D03* 117 | X113531400Y-119346280D03* 118 | X113531400Y-119846280D03* 119 | X113531400Y-120346280D03* 120 | X113531400Y-120846280D03* 121 | X113531400Y-121346280D03* 122 | X113531400Y-121846280D03* 123 | X113531400Y-122346280D03* 124 | X113531400Y-122846280D03* 125 | D19* 126 | X115131400Y-124446280D03* 127 | X115631400Y-124446280D03* 128 | X116131400Y-124446280D03* 129 | X116631400Y-124446280D03* 130 | X117131400Y-124446280D03* 131 | X117631400Y-124446280D03* 132 | X118131400Y-124446280D03* 133 | X118631400Y-124446280D03* 134 | X119131400Y-124446280D03* 135 | X119631400Y-124446280D03* 136 | X120131400Y-124446280D03* 137 | X120631400Y-124446280D03* 138 | D20* 139 | X122231400Y-122846280D03* 140 | X122231400Y-122346280D03* 141 | X122231400Y-121846280D03* 142 | X122231400Y-121346280D03* 143 | X122231400Y-120846280D03* 144 | X122231400Y-120346280D03* 145 | X122231400Y-119846280D03* 146 | X122231400Y-119346280D03* 147 | X122231400Y-118846280D03* 148 | X122231400Y-118346280D03* 149 | X122231400Y-117846280D03* 150 | X122231400Y-117346280D03* 151 | D11* 152 | X105225000Y-100000000D03* 153 | X106775000Y-100650000D03* 154 | X105225000Y-101300000D03* 155 | X106775000Y-99350000D03* 156 | X105225000Y-98700000D03* 157 | D12* 158 | X106000000Y-95900000D03* 159 | X106000000Y-104100000D03* 160 | D11* 161 | X99225000Y-100000000D03* 162 | X100775000Y-100650000D03* 163 | X99225000Y-101300000D03* 164 | X100775000Y-99350000D03* 165 | X99225000Y-98700000D03* 166 | D12* 167 | X100000000Y-95900000D03* 168 | X100000000Y-104100000D03* 169 | D11* 170 | X111225000Y-100000000D03* 171 | X112775000Y-100650000D03* 172 | X111225000Y-101300000D03* 173 | X112775000Y-99350000D03* 174 | X111225000Y-98700000D03* 175 | D12* 176 | X112000000Y-95900000D03* 177 | X112000000Y-104100000D03* 178 | D11* 179 | X123225000Y-100000000D03* 180 | X124775000Y-100650000D03* 181 | X123225000Y-101300000D03* 182 | X124775000Y-99350000D03* 183 | X123225000Y-98700000D03* 184 | D12* 185 | X124000000Y-95900000D03* 186 | X124000000Y-104100000D03* 187 | D21* 188 | X124200000Y-122825000D03* 189 | X124200000Y-124725000D03* 190 | X119350000Y-126550000D03* 191 | X119350000Y-128450000D03* 192 | X117340380Y-112707460D03* 193 | X117340380Y-110807460D03* 194 | X122862340Y-114945200D03* 195 | X122862340Y-113045200D03* 196 | X109921040Y-118905060D03* 197 | X109921040Y-117005060D03* 198 | X108402120Y-118905060D03* 199 | X108402120Y-117005060D03* 200 | X113579440Y-114969020D03* 201 | X113579440Y-113069020D03* 202 | X112045280Y-114969020D03* 203 | X112045280Y-113069020D03* 204 | D13* 205 | X97800000Y-80500000D03* 206 | X99700000Y-80500000D03* 207 | X98750000Y-106100000D03* 208 | X100650000Y-106100000D03* 209 | X109443590Y-132611730D03* 210 | X107543590Y-132611730D03* 211 | X115750000Y-80500000D03* 212 | X117650000Y-80500000D03* 213 | X104750000Y-106150000D03* 214 | X106650000Y-106150000D03* 215 | D21* 216 | X106608880Y-116966960D03* 217 | X106608880Y-118866960D03* 218 | X106608880Y-114548960D03* 219 | X106608880Y-112648960D03* 220 | D13* 221 | X106750000Y-80500000D03* 222 | X108650000Y-80500000D03* 223 | X110800000Y-106150000D03* 224 | X112700000Y-106150000D03* 225 | X124800000Y-80500000D03* 226 | X126700000Y-80500000D03* 227 | X116800000Y-106100000D03* 228 | X118700000Y-106100000D03* 229 | D22* 230 | X125500000Y-90000000D03* 231 | D23* 232 | X123000000Y-90000000D03* 233 | D22* 234 | X98500000Y-90000000D03* 235 | D23* 236 | X96000000Y-90000000D03* 237 | D22* 238 | X107500000Y-90000000D03* 239 | D23* 240 | X105000000Y-90000000D03* 241 | D22* 242 | X116500000Y-90000000D03* 243 | D23* 244 | X114000000Y-90000000D03* 245 | D24* 246 | X109229100Y-137637460D03* 247 | X109879100Y-137637460D03* 248 | X110529100Y-137637460D03* 249 | X111179100Y-137637460D03* 250 | X111829100Y-137637460D03* 251 | D25* 252 | X108029100Y-137637460D03* 253 | X113029100Y-137637460D03* 254 | D26* 255 | X107029100Y-140337460D03* 256 | X114029100Y-140337460D03* 257 | D27* 258 | X102930960Y-113014760D03* 259 | X102930960Y-118094760D03* 260 | D28* 261 | X124597160Y-115687160D03* 262 | X124597160Y-113187160D03* 263 | X126650000Y-113200000D03* 264 | X126650000Y-115700000D03* 265 | M02* 266 | -------------------------------------------------------------------------------- /terrible_pcb/gerber_v0.1/terrible-drl.txt: -------------------------------------------------------------------------------- 1 | M48 2 | INCH,TZ 3 | T1C0.013 4 | T2C0.020 5 | T3C0.022 6 | T4C0.024 7 | T5C0.028 8 | T6C0.030 9 | T7C0.031 10 | T8C0.040 11 | % 12 | G90 13 | G05 14 | T1 15 | X36417Y-50039 16 | X36437Y-37028 17 | X37402Y-50787 18 | X37480Y-51516 19 | X37598Y-49409 20 | X37795Y-50787 21 | X37992Y-49409 22 | X38189Y-50787 23 | X38297Y-53159 24 | X38327Y-33898 25 | X38366Y-42441 26 | X38386Y-49409 27 | X38583Y-50787 28 | X38780Y-49409 29 | X39242Y-53159 30 | X39311Y-48031 31 | X39518Y-51486 32 | X39811Y-49331 33 | X39843Y-31732 34 | X40039Y-35984 35 | X40148Y-51486 36 | X40354Y-45551 37 | X40453Y-33406 38 | X40610Y-43701 39 | X40787Y-47323 40 | X40886Y-51486 41 | X41142Y-42402 42 | X41329Y-55335 43 | X41358Y-45551 44 | X41358Y-46890 45 | X41467Y-54528 46 | X41575Y-51486 47 | X41654Y-51929 48 | X41732Y-33878 49 | X41791Y-48091 50 | X42382Y-52756 51 | X42690Y-49289 52 | X42972Y-45610 53 | X43012Y-33898 54 | X43130Y-44350 55 | X43150Y-42283 56 | X43228Y-43268 57 | X43307Y-31358 58 | X43693Y-51862 59 | X44094Y-43937 60 | X44213Y-32303 61 | X44232Y-48642 62 | X44232Y-52461 63 | X44476Y-50815 64 | X44685Y-45906 65 | X45264Y-49587 66 | X45277Y-47641 67 | X45384Y-48081 68 | X45531Y-33917 69 | X45807Y-46998 70 | X45997Y-46080 71 | X46201Y-43031 72 | X46260Y-51417 73 | X46535Y-50807 74 | X46620Y-46081 75 | X46890Y-31693 76 | X47008Y-46063 77 | X47008Y-46978 78 | X47008Y-47953 79 | X47205Y-34567 80 | X47382Y-33287 81 | X47421Y-43858 82 | X47539Y-47028 83 | X47717Y-35079 84 | X47972Y-48976 85 | X48386Y-43976 86 | X48524Y-49213 87 | X48858Y-33937 88 | X48878Y-51260 89 | X49055Y-43957 90 | X49547Y-31280 91 | X49803Y-52283 92 | X49961Y-47362 93 | X50600Y-53465 94 | T4 95 | X37783Y-36424 96 | X37894Y-31791 97 | X38622Y-37539 98 | X41083Y-37343 99 | X41398Y-31772 100 | X44902Y-31772 101 | X48484Y-31791 102 | X48996Y-46280 103 | X50453Y-47992 104 | T5 105 | X39065Y-38858 106 | X39065Y-39370 107 | X39065Y-39882 108 | X39675Y-39114 109 | X39675Y-39626 110 | X41427Y-38858 111 | X41427Y-39370 112 | X41427Y-39882 113 | X42037Y-39114 114 | X42037Y-39626 115 | X43789Y-38858 116 | X43789Y-39370 117 | X43789Y-39882 118 | X44400Y-39114 119 | X44400Y-39626 120 | X46152Y-38858 121 | X46152Y-39370 122 | X46152Y-39882 123 | X46762Y-39114 124 | X46762Y-39626 125 | X48514Y-38858 126 | X48514Y-39370 127 | X48514Y-39882 128 | X49124Y-39114 129 | X49124Y-39626 130 | T6 131 | X40524Y-44494 132 | X40524Y-46494 133 | T7 134 | X37795Y-35433 135 | X38780Y-35433 136 | X41339Y-35433 137 | X42323Y-35433 138 | X44882Y-35433 139 | X45866Y-35433 140 | X48425Y-35433 141 | X49409Y-35433 142 | T8 143 | X38291Y-53976 144 | X39291Y-53976 145 | T2 146 | X42137Y-55379G85X42137Y-55123 147 | G05 148 | X44893Y-55379G85X44893Y-55123 149 | G05 150 | T3 151 | X42472Y-54188G85X42590Y-54188 152 | G05 153 | X44441Y-54188G85X44559Y-54188 154 | G05 155 | T4 156 | X39488Y-37756G85X39252Y-37756 157 | G05 158 | X39488Y-40984G85X39252Y-40984 159 | G05 160 | X41850Y-37756G85X41614Y-37756 161 | G05 162 | X41850Y-40984G85X41614Y-40984 163 | G05 164 | X44213Y-37756G85X43976Y-37756 165 | G05 166 | X44213Y-40984G85X43976Y-40984 167 | G05 168 | X46575Y-37756G85X46339Y-37756 169 | G05 170 | X46575Y-40984G85X46339Y-40984 171 | G05 172 | X48937Y-37756G85X48701Y-37756 173 | G05 174 | X48937Y-40984G85X48701Y-40984 175 | G05 176 | T0 177 | M30 178 | -------------------------------------------------------------------------------- /terrible_pcb/parametric-fan.scad: -------------------------------------------------------------------------------- 1 | // Remixed from MiseryBot's original work: http://www.thingiverse.com/thing:8063 2 | 3 | $fn=60; //Working 4 | //$fn=720; //Show off 5 | fan(40, 10, 32, 4.3); 6 | 7 | module fan(width, depth, mount, mount_diameter=3.4, corner_radius=5, blade_angle=-45) 8 | { 9 | bore_diameter = width - 3; 10 | 11 | color ("dimgrey") 12 | { 13 | body(width, depth, bore_diameter, mount, mount_diameter, corner_radius); 14 | fan_blades(bore_diameter, depth, blade_angle); 15 | } 16 | } 17 | 18 | module body(width, depth, bore_diameter, mount, mount_diameter, corner_radius) 19 | { 20 | difference() 21 | { 22 | linear_extrude(height=depth, center = true, convexity = 4, twist = 0) 23 | { 24 | difference() 25 | { 26 | square([width, width], center=true); 27 | inside_bore(bore_diameter, width/2 + 2); 28 | mounting_holes(mount/2, mount_diameter/2, depth+0.2); 29 | round_corners(width/2, corner_radius); 30 | } 31 | } 32 | 33 | outside_ring(width, depth); 34 | } 35 | } 36 | 37 | module inside_bore(diameter, hub) 38 | { 39 | difference() 40 | { 41 | circle(r=diameter/2,center=true); 42 | circle(r=hub/2,center=true); 43 | } 44 | } 45 | 46 | module mounting_holes(offset, r, h) 47 | { 48 | for (i=[0:3]) 49 | { 50 | rotate([0,0,i*90]) 51 | { 52 | translate([offset, offset]) 53 | { 54 | circle(r=r, h=h, center=true); 55 | } 56 | } 57 | } 58 | } 59 | 60 | module round_corners(offset, r=5) 61 | { 62 | for(i=[0:3]) 63 | { 64 | rotate([0,0,i*90]) 65 | { 66 | translate([offset,offset]) 67 | { 68 | difference() 69 | { 70 | translate([-r+0.1, -r-0.1]) 71 | { 72 | square([r+0.2, r+0.2]); 73 | } 74 | 75 | translate([-r, -r]) 76 | { 77 | circle(r=r); 78 | } 79 | } 80 | } 81 | } 82 | } 83 | } 84 | 85 | module outside_ring(width, depth, surface_thickness=3.6) 86 | { 87 | difference() 88 | { 89 | cylinder(r=width*.75, h=depth-2*surface_thickness, center=true); 90 | cylinder(r=(width+2)/2, h=depth-2*surface_thickness+0.2, center=true); 91 | } 92 | } 93 | 94 | module fan_blades(width, depth, angle) 95 | { 96 | linear_extrude(height=depth-1, center = true, convexity = 4, twist = angle) 97 | { 98 | for(i=[0:6]) 99 | rotate((360*i)/7) 100 | translate([0,-1.5/2]) square([width/2-0.75,1.5]); 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /terrible_pcb/pi0computer.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/al177/terrible-pi/b8fdf6ffef99f4b104c6fe9ce67ad23340967b02/terrible_pcb/pi0computer.stl -------------------------------------------------------------------------------- /terrible_pcb/pi0sdcard.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/al177/terrible-pi/b8fdf6ffef99f4b104c6fe9ce67ad23340967b02/terrible_pcb/pi0sdcard.stl -------------------------------------------------------------------------------- /terrible_pcb/terrible-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # +3.3VA 5 | # 6 | DEF +3.3VA #PWR 0 0 Y Y 1 F P 7 | F0 "#PWR" 0 -150 50 H I C CNN 8 | F1 "+3.3VA" 0 140 50 H V C CNN 9 | F2 "" 0 0 50 H V C CNN 10 | F3 "" 0 0 50 H V C CNN 11 | DRAW 12 | P 2 0 1 0 -30 50 0 100 N 13 | P 2 0 1 0 0 0 0 100 N 14 | P 2 0 1 0 0 100 30 50 N 15 | X +3.3VA 1 0 0 0 U 50 50 1 1 W N 16 | ENDDRAW 17 | ENDDEF 18 | # 19 | # +3V3 20 | # 21 | DEF +3V3 #PWR 0 0 Y Y 1 F P 22 | F0 "#PWR" 0 -150 50 H I C CNN 23 | F1 "+3V3" 0 140 50 H V C CNN 24 | F2 "" 0 0 50 H V C CNN 25 | F3 "" 0 0 50 H V C CNN 26 | ALIAS +3.3V 27 | DRAW 28 | P 2 0 1 0 -30 50 0 100 N 29 | P 2 0 1 0 0 0 0 100 N 30 | P 2 0 1 0 0 100 30 50 N 31 | X +3V3 1 0 0 0 U 50 50 1 1 W N 32 | ENDDRAW 33 | ENDDEF 34 | # 35 | # +5V 36 | # 37 | DEF +5V #PWR 0 0 Y Y 1 F P 38 | F0 "#PWR" 0 -150 50 H I C CNN 39 | F1 "+5V" 0 140 50 H V C CNN 40 | F2 "" 0 0 50 H V C CNN 41 | F3 "" 0 0 50 H V C CNN 42 | DRAW 43 | P 2 0 1 0 -30 50 0 100 N 44 | P 2 0 1 0 0 0 0 100 N 45 | P 2 0 1 0 0 100 30 50 N 46 | X +5V 1 0 0 0 U 50 50 1 1 W N 47 | ENDDRAW 48 | ENDDEF 49 | # 50 | # AP2191DWG 51 | # 52 | DEF AP2191DWG U 0 40 Y Y 1 F N 53 | F0 "U" 0 -150 60 H V C CNN 54 | F1 "AP2191DWG" 0 250 60 H V C CNN 55 | F2 "" 0 0 60 H I C CNN 56 | F3 "" 0 0 60 H I C CNN 57 | $FPLIST 58 | sot-25 59 | $ENDFPLIST 60 | DRAW 61 | S -450 550 450 -450 0 1 0 N 62 | X OUT 1 650 450 200 L 50 50 1 1 w 63 | X GND 2 0 -650 200 U 50 50 1 1 P 64 | X /FLG 3 -650 50 200 R 50 50 1 1 T 65 | X EN 4 -650 -350 200 R 50 50 1 1 I 66 | X IN 5 -650 450 200 R 50 50 1 1 W 67 | ENDDRAW 68 | ENDDEF 69 | # 70 | # C 71 | # 72 | DEF C C 0 10 N Y 1 F N 73 | F0 "C" 25 100 50 H V L CNN 74 | F1 "C" 25 -100 50 H V L CNN 75 | F2 "" 38 -150 50 H V C CNN 76 | F3 "" 0 0 50 H V C CNN 77 | $FPLIST 78 | C? 79 | C_????_* 80 | C_???? 81 | SMD*_c 82 | Capacitor* 83 | $ENDFPLIST 84 | DRAW 85 | P 2 0 1 20 -80 -30 80 -30 N 86 | P 2 0 1 20 -80 30 80 30 N 87 | X ~ 1 0 150 110 D 40 40 1 1 P 88 | X ~ 2 0 -150 110 U 40 40 1 1 P 89 | ENDDRAW 90 | ENDDEF 91 | # 92 | # CONN_01X02 93 | # 94 | DEF CONN_01X02 P 0 40 Y N 1 F N 95 | F0 "P" 0 150 50 H V C CNN 96 | F1 "CONN_01X02" 100 0 50 V V C CNN 97 | F2 "" 0 0 50 H V C CNN 98 | F3 "" 0 0 50 H V C CNN 99 | $FPLIST 100 | Pin_Header_Straight_1X02 101 | Pin_Header_Angled_1X02 102 | Socket_Strip_Straight_1X02 103 | Socket_Strip_Angled_1X02 104 | $ENDFPLIST 105 | DRAW 106 | S -50 -45 10 -55 0 1 0 N 107 | S -50 55 10 45 0 1 0 N 108 | S -50 100 50 -100 0 1 0 N 109 | X P1 1 -200 50 150 R 50 50 1 1 P 110 | X P2 2 -200 -50 150 R 50 50 1 1 P 111 | ENDDRAW 112 | ENDDEF 113 | # 114 | # CP 115 | # 116 | DEF CP C 0 10 N Y 1 F N 117 | F0 "C" 25 100 50 H V L CNN 118 | F1 "CP" 25 -100 50 H V L CNN 119 | F2 "" 38 -150 50 H V C CNN 120 | F3 "" 0 0 50 H V C CNN 121 | $FPLIST 122 | CP* 123 | C_Axial* 124 | C_Radial* 125 | TantalC* 126 | C*elec 127 | c_elec* 128 | SMD*_Pol 129 | $ENDFPLIST 130 | DRAW 131 | S -90 20 -90 40 0 1 0 N 132 | S -90 20 90 20 0 1 0 N 133 | S 90 -20 -90 -40 0 1 0 F 134 | S 90 40 -90 40 0 1 0 N 135 | S 90 40 90 20 0 1 0 N 136 | P 2 0 1 0 -70 90 -30 90 N 137 | P 2 0 1 0 -50 110 -50 70 N 138 | X ~ 1 0 150 110 D 40 40 1 1 P 139 | X ~ 2 0 -150 110 U 40 40 1 1 P 140 | ENDDRAW 141 | ENDDEF 142 | # 143 | # CY7C65632-48 144 | # 145 | DEF CY7C65632-48 U 0 40 Y Y 1 F N 146 | F0 "U" 0 1100 60 H V C CNN 147 | F1 "CY7C65632-48" 0 -700 60 H V C CNN 148 | F2 "" 0 -100 60 H I C CNN 149 | F3 "" 0 -100 60 H I C CNN 150 | DRAW 151 | S -1200 1900 1150 -1800 0 1 0 N 152 | X VCC_A 1 -200 2100 200 D 50 50 1 1 W 153 | X GND 2 -300 -2000 200 U 50 50 1 1 P 154 | X D- 3 -1400 1400 200 R 50 50 1 1 B 155 | X D+ 4 -1400 1300 200 R 50 50 1 1 B 156 | X DD-[1] 5 1350 850 200 L 50 50 1 1 B 157 | X DD+[1] 6 1350 750 200 L 50 50 1 1 B 158 | X VCC_A 7 0 2100 200 D 50 50 1 1 W 159 | X GND 8 -100 -2000 200 U 50 50 1 1 P 160 | X DD-[2] 9 1350 250 200 L 50 50 1 1 B 161 | X DD+[2] 10 1350 150 200 L 50 50 1 1 B 162 | X GND 20 300 -2000 200 U 50 50 1 1 P 163 | X OVR#[3] 30 1350 -150 200 L 50 50 1 1 B 164 | X OVR#[2] 40 1350 450 200 L 50 50 1 1 B 165 | X RREF 11 -1400 -1400 200 R 50 50 1 1 P 166 | X DD-[4] 21 1350 -1000 200 L 50 50 1 1 P 167 | X PWR#[3] 31 1350 -250 200 L 50 50 1 1 B 168 | X PWR#[2] 41 1350 350 200 L 50 50 1 1 B 169 | X VCC_A 12 200 2100 200 D 50 50 1 1 W 170 | X DD+[4] 22 1350 -1100 200 L 50 50 1 1 P 171 | X GREEN[3]/FIXED_PORT3 32 -1400 100 200 R 50 50 1 1 B 172 | X OVR#[1] 42 1350 1050 200 L 50 50 1 1 B 173 | X GND 13 100 -2000 200 U 50 50 1 1 P 174 | X GREEN[4]/FIXED_PORT4 23 -1400 -100 200 R 50 50 1 1 B 175 | X AMBER[3]/SET_PORT_NUM2 33 -1400 0 200 R 50 50 1 1 B 176 | X PWR#[1]/I2C_SDA 43 1350 950 200 L 50 50 1 1 B 177 | X XIN 14 -1400 1000 200 R 50 50 1 1 P 178 | X AMBER[4]/SET_PORT_NUM1 24 -1400 -200 200 R 50 50 1 1 B 179 | X VCC_D 34 800 2100 200 D 50 50 1 1 W 180 | X SEL27 44 -1400 -600 200 R 50 50 1 1 B 181 | X XOUT 15 -1400 900 200 R 50 50 1 1 P 182 | X SEL48 25 -1400 -700 200 R 50 50 1 1 B 183 | X GREEN[2]/SPI_MISO/FIXED_PORT2 35 -1400 300 200 R 50 50 1 1 B 184 | X GREEN[1]/SPI_SK/FIXED_PORT1 45 -1400 500 200 R 50 50 1 1 B 185 | X VCC_A 16 400 2100 200 D 50 50 1 1 W 186 | X RESET# 26 -1400 -1000 200 R 50 50 1 1 B 187 | X AMBER[2]/SPI_MOSI/PWR_PIN_POL 36 -1400 200 200 R 50 50 1 1 B 188 | X AMBER[1]/SPI_CS 46 -1400 400 200 R 50 50 1 1 B 189 | X DD-[3] 17 1350 -350 200 L 50 50 1 1 B 190 | X TEST/SCL 27 -1400 -800 200 R 50 50 1 1 B 191 | X SELFPWR 37 -1400 -400 200 R 50 50 1 1 B 192 | X VCC 47 -850 2100 200 D 50 50 1 1 W 193 | X DD+[3] 18 1350 -450 200 L 50 50 1 1 B 194 | X OVR#[4] 28 1350 -800 200 L 50 50 1 1 B 195 | X VCC_D 38 1000 2100 200 D 50 50 1 1 W 196 | X VREG 48 1350 1300 200 L 50 50 1 1 w 197 | X VCC_A 19 600 2100 200 D 50 50 1 1 W 198 | X PWR#[4] 29 1350 -900 200 L 50 50 1 1 B 199 | X GANG 39 -1400 -500 200 R 50 50 1 1 B 200 | ENDDRAW 201 | ENDDEF 202 | # 203 | # Crystal 204 | # 205 | DEF Crystal Y 0 40 N N 1 F N 206 | F0 "Y" 0 150 50 H V C CNN 207 | F1 "Crystal" 0 -150 50 H V C CNN 208 | F2 "" 0 0 50 H V C CNN 209 | F3 "" 0 0 50 H V C CNN 210 | $FPLIST 211 | Crystal_* 212 | $ENDFPLIST 213 | DRAW 214 | S -50 100 50 -100 0 1 12 N 215 | P 2 0 1 12 -100 -50 -100 50 N 216 | P 2 0 1 12 100 -50 100 50 N 217 | X 1 1 -150 0 50 R 40 40 1 1 P 218 | X 2 2 150 0 50 L 40 40 1 1 P 219 | ENDDRAW 220 | ENDDEF 221 | # 222 | # GND 223 | # 224 | DEF GND #PWR 0 0 Y Y 1 F P 225 | F0 "#PWR" 0 -250 50 H I C CNN 226 | F1 "GND" 0 -150 50 H V C CNN 227 | F2 "" 0 0 50 H V C CNN 228 | F3 "" 0 0 50 H V C CNN 229 | DRAW 230 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 231 | X GND 1 0 0 0 D 50 50 1 1 W N 232 | ENDDRAW 233 | ENDDEF 234 | # 235 | # INDUCTOR_SMALL 236 | # 237 | DEF INDUCTOR_SMALL L 0 0 N N 1 F N 238 | F0 "L" 0 100 50 H V C CNN 239 | F1 "INDUCTOR_SMALL" 0 -50 50 H V C CNN 240 | F2 "" 0 0 50 H V C CNN 241 | F3 "" 0 0 50 H V C CNN 242 | $FPLIST 243 | Choke_* 244 | *Coil* 245 | $ENDFPLIST 246 | DRAW 247 | A -150 0 50 1 1799 0 1 0 N -100 0 -200 0 248 | A -50 0 50 1 1799 0 1 0 N 0 0 -100 0 249 | A 50 0 50 1 1799 0 1 0 N 100 0 0 0 250 | A 150 0 50 1 1799 0 1 0 N 200 0 100 0 251 | X 1 1 -250 0 50 R 30 30 1 1 I 252 | X 2 2 250 0 50 L 30 30 1 1 I 253 | ENDDRAW 254 | ENDDEF 255 | # 256 | # PWR_FLAG 257 | # 258 | DEF PWR_FLAG #FLG 0 0 N N 1 F P 259 | F0 "#FLG" 0 95 50 H I C CNN 260 | F1 "PWR_FLAG" 0 180 50 H V C CNN 261 | F2 "" 0 0 50 H V C CNN 262 | F3 "" 0 0 50 H V C CNN 263 | DRAW 264 | X pwr 1 0 0 0 U 50 50 0 0 w 265 | P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N 266 | ENDDRAW 267 | ENDDEF 268 | # 269 | # R 270 | # 271 | DEF R R 0 0 N Y 1 F N 272 | F0 "R" 80 0 50 V V C CNN 273 | F1 "R" 0 0 50 V V C CNN 274 | F2 "" -70 0 50 V V C CNN 275 | F3 "" 0 0 50 H V C CNN 276 | $FPLIST 277 | R_* 278 | Resistor_* 279 | $ENDFPLIST 280 | DRAW 281 | S -40 -100 40 100 0 1 10 N 282 | X ~ 1 0 150 50 D 50 50 1 1 P 283 | X ~ 2 0 -150 50 U 50 50 1 1 P 284 | ENDDRAW 285 | ENDDEF 286 | # 287 | # USB_OTG 288 | # 289 | DEF USB_OTG P 0 40 Y Y 1 F N 290 | F0 "P" 325 -125 50 H V C CNN 291 | F1 "USB_OTG" 0 200 50 H V C CNN 292 | F2 "" -50 -100 50 V V C CNN 293 | F3 "" -50 -100 50 V V C CNN 294 | $FPLIST 295 | USB* 296 | $ENDFPLIST 297 | DRAW 298 | S -250 -150 250 150 0 1 0 N 299 | S -205 -150 -195 -120 0 1 0 N 300 | S -105 -150 -95 -120 0 1 0 N 301 | S -5 -150 5 -120 0 1 0 N 302 | S 95 -150 105 -120 0 1 0 N 303 | S 195 -150 205 -120 0 1 0 N 304 | X VCC 1 -200 -300 150 U 50 50 1 1 w 305 | X D- 2 -100 -300 150 U 50 50 1 1 P 306 | X D+ 3 0 -300 150 U 50 50 1 1 P 307 | X ID 4 100 -300 150 U 50 50 1 1 W 308 | X GND 5 200 -300 150 U 50 50 1 1 W 309 | X shield 6 400 100 150 L 50 50 1 1 P 310 | ENDDRAW 311 | ENDDEF 312 | # 313 | #End Library 314 | -------------------------------------------------------------------------------- /terrible_pcb/terrible.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/al177/terrible-pi/b8fdf6ffef99f4b104c6fe9ce67ad23340967b02/terrible_pcb/terrible.pdf -------------------------------------------------------------------------------- /terrible_pcb/terrible.pro: -------------------------------------------------------------------------------- 1 | update=Sun 20 Aug 2017 10:55:25 PM CDT 2 | version=1 3 | last_client=kicad 4 | [pcbnew] 5 | version=1 6 | LastNetListRead= 7 | UseCmpFile=1 8 | PadDrill=0.600000000000 9 | PadDrillOvalY=0.600000000000 10 | PadSizeH=1.500000000000 11 | PadSizeV=1.500000000000 12 | PcbTextSizeV=1.500000000000 13 | PcbTextSizeH=1.500000000000 14 | PcbTextThickness=0.300000000000 15 | ModuleTextSizeV=1.000000000000 16 | ModuleTextSizeH=1.000000000000 17 | ModuleTextSizeThickness=0.150000000000 18 | SolderMaskClearance=0.000000000000 19 | SolderMaskMinWidth=0.000000000000 20 | DrawSegmentWidth=0.200000000000 21 | BoardOutlineThickness=0.100000000000 22 | ModuleOutlineThickness=0.150000000000 23 | [cvpcb] 24 | version=1 25 | NetIExt=net 26 | [general] 27 | version=1 28 | [eeschema] 29 | version=1 30 | LibDir= 31 | [eeschema/libraries] 32 | LibName1=power 33 | LibName2=device 34 | LibName3=transistors 35 | LibName4=conn 36 | LibName5=linear 37 | LibName6=regul 38 | LibName7=74xx 39 | LibName8=cmos4000 40 | LibName9=adc-dac 41 | LibName10=memory 42 | LibName11=xilinx 43 | LibName12=microcontrollers 44 | LibName13=dsp 45 | LibName14=microchip 46 | LibName15=analog_switches 47 | LibName16=motorola 48 | LibName17=texas 49 | LibName18=intel 50 | LibName19=audio 51 | LibName20=interface 52 | LibName21=digital-audio 53 | LibName22=philips 54 | LibName23=display 55 | LibName24=cypress 56 | LibName25=siliconi 57 | LibName26=opto 58 | LibName27=atmel 59 | LibName28=contrib 60 | LibName29=valves 61 | LibName30=cy7c65632-48 62 | LibName31=ap2191dwg 63 | -------------------------------------------------------------------------------- /terrible_pcb/terrible.scad: -------------------------------------------------------------------------------- 1 | PI_SLOT_SPACING=6; 2 | 3 | module terrible_backplane() { 4 | translate([129.55,-76.46,0.4]) rotate([0,0,180]) import("terrible.stl",convexity=3); 5 | } 6 | 7 | module pi_zeros() { 8 | 9 | for(pi_slot=[0:4]) 10 | { 11 | translate([32.55+(pi_slot*PI_SLOT_SPACING),114.83,-39.8]) rotate([90,0,-90]) { 12 | import( "pi0computer.stl",convexity=3); 13 | translate([24.7,0,4.8]) 14 | import( "pi0sdcard.stl",convexity=3); 15 | } 16 | } 17 | } 18 | 19 | terrible_backplane(); 20 | %pi_zeros(); 21 | -------------------------------------------------------------------------------- /terrible_pcb/terrible.sch: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 2 2 | LIBS:power 3 | LIBS:device 4 | LIBS:transistors 5 | LIBS:conn 6 | LIBS:linear 7 | LIBS:regul 8 | LIBS:74xx 9 | LIBS:cmos4000 10 | LIBS:adc-dac 11 | LIBS:memory 12 | LIBS:xilinx 13 | LIBS:microcontrollers 14 | LIBS:dsp 15 | LIBS:microchip 16 | LIBS:analog_switches 17 | LIBS:motorola 18 | LIBS:texas 19 | LIBS:intel 20 | LIBS:audio 21 | LIBS:interface 22 | LIBS:digital-audio 23 | LIBS:philips 24 | LIBS:display 25 | LIBS:cypress 26 | LIBS:siliconi 27 | LIBS:opto 28 | LIBS:atmel 29 | LIBS:contrib 30 | LIBS:valves 31 | LIBS:cy7c65632-48 32 | LIBS:ap2191dwg 33 | LIBS:terrible-cache 34 | EELAYER 25 0 35 | EELAYER END 36 | $Descr USLedger 17000 11000 37 | encoding utf-8 38 | Sheet 1 1 39 | Title "" 40 | Date "" 41 | Rev "" 42 | Comp "" 43 | Comment1 "" 44 | Comment2 "" 45 | Comment3 "" 46 | Comment4 "" 47 | $EndDescr 48 | $Comp 49 | L CY7C65632-48 U1 50 | U 1 1 5998CECE 51 | P 5400 3600 52 | F 0 "U1" H 5400 4700 60 0000 C CNN 53 | F 1 "CY7C65632-48" H 5400 2900 60 0000 C CNN 54 | F 2 "Housings_QFP:TQFP-48_7x7mm_Pitch0.5mm" H 5400 3500 60 0001 C CNN 55 | F 3 "" H 5400 3500 60 0001 C CNN 56 | 1 5400 3600 57 | 1 0 0 -1 58 | $EndComp 59 | $Comp 60 | L GND #PWR01 61 | U 1 1 599A5C58 62 | P 8950 2100 63 | F 0 "#PWR01" H 8950 1850 50 0001 C CNN 64 | F 1 "GND" H 8950 1950 50 0000 C CNN 65 | F 2 "" H 8950 2100 50 0000 C CNN 66 | F 3 "" H 8950 2100 50 0000 C CNN 67 | 1 8950 2100 68 | 1 0 0 -1 69 | $EndComp 70 | $Comp 71 | L R R1 72 | U 1 1 599A5C8A 73 | P 8200 1150 74 | F 0 "R1" V 8280 1150 50 0000 C CNN 75 | F 1 "10k" V 8200 1150 50 0000 C CNN 76 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 8130 1150 50 0001 C CNN 77 | F 3 "" H 8200 1150 50 0000 C CNN 78 | 1 8200 1150 79 | 1 0 0 -1 80 | $EndComp 81 | $Comp 82 | L C C3 83 | U 1 1 599A5CEB 84 | P 7850 1150 85 | F 0 "C3" H 7875 1250 50 0000 L CNN 86 | F 1 "0.1uF" H 7875 1050 50 0000 L CNN 87 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 7888 1000 50 0001 C CNN 88 | F 3 "" H 7850 1150 50 0000 C CNN 89 | 1 7850 1150 90 | 1 0 0 -1 91 | $EndComp 92 | $Comp 93 | L +5V #PWR02 94 | U 1 1 599A5DDC 95 | P 8200 850 96 | F 0 "#PWR02" H 8200 700 50 0001 C CNN 97 | F 1 "+5V" H 8200 990 50 0000 C CNN 98 | F 2 "" H 8200 850 50 0000 C CNN 99 | F 3 "" H 8200 850 50 0000 C CNN 100 | 1 8200 850 101 | 1 0 0 -1 102 | $EndComp 103 | $Comp 104 | L USB_OTG P2 105 | U 1 1 599A5E0D 106 | P 10650 1150 107 | F 0 "P2" H 10975 1025 50 0000 C CNN 108 | F 1 "USB_OTG" H 10650 1350 50 0000 C CNN 109 | F 2 "Connect:USB_Micro-B" V 10600 1050 50 0001 C CNN 110 | F 3 "" V 10600 1050 50 0000 C CNN 111 | 1 10650 1150 112 | 0 1 1 0 113 | $EndComp 114 | $Comp 115 | L GND #PWR03 116 | U 1 1 599A5EF2 117 | P 10300 1450 118 | F 0 "#PWR03" H 10300 1200 50 0001 C CNN 119 | F 1 "GND" H 10300 1300 50 0000 C CNN 120 | F 2 "" H 10300 1450 50 0000 C CNN 121 | F 3 "" H 10300 1450 50 0000 C CNN 122 | 1 10300 1450 123 | 1 0 0 -1 124 | $EndComp 125 | $Comp 126 | L GND #PWR04 127 | U 1 1 599A5F33 128 | P 10750 1650 129 | F 0 "#PWR04" H 10750 1400 50 0001 C CNN 130 | F 1 "GND" H 10750 1500 50 0000 C CNN 131 | F 2 "" H 10750 1650 50 0000 C CNN 132 | F 3 "" H 10750 1650 50 0000 C CNN 133 | 1 10750 1650 134 | 1 0 0 -1 135 | $EndComp 136 | NoConn ~ 10350 1250 137 | $Comp 138 | L GND #PWR05 139 | U 1 1 599A61D6 140 | P 12250 2700 141 | F 0 "#PWR05" H 12250 2450 50 0001 C CNN 142 | F 1 "GND" H 12250 2550 50 0000 C CNN 143 | F 2 "" H 12250 2700 50 0000 C CNN 144 | F 3 "" H 12250 2700 50 0000 C CNN 145 | 1 12250 2700 146 | 1 0 0 -1 147 | $EndComp 148 | $Comp 149 | L R R2 150 | U 1 1 599A61DD 151 | P 11500 1750 152 | F 0 "R2" V 11580 1750 50 0000 C CNN 153 | F 1 "10k" V 11500 1750 50 0000 C CNN 154 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 11430 1750 50 0001 C CNN 155 | F 3 "" H 11500 1750 50 0000 C CNN 156 | 1 11500 1750 157 | 1 0 0 -1 158 | $EndComp 159 | $Comp 160 | L C C6 161 | U 1 1 599A61E7 162 | P 11150 1750 163 | F 0 "C6" H 11175 1850 50 0000 L CNN 164 | F 1 "0.1uF" H 11175 1650 50 0000 L CNN 165 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 11188 1600 50 0001 C CNN 166 | F 3 "" H 11150 1750 50 0000 C CNN 167 | 1 11150 1750 168 | 1 0 0 -1 169 | $EndComp 170 | $Comp 171 | L +5V #PWR06 172 | U 1 1 599A61F1 173 | P 11500 1450 174 | F 0 "#PWR06" H 11500 1300 50 0001 C CNN 175 | F 1 "+5V" H 11500 1590 50 0000 C CNN 176 | F 2 "" H 11500 1450 50 0000 C CNN 177 | F 3 "" H 11500 1450 50 0000 C CNN 178 | 1 11500 1450 179 | 1 0 0 -1 180 | $EndComp 181 | $Comp 182 | L GND #PWR07 183 | U 1 1 599A63BA 184 | P 12250 5100 185 | F 0 "#PWR07" H 12250 4850 50 0001 C CNN 186 | F 1 "GND" H 12250 4950 50 0000 C CNN 187 | F 2 "" H 12250 5100 50 0000 C CNN 188 | F 3 "" H 12250 5100 50 0000 C CNN 189 | 1 12250 5100 190 | 1 0 0 -1 191 | $EndComp 192 | $Comp 193 | L R R4 194 | U 1 1 599A63C1 195 | P 11500 4150 196 | F 0 "R4" V 11580 4150 50 0000 C CNN 197 | F 1 "10k" V 11500 4150 50 0000 C CNN 198 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 11430 4150 50 0001 C CNN 199 | F 3 "" H 11500 4150 50 0000 C CNN 200 | 1 11500 4150 201 | 1 0 0 -1 202 | $EndComp 203 | $Comp 204 | L C C12 205 | U 1 1 599A63CB 206 | P 11100 4150 207 | F 0 "C12" H 11125 4250 50 0000 L CNN 208 | F 1 "0.1uF" H 11125 4050 50 0000 L CNN 209 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 11138 4000 50 0001 C CNN 210 | F 3 "" H 11100 4150 50 0000 C CNN 211 | 1 11100 4150 212 | 1 0 0 -1 213 | $EndComp 214 | $Comp 215 | L +5V #PWR08 216 | U 1 1 599A63D5 217 | P 11500 3850 218 | F 0 "#PWR08" H 11500 3700 50 0001 C CNN 219 | F 1 "+5V" H 11500 3990 50 0000 C CNN 220 | F 2 "" H 11500 3850 50 0000 C CNN 221 | F 3 "" H 11500 3850 50 0000 C CNN 222 | 1 11500 3850 223 | 1 0 0 -1 224 | $EndComp 225 | $Comp 226 | L GND #PWR09 227 | U 1 1 599A66FE 228 | P 8950 6950 229 | F 0 "#PWR09" H 8950 6700 50 0001 C CNN 230 | F 1 "GND" H 8950 6800 50 0000 C CNN 231 | F 2 "" H 8950 6950 50 0000 C CNN 232 | F 3 "" H 8950 6950 50 0000 C CNN 233 | 1 8950 6950 234 | 1 0 0 -1 235 | $EndComp 236 | $Comp 237 | L R R10 238 | U 1 1 599A6705 239 | P 8200 6000 240 | F 0 "R10" V 8280 6000 50 0000 C CNN 241 | F 1 "10k" V 8200 6000 50 0000 C CNN 242 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 8130 6000 50 0001 C CNN 243 | F 3 "" H 8200 6000 50 0000 C CNN 244 | 1 8200 6000 245 | 1 0 0 -1 246 | $EndComp 247 | $Comp 248 | L C C16 249 | U 1 1 599A670F 250 | P 7850 6000 251 | F 0 "C16" H 7875 6100 50 0000 L CNN 252 | F 1 "0.1uF" H 7875 5900 50 0000 L CNN 253 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 7888 5850 50 0001 C CNN 254 | F 3 "" H 7850 6000 50 0000 C CNN 255 | 1 7850 6000 256 | 1 0 0 -1 257 | $EndComp 258 | $Comp 259 | L +5V #PWR010 260 | U 1 1 599A6719 261 | P 8200 5700 262 | F 0 "#PWR010" H 8200 5550 50 0001 C CNN 263 | F 1 "+5V" H 8200 5840 50 0000 C CNN 264 | F 2 "" H 8200 5700 50 0000 C CNN 265 | F 3 "" H 8200 5700 50 0000 C CNN 266 | 1 8200 5700 267 | 1 0 0 -1 268 | $EndComp 269 | Wire Wire Line 270 | 6750 2550 7650 2550 271 | Wire Wire Line 272 | 6750 2650 7900 2650 273 | Wire Wire Line 274 | 7900 2650 7900 1750 275 | Wire Wire Line 276 | 7900 1750 8300 1750 277 | Wire Wire Line 278 | 8950 2050 8950 2100 279 | Wire Wire Line 280 | 7850 950 8300 950 281 | Wire Wire Line 282 | 8200 850 8200 1000 283 | Wire Wire Line 284 | 8200 1300 8200 1650 285 | Connection ~ 8200 1350 286 | Wire Wire Line 287 | 7850 1300 7850 1350 288 | Wire Wire Line 289 | 7850 1000 7850 950 290 | Connection ~ 8200 950 291 | Wire Wire Line 292 | 6750 2750 10100 2750 293 | Wire Wire Line 294 | 6750 2850 10200 2850 295 | Wire Wire Line 296 | 10300 1450 10300 1350 297 | Wire Wire Line 298 | 10300 1350 10350 1350 299 | Wire Wire Line 300 | 10750 1650 10750 1550 301 | Wire Wire Line 302 | 10950 2350 11600 2350 303 | Wire Wire Line 304 | 12250 2650 12250 2700 305 | Wire Wire Line 306 | 11150 1550 11600 1550 307 | Wire Wire Line 308 | 11500 1450 11500 1600 309 | Wire Wire Line 310 | 11500 1900 11500 2200 311 | Connection ~ 11500 1950 312 | Wire Wire Line 313 | 11150 1900 11150 1950 314 | Wire Wire Line 315 | 11150 1600 11150 1550 316 | Connection ~ 11500 1550 317 | Wire Wire Line 318 | 10850 4750 11600 4750 319 | Wire Wire Line 320 | 12250 5050 12250 5100 321 | Wire Wire Line 322 | 11100 3950 11600 3950 323 | Wire Wire Line 324 | 11500 3850 11500 4000 325 | Wire Wire Line 326 | 11500 4300 11500 4650 327 | Connection ~ 11500 4350 328 | Wire Wire Line 329 | 11100 4300 11100 4350 330 | Wire Wire Line 331 | 11100 4000 11100 3950 332 | Connection ~ 11500 3950 333 | Wire Wire Line 334 | 7550 6600 8300 6600 335 | Wire Wire Line 336 | 8950 6900 8950 6950 337 | Wire Wire Line 338 | 7850 5800 8300 5800 339 | Wire Wire Line 340 | 8200 5700 8200 5850 341 | Wire Wire Line 342 | 8200 6150 8200 6500 343 | Connection ~ 8200 6200 344 | Wire Wire Line 345 | 7850 6150 7850 6200 346 | Wire Wire Line 347 | 7850 5850 7850 5800 348 | Connection ~ 8200 5800 349 | Wire Wire Line 350 | 10850 3150 6750 3150 351 | Wire Wire Line 352 | 6750 3250 10950 3250 353 | Wire Wire Line 354 | 10950 3250 10950 2350 355 | Wire Wire Line 356 | 6750 3350 13400 3350 357 | Wire Wire Line 358 | 6750 3450 13500 3450 359 | Wire Wire Line 360 | 6750 3750 10950 3750 361 | Wire Wire Line 362 | 10850 4750 10850 3850 363 | Wire Wire Line 364 | 10850 3850 6750 3850 365 | Wire Wire Line 366 | 6750 3950 10200 3950 367 | Wire Wire Line 368 | 10200 3950 10200 5350 369 | Wire Wire Line 370 | 10100 4050 10100 5450 371 | Wire Wire Line 372 | 10100 4050 6750 4050 373 | Wire Wire Line 374 | 7650 4400 7650 6500 375 | Wire Wire Line 376 | 7650 4400 6750 4400 377 | Wire Wire Line 378 | 6750 4500 7550 4500 379 | Wire Wire Line 380 | 6750 4600 7450 4600 381 | Wire Wire Line 382 | 7350 4700 6750 4700 383 | Wire Wire Line 384 | 5200 1500 5200 1300 385 | Wire Wire Line 386 | 6900 1300 6900 2300 387 | Wire Wire Line 388 | 6900 2300 6750 2300 389 | Wire Wire Line 390 | 5400 1500 5400 1300 391 | Connection ~ 5400 1300 392 | Wire Wire Line 393 | 5600 1100 5600 1500 394 | Connection ~ 5600 1300 395 | Wire Wire Line 396 | 5800 1300 5800 1500 397 | Connection ~ 5800 1300 398 | Wire Wire Line 399 | 6000 1300 6000 1500 400 | Wire Wire Line 401 | 6200 1300 6200 1500 402 | Wire Wire Line 403 | 6400 1100 6400 1500 404 | Connection ~ 6400 1300 405 | $Comp 406 | L +3.3V #PWR011 407 | U 1 1 599A729E 408 | P 6400 1100 409 | F 0 "#PWR011" H 6400 950 50 0001 C CNN 410 | F 1 "+3.3V" H 6400 1240 50 0000 C CNN 411 | F 2 "" H 6400 1100 50 0000 C CNN 412 | F 3 "" H 6400 1100 50 0000 C CNN 413 | 1 6400 1100 414 | 1 0 0 -1 415 | $EndComp 416 | $Comp 417 | L +5V #PWR012 418 | U 1 1 599A72D4 419 | P 4550 1300 420 | F 0 "#PWR012" H 4550 1150 50 0001 C CNN 421 | F 1 "+5V" H 4550 1440 50 0000 C CNN 422 | F 2 "" H 4550 1300 50 0000 C CNN 423 | F 3 "" H 4550 1300 50 0000 C CNN 424 | 1 4550 1300 425 | 1 0 0 -1 426 | $EndComp 427 | Wire Wire Line 428 | 4550 1500 4550 1300 429 | $Comp 430 | L GND #PWR013 431 | U 1 1 599A7579 432 | P 5400 5700 433 | F 0 "#PWR013" H 5400 5450 50 0001 C CNN 434 | F 1 "GND" H 5400 5550 50 0000 C CNN 435 | F 2 "" H 5400 5700 50 0000 C CNN 436 | F 3 "" H 5400 5700 50 0000 C CNN 437 | 1 5400 5700 438 | 1 0 0 -1 439 | $EndComp 440 | Wire Wire Line 441 | 5100 5600 5100 5700 442 | Wire Wire Line 443 | 3800 5700 5700 5700 444 | Wire Wire Line 445 | 5700 5700 5700 5600 446 | Connection ~ 5400 5700 447 | Wire Wire Line 448 | 5500 5600 5500 5700 449 | Connection ~ 5500 5700 450 | Wire Wire Line 451 | 5300 5600 5300 5700 452 | Connection ~ 5300 5700 453 | $Comp 454 | L USB_OTG P1 455 | U 1 1 599A78CE 456 | P 2700 2100 457 | F 0 "P1" H 3025 1975 50 0000 C CNN 458 | F 1 "USB_OTG" H 2700 2300 50 0000 C CNN 459 | F 2 "Connect:USB_Micro-B" V 2650 2000 50 0001 C CNN 460 | F 3 "" V 2650 2000 50 0000 C CNN 461 | 1 2700 2100 462 | 0 -1 1 0 463 | $EndComp 464 | Wire Wire Line 465 | 3000 2000 3700 2000 466 | Wire Wire Line 467 | 3700 2000 3700 2200 468 | Wire Wire Line 469 | 3700 2200 4000 2200 470 | Wire Wire Line 471 | 3000 2100 3600 2100 472 | Wire Wire Line 473 | 3600 2100 3600 2300 474 | Wire Wire Line 475 | 3600 2300 4000 2300 476 | $Comp 477 | L GND #PWR014 478 | U 1 1 599A7B88 479 | P 2600 2550 480 | F 0 "#PWR014" H 2600 2300 50 0001 C CNN 481 | F 1 "GND" H 2600 2400 50 0000 C CNN 482 | F 2 "" H 2600 2550 50 0000 C CNN 483 | F 3 "" H 2600 2550 50 0000 C CNN 484 | 1 2600 2550 485 | 1 0 0 -1 486 | $EndComp 487 | $Comp 488 | L GND #PWR015 489 | U 1 1 599A7BC9 490 | P 3050 2400 491 | F 0 "#PWR015" H 3050 2150 50 0001 C CNN 492 | F 1 "GND" H 3050 2250 50 0000 C CNN 493 | F 2 "" H 3050 2400 50 0000 C CNN 494 | F 3 "" H 3050 2400 50 0000 C CNN 495 | 1 3050 2400 496 | 1 0 0 -1 497 | $EndComp 498 | Wire Wire Line 499 | 2600 2500 2600 2550 500 | Wire Wire Line 501 | 3000 2200 3050 2200 502 | Wire Wire Line 503 | 3050 2200 3050 2400 504 | Wire Wire Line 505 | 3000 2300 3050 2300 506 | Connection ~ 3050 2300 507 | Text Notes 2550 1800 0 60 ~ 0 508 | Head node\nOTG host 509 | Text Notes 10500 800 0 60 ~ 0 510 | Node 0 511 | Text Notes 13800 1400 0 60 ~ 0 512 | Node 1 513 | Text Notes 13800 3800 0 60 ~ 0 514 | Node 2 515 | Text Notes 10500 5650 0 60 ~ 0 516 | Node 3 517 | Wire Wire Line 518 | 4000 2400 4000 2600 519 | $Comp 520 | L C C8 521 | U 1 1 599A8411 522 | P 3400 2400 523 | F 0 "C8" V 3350 2200 50 0000 L CNN 524 | F 1 "20pF" V 3250 2300 50 0000 L CNN 525 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 3438 2250 50 0001 C CNN 526 | F 3 "" H 3400 2400 50 0000 C CNN 527 | 1 3400 2400 528 | 0 1 1 0 529 | $EndComp 530 | $Comp 531 | L C C9 532 | U 1 1 599A8553 533 | P 3400 2750 534 | F 0 "C9" V 3450 2550 50 0000 L CNN 535 | F 1 "20pF" V 3550 2650 50 0000 L CNN 536 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 3438 2600 50 0001 C CNN 537 | F 3 "" H 3400 2750 50 0000 C CNN 538 | 1 3400 2750 539 | 0 1 1 0 540 | $EndComp 541 | $Comp 542 | L Crystal Y1 543 | U 1 1 599A81FC 544 | P 3600 2550 545 | F 0 "Y1" V 3600 2700 50 0000 C CNN 546 | F 1 "12MHz" V 3500 2750 50 0000 C CNN 547 | F 2 "Crystals:Crystal_HC49-SD_SMD" H 3600 2550 50 0001 C CNN 548 | F 3 "" H 3600 2550 50 0000 C CNN 549 | 1 3600 2550 550 | 0 1 1 0 551 | $EndComp 552 | Wire Wire Line 553 | 3550 2400 4000 2400 554 | Wire Wire Line 555 | 3550 2750 3600 2750 556 | Wire Wire Line 557 | 3600 2750 3600 2700 558 | Wire Wire Line 559 | 3600 2700 4000 2700 560 | Connection ~ 3600 2400 561 | Wire Wire Line 562 | 3250 2400 3250 2750 563 | $Comp 564 | L GND #PWR016 565 | U 1 1 599A91D3 566 | P 3100 2750 567 | F 0 "#PWR016" H 3100 2500 50 0001 C CNN 568 | F 1 "GND" H 3100 2600 50 0000 C CNN 569 | F 2 "" H 3100 2750 50 0000 C CNN 570 | F 3 "" H 3100 2750 50 0000 C CNN 571 | 1 3100 2750 572 | 1 0 0 -1 573 | $EndComp 574 | Wire Wire Line 575 | 3100 2750 3100 2650 576 | Wire Wire Line 577 | 3100 2650 3250 2650 578 | Connection ~ 3250 2650 579 | NoConn ~ 4000 4400 580 | $Comp 581 | L AP2191DWG U2 582 | U 1 1 599C2FF1 583 | P 8950 1400 584 | F 0 "U2" H 8950 1250 60 0000 C CNN 585 | F 1 "AP2191DWG" H 8950 1650 60 0000 C CNN 586 | F 2 "TO_SOT_Packages_SMD:SOT-23-5" H 8950 1400 60 0001 C CNN 587 | F 3 "" H 8950 1400 60 0001 C CNN 588 | 1 8950 1400 589 | 1 0 0 -1 590 | $EndComp 591 | $Comp 592 | L AP2191DWG U3 593 | U 1 1 599C3064 594 | P 12250 2000 595 | F 0 "U3" H 12250 1850 60 0000 C CNN 596 | F 1 "AP2191DWG" H 12250 2250 60 0000 C CNN 597 | F 2 "TO_SOT_Packages_SMD:SOT-23-5" H 12250 2000 60 0001 C CNN 598 | F 3 "" H 12250 2000 60 0001 C CNN 599 | 1 12250 2000 600 | 1 0 0 -1 601 | $EndComp 602 | $Comp 603 | L AP2191DWG U4 604 | U 1 1 599C30A9 605 | P 12250 4400 606 | F 0 "U4" H 12250 4250 60 0000 C CNN 607 | F 1 "AP2191DWG" H 12250 4650 60 0000 C CNN 608 | F 2 "TO_SOT_Packages_SMD:SOT-23-5" H 12250 4400 60 0001 C CNN 609 | F 3 "" H 12250 4400 60 0001 C CNN 610 | 1 12250 4400 611 | 1 0 0 -1 612 | $EndComp 613 | $Comp 614 | L AP2191DWG U5 615 | U 1 1 599C31D0 616 | P 8950 6250 617 | F 0 "U5" H 8950 6100 60 0000 C CNN 618 | F 1 "AP2191DWG" H 8950 6500 60 0000 C CNN 619 | F 2 "TO_SOT_Packages_SMD:SOT-23-5" H 8950 6250 60 0001 C CNN 620 | F 3 "" H 8950 6250 60 0001 C CNN 621 | 1 8950 6250 622 | 1 0 0 -1 623 | $EndComp 624 | Text GLabel 3900 4200 0 39 Input ~ 0 625 | SEL27 626 | Text GLabel 3900 4300 0 39 Input ~ 0 627 | SEL48 628 | Text GLabel 3900 4000 0 39 Input ~ 0 629 | SELFPWR 630 | Text GLabel 3900 4100 0 39 Input ~ 0 631 | GANG 632 | NoConn ~ 4000 3200 633 | NoConn ~ 4000 3100 634 | NoConn ~ 4000 3300 635 | NoConn ~ 4000 3500 636 | NoConn ~ 4000 3700 637 | NoConn ~ 4000 3800 638 | NoConn ~ 4000 3600 639 | Text GLabel 3900 3400 0 39 Input ~ 0 640 | PWR_PIN_POL 641 | Wire Wire Line 642 | 3900 3400 4000 3400 643 | Wire Wire Line 644 | 4000 4000 3900 4000 645 | Wire Wire Line 646 | 3900 4100 4000 4100 647 | Wire Wire Line 648 | 4000 4200 3900 4200 649 | Wire Wire Line 650 | 3900 4300 4000 4300 651 | Text GLabel 1050 4050 2 39 Output ~ 0 652 | PWR_PIN_POL 653 | $Comp 654 | L R R3 655 | U 1 1 599C4955 656 | P 950 3850 657 | F 0 "R3" V 1030 3850 50 0000 C CNN 658 | F 1 "10K" V 950 3850 50 0000 C CNN 659 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 880 3850 50 0001 C CNN 660 | F 3 "" H 950 3850 50 0000 C CNN 661 | 1 950 3850 662 | 1 0 0 -1 663 | $EndComp 664 | $Comp 665 | L +3.3V #PWR017 666 | U 1 1 599C4B0B 667 | P 950 3650 668 | F 0 "#PWR017" H 950 3500 50 0001 C CNN 669 | F 1 "+3.3V" H 950 3790 50 0000 C CNN 670 | F 2 "" H 950 3650 50 0000 C CNN 671 | F 3 "" H 950 3650 50 0000 C CNN 672 | 1 950 3650 673 | 1 0 0 -1 674 | $EndComp 675 | Wire Wire Line 676 | 950 3650 950 3700 677 | Wire Wire Line 678 | 950 4000 950 4100 679 | Wire Wire Line 680 | 950 4050 1050 4050 681 | Connection ~ 950 4050 682 | Text Notes 1250 4500 0 39 ~ 0 683 | Populate the high side\nfor AP2191, low side\nfor AP2181 684 | Text Notes 1250 3800 0 39 ~ 0 685 | Selects whether PWR#\nsignals are active-high\nor active-low 686 | Text GLabel 850 5000 2 39 Output ~ 0 687 | GANG 688 | $Comp 689 | L R R8 690 | U 1 1 599C5216 691 | P 750 5200 692 | F 0 "R8" V 830 5200 50 0000 C CNN 693 | F 1 "10K" V 750 5200 50 0000 C CNN 694 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 680 5200 50 0001 C CNN 695 | F 3 "" H 750 5200 50 0000 C CNN 696 | 1 750 5200 697 | 1 0 0 -1 698 | $EndComp 699 | $Comp 700 | L GND #PWR018 701 | U 1 1 599C521C 702 | P 750 5400 703 | F 0 "#PWR018" H 750 5150 50 0001 C CNN 704 | F 1 "GND" H 750 5250 50 0000 C CNN 705 | F 2 "" H 750 5400 50 0000 C CNN 706 | F 3 "" H 750 5400 50 0000 C CNN 707 | 1 750 5400 708 | 1 0 0 -1 709 | $EndComp 710 | Wire Wire Line 711 | 750 5000 850 5000 712 | Wire Wire Line 713 | 750 5350 750 5400 714 | Wire Wire Line 715 | 750 5000 750 5050 716 | Text Notes 950 5200 0 39 ~ 0 717 | All ports set to individual mode 718 | Text GLabel 1350 6400 2 39 Output ~ 0 719 | SEL48 720 | $Comp 721 | L R R13 722 | U 1 1 599C5581 723 | P 1250 6250 724 | F 0 "R13" V 1330 6250 50 0000 C CNN 725 | F 1 "10K" V 1250 6250 50 0000 C CNN 726 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 1180 6250 50 0001 C CNN 727 | F 3 "" H 1250 6250 50 0000 C CNN 728 | 1 1250 6250 729 | 1 0 0 -1 730 | $EndComp 731 | $Comp 732 | L +3.3V #PWR019 733 | U 1 1 599C558D 734 | P 1250 6050 735 | F 0 "#PWR019" H 1250 5900 50 0001 C CNN 736 | F 1 "+3.3V" H 1250 6190 50 0000 C CNN 737 | F 2 "" H 1250 6050 50 0000 C CNN 738 | F 3 "" H 1250 6050 50 0000 C CNN 739 | 1 1250 6050 740 | 1 0 0 -1 741 | $EndComp 742 | Wire Wire Line 743 | 1250 6050 1250 6100 744 | Wire Wire Line 745 | 1250 6400 1350 6400 746 | Text GLabel 850 6400 2 39 Output ~ 0 747 | SEL27 748 | $Comp 749 | L R R12 750 | U 1 1 599C5752 751 | P 750 6250 752 | F 0 "R12" V 830 6250 50 0000 C CNN 753 | F 1 "10K" V 750 6250 50 0000 C CNN 754 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 680 6250 50 0001 C CNN 755 | F 3 "" H 750 6250 50 0000 C CNN 756 | 1 750 6250 757 | 1 0 0 -1 758 | $EndComp 759 | $Comp 760 | L +3.3V #PWR020 761 | U 1 1 599C5758 762 | P 750 6050 763 | F 0 "#PWR020" H 750 5900 50 0001 C CNN 764 | F 1 "+3.3V" H 750 6190 50 0000 C CNN 765 | F 2 "" H 750 6050 50 0000 C CNN 766 | F 3 "" H 750 6050 50 0000 C CNN 767 | 1 750 6050 768 | 1 0 0 -1 769 | $EndComp 770 | Wire Wire Line 771 | 750 6050 750 6100 772 | Wire Wire Line 773 | 750 6400 850 6400 774 | Text Notes 900 6600 0 39 ~ 0 775 | 12MHz XTAL drive\nselected 776 | Text GLabel 1900 6400 2 39 Output ~ 0 777 | SELFPWR 778 | $Comp 779 | L R R11 780 | U 1 1 599C5AF3 781 | P 1800 6200 782 | F 0 "R11" V 1880 6200 50 0000 C CNN 783 | F 1 "10K" V 1800 6200 50 0000 C CNN 784 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 1730 6200 50 0001 C CNN 785 | F 3 "" H 1800 6200 50 0000 C CNN 786 | 1 1800 6200 787 | 1 0 0 -1 788 | $EndComp 789 | $Comp 790 | L +3.3V #PWR021 791 | U 1 1 599C5B05 792 | P 1800 6000 793 | F 0 "#PWR021" H 1800 5850 50 0001 C CNN 794 | F 1 "+3.3V" H 1800 6140 50 0000 C CNN 795 | F 2 "" H 1800 6000 50 0000 C CNN 796 | F 3 "" H 1800 6000 50 0000 C CNN 797 | 1 1800 6000 798 | 1 0 0 -1 799 | $EndComp 800 | Wire Wire Line 801 | 1800 6000 1800 6050 802 | Wire Wire Line 803 | 1800 6400 1900 6400 804 | Text Notes 2000 6150 0 39 ~ 0 805 | Selects\nself-powered\nmode 806 | Wire Notes Line 807 | 600 3400 600 7050 808 | Wire Notes Line 809 | 600 7050 2700 7050 810 | Wire Notes Line 811 | 2700 7050 2700 3400 812 | Wire Notes Line 813 | 2700 3400 600 3400 814 | Text Notes 2650 3850 1 59 ~ 0 815 | STRAPS 816 | $Comp 817 | L R R9 818 | U 1 1 599C6356 819 | P 3800 5250 820 | F 0 "R9" V 3880 5250 50 0000 C CNN 821 | F 1 "650.0R" V 3700 5250 50 0000 C CNN 822 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 3730 5250 50 0001 C CNN 823 | F 3 "" H 3800 5250 50 0000 C CNN 824 | 1 3800 5250 825 | 1 0 0 -1 826 | $EndComp 827 | Wire Wire Line 828 | 3800 5100 3800 5000 829 | Wire Wire Line 830 | 3800 5000 4000 5000 831 | Wire Wire Line 832 | 3800 5400 3800 5700 833 | Connection ~ 5100 5700 834 | $Comp 835 | L R R7 836 | U 1 1 599C6911 837 | P 3200 4800 838 | F 0 "R7" V 3280 4800 50 0000 C CNN 839 | F 1 "47k" V 3200 4800 50 0000 C CNN 840 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 3130 4800 50 0001 C CNN 841 | F 3 "" H 3200 4800 50 0000 C CNN 842 | 1 3200 4800 843 | 1 0 0 -1 844 | $EndComp 845 | $Comp 846 | L C C13 847 | U 1 1 599C6917 848 | P 2950 4800 849 | F 0 "C13" H 2975 4900 50 0000 L CNN 850 | F 1 "1uF" H 2975 4700 50 0000 L CNN 851 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 2988 4650 50 0001 C CNN 852 | F 3 "" H 2950 4800 50 0000 C CNN 853 | 1 2950 4800 854 | 1 0 0 -1 855 | $EndComp 856 | $Comp 857 | L R R6 858 | U 1 1 599C69BB 859 | P 3200 4400 860 | F 0 "R6" V 3280 4400 50 0000 C CNN 861 | F 1 "10k" V 3200 4400 50 0000 C CNN 862 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 3130 4400 50 0001 C CNN 863 | F 3 "" H 3200 4400 50 0000 C CNN 864 | 1 3200 4400 865 | 1 0 0 -1 866 | $EndComp 867 | $Comp 868 | L GND #PWR022 869 | U 1 1 599C6F68 870 | P 3200 5000 871 | F 0 "#PWR022" H 3200 4750 50 0001 C CNN 872 | F 1 "GND" H 3200 4850 50 0000 C CNN 873 | F 2 "" H 3200 5000 50 0000 C CNN 874 | F 3 "" H 3200 5000 50 0000 C CNN 875 | 1 3200 5000 876 | 1 0 0 -1 877 | $EndComp 878 | $Comp 879 | L +3.3V #PWR023 880 | U 1 1 599C6FD3 881 | P 3200 4200 882 | F 0 "#PWR023" H 3200 4050 50 0001 C CNN 883 | F 1 "+3.3V" H 3200 4340 50 0000 C CNN 884 | F 2 "" H 3200 4200 50 0000 C CNN 885 | F 3 "" H 3200 4200 50 0000 C CNN 886 | 1 3200 4200 887 | 1 0 0 -1 888 | $EndComp 889 | Wire Wire Line 890 | 3200 4200 3200 4250 891 | Wire Wire Line 892 | 3200 4950 3200 5000 893 | Wire Wire Line 894 | 2950 4950 3200 4950 895 | Wire Wire Line 896 | 3200 4650 2950 4650 897 | Wire Wire Line 898 | 3200 4550 3200 4650 899 | Wire Wire Line 900 | 4000 4600 3200 4600 901 | Connection ~ 3200 4600 902 | $Comp 903 | L +5V #PWR024 904 | U 1 1 599C774F 905 | P 3200 1800 906 | F 0 "#PWR024" H 3200 1650 50 0001 C CNN 907 | F 1 "+5V" H 3200 1940 50 0000 C CNN 908 | F 2 "" H 3200 1800 50 0000 C CNN 909 | F 3 "" H 3200 1800 50 0000 C CNN 910 | 1 3200 1800 911 | 1 0 0 -1 912 | $EndComp 913 | Wire Wire Line 914 | 3000 1900 3200 1900 915 | Wire Wire Line 916 | 3200 1900 3200 1800 917 | $Comp 918 | L C C17 919 | U 1 1 599C829F 920 | P 4000 6650 921 | F 0 "C17" H 4025 6750 50 0000 L CNN 922 | F 1 "1uF" H 4025 6550 50 0000 L CNN 923 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 4038 6500 50 0001 C CNN 924 | F 3 "" H 4000 6650 50 0000 C CNN 925 | 1 4000 6650 926 | 1 0 0 -1 927 | $EndComp 928 | $Comp 929 | L C C18 930 | U 1 1 599C8364 931 | P 4300 6650 932 | F 0 "C18" H 4325 6750 50 0000 L CNN 933 | F 1 "0.1uF" H 4325 6550 50 0000 L CNN 934 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 4338 6500 50 0001 C CNN 935 | F 3 "" H 4300 6650 50 0000 C CNN 936 | 1 4300 6650 937 | 1 0 0 -1 938 | $EndComp 939 | $Comp 940 | L C C21 941 | U 1 1 599C872E 942 | P 4000 7700 943 | F 0 "C21" H 4025 7800 50 0000 L CNN 944 | F 1 "0.1uF" V 4050 7450 50 0000 L CNN 945 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 4038 7550 50 0001 C CNN 946 | F 3 "" H 4000 7700 50 0000 C CNN 947 | 1 4000 7700 948 | 1 0 0 -1 949 | $EndComp 950 | $Comp 951 | L GND #PWR025 952 | U 1 1 599C88F0 953 | P 4000 6900 954 | F 0 "#PWR025" H 4000 6650 50 0001 C CNN 955 | F 1 "GND" H 4000 6750 50 0000 C CNN 956 | F 2 "" H 4000 6900 50 0000 C CNN 957 | F 3 "" H 4000 6900 50 0000 C CNN 958 | 1 4000 6900 959 | 1 0 0 -1 960 | $EndComp 961 | Wire Wire Line 962 | 4000 6400 4000 6500 963 | Wire Wire Line 964 | 4000 6800 4000 6900 965 | $Comp 966 | L GND #PWR026 967 | U 1 1 599C8C8C 968 | P 4000 8050 969 | F 0 "#PWR026" H 4000 7800 50 0001 C CNN 970 | F 1 "GND" H 4000 7900 50 0000 C CNN 971 | F 2 "" H 4000 8050 50 0000 C CNN 972 | F 3 "" H 4000 8050 50 0000 C CNN 973 | 1 4000 8050 974 | 1 0 0 -1 975 | $EndComp 976 | Wire Wire Line 977 | 4000 7850 4000 8050 978 | $Comp 979 | L +3.3V #PWR027 980 | U 1 1 599C8DBE 981 | P 5050 7300 982 | F 0 "#PWR027" H 5050 7150 50 0001 C CNN 983 | F 1 "+3.3V" H 5050 7440 50 0000 C CNN 984 | F 2 "" H 5050 7300 50 0000 C CNN 985 | F 3 "" H 5050 7300 50 0000 C CNN 986 | 1 5050 7300 987 | 1 0 0 -1 988 | $EndComp 989 | Wire Wire Line 990 | 4000 7300 4000 7550 991 | Wire Wire Line 992 | 4000 6500 4300 6500 993 | Wire Wire Line 994 | 4300 6800 4000 6800 995 | $Comp 996 | L C C19 997 | U 1 1 599C9183 998 | P 4750 6650 999 | F 0 "C19" H 4775 6750 50 0000 L CNN 1000 | F 1 "1uF" H 4775 6550 50 0000 L CNN 1001 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 4788 6500 50 0001 C CNN 1002 | F 3 "" H 4750 6650 50 0000 C CNN 1003 | 1 4750 6650 1004 | 1 0 0 -1 1005 | $EndComp 1006 | $Comp 1007 | L C C20 1008 | U 1 1 599C9189 1009 | P 5050 6650 1010 | F 0 "C20" H 5075 6750 50 0000 L CNN 1011 | F 1 "0.1uF" H 5075 6550 50 0000 L CNN 1012 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 5088 6500 50 0001 C CNN 1013 | F 3 "" H 5050 6650 50 0000 C CNN 1014 | 1 5050 6650 1015 | 1 0 0 -1 1016 | $EndComp 1017 | $Comp 1018 | L GND #PWR028 1019 | U 1 1 599C9195 1020 | P 4750 6900 1021 | F 0 "#PWR028" H 4750 6650 50 0001 C CNN 1022 | F 1 "GND" H 4750 6750 50 0000 C CNN 1023 | F 2 "" H 4750 6900 50 0000 C CNN 1024 | F 3 "" H 4750 6900 50 0000 C CNN 1025 | 1 4750 6900 1026 | 1 0 0 -1 1027 | $EndComp 1028 | Wire Wire Line 1029 | 4750 6400 4750 6500 1030 | Wire Wire Line 1031 | 4750 6800 4750 6900 1032 | Wire Wire Line 1033 | 4750 6500 5050 6500 1034 | Wire Wire Line 1035 | 5050 6800 4750 6800 1036 | Text Notes 3900 6900 1 39 ~ 0 1037 | Place near pin 12 1038 | Text Notes 4650 6900 1 39 ~ 0 1039 | Place near pin 16 1040 | Text Notes 3900 7950 1 39 ~ 0 1041 | Place near pin 1 1042 | $Comp 1043 | L C C22 1044 | U 1 1 599C98BA 1045 | P 4350 7700 1046 | F 0 "C22" H 4375 7800 50 0000 L CNN 1047 | F 1 "0.1uF" V 4400 7450 50 0000 L CNN 1048 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 4388 7550 50 0001 C CNN 1049 | F 3 "" H 4350 7700 50 0000 C CNN 1050 | 1 4350 7700 1051 | 1 0 0 -1 1052 | $EndComp 1053 | $Comp 1054 | L C C23 1055 | U 1 1 599C994A 1056 | P 4700 7700 1057 | F 0 "C23" H 4725 7800 50 0000 L CNN 1058 | F 1 "0.1uF" V 4750 7450 50 0000 L CNN 1059 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 4738 7550 50 0001 C CNN 1060 | F 3 "" H 4700 7700 50 0000 C CNN 1061 | 1 4700 7700 1062 | 1 0 0 -1 1063 | $EndComp 1064 | $Comp 1065 | L C C24 1066 | U 1 1 599C99E1 1067 | P 5050 7700 1068 | F 0 "C24" H 5075 7800 50 0000 L CNN 1069 | F 1 "0.1uF" V 5100 7450 50 0000 L CNN 1070 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 5088 7550 50 0001 C CNN 1071 | F 3 "" H 5050 7700 50 0000 C CNN 1072 | 1 5050 7700 1073 | 1 0 0 -1 1074 | $EndComp 1075 | $Comp 1076 | L C C25 1077 | U 1 1 599C9A79 1078 | P 5400 7700 1079 | F 0 "C25" H 5425 7800 50 0000 L CNN 1080 | F 1 "0.1uF" V 5450 7450 50 0000 L CNN 1081 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 5438 7550 50 0001 C CNN 1082 | F 3 "" H 5400 7700 50 0000 C CNN 1083 | 1 5400 7700 1084 | 1 0 0 -1 1085 | $EndComp 1086 | Wire Wire Line 1087 | 5400 7350 5400 7550 1088 | Wire Wire Line 1089 | 5400 7850 5400 8050 1090 | Wire Wire Line 1091 | 4350 7850 4350 8050 1092 | Connection ~ 4350 8050 1093 | Wire Wire Line 1094 | 4350 7350 4350 7550 1095 | Connection ~ 4350 7350 1096 | Wire Wire Line 1097 | 4700 7350 4700 7550 1098 | Connection ~ 4700 7350 1099 | Wire Wire Line 1100 | 5050 7300 5050 7550 1101 | Connection ~ 5050 7350 1102 | Wire Wire Line 1103 | 5050 7850 5050 8050 1104 | Connection ~ 5050 8050 1105 | Wire Wire Line 1106 | 4700 8050 4700 7850 1107 | Connection ~ 4700 8050 1108 | Text Notes 4250 7950 1 39 ~ 0 1109 | Place near pin 7 1110 | Text Notes 4600 7950 1 39 ~ 0 1111 | Place near pin 19 1112 | Text Notes 4950 7950 1 39 ~ 0 1113 | Place near pin 34 1114 | Text Notes 5300 7950 1 39 ~ 0 1115 | Place near pin 38 1116 | $Comp 1117 | L C C7 1118 | U 1 1 599CC4EE 1119 | P 7100 2200 1120 | F 0 "C7" H 7125 2300 50 0000 L CNN 1121 | F 1 "10uF" H 7100 2050 50 0000 L CNN 1122 | F 2 "Capacitors_ThroughHole:C_Radial_D5_L11_P2.5" H 7138 2050 50 0001 C CNN 1123 | F 3 "" H 7100 2200 50 0000 C CNN 1124 | 1 7100 2200 1125 | -1 0 0 -1 1126 | $EndComp 1127 | Wire Wire Line 1128 | 6900 2050 7100 2050 1129 | Connection ~ 6900 2050 1130 | $Comp 1131 | L GND #PWR029 1132 | U 1 1 599CC765 1133 | P 7100 2350 1134 | F 0 "#PWR029" H 7100 2100 50 0001 C CNN 1135 | F 1 "GND" H 7100 2200 50 0000 C CNN 1136 | F 2 "" H 7100 2350 50 0000 C CNN 1137 | F 3 "" H 7100 2350 50 0000 C CNN 1138 | 1 7100 2350 1139 | 1 0 0 -1 1140 | $EndComp 1141 | Text Notes 7300 2400 1 39 ~ 0 1142 | Near VREG 1143 | Wire Wire Line 1144 | 5200 1300 6000 1300 1145 | Wire Wire Line 1146 | 6200 1300 6900 1300 1147 | $Comp 1148 | L +3.3VA #PWR030 1149 | U 1 1 599CDFD8 1150 | P 5600 1100 1151 | F 0 "#PWR030" H 5600 950 50 0001 C CNN 1152 | F 1 "+3.3VA" H 5600 1240 50 0000 C CNN 1153 | F 2 "" H 5600 1100 50 0000 C CNN 1154 | F 3 "" H 5600 1100 50 0000 C CNN 1155 | 1 5600 1100 1156 | 1 0 0 -1 1157 | $EndComp 1158 | $Comp 1159 | L +3.3VA #PWR031 1160 | U 1 1 599CE174 1161 | P 4000 6400 1162 | F 0 "#PWR031" H 4000 6250 50 0001 C CNN 1163 | F 1 "+3.3VA" H 4000 6540 50 0000 C CNN 1164 | F 2 "" H 4000 6400 50 0000 C CNN 1165 | F 3 "" H 4000 6400 50 0000 C CNN 1166 | 1 4000 6400 1167 | 1 0 0 -1 1168 | $EndComp 1169 | $Comp 1170 | L +3.3VA #PWR032 1171 | U 1 1 599CE7F1 1172 | P 4750 6400 1173 | F 0 "#PWR032" H 4750 6250 50 0001 C CNN 1174 | F 1 "+3.3VA" H 4750 6540 50 0000 C CNN 1175 | F 2 "" H 4750 6400 50 0000 C CNN 1176 | F 3 "" H 4750 6400 50 0000 C CNN 1177 | 1 4750 6400 1178 | 1 0 0 -1 1179 | $EndComp 1180 | $Comp 1181 | L +3.3VA #PWR033 1182 | U 1 1 599CEC74 1183 | P 4000 7300 1184 | F 0 "#PWR033" H 4000 7150 50 0001 C CNN 1185 | F 1 "+3.3VA" H 4000 7440 50 0000 C CNN 1186 | F 2 "" H 4000 7300 50 0000 C CNN 1187 | F 3 "" H 4000 7300 50 0000 C CNN 1188 | 1 4000 7300 1189 | 1 0 0 -1 1190 | $EndComp 1191 | Wire Wire Line 1192 | 4000 7350 4700 7350 1193 | Connection ~ 4000 7350 1194 | Wire Wire Line 1195 | 4000 8050 4700 8050 1196 | Wire Wire Line 1197 | 5050 8050 5400 8050 1198 | Wire Wire Line 1199 | 5050 7350 5400 7350 1200 | $Comp 1201 | L GND #PWR034 1202 | U 1 1 599CF6F2 1203 | P 5050 8050 1204 | F 0 "#PWR034" H 5050 7800 50 0001 C CNN 1205 | F 1 "GND" H 5050 7900 50 0000 C CNN 1206 | F 2 "" H 5050 8050 50 0000 C CNN 1207 | F 3 "" H 5050 8050 50 0000 C CNN 1208 | 1 5050 8050 1209 | 1 0 0 -1 1210 | $EndComp 1211 | $Comp 1212 | L +3.3VA #PWR035 1213 | U 1 1 599D0190 1214 | P 6300 6750 1215 | F 0 "#PWR035" H 6300 6600 50 0001 C CNN 1216 | F 1 "+3.3VA" H 6300 6890 50 0000 C CNN 1217 | F 2 "" H 6300 6750 50 0000 C CNN 1218 | F 3 "" H 6300 6750 50 0000 C CNN 1219 | 1 6300 6750 1220 | -1 0 0 -1 1221 | $EndComp 1222 | $Comp 1223 | L +3.3V #PWR036 1224 | U 1 1 599D0219 1225 | P 5600 6750 1226 | F 0 "#PWR036" H 5600 6600 50 0001 C CNN 1227 | F 1 "+3.3V" H 5600 6890 50 0000 C CNN 1228 | F 2 "" H 5600 6750 50 0000 C CNN 1229 | F 3 "" H 5600 6750 50 0000 C CNN 1230 | 1 5600 6750 1231 | -1 0 0 -1 1232 | $EndComp 1233 | $Comp 1234 | L INDUCTOR_SMALL FB1 1235 | U 1 1 599D02FB 1236 | P 5950 6800 1237 | F 0 "FB1" H 5950 6900 50 0000 C CNN 1238 | F 1 "Ferrite" H 5950 6750 50 0000 C CNN 1239 | F 2 "Choke_SMD:Choke_SMD_1206_Handsoldering" H 5950 6800 50 0001 C CNN 1240 | F 3 "" H 5950 6800 50 0000 C CNN 1241 | 1 5950 6800 1242 | -1 0 0 -1 1243 | $EndComp 1244 | Wire Wire Line 1245 | 6300 6750 6300 6800 1246 | Wire Wire Line 1247 | 6200 6800 6700 6800 1248 | Wire Wire Line 1249 | 5700 6800 5600 6800 1250 | Wire Wire Line 1251 | 5600 6800 5600 6750 1252 | $Comp 1253 | L CP C1 1254 | U 1 1 599D1819 1255 | P 9700 1100 1256 | F 0 "C1" H 9725 1200 50 0000 L CNN 1257 | F 1 "120uF" H 9750 1000 50 0000 L CNN 1258 | F 2 "Capacitors_ThroughHole:C_Radial_D5_L11_P2.5" H 9738 950 50 0001 C CNN 1259 | F 3 "" H 9700 1100 50 0000 C CNN 1260 | 1 9700 1100 1261 | -1 0 0 -1 1262 | $EndComp 1263 | $Comp 1264 | L C C2 1265 | U 1 1 599D199B 1266 | P 9950 1100 1267 | F 0 "C2" H 9975 1200 50 0000 L CNN 1268 | F 1 "0.1uF" H 9975 1000 50 0000 L CNN 1269 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 9988 950 50 0001 C CNN 1270 | F 3 "" H 9950 1100 50 0000 C CNN 1271 | 1 9950 1100 1272 | -1 0 0 -1 1273 | $EndComp 1274 | Wire Wire Line 1275 | 9600 950 10350 950 1276 | Connection ~ 9700 950 1277 | Connection ~ 9950 950 1278 | $Comp 1279 | L GND #PWR037 1280 | U 1 1 599D2230 1281 | P 9700 1300 1282 | F 0 "#PWR037" H 9700 1050 50 0001 C CNN 1283 | F 1 "GND" H 9700 1150 50 0000 C CNN 1284 | F 2 "" H 9700 1300 50 0000 C CNN 1285 | F 3 "" H 9700 1300 50 0000 C CNN 1286 | 1 9700 1300 1287 | 1 0 0 -1 1288 | $EndComp 1289 | Wire Wire Line 1290 | 9700 1250 9950 1250 1291 | Wire Wire Line 1292 | 9700 1250 9700 1300 1293 | Wire Wire Line 1294 | 10100 2750 10100 1050 1295 | Wire Wire Line 1296 | 10100 1050 10350 1050 1297 | Wire Wire Line 1298 | 10200 2850 10200 1150 1299 | Wire Wire Line 1300 | 10200 1150 10350 1150 1301 | $Comp 1302 | L USB_OTG P3 1303 | U 1 1 599D42A9 1304 | P 13950 1750 1305 | F 0 "P3" H 14275 1625 50 0000 C CNN 1306 | F 1 "USB_OTG" H 13950 1950 50 0000 C CNN 1307 | F 2 "Connect:USB_Micro-B" V 13900 1650 50 0001 C CNN 1308 | F 3 "" V 13900 1650 50 0000 C CNN 1309 | 1 13950 1750 1310 | 0 1 1 0 1311 | $EndComp 1312 | $Comp 1313 | L GND #PWR038 1314 | U 1 1 599D42AF 1315 | P 13600 2050 1316 | F 0 "#PWR038" H 13600 1800 50 0001 C CNN 1317 | F 1 "GND" H 13600 1900 50 0000 C CNN 1318 | F 2 "" H 13600 2050 50 0000 C CNN 1319 | F 3 "" H 13600 2050 50 0000 C CNN 1320 | 1 13600 2050 1321 | 1 0 0 -1 1322 | $EndComp 1323 | $Comp 1324 | L GND #PWR039 1325 | U 1 1 599D42B5 1326 | P 14050 2250 1327 | F 0 "#PWR039" H 14050 2000 50 0001 C CNN 1328 | F 1 "GND" H 14050 2100 50 0000 C CNN 1329 | F 2 "" H 14050 2250 50 0000 C CNN 1330 | F 3 "" H 14050 2250 50 0000 C CNN 1331 | 1 14050 2250 1332 | 1 0 0 -1 1333 | $EndComp 1334 | NoConn ~ 13650 1850 1335 | Wire Wire Line 1336 | 13600 2050 13600 1950 1337 | Wire Wire Line 1338 | 13600 1950 13650 1950 1339 | Wire Wire Line 1340 | 14050 2250 14050 2150 1341 | $Comp 1342 | L CP C4 1343 | U 1 1 599D42C0 1344 | P 13000 1700 1345 | F 0 "C4" H 13025 1800 50 0000 L CNN 1346 | F 1 "120uF" H 13050 1600 50 0000 L CNN 1347 | F 2 "Capacitors_ThroughHole:C_Radial_D5_L11_P2.5" H 13038 1550 50 0001 C CNN 1348 | F 3 "" H 13000 1700 50 0000 C CNN 1349 | 1 13000 1700 1350 | -1 0 0 -1 1351 | $EndComp 1352 | $Comp 1353 | L C C5 1354 | U 1 1 599D42C6 1355 | P 13250 1700 1356 | F 0 "C5" H 13275 1800 50 0000 L CNN 1357 | F 1 "0.1uF" H 13275 1600 50 0000 L CNN 1358 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 13288 1550 50 0001 C CNN 1359 | F 3 "" H 13250 1700 50 0000 C CNN 1360 | 1 13250 1700 1361 | -1 0 0 -1 1362 | $EndComp 1363 | Wire Wire Line 1364 | 12900 1550 13650 1550 1365 | Connection ~ 13000 1550 1366 | Connection ~ 13250 1550 1367 | $Comp 1368 | L GND #PWR040 1369 | U 1 1 599D42CF 1370 | P 13000 1900 1371 | F 0 "#PWR040" H 13000 1650 50 0001 C CNN 1372 | F 1 "GND" H 13000 1750 50 0000 C CNN 1373 | F 2 "" H 13000 1900 50 0000 C CNN 1374 | F 3 "" H 13000 1900 50 0000 C CNN 1375 | 1 13000 1900 1376 | 1 0 0 -1 1377 | $EndComp 1378 | Wire Wire Line 1379 | 13000 1850 13250 1850 1380 | Wire Wire Line 1381 | 13000 1850 13000 1900 1382 | Wire Wire Line 1383 | 13400 3350 13400 1650 1384 | Wire Wire Line 1385 | 13400 1650 13650 1650 1386 | Wire Wire Line 1387 | 13500 3450 13500 1750 1388 | Wire Wire Line 1389 | 13500 1750 13650 1750 1390 | $Comp 1391 | L USB_OTG P4 1392 | U 1 1 599D4C97 1393 | P 13950 4150 1394 | F 0 "P4" H 14275 4025 50 0000 C CNN 1395 | F 1 "USB_OTG" H 13950 4350 50 0000 C CNN 1396 | F 2 "Connect:USB_Micro-B" V 13900 4050 50 0001 C CNN 1397 | F 3 "" V 13900 4050 50 0000 C CNN 1398 | 1 13950 4150 1399 | 0 1 1 0 1400 | $EndComp 1401 | $Comp 1402 | L GND #PWR041 1403 | U 1 1 599D4C9D 1404 | P 13600 4450 1405 | F 0 "#PWR041" H 13600 4200 50 0001 C CNN 1406 | F 1 "GND" H 13600 4300 50 0000 C CNN 1407 | F 2 "" H 13600 4450 50 0000 C CNN 1408 | F 3 "" H 13600 4450 50 0000 C CNN 1409 | 1 13600 4450 1410 | 1 0 0 -1 1411 | $EndComp 1412 | $Comp 1413 | L GND #PWR042 1414 | U 1 1 599D4CA3 1415 | P 14050 4650 1416 | F 0 "#PWR042" H 14050 4400 50 0001 C CNN 1417 | F 1 "GND" H 14050 4500 50 0000 C CNN 1418 | F 2 "" H 14050 4650 50 0000 C CNN 1419 | F 3 "" H 14050 4650 50 0000 C CNN 1420 | 1 14050 4650 1421 | 1 0 0 -1 1422 | $EndComp 1423 | NoConn ~ 13650 4250 1424 | Wire Wire Line 1425 | 13600 4450 13600 4350 1426 | Wire Wire Line 1427 | 13600 4350 13650 4350 1428 | Wire Wire Line 1429 | 14050 4650 14050 4550 1430 | $Comp 1431 | L CP C10 1432 | U 1 1 599D4CAD 1433 | P 13000 4100 1434 | F 0 "C10" H 13025 4200 50 0000 L CNN 1435 | F 1 "120uF" H 13050 4000 50 0000 L CNN 1436 | F 2 "Capacitors_ThroughHole:C_Radial_D5_L11_P2.5" H 13038 3950 50 0001 C CNN 1437 | F 3 "" H 13000 4100 50 0000 C CNN 1438 | 1 13000 4100 1439 | -1 0 0 -1 1440 | $EndComp 1441 | $Comp 1442 | L C C11 1443 | U 1 1 599D4CB3 1444 | P 13250 4100 1445 | F 0 "C11" H 13275 4200 50 0000 L CNN 1446 | F 1 "0.1uF" H 13275 4000 50 0000 L CNN 1447 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 13288 3950 50 0001 C CNN 1448 | F 3 "" H 13250 4100 50 0000 C CNN 1449 | 1 13250 4100 1450 | -1 0 0 -1 1451 | $EndComp 1452 | Wire Wire Line 1453 | 12900 3950 13650 3950 1454 | Connection ~ 13000 3950 1455 | Connection ~ 13250 3950 1456 | $Comp 1457 | L GND #PWR043 1458 | U 1 1 599D4CBC 1459 | P 13000 4300 1460 | F 0 "#PWR043" H 13000 4050 50 0001 C CNN 1461 | F 1 "GND" H 13000 4150 50 0000 C CNN 1462 | F 2 "" H 13000 4300 50 0000 C CNN 1463 | F 3 "" H 13000 4300 50 0000 C CNN 1464 | 1 13000 4300 1465 | 1 0 0 -1 1466 | $EndComp 1467 | Wire Wire Line 1468 | 13000 4250 13250 4250 1469 | Wire Wire Line 1470 | 13000 4250 13000 4300 1471 | Wire Wire Line 1472 | 13400 4050 13650 4050 1473 | Wire Wire Line 1474 | 13500 4150 13650 4150 1475 | Wire Wire Line 1476 | 7550 4500 7550 6600 1477 | $Comp 1478 | L USB_OTG P5 1479 | U 1 1 599D5524 1480 | P 10650 6000 1481 | F 0 "P5" H 10975 5875 50 0000 C CNN 1482 | F 1 "USB_OTG" H 10650 6200 50 0000 C CNN 1483 | F 2 "Connect:USB_Micro-B" V 10600 5900 50 0001 C CNN 1484 | F 3 "" V 10600 5900 50 0000 C CNN 1485 | 1 10650 6000 1486 | 0 1 1 0 1487 | $EndComp 1488 | $Comp 1489 | L GND #PWR044 1490 | U 1 1 599D552A 1491 | P 10300 6300 1492 | F 0 "#PWR044" H 10300 6050 50 0001 C CNN 1493 | F 1 "GND" H 10300 6150 50 0000 C CNN 1494 | F 2 "" H 10300 6300 50 0000 C CNN 1495 | F 3 "" H 10300 6300 50 0000 C CNN 1496 | 1 10300 6300 1497 | 1 0 0 -1 1498 | $EndComp 1499 | $Comp 1500 | L GND #PWR045 1501 | U 1 1 599D5530 1502 | P 10750 6500 1503 | F 0 "#PWR045" H 10750 6250 50 0001 C CNN 1504 | F 1 "GND" H 10750 6350 50 0000 C CNN 1505 | F 2 "" H 10750 6500 50 0000 C CNN 1506 | F 3 "" H 10750 6500 50 0000 C CNN 1507 | 1 10750 6500 1508 | 1 0 0 -1 1509 | $EndComp 1510 | NoConn ~ 10350 6100 1511 | Wire Wire Line 1512 | 10300 6300 10300 6200 1513 | Wire Wire Line 1514 | 10300 6200 10350 6200 1515 | Wire Wire Line 1516 | 10750 6500 10750 6400 1517 | $Comp 1518 | L CP C14 1519 | U 1 1 599D553A 1520 | P 9700 5950 1521 | F 0 "C14" H 9725 6050 50 0000 L CNN 1522 | F 1 "120uF" H 9750 5850 50 0000 L CNN 1523 | F 2 "Capacitors_ThroughHole:C_Radial_D5_L11_P2.5" H 9738 5800 50 0001 C CNN 1524 | F 3 "" H 9700 5950 50 0000 C CNN 1525 | 1 9700 5950 1526 | -1 0 0 -1 1527 | $EndComp 1528 | $Comp 1529 | L C C15 1530 | U 1 1 599D5540 1531 | P 9950 5950 1532 | F 0 "C15" H 9975 6050 50 0000 L CNN 1533 | F 1 "0.1uF" H 9975 5850 50 0000 L CNN 1534 | F 2 "Capacitors_SMD:C_0805_HandSoldering" H 9988 5800 50 0001 C CNN 1535 | F 3 "" H 9950 5950 50 0000 C CNN 1536 | 1 9950 5950 1537 | -1 0 0 -1 1538 | $EndComp 1539 | Wire Wire Line 1540 | 9600 5800 10350 5800 1541 | Connection ~ 9700 5800 1542 | Connection ~ 9950 5800 1543 | $Comp 1544 | L GND #PWR046 1545 | U 1 1 599D5549 1546 | P 9700 6150 1547 | F 0 "#PWR046" H 9700 5900 50 0001 C CNN 1548 | F 1 "GND" H 9700 6000 50 0000 C CNN 1549 | F 2 "" H 9700 6150 50 0000 C CNN 1550 | F 3 "" H 9700 6150 50 0000 C CNN 1551 | 1 9700 6150 1552 | 1 0 0 -1 1553 | $EndComp 1554 | Wire Wire Line 1555 | 9700 6100 9950 6100 1556 | Wire Wire Line 1557 | 9700 6100 9700 6150 1558 | Wire Wire Line 1559 | 10100 5900 10350 5900 1560 | Wire Wire Line 1561 | 10200 6000 10350 6000 1562 | Wire Wire Line 1563 | 7450 4600 7450 7150 1564 | Wire Wire Line 1565 | 7450 7150 10100 7150 1566 | Wire Wire Line 1567 | 10100 7150 10100 5900 1568 | Wire Wire Line 1569 | 10200 6000 10200 7300 1570 | Wire Wire Line 1571 | 10200 7300 7350 7300 1572 | Wire Wire Line 1573 | 7350 7300 7350 4700 1574 | Wire Wire Line 1575 | 10200 5350 13400 5350 1576 | Wire Wire Line 1577 | 13400 5350 13400 4050 1578 | Wire Wire Line 1579 | 13500 4150 13500 5450 1580 | Wire Wire Line 1581 | 13500 5450 10100 5450 1582 | $Comp 1583 | L USB_OTG P6 1584 | U 1 1 599D7362 1585 | P 1700 8500 1586 | F 0 "P6" H 2025 8375 50 0000 C CNN 1587 | F 1 "USB_OTG" H 1700 8700 50 0000 C CNN 1588 | F 2 "Connect:USB_Micro-B_10103594-0001LF" V 1650 8400 50 0001 C CNN 1589 | F 3 "" V 1650 8400 50 0000 C CNN 1590 | 1 1700 8500 1591 | 0 1 1 0 1592 | $EndComp 1593 | NoConn ~ 1400 8400 1594 | NoConn ~ 1400 8500 1595 | NoConn ~ 1400 8600 1596 | $Comp 1597 | L +5V #PWR047 1598 | U 1 1 599D7767 1599 | P 1400 8200 1600 | F 0 "#PWR047" H 1400 8050 50 0001 C CNN 1601 | F 1 "+5V" H 1400 8340 50 0000 C CNN 1602 | F 2 "" H 1400 8200 50 0000 C CNN 1603 | F 3 "" H 1400 8200 50 0000 C CNN 1604 | 1 1400 8200 1605 | 1 0 0 -1 1606 | $EndComp 1607 | Wire Wire Line 1608 | 1400 8200 1400 8300 1609 | $Comp 1610 | L GND #PWR048 1611 | U 1 1 599D79D3 1612 | P 1800 8950 1613 | F 0 "#PWR048" H 1800 8700 50 0001 C CNN 1614 | F 1 "GND" H 1800 8800 50 0000 C CNN 1615 | F 2 "" H 1800 8950 50 0000 C CNN 1616 | F 3 "" H 1800 8950 50 0000 C CNN 1617 | 1 1800 8950 1618 | 1 0 0 -1 1619 | $EndComp 1620 | Wire Wire Line 1621 | 1400 8700 1400 8900 1622 | Wire Wire Line 1623 | 1400 8900 1800 8900 1624 | Wire Wire Line 1625 | 1800 8900 1800 8950 1626 | $Comp 1627 | L CONN_01X02 P7 1628 | U 1 1 599D7DA2 1629 | P 1500 9500 1630 | F 0 "P7" H 1500 9650 50 0000 C CNN 1631 | F 1 "CONN_01X02" V 1600 9500 50 0000 C CNN 1632 | F 2 "Pin_Headers:Pin_Header_Angled_1x02" H 1500 9500 50 0001 C CNN 1633 | F 3 "" H 1500 9500 50 0000 C CNN 1634 | 1 1500 9500 1635 | -1 0 0 -1 1636 | $EndComp 1637 | $Comp 1638 | L +5V #PWR049 1639 | U 1 1 599D8064 1640 | P 1700 9400 1641 | F 0 "#PWR049" H 1700 9250 50 0001 C CNN 1642 | F 1 "+5V" H 1700 9540 50 0000 C CNN 1643 | F 2 "" H 1700 9400 50 0000 C CNN 1644 | F 3 "" H 1700 9400 50 0000 C CNN 1645 | 1 1700 9400 1646 | 1 0 0 -1 1647 | $EndComp 1648 | $Comp 1649 | L GND #PWR050 1650 | U 1 1 599D810E 1651 | P 1700 9600 1652 | F 0 "#PWR050" H 1700 9350 50 0001 C CNN 1653 | F 1 "GND" H 1700 9450 50 0000 C CNN 1654 | F 2 "" H 1700 9600 50 0000 C CNN 1655 | F 3 "" H 1700 9600 50 0000 C CNN 1656 | 1 1700 9600 1657 | 1 0 0 -1 1658 | $EndComp 1659 | Wire Wire Line 1660 | 1700 9400 1700 9450 1661 | Wire Wire Line 1662 | 1700 9550 1700 9600 1663 | Wire Notes Line 1664 | 1150 7800 1150 9950 1665 | Wire Notes Line 1666 | 1150 9950 2250 9950 1667 | Wire Notes Line 1668 | 2250 9950 2250 7800 1669 | Wire Notes Line 1670 | 2250 7800 1150 7800 1671 | Text Notes 2200 8300 1 59 ~ 0 1672 | +5V input 1673 | $Comp 1674 | L PWR_FLAG #FLG051 1675 | U 1 1 599DC1F6 1676 | P 2050 9450 1677 | F 0 "#FLG051" H 2050 9545 50 0001 C CNN 1678 | F 1 "PWR_FLAG" H 2050 9630 50 0000 C CNN 1679 | F 2 "" H 2050 9450 50 0000 C CNN 1680 | F 3 "" H 2050 9450 50 0000 C CNN 1681 | 1 2050 9450 1682 | 1 0 0 -1 1683 | $EndComp 1684 | Wire Wire Line 1685 | 2050 9450 2050 9550 1686 | Wire Wire Line 1687 | 2050 9550 1700 9550 1688 | $Comp 1689 | L PWR_FLAG #FLG052 1690 | U 1 1 599DCA06 1691 | P 6700 6800 1692 | F 0 "#FLG052" H 6700 6895 50 0001 C CNN 1693 | F 1 "PWR_FLAG" H 6700 6980 50 0000 C CNN 1694 | F 2 "" H 6700 6800 50 0000 C CNN 1695 | F 3 "" H 6700 6800 50 0000 C CNN 1696 | 1 6700 6800 1697 | 1 0 0 -1 1698 | $EndComp 1699 | Connection ~ 6300 6800 1700 | Text Label 6850 2750 0 60 ~ 0 1701 | DD1- 1702 | Text Label 6850 2850 0 60 ~ 0 1703 | DD1+ 1704 | Text Label 6850 4600 0 60 ~ 0 1705 | DD4- 1706 | Text Label 6850 4700 0 60 ~ 0 1707 | DD4+ 1708 | Text Label 3800 2300 0 60 ~ 0 1709 | D+ 1710 | Text Label 3800 2200 0 60 ~ 0 1711 | D- 1712 | Text Label 6850 3350 0 60 ~ 0 1713 | DD2- 1714 | Text Label 6850 3450 0 60 ~ 0 1715 | DD2+ 1716 | Text Label 6850 3950 0 60 ~ 0 1717 | DD3- 1718 | Text Label 6850 4050 0 60 ~ 0 1719 | DD3+ 1720 | Wire Wire Line 1721 | 950 4400 950 4450 1722 | $Comp 1723 | L GND #PWR053 1724 | U 1 1 599C4A06 1725 | P 950 4450 1726 | F 0 "#PWR053" H 950 4200 50 0001 C CNN 1727 | F 1 "GND" H 950 4300 50 0000 C CNN 1728 | F 2 "" H 950 4450 50 0000 C CNN 1729 | F 3 "" H 950 4450 50 0000 C CNN 1730 | 1 950 4450 1731 | 1 0 0 -1 1732 | $EndComp 1733 | $Comp 1734 | L R R5 1735 | U 1 1 599C49A8 1736 | P 950 4250 1737 | F 0 "R5" V 1030 4250 50 0000 C CNN 1738 | F 1 "NP" V 950 4250 50 0000 C CNN 1739 | F 2 "Resistors_SMD:R_0603_HandSoldering" V 880 4250 50 0001 C CNN 1740 | F 3 "" H 950 4250 50 0000 C CNN 1741 | 1 950 4250 1742 | 1 0 0 -1 1743 | $EndComp 1744 | Wire Wire Line 1745 | 1800 6350 1800 6400 1746 | $Comp 1747 | L GND #PWR054 1748 | U 1 1 59A23E3D 1749 | P 7850 1350 1750 | F 0 "#PWR054" H 7850 1100 50 0001 C CNN 1751 | F 1 "GND" H 7850 1200 50 0000 C CNN 1752 | F 2 "" H 7850 1350 50 0000 C CNN 1753 | F 3 "" H 7850 1350 50 0000 C CNN 1754 | 1 7850 1350 1755 | 1 0 0 -1 1756 | $EndComp 1757 | Wire Wire Line 1758 | 7650 2550 7650 1650 1759 | Wire Wire Line 1760 | 7650 1650 8200 1650 1761 | Wire Wire Line 1762 | 8200 1350 8300 1350 1763 | $Comp 1764 | L GND #PWR055 1765 | U 1 1 59A2431F 1766 | P 11150 1950 1767 | F 0 "#PWR055" H 11150 1700 50 0001 C CNN 1768 | F 1 "GND" H 11150 1800 50 0000 C CNN 1769 | F 2 "" H 11150 1950 50 0000 C CNN 1770 | F 3 "" H 11150 1950 50 0000 C CNN 1771 | 1 11150 1950 1772 | 1 0 0 -1 1773 | $EndComp 1774 | Wire Wire Line 1775 | 10850 3150 10850 2200 1776 | Wire Wire Line 1777 | 10850 2200 11500 2200 1778 | Wire Wire Line 1779 | 11500 1950 11600 1950 1780 | $Comp 1781 | L GND #PWR056 1782 | U 1 1 59A24633 1783 | P 11100 4350 1784 | F 0 "#PWR056" H 11100 4100 50 0001 C CNN 1785 | F 1 "GND" H 11100 4200 50 0000 C CNN 1786 | F 2 "" H 11100 4350 50 0000 C CNN 1787 | F 3 "" H 11100 4350 50 0000 C CNN 1788 | 1 11100 4350 1789 | 1 0 0 -1 1790 | $EndComp 1791 | Wire Wire Line 1792 | 10950 3750 10950 4650 1793 | Wire Wire Line 1794 | 10950 4650 11500 4650 1795 | Wire Wire Line 1796 | 11500 4350 11600 4350 1797 | $Comp 1798 | L GND #PWR057 1799 | U 1 1 59A24AAE 1800 | P 7850 6200 1801 | F 0 "#PWR057" H 7850 5950 50 0001 C CNN 1802 | F 1 "GND" H 7850 6050 50 0000 C CNN 1803 | F 2 "" H 7850 6200 50 0000 C CNN 1804 | F 3 "" H 7850 6200 50 0000 C CNN 1805 | 1 7850 6200 1806 | 1 0 0 -1 1807 | $EndComp 1808 | Wire Wire Line 1809 | 7650 6500 8200 6500 1810 | Wire Wire Line 1811 | 8200 6200 8300 6200 1812 | Text Label 9950 950 0 60 ~ 0 1813 | VCC_1 1814 | Text Label 13250 1550 0 60 ~ 0 1815 | VCC_2 1816 | Text Label 13250 3950 0 60 ~ 0 1817 | VCC_3 1818 | Text Label 9950 5800 0 60 ~ 0 1819 | VCC_4 1820 | $EndSCHEMATC 1821 | -------------------------------------------------------------------------------- /terrible_pcb/terrible.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/al177/terrible-pi/b8fdf6ffef99f4b104c6fe9ce67ad23340967b02/terrible_pcb/terrible.stl -------------------------------------------------------------------------------- /terrible_pcb/terrible_case.scad: -------------------------------------------------------------------------------- 1 | use ; 2 | use ; 3 | 4 | // Set true to render for printing 5 | PRODUCTION=true; 6 | 7 | SHOW_INNARDS=true; 8 | 9 | if(SHOW_INNARDS && !PRODUCTION) { 10 | translate([0,PCB_EDGE_Y_EXTRA,0]) { 11 | #terrible_backplane(); 12 | #pi_zeros(); 13 | } 14 | translate([PCB_EDGE_X/2,-FAN_THICK/2-FAN_PI_BACK_GAP-0.01,FAN_Z_OFS-PCB_BOT_CLEARANCE/2]) rotate([90,0,0]) fan(FAN_WIDTH, FAN_THICK, 32, 4.3); 15 | 16 | } 17 | 18 | X_EDGE_TO_HEAD_NODE_TOP=6.5; 19 | 20 | PCB_EDGE_X=38; 21 | PCB_EDGE_X_CLEARANCE=0.8; 22 | PCB_EDGE_Y_EXTRA=0; 23 | PCB_EDGE_Y=65.3; 24 | PCB_EDGE_Z=0.8; 25 | PCB_EDGE_Z_CLEARANCE=0.2; 26 | PCB_BOT_CLEARANCE=0.8; 27 | 28 | 29 | PI_BOT=9.4; /* top of PCB to bottom of Pi */ 30 | PI_WIDTH=30.0; 31 | PI_WIDTH_CLEARANCE=.8; 32 | 33 | PI_CAM_HDR_WIDTH=17.5; 34 | PI_CAM_HDR_HEIGHT=1.4; 35 | PI_CAM_HDR_FROM_EDGE=6.2; 36 | 37 | PI_ZERO_BOARD_EDGE_OFS_FROM_0=8.02; 38 | PI_ZERO_BOARD_TOP_OFS_FROM_4=4.58; 39 | PI_ZERO_BOARD_TOP_CLEARANCE=6; 40 | PI_ZERO_BOARD_THICK=1.4; 41 | 42 | INT_HEIGHT=PCB_EDGE_Z+PI_BOT+PI_WIDTH+PI_WIDTH_CLEARANCE/2; 43 | 44 | SDCARD_WIDTH=12.3; 45 | SDCARD_EXT=4; 46 | SDCARD_FROM_EDGE=10.5; 47 | SDCARD_THICK=2.5; 48 | SDCARD_Z_FUDGE=0.4; 49 | 50 | SD_VENT_WIDTH=19; 51 | SD_VENT_EXT=4; 52 | SD_VENT_FROM_EDGE=6.5; 53 | SD_VENT_THICK=5; 54 | SD_VENT_Z_FUDGE=-0.5; 55 | 56 | USB_FROM_0=15; 57 | USB_WIDTH=8.1; 58 | USB_HEIGHT=3.6; 59 | USB_EXT=4; 60 | USB_Z_FUDGE=0.5; 61 | 62 | USB_INSET_DEPTH=1.2; 63 | USB_INSET_ADDL_W=3.4; 64 | USB_INSET_ADDL_H=3.4; 65 | 66 | CASE_THICK=2.5; 67 | 68 | PI_LOWER_CRADLE_L=5; 69 | PI_LOWER_CRADLE_H=4; 70 | PI_LOWER_CRADLE_NOTCH=2; 71 | 72 | PI_UPPER_CRADLE_L=6; 73 | PI_UPPER_CRADLE_H=3; 74 | 75 | /* Dimensions for standard 40x40x10 box fan */ 76 | FAN_THICK=10; 77 | FAN_WIDTH=40; 78 | FAN_HOLE_SPACE=36; 79 | 80 | FAN_PI_BACK_GAP=3; 81 | FAN_END_Z_OFS=2; 82 | FAN_CLEARANCE=0.6; 83 | FAN_CASE_INNER_WIDTH=FAN_WIDTH+FAN_CLEARANCE; 84 | 85 | FAN_CASE_INSET=FAN_PI_BACK_GAP+FAN_THICK; 86 | FAN_X_OFFSET=(FAN_WIDTH-PCB_EDGE_X)/2; 87 | 88 | FAN_Z_OFS=FAN_WIDTH/2; 89 | 90 | SEAM_FROM_BACK=10; 91 | 92 | PI_SLOT_SPACING=6; 93 | 94 | SECURING_PIN_DIA=2.1; //guess at dia for 1.75mm 95 | SECURING_PIN_Y_EXTRA=0.4; //amount to nudge closer to PCB edge 96 | 97 | 98 | if(PRODUCTION) { 99 | translate([FAN_X_OFFSET+FAN_CLEARANCE/2+CASE_THICK, CASE_THICK+PCB_EDGE_Z+PCB_BOT_CLEARANCE,PCB_EDGE_Y+CASE_THICK]) 100 | rotate([-90,0,0]) case_body(); 101 | } else { 102 | case_body(); 103 | } 104 | 105 | module case_body() { 106 | difference() { 107 | hull() { 108 | outer_shape_curvy(); 109 | //fan_end(); 110 | fan_end_minimal(); 111 | } 112 | 113 | 114 | 115 | difference() 116 | { 117 | inner_bulk_cutout(); 118 | 119 | zero_lower_cradle(); 120 | zero_upper_cradle_far(); 121 | } 122 | 123 | inner_pcb_cutout(); 124 | fan_cutout(); 125 | sd_vent_cutouts(); 126 | usb_cutout(); 127 | securing_pins_cutout(); 128 | 129 | } 130 | } 131 | 132 | 133 | 134 | module outer_shape() { 135 | translate([-CASE_THICK, -(CASE_THICK), -(CASE_THICK+PCB_BOT_CLEARANCE)] ) 136 | minkowski() { 137 | cube([CASE_THICK*2+PCB_EDGE_X,CASE_THICK*2+PCB_EDGE_Y,CASE_THICK*2+INT_HEIGHT+PCB_BOT_CLEARANCE]); 138 | sphere(r=0.01, $fn=32); 139 | } 140 | } 141 | 142 | module outer_shape_curvy() { 143 | 144 | minkowski() { 145 | inner_bulk_cutout(); 146 | sphere(CASE_THICK,$fn=32); 147 | } 148 | 149 | } 150 | 151 | module inner_bulk_cutout() { 152 | union() 153 | { 154 | translate([0, 0, -PCB_BOT_CLEARANCE] ) 155 | cube([PCB_EDGE_X, PCB_EDGE_Y,PCB_EDGE_Z+PI_BOT+PCB_BOT_CLEARANCE]); 156 | 157 | translate([PI_ZERO_BOARD_EDGE_OFS_FROM_0-PI_ZERO_BOARD_TOP_CLEARANCE,0,PI_BOT]) 158 | cube([PI_ZERO_BOARD_TOP_CLEARANCE+PI_ZERO_BOARD_THICK+24,PCB_EDGE_Y,INT_HEIGHT-PI_BOT]); 159 | } 160 | } 161 | 162 | module fan_cutout() { 163 | union() 164 | { 165 | translate([0, -FAN_CASE_INSET, -PCB_BOT_CLEARANCE] ) 166 | cube([PCB_EDGE_X, PCB_EDGE_Y,PCB_EDGE_Z+PI_BOT+PCB_BOT_CLEARANCE]); 167 | translate([-PCB_EDGE_X_CLEARANCE/2, -FAN_CASE_INSET, -PCB_EDGE_Z_CLEARANCE/2] ) 168 | cube([PCB_EDGE_X+PCB_EDGE_X_CLEARANCE, PCB_EDGE_Y+PCB_EDGE_Y_EXTRA,PCB_EDGE_Z+PCB_EDGE_Z_CLEARANCE]); 169 | 170 | translate([PI_ZERO_BOARD_EDGE_OFS_FROM_0-PI_ZERO_BOARD_TOP_CLEARANCE,-FAN_CASE_INSET,PI_BOT]) 171 | cube([PI_ZERO_BOARD_TOP_CLEARANCE+PI_ZERO_BOARD_THICK+24,PCB_EDGE_Y,INT_HEIGHT-PI_BOT]); 172 | 173 | translate([-FAN_X_OFFSET-FAN_CLEARANCE/2, -FAN_THICK-FAN_PI_BACK_GAP-5, -PCB_BOT_CLEARANCE]) 174 | cube([FAN_CASE_INNER_WIDTH, FAN_THICK+4, FAN_CASE_INNER_WIDTH]); 175 | } 176 | } 177 | 178 | module inner_pcb_cutout() { 179 | translate([-PCB_EDGE_X_CLEARANCE/2, 0, -PCB_EDGE_Z_CLEARANCE/2] ) 180 | cube([PCB_EDGE_X+PCB_EDGE_X_CLEARANCE, PCB_EDGE_Y+PCB_EDGE_Y_EXTRA,PCB_EDGE_Z+PCB_EDGE_Z_CLEARANCE]); 181 | } 182 | 183 | module sdcard_cutouts() { 184 | for(pi_slot=[0:4]) { 185 | translate([PI_ZERO_BOARD_EDGE_OFS_FROM_0+(pi_slot*PI_SLOT_SPACING)+SDCARD_Z_FUDGE-SDCARD_THICK-PI_ZERO_BOARD_THICK, PCB_EDGE_Y-1, SDCARD_FROM_EDGE+PI_BOT+PCB_EDGE_Z]) 186 | cube([SDCARD_THICK,SDCARD_EXT,SDCARD_WIDTH]); 187 | } 188 | } 189 | 190 | module sd_vent_cutouts() { 191 | for(pi_slot=[0:4]) { 192 | translate([PI_ZERO_BOARD_EDGE_OFS_FROM_0+(pi_slot*PI_SLOT_SPACING)+SD_VENT_Z_FUDGE-(SD_VENT_THICK/2)-PI_ZERO_BOARD_THICK, PCB_EDGE_Y-1, SD_VENT_FROM_EDGE+PI_BOT+PCB_EDGE_Z]) 193 | cube([SD_VENT_THICK,SD_VENT_EXT,SD_VENT_WIDTH]); 194 | } 195 | } 196 | 197 | module usb_cutout() { 198 | union() { 199 | translate([USB_FROM_0, PCB_EDGE_Y-1, PCB_EDGE_Z-USB_Z_FUDGE]) 200 | cube([USB_WIDTH, USB_EXT, USB_HEIGHT+USB_Z_FUDGE]); 201 | translate([USB_FROM_0-USB_INSET_ADDL_W/2,PCB_EDGE_Y+CASE_THICK-USB_INSET_DEPTH, PCB_EDGE_Z-USB_Z_FUDGE-USB_INSET_ADDL_H/2]) 202 | cube([USB_WIDTH+USB_INSET_ADDL_W, USB_INSET_DEPTH*2, USB_HEIGHT+USB_Z_FUDGE+USB_INSET_ADDL_W]); 203 | } 204 | } 205 | 206 | module zero_lower_cradle() { 207 | difference() { 208 | translate([-0.01, PCB_EDGE_Y-PI_LOWER_CRADLE_L, PCB_EDGE_Z+PI_BOT-PI_LOWER_CRADLE_H+PI_LOWER_CRADLE_NOTCH+0.01] ) 209 | cube([PCB_EDGE_X+0.02, PI_LOWER_CRADLE_L+0.01,PI_LOWER_CRADLE_H]); 210 | for(pi_slot=[0:4]) { 211 | translate([PI_ZERO_BOARD_EDGE_OFS_FROM_0+(pi_slot*PI_SLOT_SPACING)-PI_ZERO_BOARD_THICK-0.2, PCB_EDGE_Y-PI_LOWER_CRADLE_L-0.01, PCB_EDGE_Z+PI_BOT-PI_WIDTH_CLEARANCE/2+0.01]) 212 | cube([PI_ZERO_BOARD_THICK+0.4,PI_LOWER_CRADLE_L+0.01,PI_LOWER_CRADLE_NOTCH+PI_WIDTH_CLEARANCE/2+0.01]); 213 | } 214 | } 215 | } 216 | 217 | module zero_upper_cradle_far() { 218 | difference() { 219 | translate([-0.01, PCB_EDGE_Y-PI_UPPER_CRADLE_L, INT_HEIGHT-PI_UPPER_CRADLE_H+0.01] ) 220 | cube([PCB_EDGE_X+0.02, PI_UPPER_CRADLE_L+0.01,PI_UPPER_CRADLE_H]); 221 | for(pi_slot=[0:4]) { 222 | translate([PI_ZERO_BOARD_EDGE_OFS_FROM_0+(pi_slot*PI_SLOT_SPACING)-PI_ZERO_BOARD_THICK-0.2, PCB_EDGE_Y-PI_UPPER_CRADLE_L-0.01, INT_HEIGHT-PI_UPPER_CRADLE_H-0.01]) 223 | cube([PI_ZERO_BOARD_THICK+0.4,PI_UPPER_CRADLE_L+0.01,PI_UPPER_CRADLE_H+PI_WIDTH_CLEARANCE/2+0.01]); 224 | } 225 | } 226 | } 227 | 228 | module fan_end() { 229 | difference() { 230 | translate([-CASE_THICK/2,-FAN_THICK-FAN_PI_BACK_GAP,-PCB_BOT_CLEARANCE]) 231 | minkowski() { 232 | cube([FAN_CASE_INNER_WIDTH,FAN_THICK+FAN_PI_BACK_GAP,FAN_CASE_INNER_WIDTH]); 233 | sphere(CASE_THICK,$fn=32); 234 | } 235 | translate([-CASE_THICK/2, -FAN_THICK-FAN_PI_BACK_GAP, -PCB_BOT_CLEARANCE]) 236 | cube([FAN_CASE_INNER_WIDTH, FAN_THICK, FAN_CASE_INNER_WIDTH]); 237 | BORE_WIDTH=FAN_WIDTH-4.5; 238 | translate([PCB_EDGE_X/2,-FAN_THICK-0.01,FAN_Z_OFS]) rotate([90,0,0]) cylinder(r=BORE_WIDTH/2, h=20,$fn=32); 239 | } 240 | } 241 | 242 | module fan_end_minimal() { 243 | 244 | translate([-FAN_X_OFFSET-FAN_CLEARANCE/2,-FAN_THICK-FAN_PI_BACK_GAP+CASE_THICK,-PCB_BOT_CLEARANCE]) 245 | minkowski() { 246 | cube([FAN_CASE_INNER_WIDTH,FAN_THICK+FAN_PI_BACK_GAP-CASE_THICK,FAN_CASE_INNER_WIDTH]); 247 | sphere(CASE_THICK,$fn=32); 248 | } 249 | } 250 | 251 | module securing_pins_cutout() { 252 | translate([-FAN_X_OFFSET-FAN_CLEARANCE/2-CASE_THICK-0.01,-SECURING_PIN_DIA/2+PCB_EDGE_Y_EXTRA+SECURING_PIN_Y_EXTRA,PCB_EDGE_Z/2]) 253 | rotate([0,90,0]) 254 | cylinder(d=SECURING_PIN_DIA, h=FAN_CASE_INNER_WIDTH+CASE_THICK*2+0.01, $fn=32); 255 | } 256 | 257 | -------------------------------------------------------------------------------- /terrible_pcb/terrible_misc.pretty/C_Radial_D8_L11.5_P3.5.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Capacitors_ThroughHole:C_Radial_D8_L11.5_P3.5 (layer F.Cu) (tedit 599FAC1A) 2 | (descr "Radial Electrolytic Capacitor Diameter 8mm x Length 11.5mm, Pitch 3.5mm") 3 | (tags "Electrolytic Capacitor") 4 | (fp_text reference REF** (at 1.75 -5.3) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value C_Radial_D8_L6_P2.5 (at 1.75 5.3) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_line (start 1.99 2.27) (end 1.99 2.26) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start 1.99 1.63) (end 1.99 2.27) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start 1.88 0.83) (end 1.99 1.63) (layer F.SilkS) (width 0.15)) 13 | (fp_line (start 1.89 3.86) (end 1.88 0.83) (layer F.SilkS) (width 0.15)) 14 | (fp_line (start 1.74 4) (end 1.89 3.86) (layer F.SilkS) (width 0.15)) 15 | (fp_line (start 1.74 0.77) (end 1.74 4) (layer F.SilkS) (width 0.15)) 16 | (fp_line (start 1.6 0.51) (end 1.74 0.77) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 1.59 4.03) (end 1.6 0.51) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 1.88 -0.88) (end 1.88 -0.86) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start 1.88 -3.88) (end 1.88 -0.88) (layer F.SilkS) (width 0.15)) 20 | (fp_line (start 1.73 -3.94) (end 1.88 -3.88) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start 1.74 -0.71) (end 1.73 -3.94) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 1.61 -0.52) (end 1.74 -0.71) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start 1.6 -3.99) (end 1.61 -0.52) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 1.325 -3.999) (end 1.325 3.999) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start 1.465 -3.994) (end 1.465 3.994) (layer F.SilkS) (width 0.15)) 26 | (fp_line (start 2.025 -3.924) (end 2.03 -0.87) (layer F.SilkS) (width 0.15)) 27 | (fp_line (start 2.05 0.9) (end 2.025 3.924) (layer F.SilkS) (width 0.15)) 28 | (fp_line (start 2.165 -3.894) (end 2.17 -0.93) (layer F.SilkS) (width 0.15)) 29 | (fp_line (start 2.15 0.95) (end 2.165 3.894) (layer F.SilkS) (width 0.15)) 30 | (fp_line (start 2.305 -3.858) (end 2.31 -1.04) (layer F.SilkS) (width 0.15)) 31 | (fp_line (start 2.3 0.98) (end 2.305 3.858) (layer F.SilkS) (width 0.15)) 32 | (fp_line (start 2.445 -3.817) (end 2.45 -1) (layer F.SilkS) (width 0.15)) 33 | (fp_line (start 2.43 1.01) (end 2.445 3.817) (layer F.SilkS) (width 0.15)) 34 | (fp_line (start 2.585 -3.771) (end 2.59 -1.04) (layer F.SilkS) (width 0.15)) 35 | (fp_line (start 2.57 1.01) (end 2.585 3.771) (layer F.SilkS) (width 0.15)) 36 | (fp_line (start 2.725 -3.718) (end 2.725 -0.961) (layer F.SilkS) (width 0.15)) 37 | (fp_line (start 2.72 1.02) (end 2.725 3.718) (layer F.SilkS) (width 0.15)) 38 | (fp_line (start 2.865 -3.659) (end 2.865 -0.991) (layer F.SilkS) (width 0.15)) 39 | (fp_line (start 2.865 0.991) (end 2.865 3.659) (layer F.SilkS) (width 0.15)) 40 | (fp_line (start 3.005 -3.594) (end 3 -0.88) (layer F.SilkS) (width 0.15)) 41 | (fp_line (start 3 0.88) (end 3.005 3.594) (layer F.SilkS) (width 0.15)) 42 | (fp_line (start 3.145 -3.523) (end 3.13 -0.83) (layer F.SilkS) (width 0.15)) 43 | (fp_line (start 3.15 0.8) (end 3.145 3.523) (layer F.SilkS) (width 0.15)) 44 | (fp_line (start 3.285 -3.444) (end 3.28 -0.67) (layer F.SilkS) (width 0.15)) 45 | (fp_line (start 3.3 0.63) (end 3.285 3.444) (layer F.SilkS) (width 0.15)) 46 | (fp_line (start 3.425 -3.357) (end 3.43 -0.44) (layer F.SilkS) (width 0.15)) 47 | (fp_line (start 3.43 0.42) (end 3.425 3.357) (layer F.SilkS) (width 0.15)) 48 | (fp_line (start 3.565 -3.262) (end 3.565 -0.825) (layer F.SilkS) (width 0.15)) 49 | (fp_line (start 3.57 -0.8) (end 3.565 3.262) (layer F.SilkS) (width 0.15)) 50 | (fp_line (start 3.705 -3.158) (end 3.705 -0.709) (layer F.SilkS) (width 0.15)) 51 | (fp_line (start 3.71 -0.68) (end 3.705 3.158) (layer F.SilkS) (width 0.15)) 52 | (fp_line (start 3.845 -3.044) (end 3.85 0.56) (layer F.SilkS) (width 0.15)) 53 | (fp_line (start 3.845 0.535) (end 3.845 3.044) (layer F.SilkS) (width 0.15)) 54 | (fp_line (start 3.985 -2.919) (end 3.985 -0.173) (layer F.SilkS) (width 0.15)) 55 | (fp_line (start 3.98 -0.21) (end 3.985 2.919) (layer F.SilkS) (width 0.15)) 56 | (fp_line (start 4.125 -2.781) (end 4.125 2.781) (layer F.SilkS) (width 0.15)) 57 | (fp_line (start 4.265 -2.629) (end 4.265 2.629) (layer F.SilkS) (width 0.15)) 58 | (fp_line (start 4.405 -2.459) (end 4.405 2.459) (layer F.SilkS) (width 0.15)) 59 | (fp_line (start 4.545 -2.268) (end 4.545 2.268) (layer F.SilkS) (width 0.15)) 60 | (fp_line (start 4.685 -2.05) (end 4.685 2.05) (layer F.SilkS) (width 0.15)) 61 | (fp_line (start 4.825 -1.794) (end 4.825 1.794) (layer F.SilkS) (width 0.15)) 62 | (fp_line (start 4.965 -1.483) (end 4.965 1.483) (layer F.SilkS) (width 0.15)) 63 | (fp_line (start 5.08 -1.15) (end 5.09 1.15) (layer F.SilkS) (width 0.15)) 64 | (fp_line (start 5.2 -0.67) (end 5.22 0.62) (layer F.SilkS) (width 0.15)) 65 | (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) 66 | (fp_circle (center 1.25 0) (end 1.25 -4.0375) (layer F.SilkS) (width 0.15)) 67 | (fp_circle (center 1.25 0) (end 1.25 -4.3) (layer F.CrtYd) (width 0.05)) 68 | (pad 2 thru_hole circle (at 2.5 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) 69 | (pad 1 thru_hole rect (at 0 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) 70 | (model Capacitors_ThroughHole.3dshapes/C_Radial_D8_L11.5_P3.5.wrl 71 | (at (xyz 0 0 0)) 72 | (scale (xyz 1 1 1)) 73 | (rotate (xyz 0 0 0)) 74 | ) 75 | ) 76 | -------------------------------------------------------------------------------- /terrible_pcb/terrible_misc.pretty/C_Radial_D8_L6_P2.5.kicad_mod: -------------------------------------------------------------------------------- 1 | (module C_Radial_D8_L6_P2.5 (layer F.Cu) (tedit 599FAC1A) 2 | (descr "Radial Electrolytic Capacitor Diameter 8mm x Length 6mm, Pitch 2.5mm") 3 | (tags "Electrolytic Capacitor") 4 | (fp_text reference REF** (at 1.75 -5.3) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value C_Radial_D8_L6_P2.5 (at 1.75 5.3) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_line (start 1.99 2.27) (end 1.99 2.26) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start 1.99 1.63) (end 1.99 2.27) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start 1.88 0.83) (end 1.99 1.63) (layer F.SilkS) (width 0.15)) 13 | (fp_line (start 1.89 3.86) (end 1.88 0.83) (layer F.SilkS) (width 0.15)) 14 | (fp_line (start 1.74 4) (end 1.89 3.86) (layer F.SilkS) (width 0.15)) 15 | (fp_line (start 1.74 0.77) (end 1.74 4) (layer F.SilkS) (width 0.15)) 16 | (fp_line (start 1.6 0.51) (end 1.74 0.77) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 1.59 4.03) (end 1.6 0.51) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 1.88 -0.88) (end 1.88 -0.86) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start 1.88 -3.88) (end 1.88 -0.88) (layer F.SilkS) (width 0.15)) 20 | (fp_line (start 1.73 -3.94) (end 1.88 -3.88) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start 1.74 -0.71) (end 1.73 -3.94) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start 1.61 -0.52) (end 1.74 -0.71) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start 1.6 -3.99) (end 1.61 -0.52) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 1.325 -3.999) (end 1.325 3.999) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start 1.465 -3.994) (end 1.465 3.994) (layer F.SilkS) (width 0.15)) 26 | (fp_line (start 2.025 -3.924) (end 2.03 -0.87) (layer F.SilkS) (width 0.15)) 27 | (fp_line (start 2.05 0.9) (end 2.025 3.924) (layer F.SilkS) (width 0.15)) 28 | (fp_line (start 2.165 -3.894) (end 2.17 -0.93) (layer F.SilkS) (width 0.15)) 29 | (fp_line (start 2.15 0.95) (end 2.165 3.894) (layer F.SilkS) (width 0.15)) 30 | (fp_line (start 2.305 -3.858) (end 2.31 -1.04) (layer F.SilkS) (width 0.15)) 31 | (fp_line (start 2.3 0.98) (end 2.305 3.858) (layer F.SilkS) (width 0.15)) 32 | (fp_line (start 2.445 -3.817) (end 2.45 -1) (layer F.SilkS) (width 0.15)) 33 | (fp_line (start 2.43 1.01) (end 2.445 3.817) (layer F.SilkS) (width 0.15)) 34 | (fp_line (start 2.585 -3.771) (end 2.59 -1.04) (layer F.SilkS) (width 0.15)) 35 | (fp_line (start 2.57 1.01) (end 2.585 3.771) (layer F.SilkS) (width 0.15)) 36 | (fp_line (start 2.725 -3.718) (end 2.725 -0.961) (layer F.SilkS) (width 0.15)) 37 | (fp_line (start 2.72 1.02) (end 2.725 3.718) (layer F.SilkS) (width 0.15)) 38 | (fp_line (start 2.865 -3.659) (end 2.865 -0.991) (layer F.SilkS) (width 0.15)) 39 | (fp_line (start 2.865 0.991) (end 2.865 3.659) (layer F.SilkS) (width 0.15)) 40 | (fp_line (start 3.005 -3.594) (end 3 -0.88) (layer F.SilkS) (width 0.15)) 41 | (fp_line (start 3 0.88) (end 3.005 3.594) (layer F.SilkS) (width 0.15)) 42 | (fp_line (start 3.145 -3.523) (end 3.13 -0.83) (layer F.SilkS) (width 0.15)) 43 | (fp_line (start 3.15 0.8) (end 3.145 3.523) (layer F.SilkS) (width 0.15)) 44 | (fp_line (start 3.285 -3.444) (end 3.28 -0.67) (layer F.SilkS) (width 0.15)) 45 | (fp_line (start 3.3 0.63) (end 3.285 3.444) (layer F.SilkS) (width 0.15)) 46 | (fp_line (start 3.425 -3.357) (end 3.43 -0.44) (layer F.SilkS) (width 0.15)) 47 | (fp_line (start 3.43 0.42) (end 3.425 3.357) (layer F.SilkS) (width 0.15)) 48 | (fp_line (start 3.565 -3.262) (end 3.565 -0.825) (layer F.SilkS) (width 0.15)) 49 | (fp_line (start 3.57 -0.8) (end 3.565 3.262) (layer F.SilkS) (width 0.15)) 50 | (fp_line (start 3.705 -3.158) (end 3.705 -0.709) (layer F.SilkS) (width 0.15)) 51 | (fp_line (start 3.71 -0.68) (end 3.705 3.158) (layer F.SilkS) (width 0.15)) 52 | (fp_line (start 3.845 -3.044) (end 3.85 0.56) (layer F.SilkS) (width 0.15)) 53 | (fp_line (start 3.845 0.535) (end 3.845 3.044) (layer F.SilkS) (width 0.15)) 54 | (fp_line (start 3.985 -2.919) (end 3.985 -0.173) (layer F.SilkS) (width 0.15)) 55 | (fp_line (start 3.98 -0.21) (end 3.985 2.919) (layer F.SilkS) (width 0.15)) 56 | (fp_line (start 4.125 -2.781) (end 4.125 2.781) (layer F.SilkS) (width 0.15)) 57 | (fp_line (start 4.265 -2.629) (end 4.265 2.629) (layer F.SilkS) (width 0.15)) 58 | (fp_line (start 4.405 -2.459) (end 4.405 2.459) (layer F.SilkS) (width 0.15)) 59 | (fp_line (start 4.545 -2.268) (end 4.545 2.268) (layer F.SilkS) (width 0.15)) 60 | (fp_line (start 4.685 -2.05) (end 4.685 2.05) (layer F.SilkS) (width 0.15)) 61 | (fp_line (start 4.825 -1.794) (end 4.825 1.794) (layer F.SilkS) (width 0.15)) 62 | (fp_line (start 4.965 -1.483) (end 4.965 1.483) (layer F.SilkS) (width 0.15)) 63 | (fp_line (start 5.08 -1.15) (end 5.09 1.15) (layer F.SilkS) (width 0.15)) 64 | (fp_line (start 5.2 -0.67) (end 5.22 0.62) (layer F.SilkS) (width 0.15)) 65 | (fp_circle (center 2.5 0) (end 2.5 -1) (layer F.SilkS) (width 0.15)) 66 | (fp_circle (center 1.25 0) (end 1.25 -4.0375) (layer F.SilkS) (width 0.15)) 67 | (fp_circle (center 1.25 0) (end 1.25 -4.3) (layer F.CrtYd) (width 0.05)) 68 | (pad 2 thru_hole circle (at 2.5 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) 69 | (pad 1 thru_hole rect (at 0 0) (size 1.3 1.3) (drill 0.8) (layers *.Cu *.Mask F.SilkS)) 70 | (model Capacitors_ThroughHole.3dshapes/C_Radial_D7.5_L11.2_P2.5.wrl 71 | (at (xyz 0 0 0)) 72 | (scale (xyz 1 1 0.535714)) 73 | (rotate (xyz 0 0 0)) 74 | ) 75 | ) 76 | -------------------------------------------------------------------------------- /terrible_pcb/terrible_v1a_bom.csv: -------------------------------------------------------------------------------- 1 | Digi-Key Part Number,Manufacturer,Manufacturer Part Number,Customer Reference,Quantity 1,Quantity 2,Quantity 3,Mfg Std Lead Time,Description,Comments,RoHS Status,Lead Free Status,REACH Status 2 | H125237-ND,HIROSE ELECTRIC CO LTD,ZX20-B-5S-UNIT(30),P1,5,0,0,8 Weeks,CONN PLUG USB MICRO B PCB VERT,,RoHS Compliant,Lead free,Not Available 3 | H11496CT-ND,HIROSE ELECTRIC CO LTD (VA),ZX20-B-SLDC,P1,5,0,0,8 Weeks,SHIELDING PLATE FOR ZX20 PLUG,Alternate Packaging Exists,RoHS Compliant,Lead free,Not Available 4 | 428-3155-1-ND,CYPRESS SEMICONDUCTOR CORP (VA),CY7C65632-48AXCT,U1,1,0,0,15 Weeks,IC CONTROLLER USB 48TQFP,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jul-2017 5 | AP2191DWG-7DICT-ND,DIODES INCORPORATED (VA),AP2191DWG-7,U2,4,0,0,12 Weeks,IC PWR SW USB SOT25,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jan-2017 6 | P964-ND,PANASONIC ELECTRONIC COMPONENTS,ECE-A1AKS221,C1,4,0,0,15 Weeks,CAP ALUM 220UF 20% 10V RADIAL,,RoHS Compliant,Lead free,Unaffected Jun-2016 7 | WM1399CT-ND,"MOLEX, LLC (VA)",1050170001,P6,1,0,0,17 Weeks,CONN RCPT MICRO USB R/A SMD,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jun-2016 8 | 535-9037-ND,ABRACON LLC,ABL-12.000MHZ-B2,Y1,1,0,0,9 Weeks,CRYSTAL 12.0000MHZ 18PF T/H,,RoHS Compliant,Lead free,Affected Jan-2017 9 | 311-1088-1-ND,YAGEO (VA),CC0603KRX7R7BB104,C*,15,0,0,16 Weeks,CAP CER 0.1UF 16V X7R 0603,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jul-2017 10 | 1276-1946-1-ND,"SAMSUNG ELECTRO-MECHANICS AMERICA, INC (VA)",CL10B105KP8NNNC,C13,3,0,0,18 Weeks,CAP CER 1UF 10V X7R 0603,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jul-2017 11 | 1276-1187-1-ND,"SAMSUNG ELECTRO-MECHANICS AMERICA, INC (VA)",CL10C200JB8NNNC,C8,2,0,0,26 Weeks,CAP CER 20PF 50V C0G/NP0 0603,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jul-2017 12 | 1276-6456-1-ND,"SAMSUNG ELECTRO-MECHANICS AMERICA, INC (VA)",CL21A106KPFNNNG,C7,1,0,0,26 Weeks,CAP CER 10UF 10V X5R 0805,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jul-2017 13 | 587-1932-1-ND,TAIYO YUDEN (VA),BKP2125HS600-T,FB1,1,0,0,6 Weeks,FERRITE BEAD 60 OHM 0805 1LN,Alternate Packaging Exists,RoHS Compliant,Lead free,Not Available 14 | 311-10KGRCT-ND,YAGEO (VA),RC0603JR-0710KL,R1,10,0,0,16 Weeks,RES SMD 10K OHM 5% 1/10W 0603,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jul-2017 15 | 311-649HRCT-ND,YAGEO (VA),RC0603FR-07649RL,R9,1,0,0,16 Weeks,RES SMD 649 OHM 1% 1/10W 0603,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jul-2017 16 | 311-47KGRCT-ND,YAGEO (VA),RC0603JR-0747KL,R7,1,0,0,16 Weeks,RES SMD 47K OHM 5% 1/10W 0603,Alternate Packaging Exists,RoHS Compliant,Lead free,Unaffected Jul-2017 17 | XC1750-ND,ECS INC,700-TFL-9001,Y1,1,0,0,3 Weeks,CRYSTAL INSULATOR HC-49U/US,,RoHS Compliant,Lead free,Unaffected Jun-2016 18 | -------------------------------------------------------------------------------- /wpa_supplicant.conf: -------------------------------------------------------------------------------- 1 | country=US 2 | ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev 3 | update_config=1 4 | 5 | network={ 6 | ssid="YOUR_SSID" 7 | scan_ssid=1 8 | psk="YOUR_PASSPHRASE" 9 | key_mgmt=WPA-PSK 10 | } 11 | --------------------------------------------------------------------------------