Compare commits
No commits in common. "master" and "gh-pages" have entirely different histories.
419 changed files with 2980 additions and 723911 deletions
46
.github/ISSUE_TEMPLATE.md
vendored
46
.github/ISSUE_TEMPLATE.md
vendored
|
|
@ -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**
|
||||
26
.github/PULL_REQUEST_TEMPLATE.md
vendored
26
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
|
@ -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.
|
||||
32
.github/workflows/githubci.yml
vendored
32
.github/workflows/githubci.yml
vendored
|
|
@ -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
5
.gitignore
vendored
|
|
@ -1,5 +0,0 @@
|
|||
Doxyfile*
|
||||
doxygen_sqlite3.db
|
||||
html
|
||||
.vscode
|
||||
build
|
||||
1
.nojekyll
Normal file
1
.nojekyll
Normal file
|
|
@ -0,0 +1 @@
|
|||
|
||||
29
LICENSE
29
LICENSE
|
|
@ -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
303
Readme.md
|
|
@ -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
|
||||
===========================================
|
||||
|
||||

|
||||
|
||||
*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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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):
|
||||
|
||||

|
||||
|
||||
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".
|
||||
|
||||

|
||||
|
||||
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):
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
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:
|
||||
|
||||

|
||||
|
||||
Oh. Maybe? It fits...
|
||||
|
||||

|
||||
|
||||
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:
|
||||
|
||||

|
||||
|
||||
|
||||
[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:
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
|
@ -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
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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() {
|
||||
}
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
PicoDVI Hardware
|
||||
================
|
||||
|
||||
This directory contains schematics and layout files
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
0
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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*
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
||||
Binary file not shown.
|
|
@ -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.
|
|
@ -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
|
|
@ -1,3 +0,0 @@
|
|||
EESchema-DOCLIB Version 2.0
|
||||
#
|
||||
#End Doc Library
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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.
|
|
@ -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))
|
||||
)
|
||||
|
|
@ -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))
|
||||
)
|
||||
|
|
@ -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))
|
||||
)
|
||||
)
|
||||
|
|
@ -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))
|
||||
)
|
||||
)
|
||||
|
|
@ -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))
|
||||
)
|
||||
|
|
@ -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))
|
||||
)
|
||||
|
|
@ -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))
|
||||
)
|
||||
|
|
@ -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))
|
||||
)
|
||||
)
|
||||
|
|
@ -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))
|
||||
)
|
||||
)
|
||||
|
|
@ -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
|
|
@ -1,3 +0,0 @@
|
|||
(sym_lib_table
|
||||
(lib (name picodvi)(type Legacy)(uri ${KIPRJMOD}/picodvi.lib)(options "")(descr ""))
|
||||
)
|
||||
2
hardware/mini_board/.gitignore
vendored
2
hardware/mini_board/.gitignore
vendored
|
|
@ -1,2 +0,0 @@
|
|||
_autosave-*
|
||||
*-backups
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
|
@ -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
|
|
@ -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
Loading…
Reference in a new issue