Compare commits

...

No commits in common. "master" and "gh-pages" have entirely different histories.

419 changed files with 2980 additions and 723911 deletions

View file

@ -1,46 +0,0 @@
Thank you for opening an issue on an Adafruit Arduino library repository. To
improve the speed of resolution please review the following guidelines and
common troubleshooting steps below before creating the issue:
- **Do not use GitHub issues for troubleshooting projects and issues.** Instead use
the forums at http://forums.adafruit.com to ask questions and troubleshoot why
something isn't working as expected. In many cases the problem is a common issue
that you will more quickly receive help from the forum community. GitHub issues
are meant for known defects in the code. If you don't know if there is a defect
in the code then start with troubleshooting on the forum first.
- **If following a tutorial or guide be sure you didn't miss a step.** Carefully
check all of the steps and commands to run have been followed. Consult the
forum if you're unsure or have questions about steps in a guide/tutorial.
- **For Arduino projects check these very common issues to ensure they don't apply**:
- For uploading sketches or communicating with the board make sure you're using
a **USB data cable** and **not** a **USB charge-only cable**. It is sometimes
very hard to tell the difference between a data and charge cable! Try using the
cable with other devices or swapping to another cable to confirm it is not
the problem.
- **Be sure you are supplying adequate power to the board.** Check the specs of
your board and plug in an external power supply. In many cases just
plugging a board into your computer is not enough to power it and other
peripherals.
- **Double check all soldering joints and connections.** Flakey connections
cause many mysterious problems. See the [guide to excellent soldering](https://learn.adafruit.com/adafruit-guide-excellent-soldering/tools) for examples of good solder joints.
- **Ensure you are using an official Arduino or Adafruit board.** We can't
guarantee a clone board will have the same functionality and work as expected
with this code and don't support them.
If you're sure this issue is a defect in the code and checked the steps above
please fill in the following fields to provide enough troubleshooting information.
You may delete the guideline and text above to just leave the following details:
- Arduino board: **INSERT ARDUINO BOARD NAME/TYPE HERE**
- Arduino IDE version (found in Arduino -> About Arduino menu): **INSERT ARDUINO
VERSION HERE**
- List the steps to reproduce the problem below (if possible attach a sketch or
copy the sketch code in too): **LIST REPRO STEPS BELOW**

View file

@ -1,26 +0,0 @@
Thank you for creating a pull request to contribute to Adafruit's GitHub code!
Before you open the request please review the following guidelines and tips to
help it be more easily integrated:
- **Describe the scope of your change--i.e. what the change does and what parts
of the code were modified.** This will help us understand any risks of integrating
the code.
- **Describe any known limitations with your change.** For example if the change
doesn't apply to a supported platform of the library please mention it.
- **Please run any tests or examples that can exercise your modified code.** We
strive to not break users of the code and running tests/examples helps with this
process.
Thank you again for contributing! We will try to test and integrate the change
as soon as we can, but be aware we have many GitHub repositories to manage and
can't immediately respond to every request. There is no need to bump or check in
on a pull request (it will clutter the discussion of the request).
Also don't be worried if the request is closed or not integrated--sometimes the
priorities of Adafruit's GitHub code (education, ease of use) might not match the
priorities of the pull request. Don't fret, the open source community thrives on
forks and GitHub makes it easy to keep your changes in a forked repo.
After reviewing the guidelines above you can delete this text from the pull request.

View file

@ -1,32 +0,0 @@
name: Arduino Library CI
on: [pull_request, push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v4
with:
python-version: '3.x'
- uses: actions/checkout@v3
- uses: actions/checkout@v3
with:
repository: adafruit/ci-arduino
path: ci
- name: pre-install
run: bash ci/actions_install.sh
- name: test platforms
run: python3 ci/build_platform.py pico_rp2040
# - name: clang
# run: python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r .
- name: doxygen
env:
GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }}
PRETTYNAME : "PicoDVI - Adafruit Fork"
run: bash ci/doxy_gen_and_deploy.sh

5
.gitignore vendored
View file

@ -1,5 +0,0 @@
Doxyfile*
doxygen_sqlite3.db
html
.vscode
build

1
.nojekyll Normal file
View file

@ -0,0 +1 @@

29
LICENSE
View file

@ -1,29 +0,0 @@
BSD 3-Clause License
Copyright (c) 2021, Luke Wren
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

303
Readme.md
View file

@ -1,303 +0,0 @@
PicoDVI - Adafruit Fork for Arduino IDE + Adafruit_GFX compatibility
====================================================================
(Original Readme content follows later)
Implements a few framebuffer types to which Adafruit_GFX drawing operations
can be made; not every permutation PicoDVI is capable of, but a useful subset.
WARNING: all video modes require overclocking (performed automatically at
run-time, nothing to select), occasionally over-volting (optionally selected
in sketch code), and higher resolutions may require reducing the QSPI clock
rate (Tools menu in future arduino-pico release). The RP2040 microcontroller
is being run WAY beyond spec and there is a VERY SMALL BUT NONZERO
POSSIBILITY OF PERMANENT DAMAGE. Please see LICENSE file; usual software
disclaimers about liability apply, user accepts risk.
Requires Earle Philhower III RP2040 Arduino core (not the "official" Arduino
RP2040 core).
Changes vs main PicoDVI repo:
- Add library.properties file, src and examples directories per Arduino
requirements.
- A full copy of software/libdvi is made in src (originally was soft-linked but Arduino Library Manager does not approve). If any updates are made in the original PicoDVI libdvi directory, copy them here!
- The file dvi_serialiser.pio.h, normally not part of the distribution and
generated during the Pico SDK build process, is provided here for Arduino
build to work. If any changes are made in dvi_serialiser.pio (either here
or by bringing in updates from upstream code), this header will need to be
regenerated.
- extern "C" around most function defs, to be linkable with C++ (Arduino).
- A couple compile-time constants have been changed to run-time configurable
because some color and resolution things aren't known until a constructor is
called: dvi_vertical_repeat and dvi_monochrome_tmds.
- DVI_1BPP_BIT_REVERSE is switched '1' by default (to work with bit order
used by GFXcanvas1 object). Pico SDK-built examples using 1-bit mode are
fixed by changing the corresponding CMakeLists.txt files to set this to 0.
Font data has had bit order reversed to match this layout.
All files from the PicoDVI repo are kept even if not used in this build
(e.g. apps and assets directories, among others) so same repo can still be
used via Pico SDK if desired.
Original Readme content:
=======
RP2350 PicoDVI Preview
======================
Changes from the public GitHub version:
* All Arm assembly in `libdvi` has been ported to RISC-V and tuned for Hazard3
* Some of the existing Arm assembly in `libdvi` has been tweaked for better performance on Cortex-M33
* RGB encode now uses the SIO TMDS encoders by default on RP2350 (can be disabled by defining `DVI_USE_SIO_TMDS_ENCODE=0` -- see `software/libdvi/dvi_config_defs.h`)
* Much of the Arm assembly in `libsprite` has been ported to RISC-V -- enough to run the stock demos
Build instructions:
```bash
cd software
mkdir build
# PICO_PLATFORM can also be rp2350-riscv
# List of DVI configs is in software/include/common_dvi_pin_configs.h
cmake -DPICO_SDK_PATH=/path/to/sdk -DPICO_PLATFORM=rp2350 -DPICO_COPY_TO_RAM=1 -DDVI_DEFAULT_SERIAL_CONFIG=pico_sock_cfg ..
make -j$(nproc)
# Then flash a binary, e.g.:
cp apps/tiles_and_sprites/tiles_and_sprites.uf2
```
If you plan to run the `vista` demo, then note that there are now two UF2 data files, `software/assets/vista_data_rp2040.uf2` and `software/assets/vista_data_rp2350.uf2`. The only difference is the family IDs: the first can be dragged on RP2040 and on RP2350 A0, and the second can be dragged on RP2350 A1 and later.
The following is the original RP2040 writeup:
Bitbanged DVI on the RP2040 Microcontroller
===========================================
![](img/mountains.jpg)
*640x480 RGB565 image, 640x480p 60 Hz DVI mode. 264 kB SRAM, 2x Cortex-M0+, system clock 252 MHz*
Quick links:
[Board Schematic](hardware/board/picodvi.pdf)
[Software Readme and Example Photos](software/)
About this Project
-----------------
This project stems from a stupid idea I had during RP2040 bringup. I couldn't convince myself the idea was too stupid to work, so I took a leap of faith on it, and the results are documented here.
RP2040 was designed to run at 133 MHz, but we found (without too much surprise) that typical silicon can be pushed further. In fact, there was overlap between the maximum system clock, and the TMDS bit clocks of slower DVI video modes. We had done great stuff with VGA on the FPGA platform, which ran at 48 MHz, but wouldn't it be absurd and wonderful to connect your microcontroller straight to an HD TV with no other electronics in between? This seemed unlikely to work out, but I stayed up at night playing around with assembly loops, and I could not convince myself that DVI was out of reach. Everything seemed to fit:
- With some of the core-local hardware on RP2040, and a neat encoding trick, I could do pixel-doubled TMDS encode on-the-fly using around 60% of an M0+ (running at 252 MHz, for 640x480p 60 Hz DVI)
- PIO can yeet out data streams at system clock frequency, and drive a 1/10th rate clock on the side, with pretty minimal programming
- Some of the DMA features are help with putting together the sync/blanking patterns on the fly, rather than having the patterns flat in memory
- With the second processor utterly unencumbered, you can render some pretty graphics to put on your DVI display. There is even enough RAM for a QVGA framebuffer!
The greatest unknown was driving 252 Mbps serial through the general-purpose digital pads (especially *differential* serial, emulated with two single-ended pads). By this point I was utterly driven and consumed by the need to find out if DVI could work, so I laid out a board over a few evenings after work.
![](img/bare_board.jpg)
The Rev A board uses a slightly cursed coupling circuit I first saw (and used) on the ULX3S FPGA board, which just connects 3V3 IOs straight into the HDMI socket through some coupling caps.
![](img/ac_coupling.png)
Those who understand the TMDS physical layer are probably screaming, but I was fine, because I did not read the electrical section of the spec until after I got this board working. Then I screamed. Before the boards arrived I did some debugging, with these two strategies:
- Run the entire system at 12 MHz (crystal freq), so that the signals are probeable, but the relative speed of IO, DMA and CPUs is the same. This makes sure my code can keep the PIO state machines fed with data
- Swap in an alternate PIO program which outputs 10 bit UART data frames instead of direct serial (a 17% drop in throughput). I could then dump the TMDS stream with a logic analyser, and examine and parse it on my machine
I also tried out my slightly harebrained TMDS encoding scheme, which matches the letter but not the spirit of the DVI specification, on an FPGA board with some DVI gateware I wrote for a previous weekend project. This confirmed that the principle was sound, and that my TV and monitor would have no trouble with the output of the matching software encoder on RP2040, provided the chip could physically shove bits out of the pins fast enough.
Because this is a home project, I didn't touch the HDL sim, and stuck to ARM debug, UART and logic analyser for my debugging. This worked some kinks out of the software, and bringup of the freshly-soldered board was smooth. After swapping the blue and red lanes into the right order -- to which I will say, in my defense, I _consistently_ thought the blue+sync lane was lane 2 -- I had a clean RGB565 QVGA 60 Hz static image on my monitor.
Improved Output Circuit
-----------------------
After reading the TMDS electrical section of the DVI spec, and staring quietly out the window for a while, wondering how this board *ever* worked, I rethought the output circuit. Eight capacitors was clearly not the way to go -- what I really needed was eight *resistors*. That's what I call a DVI PHY.
![](img/dc_coupling.png)
I also revised my earlier approach of "turn all the GPIOs up to 11", and reduced the pad drive and slew. At work on Monday, a colleague agreed it would be a great idea to plug my microcontroller monstrosity into the scope setup we use for 4k HDMI testing. Here are the results at VGA 60 Hz (252 Mbps):
![](img/eye_mask_vga60.png)
I was sitting on the other side of the lab while he was running the test, and when the eye mask appeared he just said "do you wanna see something funny".
![](img/table_vga60.png)
A clean bill of health! We also tried 720p30 (372 Mbps), which requires overvoltage on typical silicon (something you can do with one register write on RP2040):
![](img/eye_mask_720p30.png)
![](img/table_720p30.png)
Honestly, this has shaken me. This is a silly amount of bandwidth for a tiny little microcontroller.
Although it passes the eye mask and a few other tests, this circuit is not fully compliant with the DVI spec. In particular, our logic `1` is not quite right, due to the CMOS drive on the GPIOs: any more than a \~60 mV mismatch between the Source and Sink +3V3 rails will push our high-level offset outside of the +- 10 mV allowed by the spec. This is a real nitpick, because a *differential* receiver is unlikely to care about a 10 mV *commmon mode* offset, but still -- it is out of spec. A better circuit could use a fast Si diode and a smaller resistor value, e.g. 220 ohm, so that the emulated CML output floats on the sink's +3V3 supply when we output our 3V3 CMOS high level, but still sinks the requisite 10 mA when driving low.
That said, it's compliant enough that I can wander around the office and plug it into every monitor I see, and not even _one_ of them explodes (if my manager is reading this -- hi).
Going Further
-------------
Everything we have done is software defined -- there's no video hardware on this chip. That would of course be _silly_ on a microcontroller. Let's list all the hardware resources used to display a pixel-doubled image on screen:
- 3 out of 8 PIO state machines (the DVI code requires these all be on the same PIO instance, of which there are two, with four state machines each)
- 6 out of 12 DMA channels (two per TMDS lane: one for control blocks, one for data)
- 30% of DMA bandwidth and PIO bus endpoint bandwidth
- 60% of CPU cycles on one core, other core 100% free
- Just over 50% of RAM with a QVGA RGB565 image (but RGB332 support is simple enough)
- The PicoDVI board's only HDMI-shaped socket
Hmm. All of these numbers are less than half of the total, and everything else is software. It's a shame there's only one socket I can put an HDMI cable in. I mean, I guess I _do_ have these adorable PMOD-DVI adapters that I keep plugging into FPGA boards and getting away with it:
![](img/dvi-pmod.jpg)
Oh. Maybe? It fits...
![](img/two_connectors.jpg)
I guess the jig is up at this point, because of course I wouldn't post something so daft-looking if it didn't work:
![](img/two_displays.jpg)
[The code is here.](software/apps/dual_display/main.c)
Example Apps
------------
The [software readme](software/) has some example apps which put the DVI library through its paces, with pictures for some of the fun ones. I won't duplicate that content here.
Encoding TMDS
-------------
DVI uses an encoding scheme called TMDS during the video periods. 8 data bits are represented by a 10 bit TMDS symbol, which is serialised at 10x the pixel clock. 3 lanes transfer 24 bits of data per pixel clock, which for our purposes is one pixel. TMDS is DC-balanced, although DVI as a whole is *not* DC-balanced on all lanes, due to the control symbol encoding. The algorithm given in the DVI spec is quite fussy, and you are supposed to match its output exactly. It tracks running disparity with a counter, and optionally inverts symbols to bound the disparity, with some tie-break rules for 0-balance symbols.
Key fact about TMDS: if the current running disparity is 0, and you encode data `x` followed by data `x ^ 0x01`, this produces a pair of TMDS symbols with 0 net parity. If you manipulate the input data in this way -- duplicating the pixels, and twiddling the LSB -- TMDS becomes *stateless*, because the running disparity is defined to be 0 at the start of each video period, and returns to 0 after each duplicated pixel pair.
If we have a half-resolution scanline buffer, and are only interested in 7 or fewer bits of significance for each colour channel, we can encode this with a lookup table, where each entry is two TMDS symbols with net balance 0. The toggling of the LSB with each output pixel is not noticeable.
Great. LUTs are fast. On a Cortex-M0+, though, they are not *that* fast. Each load/store is 2 cycles, and we end up spending a surprising amount of time shifting and masking the data. Here is a vaguely plausible loop for encoding one colour channel, compiled with `-O3 -mcpu=cortex-m0plus` on gcc 9 ([Godbolt link](https://godbolt.org/z/q741oK)).
*C*
```
void tmds_encode_16bpp(const uint16_t *pixbuf, uint32_t *tmdsbuf, size_t n_pix, uint16_t chan_mask, unsigned int chan_shift) {
for (size_t i = 0; i < n_pix; ++i) {
unsigned int idx = (pixbuf[i] >> chan_shift) & chan_mask;
tmdsbuf[2 * i] = tmds_table[idx];
tmdsbuf[2 * i + 1] = tmds_table[idx + 1];
}
}
```
*ARMv6M*
```
tmds_encode_16bpp(unsigned short const*, unsigned long*, unsigned int, unsigned short, unsigned int):
push {r4, r5, r6, r7, lr}
ldr r7, [sp, #20]
cmp r2, #0
beq .L1
lsls r2, r2, #3
ldr r5, .L6
adds r2, r1, r2
.L4:
ldrh r4, [r0] ; 2 cyc
adds r0, r0, #2 ; 1 cyc
asrs r4, r4, r7 ; 1 cyc
ands r4, r3 ; 1 cyc
lsls r6, r4, #2 ; 1 cyc
ldr r6, [r5, r6] ; 2 cyc
adds r4, r4, #1 ; 1 cyc
str r6, [r1] ; 2 cyc
lsls r4, r4, #2 ; 1 cyc
ldr r4, [r5, r4] ; 2 cyc
str r4, [r1, #4] ; 2 cyc
adds r1, r1, #8 ; 1 cyc
cmp r2, r1 ; 1 cyc
bne .L4 ; 2 cyc if taken
.L1:
pop {r4, r5, r6, r7, pc}
```
Focusing on the loop starting at `.L4`, this is a surprisingly literal translation -- first load a pixel, bump the pointer, mask and shift (5 cycles). Next transfer a pixel from the LUT to the output buffer (5 cycles) while bumping the LUT index (1 cycle), transfer the second pixel (5 cycles), do a little bookkeeping and branch back to the start (4 cycles). Each loop takes 20 cycles, and encodes one colour channel of 2 output pixels.
We must output a pixel once per 10 system clock cycles (as the system runs at the TMDS bit clock), and since we are doubling pixels horizontally we may as well double vertically too, by using each encoded buffer twice. Taking horizontal blanking into account (1:4 ratio at VGA), we would spend 1.2 of our two cores on TMDS encode, and have 0.8 cores left to generate DVI timing and render graphics.
The compiler has messed up here (or perhaps I have unwittingly constrained it to produce bad code by writing shoddy C), and we can save 4 cycles right off the bat with better instruction selection:
```
.L4:
ldrh r4, [r0] ; 2 cyc
adds r0, r0, #2 ; 1 cyc
asrs r4, r4, r7 ; 1 cyc
ands r4, r3 ; 1 cyc
lsls r4, r4, #2 ; 1 cyc
ldr r6, [r5, r4] ; 2 cyc
stmia r1!, {r6} ; 2 cyc
adds r4, r4, #4 ; 1 cyc
ldr r6, [r5, r4] ; 2 cyc
stmia r1!, {r6} ; 2 cyc
cmp r2, r1 ; 1 cyc
bne .L4 ; 2 cyc if taken
```
But this is still painfully slow -- it wouldn't even fit on one core. Some avenues for improvement:
- Use a word load to fetch two input pixels at once, so we can amortise the load cost, and some of the shift/mask cost
- Use larger `ldmia` and `stmia` on the LUT to squeeze more memory bandwidth out of the M0+ (`ldr` is 2 cycles and `ldmia` is n + 1)
- Use the interpolators on RP2040 to accelerate address generation
The interpolator is a fun piece of hardware for accelerating fixed point arithmetic. Note: "interpolator" is a working title which we will definitely not forget to change to something better before launch. The _original_ plan was a simple configurable 2D phase accumulator that we could use to play Super Mario Kart on the FPGA platform at 48 MHz. Sadly, that game port never materialised, not least because we couldn't publish it. After a lot of back and forth between hardware and software, we realised that making the datapath a little more flexible would go a long way, and this eventually let to the current guise of the interpolator:
![](img/interpolator.png)
Our trick here is loading a one-word pixel pair into one of the accumulators, and configuring the interpolator to extract the correct bits of each pixel, shift them, and add them to a LUT base pointer. The interpolator doesn't have a left shift (not needed for Super Mario Kart) so for the blue channel (least significant in our RGB565 pixel format) we need to do one left shift per two pixels on the processor, to scale up to the LUT entry size. For the other channels we can use a different loop, without the left shift. Here is the encode loop from `tmds_encode.S`:
```
// r0: Input buffer (word-aligned)
// r1: Output buffer (word-aligned)
// r2: Input size (pixels)
// r3: Left shift amount
decl_func tmds_encode_loop_16bpp_leftshift
push {r4, r5, r6, r7, lr}
lsls r2, #3
add r2, r1
mov ip, r2
ldr r2, =(SIO_BASE + SIO_INTERP0_ACCUM0_OFFSET)
b 2f
.align 2
1:
.rept TMDS_ENCODE_UNROLL
ldmia r0!, {r4} ; 2 cyc
lsls r4, r3 ; 1 cyc
str r4, [r2, #ACCUM0_OFFS] ; 1 cyc
ldr r4, [r2, #PEEK0_OFFS] ; 1 cyc
ldmia r4, {r4, r5} ; 3 cyc
ldr r6, [r2, #PEEK1_OFFS] ; 1 cyc
ldmia r6, {r6, r7} ; 3 cyc
stmia r1!, {r4, r5, r6, r7} ; 5 cyc
.endr
2:
cmp r1, ip ; 1 cyc
bne 1b ; 2 cyc if taken
pop {r4, r5, r6, r7, pc}
```
Assuming `TMDS_ENCODE_UNROLL=1`, each loop iteration takes 20 cycles, and produces 4 output pixels. Taking the lack of left shift for red and green into account, this works out to 58% of a core to do TMDS encode, which is just over 2x faster than the compiled LUT loop. We can get another 10 or 15% performance by increasing `TMDS_ENCODE_UNROLL`.
We handle 8bpp pixels in a similar way, but use both interpolators -- one to extract pixels 0 and 1 from the loaded word, and one for pixels 2 and 3. 8bpp encode is slightly faster than 16bpp encode, because we get four pixels for each load from the pixel buffer.
It is just barely possible to do full resolution encode, which is what is shown off in the first image at the top of this Readme. The code is awful, go check it out if you hate yourself.

View file

@ -1,619 +0,0 @@
// Basic full-color PicoDVI test. Provides a 16-bit color video framebuffer to
// which Adafruit_GFX calls can be made. It's based on the EYESPI_Test.ino sketch.
#include <PicoDVI.h> // Core display & graphics library
#include <Fonts/FreeSansBold18pt7b.h> // A custom font
// Here's how a 320x240 16-bit color framebuffer is declared. Double-buffering
// is not an option in 16-bit color mode, just not enough RAM; all drawing
// operations are shown as they occur. Second argument is a hardware
// configuration -- examples are written for Adafruit Feather RP2040 DVI, but
// that's easily switched out for boards like the Pimoroni Pico DV (use
// 'pimoroni_demo_hdmi_cfg') or Pico DVI Sock ('pico_sock_cfg').
DVIGFX16 display(DVI_RES_320x240p60, adafruit_feather_dvi_cfg);
// A 400x240 mode is possible but pushes overclocking even higher than
// 320x240 mode. SOME BOARDS MIGHT SIMPLY NOT BE COMPATIBLE WITH THIS.
// May require selecting QSPI div4 clock (Tools menu) to slow down flash
// accesses, may require further over-volting the CPU to 1.25 or 1.3 V.
//DVIGFX16 display(DVI_RES_400x240p60, adafruit_feather_dvi_cfg);
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
}
#define PAUSE 2000 // Delay (milliseconds) between examples
uint8_t rotate = 0; // Current screen orientation (0-3)
#define CORNER_RADIUS 0
void loop() {
// Each of these functions demonstrates a different Adafruit_GFX concept:
show_shapes();
show_charts();
show_basic_text();
show_char_map();
show_custom_text();
show_bitmap();
show_canvas();
if (++rotate > 3) rotate = 0; // Cycle through screen rotations 0-3
display.setRotation(rotate); // Takes effect on next drawing command
}
// BASIC SHAPES EXAMPLE ----------------------------------------------------
void show_shapes() {
// Draw outlined and filled shapes. This demonstrates:
// - Enclosed shapes supported by GFX (points & lines are shown later).
// - Adapting to different-sized displays, and to rounded corners.
const int16_t cx = display.width() / 2; // Center of screen =
const int16_t cy = display.height() / 2; // half of width, height
int16_t minor = min(cx, cy); // Lesser of half width or height
// Shapes will be drawn in a square region centered on the screen. But one
// particular screen -- rounded 240x280 ST7789 -- has VERY rounded corners
// that would clip a couple of shapes if drawn full size. If using that
// screen type, reduce area by a few pixels to avoid drawing in corners.
if (CORNER_RADIUS > 40) minor -= 4;
const uint8_t pad = 5; // Space between shapes is 2X this
const int16_t size = minor - pad; // Shapes are this width & height
const int16_t half = size / 2; // 1/2 of shape size
display.fillScreen(0); // Start by clearing the screen; color 0 = black
// Draw outline version of basic shapes: rectangle, triangle, circle and
// rounded rectangle in different colors. Rather than hardcoded numbers
// for position and size, some arithmetic helps adapt to screen dimensions.
display.drawRect(cx - minor, cy - minor, size, size, 0xF800);
display.drawTriangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
cx + minor - 1, cy - pad, 0x07E0);
display.drawCircle(cx - pad - half, cy + pad + half, half, 0x001F);
display.drawRoundRect(cx + pad, cy + pad, size, size, size / 5, 0xFFE0);
delay(PAUSE);
// Draw same shapes, same positions, but filled this time.
display.fillRect(cx - minor, cy - minor, size, size, 0xF800);
display.fillTriangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
cx + minor - 1, cy - pad, 0x07E0);
display.fillCircle(cx - pad - half, cy + pad + half, half, 0x001F);
display.fillRoundRect(cx + pad, cy + pad, size, size, size / 5, 0xFFE0);
delay(PAUSE);
} // END SHAPE EXAMPLE
// CHART EXAMPLES ----------------------------------------------------------
void show_charts() {
// Draw some graphs and charts. GFX library doesn't handle these as native
// object types, but it only takes a little code to build them from simple
// shapes. This demonstrates:
// - Drawing points and horizontal, vertical and arbitrary lines.
// - Adapting to different-sized displays.
// - Graphics being clipped off edge.
// - Use of negative values to draw shapes "backward" from an anchor point.
// - C technique for finding array size at runtime (vs hardcoding).
display.fillScreen(0); // Clear screen
const int16_t cx = display.width() / 2; // Center of screen =
const int16_t cy = display.height() / 2; // half of width, height
const int16_t minor = min(cx, cy); // Lesser of half width or height
const int16_t major = max(cx, cy); // Greater of half width or height
// Let's start with a relatively simple sine wave graph with axes.
// Draw graph axes centered on screen. drawFastHLine() and drawFastVLine()
// need fewer arguments than normal 2-point line drawing shown later.
display.drawFastHLine(0, cy, display.width(), 0x0210); // Dark blue
display.drawFastVLine(cx, 0, display.height(), 0x0210);
// Then draw some tick marks along the axes. To keep this code simple,
// these aren't to any particular scale, but a real program may want that.
// The loop here draws them from the center outward and pays no mind
// whether the screen is rectangular; any ticks that go off-screen will
// be clipped by the library.
for (uint8_t i=1; i<=10; i++) {
// The Arduino map() function scales an input value (e.g. "i") from an
// input range (0-10 here) to an output range (0 to major-1 here).
// Very handy for making graphics adjust to different screens!
int16_t n = map(i, 0, 10, 0, major - 1); // Tick offset relative to center point
display.drawFastVLine(cx - n, cy - 5, 11, 0x210);
display.drawFastVLine(cx + n, cy - 5, 11, 0x210);
display.drawFastHLine(cx - 5, cy - n, 11, 0x210);
display.drawFastHLine(cx - 5, cy + n, 11, 0x210);
}
// Then draw sine wave over this using GFX drawPixel() function.
for (int16_t x=0; x<display.width(); x++) { // Each column of screen...
// Note the inverted Y axis here (cy-value rather than cy+value)
// because GFX, like most graphics libraries, has +Y heading down,
// vs. classic Cartesian coords which have +Y heading up.
int16_t y = cy - (int16_t)(sin((x - cx) * 0.05) * (float)minor * 0.5);
display.drawPixel(x, y, 0xFFFF);
}
delay(PAUSE);
// Next, let's draw some charts...
// NOTE: some other examples in this code take extra steps to avoid placing
// anything off in the rounded corners of certain displays. The charts do
// not. It's *possible* but would introduce a lot of complexity into code
// that's trying to show the basics. We'll leave the clipped charts here as
// a teachable moment: not all content suits all displays.
// A list of data to plot. These are Y values only; X assumed equidistant.
const uint8_t data[] = { 31, 42, 36, 58, 67, 88 }; // Percentages, 0-100
const uint8_t num_points = sizeof data / sizeof data[0]; // Length of data[] list
display.fillScreen(0); // Clear screen
display.setFont(); // Use default (built-in) font
display.setTextSize(2); // and 2X size for chart label
// Chart label is centered manually; 144 is the width in pixels of
// "Widget Sales" at 2X scale (12 chars * 6 px * 2 = 144). A later example
// shows automated centering based on string.
display.setCursor((display.width() - 144) / 2, 0);
display.print(F("Widget Sales")); // F("string") is in program memory, not RAM
// The chart-drawing code is then written to skip the top 20 rows where
// this label is located.
// First, a line chart, connecting the values point-to-point:
// Draw a grid of lines to provide scale & an interesting background.
for (uint8_t i=0; i<11; i++) {
int16_t x = map(i, 0, 10, 0, display.width() - 1); // Scale grid X to screen
display.drawFastVLine(x, 20, display.height(), 0x001F);
int16_t y = map(i, 0, 10, 20, display.height() - 1); // Scale grid Y to screen
display.drawFastHLine(0, y, display.width(), 0x001F);
}
// And then draw lines connecting data points. Load up the first point...
int16_t prev_x = 0;
int16_t prev_y = map(data[0], 0, 100, display.height() - 1, 20);
// Then connect lines to each subsequent point...
for (uint8_t i=1; i<num_points; i++) {
int16_t new_x = map(i, 0, num_points - 1, 0, display.width() - 1);
int16_t new_y = map(data[i], 0, 100, display.height() - 1, 20);
display.drawLine(prev_x, prev_y, new_x, new_y, 0x07FF);
prev_x = new_x;
prev_y = new_y;
}
// For visual interest, let's add a circle around each data point. This is
// done in a second pass so the circles are always drawn "on top" of lines.
for (uint8_t i=0; i<num_points; i++) {
int16_t x = map(i, 0, num_points - 1, 0, display.width() - 1);
int16_t y = map(data[i], 0, 100, display.height() - 1, 20);
display.drawCircle(x, y, 5, 0xFFFF);
}
delay(PAUSE);
// Then a bar chart of the same data...
// Erase the old chart but keep the label at top.
display.fillRect(0, 20, display.width(), display.height() - 20, 0);
// Just draw the Y axis lines; bar chart doesn't really need X lines.
for (uint8_t i=0; i<11; i++) {
int16_t y = map(i, 0, 10, 20, display.height() - 1);
display.drawFastHLine(0, y, display.width(), 0x001F);
}
int bar_width = display.width() / num_points - 4; // 2px pad to either side
for (uint8_t i=0; i<num_points; i++) {
int16_t x = map(i, 0, num_points, 0, display.width()) + 2; // Left edge of bar
int16_t height = map(data[i], 0, 100, 0, display.height() - 20);
// Some GFX functions (rects, H/V lines and similar) can accept negative
// width/height values. What this does is anchor the shape at the right or
// bottom coordinate (rather than the usual left/top) and draw back from
// there, hence the -height here (bar is anchored at bottom of screen):
display.fillRect(x, display.height() - 1, bar_width, -height, 0xFFE0);
}
delay(PAUSE);
} // END CHART EXAMPLES
// TEXT ALIGN FUNCTIONS ----------------------------------------------------
// Adafruit_GFX only handles left-aligned text. This is normal and by design;
// it's a rare need that would further strain AVR by incurring a ton of extra
// code to properly handle, and some details would confuse. If needed, these
// functions give a fair approximation, with the "gotchas" that multi-line
// input won't work, and this operates only as a println(), not print()
// (though, unlike println(), cursor X does not reset to column 0, instead
// returning to initial column and downward by font's line spacing). If you
// can work with those constraints, it's a modest amount of code to copy
// into a project. Or, if your project only needs one or two aligned strings,
// simply use getTextBounds() for a bounding box and work from there.
// DO NOT ATTEMPT TO MAKE THIS A GFX-NATIVE FEATURE, EVERYTHING WILL BREAK.
typedef enum { // Alignment options passed to functions below
GFX_ALIGN_LEFT,
GFX_ALIGN_CENTER,
GFX_ALIGN_RIGHT
} GFXalign;
// Draw text aligned relative to current cursor position. Arguments:
// gfx : An Adafruit_GFX-derived type (e.g. display or canvas object).
// str : String to print (as a char *).
// align : One of the GFXalign values declared above.
// GFX_ALIGN_LEFT is normal left-aligned println() behavior.
// GFX_ALIGN_CENTER prints centered on cursor pos.
// GFX_ALIGN_RIGHT prints right-aligned to cursor pos.
// Cursor advances down one line a la println(). Column is unchanged.
void print_aligned(Adafruit_GFX &gfx, const char *str,
GFXalign align = GFX_ALIGN_LEFT) {
uint16_t w, h;
int16_t x, y, cursor_x, cursor_x_save;
cursor_x = cursor_x_save = gfx.getCursorX();
gfx.getTextBounds(str, 0, gfx.getCursorY(), &x, &y, &w, &h);
if (align == GFX_ALIGN_RIGHT) cursor_x -= w;
else if (align == GFX_ALIGN_CENTER) cursor_x -= w / 2;
//gfx.drawRect(cursor_x, y, w, h, 0xF800); // Debug rect
gfx.setCursor(cursor_x - x, gfx.getCursorY()); // Center/right align
gfx.println(str);
gfx.setCursor(cursor_x_save, gfx.getCursorY()); // Restore cursor X
}
// Equivalent function for strings in flash memory (e.g. F("Foo")). Body
// appears identical to above function, but with C++ overloading it it works
// from flash instead of RAM. Any changes should be made in both places.
void print_aligned(Adafruit_GFX &gfx, const __FlashStringHelper *str,
GFXalign align = GFX_ALIGN_LEFT) {
uint16_t w, h;
int16_t x, y, cursor_x, cursor_x_save;
cursor_x = cursor_x_save = gfx.getCursorX();
gfx.getTextBounds(str, 0, gfx.getCursorY(), &x, &y, &w, &h);
if (align == GFX_ALIGN_RIGHT) cursor_x -= w;
else if (align == GFX_ALIGN_CENTER) cursor_x -= w / 2;
//gfx.drawRect(cursor_x, y, w, h, 0xF800); // Debug rect
gfx.setCursor(cursor_x - x, gfx.getCursorY()); // Center/right align
gfx.println(str);
gfx.setCursor(cursor_x_save, gfx.getCursorY()); // Restore cursor X
}
// Equivalent function for Arduino Strings; converts to C string (char *)
// and calls corresponding print_aligned() implementation.
void print_aligned(Adafruit_GFX &gfx, const String &str,
GFXalign align = GFX_ALIGN_LEFT) {
print_aligned(gfx, const_cast<char *>(str.c_str()));
}
// TEXT EXAMPLES -----------------------------------------------------------
// This section demonstrates:
// - Using the default 5x7 built-in font, including scaling in each axis.
// - How to access all characters of this font, including symbols.
// - Using a custom font, including alignment techniques that aren't a normal
// part of the GFX library (uses functions above).
void show_basic_text() {
// Show text scaling with built-in font.
display.fillScreen(0);
display.setFont(); // Use default font
display.setCursor(0, CORNER_RADIUS); // Initial cursor position
display.setTextSize(1); // Default size
display.println(F("Standard built-in font"));
display.setTextSize(2);
display.println(F("BIG TEXT"));
display.setTextSize(3);
// "BIGGER TEXT" won't fit on narrow screens, so abbreviate there.
display.println((display.width() >= 200) ? F("BIGGER TEXT") : F("BIGGER"));
display.setTextSize(2, 4);
display.println(F("TALL and"));
display.setTextSize(4, 2);
display.println(F("WIDE"));
delay(PAUSE);
} // END BASIC TEXT EXAMPLE
void show_char_map() {
// "Code Page 437" is a name given to the original IBM PC character set.
// Despite age and limited language support, still seen in small embedded
// settings as it has some useful symbols and accented characters. The
// default 5x7 pixel font of Adafruit_GFX is modeled after CP437. This
// function draws a table of all the characters & explains some issues.
// There are 256 characters in all. Draw table as 16 rows of 16 columns,
// plus hexadecimal row & column labels. How big can each cell be drawn?
const int cell_size = min(display.width(), display.height()) / 17;
if (cell_size < 8) return; // Screen is too small for table, skip example.
const int total_size = cell_size * 17; // 16 cells + 1 row or column label
// Set up for default 5x7 font at 1:1 scale. Custom fonts are NOT used
// here as most are only 128 characters to save space (the "7b" at the
// end of many GFX font names means "7 bits," i.e. 128 characters).
display.setFont();
display.setTextSize(1);
// Early Adafruit_GFX was missing one symbol, throwing off some indices!
// But fixing the library would break MANY existing sketches that relied
// on the degrees symbol and others. The default behavior is thus "broken"
// to keep older code working. New code can access the CORRECT full CP437
// table by calling this function like so:
display.cp437(true);
display.fillScreen(0);
const int16_t x = (display.width() - total_size) / 2; // Upper left corner of
int16_t y = (display.height() - total_size) / 2; // table centered on screen
if (y >= 4) { // If there's a little extra space above & below, scoot table
y += 4; // down a few pixels and show a message centered at top.
display.setCursor((display.width() - 114) / 2, 0); // 114 = pixel width
display.print(F("CP437 Character Map")); // of this message
}
const int16_t inset_x = (cell_size - 5) / 2; // To center each character within cell,
const int16_t inset_y = (cell_size - 8) / 2; // compute X & Y offset from corner.
for (uint8_t row=0; row<16; row++) { // 16 down...
// Draw row and columm headings as hexadecimal single digits. To get the
// hex value for a specific character, combine the left & top labels,
// e.g. Pi symbol is row E, column 3, thus: display.print((char)0xE3);
display.setCursor(x + (row + 1) * cell_size + inset_x, y + inset_y);
display.print(row, HEX); // This actually draws column labels
display.setCursor(x + inset_x, y + (row + 1) * cell_size + inset_y);
display.print(row, HEX); // and THIS is the row labels
for (uint8_t col=0; col<16; col++) { // 16 across...
if ((row + col) & 1) { // Fill alternating cells w/gray
display.fillRect(x + (col + 1) * cell_size, y + (row + 1) * cell_size,
cell_size, cell_size, 0x630C);
}
// drawChar() bypasses usual cursor positioning to go direct to an X/Y
// location. If foreground & background match, it's drawn transparent.
display.drawChar(x + (col + 1) * cell_size + inset_x,
y + (row + 1) * cell_size + inset_y, row * 16 + col,
0xFFFF, 0xFFFF, 1);
}
}
delay(PAUSE * 2);
} // END CHAR MAP EXAMPLE
void show_custom_text() {
// Show use of custom fonts, plus how to do center or right alignment
// using some additional functions provided earlier.
display.fillScreen(0);
display.setFont(&FreeSansBold18pt7b);
display.setTextSize(1);
display.setTextWrap(false); // Allow text off edges
// Get "M height" of custom font and move initial base line there:
uint16_t w, h;
int16_t x, y;
display.getTextBounds("M", 0, 0, &x, &y, &w, &h);
// On rounded 240x280 display in tall orientation, "Custom Font" gets
// clipped by top corners. Scoot text down a few pixels in that one case.
if (CORNER_RADIUS && (display.height() == 280)) h += 20;
display.setCursor(display.width() / 2, h);
if (display.width() >= 200) {
print_aligned(display, F("Custom Font"), GFX_ALIGN_CENTER);
display.setCursor(0, display.getCursorY() + 10);
print_aligned(display, F("Align Left"), GFX_ALIGN_LEFT);
display.setCursor(display.width() / 2, display.getCursorY());
print_aligned(display, F("Centered"), GFX_ALIGN_CENTER);
// Small rounded screen, when oriented the wide way, "Right" gets
// clipped by bottom right corner. Scoot left to compensate.
int16_t x_offset = (CORNER_RADIUS && (display.height() < 200)) ? 15 : 0;
display.setCursor(display.width() - x_offset, display.getCursorY());
print_aligned(display, F("Align Right"), GFX_ALIGN_RIGHT);
} else {
// On narrow screens, use abbreviated messages
print_aligned(display, F("Font &"), GFX_ALIGN_CENTER);
print_aligned(display, F("Align"), GFX_ALIGN_CENTER);
display.setCursor(0, display.getCursorY() + 10);
print_aligned(display, F("Left"), GFX_ALIGN_LEFT);
display.setCursor(display.width() / 2, display.getCursorY());
print_aligned(display, F("Center"), GFX_ALIGN_CENTER);
display.setCursor(display.width(), display.getCursorY());
print_aligned(display, F("Right"), GFX_ALIGN_RIGHT);
}
delay(PAUSE);
} // END CUSTOM FONT EXAMPLE
// BITMAP EXAMPLE ----------------------------------------------------------
// This section demonstrates:
// - Embedding a small bitmap in the code (flash memory).
// - Drawing that bitmap in various colors, and transparently (only '1' bits
// are drawn; '0' bits are skipped, leaving screen contents in place).
// - Use of the color565() function to decimate 24-bit RGB to 16 bits.
#define HEX_WIDTH 16 // Bitmap width in pixels
#define HEX_HEIGHT 16 // Bitmap height in pixels
// Bitmap data. PROGMEM ensures it's in flash memory (not RAM). And while
// it would be valid to leave the brackets empty here (i.e. hex_bitmap[]),
// having dimensions with a little math makes the compiler verify the
// correct number of bytes are present in the list.
PROGMEM const uint8_t hex_bitmap[(HEX_WIDTH + 7) / 8 * HEX_HEIGHT] = {
0b00000001, 0b10000000,
0b00000111, 0b11100000,
0b00011111, 0b11111000,
0b01111111, 0b11111110,
0b01111111, 0b11111110,
0b01111111, 0b11111110,
0b01111111, 0b11111110,
0b01111111, 0b11111110,
0b01111111, 0b11111110,
0b01111111, 0b11111110,
0b01111111, 0b11111110,
0b01111111, 0b11111110,
0b01111111, 0b11111110,
0b00011111, 0b11111000,
0b00000111, 0b11100000,
0b00000001, 0b10000000,
};
#define Y_SPACING (HEX_HEIGHT - 2) // Used by code below for positioning
void show_bitmap() {
display.fillScreen(0);
// Not screen center, but UL coordinates of center hexagon bitmap
const int16_t center_x = (display.width() - HEX_WIDTH) / 2;
const int16_t center_y = (display.height() - HEX_HEIGHT) / 2;
const uint8_t steps = min((display.height() - HEX_HEIGHT) / Y_SPACING,
display.width() / HEX_WIDTH - 1) / 2;
display.drawBitmap(center_x, center_y, hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
0xFFFF); // Draw center hexagon in white
// Tile the hexagon bitmap repeatedly in a range of hues. Don't mind the
// bit of repetition in the math, the optimizer easily picks this up.
// Also, if math looks odd, keep in mind "PEMDAS" operator precedence;
// multiplication and division occur before addition and subtraction.
for (uint8_t a=0; a<=steps; a++) {
for (uint8_t b=1; b<=steps; b++) {
display.drawBitmap( // Right section centered red: a = green, b = blue
center_x + (a + b) * HEX_WIDTH / 2,
center_y + (a - b) * Y_SPACING,
hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
display.color565(255, 255 - 255 * a / steps, 255 - 255 * b / steps));
display.drawBitmap( // UL section centered green: a = blue, b = red
center_x - b * HEX_WIDTH + a * HEX_WIDTH / 2,
center_y - a * Y_SPACING,
hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
display.color565(255 - 255 * b / steps, 255, 255 - 255 * a / steps));
display.drawBitmap( // LL section centered blue: a = red, b = green
center_x - a * HEX_WIDTH + b * HEX_WIDTH / 2,
center_y + b * Y_SPACING,
hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
display.color565(255 - 255 * a / steps, 255 - 255 * b / steps, 255));
}
}
delay(PAUSE);
} // END BITMAP EXAMPLE
// CANVAS EXAMPLE ----------------------------------------------------------
// This section demonstrates:
// - How to refresh changing values onscreen without erase/redraw flicker.
// - Using an offscreen canvas. It's similar to a bitmap above, but rather
// than a fixed pattern in flash memory, it's drawable like the screen.
// - More tips on text alignment, and adapting to different screen sizes.
#define PADDING 6 // Pixels between axis label and value
void show_canvas() {
// For this example, let's suppose we want to display live readings from a
// sensor such as a three-axis accelerometer, something like:
// X: (number)
// Y: (number)
// Z: (number)
// To look extra classy, we want a custom font, and the labels for each
// axis are right-aligned so the ':' characters line up...
display.setFont(&FreeSansBold18pt7b); // Use a custom font
display.setTextSize(1); // and reset to 1:1 scale
char *label[] = { "X:", "Y:", "Z:" }; // Labels for each axis
const uint16_t color[] = { 0xF800, 0x07E0, 0x001F }; // Colors for each value
// To get the labels right-aligned, one option would be simple trial and
// error to find a column that looks good and doesn't clip anything off.
// Let's do this dynamically though, so it adapts to any font or labels!
// Start by finding the widest of the label strings:
uint16_t w, h, max_w = 0;
int16_t x, y;
for (uint8_t i=0; i<3; i++) { // For each label...
display.getTextBounds(label[i], 0, 0, &x, &y, &w, &h);
if (w > max_w) max_w = w; // Keep track of widest label
}
// Rounded corners throwing us a curve again. If needed, scoot everything
// to the right a bit on wide displays, down a bit on tall ones.
int16_t y_offset = 0;
if (display.width() > display.height()) max_w += CORNER_RADIUS;
else y_offset = CORNER_RADIUS;
// Now we have max_w for right-aligning the labels. Before we draw them
// though...in order to perform flicker-free updates, the numbers we show
// will be rendered in either a GFXcanvas1 or GFXcanvas16 object; a 1-bit
// or 16-bit offscreen bitmap, RAM permitting. The correct size for this
// canvas could also be trial-and-errored, but again let's make this adapt
// automatically. The width of the canvas will span from max_w (plus a few
// pixels for padding) to the right edge. But the height? Looking at an
// uppercase 'M' can work in many situations, but some fonts have ascenders
// and descenders on digits, and in some locales a comma (extending below
// the baseline) is the decimal separator. Feed ALL the numeric chars into
// getTextBounds() for a cumulative height:
display.setTextWrap(false); // Keep on one line
display.getTextBounds(F("0123456789.,-"), 0, 0, &x, &y, &w, &h);
// Now declare a GFXcanvas16 object based on the computed width & height:
GFXcanvas16 canvas16(display.width() - max_w - PADDING, h);
// Small devices (e.g. ATmega328p) will almost certainly lack enough RAM
// for the canvas. Check if canvas buffer exists. If not, fall back on
// using a 1-bit (rather than 16-bit) canvas. Much more RAM friendly, but
// not as fast to draw. If a project doesn't require super interactive
// updates, consider just going straight for the more compact Canvas1.
if (canvas16.getBuffer()) {
// If here, 16-bit canvas allocated successfully! Point of interest,
// only one canvas is needed for this example, we can reuse it for all
// three numbers because the regions are the same size.
// display and canvas are independent drawable objects; must explicitly
// set the same custom font to use on the canvas now:
canvas16.setFont(&FreeSansBold18pt7b);
// Clear display and print labels. Once drawn, these remain untouched.
display.fillScreen(0);
display.setCursor(max_w, -y + y_offset); // Set baseline for first row
for (uint8_t i=0; i<3; i++) print_aligned(display, label[i], GFX_ALIGN_RIGHT);
// Last part now is to print numbers on the canvas and copy the canvas to
// the display, repeating for several seconds...
uint32_t elapsed, startTime = millis();
while ((elapsed = (millis() - startTime)) <= PAUSE * 2) {
for (uint8_t i=0; i<3; i++) { // For each label...
canvas16.fillScreen(0); // fillScreen() in this case clears canvas
canvas16.setCursor(0, -y); // Reset baseline for custom font
canvas16.setTextColor(color[i]);
// These aren't real accelerometer readings, just cool-looking numbers.
// Notice we print to the canvas, NOT the display:
canvas16.print(sin(elapsed / 200.0 + (float)i * M_PI * 2.0 / 3.0), 5);
// And HERE is the secret sauce to flicker-free updates. Canvas details
// can be passed to the drawRGBBitmap() function, which fully overwrites
// prior screen contents in that area. yAdvance is font line spacing.
display.drawRGBBitmap(max_w + PADDING, i * FreeSansBold18pt7b.yAdvance +
y_offset, canvas16.getBuffer(), canvas16.width(),
canvas16.height());
}
}
} else {
// Insufficient RAM for Canvas16. Try declaring a 1-bit canvas instead...
GFXcanvas1 canvas1(display.width() - max_w - PADDING, h);
// If even this smaller object fails, can't proceed, cancel this example.
if (!canvas1.getBuffer()) return;
// Remainder here is nearly identical to the code above, simply using a
// different canvas type. It's stripped of most comments for brevity.
canvas1.setFont(&FreeSansBold18pt7b);
display.fillScreen(0);
display.setCursor(max_w, -y + y_offset);
for (uint8_t i=0; i<3; i++) print_aligned(display, label[i], GFX_ALIGN_RIGHT);
uint32_t elapsed, startTime = millis();
while ((elapsed = (millis() - startTime)) <= PAUSE * 2) {
for (uint8_t i=0; i<3; i++) {
canvas1.fillScreen(0);
canvas1.setCursor(0, -y);
canvas1.print(sin(elapsed / 200.0 + (float)i * M_PI * 2.0 / 3.0), 5);
// Here's the secret sauce to flicker-free updates with GFXcanvas1.
// Canvas details can be passed to the drawBitmap() function, and by
// specifying both a foreground AND BACKGROUND color (0), this will fully
// overwrite/erase prior screen contents in that area (vs transparent).
display.drawBitmap(max_w + PADDING, i * FreeSansBold18pt7b.yAdvance +
y_offset, canvas1.getBuffer(), canvas1.width(),
canvas1.height(), color[i], 0);
}
}
}
// Because canvas object was declared locally to this function, it's freed
// automatically when the function returns; no explicit delete needed.
} // END CANVAS EXAMPLE

View file

@ -1,58 +0,0 @@
// Double-buffered 1-bit Adafruit_GFX-compatible framebuffer for PicoDVI.
// Animates without redraw flicker. Requires Adafruit_GFX >= 1.11.5
#include <PicoDVI.h>
// Here's how a 640x480 1-bit (black, white) framebuffer is declared.
// Second argument ('true' here) enables double-buffering for flicker-free
// animation. Third argument is a hardware configuration -- examples are
// written for Adafruit Feather RP2040 DVI, but that's easily switched out
// for boards like the Pimoroni Pico DV (use 'pimoroni_demo_hdmi_cfg') or
// Pico DVI Sock ('pico_sock_cfg').
DVIGFX1 display(DVI_RES_640x480p60, true, adafruit_feather_dvi_cfg);
// An 800x480 mode is possible but pushes overclocking even higher than
// 640x480 mode. SOME BOARDS MIGHT SIMPLY NOT BE COMPATIBLE WITH THIS.
// May require selecting QSPI div4 clock (Tools menu) to slow down flash
// accesses, may require further over-volting the CPU to 1.25 or 1.3 V.
//DVIGFX1 display(DVI_RES_800x480p60, true, adafruit_feather_dvi_cfg);
#define N_BALLS 100 // Number of bouncy balls to draw
struct {
int16_t pos[2]; // Ball position (X,Y)
int8_t vel[2]; // Ball velocity (X,Y)
} ball[N_BALLS];
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
// Randomize initial ball positions and velocities
for (int i=0; i<N_BALLS; i++) {
ball[i].pos[0] = 10 + random(display.width() - 20);
ball[i].pos[1] = 10 + random(display.height() - 20);
do {
ball[i].vel[0] = 4 - random(9);
ball[i].vel[1] = 4 - random(9);
} while ((ball[i].vel[0] == 0) && (ball[i].vel[1] == 0));
}
}
void loop() {
display.fillScreen(0); // Clear back framebuffer...
// And draw bouncy balls (circles) there
for (int i=0; i<N_BALLS; i++) {
display.drawCircle(ball[i].pos[0], ball[i].pos[1], 40, 1);
// After drawing each one, update positions, bounce off edges.
ball[i].pos[0] += ball[i].vel[0];
if ((ball[i].pos[0] <= 0) || (ball[i].pos[0] >= display.width())) ball[i].vel[0] *= -1;
ball[i].pos[1] += ball[i].vel[1];
if ((ball[i].pos[1] <= 0) || (ball[i].pos[1] >= display.height())) ball[i].vel[1] *= -1;
}
// Swap front/back buffers, do not duplicate current screen state to next frame,
// we'll draw it new from scratch each time.
display.swap();
}

View file

@ -1,31 +0,0 @@
// Simple 1-bit Adafruit_GFX-compatible framebuffer for PicoDVI.
#include <PicoDVI.h>
// Here's how a 640x480 1-bit (black, white) framebuffer is declared.
// Second argument ('false' here) means NO double-buffering; all drawing
// operations are shown as they occur. Third argument is a hardware
// configuration -- examples are written for Adafruit Feather RP2040 DVI,
// but that's easily switched out for boards like the Pimoroni Pico DV
// (use 'pimoroni_demo_hdmi_cfg') or Pico DVI Sock ('pico_sock_cfg').
DVIGFX1 display(DVI_RES_640x480p60, false, adafruit_feather_dvi_cfg);
// An 800x480 mode is possible but pushes overclocking even higher than
// 640x480 mode. SOME BOARDS MIGHT SIMPLY NOT BE COMPATIBLE WITH THIS.
// May require selecting QSPI div4 clock (Tools menu) to slow down flash
// accesses, may require further over-volting the CPU to 1.25 or 1.3 V.
//DVIGFX1 display(DVI_RES_800x480p60, false, adafruit_feather_dvi_cfg);
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
}
void loop() {
// Draw random lines
display.drawLine(random(display.width()), random(display.height()), // Start X,Y
random(display.width()), random(display.height()), // End X,Y
random(2)); // Color (0 or 1)
}

View file

@ -1,35 +0,0 @@
// 1-bit (black, white) text mode for PicoDVI.
#include <PicoDVI.h>
// Here's how an 80x30 character display is declared. First argument,
// resolution, is full display pixel count...character cells are 8x8 pixels,
// yielding the 80x30 result. 640x240 uses "tall" pixels, the result of all
// this is very reminiscent of IBM VGA mode. Second argument is a hardware
// configuration -- examples are written for Adafruit Feather RP2040 DVI,
// but that's easily switched out for boards like the Pimoroni Pico DV
// (use 'pimoroni_demo_hdmi_cfg') or Pico DVI Sock ('pico_sock_cfg').
DVItext1 display(DVI_RES_640x240p60, adafruit_feather_dvi_cfg);
// Wider and taller modes are possible. Wider pushes overclocking even
// higher than 640x480 mode. SOME BOARDS MIGHT SIMPLY NOT BE COMPATIBLE
// WITH THIS. May require selecting QSPI div4 clock (Tools menu) to slow
// down flash accesses, may require over-volting the CPU to 1.25 or 1.3 V.
// Here's how a 100x60 char display might be declared:
//DVItext1 display(DVI_RES_800x480p60, adafruit_feather_dvi_cfg);
// A reduced refresh rate display doesn't as aggressive an over-clock
// This timing is verified to work on https://www.adafruit.com/product/2232
//DVItext1 display(DVI_RES_800x240p30, adafruit_feather_dvi_cfg);
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
}
void loop() {
display.print("Hello World! ");
delay(50);
}

View file

@ -1,61 +0,0 @@
// Double-buffered 8-bit Adafruit_GFX-compatible framebuffer for PicoDVI.
// Animates without redraw flicker. Requires Adafruit_GFX >= 1.11.4
#include <PicoDVI.h>
// Here's how a 320x240 8-bit (color-paletted) framebuffer is declared.
// Second argument ('true' here) enables double-buffering for flicker-free
// animation. Third argument is a hardware configuration -- examples are
// written for Adafruit Feather RP2040 DVI, but that's easily switched out
// for boards like the Pimoroni Pico DV (use 'pimoroni_demo_hdmi_cfg') or
// Pico DVI Sock ('pico_sock_cfg').
DVIGFX8 display(DVI_RES_320x240p60, true, adafruit_feather_dvi_cfg);
// A 400x240 mode is possible but pushes overclocking even higher than
// 320x240 mode. SOME BOARDS MIGHT SIMPLY NOT BE COMPATIBLE WITH THIS.
// May require selecting QSPI div4 clock (Tools menu) to slow down flash
// accesses, may require further over-volting the CPU to 1.25 or 1.3 V.
//DVIGFX8 display(DVI_RES_400x240p60, true, adafruit_feather_dvi_cfg);
#define N_BALLS 100 // Number of bouncy balls to draw, 1-254 (not 255)
struct {
int16_t pos[2]; // Ball position (X,Y)
int8_t vel[2]; // Ball velocity (X,Y)
} ball[N_BALLS];
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
// Randomize initial ball positions, velocities and colors
for (int i=0; i<N_BALLS; i++) {
display.setColor(i+1, 64 + random(192), 64 + random(192), 64 + random(192));
ball[i].pos[0] = 10 + random(display.width() - 20);
ball[i].pos[1] = 10 + random(display.height() - 20);
do {
ball[i].vel[0] = 2 - random(5);
ball[i].vel[1] = 2 - random(5);
} while ((ball[i].vel[0] == 0) && (ball[i].vel[1] == 0));
}
display.setColor(255, 0xFFFF); // Last palette entry = white
display.swap(false, true); // Duplicate same palette into front & back buffers
}
void loop() {
// Clear back framebuffer and draw balls (circles) there.
display.fillScreen(0);
for (int i=0; i<N_BALLS; i++) {
display.fillCircle(ball[i].pos[0], ball[i].pos[1], 20, i + 1);
// After drawing each one, update positions, bounce off edges.
ball[i].pos[0] += ball[i].vel[0];
if ((ball[i].pos[0] <= 0) || (ball[i].pos[0] >= display.width())) ball[i].vel[0] *= -1;
ball[i].pos[1] += ball[i].vel[1];
if ((ball[i].pos[1] <= 0) || (ball[i].pos[1] >= display.height())) ball[i].vel[1] *= -1;
}
// Swap front/back buffers, do not duplicate current screen state to next frame,
// we'll draw it new from scratch each time.
display.swap();
}

View file

@ -1,33 +0,0 @@
// 8-bit Adafruit_GFX-compatible framebuffer for PicoDVI.
#include <PicoDVI.h>
// Here's how a 320x240 8-bit (color-paletted) framebuffer is declared.
// Second argument ('false' here) means NO double-buffering; all drawing
// operations are shown as they occur. Third argument is a hardware
// configuration -- examples are written for Adafruit Feather RP2040 DVI,
// but that's easily switched out for boards like the Pimoroni Pico DV
// (use 'pimoroni_demo_hdmi_cfg') or Pico DVI Sock ('pico_sock_cfg').
DVIGFX8 display(DVI_RES_320x240p60, false, adafruit_feather_dvi_cfg);
// A 400x240 mode is possible but pushes overclocking even higher than
// 320x240 mode. SOME BOARDS MIGHT SIMPLY NOT BE COMPATIBLE WITH THIS.
// May require selecting QSPI div4 clock (Tools menu) to slow down flash
// accesses, may require further over-volting the CPU to 1.25 or 1.3 V.
//DVIGFX8 display(DVI_RES_400x240p60, false, adafruit_feather_dvi_cfg);
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
// Randomize color palette. First entry is left black, last is set white.
for (int i=1; i<255; i++) display.setColor(i, random(65536));
display.setColor(255, 0xFFFF);
}
void loop() {
// Draw random lines
display.drawLine(random(display.width()), random(display.height()), random(display.width()), random(display.height()), random(256));
}

View file

@ -1,5 +0,0 @@
Arduino Examples for PicoDVI Library
====================================
This directory does not exist in the original PicoDVI repository.
It contains examples compatible with the Arduino IDE.

View file

@ -1,83 +0,0 @@
/*
This example shows how to use PicoDVI and a board's flash filesystem (i.e.
CIRCUITPY drive) simultaneously. This can be useful for loading graphics
files, saving game state in emulators, etc. To keep this simple, it's just
a mash-up of the existing PicoDVI '1bit_text' and Adafruit_CPFS 'simple'
examples, but the same principles certainly apply to other modes.
To start, you first need to temporarily install CircuitPython on the board
to initialize the flash filesystem, which can then be loaded up with the
files you need. https://circuitpython.org/downloads
With the filesystem prepared, one can then work with the Arduino code...
SUPER IMPORTANT: you MUST have current versions of several libraries and
the Earle Philhower arduino-pico core installed. Failure to have all the
right pieces will wipe out any data stored on the drive!
arduino-pico (via Arduino board manager) 3.3.0 or later
Adafruit_CPFS (via Library manager) 1.1.0 or later
Adafruit_SPIFlash (") 4.2.0 or later
It is wise and STRONGLY RECOMMENDED to keep a backup of any data you install
on the board. These libraries combined are asking a LOT of the RP2040 chip,
and despite best efforts there's still the occasional hiccup that can wipe
the filesystem, making you start over with the CircuitPython install and
drive setup. See notes below about perhaps adding a boot switch to USB-mount
CIRCUITPY only when needed; it's more stable if left unmounted.
*/
#include <PicoDVI.h> // For DVI video out
#include <Adafruit_CPFS.h> // For accessing the CIRCUITPY drive
FatVolume *fs = NULL; // CIRCUITPY flash filesystem, as a FAT pointer
// This example uses 80x30 monochrome text mode. See other PicoDVI examples
// for color, bitmapped graphics, widescreen, alternate boards, etc.
DVItext1 display(DVI_RES_640x240p60, adafruit_feather_dvi_cfg);
void setup() { // Runs once on startup
pinMode(LED_BUILTIN, OUTPUT);
// Start the CIRCUITPY flash filesystem. SUPER IMPORTANT: NOTICE THE
// EXTRA PARAMETERS HERE. This is REQUIRED when using PicoDVI and
// Adafruit_CPFS together.
fs = Adafruit_CPFS::begin(true, -1, NULL, false);
// The initial 'true' argument tells CPFS to make the flash filesystem
// available to a USB-connected host computer. Passing 'false' makes it
// only available to the Arduino sketch. Given the tenuous stability of
// handling so much at once (DVI, flash, USB), one might want to add a
// boot-time button or switch to select whether CIRCUITPY is mounted on
// host, or is just using USB for power.
// Next two arguments are ignored on RP2040; they're specifically for
// some 'Haxpress' dev boards with the CPFS library. Last argument should
// ALWAYS be set 'false' on RP2040, or there will be...trouble.
if (!display.begin()) { // Start DVI, slow blink LED if insufficient RAM
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
if (fs == NULL) { // If CIRCUITPY filesystem is missing or malformed...
// Show error message & fast blink LED to indicate problem. Full stop.
display.println("Can't access board's CIRCUITPY drive.");
display.println("Has CircuitPython been previously installed?");
for (;;) digitalWrite(LED_BUILTIN, (millis() / 250) & 1);
} // else valid CIRCUITPY drive, proceed...
// As in Adafruit_CPFS 'simple' example, allow USB events to settle...
delay(2500);
Adafruit_CPFS::change_ack();
// Then access files and directories using any SdFat calls (open(), etc.)
// Because fs is a pointer, we use "->" indirection rather than "." access.
// display pointer is cast to print_t so ls() treats it just like Serial.
fs->ls((print_t *)&display, LS_R | LS_SIZE); // List initial drive contents
}
void loop() {
if (Adafruit_CPFS::changed()) { // Anything changed on CIRCUITPY drive?
Adafruit_CPFS::change_ack(); // Got it, thanks.
display.println("CIRCUITPY drive contents changed.");
fs->ls((print_t *)&display, LS_R | LS_SIZE); // List updated drive contents
}
}

View file

@ -1,153 +0,0 @@
// "Aquarium" example for PicoDVI library. If just starting out,
// see the 8bit_double_buffer which explains the PicoDVI groundwork.
// Comments in THIS file are mostly distinct & new concepts.
// The flying toasters example also goes into more detail.
// IF NO OUTPUT OR RED FLICKER SCANLINES: try Tools->Optimize->(-O3)
#include <PicoDVI.h>
#include "sprites.h" // Graphics data
DVIGFX8 display(DVI_RES_320x240p60, true, adafruit_feather_dvi_cfg);
// See notes in 8bit_double_buffer regarding 400x240 mode.
//DVIGFX8 display(DVI_RES_400x240p60, true, adafruit_feather_dvi_cfg);
// Also requires -O3 setting.
// This structure holds pointers to sprite graphics and masks in sprites.h.
const struct {
const uint8_t *sprite[2][2]; // L/R directions and A/B frames
const uint8_t *mask[2][2]; // Same
} spritedata[] = {
// There are FOUR sprites/masks for each fish (and kelp):
// two left-facing, two right-facing, and A/B frames for each.
{ sprite0LA , sprite0LB , sprite0RA , sprite0RB , mask0LA , mask0LB , mask0RA , mask0RB },
{ sprite1LA , sprite1LB , sprite1RA , sprite1RB , mask1LA , mask1LB , mask1RA , mask1RB },
{ sprite2LA , sprite2LB , sprite2RA , sprite2RB , mask2LA , mask2LB , mask2RA , mask2RB },
{ sprite3LA , sprite3LB , sprite3RA , sprite3RB, mask3LA , mask3LB , mask3RA , mask3RB },
{ sprite4LA , sprite4LB , sprite4RA , sprite4RB , mask4LA , mask4LB , mask4RA , mask4RB },
{ sprite5LA , sprite5LB , sprite5RA , sprite5RB , mask5LA , mask5LB , mask5RA , mask5RB },
{ sprite6LA , sprite6LB , sprite6RA , sprite6RB , mask6LA , mask6LB , mask6RA , mask6RB },
{ sprite7LA , sprite7LB , sprite7RA , sprite7RB , mask7LA , mask7LB , mask7RA , mask7RB },
{ sprite8LA , sprite8LB , sprite8RA , sprite8RB , mask8LA , mask8LB , mask8RA , mask8RB },
{ sprite9LA , sprite9LB , sprite9RA , sprite9RB , mask9LA , mask9LB , mask9RA , mask9RB },
{ sprite10LA, sprite10LB, sprite10RA, sprite10RB, mask10LA, mask10LB, mask10RA, mask10RB },
{ sprite11LA, sprite11LB, sprite11RA, sprite11RB, mask11LA, mask11LB, mask11RA, mask11RB },
{ sprite12LA, sprite12LB, sprite12RA, sprite12RB, mask12LA, mask12LB, mask12RA, mask12RB },
{ sprite13LA, sprite13LB, sprite13RA, sprite13RB, mask13LA, mask13LB, mask13RA, mask13RB },
{ sprite14LA, sprite14LB, sprite14RA, sprite14RB, mask14LA, mask14LB, mask14RA, mask14RB },
{ sprite15LA, sprite15LB, sprite15RA, sprite15RB, mask15LA, mask15LB, mask15RA, mask15RB },
{ sprite16LA, sprite16LB, sprite16RA, sprite16RB, mask16LA, mask16LB, mask16RA, mask16RB },
{ sprite17LA, sprite17LB, sprite17RA, sprite17RB, mask17LA, mask17LB, mask17RA, mask17RB },
// Bubbles are a special case. No right/left versions, but A/B frames.
// To use same struct (not a special case), just duplicate each 2X.
{ sprite18A , sprite18B , sprite18A , sprite18B , mask18A , mask18B , mask18A , mask18B },
};
#define N_SPRITES 12 // MUST be >= 6
// This structure contains positions and other data for the sprites
// in motion (notice it's not "const", because contents change).
struct {
int16_t pos[2]; // sprite position (X,Y) * 16
int8_t speed; // sprite speed (-16 to -8 or +8 to +16)
uint8_t index; // which index (in spritedata) to use
uint8_t offset; // Timer offset to de-sync each sprite's animation
} sprite[N_SPRITES];
// Initialize one sprite (index passed to function) to a random offscreen
// position, also randomizing speed and sprite (fish) type.
void randomsprite(uint8_t i) {
// To move the sprites at slightly different speeds, coordinates are
// stored in 1/16 pixel units. When drawing, the stored values get
// divided by 16 to yield final pixel coordinates.
sprite[i].speed = random(8, 17); // 1/2 to 1 pixel per frame
if (random(2)) { // 50/50 random chance...
sprite[i].speed *= -1; // Fish moves right-to-left
sprite[i].pos[0] = (display.width() + random(64)) * 16; // Start off right edge
} else { // Fish moves left-to-right
sprite[i].pos[0] = random(64, 128) * -16; // Start off left edge
}
// WHEEL. OF. FISH. -2 here is to ignore last 2 sprites (kelp, bubbles)
sprite[i].index = random(sizeof spritedata / sizeof spritedata[0] - 2);
if (sprite[i].index == 8) { // Sprite #8 is crab, keep close to ground
sprite[i].pos[1] = random(display.height() - 96, display.height() - 64) * 16;
} else { // Is a fish, upper part of screen
sprite[i].pos[1] = random(display.height() - 96) * 16;
}
sprite[i].offset = random(256); // De-synchronize sprite animation
}
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
// Initialize color palette from table in sprites.h. Rather than
// calling setColor() for each one, we can just dump it directly...
memcpy(display.getPalette(), palette, sizeof palette);
display.swap(false, true); // Duplicate same palette to front & back buffers
// Randomize initial sprite states
randomSeed(analogRead(A0)); // Seed randomness from unused analog in
int range = display.width() + 64;
for (int i=0; i<3; i++) { // FIRST THREE sprites...
sprite[i].index = 17; // Are always kelp
sprite[i].speed = random(2) ? 1 : -1; // 50/50 left/right flip
sprite[i].pos[0] = (random(range * i / 3, range * (i + 1) / 3 - 64) - 32) * 16;
sprite[i].pos[1] = random(display.height() - 120, display.height() - 100) * 16;
sprite[i].offset = random(256);
}
for (int i=3; i<6; i++) { // NEXT THREE sprites...
sprite[i].index = 18; // Are always bubbles
sprite[i].speed = 0;
sprite[i].pos[0] = display.width() * 16; // Start them all offscreen
sprite[i].pos[1] = random(display.height()) * 8;
sprite[i].offset = random(256);
}
for (int i=6; i<N_SPRITES; i++) randomsprite(i); // Rest are fish
}
uint8_t frame = 0; // Counter for animation
void loop() { // Runs once every frame
display.fillScreen(0); // Clear back framebuffer,
for (int x=0; x<display.width(); x += 192) { // Tile background sprite
// Although DVIGFX8 is a COLOR display type, we leverage GFX's
// drawGrayscaleBitmap() function to draw the sprites...it saves us
// writing a ton of code this way.
display.drawGrayscaleBitmap(x, display.height() - 64, gravel, 192, 64);
}
for (int i=0; i<N_SPRITES; i++) { // and then the rest of the sprites...
uint8_t dir = sprite[i].speed > 0; // Left/right
uint8_t fr = ((frame + sprite[i].offset) >> 4) & 1; // A/B frame
if (sprite[i].speed) { // FISH or KELP; 64x64 sprite
display.drawGrayscaleBitmap(sprite[i].pos[0] / 16, sprite[i].pos[1] / 16,
spritedata[sprite[i].index].sprite[dir][fr],
spritedata[sprite[i].index].mask[dir][fr], 64, 64);
if (abs(sprite[i].speed) > 1) { // Not kelp...
sprite[i].pos[0] += sprite[i].speed; // Update position, check if offscreen...
if (((sprite[i].speed > 0) && (sprite[i].pos[0] > (display.width() * 16))) ||
((sprite[i].speed < 0) && (sprite[i].pos[0] < -64 * 16)))
randomsprite(i); // Replace with a new fish
}
} else { // Is BUBBLES
display.drawGrayscaleBitmap(sprite[i].pos[0] / 16, sprite[i].pos[1] / 16,
spritedata[sprite[i].index].sprite[0][fr],
spritedata[sprite[i].index].mask[0][fr], 64, 16);
sprite[i].pos[1] -= 16; // Move up by 1 pixel
if (sprite[i].pos[1] < -256) { // Off top of screen?
int j = random(6, N_SPRITES); // Pick a random fish,
sprite[i].pos[0] = sprite[j].pos[0]; // and move bubbles there
sprite[i].pos[1] = sprite[j].pos[1] + 384;
}
}
}
// Swap front/back buffers, do not duplicate current screen state
// to next frame, we'll draw it new from scratch each time.
display.swap();
frame++; // Increment animation counter; "rolls over" 0-255 automatically.
}

File diff suppressed because it is too large Load diff

View file

@ -1,121 +0,0 @@
// "Boing" ball example for PicoDVI library, If just starting out,
// see the 8bit_double_buffer which explains the PicoDVI groundwork.
// Comments in THIS file are mostly distinct & new concepts.
// Adapted from PyPortal example in Adafruit_ILI9341 library.
#include <PicoDVI.h>
#include "graphics.h" // Graphics data
// 4:3 aspect for that Amiga flavour:
DVIGFX8 display(DVI_RES_320x240p60, true, adafruit_feather_dvi_cfg);
#define YBOTTOM 123 // Ball Y coord at bottom
#define YBOUNCE -3.5 // Upward velocity on ball bounce
// Ball coordinates are stored floating-point because screen refresh
// is so quick, whole-pixel movements are just too fast!
float ballx = 20.0, bally = YBOTTOM, // Current ball position
ballvx = 0.8, ballvy = YBOUNCE, // Ball velocity
ballframe = 3; // Ball animation frame #
int balloldx = ballx, balloldy = bally; // Prior ball position
void setup() {
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
// Set up color palette
display.setColor(0, 0xAD75); // #0 = Background color
display.setColor(1, 0xA815); // #1 = Grid color
display.setColor(2, 0x5285); // #2 = Background in shadow
display.setColor(3, 0x600C); // #3 = Grid in shadow
// Draw initial framebuffer contents (grid, no shadow):
display.drawBitmap(0, 0, (uint8_t *)background, 320, 240, 1, 0);
display.swap(true, true); // Duplicate same bg & palette into both buffers
}
void loop() {
balloldx = (int16_t)ballx; // Save prior position
balloldy = (int16_t)bally;
ballx += ballvx; // Update position
bally += ballvy;
ballvy += 0.06; // Update Y velocity
if((ballx <= 15) || (ballx >= display.width() - BALLWIDTH))
ballvx *= -1; // Left/right bounce
if(bally >= YBOTTOM) { // Hit ground?
bally = YBOTTOM; // Clip and
ballvy = YBOUNCE; // bounce up
}
// Determine screen area to update. This is the bounds of the ball's
// prior and current positions, so the old ball is fully erased and new
// ball is fully drawn.
int16_t minx, miny, maxx, maxy, width, height;
// Determine bounds of prior and new positions
minx = ballx;
if(balloldx < minx) minx = balloldx;
miny = bally;
if(balloldy < miny) miny = balloldy;
maxx = ballx + BALLWIDTH - 1;
if((balloldx + BALLWIDTH - 1) > maxx) maxx = balloldx + BALLWIDTH - 1;
maxy = bally + BALLHEIGHT - 1;
if((balloldy + BALLHEIGHT - 1) > maxy) maxy = balloldy + BALLHEIGHT - 1;
width = maxx - minx + 1;
height = maxy - miny + 1;
// Ball animation frame # is incremented opposite the ball's X velocity
ballframe -= ballvx * 0.5;
if(ballframe < 0) ballframe += 14; // Constrain from 0 to 13
else if(ballframe >= 14) ballframe -= 14;
// Set 7 palette entries to white, 7 to red, based on frame number.
// This makes the ball spin.
for(uint8_t i=0; i<14; i++) {
display.setColor(i + 4, ((((int)ballframe + i) % 14) < 7) ? 0xFFFF : 0xF800);
}
// Only the changed rectangle is drawn into the 'renderbuf' array...
uint8_t c, *destPtr;
int16_t bx = minx - (int)ballx, // X relative to ball bitmap (can be negative)
by = miny - (int)bally, // Y relative to ball bitmap (can be negative)
bgx = minx, // X relative to background bitmap (>= 0)
bgy = miny, // Y relative to background bitmap (>= 0)
x, y, bx1, bgx1; // Loop counters and working vars
uint8_t p; // 'packed' value of 2 ball pixels
int8_t bufIdx = 0;
uint8_t *buf = display.getBuffer(); // -> back buffer
for(y=0; y<height; y++) { // For each row...
destPtr = &buf[display.width() * (miny + y) + minx];
bx1 = bx; // Need to keep the original bx and bgx values,
bgx1 = bgx; // so copies of them are made here (and changed in loop below)
for(x=0; x<width; x++) {
if((bx1 >= 0) && (bx1 < BALLWIDTH) && // Is current pixel row/column
(by >= 0) && (by < BALLHEIGHT)) { // inside the ball bitmap area?
// Yes, do ball compositing math...
p = ball[by][bx1 / 2]; // Get packed value (2 pixels)
c = (bx1 & 1) ? (p & 0xF) : (p >> 4); // Unpack high or low nybble
if(c == 0) { // Outside ball - just draw grid
c = background[bgy][bgx1 / 8] & (0x80 >> (bgx1 & 7)) ? 1 : 0;
} else if(c > 1) { // In ball area...
c += 2; // Convert to color index >= 4
} else { // In shadow area, draw shaded grid...
c = background[bgy][bgx1 / 8] & (0x80 >> (bgx1 & 7)) ? 3 : 2;
}
} else { // Outside ball bitmap, just draw background bitmap...
c = background[bgy][bgx1 / 8] & (0x80 >> (bgx1 & 7)) ? 1 : 0;
}
*destPtr++ = c; // Store pixel color
bx1++; // Increment bitmap position counters (X axis)
bgx1++;
}
by++; // Increment bitmap position counters (Y axis)
bgy++;
}
display.swap(true, false); // Show & copy current background buffer to next
}

File diff suppressed because it is too large Load diff

View file

@ -1,41 +0,0 @@
// "Logo bounce" example for PicoDVI library. If just starting out,
// see the 1bit_double_buffer which explains the PicoDVI groundwork.
// Comments in THIS file are mostly distinct & new concepts.
// IF NO OUTPUT OR RED FLICKER SCANLINES: try Tools->Optimize->(-O3)
#include <PicoDVI.h>
#include "sprite.h" // Graphics data
DVIGFX1 display(DVI_RES_640x480p60, true, adafruit_feather_dvi_cfg);
// See notes in 1bit_double_buffer regarding 800x480 mode.
//DVIGFX1 display(DVI_RES_800x480p60, true, adafruit_feather_dvi_cfg);
// May also require -O3 setting.
int x = 0; // Start logo at
int y = 0; // top left corner,
int vx = 1; // moving right
int vy = 1; // and down
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
}
void loop() { // Runs once every frame
display.fillScreen(0); // Clear back framebuffer, then draw sprite:
display.drawBitmap(x, y, sprite, SPRITE_WIDTH, SPRITE_HEIGHT, 1);
// Swap front/back buffers, do not duplicate current screen state
// to next frame, we'll draw it new from scratch each time.
display.swap();
// Update sprite position, bouncing off all 4 sides
x += vx; // Horizontal
if ((x == 0) || (x == (display.width() - SPRITE_WIDTH))) vx *= -1;
y += vy; // Vertical
if ((y == 0) || (y == (display.height() - SPRITE_HEIGHT))) vy *= -1;
}

View file

@ -1,386 +0,0 @@
// "DVI video" logo sprite. Generated from a 1-bit PNG using ImageMagick:
// magick sprite.png -define h:format=gray -depth 1 sprite.h
// (then edited a bit for this program)
// The sprite was intentionally planned with dimensions that are both
// prime numbers, and then starts from the upper-left corner. This should
// make the bounce SUPER annoying, taking hours or days to ever hit an
// exact corner again!
#define SPRITE_WIDTH 239
#define SPRITE_HEIGHT 149
static const uint8_t sprite[] = {
0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFC,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xEF,
0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0x80, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x80,
0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x9F,
0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF,
0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xFE, 0x1F,
0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xE0,
0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF,
0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFF, 0xF8, 0x3F,
0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xE0,
0x00, 0x7F, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF,
0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F,
0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xF0,
0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF,
0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F,
0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8,
0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF,
0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0x00, 0x7F,
0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xF8,
0x07, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF,
0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0xFF,
0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
0xFC, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFC,
0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xFF,
0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xF8, 0x00, 0xFF,
0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFC,
0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF,
0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xE0, 0x01, 0xFF,
0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFE,
0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xFF,
0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x80, 0x01, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
0xF0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF,
0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
0xFF, 0x80, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF,
0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
0xE0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF,
0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
0xFF, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF,
0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF,
0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF,
0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF,
0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF,
0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0xFF,
0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF,
0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x01,
0xFE, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F,
0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x03,
0xFC, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x3F,
0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF,
0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x07,
0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFE, 0x07, 0xFF, 0x00, 0x00, 0x3F,
0x80, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0xF0, 0x0F, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFE, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xFC, 0x00,
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x0F,
0xE0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0xFF, 0x80, 0x00, 0x3F,
0x80, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xFC, 0x1F, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFE, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x0F, 0xF0, 0x00,
0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x1F,
0xC0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x7F, 0x80, 0x00, 0x3F,
0xFF, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xFE, 0x3F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFE, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x1F, 0xE0, 0x00,
0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x3F,
0x80, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x3F,
0xFF, 0xE0, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xFF, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFE, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x0F, 0xF0, 0x00,
0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F,
0x00, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x7F, 0x80, 0x00, 0x3F,
0x80, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFE, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x0F, 0xF8, 0x00,
0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE,
0x00, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0xFF, 0x80, 0x00, 0x3F,
0x80, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFE, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xFE, 0x00,
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC,
0x00, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFE, 0x0F, 0xFE, 0x00, 0x00, 0x3F,
0x80, 0x00, 0x00, 0x07, 0xFF, 0x80, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF,
0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8,
0x00, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F,
0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0,
0x00, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F,
0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xFF,
0xF0, 0x00, 0x00, 0x00, 0x00, 0x00
};

File diff suppressed because it is too large Load diff

View file

@ -1,138 +0,0 @@
// "Flying toasters" example for PicoDVI library. If just starting out,
// see the 8bit_double_buffer which explains the PicoDVI groundwork.
// Comments in THIS file are mostly distinct & new concepts.
// IF NO OUTPUT OR RED FLICKER SCANLINES: try Tools->Optimize->(-O3)
#include <PicoDVI.h>
#include "sprites.h" // Graphics data
DVIGFX8 display(DVI_RES_320x240p60, true, adafruit_feather_dvi_cfg);
// See notes in 8bit_double_buffer regarding 400x240 mode.
//DVIGFX8 display(DVI_RES_400x240p60, true, adafruit_feather_dvi_cfg);
// Also requires -O3 setting.
// This structure holds pointers to sprite graphics and masks in sprites.h.
// First 8 are toasters, last 3 are toast.
const struct {
const uint8_t *sprite;
const uint8_t *mask;
} spritedata[] = {
{ toaster0, toaster0_mask}, // There are really only 4 unique frames
{ toaster1, toaster1_mask}, // of toaster flapping. Instead of code to
{ toaster2, toaster2_mask}, // handle the back-and-forth motion, just
{ toaster3, toaster3_mask}, // refer to frames in the desired sequence.
{ toaster3, toaster3_mask}, // This also doubles up the first and last
{ toaster2, toaster2_mask}, // frames to create a small pause at those
{ toaster1, toaster1_mask}, // points in the loop.
{ toaster0, toaster0_mask},
{ toast0 , toast_mask}, // Light,
{ toast1 , toast_mask}, // medium and
{ toast2 , toast_mask}, // dark toast - all use the same mask.
};
// 12 sprites seems to be about the limit for this code to maintain
// consistent 60 frames/sec updates. Double-buffered graphics synchronize
// to display refresh, and if something can't complete in one frame,
// everything is stalled until the next. It's especially annoying in
// edge cases with some frames take 1/60 sec but others take 1/30.
// See notes at end of file regarding potential improvements.
#define N_SPRITES 12
// This structure contains positions and other data for the sprites
// in motion (notice it's not "const", because contents change).
struct {
int16_t pos[2]; // sprite position (X,Y) * 16
int8_t speed; // sprite speed
uint8_t frame; // for animation
} sprite[N_SPRITES];
// Initialize one sprite (index passed to function) to a random offscreen
// position, also randomizing speed and sprite type (toaster or toast).
void randomsprite(uint8_t i) {
// To move the sprites at slightly different speeds, coordinates are
// stored in 1/16 pixel units. When drawing, the stored values get
// divided by 16 to yield final pixel coordinates.
sprite[i].pos[0] = display.width() * 16; // Off right edge
sprite[i].pos[1] = random(-display.width() / 2, display.height()) * 16;
sprite[i].speed = random(8, 17); // Move 1/2 to 1 pixel per frame
// The spritedata array has 8 toaster frames and 3 toasts; just picking
// one randomly gives us 8/11 odds of a toaster (with a random initial
// wing position) and 3/11 of toast (with random done-ness), good mix.
sprite[i].frame = random(sizeof spritedata / sizeof spritedata[0]);
}
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
// Initialize color palette from table in sprites.h. Rather than
// calling setColor() for each one, we can just dump it directly...
memcpy(display.getPalette(), palette, sizeof palette);
display.swap(false, true); // Duplicate same palette to front & back buffers
// Randomize initial sprite states
randomSeed(analogRead(A0)); // Seed randomness from unused analog in
for (int i=0; i<N_SPRITES; i++) randomsprite(i);
}
uint8_t flap = 0; // Counter for flapping animation
void loop() { // Runs once every frame
display.fillScreen(0); // Clear back framebuffer,
for (int i=0; i<N_SPRITES; i++) { // and draw each sprite there...
// Although DVIGFX8 is a COLOR display type, we leverage GFX's
// drawGrayscaleBitmap() function to draw the sprites...it saves us
// writing a ton of code this way. See notes at end of this file.
// Also here's the "divide position by 16" mentioned earlier:
display.drawGrayscaleBitmap(sprite[i].pos[0] / 16, sprite[i].pos[1] / 16,
spritedata[sprite[i].frame].sprite, spritedata[sprite[i].frame].mask,
64, 64); // All sprites are 64x64 to simplify this code
// After drawing each sprite, update its position
sprite[i].pos[0] -= sprite[i].speed; // Move left
sprite[i].pos[1] += sprite[i].speed / 2; // Move down (X:Y 2:1 ratio)
// Every fourth video frame, IF this sprite is a toaster (frame is 0-7),
// increment the sprite index and wrap around back to 0 if necessary...
if ((!(flap & 3)) && (sprite[i].frame < 8)) {
sprite[i].frame = (sprite[i].frame + 1) & 7; // Loop 0-7
} // else is video frame 1-3 or is toast (not animated)
// If the sprite has moved off the left or bottom edges, reassign it:
if ((sprite[i].pos[0] < -64 * 16) || (sprite[i].pos[1] > display.height() * 16))
randomsprite(i);
}
// Swap front/back buffers, do not duplicate current screen state
// to next frame, we'll draw it new from scratch each time.
display.swap();
flap++; // Increment animation counter; "rolls over" 0-255 automatically.
}
/*
NOTES ON EFFICIENCY
This was written to be a silly and somewhat simple example. No care is
taken to minimize program size or speed, so it's NOT a good role model
for complex situations, but it was quick to produce. Given time and effort,
what could be improved?
- As written, every sprite is 64x64 pixels, period. Makes it very easy to
draw. Flash space could be saved by cropping each sprite to a minimum
bounding rectangle...tradeoff being there would need to be a table of
sizes and X/Y offsets to maintain consistent motion when animating.
Demo's using ~230K -- just a fraction of available flash -- and life is
short so it's just not a priority here.
- The GFX library's drawGrayscaleBitmap() function is used because it's
there and works for our needs, but is not especially efficient (testing
clipping on every pixel) and expects 1 byte/pixel data. Since this demo's
sprites are all 16-color, "packing" 2 pixels/byte is possible, using half
as much flash. A function could be written both to handle clipping more
efficiently and to de-pack and draw sprite data straight to framebuffer,
but would likely increase source code 2-3X and confuse novices.
- The sprite data is all stored in flash memory, which is slower to access
than RAM. RAM is scarce (perhaps ~64K after PicoDVI claims a framebuffer),
but the sprites might still fit, especially if packed 2 pixels/byte. It's
not a bottleneck now AS WRITTEN (due to drawGrayscaleBitmap() itself being
a bit pokey), but if sprite-drawing were handled as mentioned above, could
be possible to increase the sprite count while maintaining frame rate by
adding the __not_in_flash attribute to these tables (see Pico SDK docs).
*/

File diff suppressed because it is too large Load diff

View file

@ -1,343 +0,0 @@
// "TV host" example for PicoDVI library. If just starting out,
// see the 8bit_double_buffer which explains the PicoDVI groundwork.
// Comments in THIS file are mostly distinct & new concepts.
// IF NO OUTPUT OR RED FLICKER SCANLINES: try Tools->Optimize->(-O3)
#include <PicoDVI.h>
#include "sprites.h" // Graphics data
DVIGFX8 display(DVI_RES_320x240p60, true, adafruit_feather_dvi_cfg);
// See notes in 8bit_double_buffer regarding 400x240 mode.
//DVIGFX8 display(DVI_RES_400x240p60, true, adafruit_feather_dvi_cfg);
// Also requires -O3 setting.
#define SPRITE_WIDTH 256
#define SPRITE_HEIGHT 207
// This structure holds pointers to sprite graphics and masks in sprites.h.
const struct {
const uint8_t *sprite;
const uint8_t *mask;
} spritedata[] = {
{ sprite0 , mask0 },
{ sprite1 , mask1 },
{ sprite2 , mask2 },
{ sprite3 , mask3 },
{ sprite4 , mask4 },
{ sprite5 , mask5 },
{ sprite6 , mask6 },
{ sprite7 , mask7 },
{ sprite8 , mask8 },
{ sprite9 , mask9 },
{ sprite10, mask10 },
{ sprite11, mask11 },
{ sprite12, mask12 },
{ sprite13, mask13 },
{ sprite14, mask14 },
{ sprite15, mask15 },
{ sprite16, mask16 }
};
#define NUM_SPRITES (sizeof spritedata / sizeof spritedata[0])
// Spinning cube implements 3D rotation & projection, but takes every
// mathematical shortcut; not recommended as a starting point for proper
// 3D drawing. Check out Wikipedia, Foley & Van Dam, etc.
#define STEPS 20 // Number of lines between cube edges
#define CAM_Z 1.8 // Camera position along Z axis; approx sqrt(3) * 1.05
float scale; // Calc'd once per frame for in/out bounce effect
float min_scale = sqrt((display.width() * display.width() + display.height() * display.height()) / 4) / M_SQRT2 * 2.0;
void setup() { // Runs once on startup
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
// Initialize color palette from table in sprites.h. Rather than
// calling setColor() for each one, we can just dump it directly...
memcpy(display.getPalette(), palette, sizeof palette);
// And then override the last few entries for our background cube...
display.setColor(0, 0, 0, 0); // Black background
display.setColor(253, 255, 0, 255); // Index 253 = magenta
display.setColor(254, 0, 255, 255); // Index 254 = cyan
display.setColor(255, 255, 255, 0); // Index 255 = yellow
display.swap(false, true); // Duplicate same palette into front & back buffers
}
const float corners[8][3] = { // Cube vertices in original coord space
{ -1, -1, -1 },
{ 1, -1, -1 },
{ -1, 1, -1 },
{ 1, 1, -1 },
{ -1, -1, 1 },
{ 1, -1, 1 },
{ -1, 1, 1 },
{ 1, 1, 1 },
};
float rotated[8][3]; // Cube vertices after rotation applied
// (Cam is stationary, cube is transformed, rather than other way around)
// Draw one face of the cube, if it's visible (not back-facing).
// Some points & doubled-up lines could be avoided with more care,
// but code would be somewhat longer. Not a bottleneck here, so...
void face(uint8_t p1, uint8_t p2, uint8_t p3, uint8_t p4, uint8_t p5, uint8_t color) {
// p1-p4 are indices of 4 corners, p5 is a perpendicular point (surface normal)
float vx = rotated[p1][0]; // Vector from cam to first point
float vy = rotated[p1][1]; // (not normalized)
float vz = rotated[p1][2] - CAM_Z;
float nx = rotated[p5][0] - rotated[p1][0]; // Surface normal
float ny = rotated[p5][1] - rotated[p1][1]; // (not normalized)
float nz = rotated[p5][2] - rotated[p1][2];
// Dot product of vectors. Since only the sign of the result is needed
// below, the two vectors do not require normalization first.
float dot = vx * nx + vy * ny + vz * nz;
if (dot < 0) { // Facing camera?
for(int i=0; i<STEPS; i++) { // Interpolate parallel lines...
float s1 = (float)i / (float)(STEPS - 1); // Weighting of p1, p3
float s2 = 1.0 - s1; // Weighting of p2, p4
// Interpolate between p1, p2
float t1x = rotated[p1][0] * s1 + rotated[p2][0] * s2;
float t1y = rotated[p1][1] * s1 + rotated[p2][1] * s2;
float t1z = rotated[p1][2] * s1 + rotated[p2][2] * s2;
// Interpolate between p3, p4
float t2x = rotated[p3][0] * s1 + rotated[p4][0] * s2;
float t2y = rotated[p3][1] * s1 + rotated[p4][1] * s2;
float t2z = rotated[p3][2] * s1 + rotated[p4][2] * s2;
// Project interpolated endpoints to image plane @ Z=0
float dz = t1z - CAM_Z; // Camera to point
float x1 = (float)(display.width() / 2) + t1x / dz * scale + 0.5;
float y1 = (float)(display.height() / 2) + t1y / dz * scale + 0.5;
dz = t2z - CAM_Z; // Camera to point
float x2 = (float)(display.width() / 2) + t2x / dz * scale + 0.5;
float y2 = (float)(display.height() / 2) + t2y / dz * scale + 0.5;
line(x1, y1, x2, y2, color);
}
}
}
uint8_t frame = 0; // For animation timing
bool stutter = false; // If true, doing A/B stutter animation
uint32_t duration = 3000; // Time to hold current mode, in milliseconds
uint32_t lastModeSwitchTime = 0;
uint8_t var[2] = { 4, 4 }; // Mode-specific variables
uint8_t spritenum = 0; // Active sprite index
void loop() { // Runs once every frame
display.fillScreen(0); // Clear back framebuffer, will do full redraw...
// This does the in & out bounce effect (bit of a cheat but less math
// than moving camera in & out. Cam stays in one position just far
// enough that it's never inside cube, need not handle Z clipping.)
scale = min_scale * (1.0 + (float)abs((long)(millis() & 4095) - 2048) / 8192.0); // 1.0-1.25X
// Rotate cube vertices from corners[] to rotated[]
float now = millis() / 1000.0; // Elapsed time in seconds
float rx = now * -0.19; // X, Y, Z rotation
float ry = now * 0.23;
float rz = now * 0.13;
float cx = cos(rx);
float cy = cos(ry);
float cz = cos(rz);
float sx = sin(rx);
float sy = sin(ry);
float sz = sin(rz);
for (int i=0; i<8; i++) {
float x1 = corners[i][0];
float y1 = corners[i][1];
float z1 = corners[i][2];
float y2 = y1 * cx - z1 * sx;
float z2 = y1 * sx + z1 * cx;
float x2 = x1 * cy - z2 * sy;
float z3 = x1 * sy + z2 * cy;
float x3 = x2 * cz - y2 * sz;
float y3 = x2 * sz + y2 * cz;
rotated[i][0] = x3;
rotated[i][1] = y3;
rotated[i][2] = z3;
}
face(0, 1, 4, 5, 2, 253); // Test & draw 6 faces of cube
face(0, 2, 4, 6, 1, 254);
face(2, 3, 6, 7, 0, 253);
face(1, 3, 5, 7, 0, 254);
face(0, 1, 2, 3, 4, 255);
face(4, 5, 6, 7, 0, 255);
// Check if switching in/out of stutter mode
if ((millis() - lastModeSwitchTime) >= duration) { // Time to switch?
lastModeSwitchTime = millis(); // Note time,
stutter = !stutter; // and make the switch
if (stutter) { // If entering stutter mode...
duration = random(250, 500); // Go for 1/4 to 1/2 second
var[0] = random(NUM_SPRITES); // Pick 2 different sprites
var[1] = (var[0] + 1 + random(NUM_SPRITES - 1)) % NUM_SPRITES;
} else { // Returning to regular mode...
duration = random(2000, 5000); // Go for 2-5 seconds
var[0] = random(3, 6); // Hold each pose for 3-5 frames
}
}
// Choose sprite to display based on current mode...
if (stutter) {
// Every second frame, alternate between two sprites
spritenum = var[((frame >> 1) & 1)];
} else {
// Pick among random frames (may repeat, is OK)
if (!(frame % var[0])) {
spritenum = random(NUM_SPRITES);
}
}
// Overlay big sprite. Although DVIGFX8 is a COLOR display type,
// we leverage GFX's drawGrayscaleBitmap() function to draw it...
// saves us writing a ton of code this way.
// Comment this out if you want ONLY the background cube.
display.drawGrayscaleBitmap((display.width() - SPRITE_WIDTH) / 2,
display.height() - SPRITE_HEIGHT, spritedata[spritenum].sprite,
spritedata[spritenum].mask, SPRITE_WIDTH, SPRITE_HEIGHT);
// Swap front/back buffers, do not duplicate current screen state
// to next frame, we'll draw it new from scratch each time.
display.swap();
frame++; // For animation timing; wraps around 0-255
}
// A somewhat smooth(er) line drawing function. Not antialiased, but with
// subpixel positioning that makes the background animation less "jumpy"
// than with GFX, which is all integer end points.
// Returns bitmask of which edge(s) a point exceeds
uint8_t xymask(float x, float y) {
return ( (x < 0.0 ) | ((x >= (float)display.width() ) << 1) |
((y < 0.0) << 2) | ((y >= (float)display.height()) << 3));
}
// Returns bitmask of which X edge(s) a point exceeds
uint8_t xmask(float x) {
return (x < 0.0) | ((x >= (float)display.width()) << 1);
}
void line(float x1, float y1, float x2, float y2, uint8_t color) {
float ox1 = x1, oy1 = y1, ox2 = x2, oy2 = y2;
uint8_t mask1 = xymask(x1, y1); // If both endpoints are
uint8_t mask2 = xymask(x2, y2); // off same edge(s),
if (mask1 & mask2) return; // line won't overlap screen
float dx = x2 - x1;
float dy = y2 - y1;
// Clip top
if (mask1 & 4) {
x1 -= y1 * dx / dy;
y1 = 0.0;
} else if (mask2 & 4) {
x2 -= y2 * dx / dy;
y2 = 0.0;
}
float maxy = (float)(display.height() - 1);
// Clip bottom
if (mask1 & 8) {
x1 -= (y1 - maxy) * dx / dy;
y1 = maxy;
} else if (mask2 & 8) {
x2 -= (y2 - maxy) * dx / dy;
y2 = maxy;
}
mask1 = xmask(x1); // Repeat the offscreen check after Y clip
mask2 = xmask(x2);
if (mask1 & mask2) return;
dx = x2 - x1;
dy = y2 - y1;
// Clip left
if (mask1 & 1) {
y1 -= x1 * dy / dx;
x1 = 0.0;
} else if (mask2 & 1) {
y2 -= x2 * dy / dx;
x2 = 0.0;
}
float maxx = (float)(display.width() - 1);
// Clip right
if (mask1 & 2) {
y1 -= (x1 - maxx) * dy / dx;
x1 = maxx;
} else if (mask2 & 2) {
y2 -= (x2 - maxx) * dy / dx;
x2 = maxx;
}
// (x1, y1) to (x2, y2) is known to be on-screen and in-bounds now.
// Handle a couple special cases (horizontal, vertical lines) first,
// GFX takes care of these fine and it avoids some divide-by-zero
// checks in the diagonal code later.
if ((int)y1 == (int)y2) { // Horizontal or single point
int16_t x, w;
if (x2 >= x1) {
x = (int)x1;
w = (int)x2 - (int)x1 + 1;
} else {
x = (int)x2;
w = (int)x1 - (int)x2 + 1;
}
display.drawFastHLine(x, (int)y1, w, color);
} else if ((int)x1 == (int)x2) { // Vertical
int16_t y, h;
if (y2 >= y1) {
y = (int)y1;
h = (int)y2 - (int)y1 + 1;
} else {
y = (int)y2;
h = (int)y1 - (int)y2 + 1;
}
display.drawFastVLine((int)x1, y, h, color);
} else { // Diagonal
dx = x2 - x1;
dy = y2 - y1;
uint8_t *ptr = display.getBuffer();
// This is a bit ugly in that it uses floating-point math in the line
// drawing loop. There are more optimal Bresenham-esque fixed-point
// approaches to do this (initializing the error term based on subpixel
// endpoints and slopes), but A) I'm out of spoons today, and B) we're
// drawing just a few dozen lines and it's simply not a bottleneck in
// this demo. Just saying this won't scale up to thousands of lines.
if (fabs(dx) >= fabs(dy)) { // "Wide" line
if (x1 > x2) { // Put (x1, y1) at left
float t = x1; x1 = x2; x2 = t;
t = y1; y1 = y2; y2 = t;
}
uint16_t ix1 = (uint16_t)x1;
uint16_t ix2 = (uint16_t)x2;
float slope = dy / dx;
for (uint16_t x=ix1; x <= ix2; x++) {
uint16_t iy = (uint16_t)(y1 + slope * (float)(x - ix1));
if (iy < display.height()) ptr[iy * display.width() + x] = color;
}
} else { // "Tall" line
if (y1 > y2) { // Put (x1, y1) at top
float t = x1; x1 = x2; x2 = t;
t = y1; y1 = y2; y2 = t;
}
uint16_t iy1 = (uint16_t)y1;
uint16_t iy2 = (uint16_t)y2;
float slope = dx / dy;
for (uint16_t y=iy1; y <= iy2; y++) {
uint16_t ix = (uint16_t)(x1 + slope * (float)(y - iy1));
if (ix < display.width()) ptr[y * display.width() + ix] = color;
}
}
}
}

View file

@ -1,24 +0,0 @@
.program fourwire
; Sample bits using an external clock, and push groups of bits into the RX FIFO.
; - IN pin 0 is the data pin (GPIO18)
; - IN pin 1 is the dc pin (GPIO19)
; - IN pin 2 is the clock pin (GPIO20)
; - JMP pin is the chip select (GPIO21)
; - Autopush is enabled, threshold 8
;
; This program waits for chip select to be asserted (low) before it begins
; clocking in data. Whilst chip select is low, data is clocked continuously. If
; chip select is deasserted part way through a data byte, the partial data is
; discarded. This makes use of the fact a mov to isr clears the input shift
; counter.
flush:
mov isr, null ; Clear ISR and input shift counter
jmp check_chip_select ; Poll chip select again
.wrap_target
do_bit:
wait 0 pin 2 ; Detect rising edge and sample input data
wait 1 pin 2 ; (autopush takes care of moving each complete
in pins, 2 ; data word to the FIFO)
check_chip_select:
jmp pin, flush ; Bail out if we see chip select high
.wrap

View file

@ -1,251 +0,0 @@
// PicoDVI-based "virtual SPITFT" display. Receives graphics commands/data
// over 4-wire SPI interface, mimicking functionality of displays such as
// ST7789 or ILI9341, but shown on an HDMI monitor instead.
#include <PicoDVI.h> // Core display & graphics library
// Configurables ----
// GPIO connected to (or shared with) TFT control.
// Careful not to overlap the DVI pins.
#define PIN_DATA 9 // 3 contiguous pins start here: data, DC, clk
#define PIN_CS 6 // Chip-select need not be contiguous
// 320x240 16-bit color display (to match common TFT display resolution):
DVIGFX16 display(DVI_RES_320x240p60, adafruit_feather_dvi_cfg);
// Output of pioasm ----
#define fourwire_wrap_target 2
#define fourwire_wrap 5
static const uint16_t fourwire_program_instructions[] = {
0xa0c3, // 0: mov isr, null
0x0005, // 1: jmp 5
// .wrap_target
0x2022, // 2: wait 0 pin, 2
0x20a2, // 3: wait 1 pin, 2
0x4002, // 4: in pins, 2
0x00c0, // 5: jmp pin, 0
// .wrap
};
static const struct pio_program fourwire_program = {
.instructions = fourwire_program_instructions,
.length = 6,
.origin = -1,
};
static inline pio_sm_config fourwire_program_get_default_config(uint offset) {
pio_sm_config c = pio_get_default_sm_config();
sm_config_set_wrap(&c, offset + fourwire_wrap_target, offset + fourwire_wrap);
return c;
}
// end pioasm output ----
PIO pio = pio1; // libdvi uses pio0 (but has 1 avail state machine if you want to use it)
uint sm;
uint16_t *framebuf = display.getBuffer();
uint8_t decode[256];
#define DECODE(w) (decode[(w & 0x55) | ((w >> 7) & 0xaa)])
#define BIT_DEPOSIT(b, i) ((b) ? (1<<(i)) : 0)
#define BIT_EXTRACT(b, i) (((b) >> (i)) & 1)
#define BIT_MOVE(b, src, dest) BIT_DEPOSIT(BIT_EXTRACT(b, src), dest)
#define ENCODED_COMMAND(x) ( \
(BIT_MOVE(x, 0, 0)) | \
(BIT_MOVE(x, 1, 2)) | \
(BIT_MOVE(x, 2, 4)) | \
(BIT_MOVE(x, 3, 6)) | \
(BIT_MOVE(x, 4, 8)) | \
(BIT_MOVE(x, 5, 10)) | \
(BIT_MOVE(x, 6, 12)) | \
(BIT_MOVE(x, 7, 14)) \
)
#define COMMAND_NOP (0x00)
#define COMMAND_SWRESET (0x01)
#define COMMAND_CASET (0x2a)
#define COMMAND_PASET (0x2b)
#define COMMAND_RAMWR (0x2c)
#define COMMAND_MADCTL (0x36)
#define MADCTL_MY 0x80
#define MADCTL_MX 0x40
#define MADCTL_MV 0x20
#define MADCTL_ML 0x10
void setup() {
Serial.begin(115200);
//while(!Serial);
if (!display.begin()) { // Blink LED if insufficient RAM
pinMode(LED_BUILTIN, OUTPUT);
for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
}
for(int i=0; i<256; i++) {
int j = (BIT_MOVE(i, 0, 0)) |
(BIT_MOVE(i, 2, 1)) |
(BIT_MOVE(i, 4, 2)) |
(BIT_MOVE(i, 6, 3)) |
(BIT_MOVE(i, 1, 4)) |
(BIT_MOVE(i, 3, 5)) |
(BIT_MOVE(i, 5, 6)) |
(BIT_MOVE(i, 7, 7));
decode[i] = j;
}
uint offset = pio_add_program(pio, &fourwire_program);
sm = pio_claim_unused_sm(pio, true);
pio_sm_config c = fourwire_program_get_default_config(offset);
// Set the IN base pin to the provided PIN_DATA parameter. This is the data
// pin, and the next-numbered GPIO is used as the clock pin.
sm_config_set_in_pins(&c, PIN_DATA);
sm_config_set_jmp_pin(&c, PIN_CS);
// Set the pin directions to input at the PIO
pio_sm_set_consecutive_pindirs(pio, sm, PIN_DATA, 3, false);
pio_sm_set_consecutive_pindirs(pio, sm, PIN_CS, 1, false);
// Connect GPIOs to PIO block, set pulls
for (uint8_t i=0; i<3; i++) {
pio_gpio_init(pio, PIN_DATA + i);
gpio_set_pulls(PIN_DATA + i, true, false);
}
pio_gpio_init(pio, PIN_CS);
gpio_set_pulls(PIN_CS, true, false);
// Shifting to left matches the customary MSB-first ordering of SPI.
sm_config_set_in_shift(
&c,
false, // Shift-to-right = false (i.e. shift to left)
true, // Autopush enabled
16 // Autopush threshold
);
// We only receive, so disable the TX FIFO to make the RX FIFO deeper.
sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_RX);
// Load our configuration, and start the program from the beginning
pio_sm_init(pio, sm, offset, &c);
pio_sm_set_enabled(pio, sm, true);
// State machine should handle malformed requests somewhat,
// e.g. RAMWR writes that wrap around or drop mid-data.
uint8_t cmd = COMMAND_NOP; // Last received command
uint16_t X0 = 0, X1 = display.width() - 1; // Address window X
uint16_t Y0 = 0, Y1 = display.height() - 1; // Address window Y
uint16_t x = 0, y = 0; // Current pixel pos.
union { // Data receive buffer sufficient for implemented commands
uint8_t b[4];
uint16_t w[2];
uint32_t l;
} buf;
int8_t bufidx = -1; // Current pos. in buf.b[] array (or -1 = full)
for (;;) {
uint16_t ww = pio_sm_get_blocking(pio, sm); // Read next word (data & DC interleaved)
if ((ww & 0x2)) { // DC bit is set, that means it's data (most common case, hence 1st)
if (bufidx >= 0) { // Decode & process only if recv buffer isn't full
buf.b[bufidx] = DECODE(ww);
// Buffer is filled in reverse so byte swaps aren't needed on uint16_t values
if (--bufidx < 0) { // Receive threshold reached?
switch (cmd) {
case COMMAND_CASET:
// Clipping is not performed here because framebuffer
// may be a different size than implied SPI device.
// That occurs in the RAMWR condition later.
X0 = buf.w[1]; // [sic.] 1 because buffer is loaded in reverse
X1 = buf.w[0];
if (X0 > X1) {
uint16_t tmp = X0;
X0 = X1;
X1 = tmp;
}
break;
case COMMAND_PASET:
Y0 = buf.w[1]; // [sic.] 1 because buffer is loaded in reverse
Y1 = buf.w[0];
if (Y0 > Y1) {
uint16_t tmp = Y0;
Y0 = Y1;
Y1 = tmp;
}
break;
case COMMAND_RAMWR:
// Write pixel to screen, increment X/Y, wrap around as needed.
// drawPixel() is used as it handles both clipping & rotation,
// saves a lot of bother here. However, this only handles rotation,
// NOT full MADCTL mapping, but the latter is super rare, I think
// it's only used in some eye code to mirror one of two screens.
// If it's required, then rotation, mirroring and clipping will
// all need to be handled in this code...but, can write direct to
// framebuffer then, might save some cycles.
display.drawPixel(x, y, buf.w[0]);
if (++x > X1) {
x = X0;
if (++y > Y1) {
y = Y0;
}
}
bufidx = 1; // Reset buffer counter for next pixel
// Buflen is left as-is, so more pixels can be processed
break;
case COMMAND_MADCTL:
switch (buf.b[0] & 0xF0) {
case MADCTL_MX | MADCTL_MV: // ST77XX
case MADCTL_MX | MADCTL_MY | MADCTL_MV: // ILI9341
display.setRotation(0);
break;
case MADCTL_MX | MADCTL_MY: // ST77XX
case MADCTL_MX: // ILI9341
display.setRotation(1);
break;
case MADCTL_MY | MADCTL_MV: // ST77XX
case MADCTL_MV: // ILI9341
display.setRotation(2);
break;
case 0: // ST77XX
case MADCTL_MY: // ILI9341
display.setRotation(3);
break;
}
break;
}
}
}
} else { // Is command
cmd = DECODE(ww);
switch (cmd) {
case COMMAND_SWRESET:
display.setRotation(0);
x = y = X0 = Y0 = 0;
X1 = display.width() - 1;
Y1 = display.height() - 1;
break;
case COMMAND_CASET:
bufidx = 3; // Expecting two 16-bit values (X0, X1)
break;
case COMMAND_PASET:
bufidx = 3; // Expecting two 16-bit values (Y0, Y1)
break;
case COMMAND_RAMWR:
bufidx = 1; // Expecting one 16-bit value (or more)
x = X0; // Start at UL of address window
y = Y0;
break;
case COMMAND_MADCTL:
bufidx = 0; // Expecting one 8-bit value
break;
default:
// Unknown or unimplemented command, discard any data that follows
bufidx = -1;
}
}
}
}
void loop() {
}

View file

@ -1,4 +0,0 @@
PicoDVI Hardware
================
This directory contains schematics and layout files

Binary file not shown.

View file

@ -1 +0,0 @@
0

View file

@ -1,3 +0,0 @@
(fp_lib_table
(lib (name picodvi)(type KiCad)(uri ${KIPRJMOD}/picodvi.pretty)(options "")(descr ""))
)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,408 +0,0 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2-bee76a0~70~ubuntu18.04.1*
G04 #@! TF.CreationDate,2020-08-11T13:50:02+01:00*
G04 #@! TF.ProjectId,picodvi,7069636f-6476-4692-9e6b-696361645f70,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Legend,Bot*
G04 #@! TF.FilePolarity,Positive*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 5.0.2-bee76a0~70~ubuntu18.04.1) date Tue 11 Aug 2020 13:50:02 BST*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.120000*%
%ADD11C,0.100000*%
G04 APERTURE END LIST*
D10*
X214464761Y-123297904D02*
X214731428Y-122916952D01*
X214921904Y-123297904D02*
X214921904Y-122497904D01*
X214617142Y-122497904D01*
X214540952Y-122536000D01*
X214502857Y-122574095D01*
X214464761Y-122650285D01*
X214464761Y-122764571D01*
X214502857Y-122840761D01*
X214540952Y-122878857D01*
X214617142Y-122916952D01*
X214921904Y-122916952D01*
X213817142Y-123259809D02*
X213893333Y-123297904D01*
X214045714Y-123297904D01*
X214121904Y-123259809D01*
X214160000Y-123183619D01*
X214160000Y-122878857D01*
X214121904Y-122802666D01*
X214045714Y-122764571D01*
X213893333Y-122764571D01*
X213817142Y-122802666D01*
X213779047Y-122878857D01*
X213779047Y-122955047D01*
X214160000Y-123031238D01*
X213512380Y-122764571D02*
X213321904Y-123297904D01*
X213131428Y-122764571D01*
X211950476Y-122878857D02*
X211836190Y-122916952D01*
X211798095Y-122955047D01*
X211760000Y-123031238D01*
X211760000Y-123145523D01*
X211798095Y-123221714D01*
X211836190Y-123259809D01*
X211912380Y-123297904D01*
X212217142Y-123297904D01*
X212217142Y-122497904D01*
X211950476Y-122497904D01*
X211874285Y-122536000D01*
X211836190Y-122574095D01*
X211798095Y-122650285D01*
X211798095Y-122726476D01*
X211836190Y-122802666D01*
X211874285Y-122840761D01*
X211950476Y-122878857D01*
X212217142Y-122878857D01*
G04 #@! TO.C,C2*
D11*
X230116666Y-108750000D02*
X230150000Y-108783333D01*
X230250000Y-108816666D01*
X230316666Y-108816666D01*
X230416666Y-108783333D01*
X230483333Y-108716666D01*
X230516666Y-108650000D01*
X230550000Y-108516666D01*
X230550000Y-108416666D01*
X230516666Y-108283333D01*
X230483333Y-108216666D01*
X230416666Y-108150000D01*
X230316666Y-108116666D01*
X230250000Y-108116666D01*
X230150000Y-108150000D01*
X230116666Y-108183333D01*
X229850000Y-108183333D02*
X229816666Y-108150000D01*
X229750000Y-108116666D01*
X229583333Y-108116666D01*
X229516666Y-108150000D01*
X229483333Y-108183333D01*
X229450000Y-108250000D01*
X229450000Y-108316666D01*
X229483333Y-108416666D01*
X229883333Y-108816666D01*
X229450000Y-108816666D01*
G04 #@! TO.C,C3*
X232366666Y-101750000D02*
X232400000Y-101783333D01*
X232500000Y-101816666D01*
X232566666Y-101816666D01*
X232666666Y-101783333D01*
X232733333Y-101716666D01*
X232766666Y-101650000D01*
X232800000Y-101516666D01*
X232800000Y-101416666D01*
X232766666Y-101283333D01*
X232733333Y-101216666D01*
X232666666Y-101150000D01*
X232566666Y-101116666D01*
X232500000Y-101116666D01*
X232400000Y-101150000D01*
X232366666Y-101183333D01*
X232133333Y-101116666D02*
X231700000Y-101116666D01*
X231933333Y-101383333D01*
X231833333Y-101383333D01*
X231766666Y-101416666D01*
X231733333Y-101450000D01*
X231700000Y-101516666D01*
X231700000Y-101683333D01*
X231733333Y-101750000D01*
X231766666Y-101783333D01*
X231833333Y-101816666D01*
X232033333Y-101816666D01*
X232100000Y-101783333D01*
X232133333Y-101750000D01*
G04 #@! TO.C,C4*
X233866666Y-105250000D02*
X233900000Y-105283333D01*
X234000000Y-105316666D01*
X234066666Y-105316666D01*
X234166666Y-105283333D01*
X234233333Y-105216666D01*
X234266666Y-105150000D01*
X234300000Y-105016666D01*
X234300000Y-104916666D01*
X234266666Y-104783333D01*
X234233333Y-104716666D01*
X234166666Y-104650000D01*
X234066666Y-104616666D01*
X234000000Y-104616666D01*
X233900000Y-104650000D01*
X233866666Y-104683333D01*
X233266666Y-104850000D02*
X233266666Y-105316666D01*
X233433333Y-104583333D02*
X233600000Y-105083333D01*
X233166666Y-105083333D01*
G04 #@! TO.C,C5*
X231616666Y-108750000D02*
X231650000Y-108783333D01*
X231750000Y-108816666D01*
X231816666Y-108816666D01*
X231916666Y-108783333D01*
X231983333Y-108716666D01*
X232016666Y-108650000D01*
X232050000Y-108516666D01*
X232050000Y-108416666D01*
X232016666Y-108283333D01*
X231983333Y-108216666D01*
X231916666Y-108150000D01*
X231816666Y-108116666D01*
X231750000Y-108116666D01*
X231650000Y-108150000D01*
X231616666Y-108183333D01*
X230983333Y-108116666D02*
X231316666Y-108116666D01*
X231350000Y-108450000D01*
X231316666Y-108416666D01*
X231250000Y-108383333D01*
X231083333Y-108383333D01*
X231016666Y-108416666D01*
X230983333Y-108450000D01*
X230950000Y-108516666D01*
X230950000Y-108683333D01*
X230983333Y-108750000D01*
X231016666Y-108783333D01*
X231083333Y-108816666D01*
X231250000Y-108816666D01*
X231316666Y-108783333D01*
X231350000Y-108750000D01*
G04 #@! TO.C,C6*
X228366666Y-107500000D02*
X228400000Y-107533333D01*
X228500000Y-107566666D01*
X228566666Y-107566666D01*
X228666666Y-107533333D01*
X228733333Y-107466666D01*
X228766666Y-107400000D01*
X228800000Y-107266666D01*
X228800000Y-107166666D01*
X228766666Y-107033333D01*
X228733333Y-106966666D01*
X228666666Y-106900000D01*
X228566666Y-106866666D01*
X228500000Y-106866666D01*
X228400000Y-106900000D01*
X228366666Y-106933333D01*
X227766666Y-106866666D02*
X227900000Y-106866666D01*
X227966666Y-106900000D01*
X228000000Y-106933333D01*
X228066666Y-107033333D01*
X228100000Y-107166666D01*
X228100000Y-107433333D01*
X228066666Y-107500000D01*
X228033333Y-107533333D01*
X227966666Y-107566666D01*
X227833333Y-107566666D01*
X227766666Y-107533333D01*
X227733333Y-107500000D01*
X227700000Y-107433333D01*
X227700000Y-107266666D01*
X227733333Y-107200000D01*
X227766666Y-107166666D01*
X227833333Y-107133333D01*
X227966666Y-107133333D01*
X228033333Y-107166666D01*
X228066666Y-107200000D01*
X228100000Y-107266666D01*
G04 #@! TO.C,C8*
X229351666Y-101750000D02*
X229385000Y-101783333D01*
X229485000Y-101816666D01*
X229551666Y-101816666D01*
X229651666Y-101783333D01*
X229718333Y-101716666D01*
X229751666Y-101650000D01*
X229785000Y-101516666D01*
X229785000Y-101416666D01*
X229751666Y-101283333D01*
X229718333Y-101216666D01*
X229651666Y-101150000D01*
X229551666Y-101116666D01*
X229485000Y-101116666D01*
X229385000Y-101150000D01*
X229351666Y-101183333D01*
X228951666Y-101416666D02*
X229018333Y-101383333D01*
X229051666Y-101350000D01*
X229085000Y-101283333D01*
X229085000Y-101250000D01*
X229051666Y-101183333D01*
X229018333Y-101150000D01*
X228951666Y-101116666D01*
X228818333Y-101116666D01*
X228751666Y-101150000D01*
X228718333Y-101183333D01*
X228685000Y-101250000D01*
X228685000Y-101283333D01*
X228718333Y-101350000D01*
X228751666Y-101383333D01*
X228818333Y-101416666D01*
X228951666Y-101416666D01*
X229018333Y-101450000D01*
X229051666Y-101483333D01*
X229085000Y-101550000D01*
X229085000Y-101683333D01*
X229051666Y-101750000D01*
X229018333Y-101783333D01*
X228951666Y-101816666D01*
X228818333Y-101816666D01*
X228751666Y-101783333D01*
X228718333Y-101750000D01*
X228685000Y-101683333D01*
X228685000Y-101550000D01*
X228718333Y-101483333D01*
X228751666Y-101450000D01*
X228818333Y-101416666D01*
G04 #@! TO.C,C9*
X230866666Y-101750000D02*
X230900000Y-101783333D01*
X231000000Y-101816666D01*
X231066666Y-101816666D01*
X231166666Y-101783333D01*
X231233333Y-101716666D01*
X231266666Y-101650000D01*
X231300000Y-101516666D01*
X231300000Y-101416666D01*
X231266666Y-101283333D01*
X231233333Y-101216666D01*
X231166666Y-101150000D01*
X231066666Y-101116666D01*
X231000000Y-101116666D01*
X230900000Y-101150000D01*
X230866666Y-101183333D01*
X230533333Y-101816666D02*
X230400000Y-101816666D01*
X230333333Y-101783333D01*
X230300000Y-101750000D01*
X230233333Y-101650000D01*
X230200000Y-101516666D01*
X230200000Y-101250000D01*
X230233333Y-101183333D01*
X230266666Y-101150000D01*
X230333333Y-101116666D01*
X230466666Y-101116666D01*
X230533333Y-101150000D01*
X230566666Y-101183333D01*
X230600000Y-101250000D01*
X230600000Y-101416666D01*
X230566666Y-101483333D01*
X230533333Y-101516666D01*
X230466666Y-101550000D01*
X230333333Y-101550000D01*
X230266666Y-101516666D01*
X230233333Y-101483333D01*
X230200000Y-101416666D01*
G04 #@! TO.C,R7*
X236116666Y-113066666D02*
X236350000Y-112733333D01*
X236516666Y-113066666D02*
X236516666Y-112366666D01*
X236250000Y-112366666D01*
X236183333Y-112400000D01*
X236150000Y-112433333D01*
X236116666Y-112500000D01*
X236116666Y-112600000D01*
X236150000Y-112666666D01*
X236183333Y-112700000D01*
X236250000Y-112733333D01*
X236516666Y-112733333D01*
X235883333Y-112366666D02*
X235416666Y-112366666D01*
X235716666Y-113066666D01*
G04 #@! TO.C,R8*
X237366666Y-113066666D02*
X237600000Y-112733333D01*
X237766666Y-113066666D02*
X237766666Y-112366666D01*
X237500000Y-112366666D01*
X237433333Y-112400000D01*
X237400000Y-112433333D01*
X237366666Y-112500000D01*
X237366666Y-112600000D01*
X237400000Y-112666666D01*
X237433333Y-112700000D01*
X237500000Y-112733333D01*
X237766666Y-112733333D01*
X236966666Y-112666666D02*
X237033333Y-112633333D01*
X237066666Y-112600000D01*
X237100000Y-112533333D01*
X237100000Y-112500000D01*
X237066666Y-112433333D01*
X237033333Y-112400000D01*
X236966666Y-112366666D01*
X236833333Y-112366666D01*
X236766666Y-112400000D01*
X236733333Y-112433333D01*
X236700000Y-112500000D01*
X236700000Y-112533333D01*
X236733333Y-112600000D01*
X236766666Y-112633333D01*
X236833333Y-112666666D01*
X236966666Y-112666666D01*
X237033333Y-112700000D01*
X237066666Y-112733333D01*
X237100000Y-112800000D01*
X237100000Y-112933333D01*
X237066666Y-113000000D01*
X237033333Y-113033333D01*
X236966666Y-113066666D01*
X236833333Y-113066666D01*
X236766666Y-113033333D01*
X236733333Y-113000000D01*
X236700000Y-112933333D01*
X236700000Y-112800000D01*
X236733333Y-112733333D01*
X236766666Y-112700000D01*
X236833333Y-112666666D01*
G04 #@! TO.C,R9*
X238616666Y-113066666D02*
X238850000Y-112733333D01*
X239016666Y-113066666D02*
X239016666Y-112366666D01*
X238750000Y-112366666D01*
X238683333Y-112400000D01*
X238650000Y-112433333D01*
X238616666Y-112500000D01*
X238616666Y-112600000D01*
X238650000Y-112666666D01*
X238683333Y-112700000D01*
X238750000Y-112733333D01*
X239016666Y-112733333D01*
X238283333Y-113066666D02*
X238150000Y-113066666D01*
X238083333Y-113033333D01*
X238050000Y-113000000D01*
X237983333Y-112900000D01*
X237950000Y-112766666D01*
X237950000Y-112500000D01*
X237983333Y-112433333D01*
X238016666Y-112400000D01*
X238083333Y-112366666D01*
X238216666Y-112366666D01*
X238283333Y-112400000D01*
X238316666Y-112433333D01*
X238350000Y-112500000D01*
X238350000Y-112666666D01*
X238316666Y-112733333D01*
X238283333Y-112766666D01*
X238216666Y-112800000D01*
X238083333Y-112800000D01*
X238016666Y-112766666D01*
X237983333Y-112733333D01*
X237950000Y-112666666D01*
G04 #@! TD*
M02*

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,40 +0,0 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2-bee76a0~70~ubuntu18.04.1*
G04 #@! TF.CreationDate,2020-08-11T13:50:02+01:00*
G04 #@! TF.ProjectId,picodvi,7069636f-6476-4692-9e6b-696361645f70,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Profile,NP*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 5.0.2-bee76a0~70~ubuntu18.04.1) date Tue 11 Aug 2020 13:50:02 BST*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.150000*%
G04 APERTURE END LIST*
D10*
X250000000Y-122000000D02*
G75*
G02X247000000Y-125000000I-3000000J0D01*
G01*
X247000000Y-85000000D02*
G75*
G02X250000000Y-88000000I0J-3000000D01*
G01*
X200000000Y-88000000D02*
G75*
G02X203000000Y-85000000I3000000J0D01*
G01*
X203000000Y-125000000D02*
G75*
G02X200000000Y-122000000I0J3000000D01*
G01*
X247000000Y-125000000D02*
X203000000Y-125000000D01*
X250000000Y-88000000D02*
X250000000Y-122000000D01*
X203000000Y-85000000D02*
X247000000Y-85000000D01*
X200000000Y-122000000D02*
X200000000Y-88000000D01*
M02*

View file

@ -1,39 +0,0 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.1.5+dfsg1-2build2*
G04 #@! TF.CreationDate,2020-11-18T17:14:58+00:00*
G04 #@! TF.ProjectId,picodvi,7069636f-6476-4692-9e6b-696361645f70,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Profile,NP*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 5.1.5+dfsg1-2build2) date 2020-11-18 17:14:58*
%MOMM*%
%LPD*%
G04 APERTURE LIST*
%ADD10C,0.150000*%
G04 APERTURE END LIST*
D10*
X250000000Y-112000000D02*
G75*
G02X247000000Y-115000000I-3000000J0D01*
G01*
X247000000Y-85000000D02*
G75*
G02X250000000Y-88000000I0J-3000000D01*
G01*
X200000000Y-88000000D02*
G75*
G02X203000000Y-85000000I3000000J0D01*
G01*
X203000000Y-115000000D02*
G75*
G02X200000000Y-112000000I0J3000000D01*
G01*
X247000000Y-115000000D02*
X203000000Y-115000000D01*
X250000000Y-88000000D02*
X250000000Y-112000000D01*
X203000000Y-85000000D02*
X247000000Y-85000000D01*
X200000000Y-112000000D02*
X200000000Y-88000000D01*
M02*

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,710 +0,0 @@
%!PS-Adobe-3.0
%%Creator: PCBNEW
%%CreationDate: Wed Nov 18 17:15:00 2020
%%Title: /home/luke/proj/picodvi/hardware/board/gerb/picodvi-NPTH-drl_map.ps
%%Pages: 1
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%DocumentMedia: A4 595 842 0 () ()
%%Orientation: Landscape
%%EndComments
%%BeginProlog
/line { newpath moveto lineto stroke } bind def
/cir0 { newpath 0 360 arc stroke } bind def
/cir1 { newpath 0 360 arc gsave fill grestore stroke } bind def
/cir2 { newpath 0 360 arc gsave fill grestore stroke } bind def
/arc0 { newpath arc stroke } bind def
/arc1 { newpath 4 index 4 index moveto arc closepath gsave fill
grestore stroke } bind def
/arc2 { newpath 4 index 4 index moveto arc closepath gsave fill
grestore stroke } bind def
/poly0 { stroke } bind def
/poly1 { closepath gsave fill grestore stroke } bind def
/poly2 { closepath gsave fill grestore stroke } bind def
/rect0 { rectstroke } bind def
/rect1 { rectfill } bind def
/rect2 { rectfill } bind def
/linemode0 { 0 setlinecap 0 setlinejoin 0 setlinewidth } bind def
/linemode1 { 1 setlinecap 1 setlinejoin } bind def
/dashedline { [200] 100 setdash } bind def
/solidline { [] 0 setdash } bind def
/phantomshow { moveto
/KicadFont findfont 0.000001 scalefont setfont
show } bind def
/textshow { gsave
findfont exch scalefont setfont concat 1 scale 0 0 moveto show
} bind def
/reencodefont {
findfont dup length dict begin
{ 1 index /FID ne
{ def }
{ pop pop } ifelse
} forall
/Encoding ISOLatin1Encoding def
currentdict
end } bind def
/KicadFont /Helvetica reencodefont definefont pop
/KicadFont-Bold /Helvetica-Bold reencodefont definefont pop
/KicadFont-Oblique /Helvetica-Oblique reencodefont definefont pop
/KicadFont-BoldOblique /Helvetica-BoldOblique reencodefont definefont pop
%%EndProlog
%%Page: 1 1
%%BeginPageSetup
gsave
0.0072 0.0072 scale
linemode1
82680 0 translate 90 rotate
150 setlinewidth
%%EndPageSetup
0 0 0 setrgbcolor
177.165 setlinewidth
84449.3 43702.8 3543.31 -90 -0 arc0
0 0 0 setrgbcolor
84449.3 72049.2 3543.31 -0 90 arc0
0 0 0 setrgbcolor
32480.7 72049.2 3543.31 90 180 arc0
0 0 0 setrgbcolor
32480.7 43702.8 3543.31 180 270 arc0
0 0 0 setrgbcolor
newpath
84449.3 40159.5 moveto
32480.7 40159.5 lineto
stroke
0 0 0 setrgbcolor
newpath
87992.6 72049.2 moveto
87992.6 43702.8 lineto
stroke
0 0 0 setrgbcolor
newpath
32480.7 75592.5 moveto
84449.3 75592.5 lineto
stroke
0 0 0 setrgbcolor
newpath
28937.4 43702.8 moveto
28937.4 72049.2 lineto
stroke
78.7394 setlinewidth
newpath
83622.5 44529.5 moveto
86457.1 41694.9 lineto
stroke
newpath
86457.1 44529.5 moveto
83622.5 41694.9 lineto
stroke
newpath
83622.5 74057.1 moveto
86457.1 71222.5 lineto
stroke
newpath
86457.1 74057.1 moveto
83622.5 71222.5 lineto
stroke
newpath
30472.9 74057.1 moveto
33307.5 71222.5 lineto
stroke
newpath
33307.5 74057.1 moveto
30472.9 71222.5 lineto
stroke
newpath
30472.9 44529.5 moveto
33307.5 41694.9 lineto
stroke
newpath
33307.5 44529.5 moveto
30472.9 41694.9 lineto
stroke
118.11 setlinewidth
0 0 0 setrgbcolor
0 0 0 setrgbcolor
newpath
29976.5 38237.4 moveto
29976.5 39418.5 lineto
30257.7 39418.5 lineto
30426.5 39362.2 lineto
30539 39249.7 lineto
30595.2 39137.2 lineto
30651.4 38912.3 lineto
30651.4 38743.5 lineto
30595.2 38518.6 lineto
30539 38406.1 lineto
30426.5 38293.6 lineto
30257.7 38237.4 lineto
29976.5 38237.4 lineto
stroke
newpath
31157.6 38237.4 moveto
31157.6 39024.8 lineto
stroke
newpath
31157.6 38799.8 moveto
31213.9 38912.3 lineto
31270.1 38968.5 lineto
31382.6 39024.8 lineto
31495.1 39024.8 lineto
stroke
newpath
31888.8 38237.4 moveto
31888.8 39024.8 lineto
stroke
newpath
31888.8 39418.5 moveto
31832.5 39362.2 lineto
31888.8 39306 lineto
31945 39362.2 lineto
31888.8 39418.5 lineto
31888.8 39306 lineto
stroke
newpath
32619.9 38237.4 moveto
32507.5 38293.6 lineto
32451.2 38406.1 lineto
32451.2 39418.5 lineto
stroke
newpath
33238.6 38237.4 moveto
33126.1 38293.6 lineto
33069.9 38406.1 lineto
33069.9 39418.5 lineto
stroke
newpath
34588.5 38237.4 moveto
34588.5 39418.5 lineto
34982.2 38574.8 lineto
35375.9 39418.5 lineto
35375.9 38237.4 lineto
stroke
newpath
36444.5 38237.4 moveto
36444.5 38856 lineto
36388.2 38968.5 lineto
36275.7 39024.8 lineto
36050.8 39024.8 lineto
35938.3 38968.5 lineto
stroke
newpath
36444.5 38293.6 moveto
36332 38237.4 lineto
36050.8 38237.4 lineto
35938.3 38293.6 lineto
35882 38406.1 lineto
35882 38518.6 lineto
35938.3 38631.1 lineto
36050.8 38687.3 lineto
36332 38687.3 lineto
36444.5 38743.5 lineto
stroke
newpath
37006.9 39024.8 moveto
37006.9 37843.7 lineto
stroke
newpath
37006.9 38968.5 moveto
37119.4 39024.8 lineto
37344.4 39024.8 lineto
37456.8 38968.5 lineto
37513.1 38912.3 lineto
37569.3 38799.8 lineto
37569.3 38462.3 lineto
37513.1 38349.8 lineto
37456.8 38293.6 lineto
37344.4 38237.4 lineto
37119.4 38237.4 lineto
37006.9 38293.6 lineto
stroke
newpath
38075.5 38349.8 moveto
38131.8 38293.6 lineto
38075.5 38237.4 lineto
38019.3 38293.6 lineto
38075.5 38349.8 lineto
38075.5 38237.4 lineto
stroke
newpath
38075.5 38968.5 moveto
38131.8 38912.3 lineto
38075.5 38856 lineto
38019.3 38912.3 lineto
38075.5 38968.5 lineto
38075.5 38856 lineto
stroke
newpath
26014.2 37708.7 moveto
28848.9 34874 lineto
stroke
newpath
28848.9 37708.7 moveto
26014.2 34874 lineto
stroke
0 0 0 setrgbcolor
0 0 0 setrgbcolor
newpath
29920.3 36825.7 moveto
29976.5 36881.9 lineto
30089 36938.1 lineto
30370.2 36938.1 lineto
30482.7 36881.9 lineto
30539 36825.7 lineto
30595.2 36713.2 lineto
30595.2 36600.7 lineto
30539 36432 lineto
29864 35757 lineto
30595.2 35757 lineto
stroke
newpath
31101.4 35869.5 moveto
31157.6 35813.3 lineto
31101.4 35757 lineto
31045.1 35813.3 lineto
31101.4 35869.5 lineto
31101.4 35757 lineto
stroke
newpath
32170 36544.4 moveto
32170 35757 lineto
stroke
newpath
31888.8 36994.4 moveto
31607.6 36150.7 lineto
32338.7 36150.7 lineto
stroke
newpath
33013.6 36938.1 moveto
33126.1 36938.1 lineto
33238.6 36881.9 lineto
33294.9 36825.7 lineto
33351.1 36713.2 lineto
33407.4 36488.2 lineto
33407.4 36207 lineto
33351.1 35982 lineto
33294.9 35869.5 lineto
33238.6 35813.3 lineto
33126.1 35757 lineto
33013.6 35757 lineto
32901.2 35813.3 lineto
32844.9 35869.5 lineto
32788.7 35982 lineto
32732.4 36207 lineto
32732.4 36488.2 lineto
32788.7 36713.2 lineto
32844.9 36825.7 lineto
32901.2 36881.9 lineto
33013.6 36938.1 lineto
stroke
newpath
33913.5 35757 moveto
33913.5 36544.4 lineto
stroke
newpath
33913.5 36432 moveto
33969.8 36488.2 lineto
34082.3 36544.4 lineto
34251 36544.4 lineto
34363.5 36488.2 lineto
34419.7 36375.7 lineto
34419.7 35757 lineto
stroke
newpath
34419.7 36375.7 moveto
34476 36488.2 lineto
34588.5 36544.4 lineto
34757.2 36544.4 lineto
34869.7 36488.2 lineto
34925.9 36375.7 lineto
34925.9 35757 lineto
stroke
newpath
35488.3 35757 moveto
35488.3 36544.4 lineto
stroke
newpath
35488.3 36432 moveto
35544.6 36488.2 lineto
35657.1 36544.4 lineto
35825.8 36544.4 lineto
35938.3 36488.2 lineto
35994.5 36375.7 lineto
35994.5 35757 lineto
stroke
newpath
35994.5 36375.7 moveto
36050.8 36488.2 lineto
36163.3 36544.4 lineto
36332 36544.4 lineto
36444.5 36488.2 lineto
36500.7 36375.7 lineto
36500.7 35757 lineto
stroke
newpath
38806.7 36994.4 moveto
37794.3 35475.8 lineto
stroke
newpath
40325.2 36938.1 moveto
40437.7 36938.1 lineto
40550.2 36881.9 lineto
40606.5 36825.7 lineto
40662.7 36713.2 lineto
40718.9 36488.2 lineto
40718.9 36207 lineto
40662.7 35982 lineto
40606.5 35869.5 lineto
40550.2 35813.3 lineto
40437.7 35757 lineto
40325.2 35757 lineto
40212.7 35813.3 lineto
40156.5 35869.5 lineto
40100.3 35982 lineto
40044 36207 lineto
40044 36488.2 lineto
40100.3 36713.2 lineto
40156.5 36825.7 lineto
40212.7 36881.9 lineto
40325.2 36938.1 lineto
stroke
newpath
41225.1 35869.5 moveto
41281.4 35813.3 lineto
41225.1 35757 lineto
41168.9 35813.3 lineto
41225.1 35869.5 lineto
41225.1 35757 lineto
stroke
newpath
42012.5 36938.1 moveto
42125 36938.1 lineto
42237.5 36881.9 lineto
42293.7 36825.7 lineto
42350 36713.2 lineto
42406.2 36488.2 lineto
42406.2 36207 lineto
42350 35982 lineto
42293.7 35869.5 lineto
42237.5 35813.3 lineto
42125 35757 lineto
42012.5 35757 lineto
41900 35813.3 lineto
41843.8 35869.5 lineto
41787.6 35982 lineto
41731.3 36207 lineto
41731.3 36488.2 lineto
41787.6 36713.2 lineto
41843.8 36825.7 lineto
41900 36881.9 lineto
42012.5 36938.1 lineto
stroke
newpath
42968.7 35757 moveto
43193.6 35757 lineto
43306.1 35813.3 lineto
43362.4 35869.5 lineto
43474.8 36038.3 lineto
43531.1 36263.2 lineto
43531.1 36713.2 lineto
43474.8 36825.7 lineto
43418.6 36881.9 lineto
43306.1 36938.1 lineto
43081.1 36938.1 lineto
42968.7 36881.9 lineto
42912.4 36825.7 lineto
42856.2 36713.2 lineto
42856.2 36432 lineto
42912.4 36319.5 lineto
42968.7 36263.2 lineto
43081.1 36207 lineto
43306.1 36207 lineto
43418.6 36263.2 lineto
43474.8 36319.5 lineto
43531.1 36432 lineto
stroke
newpath
44543.5 36544.4 moveto
44543.5 35757 lineto
stroke
newpath
44262.2 36994.4 moveto
43981 36150.7 lineto
44712.2 36150.7 lineto
stroke
newpath
45105.9 36938.1 moveto
45105.9 36713.2 lineto
stroke
newpath
45555.8 36938.1 moveto
45555.8 36713.2 lineto
stroke
newpath
47299.4 35307.1 moveto
47243.1 35363.3 lineto
47130.6 35532.1 lineto
47074.4 35644.6 lineto
47018.1 35813.3 lineto
46961.9 36094.5 lineto
46961.9 36319.5 lineto
47018.1 36600.7 lineto
47074.4 36769.4 lineto
47130.6 36881.9 lineto
47243.1 37050.6 lineto
47299.4 37106.9 lineto
stroke
newpath
48255.5 36544.4 moveto
48255.5 35757 lineto
stroke
newpath
47974.3 36994.4 moveto
47693.1 36150.7 lineto
48424.2 36150.7 lineto
stroke
newpath
49774.1 35757 moveto
49774.1 36938.1 lineto
stroke
newpath
50280.2 35757 moveto
50280.2 36375.7 lineto
50224 36488.2 lineto
50111.5 36544.4 lineto
49942.8 36544.4 lineto
49830.3 36488.2 lineto
49774.1 36432 lineto
stroke
newpath
51011.4 35757 moveto
50898.9 35813.3 lineto
50842.7 35869.5 lineto
50786.4 35982 lineto
50786.4 36319.5 lineto
50842.7 36432 lineto
50898.9 36488.2 lineto
51011.4 36544.4 lineto
51180.1 36544.4 lineto
51292.6 36488.2 lineto
51348.9 36432 lineto
51405.1 36319.5 lineto
51405.1 35982 lineto
51348.9 35869.5 lineto
51292.6 35813.3 lineto
51180.1 35757 lineto
51011.4 35757 lineto
stroke
newpath
52080 35757 moveto
51967.5 35813.3 lineto
51911.3 35925.8 lineto
51911.3 36938.1 lineto
stroke
newpath
52979.9 35813.3 moveto
52867.4 35757 lineto
52642.4 35757 lineto
52530 35813.3 lineto
52473.7 35925.8 lineto
52473.7 36375.7 lineto
52530 36488.2 lineto
52642.4 36544.4 lineto
52867.4 36544.4 lineto
52979.9 36488.2 lineto
53036.1 36375.7 lineto
53036.1 36263.2 lineto
52473.7 36150.7 lineto
stroke
newpath
53486.1 35813.3 moveto
53598.6 35757 lineto
53823.5 35757 lineto
53936 35813.3 lineto
53992.3 35925.8 lineto
53992.3 35982 lineto
53936 36094.5 lineto
53823.5 36150.7 lineto
53654.8 36150.7 lineto
53542.3 36207 lineto
53486.1 36319.5 lineto
53486.1 36375.7 lineto
53542.3 36488.2 lineto
53654.8 36544.4 lineto
53823.5 36544.4 lineto
53936 36488.2 lineto
stroke
newpath
54386 35307.1 moveto
54442.2 35363.3 lineto
54554.7 35532.1 lineto
54610.9 35644.6 lineto
54667.2 35813.3 lineto
54723.4 36094.5 lineto
54723.4 36319.5 lineto
54667.2 36600.7 lineto
54610.9 36769.4 lineto
54554.7 36881.9 lineto
54442.2 37050.6 lineto
54386 37106.9 lineto
stroke
newpath
56523.2 35307.1 moveto
56467 35363.3 lineto
56354.5 35532.1 lineto
56298.2 35644.6 lineto
56242 35813.3 lineto
56185.8 36094.5 lineto
56185.8 36319.5 lineto
56242 36600.7 lineto
56298.2 36769.4 lineto
56354.5 36881.9 lineto
56467 37050.6 lineto
56523.2 37106.9 lineto
stroke
newpath
56973.2 36544.4 moveto
56973.2 35757 lineto
stroke
newpath
56973.2 36432 moveto
57029.4 36488.2 lineto
57141.9 36544.4 lineto
57310.6 36544.4 lineto
57423.1 36488.2 lineto
57479.3 36375.7 lineto
57479.3 35757 lineto
stroke
newpath
58210.5 35757 moveto
58098 35813.3 lineto
58041.8 35869.5 lineto
57985.5 35982 lineto
57985.5 36319.5 lineto
58041.8 36432 lineto
58098 36488.2 lineto
58210.5 36544.4 lineto
58379.2 36544.4 lineto
58491.7 36488.2 lineto
58548 36432 lineto
58604.2 36319.5 lineto
58604.2 35982 lineto
58548 35869.5 lineto
58491.7 35813.3 lineto
58379.2 35757 lineto
58210.5 35757 lineto
stroke
newpath
58941.7 36544.4 moveto
59391.6 36544.4 lineto
stroke
newpath
59110.4 36938.1 moveto
59110.4 35925.8 lineto
59166.6 35813.3 lineto
59279.1 35757 lineto
59391.6 35757 lineto
stroke
newpath
60685.2 36544.4 moveto
60685.2 35363.3 lineto
stroke
newpath
60685.2 36488.2 moveto
60797.7 36544.4 lineto
61022.6 36544.4 lineto
61135.1 36488.2 lineto
61191.4 36432 lineto
61247.6 36319.5 lineto
61247.6 35982 lineto
61191.4 35869.5 lineto
61135.1 35813.3 lineto
61022.6 35757 lineto
60797.7 35757 lineto
60685.2 35813.3 lineto
stroke
newpath
61922.5 35757 moveto
61810 35813.3 lineto
61753.8 35925.8 lineto
61753.8 36938.1 lineto
stroke
newpath
62878.7 35757 moveto
62878.7 36375.7 lineto
62822.4 36488.2 lineto
62709.9 36544.4 lineto
62485 36544.4 lineto
62372.5 36488.2 lineto
stroke
newpath
62878.7 35813.3 moveto
62766.2 35757 lineto
62485 35757 lineto
62372.5 35813.3 lineto
62316.2 35925.8 lineto
62316.2 36038.3 lineto
62372.5 36150.7 lineto
62485 36207 lineto
62766.2 36207 lineto
62878.7 36263.2 lineto
stroke
newpath
63272.4 36544.4 moveto
63722.3 36544.4 lineto
stroke
newpath
63441.1 36938.1 moveto
63441.1 35925.8 lineto
63497.3 35813.3 lineto
63609.8 35757 lineto
63722.3 35757 lineto
stroke
newpath
64566 35813.3 moveto
64453.5 35757 lineto
64228.5 35757 lineto
64116 35813.3 lineto
64059.8 35925.8 lineto
64059.8 36375.7 lineto
64116 36488.2 lineto
64228.5 36544.4 lineto
64453.5 36544.4 lineto
64566 36488.2 lineto
64622.2 36375.7 lineto
64622.2 36263.2 lineto
64059.8 36150.7 lineto
stroke
newpath
65634.6 35757 moveto
65634.6 36938.1 lineto
stroke
newpath
65634.6 35813.3 moveto
65522.1 35757 lineto
65297.1 35757 lineto
65184.6 35813.3 lineto
65128.4 35869.5 lineto
65072.1 35982 lineto
65072.1 36319.5 lineto
65128.4 36432 lineto
65184.6 36488.2 lineto
65297.1 36544.4 lineto
65522.1 36544.4 lineto
65634.6 36488.2 lineto
stroke
newpath
66084.5 35307.1 moveto
66140.8 35363.3 lineto
66253.2 35532.1 lineto
66309.5 35644.6 lineto
66365.7 35813.3 lineto
66422 36094.5 lineto
66422 36319.5 lineto
66365.7 36600.7 lineto
66309.5 36769.4 lineto
66253.2 36881.9 lineto
66140.8 37050.6 lineto
66084.5 37106.9 lineto
stroke
showpage
grestore
%%EOF

View file

@ -1,19 +0,0 @@
M48
; DRILL file {KiCad 5.1.5+dfsg1-2build2} date Wed 18 Nov 2020 17:15:01 GMT
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2020-11-18T17:15:01+00:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,5.1.5+dfsg1-2build2
; #@! TF.FileFunction,NonPlated,1,4,NPTH
FMAT,2
INCH
T1C0.0945
%
G90
G05
T1
X9.7441Y-4.4291
X9.7441Y-3.4449
X7.9724Y-3.4449
X7.9724Y-4.4291
T0
M30

File diff suppressed because it is too large Load diff

View file

@ -1,196 +0,0 @@
M48
; DRILL file {KiCad 5.1.5+dfsg1-2build2} date Wed 18 Nov 2020 17:15:01 GMT
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2020-11-18T17:15:01+00:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,5.1.5+dfsg1-2build2
; #@! TF.FileFunction,Plated,1,4,PTH
FMAT,2
INCH
T1C0.0079
T2C0.0236
T3C0.0335
T4C0.0394
T5C0.0512
%
G90
G05
T1
X7.8937Y-3.4843
X7.8937Y-4.3898
X8.0118Y-3.3661
X8.0118Y-4.5079
X8.0815Y-4.0661
X8.0982Y-3.797
X8.1142Y-3.6083
X8.1144Y-3.8132
X8.1398Y-3.8268
X8.1693Y-3.8563
X8.2323Y-3.7539
X8.2323Y-3.8898
X8.2854Y-3.8248
X8.2854Y-3.8622
X8.315Y-3.5472
X8.3768Y-4.2969
X8.3878Y-3.7677
X8.3878Y-3.8543
X8.4114Y-3.5472
X8.4193Y-3.7677
X8.4193Y-3.8543
X8.4606Y-3.5807
X8.4764Y-4.2972
X8.5035Y-4.1555
X8.522Y-4.1937
X8.5291Y-4.1575
X8.5335Y-3.874
X8.5524Y-4.1398
X8.5677Y-4.1154
X8.5776Y-3.6555
X8.578Y-4.2957
X8.5866Y-3.8268
X8.598Y-4.1756
X8.6268Y-4.1201
X8.6697Y-4.3047
X8.6846Y-4.1795
X8.6969Y-3.9154
X8.7138Y-4.0791
X8.7169Y-4.1831
X8.7201Y-4.0465
X8.7244Y-3.8705
X8.7244Y-3.8933
X8.7433Y-4.1846
X8.748Y-3.8484
X8.7531Y-3.9894
X8.7535Y-3.9661
X8.785Y-3.9843
X8.785Y-4.0626
X8.785Y-4.126
X8.8248Y-3.8484
X8.8327Y-3.9291
X8.8835Y-3.9732
X8.8835Y-4.1366
X8.8937Y-3.7736
X8.8996Y-3.8307
X8.9213Y-3.8012
X8.935Y-4.1378
X8.9543Y-3.6445
X8.9783Y-3.8031
X8.9907Y-3.6275
X8.9941Y-3.8327
X9.0063Y-3.5953
X9.0098Y-3.8465
X9.0143Y-3.6274
X9.0315Y-3.8642
X9.0332Y-3.6131
X9.0487Y-3.5953
X9.0512Y-3.8917
X9.065Y-3.7598
X9.0669Y-3.9055
X9.0815Y-4.0071
X9.0906Y-3.685
X9.0945Y-3.8091
X9.1043Y-3.9449
X9.1043Y-3.9803
X9.1094Y-3.5197
X9.1142Y-3.7894
X9.1256Y-3.6713
X9.1339Y-4.0079
X9.1378Y-3.4898
X9.1437Y-3.6909
X9.1437Y-3.8386
X9.1516Y-4.065
X9.1589Y-4.1383
X9.1633Y-4.0922
X9.1638Y-3.7061
X9.1668Y-4.1155
X9.1909Y-3.7441
X9.2098Y-3.6539
X9.2106Y-3.8228
X9.2606Y-3.6957
X9.2618Y-3.9114
X9.2697Y-4.2047
X9.2717Y-3.611
X9.2972Y-4.376
X9.3228Y-4.0787
X9.3272Y-3.6579
X9.3425Y-3.5874
X9.3425Y-3.9587
X9.3626Y-3.9933
X9.3752Y-3.5555
X9.378Y-3.9665
X9.3803Y-3.6319
X9.3917Y-4.3839
X9.3976Y-4.2331
X9.4297Y-3.9886
X9.438Y-3.9213
X9.4386Y-3.6799
X9.4536Y-3.9874
X9.4596Y-4.0413
X9.4636Y-3.7106
X9.4636Y-3.7697
X9.4636Y-3.8287
X9.4636Y-3.8878
X9.4685Y-4.0059
X9.4724Y-4.3996
X9.4902Y-4.2244
X9.561Y-3.7106
X9.561Y-3.7697
X9.561Y-3.8287
X9.561Y-3.8878
X9.5669Y-4.0059
X9.7047Y-3.3661
X9.7047Y-4.5079
X9.8228Y-3.4843
X9.8228Y-4.3898
T3
X8.0399Y-3.7402
X8.0399Y-3.937
T4
X9.2026Y-3.4055
X9.3026Y-3.4055
X9.4026Y-3.4055
X9.5026Y-3.4055
X9.6026Y-3.4055
X8.149Y-4.254
X8.149Y-4.354
X8.249Y-4.254
X8.249Y-4.354
X8.349Y-4.254
X8.349Y-4.354
X8.449Y-4.254
X8.449Y-4.354
X8.549Y-4.254
X8.549Y-4.354
X8.649Y-4.254
X8.649Y-4.354
X8.855Y-4.36
X8.855Y-4.46
X9.0494Y-4.254
X9.0494Y-4.354
X9.1494Y-4.254
X9.1494Y-4.354
X9.2494Y-4.254
X9.2494Y-4.354
X9.3494Y-4.254
X9.3494Y-4.354
X9.4494Y-4.254
X9.4494Y-4.354
X9.5494Y-4.254
X9.5494Y-4.354
T5
X9.5472Y-3.5925
X9.5472Y-4.1634
X9.7402Y-3.5689
X9.7402Y-4.187
T2
G00X7.9198Y-3.7008
M15
G01X7.9473Y-3.7008
M16
G05
G00X7.9473Y-3.9764
M15
G01X7.9198Y-3.9764
M16
G05
T0
M30

View file

@ -1,183 +0,0 @@
M48
;DRILL file {KiCad 5.0.2-bee76a0~70~ubuntu18.04.1} date Tue 11 Aug 2020 13:49:40 BST
;FORMAT={-:-/ absolute / inch / decimal}
FMAT,2
INCH,TZ
T1C0.0079
T2C0.0118
T3C0.0236
T4C0.0335
T5C0.0394
T6C0.0512
T7C0.0945
%
G90
G05
T1
X7.9134Y-3.5433
X7.9134Y-4.7244
X8.0512Y-3.9173
X8.0709Y-3.3858
X8.0709Y-3.7008
X8.0709Y-4.8819
X8.3585Y-3.8169
X8.435Y-3.7874
X8.4764Y-4.7638
X8.498Y-3.5866
X8.498Y-3.7067
X8.5787Y-3.8189
X8.589Y-3.5843
X8.6339Y-3.9055
X8.6693Y-3.7874
X8.6732Y-4.0197
X8.7461Y-4.5984
X8.7795Y-3.6772
X8.7874Y-4.1083
X8.7953Y-3.8189
X8.8031Y-3.6772
X8.8425Y-4.5315
X8.85Y-4.66
X8.8661Y-4.0197
X8.878Y-3.7559
X8.878Y-3.8819
X8.9016Y-4.2598
X8.9016Y-4.3465
X8.903Y-4.315
X8.9134Y-3.6772
X8.9281Y-4.0138
X8.9291Y-4.3268
X8.9291Y-4.2638
X8.937Y-3.6772
X8.943Y-4.3459
X8.9488Y-4.1732
X8.9606Y-3.8189
X8.9792Y-4.3504
X8.9868Y-3.525
X9.0256Y-4.376
X9.0453Y-4.124
X9.0453Y-4.1437
X9.0551Y-4.0512
X9.0576Y-4.2403
X9.065Y-4.124
X9.065Y-4.1437
X9.0728Y-3.8583
X9.0748Y-3.9567
X9.0787Y-4.0276
X9.0827Y-4.2323
X9.0876Y-4.3039
X9.0984Y-3.4449
X9.111Y-4.3006
X9.1142Y-4.0512
X9.1309Y-4.3134
X9.1339Y-4.3583
X9.1394Y-4.1543
X9.1457Y-3.9567
X9.1563Y-4.3156
X9.1585Y-4.0305
X9.1598Y-4.1339
X9.1651Y-4.1905
X9.1774Y-4.3048
X9.1811Y-4.0079
X9.1831Y-4.2618
X9.1961Y-4.3366
X9.1961Y-4.2842
X9.2244Y-3.9823
X9.2425Y-4.4799
X9.2618Y-3.9429
X9.2728Y-4.2374
X9.2913Y-4.2608
X9.2913Y-4.3996
X9.3386Y-3.5531
X9.3406Y-4.2811
X9.3406Y-4.3996
X9.3512Y-4.1752
X9.3619Y-3.5292
X9.3895Y-4.2988
X9.3898Y-4.3996
X9.4409Y-4.1811
X9.4429Y-4.2717
X9.4508Y-3.9242
X9.4613Y-4.2886
X9.4646Y-3.9665
X9.4646Y-4.0256
X9.4646Y-4.0846
X9.4646Y-4.1437
X9.4803Y-4.6496
X9.5Y-4.5413
X9.5669Y-3.9665
X9.5669Y-4.0256
X9.5669Y-4.0846
X9.5669Y-4.1437
X9.5669Y-4.2618
X9.6457Y-3.3858
X9.6457Y-4.8819
X9.8031Y-3.5433
X9.8031Y-4.7244
T2
X7.9921Y-4.626
X8.0315Y-4.5866
X8.0945Y-4.1634
X8.0945Y-4.1969
X8.1673Y-4.1201
X8.248Y-4.0807
X8.248Y-4.189
X8.3681Y-4.1457
X8.4843Y-4.0787
X8.4843Y-4.189
X8.5354Y-4.1024
X8.5354Y-4.1614
X8.937Y-4.5906
X8.9685Y-4.6063
X8.99Y-4.71
T4
X8.0379Y-4.0354
X8.0379Y-4.2323
T5
X8.8553Y-4.7177
X8.8553Y-4.8177
X8.15Y-4.6
X8.15Y-4.7
X8.25Y-4.6
X8.25Y-4.7
X8.35Y-4.6
X8.35Y-4.7
X8.45Y-4.6
X8.45Y-4.7
X8.55Y-4.6
X8.55Y-4.7
X8.65Y-4.6
X8.65Y-4.7
X9.05Y-4.6
X9.05Y-4.7
X9.15Y-4.6
X9.15Y-4.7
X9.25Y-4.6
X9.25Y-4.7
X9.35Y-4.6
X9.35Y-4.7
X9.45Y-4.6
X9.45Y-4.7
X9.55Y-4.6
X9.55Y-4.7
X9.1669Y-3.4449
X9.2669Y-3.4449
X9.3669Y-3.4449
X9.4669Y-3.4449
X9.5669Y-3.4449
T6
X9.5472Y-3.8484
X9.5472Y-4.4193
X9.7402Y-3.8248
X9.7402Y-4.4429
T7
X7.9724Y-4.8228
X7.9724Y-3.4449
X9.7441Y-4.8228
X9.7441Y-3.4449
T3
X7.9178Y-3.9961G85X7.9454Y-3.9961
G05
X7.9454Y-4.2717G85X7.9178Y-4.2717
G05
T0
M30

Binary file not shown.

View file

@ -1,448 +0,0 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Connector_Generic_Conn_01x02
#
DEF Connector_Generic_Conn_01x02 J 0 40 Y N 1 F N
F0 "J" 0 100 50 H V C CNN
F1 "Connector_Generic_Conn_01x02" 0 -200 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_1x??_*
$ENDFPLIST
DRAW
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 50 50 -150 1 1 10 f
X Pin_1 1 -200 0 150 R 50 50 1 1 P
X Pin_2 2 -200 -100 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_01x05
#
DEF Connector_Generic_Conn_01x05 J 0 40 Y N 1 F N
F0 "J" 0 300 50 H V C CNN
F1 "Connector_Generic_Conn_01x05" 0 -300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_1x??_*
$ENDFPLIST
DRAW
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 250 50 -250 1 1 10 f
X Pin_1 1 -200 200 150 R 50 50 1 1 P
X Pin_2 2 -200 100 150 R 50 50 1 1 P
X Pin_3 3 -200 0 150 R 50 50 1 1 P
X Pin_4 4 -200 -100 150 R 50 50 1 1 P
X Pin_5 5 -200 -200 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_02x06_Odd_Even
#
DEF Connector_Generic_Conn_02x06_Odd_Even J 0 40 Y N 1 F N
F0 "J" 50 300 50 H V C CNN
F1 "Connector_Generic_Conn_02x06_Odd_Even" 50 -400 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_2x??_*
$ENDFPLIST
DRAW
S -50 -295 0 -305 1 1 6 N
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 250 150 -350 1 1 10 f
S 150 -295 100 -305 1 1 6 N
S 150 -195 100 -205 1 1 6 N
S 150 -95 100 -105 1 1 6 N
S 150 5 100 -5 1 1 6 N
S 150 105 100 95 1 1 6 N
S 150 205 100 195 1 1 6 N
X Pin_1 1 -200 200 150 R 50 50 1 1 P
X Pin_10 10 300 -200 150 L 50 50 1 1 P
X Pin_11 11 -200 -300 150 R 50 50 1 1 P
X Pin_12 12 300 -300 150 L 50 50 1 1 P
X Pin_2 2 300 200 150 L 50 50 1 1 P
X Pin_3 3 -200 100 150 R 50 50 1 1 P
X Pin_4 4 300 100 150 L 50 50 1 1 P
X Pin_5 5 -200 0 150 R 50 50 1 1 P
X Pin_6 6 300 0 150 L 50 50 1 1 P
X Pin_7 7 -200 -100 150 R 50 50 1 1 P
X Pin_8 8 300 -100 150 L 50 50 1 1 P
X Pin_9 9 -200 -200 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_HDMI_A
#
DEF Connector_HDMI_A J 0 20 Y Y 1 F N
F0 "J" -250 1050 50 H V C CNN
F1 "Connector_HDMI_A" 400 1050 50 H V C CNN
F2 "" 25 0 50 H I C CNN
F3 "" 25 0 50 H I C CNN
$FPLIST
HDMI*A*
$ENDFPLIST
DRAW
S -300 1000 400 -1000 0 1 10 f
P 2 0 0 25 320 650 320 710 N
P 6 0 0 25 0 650 0 710 0 680 75 680 75 710 75 650 N
P 7 0 0 25 105 710 170 710 180 700 180 660 170 650 105 650 105 680 N
P 7 0 1 0 100 350 150 350 200 250 200 -225 150 -325 100 -325 100 350 F
P 8 0 1 25 210 650 210 710 250 710 250 650 250 710 280 710 290 700 290 650 N
P 9 0 1 25 0 500 0 -500 150 -500 200 -400 300 -350 300 350 200 400 150 500 0 500 N
X D2+ 1 -400 800 100 R 50 50 1 1 P
X CK+ 10 -400 200 100 R 50 50 1 1 P
X CKS 11 100 -1100 100 U 50 50 1 1 W
X CK- 12 -400 100 100 R 50 50 1 1 P
X CEC 13 -400 -100 100 R 50 50 1 1 B
X UTILITY 14 -400 -600 100 R 50 50 1 1 P
X SCL 15 -400 -300 100 R 50 50 1 1 P
X SDA 16 -400 -400 100 R 50 50 1 1 B
X GND 17 200 -1100 100 U 50 50 1 1 W
X +5V 18 0 1100 100 D 50 50 1 1 W
X HPD 19 -400 -700 100 R 50 50 1 1 P
X D2S 2 -200 -1100 100 U 50 50 1 1 W
X D2- 3 -400 700 100 R 50 50 1 1 P
X D1+ 4 -400 600 100 R 50 50 1 1 P
X D1S 5 -100 -1100 100 U 50 50 1 1 W
X D1- 6 -400 500 100 R 50 50 1 1 P
X D0+ 7 -400 400 100 R 50 50 1 1 P
X D0S 8 0 -1100 100 U 50 50 1 1 W
X D0- 9 -400 300 100 R 50 50 1 1 P
X SH SH 300 -1100 100 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_USB_OTG
#
DEF Connector_USB_OTG J 0 40 Y Y 1 F N
F0 "J" -200 450 50 H V L CNN
F1 "Connector_USB_OTG" -200 350 50 H V L CNN
F2 "" 150 -50 50 H I C CNN
F3 "" 150 -50 50 H I C CNN
$FPLIST
USB*
$ENDFPLIST
DRAW
C -150 85 25 0 1 10 F
C -25 135 15 0 1 10 F
S -200 -300 200 300 0 1 10 f
S -5 -300 5 -270 0 1 0 N
S 10 50 -20 20 0 1 10 F
S 200 -205 170 -195 0 1 0 N
S 200 -105 170 -95 0 1 0 N
S 200 -5 170 5 0 1 0 N
S 200 195 170 205 0 1 0 N
P 2 0 1 10 -75 85 25 85 N
P 4 0 1 10 -125 85 -100 85 -50 135 -25 135 N
P 4 0 1 10 -100 85 -75 85 -50 35 0 35 N
P 4 0 1 10 25 110 25 60 75 85 25 110 F
P 5 0 1 0 -170 220 -70 220 -80 190 -160 190 -170 220 F
P 9 0 1 0 -185 230 -185 220 -175 190 -175 180 -65 180 -65 190 -55 220 -55 230 -185 230 N
X VBUS 1 300 200 100 L 50 50 1 1 W
X D- 2 300 -100 100 L 50 50 1 1 P
X D+ 3 300 0 100 L 50 50 1 1 P
X ID 4 300 -200 100 L 50 50 1 1 P
X GND 5 0 -400 100 U 50 50 1 1 W
X Shield 6 -100 -400 100 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_C
#
DEF Device_C C 0 10 N Y 1 F N
F0 "C" 25 100 50 H V L CNN
F1 "Device_C" 25 -100 50 H V L CNN
F2 "" 38 -150 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
C_*
$ENDFPLIST
DRAW
P 2 0 1 20 -80 -30 80 -30 N
P 2 0 1 20 -80 30 80 30 N
X ~ 1 0 150 110 D 50 50 1 1 P
X ~ 2 0 -150 110 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_Crystal_GND24
#
DEF Device_Crystal_GND24 Y 0 40 Y N 1 F N
F0 "Y" 125 200 50 H V L CNN
F1 "Device_Crystal_GND24" 125 125 50 H V L CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Crystal*
$ENDFPLIST
DRAW
S -45 100 45 -100 0 1 12 N
P 2 0 1 0 -100 0 -80 0 N
P 2 0 1 20 -80 -50 -80 50 N
P 2 0 1 0 0 -150 0 -140 N
P 2 0 1 0 0 140 0 150 N
P 2 0 1 20 80 -50 80 50 N
P 2 0 1 0 80 0 100 0 N
P 4 0 1 0 -100 -90 -100 -140 100 -140 100 -90 N
P 4 0 1 0 -100 90 -100 140 100 140 100 90 N
X 1 1 -150 0 50 R 50 50 1 1 P
X 2 2 0 200 50 D 50 50 1 1 P
X 3 3 150 0 50 L 50 50 1 1 P
X 4 4 0 -200 50 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_LED
#
DEF Device_LED D 0 40 N N 1 F N
F0 "D" 0 100 50 H V C CNN
F1 "Device_LED" 0 -100 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
LED*
LED_SMD:*
LED_THT:*
$ENDFPLIST
DRAW
P 2 0 1 8 -50 -50 -50 50 N
P 2 0 1 0 -50 0 50 0 N
P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N
P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N
P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N
X K 1 -150 0 100 R 50 50 1 1 P
X A 2 150 0 100 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_R
#
DEF Device_R R 0 0 N Y 1 F N
F0 "R" 80 0 50 V V C CNN
F1 "Device_R" 0 0 50 V V C CNN
F2 "" -70 0 50 V I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
R_*
$ENDFPLIST
DRAW
S -40 -100 40 100 0 1 10 N
X ~ 1 0 150 50 D 50 50 1 1 P
X ~ 2 0 -150 50 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Memory_Flash_AT25SF081-XMHD-X
#
DEF Memory_Flash_AT25SF081-XMHD-X U 0 20 Y Y 1 F N
F0 "U" 100 500 50 H V C CNN
F1 "Memory_Flash_AT25SF081-XMHD-X" 400 400 50 H V C CNN
F2 "Package_SO:TSSOP-8_4.4x3mm_P0.65mm" 0 -600 50 H I C CNN
F3 "" 0 0 50 H I C CNN
ALIAS AT25SF081-XMHF-X
$FPLIST
TSSOP?8*4.4x3mm*P0.65mm*
$ENDFPLIST
DRAW
S -450 350 450 -350 1 1 10 f
X ~CS 1 -600 0 150 R 50 50 1 1 I
X SO/IO1 2 600 200 150 L 50 50 1 1 B
X ~WP~/IO2 3 -600 -100 150 R 50 50 1 1 B
X GND 4 0 -500 150 U 50 50 1 1 W
X SI/IO0 5 -600 200 150 R 50 50 1 1 B
X SCK 6 -600 100 150 R 50 50 1 1 I
X ~HOLD~/IO3 7 -600 -200 150 R 50 50 1 1 B
X VCC 8 0 500 150 D 50 50 1 1 W
ENDDRAW
ENDDEF
#
# Switch_SW_Push
#
DEF Switch_SW_Push SW 0 40 N N 1 F N
F0 "SW" 50 100 50 H V L CNN
F1 "Switch_SW_Push" 0 -60 50 H V C CNN
F2 "" 0 200 50 H I C CNN
F3 "" 0 200 50 H I C CNN
DRAW
C -80 0 20 0 1 0 N
C 80 0 20 0 1 0 N
P 2 0 1 0 0 50 0 120 N
P 2 0 1 0 100 50 -100 50 N
X 1 1 -200 0 100 R 50 50 0 1 P
X 2 2 200 0 100 L 50 50 0 1 P
ENDDRAW
ENDDEF
#
# picodvi_NCP115ASN330
#
DEF picodvi_NCP115ASN330 U 0 40 Y Y 1 F N
F0 "U" 0 -400 50 H V C CNN
F1 "picodvi_NCP115ASN330" 0 300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
S -200 250 200 -350 0 1 0 f
X IN 1 -300 150 100 R 50 50 1 1 W
X GND 2 -300 -250 100 R 50 50 1 1 P
X EN 3 -300 50 100 R 50 50 1 1 I
X OUT 5 300 150 100 L 50 50 1 1 w
ENDDRAW
ENDDEF
#
# picodvi_Pico2040
#
DEF picodvi_Pico2040 U 0 40 Y Y 3 L N
F0 "U" 0 150 50 H V C CNN
F1 "picodvi_Pico2040" 0 50 50 H V C CNN
F2 "" 300 0 50 H I C CNN
F3 "" 300 0 50 H I C CNN
DRAW
S -300 0 300 -2400 1 1 0 f
S 300 0 -300 -3100 2 1 0 f
S 300 0 -300 -2100 3 1 0 f
X GND 0 400 -2300 100 L 50 50 1 1 P
X IOVDD 1 400 -800 100 L 50 50 1 1 W
X IOVDD 10 400 -900 100 L 50 50 1 1 W
X IOVDD 22 400 -1000 100 L 50 50 1 1 W
X DVDD 23 400 -1900 100 L 50 50 1 1 W
X IOVDD 33 400 -1100 100 L 50 50 1 1 W
X IOVDD 42 400 -1200 100 L 50 50 1 1 W
X ADC_IOVDD 43 400 -1600 100 L 50 50 1 1 W
X LDO_IOVDD 44 400 -100 100 L 50 50 1 1 W
X LDO_VOUT 45 400 -200 100 L 50 50 1 1 w
X USB_IOVDD 48 400 -500 100 L 50 50 1 1 W
X IOVDD 49 400 -1300 100 L 50 50 1 1 W
X DVDD 50 400 -2000 100 L 50 50 1 1 W
X GPIO8 11 400 -900 100 L 50 50 2 1 B
X GPIO9 12 400 -1000 100 L 50 50 2 1 B
X GPIO10 13 400 -1100 100 L 50 50 2 1 B
X GPIO11 14 400 -1200 100 L 50 50 2 1 B
X GPIO12 15 400 -1300 100 L 50 50 2 1 B
X GPIO13 16 400 -1400 100 L 50 50 2 1 B
X GPIO14 17 400 -1500 100 L 50 50 2 1 B
X GPIO15 18 400 -1600 100 L 50 50 2 1 B
X GPIO0 2 400 -100 100 L 50 50 2 1 B
X GPIO16 27 400 -1700 100 L 50 50 2 1 B
X GPIO17 28 400 -1800 100 L 50 50 2 1 B
X GPIO18 29 400 -1900 100 L 50 50 2 1 B
X GPIO1 3 400 -200 100 L 50 50 2 1 B
X GPIO19 30 400 -2000 100 L 50 50 2 1 B
X GPIO20 31 400 -2100 100 L 50 50 2 1 B
X GPIO21 32 400 -2200 100 L 50 50 2 1 B
X GPIO22 34 400 -2300 100 L 50 50 2 1 B
X GPIO23 35 400 -2400 100 L 50 50 2 1 B
X GPIO24 36 400 -2500 100 L 50 50 2 1 B
X GPIO25 37 400 -2600 100 L 50 50 2 1 B
X ADC0/GPIO26 38 400 -2700 100 L 50 50 2 1 B
X ADC1/GPIO27 39 400 -2800 100 L 50 50 2 1 B
X GPIO2 4 400 -300 100 L 50 50 2 1 B
X ADC2/GPIO28 40 400 -2900 100 L 50 50 2 1 B
X ADC3/GPIO29 41 400 -3000 100 L 50 50 2 1 B
X GPIO3 5 400 -400 100 L 50 50 2 1 B
X GPIO4 6 400 -500 100 L 50 50 2 1 B
X GPIO5 7 400 -600 100 L 50 50 2 1 B
X GPIO6 8 400 -700 100 L 50 50 2 1 B
X GPIO7 9 400 -800 100 L 50 50 2 1 B
X TESTEN 19 400 -800 100 L 50 50 3 1 I
X XIN 20 400 -1100 100 L 50 50 3 1 I
X XOUT 21 400 -1200 100 L 50 50 3 1 O
X SWCLK 24 400 -600 100 L 50 50 3 1 I
X SWDIO 25 400 -700 100 L 50 50 3 1 B
X RUN/~RST~ 26 400 -500 100 L 50 50 3 1 I
X USB_DM 46 400 -100 100 L 50 50 3 1 B
X USB_DP 47 400 -200 100 L 50 50 3 1 B
X QSPI_SD3 51 400 -2000 100 L 50 50 3 1 B
X QSPI_SCK 52 400 -1600 100 L 50 50 3 1 O
X QSPI_SD0 53 400 -1700 100 L 50 50 3 1 B
X QSPI_SD2 54 400 -1900 100 L 50 50 3 1 B
X QSPI_SD1 55 400 -1800 100 L 50 50 3 1 B
X ~QSPI_SS~ 56 400 -1500 100 L 50 50 3 1 B
ENDDRAW
ENDDEF
#
# power_+1V1
#
DEF power_+1V1 #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_+1V1" 0 140 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X +1V1 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# power_+3V3
#
DEF power_+3V3 #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_+3V3" 0 140 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
ALIAS +3.3V
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X +3V3 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# power_GND
#
DEF power_GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -250 50 H I C CNN
F1 "power_GND" 0 -150 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
X GND 1 0 0 0 D 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# power_PWR_FLAG
#
DEF power_PWR_FLAG #FLG 0 0 N N 1 F P
F0 "#FLG" 0 75 50 H I C CNN
F1 "power_PWR_FLAG" 0 150 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N
X pwr 1 0 0 0 U 50 50 0 0 w
ENDDRAW
ENDDEF
#
# power_VBUS
#
DEF power_VBUS #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_VBUS" 0 150 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X VBUS 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
#End Library

File diff suppressed because it is too large Load diff

View file

@ -1,3 +0,0 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

View file

@ -1,3 +0,0 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,261 +0,0 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# NCP115ASN330
#
DEF NCP115ASN330 U 0 40 Y Y 1 F N
F0 "U" 0 -400 50 H V C CNN
F1 "NCP115ASN330" 0 300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
S -200 250 200 -350 0 1 0 f
X IN 1 -300 150 100 R 50 50 1 1 W
X GND 2 -300 -250 100 R 50 50 1 1 P
X EN 3 -300 50 100 R 50 50 1 1 I
X OUT 5 300 150 100 L 50 50 1 1 w
ENDDRAW
ENDDEF
#
# Pico2040
#
DEF Pico2040 U 0 40 Y Y 3 L N
F0 "U" 0 150 50 H V C CNN
F1 "Pico2040" 0 50 50 H V C CNN
F2 "" 300 0 50 H I C CNN
F3 "" 300 0 50 H I C CNN
DRAW
S -300 0 300 -2400 1 1 0 f
S 300 0 -300 -3100 2 1 0 f
S 300 0 -300 -2100 3 1 0 f
X GND 0 400 -2300 100 L 50 50 1 1 P
X IOVDD 1 400 -800 100 L 50 50 1 1 W
X IOVDD 10 400 -900 100 L 50 50 1 1 W
X IOVDD 22 400 -1000 100 L 50 50 1 1 W
X DVDD 23 400 -1900 100 L 50 50 1 1 W
X IOVDD 33 400 -1100 100 L 50 50 1 1 W
X IOVDD 42 400 -1200 100 L 50 50 1 1 W
X ADC_IOVDD 43 400 -1600 100 L 50 50 1 1 W
X LDO_IOVDD 44 400 -100 100 L 50 50 1 1 W
X LDO_VOUT 45 400 -200 100 L 50 50 1 1 w
X USB_IOVDD 48 400 -500 100 L 50 50 1 1 W
X IOVDD 49 400 -1300 100 L 50 50 1 1 W
X DVDD 50 400 -2000 100 L 50 50 1 1 W
X GPIO8 11 400 -900 100 L 50 50 2 1 B
X GPIO9 12 400 -1000 100 L 50 50 2 1 B
X GPIO10 13 400 -1100 100 L 50 50 2 1 B
X GPIO11 14 400 -1200 100 L 50 50 2 1 B
X GPIO12 15 400 -1300 100 L 50 50 2 1 B
X GPIO13 16 400 -1400 100 L 50 50 2 1 B
X GPIO14 17 400 -1500 100 L 50 50 2 1 B
X GPIO15 18 400 -1600 100 L 50 50 2 1 B
X GPIO0 2 400 -100 100 L 50 50 2 1 B
X GPIO16 27 400 -1700 100 L 50 50 2 1 B
X GPIO17 28 400 -1800 100 L 50 50 2 1 B
X GPIO18 29 400 -1900 100 L 50 50 2 1 B
X GPIO1 3 400 -200 100 L 50 50 2 1 B
X GPIO19 30 400 -2000 100 L 50 50 2 1 B
X GPIO20 31 400 -2100 100 L 50 50 2 1 B
X GPIO21 32 400 -2200 100 L 50 50 2 1 B
X GPIO22 34 400 -2300 100 L 50 50 2 1 B
X GPIO23 35 400 -2400 100 L 50 50 2 1 B
X GPIO24 36 400 -2500 100 L 50 50 2 1 B
X GPIO25 37 400 -2600 100 L 50 50 2 1 B
X ADC0/GPIO26 38 400 -2700 100 L 50 50 2 1 B
X ADC1/GPIO27 39 400 -2800 100 L 50 50 2 1 B
X GPIO2 4 400 -300 100 L 50 50 2 1 B
X ADC2/GPIO28 40 400 -2900 100 L 50 50 2 1 B
X ADC3/GPIO29 41 400 -3000 100 L 50 50 2 1 B
X GPIO3 5 400 -400 100 L 50 50 2 1 B
X GPIO4 6 400 -500 100 L 50 50 2 1 B
X GPIO5 7 400 -600 100 L 50 50 2 1 B
X GPIO6 8 400 -700 100 L 50 50 2 1 B
X GPIO7 9 400 -800 100 L 50 50 2 1 B
X TESTEN 19 400 -800 100 L 50 50 3 1 I
X XIN 20 400 -1100 100 L 50 50 3 1 I
X XOUT 21 400 -1200 100 L 50 50 3 1 O
X SWCLK 24 400 -600 100 L 50 50 3 1 I
X SWDIO 25 400 -700 100 L 50 50 3 1 B
X RUN/~RST~ 26 400 -500 100 L 50 50 3 1 I
X USB_DM 46 400 -100 100 L 50 50 3 1 B
X USB_DP 47 400 -200 100 L 50 50 3 1 B
X QSPI_SD3 51 400 -2000 100 L 50 50 3 1 B
X QSPI_SCK 52 400 -1600 100 L 50 50 3 1 O
X QSPI_SD0 53 400 -1700 100 L 50 50 3 1 B
X QSPI_SD2 54 400 -1900 100 L 50 50 3 1 B
X QSPI_SD1 55 400 -1800 100 L 50 50 3 1 B
X ~QSPI_SS~ 56 400 -1500 100 L 50 50 3 1 B
ENDDRAW
ENDDEF
#
# RB1-125BAG1A
#
DEF RB1-125BAG1A J 0 40 Y Y 1 F N
F0 "J" 0 -950 50 H V C CNN
F1 "RB1-125BAG1A" 50 1200 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
A -250 250 50 -899 899 1 1 0 N -250 200 -250 300
A -250 350 50 -899 899 1 1 0 N -250 300 -250 400
A -250 450 50 -899 899 1 1 0 N -250 400 -250 500
A -250 700 50 -899 899 1 1 0 N -250 650 -250 750
A -250 800 50 -899 899 1 1 0 N -250 750 -250 850
A -250 900 50 -899 899 1 1 0 N -250 850 -250 950
A -50 250 50 901 -901 1 1 0 N -50 300 -50 200
A -50 350 50 901 -901 1 1 0 N -50 400 -50 300
A -50 450 50 901 -901 1 1 0 N -50 500 -50 400
A -50 700 50 901 -901 1 1 0 N -50 750 -50 650
A -50 800 50 901 -901 1 1 0 N -50 850 -50 750
A -50 900 50 901 -901 1 1 0 N -50 950 -50 850
A 350 250 50 1 1799 1 1 0 N 400 250 300 250
A 350 450 50 -1799 -1 1 1 0 N 300 450 400 450
A 350 700 50 1 1799 1 1 0 N 400 700 300 700
A 350 900 50 -1799 -1 1 1 0 N 300 900 400 900
A 450 250 50 1 1799 1 1 0 N 500 250 400 250
A 450 450 50 -1799 -1 1 1 0 N 400 450 500 450
A 450 700 50 1 1799 1 1 0 N 500 700 400 700
A 450 900 50 -1799 -1 1 1 0 N 400 900 500 900
A 550 250 50 1 1799 1 1 0 N 600 250 500 250
A 550 450 50 -1799 -1 1 1 0 N 500 450 600 450
A 550 700 50 1 1799 1 1 0 N 600 700 500 700
A 550 900 50 -1799 -1 1 1 0 N 500 900 600 900
C 350 265 10 0 1 0 F
C 350 430 10 0 1 0 F
C 350 715 10 0 1 0 F
C 350 880 10 0 1 0 F
C -235 450 10 1 1 0 F
C -235 900 10 1 1 0 F
C -70 450 10 1 1 0 F
C -70 900 10 1 1 0 F
T 0 -150 550 50 0 0 0 1:1 Normal 0 C C
T 0 -150 1000 50 0 0 0 1:1 Normal 0 C C
T 0 1400 1050 50 0 0 0 C1 Normal 0 C C
T 0 1400 900 50 0 0 0 C2 Normal 0 C C
T 0 1400 750 50 0 0 0 C3 Normal 0 C C
T 0 1400 600 50 0 0 0 C4 Normal 0 C C
T 0 1400 450 50 0 0 0 C5 Normal 0 C C
T 0 1400 300 50 0 0 0 C6 Normal 0 C C
T 0 1400 150 50 0 0 0 C7 Normal 0 C C
T 0 1400 0 50 0 0 0 C8 Normal 0 C C
S 1000 1075 1250 1025 0 0 0 N
S 1000 25 1250 -25 1 0 0 N
S 1000 175 1250 125 1 0 0 N
S 1000 325 1250 275 1 0 0 N
S 1000 475 1250 425 1 0 0 N
S 1000 625 1250 575 1 0 0 N
S 1000 775 1250 725 1 0 0 N
S 1000 925 1250 875 1 0 0 N
P 3 0 0 0 -50 200 300 200 300 250 N
P 3 0 0 0 -50 500 300 500 300 450 N
P 3 0 0 0 -50 650 300 650 300 700 N
P 3 0 0 0 300 900 300 950 -50 950 N
P 3 0 0 0 600 900 600 1050 1000 1050 N
P 5 0 0 0 600 700 600 650 700 650 700 900 1000 900 N
P 2 0 1 0 300 335 600 335 N
P 2 0 1 0 300 785 600 785 N
P 2 0 1 0 600 365 300 365 N
P 2 0 1 0 600 815 300 815 N
P 2 1 1 0 -165 500 -165 200 N
P 2 1 1 0 -165 950 -165 650 N
P 2 1 1 0 -135 200 -135 500 N
P 2 1 1 0 -135 650 -135 950 N
X foobar ~ -850 400 100 R 50 50 1 1 I
ENDDRAW
ENDDEF
#
# S70KS128
#
DEF S70KS128 U 0 40 Y Y 1 F N
F0 "U" 0 850 50 H V C CNN
F1 "S70KS128" 0 -850 50 H V C CNN
F2 "" -50 1350 50 H I C CNN
F3 "" -50 1350 50 H I C CNN
DRAW
S -250 800 250 -800 0 1 0 f
X ~CS~ A3 350 -400 100 L 50 50 1 1 I
X ~RST~ A4 350 -700 100 L 50 50 1 1 I
X ~CK~ B1 350 -200 100 L 50 50 1 1 I
X CK B2 350 -300 100 L 50 50 1 1 I
X VSS B3 -350 100 100 R 50 50 1 1 P
X VCC B4 -350 200 100 R 50 50 1 1 W
X VSSQ C1 -350 500 100 R 50 50 1 1 P
X RWDS C3 350 -500 100 L 50 50 1 1 B
X DQ2 C4 350 500 100 L 50 50 1 1 B
X VCCQ D1 -350 700 100 R 50 50 1 1 W
X DQ1 D2 350 600 100 L 50 50 1 1 B
X DQ0 D3 350 700 100 L 50 50 1 1 B
X DQ3 D4 350 400 100 L 50 50 1 1 B
X DQ4 D5 350 300 100 L 50 50 1 1 B
X DQ7 E1 350 0 100 L 50 50 1 1 B
X DQ6 E2 350 100 100 L 50 50 1 1 B
X DQ5 E3 350 200 100 L 50 50 1 1 B
X VCCQ E4 -350 600 100 R 50 50 1 1 W
X VSSQ E5 -350 400 100 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# iCE40UP5k-QFN48
#
DEF iCE40UP5k-QFN48 U 0 40 Y Y 3 L N
F0 "U" 0 150 50 H V C CNN
F1 "iCE40UP5k-QFN48" 0 50 50 H V C CNN
F2 "" 150 0 50 H I C CNN
F3 "" 150 0 50 H I C CNN
DRAW
S -350 0 350 -1900 1 1 0 f
S -350 0 350 -3300 2 1 0 f
S -350 0 350 -1400 3 1 0 f
X GND 0 450 -1800 100 L 50 50 1 1 P
X VCCIO_2 1 450 -900 100 L 50 50 1 1 W
X SPI_VCCIO1 22 450 -1200 100 L 50 50 1 1 W
X VPP_2V5 24 450 -1500 100 L 50 50 1 1 W
X VCCPLL 29 450 -500 100 L 50 50 1 1 W
X VCC 30 450 -200 100 L 50 50 1 1 W
X VCCIO_0 33 450 -800 100 L 50 50 1 1 W
X VCC 5 450 -100 100 L 50 50 1 1 W
X IOB_18A 10 450 -1100 100 L 50 50 2 1 B
X IOB_20A 11 450 -1200 100 L 50 50 2 1 B
X IOB_22A 12 450 -1300 100 L 50 50 2 1 B
X IOB_24A 13 450 -1500 100 L 50 50 2 1 B
X IOB_31B 18 450 -1800 100 L 50 50 2 1 B
X IOB_29B 19 450 -1700 100 L 50 50 2 1 B
X IOB_6A 2 450 -600 100 L 50 50 2 1 B
X GBIN3/IOB_25B 20 450 -1600 100 L 50 50 2 1 B
X IOB_23B 21 450 -1400 100 L 50 50 2 1 B
X IOT_37A 23 450 -2000 100 L 50 50 2 1 B
X IOT_36B 25 450 -1900 100 L 50 50 2 1 B
X IOT_39A 26 450 -2200 100 L 50 50 2 1 B
X IOT_38B 27 450 -2100 100 L 50 50 2 1 B
X IOT_41A 28 450 -2300 100 L 50 50 2 1 B
X IOB_9B 3 450 -800 100 L 50 50 2 1 B
X IOT_42B 31 450 -2400 100 L 50 50 2 1 B
X IOT_43A 32 450 -2500 100 L 50 50 2 1 B
X IOT_44B 34 450 -2600 100 L 50 50 2 1 B
X GBIN0/IOT_46B 35 450 -2800 100 L 50 50 2 1 B
X IOT_48B 36 450 -2900 100 L 50 50 2 1 B
X GBIN1/IOT_45A 37 450 -2700 100 L 50 50 2 1 B
X IOT_50B 38 450 -3100 100 L 50 50 2 1 B
X IOB_8A 4 450 -700 100 L 50 50 2 1 B
X IOT_51A 42 450 -3200 100 L 50 50 2 1 B
X IOT_49A 43 450 -3000 100 L 50 50 2 1 B
X GBIN6/IOB_3B 44 450 -300 100 L 50 50 2 1 B
X IOB_5B 45 450 -500 100 L 50 50 2 1 B
X IOB_0A 46 450 -100 100 L 50 50 2 1 B
X IOB_2A 47 450 -200 100 L 50 50 2 1 B
X IOB_4A 48 450 -400 100 L 50 50 2 1 B
X IOB_13B 6 450 -900 100 L 50 50 2 1 B
X IOB_16A 9 450 -1000 100 L 50 50 2 1 B
X SPI_SO/IOB_32A 14 450 -100 100 L 50 50 3 1 B
X SPI_SCK/IOB_34A 15 450 -300 100 L 50 50 3 1 B
X ~SPI_SS~/IOB_35B 16 450 -400 100 L 50 50 3 1 B
X SPI_SI/IOB_33B 17 450 -200 100 L 50 50 3 1 B
X RGB0 39 450 -1100 100 L 50 50 3 1 C
X RGB1 40 450 -1200 100 L 50 50 3 1 C
X RGB2 41 450 -1300 100 L 50 50 3 1 C
X CDONE 7 450 -800 100 L 50 50 3 1 B
X ~CRESET~ 8 450 -700 100 L 50 50 3 1 I
ENDDRAW
ENDDEF
#
#End Library

View file

@ -1,898 +0,0 @@
(export (version D)
(design
(source /home/luke/proj/picodvi/hardware/board/picodvi.sch)
(date "Mon 26 Oct 2020 10:07:44 GMT")
(tool "Eeschema 5.0.2-bee76a0~70~ubuntu18.04.1")
(sheet (number 1) (name /) (tstamps /)
(title_block
(title PicoDVI)
(company "Luke Wren")
(rev C)
(date 2020-06-23)
(source picodvi.sch)
(comment (number 1) (value "but it's worth a try"))
(comment (number 2) (value "This is utterly cursed and probably won't ever work"))
(comment (number 3) (value ""))
(comment (number 4) (value "")))))
(components
(comp (ref U1)
(value RP2040)
(footprint picodvi:QFN-56_EP_7x7_Pitch0.4mm)
(libsource (lib picodvi) (part Pico2040) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 5EF23DC4))
(comp (ref J5)
(value NOT_HDMI_A)
(footprint picodvi:HDMI-SS-53000)
(datasheet https://en.wikipedia.org/wiki/HDMI)
(libsource (lib Connector) (part HDMI_A) (description "HDMI type A connector"))
(sheetpath (names /) (tstamps /))
(tstamp 5EF2410D))
(comp (ref R10)
(value 270)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5EF2BAA5))
(comp (ref R9)
(value 2k2)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5EF2F0F1))
(comp (ref R8)
(value 2k2)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5EF2F17A))
(comp (ref R7)
(value 2k2)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5EF2F1B2))
(comp (ref C1)
(value 1u)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5EF85EA7))
(comp (ref C3)
(value 1u)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5EF8F783))
(comp (ref C5)
(value 100n)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5EF9936C))
(comp (ref C8)
(value 100n)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5EF9E20D))
(comp (ref C2)
(value 100n)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5EFB2270))
(comp (ref C4)
(value 100n)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5EFB75A2))
(comp (ref C6)
(value 100n)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5EFBC8B4))
(comp (ref C9)
(value 100n)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5EFC1D89))
(comp (ref J3)
(value 02x06)
(footprint picodvi:PinHeader_2x06_P2.54mm_Horizontal)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_02x06_Odd_Even) (description "Generic connector, double row, 02x06, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5EFDD539))
(comp (ref J4)
(value 02x06)
(footprint picodvi:PinHeader_2x06_P2.54mm_Horizontal)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_02x06_Odd_Even) (description "Generic connector, double row, 02x06, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5F01769D))
(comp (ref D1)
(value LED)
(footprint LED_SMD:LED_0805_2012Metric)
(datasheet ~)
(libsource (lib Device) (part LED) (description "Light emitting diode"))
(sheetpath (names /) (tstamps /))
(tstamp 5F036FA1))
(comp (ref R6)
(value 2k2)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F03718A))
(comp (ref U3)
(value W25Q16JV)
(footprint Package_SON:WSON-8-1EP_6x5mm_P1.27mm_EP3.4x4mm)
(datasheet https://www.adestotech.com/wp-content/uploads/DS-AT25SF081_045.pdf)
(libsource (lib Memory_Flash) (part AT25SF081-XMHD-X) (description "8-Mbit, 2.5V Minimum SPI Serial Flash Memory with Dual-I/O and Quad-I/O Support, TSSOP-8"))
(sheetpath (names /) (tstamps /))
(tstamp 5F05DB86))
(comp (ref C23)
(value 1u)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5F07D783))
(comp (ref C22)
(value 1u)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5F085797))
(comp (ref R2)
(value DNF)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F0B8FA6))
(comp (ref R3)
(value 2k2)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F0C205A))
(comp (ref SW2)
(value SW_Push)
(footprint picodvi:SW_SPST_PTS815)
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins"))
(sheetpath (names /) (tstamps /))
(tstamp 5F0DD816))
(comp (ref SW1)
(value SW_Push)
(footprint picodvi:SW_SPST_PTS815)
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins"))
(sheetpath (names /) (tstamps /))
(tstamp 5F11DFDA))
(comp (ref R1)
(value 2k2)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F12763B))
(comp (ref J1)
(value USB_OTG)
(footprint Connector_USB:USB_Micro-B_Molex-105017-0001)
(datasheet " ~")
(libsource (lib Connector) (part USB_OTG) (description "USB mini/micro connector"))
(sheetpath (names /) (tstamps /))
(tstamp 5F160F7D))
(comp (ref U2)
(value NCP115ASN330)
(footprint Package_TO_SOT_SMD:SOT-23-5_HandSoldering)
(libsource (lib picodvi) (part NCP115ASN330) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 5F1F64C4))
(comp (ref C7)
(value 1u)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5F21A4DD))
(comp (ref C11)
(value 1u)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5F24BA17))
(comp (ref R4)
(value 27R)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F27F8D3))
(comp (ref R5)
(value 27R)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F27FA34))
(comp (ref C10)
(value 10p)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5F2EB612))
(comp (ref C12)
(value 10p)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5F2EB690))
(comp (ref C13)
(value 100n)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5F3CBFD7))
(comp (ref Y1)
(value "12 M")
(footprint Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm)
(datasheet ~)
(libsource (lib Device) (part Crystal_GND24) (description "Four pin crystal, GND on pins 2 and 4"))
(sheetpath (names /) (tstamps /))
(tstamp 5F45A2E8))
(comp (ref D2)
(value LED)
(footprint LED_SMD:LED_0805_2012Metric)
(datasheet ~)
(libsource (lib Device) (part LED) (description "Light emitting diode"))
(sheetpath (names /) (tstamps /))
(tstamp 5F5E7A29))
(comp (ref R11)
(value 2k2)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F5E7A30))
(comp (ref J6)
(value Conn_01x02)
(footprint Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_01x02) (description "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5F64B0C8))
(comp (ref C24)
(value 1u)
(footprint Capacitor_SMD:C_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 5F69E395))
(comp (ref R12)
(value 270)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F1310B8))
(comp (ref R16)
(value 270)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F1313D8))
(comp (ref R13)
(value 270)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F1983ED))
(comp (ref R17)
(value 270)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F1983F4))
(comp (ref R14)
(value 270)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F1A9577))
(comp (ref R18)
(value 270)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F1A957E))
(comp (ref R15)
(value 270)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F1BA711))
(comp (ref R19)
(value 270)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F1BA718))
(comp (ref J2)
(value Conn_01x05)
(footprint picodvi:PinHeader_1x05_P2.54mm_Vertical)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_01x05) (description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5F1796A1))
(comp (ref SW3)
(value SW_Push)
(footprint picodvi:SW_SPST_PTS815)
(libsource (lib Switch) (part SW_Push) (description "Push button switch, generic, two pins"))
(sheetpath (names /) (tstamps /))
(tstamp 5F2CC5B5))
(comp (ref R20)
(value 2k2)
(footprint Resistor_SMD:R_0402_1005Metric)
(datasheet ~)
(libsource (lib Device) (part R) (description Resistor))
(sheetpath (names /) (tstamps /))
(tstamp 5F2DE7E9)))
(libparts
(libpart (lib Connector) (part HDMI_A)
(description "HDMI type A connector")
(docs https://en.wikipedia.org/wiki/HDMI)
(footprints
(fp HDMI*A*))
(fields
(field (name Reference) J)
(field (name Value) HDMI_A))
(pins
(pin (num 1) (name D2+) (type passive))
(pin (num 2) (name D2S) (type power_in))
(pin (num 3) (name D2-) (type passive))
(pin (num 4) (name D1+) (type passive))
(pin (num 5) (name D1S) (type power_in))
(pin (num 6) (name D1-) (type passive))
(pin (num 7) (name D0+) (type passive))
(pin (num 8) (name D0S) (type power_in))
(pin (num 9) (name D0-) (type passive))
(pin (num 10) (name CK+) (type passive))
(pin (num 11) (name CKS) (type power_in))
(pin (num 12) (name CK-) (type passive))
(pin (num 13) (name CEC) (type BiDi))
(pin (num 14) (name UTILITY) (type passive))
(pin (num 15) (name SCL) (type passive))
(pin (num 16) (name SDA) (type BiDi))
(pin (num 17) (name GND) (type power_in))
(pin (num 18) (name +5V) (type power_in))
(pin (num 19) (name HPD) (type passive))
(pin (num SH) (name SH) (type passive))))
(libpart (lib Connector) (part USB_OTG)
(description "USB mini/micro connector")
(docs " ~")
(footprints
(fp USB*))
(fields
(field (name Reference) J)
(field (name Value) USB_OTG))
(pins
(pin (num 1) (name VBUS) (type power_in))
(pin (num 2) (name D-) (type passive))
(pin (num 3) (name D+) (type passive))
(pin (num 4) (name ID) (type passive))
(pin (num 5) (name GND) (type power_in))
(pin (num 6) (name Shield) (type passive))))
(libpart (lib Connector_Generic) (part Conn_01x02)
(description "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp Connector*:*_1x??_*))
(fields
(field (name Reference) J)
(field (name Value) Conn_01x02))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))))
(libpart (lib Connector_Generic) (part Conn_01x05)
(description "Generic connector, single row, 01x05, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp Connector*:*_1x??_*))
(fields
(field (name Reference) J)
(field (name Value) Conn_01x05))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))
(pin (num 5) (name Pin_5) (type passive))))
(libpart (lib Connector_Generic) (part Conn_02x06_Odd_Even)
(description "Generic connector, double row, 02x06, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp Connector*:*_2x??_*))
(fields
(field (name Reference) J)
(field (name Value) Conn_02x06_Odd_Even))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))
(pin (num 5) (name Pin_5) (type passive))
(pin (num 6) (name Pin_6) (type passive))
(pin (num 7) (name Pin_7) (type passive))
(pin (num 8) (name Pin_8) (type passive))
(pin (num 9) (name Pin_9) (type passive))
(pin (num 10) (name Pin_10) (type passive))
(pin (num 11) (name Pin_11) (type passive))
(pin (num 12) (name Pin_12) (type passive))))
(libpart (lib Device) (part C)
(description "Unpolarized capacitor")
(docs ~)
(footprints
(fp C_*))
(fields
(field (name Reference) C)
(field (name Value) C))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib Device) (part Crystal_GND24)
(description "Four pin crystal, GND on pins 2 and 4")
(docs ~)
(footprints
(fp Crystal*))
(fields
(field (name Reference) Y)
(field (name Value) Crystal_GND24))
(pins
(pin (num 1) (name 1) (type passive))
(pin (num 2) (name 2) (type passive))
(pin (num 3) (name 3) (type passive))
(pin (num 4) (name 4) (type passive))))
(libpart (lib Device) (part LED)
(description "Light emitting diode")
(docs ~)
(footprints
(fp LED*)
(fp LED_SMD:*)
(fp LED_THT:*))
(fields
(field (name Reference) D)
(field (name Value) LED))
(pins
(pin (num 1) (name K) (type passive))
(pin (num 2) (name A) (type passive))))
(libpart (lib Device) (part R)
(description Resistor)
(docs ~)
(footprints
(fp R_*))
(fields
(field (name Reference) R)
(field (name Value) R))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib Memory_Flash) (part AT25SF081-XMHD-X)
(aliases
(alias AT25SF081-XMHF-X))
(description "8-Mbit, 2.5V Minimum SPI Serial Flash Memory with Dual-I/O and Quad-I/O Support, TSSOP-8")
(docs https://www.adestotech.com/wp-content/uploads/DS-AT25SF081_045.pdf)
(footprints
(fp TSSOP?8*4.4x3mm*P0.65mm*))
(fields
(field (name Reference) U)
(field (name Value) AT25SF081-XMHD-X)
(field (name Footprint) Package_SO:TSSOP-8_4.4x3mm_P0.65mm))
(pins
(pin (num 1) (name ~CS) (type input))
(pin (num 2) (name SO/IO1) (type BiDi))
(pin (num 3) (name ~WP~/IO2) (type BiDi))
(pin (num 4) (name GND) (type power_in))
(pin (num 5) (name SI/IO0) (type BiDi))
(pin (num 6) (name SCK) (type input))
(pin (num 7) (name ~HOLD~/IO3) (type BiDi))
(pin (num 8) (name VCC) (type power_in))))
(libpart (lib Switch) (part SW_Push)
(description "Push button switch, generic, two pins")
(fields
(field (name Reference) SW)
(field (name Value) SW_Push))
(pins
(pin (num 1) (name 1) (type passive))
(pin (num 2) (name 2) (type passive))))
(libpart (lib picodvi) (part NCP115ASN330)
(fields
(field (name Reference) U)
(field (name Value) NCP115ASN330))
(pins
(pin (num 1) (name IN) (type power_in))
(pin (num 2) (name GND) (type passive))
(pin (num 3) (name EN) (type input))
(pin (num 5) (name OUT) (type power_out))))
(libpart (lib picodvi) (part Pico2040)
(fields
(field (name Reference) U)
(field (name Value) Pico2040))
(pins
(pin (num 0) (name GND) (type passive))
(pin (num 1) (name IOVDD) (type power_in))
(pin (num 2) (name GPIO0) (type BiDi))
(pin (num 3) (name GPIO1) (type BiDi))
(pin (num 4) (name GPIO2) (type BiDi))
(pin (num 5) (name GPIO3) (type BiDi))
(pin (num 6) (name GPIO4) (type BiDi))
(pin (num 7) (name GPIO5) (type BiDi))
(pin (num 8) (name GPIO6) (type BiDi))
(pin (num 9) (name GPIO7) (type BiDi))
(pin (num 10) (name IOVDD) (type power_in))
(pin (num 11) (name GPIO8) (type BiDi))
(pin (num 12) (name GPIO9) (type BiDi))
(pin (num 13) (name GPIO10) (type BiDi))
(pin (num 14) (name GPIO11) (type BiDi))
(pin (num 15) (name GPIO12) (type BiDi))
(pin (num 16) (name GPIO13) (type BiDi))
(pin (num 17) (name GPIO14) (type BiDi))
(pin (num 18) (name GPIO15) (type BiDi))
(pin (num 19) (name TESTEN) (type input))
(pin (num 20) (name XIN) (type input))
(pin (num 21) (name XOUT) (type output))
(pin (num 22) (name IOVDD) (type power_in))
(pin (num 23) (name DVDD) (type power_in))
(pin (num 24) (name SWCLK) (type input))
(pin (num 25) (name SWDIO) (type BiDi))
(pin (num 26) (name RUN/~RST~) (type input))
(pin (num 27) (name GPIO16) (type BiDi))
(pin (num 28) (name GPIO17) (type BiDi))
(pin (num 29) (name GPIO18) (type BiDi))
(pin (num 30) (name GPIO19) (type BiDi))
(pin (num 31) (name GPIO20) (type BiDi))
(pin (num 32) (name GPIO21) (type BiDi))
(pin (num 33) (name IOVDD) (type power_in))
(pin (num 34) (name GPIO22) (type BiDi))
(pin (num 35) (name GPIO23) (type BiDi))
(pin (num 36) (name GPIO24) (type BiDi))
(pin (num 37) (name GPIO25) (type BiDi))
(pin (num 38) (name ADC0/GPIO26) (type BiDi))
(pin (num 39) (name ADC1/GPIO27) (type BiDi))
(pin (num 40) (name ADC2/GPIO28) (type BiDi))
(pin (num 41) (name ADC3/GPIO29) (type BiDi))
(pin (num 42) (name IOVDD) (type power_in))
(pin (num 43) (name ADC_IOVDD) (type power_in))
(pin (num 44) (name LDO_IOVDD) (type power_in))
(pin (num 45) (name LDO_VOUT) (type power_out))
(pin (num 46) (name USB_DM) (type BiDi))
(pin (num 47) (name USB_DP) (type BiDi))
(pin (num 48) (name USB_IOVDD) (type power_in))
(pin (num 49) (name IOVDD) (type power_in))
(pin (num 50) (name DVDD) (type power_in))
(pin (num 51) (name QSPI_SD3) (type BiDi))
(pin (num 52) (name QSPI_SCK) (type output))
(pin (num 53) (name QSPI_SD0) (type BiDi))
(pin (num 54) (name QSPI_SD2) (type BiDi))
(pin (num 55) (name QSPI_SD1) (type BiDi))
(pin (num 56) (name ~QSPI_SS~) (type BiDi)))))
(libraries
(library (logical Connector)
(uri /usr/share/kicad/library/Connector.lib))
(library (logical Connector_Generic)
(uri /usr/share/kicad/library/Connector_Generic.lib))
(library (logical Device)
(uri /usr/share/kicad/library/Device.lib))
(library (logical Memory_Flash)
(uri /usr/share/kicad/library/Memory_Flash.lib))
(library (logical Switch)
(uri /usr/share/kicad/library/Switch.lib))
(library (logical picodvi)
(uri /home/luke/proj/picodvi/hardware/board/picodvi.lib)))
(nets
(net (code 1) (name /USB_D-)
(node (ref R4) (pin 1))
(node (ref J1) (pin 2)))
(net (code 2) (name /USB_D+)
(node (ref J1) (pin 3))
(node (ref R5) (pin 1)))
(net (code 3) (name "Net-(J1-Pad4)")
(node (ref J1) (pin 4)))
(net (code 4) (name VBUS)
(node (ref U2) (pin 1))
(node (ref R8) (pin 1))
(node (ref C7) (pin 1))
(node (ref J5) (pin 18))
(node (ref J6) (pin 1))
(node (ref R9) (pin 1))
(node (ref U2) (pin 3))
(node (ref C24) (pin 1))
(node (ref J1) (pin 1)))
(net (code 5) (name +3V3)
(node (ref C13) (pin 1))
(node (ref R2) (pin 1))
(node (ref U3) (pin 8))
(node (ref C23) (pin 1))
(node (ref C22) (pin 1))
(node (ref R11) (pin 1))
(node (ref J4) (pin 11))
(node (ref J3) (pin 11))
(node (ref J3) (pin 12))
(node (ref C2) (pin 1))
(node (ref C4) (pin 1))
(node (ref C6) (pin 1))
(node (ref J4) (pin 12))
(node (ref C1) (pin 1))
(node (ref R7) (pin 1))
(node (ref U1) (pin 49))
(node (ref U1) (pin 1))
(node (ref U1) (pin 10))
(node (ref U1) (pin 22))
(node (ref U1) (pin 33))
(node (ref U1) (pin 42))
(node (ref U1) (pin 43))
(node (ref U1) (pin 44))
(node (ref U1) (pin 48))
(node (ref C9) (pin 1))
(node (ref C11) (pin 1))
(node (ref U2) (pin 5))
(node (ref R1) (pin 1)))
(net (code 6) (name "Net-(R3-Pad2)")
(node (ref R3) (pin 2))
(node (ref SW2) (pin 2)))
(net (code 7) (name /RUN_~RST~)
(node (ref U1) (pin 26))
(node (ref SW1) (pin 2))
(node (ref R1) (pin 2)))
(net (code 8) (name /SWDIO)
(node (ref J2) (pin 3))
(node (ref U1) (pin 25)))
(net (code 9) (name /SWCLK)
(node (ref J2) (pin 4))
(node (ref U1) (pin 24)))
(net (code 10) (name /PMOD1_6)
(node (ref U1) (pin 40))
(node (ref J3) (pin 6)))
(net (code 11) (name /PMOD1_5)
(node (ref J3) (pin 4))
(node (ref U1) (pin 39)))
(net (code 12) (name /PMOD1_4)
(node (ref U1) (pin 38))
(node (ref J3) (pin 2)))
(net (code 13) (name /PMOD1_0)
(node (ref U1) (pin 34))
(node (ref J3) (pin 1)))
(net (code 14) (name /PMOD1_1)
(node (ref J3) (pin 3))
(node (ref U1) (pin 35)))
(net (code 15) (name /PMOD1_2)
(node (ref J3) (pin 5))
(node (ref U1) (pin 36)))
(net (code 16) (name /PMOD1_3)
(node (ref U1) (pin 37))
(node (ref J3) (pin 7)))
(net (code 17) (name /PMOD1_7)
(node (ref J3) (pin 8))
(node (ref U1) (pin 41)))
(net (code 18) (name "Net-(D1-Pad2)")
(node (ref R6) (pin 2))
(node (ref D1) (pin 2)))
(net (code 19) (name /USER_LED_BUTTON)
(node (ref R20) (pin 1))
(node (ref R6) (pin 1))
(node (ref U1) (pin 32)))
(net (code 20) (name /PMOD0_7)
(node (ref J4) (pin 8))
(node (ref U1) (pin 9)))
(net (code 21) (name /FLASH_SD1)
(node (ref U3) (pin 2))
(node (ref U1) (pin 55)))
(net (code 22) (name /FLASH_SCK)
(node (ref U3) (pin 6))
(node (ref U1) (pin 52)))
(net (code 23) (name /FLASH_SD0)
(node (ref U1) (pin 53))
(node (ref U3) (pin 5)))
(net (code 24) (name /FLASH_SD2)
(node (ref U1) (pin 54))
(node (ref U3) (pin 3)))
(net (code 25) (name /FLASH_SD3)
(node (ref U1) (pin 51))
(node (ref U3) (pin 7)))
(net (code 26) (name /FLASH_~CS~)
(node (ref U3) (pin 1))
(node (ref R3) (pin 1))
(node (ref U1) (pin 56))
(node (ref R2) (pin 2)))
(net (code 27) (name /UART_RX)
(node (ref U1) (pin 28))
(node (ref J2) (pin 1)))
(net (code 28) (name /uC_DVI_CEC)
(node (ref R10) (pin 2))
(node (ref R7) (pin 2))
(node (ref U1) (pin 31)))
(net (code 29) (name /uC_DVI_CK-)
(node (ref R19) (pin 2))
(node (ref U1) (pin 11)))
(net (code 30) (name "Net-(R20-Pad2)")
(node (ref SW3) (pin 2))
(node (ref R20) (pin 2)))
(net (code 31) (name /uC_DVI_CK+)
(node (ref U1) (pin 12))
(node (ref R15) (pin 2)))
(net (code 32) (name /uC_DVI_D0-)
(node (ref U1) (pin 13))
(node (ref R18) (pin 2)))
(net (code 33) (name /uC_DVI_D0+)
(node (ref R14) (pin 2))
(node (ref U1) (pin 14)))
(net (code 34) (name /uC_DVI_D1-)
(node (ref R17) (pin 2))
(node (ref U1) (pin 15)))
(net (code 35) (name /uC_DVI_D1+)
(node (ref R13) (pin 2))
(node (ref U1) (pin 16)))
(net (code 36) (name /uC_DVI_D2-)
(node (ref U1) (pin 17))
(node (ref R16) (pin 2)))
(net (code 37) (name /uC_DVI_D2+)
(node (ref U1) (pin 18))
(node (ref R12) (pin 2)))
(net (code 38) (name /XOUT)
(node (ref Y1) (pin 1))
(node (ref C10) (pin 1))
(node (ref U1) (pin 21)))
(net (code 39) (name /XIN)
(node (ref U1) (pin 20))
(node (ref C12) (pin 1))
(node (ref Y1) (pin 3)))
(net (code 40) (name /USB_DX-)
(node (ref U1) (pin 46))
(node (ref R4) (pin 2)))
(net (code 41) (name /USB_DX+)
(node (ref U1) (pin 47))
(node (ref R5) (pin 2)))
(net (code 42) (name +1V1)
(node (ref C5) (pin 1))
(node (ref C8) (pin 1))
(node (ref U1) (pin 23))
(node (ref U1) (pin 45))
(node (ref U1) (pin 50))
(node (ref C3) (pin 1)))
(net (code 43) (name "Net-(D2-Pad2)")
(node (ref R11) (pin 2))
(node (ref D2) (pin 2)))
(net (code 44) (name GND)
(node (ref C6) (pin 2))
(node (ref J2) (pin 5))
(node (ref J3) (pin 10))
(node (ref SW1) (pin 1))
(node (ref C2) (pin 2))
(node (ref SW3) (pin 1))
(node (ref J6) (pin 2))
(node (ref C24) (pin 2))
(node (ref C9) (pin 2))
(node (ref J4) (pin 10))
(node (ref C12) (pin 2))
(node (ref C23) (pin 2))
(node (ref C1) (pin 2))
(node (ref J3) (pin 9))
(node (ref C22) (pin 2))
(node (ref C13) (pin 2))
(node (ref C4) (pin 2))
(node (ref SW2) (pin 1))
(node (ref U3) (pin 4))
(node (ref D2) (pin 1))
(node (ref J4) (pin 9))
(node (ref J1) (pin 6))
(node (ref C8) (pin 2))
(node (ref D1) (pin 1))
(node (ref C5) (pin 2))
(node (ref U1) (pin 19))
(node (ref U2) (pin 2))
(node (ref J5) (pin 17))
(node (ref C7) (pin 2))
(node (ref J5) (pin 2))
(node (ref J1) (pin 5))
(node (ref C10) (pin 2))
(node (ref J5) (pin 5))
(node (ref J5) (pin 8))
(node (ref J5) (pin SH))
(node (ref C3) (pin 2))
(node (ref U1) (pin 0))
(node (ref Y1) (pin 4))
(node (ref Y1) (pin 2))
(node (ref J5) (pin 11))
(node (ref C11) (pin 2)))
(net (code 45) (name "Net-(J5-Pad14)")
(node (ref J5) (pin 14)))
(net (code 46) (name "Net-(J5-Pad19)")
(node (ref J5) (pin 19)))
(net (code 47) (name "Net-(J5-Pad13)")
(node (ref R10) (pin 1))
(node (ref J5) (pin 13)))
(net (code 48) (name /DVI_CK-)
(node (ref R19) (pin 1))
(node (ref J5) (pin 12)))
(net (code 49) (name /DVI_D1+)
(node (ref R13) (pin 1))
(node (ref J5) (pin 4)))
(net (code 50) (name /DVI_D1-)
(node (ref J5) (pin 6))
(node (ref R17) (pin 1)))
(net (code 51) (name /DVI_D0+)
(node (ref J5) (pin 7))
(node (ref R14) (pin 1)))
(net (code 52) (name /DVI_D0-)
(node (ref J5) (pin 9))
(node (ref R18) (pin 1)))
(net (code 53) (name /DVI_CK+)
(node (ref J5) (pin 10))
(node (ref R15) (pin 1)))
(net (code 54) (name /uC_DVI_SDA)
(node (ref U1) (pin 29))
(node (ref J5) (pin 16))
(node (ref R9) (pin 2)))
(net (code 55) (name /uC_DVI_SCL)
(node (ref J5) (pin 15))
(node (ref U1) (pin 30))
(node (ref R8) (pin 2)))
(net (code 56) (name /DVI_D2-)
(node (ref J5) (pin 3))
(node (ref R16) (pin 1)))
(net (code 57) (name /UART_TX)
(node (ref J2) (pin 2))
(node (ref U1) (pin 27)))
(net (code 58) (name /DVI_D2+)
(node (ref R12) (pin 1))
(node (ref J5) (pin 1)))
(net (code 59) (name /PMOD0_1)
(node (ref U1) (pin 3))
(node (ref J4) (pin 3)))
(net (code 60) (name /PMOD0_0)
(node (ref J4) (pin 1))
(node (ref U1) (pin 2)))
(net (code 61) (name /PMOD0_6)
(node (ref U1) (pin 8))
(node (ref J4) (pin 6)))
(net (code 62) (name /PMOD0_5)
(node (ref U1) (pin 7))
(node (ref J4) (pin 4)))
(net (code 63) (name /PMOD0_4)
(node (ref U1) (pin 6))
(node (ref J4) (pin 2)))
(net (code 64) (name /PMOD0_3)
(node (ref J4) (pin 7))
(node (ref U1) (pin 5)))
(net (code 65) (name /PMOD0_2)
(node (ref J4) (pin 5))
(node (ref U1) (pin 4)))))

Binary file not shown.

View file

@ -1,39 +0,0 @@
(module HDMI-SS-53000 (layer F.Cu) (tedit 5F2B3614)
(attr smd)
(fp_text reference J5 (at -9.75 -2.5 -270) (layer F.SilkS)
(effects (font (size 0.7 0.7) (thickness 0.1)))
)
(fp_text value NOT_HDMI_A (at 0 -2.45) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -7.9 -7.4) (end -7.9 -6.2) (layer F.SilkS) (width 0.15))
(fp_line (start 7.9 -7.4) (end 7.9 -6.2) (layer F.SilkS) (width 0.15))
(fp_line (start -7.9 -7.4) (end 7.9 -7.4) (layer F.SilkS) (width 0.15))
(fp_line (start -7.9 -7.4) (end 7.9 -7.4) (layer F.CrtYd) (width 0.15))
(fp_line (start 7.9 -7.4) (end 7.9 1) (layer F.CrtYd) (width 0.15))
(fp_line (start 7.9 1) (end -7.9 1) (layer F.CrtYd) (width 0.15))
(fp_line (start -7.9 1) (end -7.9 -7.4) (layer F.CrtYd) (width 0.15))
(pad SH thru_hole circle (at -7.85 -4.9) (size 1.9 1.9) (drill 1.3) (layers *.Cu *.Mask))
(pad SH thru_hole circle (at 7.85 -4.9) (size 1.9 1.9) (drill 1.3) (layers *.Cu *.Mask))
(pad SH thru_hole circle (at -7.25 0) (size 1.9 1.9) (drill 1.3) (layers *.Cu *.Mask))
(pad SH thru_hole circle (at 7.25 0) (size 1.9 1.9) (drill 1.3) (layers *.Cu *.Mask))
(pad 19 smd rect (at 4.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 18 smd rect (at 3.75 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 17 smd rect (at 3.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 16 smd rect (at 2.75 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 15 smd rect (at 2.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 14 smd rect (at 1.75 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 13 smd rect (at 1.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 12 smd rect (at 0.75 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 11 smd rect (at 0.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 10 smd rect (at -0.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 9 smd rect (at -0.75 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 8 smd rect (at -1.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 7 smd rect (at -1.75 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at -2.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at -2.75 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at -3.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at -3.75 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -4.25 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -4.75 0.9) (size 0.3 1.9) (layers F.Cu F.Paste F.Mask))
)

View file

@ -1,11 +0,0 @@
(module MH_M2 (layer F.Cu) (tedit 5F12D2E7)
(fp_text reference REF** (at 0 0) (layer F.SilkS) hide
(effects (font (size 0.8 0.8) (thickness 0.12)))
)
(fp_text value MH_M2 (at 0 0) (layer F.Fab) hide
(effects (font (size 0.0254 0.0254) (thickness 0.00635)))
)
(fp_circle (center 0 0) (end 2 0) (layer F.CrtYd) (width 0.15))
(pad "" np_thru_hole circle (at 0 0) (size 2.4 2.4) (drill 2.4) (layers *.Cu *.Mask)
(solder_mask_margin 0.75))
)

View file

@ -1,38 +0,0 @@
(module PinHeader_1x05_P2.54mm_Vertical (layer F.Cu) (tedit 5F95547A)
(descr "Through hole straight pin header, 1x05, 2.54mm pitch, single row")
(tags "Through hole pin header THT 1x05 2.54mm single row")
(fp_text reference J2 (at 0 -2.33) (layer F.SilkS)
(effects (font (size 0.7 0.7) (thickness 0.1)))
)
(fp_text value Conn_01x05 (at 0 12.49) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 -1.27) (end 1.27 11.43) (layer F.Fab) (width 0.1))
(fp_line (start 1.27 11.43) (end -1.27 11.43) (layer F.Fab) (width 0.1))
(fp_line (start -1.27 11.43) (end -1.27 -0.635) (layer F.Fab) (width 0.1))
(fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1))
(fp_line (start -1.33 11.49) (end 1.33 11.49) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end -1.33 11.49) (layer F.SilkS) (width 0.12))
(fp_line (start 1.33 1.27) (end 1.33 11.49) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12))
(fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12))
(fp_line (start -1.5 -1.5) (end -1.5 11.75) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 11.75) (end 1.5 11.75) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.5 11.75) (end 1.5 -1.5) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.5 -1.5) (end -1.5 -1.5) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 5.08 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 3 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 4 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 5 thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x05_P2.54mm_Vertical.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View file

@ -1,134 +0,0 @@
(module PinHeader_2x06_P2.54mm_Horizontal (layer F.Cu) (tedit 5F95B57E)
(descr "Through hole angled pin header, 2x06, 2.54mm pitch, 6mm pin length, double rows")
(tags "Through hole angled pin header THT 2x06 2.54mm double row")
(fp_text reference J4 (at 4.66 -2.18 -270) (layer F.SilkS)
(effects (font (size 0.7 0.7) (thickness 0.1)))
)
(fp_text value 02x06 (at 5.655 14.97) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 5.31 6.35 -270) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 13.1 -1.8) (end -1.25 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 13.1 14.5) (end 13.1 -1.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.25 14.5) (end 13.1 14.5) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.25 -1.8) (end -1.25 14.5) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.27 -1.27) (end 0 -1.27) (layer F.SilkS) (width 0.12))
(fp_line (start -1.27 0) (end -1.27 -1.27) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 13.08) (end 1.497071 13.08) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 12.32) (end 1.497071 12.32) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 13.08) (end 3.98 13.08) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 12.32) (end 3.98 12.32) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 13.08) (end 6.64 13.08) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 12.32) (end 12.64 13.08) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 12.32) (end 12.64 12.32) (layer F.SilkS) (width 0.12))
(fp_line (start 3.98 11.43) (end 6.64 11.43) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 10.54) (end 1.497071 10.54) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 9.78) (end 1.497071 9.78) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 10.54) (end 3.98 10.54) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 9.78) (end 3.98 9.78) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 10.54) (end 6.64 10.54) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 9.78) (end 12.64 10.54) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 9.78) (end 12.64 9.78) (layer F.SilkS) (width 0.12))
(fp_line (start 3.98 8.89) (end 6.64 8.89) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 8) (end 1.497071 8) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 7.24) (end 1.497071 7.24) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 8) (end 3.98 8) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 7.24) (end 3.98 7.24) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 8) (end 6.64 8) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 7.24) (end 12.64 8) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 7.24) (end 12.64 7.24) (layer F.SilkS) (width 0.12))
(fp_line (start 3.98 6.35) (end 6.64 6.35) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 5.46) (end 1.497071 5.46) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 4.7) (end 1.497071 4.7) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 5.46) (end 3.98 5.46) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 4.7) (end 3.98 4.7) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 5.46) (end 6.64 5.46) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 4.7) (end 12.64 5.46) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 4.7) (end 12.64 4.7) (layer F.SilkS) (width 0.12))
(fp_line (start 3.98 3.81) (end 6.64 3.81) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 2.92) (end 1.497071 2.92) (layer F.SilkS) (width 0.12))
(fp_line (start 1.042929 2.16) (end 1.497071 2.16) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 2.92) (end 3.98 2.92) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 2.16) (end 3.98 2.16) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 2.92) (end 6.64 2.92) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 2.16) (end 12.64 2.92) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 2.16) (end 12.64 2.16) (layer F.SilkS) (width 0.12))
(fp_line (start 3.98 1.27) (end 6.64 1.27) (layer F.SilkS) (width 0.12))
(fp_line (start 1.11 0.38) (end 1.497071 0.38) (layer F.SilkS) (width 0.12))
(fp_line (start 1.11 -0.38) (end 1.497071 -0.38) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 0.38) (end 3.98 0.38) (layer F.SilkS) (width 0.12))
(fp_line (start 3.582929 -0.38) (end 3.98 -0.38) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 0.28) (end 12.64 0.28) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 0.16) (end 12.64 0.16) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 0.04) (end 12.64 0.04) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 -0.08) (end 12.64 -0.08) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 -0.2) (end 12.64 -0.2) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 -0.32) (end 12.64 -0.32) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 0.38) (end 6.64 0.38) (layer F.SilkS) (width 0.12))
(fp_line (start 12.64 -0.38) (end 12.64 0.38) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 -0.38) (end 12.64 -0.38) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 -1.33) (end 3.98 -1.33) (layer F.SilkS) (width 0.12))
(fp_line (start 6.64 14.03) (end 6.64 -1.33) (layer F.SilkS) (width 0.12))
(fp_line (start 3.98 14.03) (end 6.64 14.03) (layer F.SilkS) (width 0.12))
(fp_line (start 3.98 -1.33) (end 3.98 14.03) (layer F.SilkS) (width 0.12))
(fp_line (start 6.58 13.02) (end 12.58 13.02) (layer F.Fab) (width 0.1))
(fp_line (start 12.58 12.38) (end 12.58 13.02) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 12.38) (end 12.58 12.38) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 13.02) (end 4.04 13.02) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 12.38) (end -0.32 13.02) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 12.38) (end 4.04 12.38) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 10.48) (end 12.58 10.48) (layer F.Fab) (width 0.1))
(fp_line (start 12.58 9.84) (end 12.58 10.48) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 9.84) (end 12.58 9.84) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 10.48) (end 4.04 10.48) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 9.84) (end -0.32 10.48) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 9.84) (end 4.04 9.84) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 7.94) (end 12.58 7.94) (layer F.Fab) (width 0.1))
(fp_line (start 12.58 7.3) (end 12.58 7.94) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 7.3) (end 12.58 7.3) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 7.94) (end 4.04 7.94) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 7.3) (end -0.32 7.94) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 7.3) (end 4.04 7.3) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 5.4) (end 12.58 5.4) (layer F.Fab) (width 0.1))
(fp_line (start 12.58 4.76) (end 12.58 5.4) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 4.76) (end 12.58 4.76) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 5.4) (end 4.04 5.4) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 4.76) (end -0.32 5.4) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 4.76) (end 4.04 4.76) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 2.86) (end 12.58 2.86) (layer F.Fab) (width 0.1))
(fp_line (start 12.58 2.22) (end 12.58 2.86) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 2.22) (end 12.58 2.22) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 2.86) (end 4.04 2.86) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 2.22) (end -0.32 2.86) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 2.22) (end 4.04 2.22) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 0.32) (end 12.58 0.32) (layer F.Fab) (width 0.1))
(fp_line (start 12.58 -0.32) (end 12.58 0.32) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 -0.32) (end 12.58 -0.32) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 0.32) (end 4.04 0.32) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 -0.32) (end -0.32 0.32) (layer F.Fab) (width 0.1))
(fp_line (start -0.32 -0.32) (end 4.04 -0.32) (layer F.Fab) (width 0.1))
(fp_line (start 4.04 -0.635) (end 4.675 -1.27) (layer F.Fab) (width 0.1))
(fp_line (start 4.04 13.97) (end 4.04 -0.635) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 13.97) (end 4.04 13.97) (layer F.Fab) (width 0.1))
(fp_line (start 6.58 -1.27) (end 6.58 13.97) (layer F.Fab) (width 0.1))
(fp_line (start 4.675 -1.27) (end 6.58 -1.27) (layer F.Fab) (width 0.1))
(pad 12 thru_hole oval (at 2.54 12.7) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 11 thru_hole oval (at 0 12.7) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 10 thru_hole oval (at 2.54 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 9 thru_hole oval (at 0 10.16) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 8 thru_hole oval (at 2.54 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 7 thru_hole oval (at 0 7.62) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 6 thru_hole oval (at 2.54 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 5 thru_hole oval (at 0 5.08) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 4 thru_hole oval (at 2.54 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 3 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 2 thru_hole oval (at 2.54 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask))
(model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_2x06_P2.54mm_Horizontal.wrl
(offset (xyz 0 -12.7 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 180))
)
)

View file

@ -1,89 +0,0 @@
(module QFN-56_EP_7x7_Pitch0.4mm (layer F.Cu) (tedit 5EB44E02)
(attr smd)
(fp_text reference REF** (at 0 -5) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value QFN-56_EP_7x7_Pitch0.4mm (at 0 5) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.5 -3.5) (end -3.5 -2.5) (layer F.Fab) (width 0.15))
(fp_line (start -3.5 -2.5) (end -3.5 3.5) (layer F.Fab) (width 0.15))
(fp_line (start -3.5 3.5) (end 3.5 3.5) (layer F.Fab) (width 0.15))
(fp_line (start 3.5 3.5) (end 3.5 -3.5) (layer F.Fab) (width 0.15))
(fp_line (start 3.5 -3.5) (end -2.5 -3.5) (layer F.Fab) (width 0.15))
(fp_line (start 3 -3.65) (end 3.65 -3.65) (layer F.SilkS) (width 0.15))
(fp_line (start 3.65 -3.65) (end 3.65 -3) (layer F.SilkS) (width 0.15))
(fp_line (start 3 3.65) (end 3.65 3.65) (layer F.SilkS) (width 0.15))
(fp_line (start 3.65 3.65) (end 3.65 3) (layer F.SilkS) (width 0.15))
(fp_line (start -3 3.65) (end -3.65 3.65) (layer F.SilkS) (width 0.15))
(fp_line (start -3.65 3.65) (end -3.65 3) (layer F.SilkS) (width 0.15))
(fp_line (start -3 -3.65) (end -4 -3.65) (layer F.SilkS) (width 0.15))
(fp_line (start -4.25 -4.25) (end 4.25 -4.25) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.25 -4.25) (end 4.25 4.25) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.25 4.25) (end -4.25 4.25) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.25 4.25) (end -4.25 -4.25) (layer F.CrtYd) (width 0.05))
(pad 1 smd oval (at -3.5 -2.6 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 2 smd oval (at -3.5 -2.2 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 3 smd oval (at -3.5 -1.8 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 4 smd oval (at -3.5 -1.4 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 5 smd oval (at -3.5 -1 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 6 smd oval (at -3.5 -0.6 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 7 smd oval (at -3.5 -0.2 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 8 smd oval (at -3.5 0.2 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 9 smd oval (at -3.5 0.6 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 10 smd oval (at -3.5 1 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 11 smd oval (at -3.5 1.4 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 12 smd oval (at -3.5 1.8 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 13 smd oval (at -3.5 2.2 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 14 smd oval (at -3.5 2.6 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 15 smd oval (at -2.6 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 16 smd oval (at -2.2 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 17 smd oval (at -1.8 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 18 smd oval (at -1.4 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 19 smd oval (at -1 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 20 smd oval (at -0.6 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 21 smd oval (at -0.2 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 22 smd oval (at 0.2 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 23 smd oval (at 0.6 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 24 smd oval (at 1 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 25 smd oval (at 1.4 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 26 smd oval (at 1.8 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 27 smd oval (at 2.2 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 28 smd oval (at 2.6 3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 29 smd oval (at 3.5 2.6 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 30 smd oval (at 3.5 2.2 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 31 smd oval (at 3.5 1.8 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 32 smd oval (at 3.5 1.4 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 33 smd oval (at 3.5 1 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 34 smd oval (at 3.5 0.6 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 35 smd oval (at 3.5 0.2 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 36 smd oval (at 3.5 -0.2 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 37 smd oval (at 3.5 -0.6 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 38 smd oval (at 3.5 -1 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 39 smd oval (at 3.5 -1.4 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 40 smd oval (at 3.5 -1.8 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 41 smd oval (at 3.5 -2.2 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 42 smd oval (at 3.5 -2.6 90) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 43 smd oval (at 2.6 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 44 smd oval (at 2.2 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 45 smd oval (at 1.8 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 46 smd oval (at 1.4 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 47 smd oval (at 1 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 48 smd oval (at 0.6 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 49 smd oval (at 0.2 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 50 smd oval (at -0.2 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 51 smd oval (at -0.6 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 52 smd oval (at -1 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 53 smd oval (at -1.4 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 54 smd oval (at -1.8 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 55 smd oval (at -2.2 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 56 smd oval (at -2.6 -3.5) (size 0.2 1) (layers F.Cu F.Paste F.Mask))
(pad 0 smd rect (at -0.8 -0.8) (size 1.6 1.6) (layers F.Cu F.Paste F.Mask)
(solder_paste_margin -0.1))
(pad 0 smd rect (at -0.8 0.8) (size 1.6 1.6) (layers F.Cu F.Paste F.Mask)
(solder_paste_margin -0.1))
(pad 0 smd rect (at 0.8 -0.8) (size 1.6 1.6) (layers F.Cu F.Paste F.Mask)
(solder_paste_margin -0.1))
(pad 0 smd rect (at 0.8 0.8) (size 1.6 1.6) (layers F.Cu F.Paste F.Mask)
(solder_paste_margin -0.1))
)

View file

@ -1,53 +0,0 @@
(module S70KS128 (layer F.Cu) (tedit 5F3D532D)
(attr smd)
(fp_text reference REF** (at 0 -5) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value S70KS128 (at 0 5) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2 -4) (end -3 -3) (layer F.Fab) (width 0.15))
(fp_line (start -3 -3) (end -3 4) (layer F.Fab) (width 0.15))
(fp_line (start -3 4) (end 3 4) (layer F.Fab) (width 0.15))
(fp_line (start 3 4) (end 3 -4) (layer F.Fab) (width 0.15))
(fp_line (start 3 -4) (end -2 -4) (layer F.Fab) (width 0.15))
(fp_line (start 1.65 -4.15) (end 3.15 -4.15) (layer F.SilkS) (width 0.15))
(fp_line (start 3.15 -4.15) (end 3.15 -2.15) (layer F.SilkS) (width 0.15))
(fp_line (start 1.65 -4.15) (end 3.15 -4.15) (layer F.SilkS) (width 0.15))
(fp_line (start 3.15 -4.15) (end 3.15 -2.15) (layer F.SilkS) (width 0.15))
(fp_line (start 1.65 4.15) (end 3.15 4.15) (layer F.SilkS) (width 0.15))
(fp_line (start 3.15 4.15) (end 3.15 2.15) (layer F.SilkS) (width 0.15))
(fp_line (start 1.65 -4.15) (end 3.15 -4.15) (layer F.SilkS) (width 0.15))
(fp_line (start 3.15 -4.15) (end 3.15 -2.15) (layer F.SilkS) (width 0.15))
(fp_line (start -1.65 4.15) (end -3.15 4.15) (layer F.SilkS) (width 0.15))
(fp_line (start -3.15 4.15) (end -3.15 2.15) (layer F.SilkS) (width 0.15))
(fp_line (start -1.65 -4.15) (end -2 -4.15) (layer F.SilkS) (width 0.15))
(fp_line (start -2 -4.15) (end -3.15 -3) (layer F.SilkS) (width 0.15))
(fp_line (start -3.15 -3) (end -3.15 -2.15) (layer F.SilkS) (width 0.15))
(fp_circle (center -3 -4) (end -3 -3.9) (layer F.SilkS) (width 0.2))
(fp_line (start -3.25 -4.25) (end 3.25 -4.25) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.25 -4.25) (end 3.25 4.25) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.25 4.25) (end -3.25 4.25) (layer F.CrtYd) (width 0.05))
(fp_line (start -3.25 4.25) (end -3.25 -4.25) (layer F.CrtYd) (width 0.05))
(pad B1 smd circle (at -2 -1) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad C1 smd circle (at -2 0) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad D1 smd circle (at -2 1) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad E1 smd circle (at -2 2) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad A2 smd circle (at -1 -2) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad B2 smd circle (at -1 -1) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad D2 smd circle (at -1 1) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad E2 smd circle (at -1 2) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad A3 smd circle (at 0 -2) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad B3 smd circle (at 0 -1) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad C3 smd circle (at 0 0) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad D3 smd circle (at 0 1) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad E3 smd circle (at 0 2) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad A4 smd circle (at 1 -2) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad B4 smd circle (at 1 -1) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad C4 smd circle (at 1 0) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad D4 smd circle (at 1 1) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad E4 smd circle (at 1 2) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad A5 smd circle (at 2 -2) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad D5 smd circle (at 2 1) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
(pad E5 smd circle (at 2 2) (size 0.5 0.5) (layers F.Cu F.Paste F.Mask))
)

View file

@ -1,26 +0,0 @@
(module SOIC8-150-208 (layer F.Cu) (tedit 0)
(attr smd)
(fp_text reference REF** (at -3.705 0 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SOIC8-150-208 (at 0 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.905 1.75) (end -2.705 0.95) (layer F.SilkS) (width 0.15))
(fp_line (start -2.705 0.95) (end -2.705 -1.75) (layer F.SilkS) (width 0.15))
(fp_line (start -2.705 -1.75) (end 2.705 -1.75) (layer F.SilkS) (width 0.15))
(fp_line (start 2.705 -1.75) (end 2.705 1.75) (layer F.SilkS) (width 0.15))
(fp_line (start 2.705 1.75) (end -1.905 1.75) (layer F.SilkS) (width 0.15))
(fp_line (start -2.85 -1.9) (end 2.85 -1.9) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.85 -1.9) (end 2.85 1.9) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.85 1.9) (end -2.85 1.9) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.85 1.9) (end -2.85 -1.9) (layer F.CrtYd) (width 0.05))
(pad 8 smd rect (at -1.905 -3.2) (size 0.6 2.3) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at -1.905 3.2) (size 0.6 2.3) (layers F.Cu F.Paste F.Mask))
(pad 7 smd rect (at -0.635 -3.2) (size 0.6 2.3) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at -0.635 3.2) (size 0.6 2.3) (layers F.Cu F.Paste F.Mask))
(pad 6 smd rect (at 0.635 -3.2) (size 0.6 2.3) (layers F.Cu F.Paste F.Mask))
(pad 3 smd rect (at 0.635 3.2) (size 0.6 2.3) (layers F.Cu F.Paste F.Mask))
(pad 5 smd rect (at 1.905 -3.2) (size 0.6 2.3) (layers F.Cu F.Paste F.Mask))
(pad 4 smd rect (at 1.905 3.2) (size 0.6 2.3) (layers F.Cu F.Paste F.Mask))
)

View file

@ -1,74 +0,0 @@
(module SW_SPST_PTS256 (layer F.Cu) (tedit 5EF3B25D)
(descr "ALPS 5.2mm Square Low-profile Type (Surface Mount) SKQG Series, Without stem, http://www.alps.com/prod/info/E/HTML/Tact/SurfaceMount/SKQG/SKQGAEE010.html")
(tags "SPST Button Switch")
(attr smd)
(fp_text reference SW2 (at 0 -3.6) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_Push (at 0 3.6) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start 1.4 -2.6) (end 2.6 -1.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.6 -1.4) (end 2.6 1.4) (layer F.Fab) (width 0.1))
(fp_line (start 2.6 1.4) (end 1.4 2.6) (layer F.Fab) (width 0.1))
(fp_line (start 1.4 2.6) (end -1.4 2.6) (layer F.Fab) (width 0.1))
(fp_line (start -1.4 2.6) (end -2.6 1.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.6 1.4) (end -2.6 -1.4) (layer F.Fab) (width 0.1))
(fp_line (start -2.6 -1.4) (end -1.4 -2.6) (layer F.Fab) (width 0.1))
(fp_line (start -1.4 -2.6) (end 1.4 -2.6) (layer F.Fab) (width 0.1))
(fp_line (start -4.25 -2.85) (end -4.25 2.85) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.25 -2.85) (end -4.25 -2.85) (layer F.CrtYd) (width 0.05))
(fp_line (start 4.25 2.85) (end 4.25 -2.85) (layer F.CrtYd) (width 0.05))
(fp_line (start -4.25 2.85) (end 4.25 2.85) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.72 1.04) (end -2.72 -1.04) (layer F.SilkS) (width 0.12))
(fp_line (start 1.45 -2.72) (end 1.94 -2.23) (layer F.SilkS) (width 0.12))
(fp_circle (center 0 0) (end 1.5 0) (layer F.Fab) (width 0.1))
(fp_line (start 2.72 1.04) (end 2.72 -1.04) (layer F.SilkS) (width 0.12))
(fp_line (start -1.45 -2.72) (end -1.94 -2.23) (layer F.SilkS) (width 0.12))
(fp_line (start -1.45 -2.72) (end 1.45 -2.72) (layer F.SilkS) (width 0.12))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.6 0.6) (thickness 0.09)))
)
(fp_line (start -1.45 2.72) (end -1.94 2.23) (layer F.SilkS) (width 0.12))
(fp_line (start -1.45 2.72) (end 1.45 2.72) (layer F.SilkS) (width 0.12))
(fp_line (start 1.45 2.72) (end 1.94 2.23) (layer F.SilkS) (width 0.12))
(fp_line (start 4 -1.3) (end 4 1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start 4 1.3) (end 1 1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start 1 1.3) (end 1 -1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start 1 -1.3) (end 4 -1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start 1 -0.3) (end 2 -1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start 1 0.7) (end 3 -1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start 4 -1.3) (end 1.4 1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start 2.4 1.3) (end 4 -0.3) (layer Dwgs.User) (width 0.05))
(fp_line (start 4 0.7) (end 3.4 1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start -1 0.7) (end -1.6 1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start -4 1.3) (end -4 -1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start -4 0.7) (end -2 -1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start -1 1.3) (end -4 1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start -4 -1.3) (end -1 -1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start -1 -1.3) (end -3.6 1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start -2.6 1.3) (end -1 -0.3) (layer Dwgs.User) (width 0.05))
(fp_line (start -4 -0.3) (end -3 -1.3) (layer Dwgs.User) (width 0.05))
(fp_line (start -1 -1.3) (end -1 1.3) (layer Dwgs.User) (width 0.05))
(fp_text user "No F.Cu tracks" (at 2.5 0.2) (layer Cmts.User)
(effects (font (size 0.2 0.2) (thickness 0.03)))
)
(fp_text user "KEEP-OUT ZONE" (at 2.5 -0.2) (layer Cmts.User)
(effects (font (size 0.2 0.2) (thickness 0.03)))
)
(fp_text user "KEEP-OUT ZONE" (at -2.5 -0.2) (layer Cmts.User)
(effects (font (size 0.2 0.2) (thickness 0.03)))
)
(fp_text user "No F.Cu tracks" (at -2.5 0.2) (layer Cmts.User)
(effects (font (size 0.2 0.2) (thickness 0.03)))
)
(pad 1 smd rect (at -3.1 -1.85) (size 1.8 1.1) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at 3.1 -1.85) (size 1.8 1.1) (layers F.Cu F.Paste F.Mask))
(pad ~ smd rect (at -3.1 1.85) (size 1.8 1.1) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 3.1 1.85) (size 1.8 1.1) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_SPST_SKQG_WithoutStem.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View file

@ -1,43 +0,0 @@
(module SW_SPST_PTS815 (layer F.Cu) (tedit 5F9580B9)
(descr "C&K Components, PTS 810 Series, Microminiature SMT Top Actuated, http://www.ckswitches.com/media/1476/pts810.pdf")
(tags "SPST Button Switch")
(attr smd)
(fp_text reference SW3 (at 0 -2.6) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value SW_Push (at 0 2.6) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -2.85 -1.85) (end 2.85 -1.85) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.85 1.85) (end -2.85 -1.85) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.85 1.85) (end -2.85 1.85) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.85 -1.85) (end 2.85 1.85) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.6 0.6) (thickness 0.09)))
)
(fp_line (start 2.2 -1.58) (end 2.2 -1.7) (layer F.SilkS) (width 0.12))
(fp_line (start 2.2 0.57) (end 2.2 -0.57) (layer F.SilkS) (width 0.12))
(fp_line (start 2.2 1.7) (end 2.2 1.58) (layer F.SilkS) (width 0.12))
(fp_line (start -2.2 1.7) (end 2.2 1.7) (layer F.SilkS) (width 0.12))
(fp_line (start -2.2 1.58) (end -2.2 1.7) (layer F.SilkS) (width 0.12))
(fp_line (start -2.2 -0.57) (end -2.2 0.57) (layer F.SilkS) (width 0.12))
(fp_line (start -2.2 -1.7) (end -2.2 -1.58) (layer F.SilkS) (width 0.12))
(fp_line (start 2.2 -1.7) (end -2.2 -1.7) (layer F.SilkS) (width 0.12))
(fp_line (start 0.4 1.1) (end -0.4 1.1) (layer F.Fab) (width 0.1))
(fp_line (start -0.4 -1.1) (end 0.4 -1.1) (layer F.Fab) (width 0.1))
(fp_arc (start -0.4 0) (end -0.4 1.1) (angle 180) (layer F.Fab) (width 0.1))
(fp_line (start -2.1 1.6) (end 2.1 1.6) (layer F.Fab) (width 0.1))
(fp_line (start -2.1 -1.6) (end -2.1 1.6) (layer F.Fab) (width 0.1))
(fp_line (start 2.1 -1.6) (end -2.1 -1.6) (layer F.Fab) (width 0.1))
(fp_line (start 2.1 1.6) (end 2.1 -1.6) (layer F.Fab) (width 0.1))
(fp_arc (start 0.4 0) (end 0.4 -1.1) (angle 180) (layer F.Fab) (width 0.1))
(pad "" smd rect (at -2.075 -1.075) (size 1.05 0.65) (layers F.Cu F.Paste F.Mask))
(pad 1 smd rect (at 2.075 -1.075) (size 1.05 0.65) (layers F.Cu F.Paste F.Mask))
(pad ~ smd rect (at -2.075 1.075) (size 1.05 0.65) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 2.075 1.075) (size 1.05 0.65) (layers F.Cu F.Paste F.Mask))
(model ${KISYS3DMOD}/Button_Switch_SMD.3dshapes/SW_SPST_PTS810.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View file

@ -1,43 +0,0 @@
update=Tue 23 Jun 2020 19:47:04 BST
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=
SpiceAjustPassiveValues=0
LabSize=50
ERC_TestSimilarLabels=1

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,3 +0,0 @@
(sym_lib_table
(lib (name picodvi)(type Legacy)(uri ${KIPRJMOD}/picodvi.lib)(options "")(descr ""))
)

View file

@ -1,2 +0,0 @@
_autosave-*
*-backups

File diff suppressed because it is too large Load diff

View file

@ -1,3 +0,0 @@
(fp_lib_table
(lib (name picodvi)(type KiCad)(uri ${KIPRJMOD}/picodvi.pretty)(options "")(descr ""))
)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,408 +0,0 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2-bee76a0~70~ubuntu18.04.1*
G04 #@! TF.CreationDate,2020-08-11T13:50:02+01:00*
G04 #@! TF.ProjectId,picodvi,7069636f-6476-4692-9e6b-696361645f70,rev?*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Legend,Bot*
G04 #@! TF.FilePolarity,Positive*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW 5.0.2-bee76a0~70~ubuntu18.04.1) date Tue 11 Aug 2020 13:50:02 BST*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.120000*%
%ADD11C,0.100000*%
G04 APERTURE END LIST*
D10*
X214464761Y-123297904D02*
X214731428Y-122916952D01*
X214921904Y-123297904D02*
X214921904Y-122497904D01*
X214617142Y-122497904D01*
X214540952Y-122536000D01*
X214502857Y-122574095D01*
X214464761Y-122650285D01*
X214464761Y-122764571D01*
X214502857Y-122840761D01*
X214540952Y-122878857D01*
X214617142Y-122916952D01*
X214921904Y-122916952D01*
X213817142Y-123259809D02*
X213893333Y-123297904D01*
X214045714Y-123297904D01*
X214121904Y-123259809D01*
X214160000Y-123183619D01*
X214160000Y-122878857D01*
X214121904Y-122802666D01*
X214045714Y-122764571D01*
X213893333Y-122764571D01*
X213817142Y-122802666D01*
X213779047Y-122878857D01*
X213779047Y-122955047D01*
X214160000Y-123031238D01*
X213512380Y-122764571D02*
X213321904Y-123297904D01*
X213131428Y-122764571D01*
X211950476Y-122878857D02*
X211836190Y-122916952D01*
X211798095Y-122955047D01*
X211760000Y-123031238D01*
X211760000Y-123145523D01*
X211798095Y-123221714D01*
X211836190Y-123259809D01*
X211912380Y-123297904D01*
X212217142Y-123297904D01*
X212217142Y-122497904D01*
X211950476Y-122497904D01*
X211874285Y-122536000D01*
X211836190Y-122574095D01*
X211798095Y-122650285D01*
X211798095Y-122726476D01*
X211836190Y-122802666D01*
X211874285Y-122840761D01*
X211950476Y-122878857D01*
X212217142Y-122878857D01*
G04 #@! TO.C,C2*
D11*
X230116666Y-108750000D02*
X230150000Y-108783333D01*
X230250000Y-108816666D01*
X230316666Y-108816666D01*
X230416666Y-108783333D01*
X230483333Y-108716666D01*
X230516666Y-108650000D01*
X230550000Y-108516666D01*
X230550000Y-108416666D01*
X230516666Y-108283333D01*
X230483333Y-108216666D01*
X230416666Y-108150000D01*
X230316666Y-108116666D01*
X230250000Y-108116666D01*
X230150000Y-108150000D01*
X230116666Y-108183333D01*
X229850000Y-108183333D02*
X229816666Y-108150000D01*
X229750000Y-108116666D01*
X229583333Y-108116666D01*
X229516666Y-108150000D01*
X229483333Y-108183333D01*
X229450000Y-108250000D01*
X229450000Y-108316666D01*
X229483333Y-108416666D01*
X229883333Y-108816666D01*
X229450000Y-108816666D01*
G04 #@! TO.C,C3*
X232366666Y-101750000D02*
X232400000Y-101783333D01*
X232500000Y-101816666D01*
X232566666Y-101816666D01*
X232666666Y-101783333D01*
X232733333Y-101716666D01*
X232766666Y-101650000D01*
X232800000Y-101516666D01*
X232800000Y-101416666D01*
X232766666Y-101283333D01*
X232733333Y-101216666D01*
X232666666Y-101150000D01*
X232566666Y-101116666D01*
X232500000Y-101116666D01*
X232400000Y-101150000D01*
X232366666Y-101183333D01*
X232133333Y-101116666D02*
X231700000Y-101116666D01*
X231933333Y-101383333D01*
X231833333Y-101383333D01*
X231766666Y-101416666D01*
X231733333Y-101450000D01*
X231700000Y-101516666D01*
X231700000Y-101683333D01*
X231733333Y-101750000D01*
X231766666Y-101783333D01*
X231833333Y-101816666D01*
X232033333Y-101816666D01*
X232100000Y-101783333D01*
X232133333Y-101750000D01*
G04 #@! TO.C,C4*
X233866666Y-105250000D02*
X233900000Y-105283333D01*
X234000000Y-105316666D01*
X234066666Y-105316666D01*
X234166666Y-105283333D01*
X234233333Y-105216666D01*
X234266666Y-105150000D01*
X234300000Y-105016666D01*
X234300000Y-104916666D01*
X234266666Y-104783333D01*
X234233333Y-104716666D01*
X234166666Y-104650000D01*
X234066666Y-104616666D01*
X234000000Y-104616666D01*
X233900000Y-104650000D01*
X233866666Y-104683333D01*
X233266666Y-104850000D02*
X233266666Y-105316666D01*
X233433333Y-104583333D02*
X233600000Y-105083333D01*
X233166666Y-105083333D01*
G04 #@! TO.C,C5*
X231616666Y-108750000D02*
X231650000Y-108783333D01*
X231750000Y-108816666D01*
X231816666Y-108816666D01*
X231916666Y-108783333D01*
X231983333Y-108716666D01*
X232016666Y-108650000D01*
X232050000Y-108516666D01*
X232050000Y-108416666D01*
X232016666Y-108283333D01*
X231983333Y-108216666D01*
X231916666Y-108150000D01*
X231816666Y-108116666D01*
X231750000Y-108116666D01*
X231650000Y-108150000D01*
X231616666Y-108183333D01*
X230983333Y-108116666D02*
X231316666Y-108116666D01*
X231350000Y-108450000D01*
X231316666Y-108416666D01*
X231250000Y-108383333D01*
X231083333Y-108383333D01*
X231016666Y-108416666D01*
X230983333Y-108450000D01*
X230950000Y-108516666D01*
X230950000Y-108683333D01*
X230983333Y-108750000D01*
X231016666Y-108783333D01*
X231083333Y-108816666D01*
X231250000Y-108816666D01*
X231316666Y-108783333D01*
X231350000Y-108750000D01*
G04 #@! TO.C,C6*
X228366666Y-107500000D02*
X228400000Y-107533333D01*
X228500000Y-107566666D01*
X228566666Y-107566666D01*
X228666666Y-107533333D01*
X228733333Y-107466666D01*
X228766666Y-107400000D01*
X228800000Y-107266666D01*
X228800000Y-107166666D01*
X228766666Y-107033333D01*
X228733333Y-106966666D01*
X228666666Y-106900000D01*
X228566666Y-106866666D01*
X228500000Y-106866666D01*
X228400000Y-106900000D01*
X228366666Y-106933333D01*
X227766666Y-106866666D02*
X227900000Y-106866666D01*
X227966666Y-106900000D01*
X228000000Y-106933333D01*
X228066666Y-107033333D01*
X228100000Y-107166666D01*
X228100000Y-107433333D01*
X228066666Y-107500000D01*
X228033333Y-107533333D01*
X227966666Y-107566666D01*
X227833333Y-107566666D01*
X227766666Y-107533333D01*
X227733333Y-107500000D01*
X227700000Y-107433333D01*
X227700000Y-107266666D01*
X227733333Y-107200000D01*
X227766666Y-107166666D01*
X227833333Y-107133333D01*
X227966666Y-107133333D01*
X228033333Y-107166666D01*
X228066666Y-107200000D01*
X228100000Y-107266666D01*
G04 #@! TO.C,C8*
X229351666Y-101750000D02*
X229385000Y-101783333D01*
X229485000Y-101816666D01*
X229551666Y-101816666D01*
X229651666Y-101783333D01*
X229718333Y-101716666D01*
X229751666Y-101650000D01*
X229785000Y-101516666D01*
X229785000Y-101416666D01*
X229751666Y-101283333D01*
X229718333Y-101216666D01*
X229651666Y-101150000D01*
X229551666Y-101116666D01*
X229485000Y-101116666D01*
X229385000Y-101150000D01*
X229351666Y-101183333D01*
X228951666Y-101416666D02*
X229018333Y-101383333D01*
X229051666Y-101350000D01*
X229085000Y-101283333D01*
X229085000Y-101250000D01*
X229051666Y-101183333D01*
X229018333Y-101150000D01*
X228951666Y-101116666D01*
X228818333Y-101116666D01*
X228751666Y-101150000D01*
X228718333Y-101183333D01*
X228685000Y-101250000D01*
X228685000Y-101283333D01*
X228718333Y-101350000D01*
X228751666Y-101383333D01*
X228818333Y-101416666D01*
X228951666Y-101416666D01*
X229018333Y-101450000D01*
X229051666Y-101483333D01*
X229085000Y-101550000D01*
X229085000Y-101683333D01*
X229051666Y-101750000D01*
X229018333Y-101783333D01*
X228951666Y-101816666D01*
X228818333Y-101816666D01*
X228751666Y-101783333D01*
X228718333Y-101750000D01*
X228685000Y-101683333D01*
X228685000Y-101550000D01*
X228718333Y-101483333D01*
X228751666Y-101450000D01*
X228818333Y-101416666D01*
G04 #@! TO.C,C9*
X230866666Y-101750000D02*
X230900000Y-101783333D01*
X231000000Y-101816666D01*
X231066666Y-101816666D01*
X231166666Y-101783333D01*
X231233333Y-101716666D01*
X231266666Y-101650000D01*
X231300000Y-101516666D01*
X231300000Y-101416666D01*
X231266666Y-101283333D01*
X231233333Y-101216666D01*
X231166666Y-101150000D01*
X231066666Y-101116666D01*
X231000000Y-101116666D01*
X230900000Y-101150000D01*
X230866666Y-101183333D01*
X230533333Y-101816666D02*
X230400000Y-101816666D01*
X230333333Y-101783333D01*
X230300000Y-101750000D01*
X230233333Y-101650000D01*
X230200000Y-101516666D01*
X230200000Y-101250000D01*
X230233333Y-101183333D01*
X230266666Y-101150000D01*
X230333333Y-101116666D01*
X230466666Y-101116666D01*
X230533333Y-101150000D01*
X230566666Y-101183333D01*
X230600000Y-101250000D01*
X230600000Y-101416666D01*
X230566666Y-101483333D01*
X230533333Y-101516666D01*
X230466666Y-101550000D01*
X230333333Y-101550000D01*
X230266666Y-101516666D01*
X230233333Y-101483333D01*
X230200000Y-101416666D01*
G04 #@! TO.C,R7*
X236116666Y-113066666D02*
X236350000Y-112733333D01*
X236516666Y-113066666D02*
X236516666Y-112366666D01*
X236250000Y-112366666D01*
X236183333Y-112400000D01*
X236150000Y-112433333D01*
X236116666Y-112500000D01*
X236116666Y-112600000D01*
X236150000Y-112666666D01*
X236183333Y-112700000D01*
X236250000Y-112733333D01*
X236516666Y-112733333D01*
X235883333Y-112366666D02*
X235416666Y-112366666D01*
X235716666Y-113066666D01*
G04 #@! TO.C,R8*
X237366666Y-113066666D02*
X237600000Y-112733333D01*
X237766666Y-113066666D02*
X237766666Y-112366666D01*
X237500000Y-112366666D01*
X237433333Y-112400000D01*
X237400000Y-112433333D01*
X237366666Y-112500000D01*
X237366666Y-112600000D01*
X237400000Y-112666666D01*
X237433333Y-112700000D01*
X237500000Y-112733333D01*
X237766666Y-112733333D01*
X236966666Y-112666666D02*
X237033333Y-112633333D01*
X237066666Y-112600000D01*
X237100000Y-112533333D01*
X237100000Y-112500000D01*
X237066666Y-112433333D01*
X237033333Y-112400000D01*
X236966666Y-112366666D01*
X236833333Y-112366666D01*
X236766666Y-112400000D01*
X236733333Y-112433333D01*
X236700000Y-112500000D01*
X236700000Y-112533333D01*
X236733333Y-112600000D01*
X236766666Y-112633333D01*
X236833333Y-112666666D01*
X236966666Y-112666666D01*
X237033333Y-112700000D01*
X237066666Y-112733333D01*
X237100000Y-112800000D01*
X237100000Y-112933333D01*
X237066666Y-113000000D01*
X237033333Y-113033333D01*
X236966666Y-113066666D01*
X236833333Y-113066666D01*
X236766666Y-113033333D01*
X236733333Y-113000000D01*
X236700000Y-112933333D01*
X236700000Y-112800000D01*
X236733333Y-112733333D01*
X236766666Y-112700000D01*
X236833333Y-112666666D01*
G04 #@! TO.C,R9*
X238616666Y-113066666D02*
X238850000Y-112733333D01*
X239016666Y-113066666D02*
X239016666Y-112366666D01*
X238750000Y-112366666D01*
X238683333Y-112400000D01*
X238650000Y-112433333D01*
X238616666Y-112500000D01*
X238616666Y-112600000D01*
X238650000Y-112666666D01*
X238683333Y-112700000D01*
X238750000Y-112733333D01*
X239016666Y-112733333D01*
X238283333Y-113066666D02*
X238150000Y-113066666D01*
X238083333Y-113033333D01*
X238050000Y-113000000D01*
X237983333Y-112900000D01*
X237950000Y-112766666D01*
X237950000Y-112500000D01*
X237983333Y-112433333D01*
X238016666Y-112400000D01*
X238083333Y-112366666D01*
X238216666Y-112366666D01*
X238283333Y-112400000D01*
X238316666Y-112433333D01*
X238350000Y-112500000D01*
X238350000Y-112666666D01*
X238316666Y-112733333D01*
X238283333Y-112766666D01*
X238216666Y-112800000D01*
X238083333Y-112800000D01*
X238016666Y-112766666D01*
X237983333Y-112733333D01*
X237950000Y-112666666D01*
G04 #@! TD*
M02*

File diff suppressed because it is too large Load diff

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